Import Cobalt 4.11837
diff --git a/src/base/platform_file_starboard.cc b/src/base/platform_file_starboard.cc
index c28fd65..cc116c6 100644
--- a/src/base/platform_file_starboard.cc
+++ b/src/base/platform_file_starboard.cc
@@ -161,21 +161,7 @@
int ReadPlatformFileAtCurrentPos(PlatformFile file, char *data, int size) {
base::ThreadRestrictions::AssertIOAllowed();
- if (file < 0 || size < 0)
- return -1;
-
- int bytes_read = 0;
- int rv;
- do {
- rv = SbFileRead(file, data, size);
- if (rv <= 0) {
- break;
- }
-
- bytes_read += rv;
- } while (bytes_read < size);
-
- return bytes_read ? bytes_read : rv;
+ return SbFileReadAll(file, data, size);
}
int ReadPlatformFileNoBestEffort(PlatformFile file,
@@ -251,22 +237,7 @@
const char* data,
int size) {
base::ThreadRestrictions::AssertIOAllowed();
- if (size < 0) {
- return -1;
- }
-
- int bytes_written = 0;
- int result;
- do {
- result = SbFileWrite(file, data, size);
- if (result <= 0) {
- break;
- }
-
- bytes_written += result;
- } while (bytes_written < size);
-
- return bytes_written ? bytes_written : result;
+ return SbFileWriteAll(file, data, size);
}
int WritePlatformFileCurPosNoBestEffort(PlatformFile file,
diff --git a/src/cobalt/base/tokens.h b/src/cobalt/base/tokens.h
index b2e24cd..cae31dd 100644
--- a/src/cobalt/base/tokens.h
+++ b/src/cobalt/base/tokens.h
@@ -83,6 +83,7 @@
MacroOpWithNameAndValue(class_selector_prefix, ".") \
MacroOpWithNameAndValue(comment_node_name, "#comment") \
MacroOpWithNameAndValue(document_name, "#document") \
+ MacroOpWithNameAndValue(domcontentloaded, "DOMContentLoaded") \
MacroOpWithNameAndValue(empty_pseudo_class_selector, "empty") \
MacroOpWithNameAndValue(focus_pseudo_class_selector, "focus") \
MacroOpWithNameAndValue(hover_pseudo_class_selector, "hover") \
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsSingleOperationInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsSingleOperationInterface.cc
index aaf933d..2bd13c6 100644
--- a/src/cobalt/bindings/generated/mozjs/testing/MozjsSingleOperationInterface.cc
+++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsSingleOperationInterface.cc
@@ -58,13 +58,13 @@
bool* had_exception) const {
bool success = false;
base::optional<int32_t > cobalt_return_value;
+ JSAutoRequest auto_request(context_);
JSExceptionState* previous_exception_state = JS_SaveExceptionState(context_);
// This could be set to NULL if it was garbage collected.
JS::RootedObject implementing_object(context_, implementing_object_.Get());
DLOG_IF(WARNING, !implementing_object) << "Implementing object is NULL.";
if (implementing_object) {
- JSAutoRequest auto_request(context_);
JSAutoCompartment auto_compartment(context_, implementing_object);
// Get callable object.
diff --git a/src/cobalt/bindings/mozjs/templates/callback-interface.cc.template b/src/cobalt/bindings/mozjs/templates/callback-interface.cc.template
index f307bbc..115f228 100644
--- a/src/cobalt/bindings/mozjs/templates/callback-interface.cc.template
+++ b/src/cobalt/bindings/mozjs/templates/callback-interface.cc.template
@@ -56,13 +56,13 @@
{% if overload.type != 'void' %}
{{overload.type}} cobalt_return_value;
{% endif %}
+ JSAutoRequest auto_request(context_);
JSExceptionState* previous_exception_state = JS_SaveExceptionState(context_);
// This could be set to NULL if it was garbage collected.
JS::RootedObject implementing_object(context_, implementing_object_.Get());
DLOG_IF(WARNING, !implementing_object) << "Implementing object is NULL.";
if (implementing_object) {
- JSAutoRequest auto_request(context_);
JSAutoCompartment auto_compartment(context_, implementing_object);
// Get callable object.
diff --git a/src/cobalt/bindings/testing/global_interface_bindings_test.cc b/src/cobalt/bindings/testing/global_interface_bindings_test.cc
index 5f8b90c..5f50d61 100644
--- a/src/cobalt/bindings/testing/global_interface_bindings_test.cc
+++ b/src/cobalt/bindings/testing/global_interface_bindings_test.cc
@@ -38,7 +38,9 @@
} // namespace
TEST_F(GlobalInterfaceBindingsTest, GlobalWindowIsThis) {
- EXPECT_TRUE(EvaluateScript("window === this;", NULL));
+ std::string result;
+ EXPECT_TRUE(EvaluateScript("window === this;", &result));
+ EXPECT_STREQ("true", result.c_str());
}
TEST_F(GlobalInterfaceBindingsTest, GlobalOperation) {
diff --git a/src/cobalt/browser/cobalt.gyp b/src/cobalt/browser/cobalt.gyp
index 4f73099..f5bcfe9 100644
--- a/src/cobalt/browser/cobalt.gyp
+++ b/src/cobalt/browser/cobalt.gyp
@@ -94,4 +94,17 @@
},
],
+ 'conditions': [
+ ['final_executable_type == "shared_library"', {
+ 'targets': [
+ {
+ 'target_name': 'cobalt_bin',
+ 'type': 'executable',
+ 'dependencies': [
+ 'cobalt',
+ ],
+ },
+ ],
+ }],
+ ],
}
diff --git a/src/cobalt/build/build.id b/src/cobalt/build/build.id
index deb3c7d..70cae86 100644
--- a/src/cobalt/build/build.id
+++ b/src/cobalt/build/build.id
@@ -1 +1 @@
-11565
\ No newline at end of file
+11837
\ No newline at end of file
diff --git a/src/cobalt/build/config/base.gypi b/src/cobalt/build/config/base.gypi
index 7170bcb..02d4c04 100644
--- a/src/cobalt/build/config/base.gypi
+++ b/src/cobalt/build/config/base.gypi
@@ -128,6 +128,7 @@
# - scratch_surface_cache_size_in_bytes
# - surface_cache_size_in_bytes
# - image_cache_size_in_bytes
+ # - skia_glyph_atlas_width * skia_glyph_atlas_height
#
# The other caches affect CPU memory usage.
@@ -168,6 +169,15 @@
# image_cache_capacity_multiplier_when_playing_video.
'image_cache_capacity_multiplier_when_playing_video%': '1.0f',
+ # Determines the size in pixels of the glyph atlas where rendered glyphs are
+ # cached. The resulting memory usage is 2 bytes of GPU memory per pixel.
+ # When a value is used that is too small, thrashing may occur that will
+ # result in visible stutter. Such thrashing is more likely to occur when CJK
+ # language glyphs are rendered and when the size of the glyphs in pixels is
+ # larger, such as for higher resolution displays.
+ 'skia_glyph_atlas_width%': '2048',
+ 'skia_glyph_atlas_height%': '2048',
+
# Compiler configuration.
# The following variables are used to specify compiler and linker
@@ -268,13 +278,25 @@
'include_dirs': [ '<(DEPTH)' ],
'libraries': [ '<@(platform_libraries)' ],
- # TODO: This is needed to support the option to include
- # posix_emulation.h to all compiled source files. This dependency should
- # be refactored and removed.
- 'include_dirs_target': [
- '<(DEPTH)/lbshell/src',
- ],
'conditions': [
+ ['final_executable_type=="shared_library"', {
+ 'target_conditions': [
+ ['_toolset=="target"', {
+ 'defines': [
+ # Rewrite main() functions into StarboardMain. TODO: This is a
+ # hack, it would be better to be more surgical, here.
+ 'main=StarboardMain',
+ ],
+ 'cflags': [
+ # To link into a shared library on Linux and similar platforms,
+ # the compiler must be told to generate Position Independent Code.
+ # This appears to cause errors when linking the code statically,
+ # however.
+ '-fPIC',
+ ],
+ }],
+ ],
+ }],
['posix_emulation_target_type == "shared_library"', {
'defines': [
'__LB_BASE_SHARED__=1',
@@ -294,6 +316,10 @@
'<(DEPTH)/lbshell/src/platform/<(target_arch)/posix_emulation/lb_shell',
# headers that we don't need, but should exist somewhere in the path:
'<(DEPTH)/lbshell/src/platform/<(target_arch)/posix_emulation/place_holders',
+ # TODO: This is needed to support the option to include
+ # posix_emulation.h to all compiled source files. This dependency
+ # should be refactored and removed.
+ '<(DEPTH)/lbshell/src',
],
}], # OS == "lb_shell"
['OS == "starboard"', {
diff --git a/src/cobalt/dom/event_target.cc b/src/cobalt/dom/event_target.cc
index 87553ff..39175e3 100644
--- a/src/cobalt/dom/event_target.cc
+++ b/src/cobalt/dom/event_target.cc
@@ -107,6 +107,9 @@
void EventTarget::PostToDispatchEventAndRunCallback(
const tracked_objects::Location& location, base::Token event_name,
const base::Closure& callback) {
+ if (!MessageLoop::current()) {
+ return;
+ }
MessageLoop::current()->PostTask(
location,
base::Bind(base::IgnoreResult(&EventTarget::DispatchEventAndRunCallback),
diff --git a/src/cobalt/dom/event_target.h b/src/cobalt/dom/event_target.h
index 462d7a6..3fc4df9 100644
--- a/src/cobalt/dom/event_target.h
+++ b/src/cobalt/dom/event_target.h
@@ -68,12 +68,14 @@
void DispatchEventAndRunCallback(base::Token event_name,
const base::Closure& dispatched_callback);
- // Posts a task on the current message loop to dispatch event.
+ // Posts a task on the current message loop to dispatch event. It does nothing
+ // if there is no current message loop.
void PostToDispatchEvent(const tracked_objects::Location& location,
base::Token event_name);
// Posts a task on the current message loop to dispatch event, and runs
- // dispatched_callback after finish.
+ // dispatched_callback after finish. It does nothing if there is no current
+ // message loop.
void PostToDispatchEventAndRunCallback(
const tracked_objects::Location& location, base::Token event_name,
const base::Closure& dispatched_callback);
diff --git a/src/cobalt/dom/media_error.h b/src/cobalt/dom/media_error.h
index 339c386..124b437 100644
--- a/src/cobalt/dom/media_error.h
+++ b/src/cobalt/dom/media_error.h
@@ -44,7 +44,7 @@
// Web API: MediaError
//
- Code code() const { return code_; }
+ uint32 code() const { return code_; }
DEFINE_WRAPPABLE_TYPE(MediaError);
diff --git a/src/cobalt/dom_parser/libxml_html_parser_wrapper.cc b/src/cobalt/dom_parser/libxml_html_parser_wrapper.cc
index e65ef8f..75e760b 100644
--- a/src/cobalt/dom_parser/libxml_html_parser_wrapper.cc
+++ b/src/cobalt/dom_parser/libxml_html_parser_wrapper.cc
@@ -110,9 +110,7 @@
return;
}
- if (!IsStringUTF8(std::string(data, size))) {
- static const char* kWarningNotUTF8 = "Ignoring non-UTF8 HTML input.";
- OnParsingIssue(kWarning, kWarningNotUTF8);
+ if (CheckInputAndUpdateSeverity(data, size) >= kError) {
return;
}
@@ -127,7 +125,7 @@
NULL /*filename*/, XML_CHAR_ENCODING_UTF8);
if (!html_parser_context_) {
- static const char* kErrorUnableCreateParser =
+ static const char kErrorUnableCreateParser[] =
"Unable to create the libxml2 parser.";
OnParsingIssue(kFatal, kErrorUnableCreateParser);
} else {
@@ -149,12 +147,8 @@
}
if (html_parser_context_) {
- // TODO: The check on issue level is a workaround for the fact that libxml
- // doesn't recover fully from error related to encoding.
- if (issue_level() <= kWarning) {
- htmlParseChunk(html_parser_context_, NULL, 0,
- 1 /*terminate*/); // Triggers EndDocument
- }
+ htmlParseChunk(html_parser_context_, NULL, 0,
+ 1 /*terminate*/); // Triggers EndDocument
if (IsFullDocument()) {
document()->DecreaseLoadingCounterAndMaybeDispatchLoadEvent();
}
diff --git a/src/cobalt/dom_parser/libxml_parser_wrapper.cc b/src/cobalt/dom_parser/libxml_parser_wrapper.cc
index 3acaf88..67521c2 100644
--- a/src/cobalt/dom_parser/libxml_parser_wrapper.cc
+++ b/src/cobalt/dom_parser/libxml_parser_wrapper.cc
@@ -19,6 +19,7 @@
#include "base/logging.h"
#include "base/string_util.h"
#include "base/stringprintf.h"
+#include "cobalt/base/tokens.h"
#include "cobalt/dom/cdata_section.h"
#include "cobalt/dom/comment.h"
#include "cobalt/dom/element.h"
@@ -150,6 +151,10 @@
if (!node_stack_.empty() && !error_callback_.is_null()) {
error_callback_.Run("Node stack not empty at end of document.");
}
+
+ if (IsFullDocument()) {
+ document_->PostToDispatchEvent(FROM_HERE, base::Tokens::domcontentloaded());
+ }
}
void LibxmlParserWrapper::OnStartElement(
@@ -214,8 +219,8 @@
void LibxmlParserWrapper::OnParsingIssue(IssueSeverity severity,
const std::string& message) {
- if (severity > issue_level_) {
- issue_level_ = severity;
+ if (severity > max_severity_) {
+ max_severity_ = severity;
}
if (severity < LibxmlParserWrapper::kFatal) {
LOG(WARNING) << message;
@@ -230,5 +235,31 @@
node_stack_.top()->AppendChild(new dom::CDATASection(document_, value));
}
+LibxmlParserWrapper::IssueSeverity
+LibxmlParserWrapper::CheckInputAndUpdateSeverity(const char* data,
+ size_t size) {
+ if (max_severity_ >= kError) {
+ return max_severity_;
+ }
+
+ // Check the total input size.
+ total_input_size_ += size;
+ if (total_input_size_ > kMaxTotalInputSize) {
+ static const char kErrorTooLong[] = "Parser input is too long.";
+ OnParsingIssue(kError, kErrorTooLong);
+ return max_severity_;
+ }
+
+ // Check the encoding of the input.
+ if (!IsStringUTF8(std::string(data, size))) {
+ static const char kErrorNotUTF8[] =
+ "Parser input contains non-UTF8 characters.";
+ OnParsingIssue(kError, kErrorNotUTF8);
+ return max_severity_;
+ }
+
+ return max_severity_;
+}
+
} // namespace dom_parser
} // namespace cobalt
diff --git a/src/cobalt/dom_parser/libxml_parser_wrapper.h b/src/cobalt/dom_parser/libxml_parser_wrapper.h
index 61f3d04..bbeb21a 100644
--- a/src/cobalt/dom_parser/libxml_parser_wrapper.h
+++ b/src/cobalt/dom_parser/libxml_parser_wrapper.h
@@ -92,7 +92,8 @@
first_chunk_location_(first_chunk_location),
error_callback_(error_callback),
depth_limit_exceeded_(false),
- issue_level_(kNoIssue) {}
+ max_severity_(kNoIssue),
+ total_input_size_(0) {}
virtual ~LibxmlParserWrapper() {}
// These functions are for Libxml interface, calls are forwarded here by
@@ -120,6 +121,9 @@
// Returns true when the input is a full document, false when it's a fragment.
bool IsFullDocument() { return document_ == parent_node_; }
+ // Checks the input, updates and returns the maximum issue severity.
+ IssueSeverity CheckInputAndUpdateSeverity(const char* data, size_t size);
+
const scoped_refptr<dom::Document>& document() { return document_; }
const base::SourceLocation& first_chunk_location() {
return first_chunk_location_;
@@ -128,13 +132,14 @@
return error_callback_;
}
- IssueSeverity issue_level() const { return issue_level_; }
-
const std::stack<scoped_refptr<dom::Node> >& node_stack() {
return node_stack_;
}
private:
+ // Maximum total input size, 1MB.
+ static const size_t kMaxTotalInputSize = 1 * 1024 * 1024;
+
const scoped_refptr<dom::Document> document_;
const scoped_refptr<dom::Node> parent_node_;
const scoped_refptr<dom::Node> reference_node_;
@@ -145,7 +150,8 @@
const base::Callback<void(const std::string&)> error_callback_;
bool depth_limit_exceeded_;
- IssueSeverity issue_level_;
+ IssueSeverity max_severity_;
+ size_t total_input_size_;
std::stack<scoped_refptr<dom::Node> > node_stack_;
diff --git a/src/cobalt/dom_parser/libxml_xml_parser_wrapper.cc b/src/cobalt/dom_parser/libxml_xml_parser_wrapper.cc
index edab9f0..c933f5e 100644
--- a/src/cobalt/dom_parser/libxml_xml_parser_wrapper.cc
+++ b/src/cobalt/dom_parser/libxml_xml_parser_wrapper.cc
@@ -79,9 +79,7 @@
return;
}
- if (!IsStringUTF8(std::string(data, size))) {
- static const char* kWarningNotUTF8 = "Ignoring non-UTF8 XML input.";
- OnParsingIssue(kWarning, kWarningNotUTF8);
+ if (CheckInputAndUpdateSeverity(data, size) >= kError) {
return;
}
diff --git a/src/cobalt/layout/render_tree_animations.h b/src/cobalt/layout/render_tree_animations.h
index 0c8a862..e2087ab 100644
--- a/src/cobalt/layout/render_tree_animations.h
+++ b/src/cobalt/layout/render_tree_animations.h
@@ -93,11 +93,13 @@
populate_base_style_function.Run(css_computed_style_declaration.data(),
base_style);
+ web_animations::BakedAnimationSet baked_animation_set(
+ *css_computed_style_declaration.animations());
+
node_animation_map_builder->Add(
target_node, base::Bind(&ApplyAnimation<T>, apply_style_function,
- web_animations::BakedAnimationSet(
- *css_computed_style_declaration.animations()),
- base_style));
+ baked_animation_set, base_style),
+ baked_animation_set.end_time());
}
} // namespace layout
diff --git a/src/cobalt/layout_tests/layout_benchmarks.cc b/src/cobalt/layout_tests/layout_benchmarks.cc
index 164741c..bace1ed 100644
--- a/src/cobalt/layout_tests/layout_benchmarks.cc
+++ b/src/cobalt/layout_tests/layout_benchmarks.cc
@@ -45,14 +45,18 @@
RendererBenchmarkRunner()
: done_gathering_samples_(true, false),
system_window_(system_window::CreateSystemWindow(
- &event_dispatcher_, math::Size(kViewportWidth, kViewportHeight))),
- renderer_module_(system_window_.get(),
- renderer::RendererModule::Options()) {}
+ &event_dispatcher_, math::Size(kViewportWidth, kViewportHeight))) {
+ // Since we'd like to measure the renderer, we force it to rasterize each
+ // frame despite the fact that the render tree may not be changing.
+ renderer::RendererModule::Options renderer_options;
+ renderer_options.submit_even_if_render_tree_is_unchanged = true;
+ renderer_module_.emplace(system_window_.get(), renderer_options);
+ }
// Return the resource provider from the internal renderer so that it can
// be used during layout.
render_tree::ResourceProvider* GetResourceProvider() {
- return renderer_module_.pipeline()->GetResourceProvider();
+ return renderer_module_->pipeline()->GetResourceProvider();
}
// Run the renderer benchmarks and perform the measurements.
@@ -67,11 +71,11 @@
submission_with_callback.on_rasterized_callback = base::Bind(
&RendererBenchmarkRunner::OnSubmitComplete, base::Unretained(this));
- renderer_module_.pipeline()->Submit(submission_with_callback);
+ renderer_module_->pipeline()->Submit(submission_with_callback);
done_gathering_samples_.Wait();
- renderer_module_.pipeline()->Clear();
+ renderer_module_->pipeline()->Clear();
}
private:
@@ -93,7 +97,7 @@
base::EventDispatcher event_dispatcher_;
scoped_ptr<system_window::SystemWindow> system_window_;
- renderer::RendererModule renderer_module_;
+ base::optional<renderer::RendererModule> renderer_module_;
};
} // namespace
diff --git a/src/cobalt/layout_tests/testdata/cobalt/100-dynamically-created-nested-elements.html b/src/cobalt/layout_tests/testdata/cobalt/100-dynamically-created-nested-elements.html
index 498e1a7..2c692ea 100644
--- a/src/cobalt/layout_tests/testdata/cobalt/100-dynamically-created-nested-elements.html
+++ b/src/cobalt/layout_tests/testdata/cobalt/100-dynamically-created-nested-elements.html
@@ -16,12 +16,12 @@
that max element depth is 32. -->
<script>
- var parent = document.body;
+ var parent_element = document.body;
for (var i = 1; i <= 100; i++) {
var new_child = document.createElement("span");
new_child.textContent = i + " ";
- parent.appendChild(new_child);
- parent = new_child;
+ parent_element.appendChild(new_child);
+ parent_element = new_child;
}
</script>
diff --git a/src/cobalt/media/media_buffer_allocator.h b/src/cobalt/media/media_buffer_allocator.h
new file mode 100644
index 0000000..ef7f620
--- /dev/null
+++ b/src/cobalt/media/media_buffer_allocator.h
@@ -0,0 +1,89 @@
+/*
+ * Copyright 2016 Google Inc. All Rights Reserved.
+ *
+ * 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.
+ */
+
+#ifndef COBALT_MEDIA_MEDIA_BUFFER_ALLOCATOR_H_
+#define COBALT_MEDIA_MEDIA_BUFFER_ALLOCATOR_H_
+
+#include "base/optional.h"
+#include "nb/memory_pool.h"
+
+namespace cobalt {
+namespace media {
+
+class MediaBufferAllocator {
+ public:
+ MediaBufferAllocator(void* pool, size_t main_pool_size,
+ size_t small_allocation_pool_size,
+ size_t small_allocation_threshold)
+ : pool_(reinterpret_cast<uint8*>(pool)),
+ main_pool_size_(main_pool_size),
+ small_allocation_pool_size_(small_allocation_pool_size),
+ small_allocation_threshold_(small_allocation_threshold),
+ main_pool_(pool_, main_pool_size_, true, /* thread_safe */
+ true /* verify_full_capacity */) {
+ if (small_allocation_pool_size_ > 0u) {
+ DCHECK_GT(small_allocation_threshold_, 0u);
+ small_allocation_pool_.emplace(pool_ + main_pool_size_,
+ small_allocation_pool_size_,
+ true, /* thread_safe */
+ true /* verify_full_capacity */);
+ } else {
+ DCHECK_EQ(small_allocation_pool_size_, 0u);
+ DCHECK_EQ(small_allocation_threshold_, 0u);
+ }
+ }
+
+ void* Allocate(size_t size, size_t alignment) {
+ void* p = NULL;
+ if (size < small_allocation_threshold_ && small_allocation_pool_) {
+ p = small_allocation_pool_->Allocate(size, alignment);
+ }
+ if (!p) {
+ p = main_pool_.Allocate(size, alignment);
+ }
+ if (!p && small_allocation_pool_) {
+ p = small_allocation_pool_->Allocate(size, alignment);
+ }
+ return p;
+ }
+
+ void Free(void* p) {
+ if (p >= pool_ + main_pool_size_ && small_allocation_pool_) {
+ DCHECK_LT(p, pool_ + main_pool_size_ + small_allocation_pool_size_);
+ small_allocation_pool_->Free(p);
+ return;
+ }
+ DCHECK_GE(p, pool_);
+ DCHECK_LT(p, pool_ + main_pool_size_);
+ main_pool_.Free(p);
+ }
+
+ private:
+ uint8* pool_;
+ size_t main_pool_size_;
+ size_t small_allocation_pool_size_;
+ size_t small_allocation_threshold_;
+
+ nb::MemoryPool main_pool_;
+ base::optional<nb::MemoryPool> small_allocation_pool_;
+
+ DISALLOW_COPY_AND_ASSIGN(MediaBufferAllocator);
+};
+
+} // namespace media
+} // namespace cobalt
+
+#endif // COBALT_MEDIA_MEDIA_BUFFER_ALLOCATOR_H_
diff --git a/src/cobalt/media/shell_media_platform_starboard.cc b/src/cobalt/media/shell_media_platform_starboard.cc
index 096b670..9b9bf31 100644
--- a/src/cobalt/media/shell_media_platform_starboard.cc
+++ b/src/cobalt/media/shell_media_platform_starboard.cc
@@ -38,6 +38,8 @@
const size_t kGPUMemoryBufferBudget = SB_MEDIA_GPU_BUFFER_BUDGET;
const size_t kMainMemoryBufferBudget = SB_MEDIA_MAIN_BUFFER_BUDGET;
+const size_t kSmallAllocationThreshold = 768U;
+
} // namespace
ShellMediaPlatformStarboard::ShellMediaPlatformStarboard(
@@ -58,7 +60,7 @@
gpu_memory_pool_.reset(new nb::MemoryPool(
gpu_memory_buffer_space_->GetMemory(),
gpu_memory_buffer_space_->GetSizeInBytes(), true, /* thread_safe */
- true /* verify_full_capacity */));
+ true /* verify_full_capacity */, kSmallAllocationThreshold));
}
DCHECK_LE(0, kMainMemoryBufferBudget > 0);
@@ -68,7 +70,8 @@
main_memory_pool_.reset(new nb::MemoryPool(main_memory_buffer_space_.get(),
kMainMemoryBufferBudget,
true, /* thread_safe */
- true /* verify_full_capacity */));
+ true, /* verify_full_capacity */
+ kSmallAllocationThreshold));
ShellBufferFactory::Initialize();
ShellAudioStreamer::Initialize();
diff --git a/src/cobalt/render_tree/animations/animate_node.cc b/src/cobalt/render_tree/animations/animate_node.cc
index d51732a..6363ec9 100644
--- a/src/cobalt/render_tree/animations/animate_node.cc
+++ b/src/cobalt/render_tree/animations/animate_node.cc
@@ -16,6 +16,8 @@
#include "cobalt/render_tree/animations/animate_node.h"
+#include <algorithm>
+
#include "base/debug/trace_event.h"
#include "cobalt/base/enable_if.h"
#include "cobalt/base/polymorphic_downcast.h"
@@ -63,7 +65,9 @@
public:
TraverseListBuilder(const AnimateNode::Builder::InternalMap& animation_map,
TraverseList* traverse_list)
- : animation_map_(animation_map), traverse_list_(traverse_list) {}
+ : animation_map_(animation_map),
+ traverse_list_(traverse_list),
+ expiry_(-base::TimeDelta::Max()) {}
void Visit(animations::AnimateNode* animate) OVERRIDE;
void Visit(CompositionNode* composition) OVERRIDE { VisitNode(composition); }
@@ -108,6 +112,9 @@
// this visitor's associated node with in its list of child nodes.
scoped_refptr<Node> replace_with_;
+ // The time after which all animations will have completed and be constant.
+ base::TimeDelta expiry_;
+
friend class AnimateNode;
};
@@ -134,6 +141,9 @@
// maintain the invariant that an AnimateNode does not contain any
// AnimateNode descendants.
replace_with_ = animate->source_;
+
+ // Update our expiry in accordance with the sub-AnimateNode's expiry.
+ expiry_ = std::max(expiry_, animate->expiry());
}
template <typename T>
@@ -197,6 +207,7 @@
Node* node, AnimateNode::Builder::InternalMap::const_iterator found) {
if (found != animation_map_.end()) {
traverse_list_->push_back(TraverseListEntry(node, found->second));
+ expiry_ = std::max(expiry_, found->second->GetExpiry());
} else {
traverse_list_->push_back(TraverseListEntry(node));
}
@@ -394,6 +405,8 @@
std::reverse(traverse_list_.begin(), traverse_list_.end());
DCHECK(source_.get() == traverse_list_.begin()->node);
}
+
+ expiry_ = traverse_list_builder.expiry_;
}
} // namespace animations
diff --git a/src/cobalt/render_tree/animations/animate_node.h b/src/cobalt/render_tree/animations/animate_node.h
index 4b9bfae..b5a11e1 100644
--- a/src/cobalt/render_tree/animations/animate_node.h
+++ b/src/cobalt/render_tree/animations/animate_node.h
@@ -73,9 +73,19 @@
// Convenience method to attach a single animation to a target node.
template <typename T>
void Add(const scoped_refptr<T>& target_node,
+ const typename Animation<T>::Function& single_animation,
+ base::TimeDelta expiry) {
+ AddInternal(target_node,
+ scoped_refptr<AnimationListBase>(
+ new AnimationList<T>(single_animation, expiry)));
+ }
+
+ template <typename T>
+ void Add(const scoped_refptr<T>& target_node,
const typename Animation<T>::Function& single_animation) {
- AddInternal(target_node, scoped_refptr<AnimationListBase>(
- new AnimationList<T>(single_animation)));
+ AddInternal(target_node,
+ scoped_refptr<AnimationListBase>(new AnimationList<T>(
+ single_animation, base::TimeDelta::Max())));
}
// Merge all mappings from another AnimateNode::Builder into this one.
@@ -137,6 +147,12 @@
// Returns the sub-tree for which the animations apply to.
const scoped_refptr<Node> source() const { return source_; }
+ // Returns the time at which all animations will have completed, or
+ // base::TimeDelta::Max() if they will never complete.
+ // It will be true that AnimateNode::Apply(x) == AnimateNode::Apply(y) for
+ // all x, y >= expiry().
+ const base::TimeDelta& expiry() const { return expiry_; }
+
private:
// A helper render tree visitor class used to compile sub render-tree
// animations.
@@ -168,6 +184,7 @@
// that guides us towards all nodes that need to be animated.
TraverseList traverse_list_;
scoped_refptr<Node> source_;
+ base::TimeDelta expiry_;
};
} // namespace animations
diff --git a/src/cobalt/render_tree/animations/animation_list.h b/src/cobalt/render_tree/animations/animation_list.h
index a37bd3f..89c12fd 100644
--- a/src/cobalt/render_tree/animations/animation_list.h
+++ b/src/cobalt/render_tree/animations/animation_list.h
@@ -77,6 +77,9 @@
// letting us collect animation lists in a single collection, at the cost of
// needing to type cast in a few places.
class AnimationListBase : public base::RefCountedThreadSafe<AnimationListBase> {
+ public:
+ virtual base::TimeDelta GetExpiry() const = 0;
+
protected:
virtual ~AnimationListBase() {}
friend class base::RefCountedThreadSafe<AnimationListBase>;
@@ -99,24 +102,33 @@
struct Builder {
DECLARE_AS_MOVABLE(Builder);
- Builder() {}
+ Builder() : expiry(base::TimeDelta::Max()) {}
explicit Builder(Moved moved) { animations.swap(moved->animations); }
- explicit Builder(const typename Animation<T>::Function& single_animation) {
+ explicit Builder(const typename Animation<T>::Function& single_animation,
+ base::TimeDelta expiry)
+ : expiry(expiry) {
animations.push_back(single_animation);
}
InternalList animations;
+ // When do the animations expire? base::TimeDelta::Max() implies that they
+ // never expire.
+ base::TimeDelta expiry;
};
explicit AnimationList(typename Builder::Moved builder) : data_(builder) {}
// Convenience constructor to allow for easy construction of AnimationLists
- // containing a single Animation.
+ // containing a single Animation. |expiry| indicates the time at which the
+ // animation ceases, or base::TimeDelta::Max() if that never occurs.
explicit AnimationList(
- const typename Animation<T>::Function& single_animation)
- : data_(single_animation) {}
+ const typename Animation<T>::Function& single_animation,
+ base::TimeDelta expiry)
+ : data_(single_animation, expiry) {}
const Builder& data() const { return data_; }
+ base::TimeDelta GetExpiry() const OVERRIDE { return data_.expiry; }
+
private:
~AnimationList() OVERRIDE {}
diff --git a/src/cobalt/renderer/animations_test.cc b/src/cobalt/renderer/animations_test.cc
index 033a78f..b46c59e 100644
--- a/src/cobalt/renderer/animations_test.cc
+++ b/src/cobalt/renderer/animations_test.cc
@@ -1,4 +1,4 @@
-/*
+ /*
* Copyright 2015 Google Inc. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -171,7 +171,7 @@
Pipeline pipeline(
base::Bind(render_module_options.create_rasterizer_function,
graphics_context.get(), render_module_options),
- dummy_output_surface, NULL);
+ dummy_output_surface, NULL, true);
// Our test render tree will consist of only a single ImageNode.
scoped_refptr<ImageNode> test_node = new ImageNode(
diff --git a/src/cobalt/renderer/pipeline.cc b/src/cobalt/renderer/pipeline.cc
index a1c5aba..9974067 100644
--- a/src/cobalt/renderer/pipeline.cc
+++ b/src/cobalt/renderer/pipeline.cc
@@ -65,12 +65,15 @@
Pipeline::Pipeline(const CreateRasterizerFunction& create_rasterizer_function,
const scoped_refptr<backend::RenderTarget>& render_target,
- backend::GraphicsContext* graphics_context)
+ backend::GraphicsContext* graphics_context,
+ bool submit_even_if_render_tree_is_unchanged)
: rasterizer_created_event_(true, false),
render_target_(render_target),
graphics_context_(graphics_context),
rasterizer_thread_("Rasterizer"),
submission_disposal_thread_("Rasterizer Submission Disposal"),
+ submit_even_if_render_tree_is_unchanged_(
+ submit_even_if_render_tree_is_unchanged),
rasterize_current_tree_interval_timer_(
"Renderer.Rasterize.Interval",
kRasterizeCurrentTreeTimerTimeIntervalInMs),
@@ -121,6 +124,11 @@
base::Unretained(&submission_queue_shutdown)));
submission_queue_shutdown.Wait();
+ // This potential reference to a render tree whose animations may have ended
+ // must be destroyed before we shutdown the rasterizer thread since it may
+ // contain references to render tree nodes and resources.
+ last_rendered_expired_render_tree_ = NULL;
+
// Submit a shutdown task to the rasterizer thread so that it can shutdown
// anything that must be shutdown from that thread.
rasterizer_thread_.message_loop()->PostTask(
@@ -190,11 +198,11 @@
// Start the rasterization timer if it is not yet started.
if (!rasterize_timer_) {
- // We submit render trees as fast as the rasterizer can consume them.
- // Practically, this will result in the rate being limited to the
- // display's refresh rate.
+ // We artificially limit the period between submissions to 15ms, in case
+ // a platform does not rate limit itself during swaps. This limit may need
+ // to be reduced if we wish to support 120 FPS animations.
rasterize_timer_.emplace(
- FROM_HERE, base::TimeDelta(),
+ FROM_HERE, base::TimeDelta::FromMilliseconds(15),
base::Bind(&Pipeline::RasterizeCurrentTree, base::Unretained(this)),
true, true);
rasterize_timer_->Reset();
@@ -219,14 +227,37 @@
TRACE_EVENT0("cobalt::renderer", "Pipeline::RasterizeCurrentTree()");
base::TimeTicks now = base::TimeTicks::Now();
+ Submission submission = submission_queue_->GetCurrentSubmission(now);
+
+ // If our render tree hasn't changed from the one that was previously rendered
+ // and the animations on the previously rendered tree have expired, and it's
+ // okay on this system to not flip the display buffer frequently, then we
+ // can just not do anything here.
+ if (!submit_even_if_render_tree_is_unchanged_ &&
+ submission.render_tree == last_rendered_expired_render_tree_) {
+ return;
+ }
+
rasterize_current_tree_interval_timer_.Start(now);
rasterize_current_tree_timer_.Start(now);
// Rasterize the last submitted render tree.
- RasterizeSubmissionToRenderTarget(
- submission_queue_->GetCurrentSubmission(now), render_target_);
+ RasterizeSubmissionToRenderTarget(submission, render_target_);
rasterize_current_tree_timer_.Stop();
+
+ // Check whether the animations in the render tree that was just rasterized
+ // have expired or not, and if so, mark that down so that if we see it in
+ // the future we don't spend the time re-rendering it.
+ if (!submit_even_if_render_tree_is_unchanged_) {
+ render_tree::animations::AnimateNode* animate_node =
+ base::polymorphic_downcast<render_tree::animations::AnimateNode*>(
+ submission.render_tree.get());
+ last_rendered_expired_render_tree_ =
+ animate_node->expiry() <= submission.time_offset
+ ? submission.render_tree
+ : NULL;
+ }
}
void Pipeline::RasterizeSubmissionToRenderTarget(
diff --git a/src/cobalt/renderer/pipeline.h b/src/cobalt/renderer/pipeline.h
index ad05b29..975f593 100644
--- a/src/cobalt/renderer/pipeline.h
+++ b/src/cobalt/renderer/pipeline.h
@@ -59,7 +59,8 @@
// thread safe objects.
Pipeline(const CreateRasterizerFunction& create_rasterizer_function,
const scoped_refptr<backend::RenderTarget>& render_target,
- backend::GraphicsContext* graphics_context);
+ backend::GraphicsContext* graphics_context,
+ bool submit_even_if_render_tree_is_unchanged);
~Pipeline();
// Submit a new render tree to the renderer pipeline. After calling this
@@ -166,6 +167,15 @@
// the future.
base::optional<SubmissionQueue> submission_queue_;
+ // Keep track of the last render tree we rendered whose animations have
+ // expired so that if we see that we are asked to rasterize that render tree
+ // again, we know that we do not have to do anything.
+ scoped_refptr<render_tree::Node> last_rendered_expired_render_tree_;
+
+ // If true, we will submit the current render tree to the rasterizer every
+ // frame, even if it hasn't changed.
+ const bool submit_even_if_render_tree_is_unchanged_;
+
// Timers for tracking how frequently |RasterizeCurrentTree| is called and
// the amount of time spent in |RasterizeCurrentTree| each call.
base::CValTimeIntervalTimer<base::CValPublic>
diff --git a/src/cobalt/renderer/pipeline_test.cc b/src/cobalt/renderer/pipeline_test.cc
index db7585a..c258641 100644
--- a/src/cobalt/renderer/pipeline_test.cc
+++ b/src/cobalt/renderer/pipeline_test.cc
@@ -88,15 +88,30 @@
submission_count_ = 0;
start_time_ = base::TimeTicks::Now();
pipeline_.reset(new Pipeline(
- base::Bind(&CreateMockRasterizer, &submission_count_), NULL, NULL));
-
- // We create a render tree here composed of only a single, empty
- // CompositionNode that is meant to act as a dummy/placeholder.
- dummy_render_tree_ = scoped_refptr<cobalt::render_tree::Node>(
- new cobalt::render_tree::CompositionNode(
- cobalt::render_tree::CompositionNode::Builder()));
+ base::Bind(&CreateMockRasterizer, &submission_count_), NULL, NULL,
+ true));
}
+ static void DummyAnimateFunction(
+ cobalt::render_tree::CompositionNode::Builder* composition_node_builder,
+ base::TimeDelta time) {}
+
+ // We create a render tree composed of only a single, empty CompositionNode
+ // that is meant to act as a dummy/placeholder. It is animated to ensure that
+ // it changes every frame and so the Pipeline must rasterize it each frame.
+ scoped_refptr<cobalt::render_tree::Node> MakeDummyAnimatedRenderTree() {
+ scoped_refptr<cobalt::render_tree::CompositionNode> dummy_node(
+ new cobalt::render_tree::CompositionNode(
+ cobalt::render_tree::CompositionNode::Builder()));
+
+ cobalt::render_tree::animations::AnimateNode::Builder animate_builder;
+ animate_builder.Add(dummy_node, base::Bind(&DummyAnimateFunction));
+ scoped_refptr<cobalt::render_tree::animations::AnimateNode> animate_node(
+ new cobalt::render_tree::animations::AnimateNode(animate_builder,
+ dummy_node));
+
+ return animate_node;
+ }
// Checks that Submit() was called on mock_rasterizer_ the expect number of
// times given the refresh rate and lower/upper bounds for how long the
// pipeline was active.
@@ -131,7 +146,6 @@
base::TimeTicks start_time_; // Record the time that we started the pipeline.
scoped_ptr<Pipeline> pipeline_;
- scoped_refptr<cobalt::render_tree::Node> dummy_render_tree_;
int submission_count_;
};
@@ -146,7 +160,8 @@
TEST_F(
RendererPipelineTest,
FLAKY_RasterizerSubmitCalledAtExpectedFrequencyAfterSinglePipelineSubmit) {
- pipeline_->Submit(cobalt::renderer::Submission(dummy_render_tree_));
+ pipeline_->Submit(
+ cobalt::renderer::Submission(MakeDummyAnimatedRenderTree()));
// Wait a little bit to give the pipeline some time to rasterize the submitted
// render tree.
@@ -179,7 +194,8 @@
break;
}
- pipeline_->Submit(cobalt::renderer::Submission(dummy_render_tree_));
+ pipeline_->Submit(
+ cobalt::renderer::Submission(MakeDummyAnimatedRenderTree()));
const base::TimeDelta kSubmitDelay(base::TimeDelta::FromMilliseconds(1));
// While we want to submit faster than the rasterizer is rasterizing,
diff --git a/src/cobalt/renderer/rasterizer/skia/skia/skia_library.gypi b/src/cobalt/renderer/rasterizer/skia/skia/skia_library.gypi
index 49aee75..dba75b6 100644
--- a/src/cobalt/renderer/rasterizer/skia/skia/skia_library.gypi
+++ b/src/cobalt/renderer/rasterizer/skia/skia/skia_library.gypi
@@ -151,6 +151,9 @@
'<(DEPTH)/third_party/skia/src/fonts/SkGScalerContext.h',
'<(DEPTH)/third_party/skia/src/fonts/SkTestScalerContext.cpp',
'<(DEPTH)/third_party/skia/src/fonts/SkTestScalerContext.h',
+
+ # Conflicts with cobalt implementation.
+ '<(DEPTH)/third_party/skia/src/gpu/gl/GrGLCreateNativeInterface_none.cpp',
],
# Exclude Skia OpenGL backend source files.
diff --git a/src/cobalt/renderer/renderer_module.cc b/src/cobalt/renderer/renderer_module.cc
index 5806add..ebe8531 100644
--- a/src/cobalt/renderer/renderer_module.cc
+++ b/src/cobalt/renderer/renderer_module.cc
@@ -62,7 +62,8 @@
pipeline_ = make_scoped_ptr(new renderer::Pipeline(
base::Bind(options.create_rasterizer_function, graphics_context_.get(),
options),
- display_->GetRenderTarget(), graphics_context_.get()));
+ display_->GetRenderTarget(), graphics_context_.get(),
+ options.submit_even_if_render_tree_is_unchanged));
}
}
diff --git a/src/cobalt/renderer/renderer_module.h b/src/cobalt/renderer/renderer_module.h
index f60a29d..fab4b63 100644
--- a/src/cobalt/renderer/renderer_module.h
+++ b/src/cobalt/renderer/renderer_module.h
@@ -60,6 +60,12 @@
// nodes that are most CPU-expensive to render into surfaces.
int surface_cache_size_in_bytes;
+ // If this flag is set to true, the pipeline will not re-submit a render
+ // tree if it has not changed from the previous submission. This can save
+ // CPU time so long as there's no problem with the fact that the display
+ // buffer will not be frequently swapped.
+ bool submit_even_if_render_tree_is_unchanged;
+
private:
// Implemented per-platform, and allows each platform to customize
// the renderer options.
diff --git a/src/cobalt/renderer/renderer_module_default_options_starboard.cc b/src/cobalt/renderer/renderer_module_default_options_starboard.cc
index db5086b..7a00bd5 100644
--- a/src/cobalt/renderer/renderer_module_default_options_starboard.cc
+++ b/src/cobalt/renderer/renderer_module_default_options_starboard.cc
@@ -71,6 +71,12 @@
scratch_surface_cache_size_in_bytes =
COBALT_SCRATCH_SURFACE_CACHE_SIZE_IN_BYTES;
+ // If there is no need to frequently flip the display buffer, then enable
+ // support for an optimization where the scene is not re-rasterized each frame
+ // if it has not changed from the last frame.
+ submit_even_if_render_tree_is_unchanged =
+ SB_MUST_FREQUENTLY_FLIP_DISPLAY_BUFFER;
+
create_rasterizer_function = base::Bind(&CreateRasterizer);
}
diff --git a/src/cobalt/renderer/renderer_module_default_options_win.cc b/src/cobalt/renderer/renderer_module_default_options_win.cc
index 6b08fc9..b96c5f0 100644
--- a/src/cobalt/renderer/renderer_module_default_options_win.cc
+++ b/src/cobalt/renderer/renderer_module_default_options_win.cc
@@ -47,6 +47,8 @@
scratch_surface_cache_size_in_bytes =
COBALT_SCRATCH_SURFACE_CACHE_SIZE_IN_BYTES;
+ submit_even_if_render_tree_is_unchanged = true;
+
create_rasterizer_function = base::Bind(&CreateRasterizer);
}
diff --git a/src/cobalt/script/mozjs/conversion_helpers.h b/src/cobalt/script/mozjs/conversion_helpers.h
index 19a8ec8..6166bfa 100644
--- a/src/cobalt/script/mozjs/conversion_helpers.h
+++ b/src/cobalt/script/mozjs/conversion_helpers.h
@@ -368,6 +368,10 @@
context,
global_environment->wrapper_factory()->GetWrapperProxy(in_object));
DCHECK(object);
+ JS::RootedObject proxy_target(context, js::GetProxyTargetObject(object));
+ if (JS_IsGlobalObject(proxy_target)) {
+ object = proxy_target;
+ }
out_value.set(OBJECT_TO_JSVAL(object));
}
diff --git a/src/cobalt/script/mozjs/mozjs_callback_function.h b/src/cobalt/script/mozjs/mozjs_callback_function.h
index a2714de..cb3abc6 100644
--- a/src/cobalt/script/mozjs/mozjs_callback_function.h
+++ b/src/cobalt/script/mozjs/mozjs_callback_function.h
@@ -58,12 +58,12 @@
CallbackResult<R> Run()
const OVERRIDE {
CallbackResult<R> callback_result;
+ JSAutoRequest auto_request(context_);
JS::RootedObject function(context_, weak_function_.Get());
if (!function) {
DLOG(WARNING) << "Function was garbage collected.";
callback_result.exception = true;
} else {
- JSAutoRequest auto_request(context_);
JSAutoCompartment auto_compartment(context_, function);
JSExceptionState* previous_exception_state =
JS_SaveExceptionState(context_);
@@ -111,12 +111,12 @@
typename base::internal::CallbackParamTraits<A1>::ForwardType a1)
const OVERRIDE {
CallbackResult<R> callback_result;
+ JSAutoRequest auto_request(context_);
JS::RootedObject function(context_, weak_function_.Get());
if (!function) {
DLOG(WARNING) << "Function was garbage collected.";
callback_result.exception = true;
} else {
- JSAutoRequest auto_request(context_);
JSAutoCompartment auto_compartment(context_, function);
JSExceptionState* previous_exception_state =
JS_SaveExceptionState(context_);
@@ -170,12 +170,12 @@
typename base::internal::CallbackParamTraits<A2>::ForwardType a2)
const OVERRIDE {
CallbackResult<R> callback_result;
+ JSAutoRequest auto_request(context_);
JS::RootedObject function(context_, weak_function_.Get());
if (!function) {
DLOG(WARNING) << "Function was garbage collected.";
callback_result.exception = true;
} else {
- JSAutoRequest auto_request(context_);
JSAutoCompartment auto_compartment(context_, function);
JSExceptionState* previous_exception_state =
JS_SaveExceptionState(context_);
@@ -231,12 +231,12 @@
typename base::internal::CallbackParamTraits<A3>::ForwardType a3)
const OVERRIDE {
CallbackResult<R> callback_result;
+ JSAutoRequest auto_request(context_);
JS::RootedObject function(context_, weak_function_.Get());
if (!function) {
DLOG(WARNING) << "Function was garbage collected.";
callback_result.exception = true;
} else {
- JSAutoRequest auto_request(context_);
JSAutoCompartment auto_compartment(context_, function);
JSExceptionState* previous_exception_state =
JS_SaveExceptionState(context_);
@@ -294,12 +294,12 @@
typename base::internal::CallbackParamTraits<A4>::ForwardType a4)
const OVERRIDE {
CallbackResult<R> callback_result;
+ JSAutoRequest auto_request(context_);
JS::RootedObject function(context_, weak_function_.Get());
if (!function) {
DLOG(WARNING) << "Function was garbage collected.";
callback_result.exception = true;
} else {
- JSAutoRequest auto_request(context_);
JSAutoCompartment auto_compartment(context_, function);
JSExceptionState* previous_exception_state =
JS_SaveExceptionState(context_);
@@ -360,12 +360,12 @@
typename base::internal::CallbackParamTraits<A5>::ForwardType a5)
const OVERRIDE {
CallbackResult<R> callback_result;
+ JSAutoRequest auto_request(context_);
JS::RootedObject function(context_, weak_function_.Get());
if (!function) {
DLOG(WARNING) << "Function was garbage collected.";
callback_result.exception = true;
} else {
- JSAutoRequest auto_request(context_);
JSAutoCompartment auto_compartment(context_, function);
JSExceptionState* previous_exception_state =
JS_SaveExceptionState(context_);
@@ -428,12 +428,12 @@
typename base::internal::CallbackParamTraits<A6>::ForwardType a6)
const OVERRIDE {
CallbackResult<R> callback_result;
+ JSAutoRequest auto_request(context_);
JS::RootedObject function(context_, weak_function_.Get());
if (!function) {
DLOG(WARNING) << "Function was garbage collected.";
callback_result.exception = true;
} else {
- JSAutoRequest auto_request(context_);
JSAutoCompartment auto_compartment(context_, function);
JSExceptionState* previous_exception_state =
JS_SaveExceptionState(context_);
@@ -498,12 +498,12 @@
typename base::internal::CallbackParamTraits<A7>::ForwardType a7)
const OVERRIDE {
CallbackResult<R> callback_result;
+ JSAutoRequest auto_request(context_);
JS::RootedObject function(context_, weak_function_.Get());
if (!function) {
DLOG(WARNING) << "Function was garbage collected.";
callback_result.exception = true;
} else {
- JSAutoRequest auto_request(context_);
JSAutoCompartment auto_compartment(context_, function);
JSExceptionState* previous_exception_state =
JS_SaveExceptionState(context_);
diff --git a/src/cobalt/script/mozjs/mozjs_callback_function.h.pump b/src/cobalt/script/mozjs/mozjs_callback_function.h.pump
index 810dcc5..14067e9 100644
--- a/src/cobalt/script/mozjs/mozjs_callback_function.h.pump
+++ b/src/cobalt/script/mozjs/mozjs_callback_function.h.pump
@@ -77,12 +77,12 @@
typename base::internal::CallbackParamTraits<A$(ARG)>::ForwardType a$(ARG)]])
const OVERRIDE {
CallbackResult<R> callback_result;
+ JSAutoRequest auto_request(context_);
JS::RootedObject function(context_, weak_function_.Get());
if (!function) {
DLOG(WARNING) << "Function was garbage collected.";
callback_result.exception = true;
} else {
- JSAutoRequest auto_request(context_);
JSAutoCompartment auto_compartment(context_, function);
JSExceptionState* previous_exception_state =
JS_SaveExceptionState(context_);
diff --git a/src/cobalt/script/mozjs/mozjs_user_object_holder.h b/src/cobalt/script/mozjs/mozjs_user_object_holder.h
index 2ee384f..c70ad1a 100644
--- a/src/cobalt/script/mozjs/mozjs_user_object_holder.h
+++ b/src/cobalt/script/mozjs/mozjs_user_object_holder.h
@@ -51,6 +51,7 @@
wrapper_factory_(wrapper_factory) {}
void RegisterOwner(Wrappable* owner) OVERRIDE {
+ JSAutoRequest auto_request(context_);
JS::RootedObject owned_object(context_, js_object());
DLOG_IF(WARNING, !owned_object)
<< "Owned object has been garbage collected.";
@@ -65,6 +66,7 @@
void DeregisterOwner(Wrappable* owner) OVERRIDE {
// |owner| may be in the process of being destructed, so don't use it.
+ JSAutoRequest auto_request(context_);
JS::RootedObject owned_object(context_, js_object());
if (owned_object) {
MozjsGlobalEnvironment* global_environment =
@@ -82,6 +84,7 @@
scoped_ptr<BaseClass> MakeCopy() const OVERRIDE {
DCHECK(object_handle_);
+ JSAutoRequest auto_request(context_);
JS::RootedObject rooted_object(context_, js_object());
return make_scoped_ptr<BaseClass>(
new MozjsUserObjectHolder(rooted_object, context_, wrapper_factory_));
diff --git a/src/cobalt/script/mozjs/opaque_root_tracker.cc b/src/cobalt/script/mozjs/opaque_root_tracker.cc
index 1ae8d32..dfc405e 100644
--- a/src/cobalt/script/mozjs/opaque_root_tracker.cc
+++ b/src/cobalt/script/mozjs/opaque_root_tracker.cc
@@ -20,6 +20,7 @@
#include <vector>
#include "cobalt/script/mozjs/weak_heap_object.h"
+#include "third_party/mozjs/js/src/jsapi.h"
namespace cobalt {
namespace script {
@@ -45,6 +46,7 @@
}
~OpaqueRootStateImpl() {
+ JSAutoRequest auto_request(context_);
for (ReferencedObjectPairVector::iterator it = referenced_objects_.begin();
it != referenced_objects_.end(); ++it) {
if (it->second.Get()) {
diff --git a/src/cobalt/script/mozjs/util/exception_helpers.cc b/src/cobalt/script/mozjs/util/exception_helpers.cc
index 030f45a..ce0ca06 100644
--- a/src/cobalt/script/mozjs/util/exception_helpers.cc
+++ b/src/cobalt/script/mozjs/util/exception_helpers.cc
@@ -20,6 +20,7 @@
#include "cobalt/script/mozjs/conversion_helpers.h"
#include "cobalt/script/mozjs/mozjs_exception_state.h"
+#include "third_party/mozjs/js/src/jsapi.h"
#include "third_party/mozjs/js/src/jsdbgapi.h"
#include "third_party/mozjs/js/src/jsscript.h"
@@ -28,6 +29,7 @@
namespace mozjs {
namespace util {
std::vector<StackFrame> GetStackTrace(JSContext* context, int max_frames) {
+ JSAutoRequest auto_request(context);
JS::StackDescription* stack_description =
JS::DescribeStack(context, max_frames);
if (max_frames == 0) {
diff --git a/src/cobalt/storage/storage.gyp b/src/cobalt/storage/storage.gyp
index 599f95a..ca9bc16 100644
--- a/src/cobalt/storage/storage.gyp
+++ b/src/cobalt/storage/storage.gyp
@@ -32,13 +32,17 @@
'savegame_fake.cc',
'storage_manager.cc',
'storage_manager.h',
+ 'upgrade/upgrade_reader.cc',
+ 'upgrade/upgrade_reader.h',
'virtual_file.cc',
'virtual_file.h',
'virtual_file_system.cc',
'virtual_file_system.h',
],
'dependencies': [
+ '<(DEPTH)/base/base.gyp:base',
'<(DEPTH)/cobalt/base/base.gyp:base',
+ '<(DEPTH)/net/net.gyp:net',
'<(DEPTH)/sql/sql.gyp:sql',
],
'conditions': [
@@ -70,6 +74,7 @@
'sources': [
'savegame_test.cc',
'storage_manager_test.cc',
+ 'upgrade/storage_upgrade_test.cc',
'virtual_file_system_test.cc',
],
'dependencies': [
@@ -78,6 +83,7 @@
'<(DEPTH)/testing/gmock.gyp:gmock',
'<(DEPTH)/testing/gtest.gyp:gtest',
'storage',
+ 'storage_upgrade_copy_test_data',
],
},
{
@@ -91,5 +97,21 @@
},
'includes': [ '../../starboard/build/deploy.gypi' ],
},
+ {
+ 'target_name': 'storage_upgrade_copy_test_data',
+ 'type': 'none',
+ 'actions': [
+ {
+ 'action_name': 'storage_upgrade_copy_test_data',
+ 'variables': {
+ 'input_files': [
+ '<(DEPTH)/cobalt/storage/upgrade/testdata/',
+ ],
+ 'output_dir': 'cobalt/storage/upgrade/testdata/',
+ },
+ 'includes': [ '../build/copy_test_data.gypi' ],
+ },
+ ],
+ },
],
}
diff --git a/src/cobalt/storage/upgrade/schema_v1.proto b/src/cobalt/storage/upgrade/schema_v1.proto
new file mode 100644
index 0000000..6907806
--- /dev/null
+++ b/src/cobalt/storage/upgrade/schema_v1.proto
@@ -0,0 +1,83 @@
+// Copyright 2016 Google Inc. All Rights Reserved.
+//
+// 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.
+
+// File schema for "upgrade" save data.
+//
+// A platform migrating to Cobalt from a pre-existing HTML5 container may need
+// to load save data in the legacy format into Cobalt. In this case, it is
+// expected the platform implementation will return the legacy save data in the
+// format described by this schema (JSON-encoded data prefixed by a fixed
+// identifier), which will then be detected by Cobalt and upgraded to the
+// current save data format.
+
+// The first 4 bytes of the data must be the ASCII characters: "UPG0".
+// The remainder of the data must be JSON-encoded according to the schema below.
+// For details of how the proto3 syntax used here maps to JSON, see:
+// https://developers.google.com/protocol-buffers/docs/proto3#json
+
+syntax = "proto3";
+
+message SaveData {
+ // Array (possibly empty) of Cookie objects, defined below.
+ repeated Cookie cookies = 1;
+
+ // Array (possibly empty) of LocalStorageEntry objects, defined below.
+ repeated LocalStorageEntry local_storage_entries = 2;
+
+ // A single cookie.
+ mesage Cookie {
+ // URL in canonical form, e.g. "https://www.youtube.com/". Must be provided
+ // or the cookie will be ignored.
+ string url = 1;
+
+ // Application-defined key. Must be provided or the cookie will be ignored.
+ string name = 2;
+
+ // Application-defined value, treated opaquely by Cobalt. Must be provided
+ // or the cookie will be ignored.
+ string value = 3;
+
+ // Domain, e.g. ".youtube.com". Defaults to the domain of the "url" field.
+ string domain = 4;
+
+ // Optional virtual path, defaults to "/".
+ string path = 5;
+
+ // Microseconds since Windows epoch (1601-01-01 00:00:00 UTC), as ASCII
+ // decimal string. Defaults to now.
+ int64 creation = 6;
+
+ // Microseconds since Windows epoch (1601-01-01 00:00:00 UTC), as ASCII
+ // decimal string. Defaults to maximum expiration period from now.
+ int64 expiration = 7;
+
+ // Microseconds since Windows epoch (1601-01-01 00:00:00 UTC), as ASCII
+ // decimal string. Defaults to now.
+ int64 last_access = 8;
+
+ // Whether this is an HTTP-only cookie. Defaults to false.
+ bool http_only = 9;
+ }
+
+ // A single local storage entry.
+ message LocalStorageEntry {
+ // Application-defined key. Must be provided or the local storage entry will
+ // be ignored.
+ string key = 1;
+
+ // Application-defined value, treated opaquely by Cobalt. Must be provided
+ // or the local storage entry will be ignored.
+ string value = 2;
+ }
+}
diff --git a/src/cobalt/storage/upgrade/storage_upgrade_test.cc b/src/cobalt/storage/upgrade/storage_upgrade_test.cc
new file mode 100644
index 0000000..e7b64f0
--- /dev/null
+++ b/src/cobalt/storage/upgrade/storage_upgrade_test.cc
@@ -0,0 +1,229 @@
+/*
+ * Copyright 2016 Google Inc. All Rights Reserved.
+ *
+ * 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.
+ */
+
+#include <cstring>
+
+#include "base/base_paths.h"
+#include "base/file_util.h"
+#include "base/logging.h"
+#include "base/path_service.h"
+#include "base/platform_file.h"
+#include "base/time.h"
+#include "cobalt/storage/upgrade/upgrade_reader.h"
+#include "googleurl/src/gurl.h"
+#include "net/cookies/canonical_cookie.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace cobalt {
+namespace storage {
+namespace upgrade {
+
+namespace {
+
+const int kHeaderSize = 4;
+const char kHeader[] = "UPG0";
+
+void ReadFileToString(const char* pathname, std::string* string_out) {
+ EXPECT_TRUE(pathname);
+ EXPECT_TRUE(string_out);
+ FilePath file_path;
+ EXPECT_TRUE(PathService::Get(base::DIR_SOURCE_ROOT, &file_path));
+ file_path = file_path.Append(pathname);
+ EXPECT_TRUE(file_util::ReadFileToString(file_path, string_out));
+ EXPECT_GT(string_out->length(), static_cast<size_t>(kHeaderSize));
+ EXPECT_LE(string_out->length(), static_cast<size_t>(10 * 1024 * 1024));
+ EXPECT_EQ(string_out->find(kHeader), 0);
+}
+
+void ValidateCookie(const net::CanonicalCookie* cookie, const std::string& url,
+ const std::string& name, const std::string& value,
+ const std::string domain, const std::string& path,
+ const base::Time& creation, const base::Time expiration,
+ bool http_only) {
+ EXPECT_TRUE(cookie);
+ EXPECT_EQ(cookie->Source(),
+ net::CanonicalCookie::GetCookieSourceFromURL(GURL(url)));
+ EXPECT_EQ(cookie->Name(), name);
+ EXPECT_EQ(cookie->Value(), value);
+ EXPECT_EQ(cookie->Domain(), domain);
+ EXPECT_EQ(cookie->Path(), path);
+ EXPECT_EQ((cookie->CreationDate() - creation).InSeconds(), 0);
+ EXPECT_EQ((cookie->ExpiryDate() - expiration).InSeconds(), 0);
+ EXPECT_EQ((cookie->LastAccessDate() - base::Time::Now()).InSeconds(), 0);
+ EXPECT_EQ(cookie->IsSecure(), true);
+ EXPECT_EQ(cookie->IsHttpOnly(), http_only);
+}
+
+void ValidateCookie(const net::CanonicalCookie* cookie, const std::string& url,
+ const std::string& name, const std::string& value) {
+ const std::string host = GURL(url).host();
+ const std::string domain = host.empty() ? "" : host.substr(host.find("."));
+ const std::string path = "/";
+ const base::Time creation = base::Time::Now();
+ const base::Time expiration = creation;
+ const bool http_only = false;
+ ValidateCookie(cookie, url, name, value, domain, path, creation, expiration,
+ http_only);
+}
+
+void ValidateLocalStorageEntry(
+ const UpgradeReader::LocalStorageEntry* local_storage_entry,
+ const std::string& key, const std::string& value) {
+ EXPECT_TRUE(local_storage_entry);
+ EXPECT_EQ(local_storage_entry->key, key);
+ EXPECT_EQ(local_storage_entry->value, value);
+}
+
+} // namespace
+
+TEST(StorageUpgradeTest, UpgradeMinimalCookie) {
+ std::string file_contents;
+ ReadFileToString("cobalt/storage/upgrade/testdata/minimal_cookie_v1.json",
+ &file_contents);
+ UpgradeReader upgrade_reader(
+ file_contents.c_str() + kHeaderSize,
+ static_cast<int>(file_contents.length()) - kHeaderSize);
+
+ // 1 cookie.
+ EXPECT_EQ(upgrade_reader.GetNumCookies(), 1);
+ const net::CanonicalCookie* cookie = upgrade_reader.GetCookie(0);
+ ValidateCookie(cookie, "https://www.youtube.com/", "cookie_name",
+ "cookie_value");
+ EXPECT_FALSE(upgrade_reader.GetCookie(1));
+
+ // 0 local storage entries.
+ EXPECT_EQ(upgrade_reader.GetNumLocalStorageEntries(), 0);
+ EXPECT_FALSE(upgrade_reader.GetLocalStorageEntry(0));
+}
+
+TEST(StorageUpgradeTest, UpgradeMinimalLocalStorageEntry) {
+ std::string file_contents;
+ ReadFileToString(
+ "cobalt/storage/upgrade/testdata/minimal_local_storage_entry_v1.json",
+ &file_contents);
+ UpgradeReader upgrade_reader(
+ file_contents.c_str() + kHeaderSize,
+ static_cast<int>(file_contents.length()) - kHeaderSize);
+
+ // 0 cookies.
+ EXPECT_EQ(upgrade_reader.GetNumCookies(), 0);
+ EXPECT_FALSE(upgrade_reader.GetCookie(0));
+
+ // 1 local storage entry.
+ EXPECT_EQ(upgrade_reader.GetNumLocalStorageEntries(), 1);
+ const UpgradeReader::LocalStorageEntry* local_storage_entry =
+ upgrade_reader.GetLocalStorageEntry(0);
+ ValidateLocalStorageEntry(local_storage_entry, "key-1", "value-1");
+ EXPECT_FALSE(upgrade_reader.GetLocalStorageEntry(1));
+}
+
+TEST(StorageUpgradeTest, UpgradeFullData) {
+ std::string file_contents;
+ ReadFileToString("cobalt/storage/upgrade/testdata/full_data_v1.json",
+ &file_contents);
+ UpgradeReader upgrade_reader(
+ file_contents.c_str() + kHeaderSize,
+ static_cast<int>(file_contents.length()) - kHeaderSize);
+
+ // 2 cookies.
+ EXPECT_EQ(upgrade_reader.GetNumCookies(), 2);
+ const net::CanonicalCookie* cookie = upgrade_reader.GetCookie(0);
+ base::Time creation = base::Time::FromInternalValue(13119668760000000L);
+ base::Time expiration = base::Time::FromInternalValue(13120000000000000L);
+ ValidateCookie(cookie, "https://www.youtube.com/", "cookie_name",
+ "cookie_value", "cookie.domain", "cookie/path", creation,
+ expiration, true);
+ cookie = upgrade_reader.GetCookie(1);
+ creation = base::Time::FromInternalValue(13109668760000000L);
+ expiration = base::Time::FromInternalValue(13110000000000000L);
+ ValidateCookie(cookie, "https://www.somewhere.com/", "cookie_name_2",
+ "cookie_value_2", "cookie.domain2", "cookie/path/2", creation,
+ expiration, true);
+ EXPECT_FALSE(upgrade_reader.GetCookie(2));
+
+ // 2 local storage entries.
+ EXPECT_EQ(upgrade_reader.GetNumLocalStorageEntries(), 2);
+ const UpgradeReader::LocalStorageEntry* local_storage_entry =
+ upgrade_reader.GetLocalStorageEntry(0);
+ ValidateLocalStorageEntry(local_storage_entry, "key-1", "value-1");
+ local_storage_entry = upgrade_reader.GetLocalStorageEntry(1);
+ ValidateLocalStorageEntry(local_storage_entry, "key-2", "value-2");
+ EXPECT_FALSE(upgrade_reader.GetLocalStorageEntry(2));
+}
+
+TEST(StorageUpgradeTest, UpgradeMissingFields) {
+ std::string file_contents;
+ ReadFileToString("cobalt/storage/upgrade/testdata/missing_fields_v1.json",
+ &file_contents);
+ UpgradeReader upgrade_reader(
+ file_contents.c_str() + kHeaderSize,
+ static_cast<int>(file_contents.length()) - kHeaderSize);
+
+ // 1 cookie with missing fields, 2 local storage entries with missing fields,
+ // 1 valid local storage entry.
+ EXPECT_EQ(upgrade_reader.GetNumCookies(), 0);
+ EXPECT_FALSE(upgrade_reader.GetCookie(0));
+ EXPECT_EQ(upgrade_reader.GetNumLocalStorageEntries(), 1);
+ const UpgradeReader::LocalStorageEntry* local_storage_entry =
+ upgrade_reader.GetLocalStorageEntry(0);
+ ValidateLocalStorageEntry(local_storage_entry, "key-3", "value-3");
+ EXPECT_FALSE(upgrade_reader.GetLocalStorageEntry(1));
+}
+
+TEST(StorageUpgradeTest, UpgradeMalformed) {
+ std::string file_contents;
+ ReadFileToString("cobalt/storage/upgrade/testdata/malformed_v1.json",
+ &file_contents);
+ UpgradeReader upgrade_reader(
+ file_contents.c_str() + kHeaderSize,
+ static_cast<int>(file_contents.length()) - kHeaderSize);
+
+ // No cookies or local storage entries available in malformed data.
+ EXPECT_EQ(upgrade_reader.GetNumCookies(), 0);
+ EXPECT_FALSE(upgrade_reader.GetCookie(0));
+ EXPECT_EQ(upgrade_reader.GetNumLocalStorageEntries(), 0);
+ EXPECT_FALSE(upgrade_reader.GetLocalStorageEntry(0));
+}
+
+TEST(StorageUpgradeTest, UpgradeExtraFields) {
+ std::string file_contents;
+ ReadFileToString("cobalt/storage/upgrade/testdata/extra_fields_v1.json",
+ &file_contents);
+ UpgradeReader upgrade_reader(
+ file_contents.c_str() + kHeaderSize,
+ static_cast<int>(file_contents.length()) - kHeaderSize);
+
+ // 1 cookie, extra fields should be ignored.
+ EXPECT_EQ(upgrade_reader.GetNumCookies(), 1);
+ const net::CanonicalCookie* cookie = upgrade_reader.GetCookie(0);
+ ValidateCookie(cookie, "https://www.youtube.com/", "cookie_name",
+ "cookie_value");
+ EXPECT_FALSE(upgrade_reader.GetCookie(1));
+
+ // 2 local storage entries, extra fields should be ignored.
+ EXPECT_EQ(upgrade_reader.GetNumLocalStorageEntries(), 2);
+ const UpgradeReader::LocalStorageEntry* local_storage_entry =
+ upgrade_reader.GetLocalStorageEntry(0);
+ ValidateLocalStorageEntry(local_storage_entry, "key-1", "value-1");
+ local_storage_entry = upgrade_reader.GetLocalStorageEntry(1);
+ ValidateLocalStorageEntry(local_storage_entry, "key-2", "value-2");
+ EXPECT_FALSE(upgrade_reader.GetLocalStorageEntry(2));
+}
+
+} // namespace upgrade
+} // namespace storage
+} // namespace cobalt
diff --git a/src/cobalt/storage/upgrade/testdata/extra_fields_v1.json b/src/cobalt/storage/upgrade/testdata/extra_fields_v1.json
new file mode 100644
index 0000000..7709e50
--- /dev/null
+++ b/src/cobalt/storage/upgrade/testdata/extra_fields_v1.json
@@ -0,0 +1,22 @@
+UPG0
+{
+ "cookies": [
+ {
+ "url": "https://www.youtube.com",
+ "name": "cookie_name",
+ "value": "cookie_value",
+ "unexpected": "dummy_value"
+ }
+ ],
+ "local_storage_entries": [
+ {
+ "key": "key-1",
+ "value": "value-1",
+ "unexpected": "dummy_value"
+ },
+ {
+ "key": "key-2",
+ "value": "value-2"
+ }
+ ]
+}
diff --git a/src/cobalt/storage/upgrade/testdata/full_data_v1.json b/src/cobalt/storage/upgrade/testdata/full_data_v1.json
new file mode 100644
index 0000000..c5a039f
--- /dev/null
+++ b/src/cobalt/storage/upgrade/testdata/full_data_v1.json
@@ -0,0 +1,37 @@
+UPG0
+{
+ "cookies": [
+ {
+ "url": "https://www.youtube.com",
+ "name": "cookie_name",
+ "value": "cookie_value",
+ "domain": "cookie.domain",
+ "path": "cookie/path",
+ "creation": "13119668760000000",
+ "expiration": "13120000000000000",
+ "last_acess": "13119668770000000",
+ "http_only": true
+ },
+ {
+ "url": "http://www.somewhere.com",
+ "name": "cookie_name_2",
+ "value": "cookie_value_2",
+ "domain": "cookie.domain2",
+ "path": "cookie/path/2",
+ "creation": "13109668760000000",
+ "expiration": "13110000000000000",
+ "last_acess": "13109668770000000",
+ "http_only": true
+ }
+ ],
+ "local_storage_entries": [
+ {
+ "key": "key-1",
+ "value": "value-1"
+ },
+ {
+ "key": "key-2",
+ "value": "value-2"
+ }
+ ]
+}
diff --git a/src/cobalt/storage/upgrade/testdata/malformed_v1.json b/src/cobalt/storage/upgrade/testdata/malformed_v1.json
new file mode 100644
index 0000000..6d87bf0
--- /dev/null
+++ b/src/cobalt/storage/upgrade/testdata/malformed_v1.json
@@ -0,0 +1,36 @@
+UPG0
+{
+ "cookies": [
+ {
+ "url": "https://www.youtube.com",
+ "name": "cookie_name",
+ "value": "cookie_value"
+ "domain": "cookie.domain",
+ "path": "cookie/path",
+ "creation": "13119668760000000",
+ "expiration": "13120000000000000",
+ "last_acess": "13119668770000000",
+ "http_only": true
+ },
+ {
+ "url": "http://www.somewhere.com",
+ "name": "cookie_name_2",
+ "value": "cookie_value_2",
+ "domain": "cookie.domain2",
+ "path": "cookie/path/2",
+ "creation": "13109668760000000",
+ "expiration": "13110000000000000",
+ "last_acess": "13109668770000000",
+ "http_only": true
+ ],
+ "local_storage_entries":
+ {
+ "key": "key-1",
+ "value": "value-1"
+ },
+ {
+ "key": "key-2",
+ "value": "value-2"
+ }
+ ]
+}
diff --git a/src/cobalt/storage/upgrade/testdata/minimal_cookie_v1.json b/src/cobalt/storage/upgrade/testdata/minimal_cookie_v1.json
new file mode 100644
index 0000000..7dbd209
--- /dev/null
+++ b/src/cobalt/storage/upgrade/testdata/minimal_cookie_v1.json
@@ -0,0 +1,10 @@
+UPG0
+{
+ "cookies": [
+ {
+ "url": "https://www.youtube.com",
+ "name": "cookie_name",
+ "value": "cookie_value"
+ }
+ ]
+}
diff --git a/src/cobalt/storage/upgrade/testdata/minimal_local_storage_entry_v1.json b/src/cobalt/storage/upgrade/testdata/minimal_local_storage_entry_v1.json
new file mode 100644
index 0000000..555e62d
--- /dev/null
+++ b/src/cobalt/storage/upgrade/testdata/minimal_local_storage_entry_v1.json
@@ -0,0 +1,9 @@
+UPG0
+{
+ "local_storage_entries": [
+ {
+ "key": "key-1",
+ "value": "value-1"
+ }
+ ]
+}
diff --git a/src/cobalt/storage/upgrade/testdata/missing_fields_v1.json b/src/cobalt/storage/upgrade/testdata/missing_fields_v1.json
new file mode 100644
index 0000000..52a2a4e
--- /dev/null
+++ b/src/cobalt/storage/upgrade/testdata/missing_fields_v1.json
@@ -0,0 +1,21 @@
+UPG0
+{
+ "cookies": [
+ {
+ "name": "cookie_name",
+ "value": "cookie_value"
+ }
+ ],
+ "local_storage_entries": [
+ {
+ "key": "key-1"
+ },
+ {
+ "value": "value-2"
+ },
+ {
+ "key": "key-3",
+ "value": "value-3"
+ }
+ ]
+}
diff --git a/src/cobalt/storage/upgrade/upgrade_reader.cc b/src/cobalt/storage/upgrade/upgrade_reader.cc
new file mode 100644
index 0000000..35fdb53
--- /dev/null
+++ b/src/cobalt/storage/upgrade/upgrade_reader.cc
@@ -0,0 +1,227 @@
+/*
+ * Copyright 2016 Google Inc. All Rights Reserved.
+ *
+ * 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.
+ */
+
+#include "cobalt/storage/upgrade/upgrade_reader.h"
+
+#include <string>
+
+#include "base/json/json_reader.h"
+#include "base/logging.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/string_number_conversions.h"
+#include "googleurl/src/gurl.h"
+
+namespace cobalt {
+namespace storage {
+namespace upgrade {
+
+namespace {
+
+// Used as a sanity check.
+const int kMaxUpgradeDataSize = 10 * 1024 * 1024;
+
+// Deseralize a time value encoded as a possibly empty ASCII decimal string.
+base::Time StringToTime(const std::string& time_as_string) {
+ if (!time_as_string.empty()) {
+ int64 time_as_int64;
+ if (base::StringToInt64(time_as_string, &time_as_int64)) {
+ return base::Time::FromInternalValue(time_as_int64);
+ }
+ }
+
+ // Default value.
+ return base::Time::Now();
+}
+
+base::Time GetSerializedTime(const base::DictionaryValue* dictionary,
+ const std::string& field_name) {
+ std::string time_string;
+ dictionary->GetString(field_name, &time_string);
+ return StringToTime(time_string);
+}
+
+// Get a list contained in a dictionary.
+const base::ListValue* GetList(const base::DictionaryValue* dictionary,
+ const std::string& list_name) {
+ if (!dictionary) {
+ return NULL;
+ }
+
+ const base::ListValue* list = NULL;
+ if (!dictionary->GetList(list_name, &list)) {
+ return NULL;
+ }
+
+ return list;
+}
+
+// Get the size of a list contained in a dictionary.
+int GetListSize(const base::DictionaryValue* dictionary,
+ const std::string& list_name) {
+ const base::ListValue* list = GetList(dictionary, list_name);
+ if (!list) {
+ return 0;
+ }
+
+ return static_cast<int>(list->GetSize());
+}
+
+// Get a dictionary in a list contained in a dictionary.
+const base::DictionaryValue* GetListItem(
+ const base::DictionaryValue* dictionary, const std::string& list_name,
+ int index) {
+ const base::ListValue* list = GetList(dictionary, list_name);
+ if (!list) {
+ return NULL;
+ }
+
+ if (index < 0 || index >= static_cast<int>(list->GetSize())) {
+ return NULL;
+ }
+
+ const base::DictionaryValue* list_item = NULL;
+ if (!list->GetDictionary(static_cast<size_t>(index), &list_item)) {
+ return NULL;
+ }
+
+ return list_item;
+}
+
+} // namespace
+
+UpgradeReader::UpgradeReader(const char* data, int size) {
+ DCHECK(data);
+ DCHECK_GT(size, 0);
+ DCHECK_LE(size, kMaxUpgradeDataSize);
+
+ base::JSONReader json_reader;
+ scoped_ptr<base::Value> parsed(
+ json_reader.ReadToValue(std::string(data, static_cast<size_t>(size))));
+ base::DictionaryValue* valid_dictionary = NULL;
+ if (parsed) {
+ parsed->GetAsDictionary(&valid_dictionary);
+ }
+
+ if (valid_dictionary) {
+ ProcessValues(valid_dictionary);
+ } else {
+ DLOG(ERROR) << "Cannot parse upgrade save data: "
+ << base::JSONReader::ErrorCodeToString(
+ json_reader.error_code());
+ }
+}
+
+int UpgradeReader::GetNumCookies() const {
+ return static_cast<int>(cookies_.size());
+}
+
+int UpgradeReader::GetNumLocalStorageEntries() const {
+ return static_cast<int>(local_storage_entries_.size());
+}
+
+const net::CanonicalCookie* UpgradeReader::GetCookie(int index) const {
+ if (index >= 0 && index < static_cast<int>(cookies_.size())) {
+ return &cookies_[static_cast<size_t>(index)];
+ } else {
+ return static_cast<const net::CanonicalCookie*>(NULL);
+ }
+}
+
+void UpgradeReader::AddCookieIfValid(const base::DictionaryValue* cookie) {
+ DCHECK(cookie);
+
+ // Required attributes.
+ std::string url;
+ std::string name;
+ std::string value;
+ cookie->GetString("url", &url);
+ cookie->GetString("name", &name);
+ cookie->GetString("value", &value);
+ if (url.empty() || name.empty() || value.empty()) {
+ return;
+ }
+
+ // Optional attributes with default values.
+ const GURL gurl(url);
+ const std::string host = gurl.host();
+ std::string domain = host.empty() ? "" : host.substr(host.find("."));
+ cookie->GetString("domain", &domain);
+ std::string path = "/";
+ cookie->GetString("path", &path);
+ base::Time creation = GetSerializedTime(cookie, "creation");
+ base::Time expiration = GetSerializedTime(cookie, "expiration");
+ base::Time last_access = GetSerializedTime(cookie, "last_access");
+ bool http_only = false;
+ cookie->GetBoolean("http_only", &http_only);
+
+ // Attributes not defined in upgrade data.
+ const std::string mac_key;
+ const std::string mac_algorithm;
+ const bool secure = true;
+
+ cookies_.push_back(net::CanonicalCookie(
+ gurl, name, value, domain, path, mac_key, mac_algorithm, creation,
+ expiration, last_access, secure, http_only));
+}
+
+const UpgradeReader::LocalStorageEntry* UpgradeReader::GetLocalStorageEntry(
+ int index) const {
+ if (index >= 0 && index < static_cast<int>(local_storage_entries_.size())) {
+ return &local_storage_entries_[static_cast<size_t>(index)];
+ } else {
+ return static_cast<const LocalStorageEntry*>(NULL);
+ }
+}
+
+void UpgradeReader::AddLocalStorageEntryIfValid(
+ const base::DictionaryValue* local_storage_entry) {
+ DCHECK(local_storage_entry);
+ std::string key;
+ std::string value;
+ if (!local_storage_entry->GetString("key", &key) ||
+ !local_storage_entry->GetString("value", &value) || key.empty() ||
+ value.empty()) {
+ return;
+ }
+
+ local_storage_entries_.push_back(LocalStorageEntry(key, value));
+}
+
+void UpgradeReader::ProcessValues(const base::DictionaryValue* dictionary) {
+ DCHECK(dictionary);
+
+ const int num_cookies = GetListSize(dictionary, "cookies");
+ for (int n = 0; n < num_cookies; n++) {
+ const base::DictionaryValue* cookie = GetListItem(dictionary, "cookies", n);
+ if (cookie) {
+ AddCookieIfValid(cookie);
+ }
+ }
+
+ const int num_local_storage_entries =
+ GetListSize(dictionary, "local_storage_entries");
+ for (int n = 0; n < num_local_storage_entries; n++) {
+ const base::DictionaryValue* local_storage_entry =
+ GetListItem(dictionary, "local_storage_entries", n);
+ if (local_storage_entry) {
+ AddLocalStorageEntryIfValid(local_storage_entry);
+ }
+ }
+}
+
+} // namespace upgrade
+} // namespace storage
+} // namespace cobalt
diff --git a/src/cobalt/storage/upgrade/upgrade_reader.h b/src/cobalt/storage/upgrade/upgrade_reader.h
new file mode 100644
index 0000000..00d1462
--- /dev/null
+++ b/src/cobalt/storage/upgrade/upgrade_reader.h
@@ -0,0 +1,81 @@
+/*
+ * Copyright 2016 Google Inc. All Rights Reserved.
+ *
+ * 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.
+ */
+
+#ifndef COBALT_STORAGE_UPGRADE_UPGRADE_READER_H_
+#define COBALT_STORAGE_UPGRADE_UPGRADE_READER_H_
+
+#include <string>
+#include <vector>
+
+#include "base/values.h"
+#include "net/cookies/canonical_cookie.h"
+
+namespace cobalt {
+namespace storage {
+namespace upgrade {
+
+// Class description goes here.
+class UpgradeReader {
+ public:
+ struct LocalStorageEntry {
+ LocalStorageEntry(const std::string& key, const std::string& value)
+ : key(key), value(value) {}
+ std::string key;
+ std::string value;
+ };
+
+ // Parse |data| in JSON-encoded legacy save data upgrade format.
+ UpgradeReader(const char* data, int size);
+
+ // The number of valid cookies found in the parsed data. May be zero.
+ int GetNumCookies() const;
+
+ // The number of valid local storage entries found in the parsed data. May be
+ // zero.
+ int GetNumLocalStorageEntries() const;
+
+ // Get one of the cookies found in the parsed data, specified by |index|
+ // between 0 and |GetNumCookies| - 1. If the cookie doesn't exist, return
+ // NULL.
+ const net::CanonicalCookie* GetCookie(int index) const;
+
+ // Get one of the local storage entries found in the parsed data, specified
+ // by |index| between 0 and |GetNumLocalStorageEntries| - 1. If the local
+ // storage entry doesn't exist, return NULL.
+ const LocalStorageEntry* GetLocalStorageEntry(int index) const;
+
+ private:
+ // Process the parsed values and populate |cookies_| and
+ // |local_storage_entries_|.
+ void ProcessValues(const base::DictionaryValue* dictionary);
+
+ // Add an entry to |cookies_| if |cookie| encodes a valid cookie.
+ void AddCookieIfValid(const base::DictionaryValue* cookie);
+
+ // Add an entry to |local_storage_entries_| if |local_storage_entry| encodes a
+ // valid local storage entry.
+ void AddLocalStorageEntryIfValid(
+ const base::DictionaryValue* local_storage_entry);
+
+ std::vector<net::CanonicalCookie> cookies_;
+ std::vector<LocalStorageEntry> local_storage_entries_;
+};
+
+} // namespace upgrade
+} // namespace storage
+} // namespace cobalt
+
+#endif // COBALT_STORAGE_UPGRADE_UPGRADE_READER_H_
diff --git a/src/cobalt/web_animations/animation.cc b/src/cobalt/web_animations/animation.cc
index 0c8a578..16c7d30 100644
--- a/src/cobalt/web_animations/animation.cc
+++ b/src/cobalt/web_animations/animation.cc
@@ -65,14 +65,18 @@
UpdatePendingTasks();
}
-// https://www.w3.org/TR/2015/WD-web-animations-1-20150707/#the-current-time-of-an-animation
-base::optional<double> Animation::current_time() const {
+base::optional<base::TimeDelta> Animation::current_time_as_time_delta() const {
if (!timeline_) {
return base::nullopt;
}
- base::optional<base::TimeDelta> current_time =
- data_.ComputeLocalTimeFromTimelineTime(timeline_->current_time());
+ return data_.ComputeLocalTimeFromTimelineTime(
+ timeline_->current_time_as_time_delta());
+}
+
+// https://www.w3.org/TR/2015/WD-web-animations-1-20150707/#the-current-time-of-an-animation
+base::optional<double> Animation::current_time() const {
+ base::optional<base::TimeDelta> current_time = current_time_as_time_delta();
return current_time ? base::optional<double>(current_time->InMillisecondsF())
: base::nullopt;
}
@@ -86,16 +90,27 @@
// https://www.w3.org/TR/2015/WD-web-animations-1-20150707/#the-current-time-of-an-animation
base::optional<base::TimeDelta>
Animation::Data::ComputeLocalTimeFromTimelineTime(
- const base::optional<double>& timeline_time_in_milliseconds) const {
+ const base::optional<base::TimeDelta>& timeline_time) const {
// TODO: Take into account the hold time.
- if (!timeline_time_in_milliseconds || !start_time_) {
+ if (!timeline_time || !start_time_) {
return base::nullopt;
}
- return ScaleTime(
- base::TimeDelta::FromMillisecondsD(*timeline_time_in_milliseconds) -
- *start_time_,
- playback_rate_);
+ return ScaleTime(*timeline_time - *start_time_, playback_rate_);
+}
+
+base::optional<base::TimeDelta>
+Animation::Data::ComputeTimelineTimeFromLocalTime(
+ const base::optional<base::TimeDelta>& local_time) const {
+ if (!start_time_ || !local_time) {
+ return base::nullopt;
+ }
+
+ if (local_time == base::TimeDelta::Max()) {
+ return base::TimeDelta::Max();
+ }
+
+ return ScaleTime(*local_time, 1.0 / playback_rate_) + *start_time_;
}
// https://www.w3.org/TR/2015/WD-web-animations-1-20150707/#setting-the-current-time-of-an-animation
@@ -116,35 +131,29 @@
}
void Animation::UpdatePendingTasks() {
- base::optional<double> local_time_in_ms = current_time();
+ if (!effect_) {
+ return;
+ }
- if (!local_time_in_ms) {
- // If the local time is unresolved, then we cannot know when we will enter
- // the "after phase".
- on_enter_after_phase_.reset();
+ base::TimeDelta end_time_local =
+ effect_->timing()->data().time_until_after_phase(base::TimeDelta());
+
+ base::optional<base::TimeDelta> end_time_timeline =
+ data_.ComputeTimelineTimeFromLocalTime(end_time_local);
+
+ // If the local time is unresolved, then we cannot know when we will enter
+ // the "after phase".
+ if (end_time_timeline &&
+ *end_time_timeline >= *timeline_->current_time_as_time_delta() &&
+ *end_time_timeline != base::TimeDelta::Max()) {
+ // Setup the "upon entering the after phase" event to fire at the
+ // specified timeline time.
+ on_enter_after_phase_ = timeline_->QueueTask(
+ *end_time_timeline,
+ base::Bind(&Animation::OnEnterAfterPhase, base::Unretained(this)));
} else {
- if (!effect_) {
- return;
- }
-
- base::TimeDelta local_time =
- base::TimeDelta::FromMillisecondsD(*local_time_in_ms);
-
- base::TimeDelta time_to_after_phase =
- effect_->timing()->data().time_until_after_phase(local_time);
- if (time_to_after_phase >= base::TimeDelta() &&
- time_to_after_phase != base::TimeDelta::Max()) {
- // Setup the "upon entering the after phase" event to fire at the
- // specified timeline time.
- if (timeline_) {
- on_enter_after_phase_ = timeline_->QueueTask(
- *data_.start_time() + time_to_after_phase,
- base::Bind(&Animation::OnEnterAfterPhase, base::Unretained(this)));
- }
- } else {
- // We are already in the after phase, so clear this task.
- on_enter_after_phase_.reset();
- }
+ // We are already in the after phase, so clear this task.
+ on_enter_after_phase_.reset();
}
}
diff --git a/src/cobalt/web_animations/animation.h b/src/cobalt/web_animations/animation.h
index f7eb113..3240dbe 100644
--- a/src/cobalt/web_animations/animation.h
+++ b/src/cobalt/web_animations/animation.h
@@ -69,7 +69,9 @@
// Converts the animation's timeline's time into the animation's local
// time, which takes into account this animation's start_time().
base::optional<base::TimeDelta> ComputeLocalTimeFromTimelineTime(
- const base::optional<double>& timeline_time_in_milliseconds) const;
+ const base::optional<base::TimeDelta>& timeline_time) const;
+ base::optional<base::TimeDelta> ComputeTimelineTimeFromLocalTime(
+ const base::optional<base::TimeDelta>& local_time) const;
private:
base::optional<base::TimeDelta> start_time_;
@@ -128,6 +130,8 @@
}
base::optional<double> current_time() const;
+ base::optional<base::TimeDelta> current_time_as_time_delta() const;
+
void set_current_time(const base::optional<double>& current_time);
double playback_rate() const { return data_.playback_rate(); }
diff --git a/src/cobalt/web_animations/animation_test.cc b/src/cobalt/web_animations/animation_test.cc
index f07a57a..c4bba2b 100644
--- a/src/cobalt/web_animations/animation_test.cc
+++ b/src/cobalt/web_animations/animation_test.cc
@@ -32,7 +32,8 @@
TEST(AnimationDataTests, LocalTimeIsUnresolvedIfStartTimeIsUnresolved) {
Animation::Data animation;
base::optional<base::TimeDelta> local_time =
- animation.ComputeLocalTimeFromTimelineTime(3000.0);
+ animation.ComputeLocalTimeFromTimelineTime(
+ base::TimeDelta::FromMilliseconds(3000));
EXPECT_FALSE(local_time);
}
@@ -41,7 +42,8 @@
Animation::Data animation;
animation.set_start_time(base::TimeDelta::FromSeconds(2));
base::optional<base::TimeDelta> local_time =
- animation.ComputeLocalTimeFromTimelineTime(3000.0);
+ animation.ComputeLocalTimeFromTimelineTime(
+ base::TimeDelta::FromMilliseconds(3000));
ASSERT_TRUE(local_time);
EXPECT_EQ(1.0, local_time->InSecondsF());
@@ -52,7 +54,8 @@
animation.set_start_time(base::TimeDelta::FromSeconds(2));
animation.set_playback_rate(2.0);
base::optional<base::TimeDelta> local_time =
- animation.ComputeLocalTimeFromTimelineTime(3000.0);
+ animation.ComputeLocalTimeFromTimelineTime(
+ base::TimeDelta::FromMilliseconds(3000));
ASSERT_TRUE(local_time);
EXPECT_EQ(2.0, local_time->InSecondsF());
diff --git a/src/cobalt/web_animations/animation_timeline.cc b/src/cobalt/web_animations/animation_timeline.cc
index c006496..04adc73 100644
--- a/src/cobalt/web_animations/animation_timeline.cc
+++ b/src/cobalt/web_animations/animation_timeline.cc
@@ -41,7 +41,7 @@
// Returns the current time for the document. This is based off of the last
// sampled time.
// https://www.w3.org/TR/web-animations-1/#the-animationtimeline-interface
-base::optional<double> AnimationTimeline::current_time() {
+base::optional<double> AnimationTimeline::current_time() const {
if (sampled_clock_time_) {
return sampled_clock_time_->InMillisecondsF();
} else {
diff --git a/src/cobalt/web_animations/animation_timeline.h b/src/cobalt/web_animations/animation_timeline.h
index 57e0f57..3225f6f 100644
--- a/src/cobalt/web_animations/animation_timeline.h
+++ b/src/cobalt/web_animations/animation_timeline.h
@@ -39,10 +39,16 @@
// Returns the current sample time of the timeline, in milliseconds. If the
// returned optional is not engaged, this timeline is 'unresolved'.
- base::optional<double> current_time();
+ base::optional<double> current_time() const;
// Custom, not in any spec.
+ // Helper class to return the current time as a base::TimeDelta instead of a
+ // double.
+ const base::optional<base::TimeDelta>& current_time_as_time_delta() const {
+ return sampled_clock_time_;
+ }
+
// The owner of this timeline should call Sample() each time a new sample
// time is ready.
void Sample();
diff --git a/src/cobalt/web_animations/baked_animation_set.cc b/src/cobalt/web_animations/baked_animation_set.cc
index 63fce67..02d5f28 100644
--- a/src/cobalt/web_animations/baked_animation_set.cc
+++ b/src/cobalt/web_animations/baked_animation_set.cc
@@ -16,6 +16,8 @@
#include "cobalt/web_animations/baked_animation_set.h"
+#include <algorithm>
+
#include "cobalt/web_animations/animation_effect_read_only.h"
namespace cobalt {
@@ -33,8 +35,7 @@
cssom::CSSComputedStyleData* in_out_style) const {
// Get the animation's local time from the Animation::Data object.
base::optional<base::TimeDelta> local_time =
- animation_data_.ComputeLocalTimeFromTimelineTime(
- timeline_time.InMillisecondsF());
+ animation_data_.ComputeLocalTimeFromTimelineTime(timeline_time);
// Obtain the iteration progress from the AnimationEffectTimingReadOnly::Data
// object.
@@ -52,6 +53,13 @@
*iteration_progress.current_iteration);
}
+base::TimeDelta BakedAnimation::end_time() const {
+ base::TimeDelta end_time_local =
+ effect_timing_data_.time_until_after_phase(base::TimeDelta());
+
+ return *animation_data_.ComputeTimelineTimeFromLocalTime(end_time_local);
+}
+
BakedAnimationSet::BakedAnimationSet(const AnimationSet& animation_set) {
for (AnimationSet::InternalSet::const_iterator iter =
animation_set.animations().begin();
@@ -77,5 +85,15 @@
}
}
+base::TimeDelta BakedAnimationSet::end_time() const {
+ base::TimeDelta max_end_time = -base::TimeDelta::Max();
+ for (AnimationList::const_iterator iter = animations_.begin();
+ iter != animations_.end(); ++iter) {
+ base::TimeDelta animation_end_time = (*iter)->end_time();
+ max_end_time = std::max(animation_end_time, max_end_time);
+ }
+ return max_end_time;
+}
+
} // namespace web_animations
} // namespace cobalt
diff --git a/src/cobalt/web_animations/baked_animation_set.h b/src/cobalt/web_animations/baked_animation_set.h
index 4bdb083..b414aeb 100644
--- a/src/cobalt/web_animations/baked_animation_set.h
+++ b/src/cobalt/web_animations/baked_animation_set.h
@@ -49,6 +49,10 @@
void Apply(const base::TimeDelta& timeline_time,
cssom::CSSComputedStyleData* in_out_style) const;
+ // Returns the timeline time at which this animation will end. If the
+ // animation has no ending, base::TimeDelta::Max() will be returned.
+ base::TimeDelta end_time() const;
+
private:
const Animation::Data animation_data_;
const AnimationEffectTimingReadOnly::Data effect_timing_data_;
@@ -67,6 +71,10 @@
void Apply(const base::TimeDelta& timeline_time,
cssom::CSSComputedStyleData* in_out_style) const;
+ // Returns the timeline time at which point all animations in the set are
+ // ended, or base::TimeDelta::Max() if at leats one animation will never end.
+ base::TimeDelta end_time() const;
+
private:
typedef ScopedVector<BakedAnimation> AnimationList;
AnimationList animations_;
diff --git a/src/media/base/sbplayer_pipeline.cc b/src/media/base/sbplayer_pipeline.cc
index 971f574..9c09927 100644
--- a/src/media/base/sbplayer_pipeline.cc
+++ b/src/media/base/sbplayer_pipeline.cc
@@ -111,6 +111,18 @@
}
}
+// Used to post parameters to SbPlayerPipeline::StartTask() as the number of
+// parameters exceed what base::Bind() can support.
+struct StartTaskParameters {
+ scoped_refptr<Demuxer> demuxer;
+ SetDecryptorReadyCB decryptor_ready_cb;
+ PipelineStatusCB ended_cb;
+ PipelineStatusCB error_cb;
+ PipelineStatusCB seek_cb;
+ Pipeline::BufferingStateCB buffering_state_cb;
+ base::Closure duration_change_cb;
+};
+
class SetBoundsCaller : public base::RefCountedThreadSafe<SetBoundsCaller> {
public:
SetBoundsCaller() : player_(kSbPlayerInvalid) {}
@@ -180,7 +192,10 @@
typedef std::map<const void*, std::pair<scoped_refptr<DecoderBuffer>, int> >
DecodingBuffers;
- void StartTask();
+ void StartTask(const StartTaskParameters& parameters);
+ void SetVolumeTask(float volume);
+ void SetPlaybackRateTask(float volume);
+ void SetDurationTask(TimeDelta duration);
// DataSourceHost (by way of DemuxerHost) implementation.
void SetTotalBytes(int64 total_bytes) OVERRIDE;
@@ -222,20 +237,18 @@
void UpdateDecoderConfig(const scoped_refptr<DemuxerStream>& stream);
- // Message loop used to execute pipeline tasks.
+ // Message loop used to execute pipeline tasks. It is thread-safe.
scoped_refptr<base::MessageLoopProxy> message_loop_;
- // MediaLog to which to log events.
- scoped_refptr<MediaLog> media_log_;
-
- // Lock used to serialize access for the following data members.
- mutable base::Lock lock_;
-
- // The window this player associates with.
+ // The window this player associates with. It should only be assigned in the
+ // dtor and accesed once by SbPlayerCreate().
PipelineWindow window_;
- // Whether or not the pipeline is running.
- bool running_;
+ // The current ticket associated with the |player_|.
+ int ticket_;
+
+ // Lock used to serialize access for the following member variables.
+ mutable base::Lock lock_;
// Amount of available buffered data. Set by filters.
Ranges<int64> buffered_byte_ranges_;
@@ -261,12 +274,6 @@
// the filters.
float playback_rate_;
- // Status of the pipeline. Initialized to PIPELINE_OK which indicates that
- // the pipeline is operating correctly. Any other value indicates that the
- // pipeline is stopped or is stopping. Clients can call the Stop() method to
- // reset the pipeline state, and restore this to PIPELINE_OK.
- PipelineStatus status_;
-
// Whether the media contains rendered audio and video streams.
// TODO(fischman,scherkus): replace these with checks for
// {audio,video}_decoder_ once extraction of {Audio,Video}Decoder from the
@@ -274,15 +281,10 @@
bool has_audio_;
bool has_video_;
- int ticket_;
+ mutable PipelineStatistics statistics_;
- // The following data members are only accessed by tasks posted to
+ // The following member variables are only accessed by tasks posted to
// |message_loop_|.
- scoped_ptr<FilterCollection> filter_collection_;
-
- // Temporary callback used for Start() and Seek().
- PipelineStatusCB seek_cb_;
- SbMediaTime seek_time_;
// Temporary callback used for Stop().
base::Closure stop_cb_;
@@ -300,14 +302,20 @@
bool video_read_in_progress_;
TimeDelta duration_;
- mutable PipelineStatistics statistics_;
-
- SbPlayer player_;
-
DecodingBuffers decoding_buffers_;
-
scoped_refptr<SetBoundsCaller> set_bounds_caller_;
+ // The following member variables can be accessed from WMPI thread but all
+ // modifications to them happens on the pipeline thread. So any access of
+ // them from the WMPI thread and any modification to them on the pipeline
+ // thread has to guarded by lock. Access to them from the pipeline thread
+ // needn't to be guarded.
+
+ // Temporary callback used for Start() and Seek().
+ PipelineStatusCB seek_cb_;
+ SbMediaTime seek_time_;
+ SbPlayer player_;
+
DISALLOW_COPY_AND_ASSIGN(SbPlayerPipeline);
};
@@ -316,19 +324,19 @@
const scoped_refptr<base::MessageLoopProxy>& message_loop,
MediaLog* media_log)
: window_(window),
+ ticket_(SB_PLAYER_INITIAL_TICKET),
message_loop_(message_loop),
- media_log_(media_log),
total_bytes_(0),
natural_size_(0, 0),
volume_(1.f),
playback_rate_(0.f),
has_audio_(false),
has_video_(false),
- ticket_(SB_PLAYER_INITIAL_TICKET),
audio_read_in_progress_(false),
video_read_in_progress_(false),
- player_(kSbPlayerInvalid),
- set_bounds_caller_(new SetBoundsCaller) {}
+ set_bounds_caller_(new SetBoundsCaller),
+ seek_time_(0),
+ player_(kSbPlayerInvalid) {}
SbPlayerPipeline::~SbPlayerPipeline() {
DCHECK(player_ == kSbPlayerInvalid);
@@ -341,24 +349,19 @@
const PipelineStatusCB& seek_cb,
const BufferingStateCB& buffering_state_cb,
const base::Closure& duration_change_cb) {
- DCHECK(!filter_collection_);
DCHECK(filter_collection);
- // Assign the parameters here instead of posting it to StartTask() as the
- // number of parameters exceeds the maximum number of parameters that Bind
- // supports.
- filter_collection_ = filter_collection.Pass();
- decryptor_ready_cb_ = decryptor_ready_cb;
- ended_cb_ = ended_cb;
- error_cb_ = error_cb;
- seek_cb_ = seek_cb;
- buffering_state_cb_ = buffering_state_cb;
- duration_change_cb_ = duration_change_cb;
+ StartTaskParameters parameters;
+ parameters.demuxer = filter_collection->GetDemuxer();
+ parameters.decryptor_ready_cb = decryptor_ready_cb;
+ parameters.ended_cb = ended_cb;
+ parameters.error_cb = error_cb;
+ parameters.seek_cb = seek_cb;
+ parameters.buffering_state_cb = buffering_state_cb;
+ parameters.duration_change_cb = duration_change_cb;
- demuxer_ = filter_collection_->GetDemuxer();
-
- message_loop_->PostTask(FROM_HERE,
- base::Bind(&SbPlayerPipeline::StartTask, this));
+ message_loop_->PostTask(
+ FROM_HERE, base::Bind(&SbPlayerPipeline::StartTask, this, parameters));
}
void SbPlayerPipeline::Stop(const base::Closure& stop_cb) {
@@ -373,11 +376,17 @@
if (SbPlayerIsValid(player_)) {
set_bounds_caller_->SetPlayer(kSbPlayerInvalid);
+ SbPlayer player = player_;
+ {
+ base::AutoLock auto_lock(lock_);
+ player_ = kSbPlayerInvalid;
+ }
+
DLOG(INFO) << "Destroying SbPlayer.";
- SbPlayerDestroy(player_);
+ SbPlayerDestroy(player);
DLOG(INFO) << "SbPlayer destroyed.";
- player_ = kSbPlayerInvalid;
}
+
// When Stop() is in progress, we no longer need to call |error_cb_|.
error_cb_.Reset();
if (demuxer_) {
@@ -405,8 +414,11 @@
// Increase |ticket_| so all upcoming need data requests from the SbPlayer
// are ignored.
++ticket_;
- seek_cb_ = seek_cb;
- seek_time_ = TimeDeltaToSbMediaTime(time);
+ {
+ base::AutoLock auto_lock(lock_);
+ seek_cb_ = seek_cb;
+ seek_time_ = TimeDeltaToSbMediaTime(time);
+ }
demuxer_->Seek(time, BindToCurrentLoop(base::Bind(
&SbPlayerPipeline::OnDemuxerSeeked, this)));
}
@@ -432,9 +444,9 @@
base::AutoLock auto_lock(lock_);
playback_rate_ = playback_rate;
- if (SbPlayerIsValid(player_)) {
- SbPlayerSetPause(player_, playback_rate_ == 0.0);
- }
+ message_loop_->PostTask(
+ FROM_HERE,
+ base::Bind(&SbPlayerPipeline::SetPlaybackRateTask, this, playback_rate));
}
float SbPlayerPipeline::GetVolume() const {
@@ -448,9 +460,8 @@
base::AutoLock auto_lock(lock_);
volume_ = volume;
- if (SbPlayerIsValid(player_)) {
- // SbPlayerSetVolume(player_, volume_);
- }
+ message_loop_->PostTask(
+ FROM_HERE, base::Bind(&SbPlayerPipeline::SetVolumeTask, this, volume));
}
TimeDelta SbPlayerPipeline::GetMediaTime() const {
@@ -526,14 +537,50 @@
#endif // SB_IS(PLAYER_PUNCHED_OUT)
}
-void SbPlayerPipeline::StartTask() {
+void SbPlayerPipeline::StartTask(const StartTaskParameters& parameters) {
DCHECK(message_loop_->BelongsToCurrentThread());
+ DCHECK(!demuxer_);
+
+ demuxer_ = parameters.demuxer;
+ decryptor_ready_cb_ = parameters.decryptor_ready_cb;
+ ended_cb_ = parameters.ended_cb;
+ error_cb_ = parameters.error_cb;
+ {
+ base::AutoLock auto_lock(lock_);
+ seek_cb_ = parameters.seek_cb;
+ }
+ buffering_state_cb_ = parameters.buffering_state_cb;
+ duration_change_cb_ = parameters.duration_change_cb;
+
demuxer_->Initialize(
this, BindToCurrentLoop(
base::Bind(&SbPlayerPipeline::OnDemuxerInitialized, this)));
}
+void SbPlayerPipeline::SetVolumeTask(float volume) {
+ DCHECK(message_loop_->BelongsToCurrentThread());
+
+ if (SbPlayerIsValid(player_)) {
+ SbPlayerSetVolume(player_, volume_);
+ }
+}
+
+void SbPlayerPipeline::SetPlaybackRateTask(float volume) {
+ DCHECK(message_loop_->BelongsToCurrentThread());
+
+ if (SbPlayerIsValid(player_)) {
+ SbPlayerSetPause(player_, playback_rate_ == 0.0);
+ }
+}
+
+void SbPlayerPipeline::SetDurationTask(TimeDelta duration) {
+ DCHECK(message_loop_->BelongsToCurrentThread());
+ if (!duration_change_cb_.is_null()) {
+ duration_change_cb_.Run();
+ }
+}
+
void SbPlayerPipeline::SetTotalBytes(int64 total_bytes) {
base::AutoLock auto_lock(lock_);
total_bytes_ = total_bytes;
@@ -542,11 +589,21 @@
void SbPlayerPipeline::SetDuration(TimeDelta duration) {
base::AutoLock auto_lock(lock_);
duration_ = duration;
- duration_change_cb_.Run();
+ message_loop_->PostTask(
+ FROM_HERE,
+ base::Bind(&SbPlayerPipeline::SetDurationTask, this, duration));
}
void SbPlayerPipeline::OnDemuxerError(PipelineStatus error) {
- NOTIMPLEMENTED();
+ if (!message_loop_->BelongsToCurrentThread()) {
+ message_loop_->PostTask(
+ FROM_HERE, base::Bind(&SbPlayerPipeline::OnDemuxerError, this, error));
+ return;
+ }
+
+ if (error != PIPELINE_OK && !error_cb_.is_null()) {
+ base::ResetAndReturn(&error_cb_).Run(error);
+ }
}
void SbPlayerPipeline::AddBufferedByteRange(int64 start, int64 end) {
@@ -562,6 +619,8 @@
}
void SbPlayerPipeline::CreatePlayer(SbDrmSystem drm_system) {
+ DCHECK(message_loop_->BelongsToCurrentThread());
+
const AudioDecoderConfig& audio_config =
demuxer_->GetStream(DemuxerStream::AUDIO)->audio_decoder_config();
SbMediaAudioHeader audio_header;
@@ -573,14 +632,23 @@
audio_header.block_alignment = 4;
audio_header.bits_per_sample = audio_config.bits_per_channel();
audio_header.audio_specific_config_size = 0;
- player_ =
- SbPlayerCreate(window_, kSbMediaVideoCodecH264, kSbMediaAudioCodecAac,
- SB_PLAYER_NO_DURATION, drm_system, &audio_header,
- DeallocateSampleCB, DecoderStatusCB, PlayerStatusCB, this);
+
+ {
+ base::AutoLock auto_lock(lock_);
+ player_ = SbPlayerCreate(window_, kSbMediaVideoCodecH264,
+ kSbMediaAudioCodecAac, SB_PLAYER_NO_DURATION,
+ drm_system, &audio_header, DeallocateSampleCB,
+ DecoderStatusCB, PlayerStatusCB, this);
+ SetPlaybackRateTask(playback_rate_);
+ SetVolumeTask(volume_);
+ }
+
set_bounds_caller_->SetPlayer(player_);
}
void SbPlayerPipeline::SetDecryptor(Decryptor* decryptor) {
+ DCHECK(message_loop_->BelongsToCurrentThread());
+
if (!decryptor) {
return;
}
@@ -599,28 +667,30 @@
return;
}
- base::AutoLock auto_lock(lock_);
- has_audio_ = demuxer_->GetStream(DemuxerStream::AUDIO) != NULL;
- DCHECK(has_audio_);
- has_video_ = demuxer_->GetStream(DemuxerStream::VIDEO) != NULL;
+ {
+ base::AutoLock auto_lock(lock_);
+ has_audio_ = demuxer_->GetStream(DemuxerStream::AUDIO) != NULL;
+ DCHECK(has_audio_);
+ has_video_ = demuxer_->GetStream(DemuxerStream::VIDEO) != NULL;
- buffering_state_cb_.Run(kHaveMetadata);
+ buffering_state_cb_.Run(kHaveMetadata);
- NOTIMPLEMENTED() << "Dynamically determinate codecs";
+ NOTIMPLEMENTED() << "Dynamically determinate codecs";
- const AudioDecoderConfig& audio_config =
- demuxer_->GetStream(DemuxerStream::AUDIO)->audio_decoder_config();
- bool is_encrypted = audio_config.is_encrypted();
- if (has_video_) {
- const VideoDecoderConfig& video_config =
- demuxer_->GetStream(DemuxerStream::VIDEO)->video_decoder_config();
- natural_size_ = video_config.natural_size();
- is_encrypted |= video_config.is_encrypted();
- }
- if (is_encrypted) {
- decryptor_ready_cb_.Run(
- BindToCurrentLoop(base::Bind(&SbPlayerPipeline::SetDecryptor, this)));
- return;
+ const AudioDecoderConfig& audio_config =
+ demuxer_->GetStream(DemuxerStream::AUDIO)->audio_decoder_config();
+ bool is_encrypted = audio_config.is_encrypted();
+ if (has_video_) {
+ const VideoDecoderConfig& video_config =
+ demuxer_->GetStream(DemuxerStream::VIDEO)->video_decoder_config();
+ natural_size_ = video_config.natural_size();
+ is_encrypted |= video_config.is_encrypted();
+ }
+ if (is_encrypted) {
+ decryptor_ready_cb_.Run(
+ BindToCurrentLoop(base::Bind(&SbPlayerPipeline::SetDecryptor, this)));
+ return;
+ }
}
CreatePlayer(kSbDrmSystemInvalid);
@@ -642,7 +712,12 @@
}
void SbPlayerPipeline::OnDemuxerStopped() {
- base::AutoLock auto_lock(lock_);
+ if (!message_loop_->BelongsToCurrentThread()) {
+ message_loop_->PostTask(
+ FROM_HERE, base::Bind(&SbPlayerPipeline::OnDemuxerStopped, this));
+ return;
+ }
+
base::ResetAndReturn(&stop_cb_).Run();
}
@@ -685,7 +760,12 @@
}
if (!seek_cb_.is_null()) {
buffering_state_cb_.Run(kPrerollCompleted);
- base::ResetAndReturn(&seek_cb_).Run(PIPELINE_OK);
+ PipelineStatusCB seek_cb;
+ {
+ base::AutoLock auto_lock(lock_);
+ seek_cb = base::ResetAndReturn(&seek_cb_);
+ }
+ seek_cb.Run(PIPELINE_OK);
}
return;
}
@@ -807,7 +887,12 @@
case kSbPlayerStatePresenting:
buffering_state_cb_.Run(kPrerollCompleted);
if (!seek_cb_.is_null()) {
- base::ResetAndReturn(&seek_cb_).Run(PIPELINE_OK);
+ PipelineStatusCB seek_cb;
+ {
+ base::AutoLock auto_lock(lock_);
+ seek_cb = base::ResetAndReturn(&seek_cb_);
+ }
+ seek_cb.Run(PIPELINE_OK);
}
break;
case kSbPlayerStateEndOfStream:
@@ -816,7 +901,9 @@
case kSbPlayerStateDestroyed:
break;
case kSbPlayerStateError:
- // TODO: Handle error
+ if (!error_cb_.is_null()) {
+ base::ResetAndReturn(&error_cb_).Run(PIPELINE_ERROR_DECODE);
+ }
break;
}
}
@@ -843,7 +930,6 @@
SbPlayerDecoderState state,
int ticket) {
SbPlayerPipeline* pipeline = reinterpret_cast<SbPlayerPipeline*>(context);
- DCHECK_EQ(pipeline->player_, player);
pipeline->message_loop_->PostTask(
FROM_HERE, base::Bind(&SbPlayerPipeline::OnDecoderStatus, pipeline, type,
state, ticket));
@@ -865,7 +951,6 @@
void* context,
const void* sample_buffer) {
SbPlayerPipeline* pipeline = reinterpret_cast<SbPlayerPipeline*>(context);
- DCHECK_EQ(pipeline->player_, player);
pipeline->message_loop_->PostTask(
FROM_HERE, base::Bind(&SbPlayerPipeline::OnDeallocateSample, pipeline,
sample_buffer));
diff --git a/src/net/socket/tcp_client_socket_starboard.cc b/src/net/socket/tcp_client_socket_starboard.cc
index 042acd7..0a915a5 100644
--- a/src/net/socket/tcp_client_socket_starboard.cc
+++ b/src/net/socket/tcp_client_socket_starboard.cc
@@ -132,6 +132,25 @@
net_log_.EndEvent(NetLog::TYPE_SOCKET_ALIVE);
}
+int TCPClientSocketStarboard::AdoptSocket(SbSocket socket) {
+ DCHECK(!SbSocketIsValid(socket_));
+
+ int error = SetupSocket(socket);
+ if (error) {
+ return error;
+ }
+
+ socket_ = socket;
+
+ // This is to make GetPeerAddress() work. It's up to the caller to ensure that
+ // |address_| contains a reasonable address for this socket. (i.e. at least
+ // match IPv4 vs IPv6!).
+ current_address_index_ = 0;
+ use_history_.set_was_ever_connected();
+
+ return OK;
+}
+
int TCPClientSocketStarboard::Connect(const CompletionCallback& callback) {
DCHECK(CalledOnValidThread());
diff --git a/src/net/udp/udp_listen_socket_unittest.cc b/src/net/udp/udp_listen_socket_unittest.cc
index 4f3a077..dddabd2 100644
--- a/src/net/udp/udp_listen_socket_unittest.cc
+++ b/src/net/udp/udp_listen_socket_unittest.cc
@@ -71,6 +71,7 @@
// Create another socket.
SocketDescriptor cs = SbSocketCreate(sb_address.type, kSbSocketProtocolUdp);
SbSocketSendTo(cs, data, size, &sb_address);
+ SbSocketDestroy(cs);
#else // defined(OS_STARBOARD)
// Get the watching address
SockaddrStorage bind_addr;
diff --git a/src/starboard/atomic.h b/src/starboard/atomic.h
index bdc3ad1..e47391f 100644
--- a/src/starboard/atomic.h
+++ b/src/starboard/atomic.h
@@ -41,23 +41,23 @@
// Always return the old value of "*ptr"
//
// This routine implies no memory barriers.
-SbAtomic32 SbAtomicNoBarrier_CompareAndSwap(volatile SbAtomic32* ptr,
- SbAtomic32 old_value,
- SbAtomic32 new_value);
+static SbAtomic32 SbAtomicNoBarrier_CompareAndSwap(volatile SbAtomic32* ptr,
+ SbAtomic32 old_value,
+ SbAtomic32 new_value);
// Atomically store new_value into *ptr, returning the previous value held in
// *ptr. This routine implies no memory barriers.
-SbAtomic32 SbAtomicNoBarrier_Exchange(volatile SbAtomic32* ptr,
- SbAtomic32 new_value);
+static SbAtomic32 SbAtomicNoBarrier_Exchange(volatile SbAtomic32* ptr,
+ SbAtomic32 new_value);
// Atomically increment *ptr by "increment". Returns the new value of
// *ptr with the increment applied. This routine implies no memory barriers.
-SbAtomic32 SbAtomicNoBarrier_Increment(volatile SbAtomic32* ptr,
- SbAtomic32 increment);
+static SbAtomic32 SbAtomicNoBarrier_Increment(volatile SbAtomic32* ptr,
+ SbAtomic32 increment);
// Same as SbAtomicNoBarrier_Increment, but with a memory barrier.
-SbAtomic32 SbAtomicBarrier_Increment(volatile SbAtomic32* ptr,
- SbAtomic32 increment);
+static SbAtomic32 SbAtomicBarrier_Increment(volatile SbAtomic32* ptr,
+ SbAtomic32 increment);
// These following lower-level operations are typically useful only to people
// implementing higher-level synchronization operations like spinlocks, mutexes,
@@ -68,54 +68,55 @@
// after the operation. "Barrier" operations have both "Acquire" and "Release"
// semantics. A SbAtomicMemoryBarrier() has "Barrier" semantics, but does no
// memory access.
-SbAtomic32 SbAtomicAcquire_CompareAndSwap(volatile SbAtomic32* ptr,
- SbAtomic32 old_value,
- SbAtomic32 new_value);
-SbAtomic32 SbAtomicRelease_CompareAndSwap(volatile SbAtomic32* ptr,
- SbAtomic32 old_value,
- SbAtomic32 new_value);
+static SbAtomic32 SbAtomicAcquire_CompareAndSwap(volatile SbAtomic32* ptr,
+ SbAtomic32 old_value,
+ SbAtomic32 new_value);
+static SbAtomic32 SbAtomicRelease_CompareAndSwap(volatile SbAtomic32* ptr,
+ SbAtomic32 old_value,
+ SbAtomic32 new_value);
-void SbAtomicMemoryBarrier();
-void SbAtomicNoBarrier_Store(volatile SbAtomic32* ptr, SbAtomic32 value);
-void SbAtomicAcquire_Store(volatile SbAtomic32* ptr, SbAtomic32 value);
-void SbAtomicRelease_Store(volatile SbAtomic32* ptr, SbAtomic32 value);
+static void SbAtomicMemoryBarrier();
+static void SbAtomicNoBarrier_Store(volatile SbAtomic32* ptr, SbAtomic32 value);
+static void SbAtomicAcquire_Store(volatile SbAtomic32* ptr, SbAtomic32 value);
+static void SbAtomicRelease_Store(volatile SbAtomic32* ptr, SbAtomic32 value);
-SbAtomic32 SbAtomicNoBarrier_Load(volatile const SbAtomic32* ptr);
-SbAtomic32 SbAtomicAcquire_Load(volatile const SbAtomic32* ptr);
-SbAtomic32 SbAtomicRelease_Load(volatile const SbAtomic32* ptr);
+static SbAtomic32 SbAtomicNoBarrier_Load(volatile const SbAtomic32* ptr);
+static SbAtomic32 SbAtomicAcquire_Load(volatile const SbAtomic32* ptr);
+static SbAtomic32 SbAtomicRelease_Load(volatile const SbAtomic32* ptr);
// 64-bit atomic operations (only available on 64-bit processors).
#if SB_HAS(64_BIT_ATOMICS)
typedef int64_t SbAtomic64;
-SbAtomic64 SbAtomicNoBarrier_CompareAndSwap64(volatile SbAtomic64* ptr,
- SbAtomic64 old_value,
- SbAtomic64 new_value);
-SbAtomic64 SbAtomicNoBarrier_Exchange64(volatile SbAtomic64* ptr,
- SbAtomic64 new_value);
-SbAtomic64 SbAtomicNoBarrier_Increment64(volatile SbAtomic64* ptr,
- SbAtomic64 increment);
-SbAtomic64 SbAtomicBarrier_Increment64(volatile SbAtomic64* ptr,
- SbAtomic64 increment);
-SbAtomic64 SbAtomicAcquire_CompareAndSwap64(volatile SbAtomic64* ptr,
- SbAtomic64 old_value,
- SbAtomic64 new_value);
-SbAtomic64 SbAtomicRelease_CompareAndSwap64(volatile SbAtomic64* ptr,
- SbAtomic64 old_value,
- SbAtomic64 new_value);
-void SbAtomicNoBarrier_Store64(volatile SbAtomic64* ptr, SbAtomic64 value);
-void SbAtomicAcquire_Store64(volatile SbAtomic64* ptr, SbAtomic64 value);
-void SbAtomicRelease_Store64(volatile SbAtomic64* ptr, SbAtomic64 value);
-SbAtomic64 SbAtomicNoBarrier_Load64(volatile const SbAtomic64* ptr);
-SbAtomic64 SbAtomicAcquire_Load64(volatile const SbAtomic64* ptr);
-SbAtomic64 SbAtomicRelease_Load64(volatile const SbAtomic64* ptr);
+static SbAtomic64 SbAtomicNoBarrier_CompareAndSwap64(volatile SbAtomic64* ptr,
+ SbAtomic64 old_value,
+ SbAtomic64 new_value);
+static SbAtomic64 SbAtomicNoBarrier_Exchange64(volatile SbAtomic64* ptr,
+ SbAtomic64 new_value);
+static SbAtomic64 SbAtomicNoBarrier_Increment64(volatile SbAtomic64* ptr,
+ SbAtomic64 increment);
+static SbAtomic64 SbAtomicBarrier_Increment64(volatile SbAtomic64* ptr,
+ SbAtomic64 increment);
+static SbAtomic64 SbAtomicAcquire_CompareAndSwap64(volatile SbAtomic64* ptr,
+ SbAtomic64 old_value,
+ SbAtomic64 new_value);
+static SbAtomic64 SbAtomicRelease_CompareAndSwap64(volatile SbAtomic64* ptr,
+ SbAtomic64 old_value,
+ SbAtomic64 new_value);
+static void SbAtomicNoBarrier_Store64(volatile SbAtomic64* ptr,
+ SbAtomic64 value);
+static void SbAtomicAcquire_Store64(volatile SbAtomic64* ptr, SbAtomic64 value);
+static void SbAtomicRelease_Store64(volatile SbAtomic64* ptr, SbAtomic64 value);
+static SbAtomic64 SbAtomicNoBarrier_Load64(volatile const SbAtomic64* ptr);
+static SbAtomic64 SbAtomicAcquire_Load64(volatile const SbAtomic64* ptr);
+static SbAtomic64 SbAtomicRelease_Load64(volatile const SbAtomic64* ptr);
#endif // SB_HAS(64_BIT_ATOMICS)
// Pointer-sized atomic operations. Forwards to either 32-bit or 64-bit
// functions as appropriate.
typedef intptr_t SbAtomicPtr;
-SB_C_FORCE_INLINE SbAtomicPtr
+static SB_C_FORCE_INLINE SbAtomicPtr
SbAtomicNoBarrier_CompareAndSwapPtr(volatile SbAtomicPtr* ptr,
SbAtomicPtr old_value,
SbAtomicPtr new_value) {
@@ -126,7 +127,7 @@
#endif
}
-SB_C_FORCE_INLINE SbAtomicPtr
+static SB_C_FORCE_INLINE SbAtomicPtr
SbAtomicNoBarrier_ExchangePtr(volatile SbAtomicPtr* ptr,
SbAtomicPtr new_value) {
#if SB_HAS(64_BIT_POINTERS)
@@ -136,7 +137,7 @@
#endif
}
-SB_C_FORCE_INLINE SbAtomicPtr
+static SB_C_FORCE_INLINE SbAtomicPtr
SbAtomicNoBarrier_IncrementPtr(volatile SbAtomicPtr* ptr,
SbAtomicPtr increment) {
#if SB_HAS(64_BIT_POINTERS)
@@ -146,7 +147,7 @@
#endif
}
-SB_C_FORCE_INLINE SbAtomicPtr
+static SB_C_FORCE_INLINE SbAtomicPtr
SbAtomicBarrier_IncrementPtr(volatile SbAtomicPtr* ptr, SbAtomicPtr increment) {
#if SB_HAS(64_BIT_POINTERS)
return SbAtomicBarrier_Increment64(ptr, increment);
@@ -155,7 +156,7 @@
#endif
}
-SB_C_FORCE_INLINE SbAtomicPtr
+static SB_C_FORCE_INLINE SbAtomicPtr
SbAtomicAcquire_CompareAndSwapPtr(volatile SbAtomicPtr* ptr,
SbAtomicPtr old_value,
SbAtomicPtr new_value) {
@@ -166,7 +167,7 @@
#endif
}
-SB_C_FORCE_INLINE SbAtomicPtr
+static SB_C_FORCE_INLINE SbAtomicPtr
SbAtomicRelease_CompareAndSwapPtr(volatile SbAtomicPtr* ptr,
SbAtomicPtr old_value,
SbAtomicPtr new_value) {
@@ -177,8 +178,8 @@
#endif
}
-SB_C_FORCE_INLINE void SbAtomicNoBarrier_StorePtr(volatile SbAtomicPtr* ptr,
- SbAtomicPtr value) {
+static SB_C_FORCE_INLINE void
+SbAtomicNoBarrier_StorePtr(volatile SbAtomicPtr* ptr, SbAtomicPtr value) {
#if SB_HAS(64_BIT_POINTERS)
return SbAtomicNoBarrier_Store64(ptr, value);
#else
@@ -186,8 +187,8 @@
#endif
}
-SB_C_FORCE_INLINE void SbAtomicAcquire_StorePtr(volatile SbAtomicPtr* ptr,
- SbAtomicPtr value) {
+static SB_C_FORCE_INLINE void
+SbAtomicAcquire_StorePtr(volatile SbAtomicPtr* ptr, SbAtomicPtr value) {
#if SB_HAS(64_BIT_POINTERS)
return SbAtomicAcquire_Store64(ptr, value);
#else
@@ -195,8 +196,8 @@
#endif
}
-SB_C_FORCE_INLINE void SbAtomicRelease_StorePtr(volatile SbAtomicPtr* ptr,
- SbAtomicPtr value) {
+static SB_C_FORCE_INLINE void
+SbAtomicRelease_StorePtr(volatile SbAtomicPtr* ptr, SbAtomicPtr value) {
#if SB_HAS(64_BIT_POINTERS)
return SbAtomicRelease_Store64(ptr, value);
#else
@@ -204,7 +205,7 @@
#endif
}
-SB_C_FORCE_INLINE SbAtomicPtr
+static SB_C_FORCE_INLINE SbAtomicPtr
SbAtomicNoBarrier_LoadPtr(volatile const SbAtomicPtr* ptr) {
#if SB_HAS(64_BIT_POINTERS)
return SbAtomicNoBarrier_Load64(ptr);
@@ -213,7 +214,7 @@
#endif
}
-SB_C_FORCE_INLINE SbAtomicPtr
+static SB_C_FORCE_INLINE SbAtomicPtr
SbAtomicAcquire_LoadPtr(volatile const SbAtomicPtr* ptr) {
#if SB_HAS(64_BIT_POINTERS)
return SbAtomicAcquire_Load64(ptr);
@@ -222,7 +223,7 @@
#endif
}
-SB_C_FORCE_INLINE SbAtomicPtr
+static SB_C_FORCE_INLINE SbAtomicPtr
SbAtomicRelease_LoadPtr(volatile const SbAtomicPtr* ptr) {
#if SB_HAS(64_BIT_POINTERS)
return SbAtomicRelease_Load64(ptr);
diff --git a/src/starboard/configuration.h b/src/starboard/configuration.h
index cff8fa8..e075b47 100644
--- a/src/starboard/configuration.h
+++ b/src/starboard/configuration.h
@@ -364,6 +364,10 @@
#error "Only one SB_HAS_{MANY, 1, 2, 4, 6}_CORE[S] can be defined per platform."
#endif
+#if !defined(SB_HAS_THREAD_PRIORITY_SUPPORT)
+#error "Your platform must define SB_HAS_THREAD_PRIORITY_SUPPORT."
+#endif
+
#if !defined(SB_PREFERRED_RGBA_BYTE_ORDER)
// Legal values for SB_PREFERRED_RGBA_BYTE_ORDER are defined in this file above
// as SB_PREFERRED_RGBA_BYTE_ORDER_*.
@@ -386,6 +390,10 @@
#error "Your platform must define SB_HAS_NV12_TEXTURE_SUPPORT."
#endif
+#if !defined(SB_MUST_FREQUENTLY_FLIP_DISPLAY_BUFFER)
+#error "Your platform must define SB_MUST_FREQUENTLY_FLIP_DISPLAY_BUFFER."
+#endif
+
// --- Derived Configuration -------------------------------------------------
// Whether the current platform is little endian.
diff --git a/src/starboard/file.h b/src/starboard/file.h
index d1ecc11..bda6f3a 100644
--- a/src/starboard/file.h
+++ b/src/starboard/file.h
@@ -178,6 +178,49 @@
// Converts an ISO fopen() mode string into flags that can be equivalently
// passed into SbFileOpen().
SB_EXPORT int SbFileModeStringToFlags(const char* mode);
+
+// Reads the given number of bytes (or until EOF is reached). Returns the number
+// of bytes read, or -1 on error. Note that this function makes a best effort to
+// read all data on all platforms, so it is not intended for stream oriented
+// files but instead for cases when the normal expectation is that actually
+// |size| bytes are read unless there is an error.
+static inline int SbFileReadAll(SbFile file, char* data, int size) {
+ if (!SbFileIsValid(file) || size < 0) {
+ return -1;
+ }
+ int bytes_read = 0;
+ int rv;
+ do {
+ rv = SbFileRead(file, data + bytes_read, size - bytes_read);
+ if (bytes_read <= 0) {
+ break;
+ }
+ bytes_read += rv;
+ } while (bytes_read < size);
+
+ return bytes_read ? bytes_read : rv;
+}
+
+// Writes the given buffer into the file, overwritting any data that was
+// previously there. Returns the number of bytes written, or -1 on error. Note
+// that this function makes a best effort to write all data on all platforms.
+static inline int SbFileWriteAll(SbFile file, const char* data, int size) {
+ if (!SbFileIsValid(file) || size < 0) {
+ return -1;
+ }
+ int bytes_written = 0;
+ int rv;
+ do {
+ rv = SbFileWrite(file, data + bytes_written, size - bytes_written);
+ if (bytes_written <= 0) {
+ break;
+ }
+ bytes_written += rv;
+ } while (bytes_written < size);
+
+ return bytes_written ? bytes_written : rv;
+}
+
#ifdef __cplusplus
} // extern "C"
#endif
@@ -219,10 +262,18 @@
int Read(char* data, int size) const { return SbFileRead(file_, data, size); }
+ int ReadAll(char* data, int size) const {
+ return SbFileReadAll(file_, data, size);
+ }
+
int Write(const char* data, int size) const {
return SbFileWrite(file_, data, size);
}
+ int WriteAll(const char* data, int size) const {
+ return SbFileWriteAll(file_, data, size);
+ }
+
bool Truncate(int64_t length) const { return SbFileTruncate(file_, length); }
bool Flush() const { return SbFileFlush(file_); }
@@ -231,6 +282,12 @@
return SbFileGetInfo(file_, out_info);
}
+ int64_t GetSize() const {
+ SbFileInfo file_info;
+ static bool success = GetInfo(&file_info);
+ return (success ? file_info.size : -1);
+ }
+
private:
SbFile file_;
};
diff --git a/src/starboard/input.h b/src/starboard/input.h
index dec4b29..fbce0f2 100644
--- a/src/starboard/input.h
+++ b/src/starboard/input.h
@@ -79,7 +79,7 @@
//
// Produces Move, Press, and Unpress events.
kSbInputDeviceTypeTouchPad,
-} SbInputType;
+} SbInputDeviceType;
// The action that an input event represents.
typedef enum SbInputEventType {
diff --git a/src/starboard/linux/shared/configuration_public.h b/src/starboard/linux/shared/configuration_public.h
index 624909f..9859ced 100644
--- a/src/starboard/linux/shared/configuration_public.h
+++ b/src/starboard/linux/shared/configuration_public.h
@@ -69,6 +69,12 @@
#define SB_IS_WCHAR_T_SIGNED 1
#endif
+// --- Architecture Configuration --------------------------------------------
+
+// On default Linux desktop, you must be a superuser in order to set real time
+// scheduling on threads.
+#define SB_HAS_THREAD_PRIORITY_SUPPORT 0
+
// --- Attribute Configuration -----------------------------------------------
// The platform's annotation for forcing a C function to be inlined.
@@ -232,6 +238,12 @@
// working properly.
#define SB_HAS_BILINEAR_FILTERING_SUPPORT 1
+// Whether the current platform should frequently flip their display buffer.
+// If this is not required (e.g. SB_MUST_FREQUENTLY_FLIP_DISPLAY_BUFFER is set
+// to 0), then optimizations where the display buffer is not flipped if the
+// scene hasn't changed are enabled.
+#define SB_MUST_FREQUENTLY_FLIP_DISPLAY_BUFFER 0
+
// --- Media Configuration ---------------------------------------------------
// Specifies whether this platform has support for a possibly-decrypting
@@ -288,7 +300,7 @@
// macro should be set to a value that is greater than the sum of the above
// source buffer stream memory limits with extra room to take account of
// fragmentations and memory used by demuxers.
-#define SB_MEDIA_MAIN_BUFFER_BUDGET (128U * 1024U * 1024U)
+#define SB_MEDIA_MAIN_BUFFER_BUDGET (32U * 1024U * 1024U)
// Specifies how much GPU memory to reserve up-front for media source buffers.
// This should only be set to non-zero on system with limited CPU memory and
diff --git a/src/starboard/linux/shared/gyp_configuration.gypi b/src/starboard/linux/shared/gyp_configuration.gypi
index 703b774..e4ca809 100644
--- a/src/starboard/linux/shared/gyp_configuration.gypi
+++ b/src/starboard/linux/shared/gyp_configuration.gypi
@@ -28,8 +28,7 @@
# This should have a default value in cobalt/base.gypi. See the comment
# there for acceptable values for this variable.
'javascript_engine': 'mozjs',
- # JIT is temporarily disabled for spidermonkey.
- 'cobalt_enable_jit': 0,
+ 'cobalt_enable_jit': 1,
# Define platform specific compiler and linker flags.
# Refer to base.gypi for a list of all available variables.
diff --git a/src/starboard/linux/x64x11/main.cc b/src/starboard/linux/x64x11/main.cc
index 7feb245..12cbce1 100644
--- a/src/starboard/linux/x64x11/main.cc
+++ b/src/starboard/linux/x64x11/main.cc
@@ -19,7 +19,7 @@
#include "starboard/shared/signal/suspend_signals.h"
#include "starboard/shared/x11/application_x11.h"
-int main(int argc, char** argv) {
+extern "C" SB_EXPORT_PLATFORM int main(int argc, char** argv) {
tzset();
starboard::shared::signal::InstallCrashSignalHandlers();
starboard::shared::signal::InstallSuspendSignalHandlers();
diff --git a/src/starboard/nplb/blitter_pixel_tests/data/MagnifyBlitRectToRectInterpolated-expected.png b/src/starboard/nplb/blitter_pixel_tests/data/MagnifyBlitRectToRectInterpolated-expected.png
new file mode 100644
index 0000000..27424c4
--- /dev/null
+++ b/src/starboard/nplb/blitter_pixel_tests/data/MagnifyBlitRectToRectInterpolated-expected.png
Binary files differ
diff --git a/src/starboard/nplb/blitter_pixel_tests/data/MagnifyBlitRectToRect-expected.png b/src/starboard/nplb/blitter_pixel_tests/data/MagnifyBlitRectToRectNotInterpolated-expected.png
similarity index 100%
rename from src/starboard/nplb/blitter_pixel_tests/data/MagnifyBlitRectToRect-expected.png
rename to src/starboard/nplb/blitter_pixel_tests/data/MagnifyBlitRectToRectNotInterpolated-expected.png
Binary files differ
diff --git a/src/starboard/nplb/blitter_pixel_tests/tests.cc b/src/starboard/nplb/blitter_pixel_tests/tests.cc
index 871c074..30c8a8b 100644
--- a/src/starboard/nplb/blitter_pixel_tests/tests.cc
+++ b/src/starboard/nplb/blitter_pixel_tests/tests.cc
@@ -101,7 +101,11 @@
SbBlitterMakeRect(0, 0, GetWidth(), GetHeight()));
}
-TEST_F(SbBlitterPixelTest, MagnifyBlitRectToRect) {
+#if SB_HAS(BILINEAR_FILTERING_SUPPORT)
+TEST_F(SbBlitterPixelTest, MagnifyBlitRectToRectInterpolated) {
+#else
+TEST_F(SbBlitterPixelTest, MagnifyBlitRectToRectNotInterpolated) {
+#endif
// Create an image with a height and width of 2x2.
SbBlitterSurface checker_image = CreateCheckerImageWithBlits(
device_, context_, SbBlitterColorFromRGBA(255, 255, 255, 255),
diff --git a/src/starboard/nplb/file_read_test.cc b/src/starboard/nplb/file_read_test.cc
index e294bca..a4c828d 100644
--- a/src/starboard/nplb/file_read_test.cc
+++ b/src/starboard/nplb/file_read_test.cc
@@ -22,17 +22,39 @@
namespace nplb {
namespace {
+// Sets up an empty test fixture, required for typed tests.
+template <class SbFileReadType>
+class SbFileReadTest : public testing::Test {};
+
+class SbFileReader {
+ public:
+ static int Read(SbFile file, char* data, int size) {
+ return SbFileRead(file, data, size);
+ }
+};
+
+class SbFileReaderAll {
+ public:
+ static int Read(SbFile file, char* data, int size) {
+ return SbFileReadAll(file, data, size);
+ }
+};
+
+typedef testing::Types<SbFileReader, SbFileReaderAll> SbFileReadTestTypes;
+
+TYPED_TEST_CASE(SbFileReadTest, SbFileReadTestTypes);
+
const int kBufferLength = 16 * 1024;
-TEST(SbFileReadTest, InvalidFileErrors) {
+TYPED_TEST(SbFileReadTest, InvalidFileErrors) {
char buffer[kBufferLength];
- int result = SbFileRead(kSbFileInvalid, buffer, kBufferLength);
+ int result = TypeParam::Read(kSbFileInvalid, buffer, kBufferLength);
EXPECT_EQ(-1, result);
}
-TEST(SbFileReadTest, BasicReading) {
- // Create a pattern file that is not an even multiple of the buffer size, but
- // is over several times the size of the buffer.
+TYPED_TEST(SbFileReadTest, BasicReading) {
+ // Create a pattern file that is not an even multiple of the buffer size,
+ // but is over several times the size of the buffer.
const int kFileSize = kBufferLength * 16 / 3;
ScopedRandomFile random_file(kFileSize);
const std::string& filename = random_file.filename();
@@ -41,8 +63,8 @@
SbFileOpen(filename.c_str(), kSbFileOpenOnly | kSbFileRead, NULL, NULL);
ASSERT_TRUE(SbFileIsValid(file));
- // Create a bigger buffer than necessary, so we can test the memory around the
- // portion given to SbFileRead.
+ // Create a bigger buffer than necessary, so we can test the memory around
+ // the portion given to SbFileRead.
const int kRealBufferLength = kBufferLength * 2;
char real_buffer[kRealBufferLength] = {0};
const int kBufferOffset = kBufferLength / 2;
@@ -58,7 +80,7 @@
int previous_total = 0;
int max = 0;
while (true) {
- int bytes_read = SbFileRead(file, buffer, kBufferLength);
+ int bytes_read = TypeParam::Read(file, buffer, kBufferLength);
if (bytes_read == 0) {
break;
}
@@ -96,7 +118,7 @@
EXPECT_TRUE(result);
}
-TEST(SbFileReadTest, ReadPastEnd) {
+TYPED_TEST(SbFileReadTest, ReadPastEnd) {
const int kFileSize = kBufferLength;
ScopedRandomFile random_file(kFileSize);
const std::string& filename = random_file.filename();
@@ -105,8 +127,8 @@
SbFileOpen(filename.c_str(), kSbFileOpenOnly | kSbFileRead, NULL, NULL);
ASSERT_TRUE(SbFileIsValid(file));
- // Create a bigger buffer than necessary, so we can test the memory around the
- // portion given to SbFileRead.
+ // Create a bigger buffer than necessary, so we can test the memory around
+ // the portion given to SbFileRead.
const int kRealBufferLength = kBufferLength * 2;
char real_buffer[kRealBufferLength] = {0};
const int kBufferOffset = kBufferLength / 2;
@@ -120,7 +142,7 @@
// Read off the end of the file.
int position = SbFileSeek(file, kSbFileFromEnd, 0);
EXPECT_EQ(kFileSize, position);
- int bytes_read = SbFileRead(file, buffer, kBufferLength);
+ int bytes_read = TypeParam::Read(file, buffer, kBufferLength);
EXPECT_EQ(0, bytes_read);
for (int i = 0; i < kRealBufferLength; ++i) {
@@ -131,7 +153,7 @@
EXPECT_TRUE(result);
}
-TEST(SbFileReadTest, ReadZeroBytes) {
+TYPED_TEST(SbFileReadTest, ReadZeroBytes) {
const int kFileSize = kBufferLength;
ScopedRandomFile random_file(kFileSize);
const std::string& filename = random_file.filename();
@@ -140,8 +162,8 @@
SbFileOpen(filename.c_str(), kSbFileOpenOnly | kSbFileRead, NULL, NULL);
ASSERT_TRUE(SbFileIsValid(file));
- // Create a bigger buffer than necessary, so we can test the memory around the
- // portion given to SbFileRead.
+ // Create a bigger buffer than necessary, so we can test the memory around
+ // the portion given to SbFileRead.
const int kRealBufferLength = kBufferLength * 2;
char real_buffer[kRealBufferLength] = {0};
const int kBufferOffset = kBufferLength / 2;
@@ -154,7 +176,7 @@
// Read zero bytes.
for (int i = 0; i < 10; ++i) {
- int bytes_read = SbFileRead(file, buffer, 0);
+ int bytes_read = TypeParam::Read(file, buffer, 0);
EXPECT_EQ(0, bytes_read);
}
@@ -166,7 +188,7 @@
EXPECT_TRUE(result);
}
-TEST(SbFileReadTest, ReadFromMiddle) {
+TYPED_TEST(SbFileReadTest, ReadFromMiddle) {
const int kFileSize = kBufferLength * 2;
ScopedRandomFile random_file(kFileSize);
const std::string& filename = random_file.filename();
@@ -175,8 +197,8 @@
SbFileOpen(filename.c_str(), kSbFileOpenOnly | kSbFileRead, NULL, NULL);
ASSERT_TRUE(SbFileIsValid(file));
- // Create a bigger buffer than necessary, so we can test the memory around the
- // portion given to SbFileRead.
+ // Create a bigger buffer than necessary, so we can test the memory around
+ // the portion given to SbFileRead.
const int kRealBufferLength = kBufferLength * 2;
char real_buffer[kRealBufferLength] = {0};
const int kBufferOffset = kBufferLength / 2;
@@ -190,7 +212,7 @@
// Read from the middle of the file.
int position = SbFileSeek(file, kSbFileFromBegin, kFileSize / 4);
EXPECT_EQ(kFileSize / 4, position);
- int bytes_read = SbFileRead(file, buffer, kBufferLength);
+ int bytes_read = TypeParam::Read(file, buffer, kBufferLength);
EXPECT_GE(kBufferLength, bytes_read);
EXPECT_LT(0, bytes_read);
diff --git a/src/starboard/nplb/file_write_test.cc b/src/starboard/nplb/file_write_test.cc
index 3b49a8d..e503a86 100644
--- a/src/starboard/nplb/file_write_test.cc
+++ b/src/starboard/nplb/file_write_test.cc
@@ -25,28 +25,50 @@
namespace nplb {
namespace {
+// Sets up an empty test fixture, required for typed tests.
+template <class SbFileWriteType>
+class SbFileWriteTest : public testing::Test {};
+
+class SbFileWriter {
+ public:
+ static int Write(SbFile file, char* data, int size) {
+ return SbFileWrite(file, data, size);
+ }
+};
+
+class SbFileWriterAll {
+ public:
+ static int Write(SbFile file, char* data, int size) {
+ return SbFileWriteAll(file, data, size);
+ }
+};
+
+typedef testing::Types<SbFileWriter, SbFileWriterAll> SbFileWriteTestTypes;
+
+TYPED_TEST_CASE(SbFileWriteTest, SbFileWriteTestTypes);
+
const int kBufferLength = 16 * 1024;
-TEST(SbFileWriteTest, InvalidFileErrors) {
+TYPED_TEST(SbFileWriteTest, InvalidFileErrors) {
char buffer[kBufferLength] = {0};
- int result = SbFileWrite(kSbFileInvalid, buffer, kBufferLength);
+ int result = TypeParam::Write(kSbFileInvalid, buffer, kBufferLength);
EXPECT_EQ(-1, result);
}
-TEST(SbFileWriteTest, BasicWriting) {
- // Choose a file size that is not an even multiple of the buffer size, but is
- // over several times the size of the buffer.
+TYPED_TEST(SbFileWriteTest, BasicWriting) {
+ // Choose a file size that is not an even multiple of the buffer size, but
+ // is over several times the size of the buffer.
const int kFileSize = kBufferLength * 16 / 3;
ScopedRandomFile random_file(0, ScopedRandomFile::kDontCreate);
const std::string& filename = random_file.filename();
- SbFile file =
- SbFileOpen(filename.c_str(),
- kSbFileCreateAlways | kSbFileWrite | kSbFileRead, NULL, NULL);
+ SbFile file = SbFileOpen(filename.c_str(),
+ kSbFileCreateAlways | kSbFileWrite | kSbFileRead,
+ NULL, NULL);
ASSERT_TRUE(SbFileIsValid(file));
- // Create a bigger buffer than necessary, so we can test the memory around the
- // portion given to SbFileRead.
+ // Create a bigger buffer than necessary, so we can test the memory around
+ // the portion given to SbFileRead.
char buffer[kBufferLength] = {0};
// Initialize to some arbitrary pattern so we can verify it later.
@@ -63,7 +85,7 @@
int remaining = kFileSize - total;
int to_write = remaining < kBufferLength ? remaining : kBufferLength;
- int bytes_written = SbFileWrite(file, buffer, to_write);
+ int bytes_written = TypeParam::Write(file, buffer, to_write);
// Check that we didn't write more than the buffer size.
EXPECT_GE(to_write, bytes_written);
@@ -85,7 +107,7 @@
total = 0;
int previous_total = 0;
while (true) {
- int bytes_read = SbFileRead(file, buffer, kBufferLength);
+ int bytes_read = SbFileReadAll(file, buffer, kBufferLength);
if (bytes_read == 0) {
break;
}
@@ -111,7 +133,7 @@
EXPECT_TRUE(result);
}
-TEST(SbFileWriteTest, WriteZeroBytes) {
+TYPED_TEST(SbFileWriteTest, WriteZeroBytes) {
ScopedRandomFile random_file(0, ScopedRandomFile::kDontCreate);
const std::string& filename = random_file.filename();
@@ -123,7 +145,7 @@
// Write zero bytes.
for (int i = 0; i < 10; ++i) {
- int bytes_written = SbFileWrite(file, buffer, 0);
+ int bytes_written = TypeParam::Write(file, buffer, 0);
EXPECT_EQ(0, bytes_written);
}
diff --git a/src/starboard/nplb/include_all.c b/src/starboard/nplb/include_all.c
index 95f0147..1ff7637 100644
--- a/src/starboard/nplb/include_all.c
+++ b/src/starboard/nplb/include_all.c
@@ -15,6 +15,7 @@
// Includes all headers in a C context to make sure they compile as C files.
#include "starboard/atomic.h"
+#include "starboard/audio_sink.h"
#include "starboard/blitter.h"
#include "starboard/byte_swap.h"
#include "starboard/character.h"
@@ -26,6 +27,7 @@
#include "starboard/event.h"
#include "starboard/export.h"
#include "starboard/file.h"
+#include "starboard/input.h"
#include "starboard/key.h"
#include "starboard/log.h"
#include "starboard/media.h"
diff --git a/src/starboard/nplb/include_all_too.c b/src/starboard/nplb/include_all_too.c
new file mode 100644
index 0000000..f7d6644
--- /dev/null
+++ b/src/starboard/nplb/include_all_too.c
@@ -0,0 +1,19 @@
+// Copyright 2015 Google Inc. All Rights Reserved.
+//
+// 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.
+
+// A second translation unit that includes all the headers to verify there are
+// no duplicate symbols.
+
+#include "starboard/nplb/include_all.c"
+
diff --git a/src/starboard/nplb/nplb.gyp b/src/starboard/nplb/nplb.gyp
index 5b66821..1938621 100644
--- a/src/starboard/nplb/nplb.gyp
+++ b/src/starboard/nplb/nplb.gyp
@@ -100,6 +100,7 @@
'file_truncate_test.cc',
'file_write_test.cc',
'include_all.c',
+ 'include_all_too.c',
'log_flush_test.cc',
'log_format_test.cc',
'log_is_tty_test.cc',
diff --git a/src/starboard/raspi/shared/configuration_public.h b/src/starboard/raspi/shared/configuration_public.h
index b7ba3a6..03cb289 100644
--- a/src/starboard/raspi/shared/configuration_public.h
+++ b/src/starboard/raspi/shared/configuration_public.h
@@ -63,6 +63,14 @@
#define SB_IS_WCHAR_T_SIGNED 1
#endif
+// --- Architecture Configuration --------------------------------------------
+
+// On the current version of Raspbian, real time thread scheduling seems to be
+// broken in that higher priority threads do not always have priority over lower
+// priority threads. It looks like the thread created last will always have the
+// highest priority.
+#define SB_HAS_THREAD_PRIORITY_SUPPORT 0
+
// --- Attribute Configuration -----------------------------------------------
// The platform's annotation for forcing a C function to be inlined.
@@ -227,6 +235,12 @@
// textures. These textures typically originate from video decoders.
#define SB_HAS_NV12_TEXTURE_SUPPORT 1
+// Whether the current platform should frequently flip their display buffer.
+// If this is not required (e.g. SB_MUST_FREQUENTLY_FLIP_DISPLAY_BUFFER is set
+// to 0), then optimizations where the display buffer is not flipped if the
+// scene hasn't changed are enabled.
+#define SB_MUST_FREQUENTLY_FLIP_DISPLAY_BUFFER 0
+
// --- Media Configuration ---------------------------------------------------
// Specifies whether this platform has support for a possibly-decrypting
@@ -283,7 +297,7 @@
// macro should be set to a value that is greater than the sum of the above
// source buffer stream memory limits with extra room to take account of
// fragmentations and memory used by demuxers.
-#define SB_MEDIA_MAIN_BUFFER_BUDGET (128U * 1024U * 1024U)
+#define SB_MEDIA_MAIN_BUFFER_BUDGET (32U * 1024U * 1024U)
// Specifies how much GPU memory to reserve up-front for media source buffers.
// This should only be set to non-zero on system with limited CPU memory and
diff --git a/src/starboard/shared/ffmpeg/ffmpeg_video_decoder.cc b/src/starboard/shared/ffmpeg/ffmpeg_video_decoder.cc
index 9010e37..eafff4c 100644
--- a/src/starboard/shared/ffmpeg/ffmpeg_video_decoder.cc
+++ b/src/starboard/shared/ffmpeg/ffmpeg_video_decoder.cc
@@ -148,7 +148,9 @@
SbThreadJoin(decoder_thread_, NULL);
}
- avcodec_flush_buffers(codec_context_);
+ if (codec_context_ != NULL) {
+ avcodec_flush_buffers(codec_context_);
+ }
decoder_thread_ = kSbThreadInvalid;
stream_ended_ = false;
diff --git a/src/starboard/shared/gcc/atomic_gcc_public.h b/src/starboard/shared/gcc/atomic_gcc_public.h
index 655d2be..9c7afc6 100644
--- a/src/starboard/shared/gcc/atomic_gcc_public.h
+++ b/src/starboard/shared/gcc/atomic_gcc_public.h
@@ -24,7 +24,7 @@
extern "C" {
#endif
-SB_C_FORCE_INLINE SbAtomic32
+static SB_C_FORCE_INLINE SbAtomic32
SbAtomicNoBarrier_CompareAndSwap(volatile SbAtomic32* ptr,
SbAtomic32 old_value,
SbAtomic32 new_value) {
@@ -37,7 +37,7 @@
return prev_value;
}
-SB_C_FORCE_INLINE SbAtomic32
+static SB_C_FORCE_INLINE SbAtomic32
SbAtomicNoBarrier_Exchange(volatile SbAtomic32* ptr, SbAtomic32 new_value) {
SbAtomic32 old_value;
do {
@@ -46,13 +46,14 @@
return old_value;
}
-SB_C_FORCE_INLINE SbAtomic32
+static SB_C_FORCE_INLINE SbAtomic32
SbAtomicNoBarrier_Increment(volatile SbAtomic32* ptr, SbAtomic32 increment) {
return SbAtomicBarrier_Increment(ptr, increment);
}
-SB_C_FORCE_INLINE SbAtomic32 SbAtomicBarrier_Increment(volatile SbAtomic32* ptr,
- SbAtomic32 increment) {
+static SB_C_FORCE_INLINE SbAtomic32
+SbAtomicBarrier_Increment(volatile SbAtomic32* ptr,
+ SbAtomic32 increment) {
for (;;) {
// Atomic exchange the old value with an incremented one.
SbAtomic32 old_value = *ptr;
@@ -65,7 +66,7 @@
}
}
-SB_C_FORCE_INLINE SbAtomic32
+static SB_C_FORCE_INLINE SbAtomic32
SbAtomicAcquire_CompareAndSwap(volatile SbAtomic32* ptr,
SbAtomic32 old_value,
SbAtomic32 new_value) {
@@ -74,47 +75,47 @@
return SbAtomicNoBarrier_CompareAndSwap(ptr, old_value, new_value);
}
-SB_C_FORCE_INLINE SbAtomic32
+static SB_C_FORCE_INLINE SbAtomic32
SbAtomicRelease_CompareAndSwap(volatile SbAtomic32* ptr,
SbAtomic32 old_value,
SbAtomic32 new_value) {
return SbAtomicNoBarrier_CompareAndSwap(ptr, old_value, new_value);
}
-SB_C_FORCE_INLINE void SbAtomicMemoryBarrier() {
+static SB_C_FORCE_INLINE void SbAtomicMemoryBarrier() {
__sync_synchronize();
}
-SB_C_FORCE_INLINE void SbAtomicNoBarrier_Store(volatile SbAtomic32* ptr,
- SbAtomic32 value) {
+static SB_C_FORCE_INLINE void SbAtomicNoBarrier_Store(volatile SbAtomic32* ptr,
+ SbAtomic32 value) {
*ptr = value;
}
-SB_C_FORCE_INLINE void SbAtomicAcquire_Store(volatile SbAtomic32* ptr,
- SbAtomic32 value) {
+static SB_C_FORCE_INLINE void SbAtomicAcquire_Store(volatile SbAtomic32* ptr,
+ SbAtomic32 value) {
*ptr = value;
SbAtomicMemoryBarrier();
}
-SB_C_FORCE_INLINE void SbAtomicRelease_Store(volatile SbAtomic32* ptr,
- SbAtomic32 value) {
+static SB_C_FORCE_INLINE void SbAtomicRelease_Store(volatile SbAtomic32* ptr,
+ SbAtomic32 value) {
SbAtomicMemoryBarrier();
*ptr = value;
}
-SB_C_FORCE_INLINE SbAtomic32
+static SB_C_FORCE_INLINE SbAtomic32
SbAtomicNoBarrier_Load(volatile const SbAtomic32* ptr) {
return *ptr;
}
-SB_C_FORCE_INLINE SbAtomic32
+static SB_C_FORCE_INLINE SbAtomic32
SbAtomicAcquire_Load(volatile const SbAtomic32* ptr) {
SbAtomic32 value = *ptr;
SbAtomicMemoryBarrier();
return value;
}
-SB_C_FORCE_INLINE SbAtomic32
+static SB_C_FORCE_INLINE SbAtomic32
SbAtomicRelease_Load(volatile const SbAtomic32* ptr) {
SbAtomicMemoryBarrier();
return *ptr;
@@ -122,7 +123,7 @@
// 64-bit atomic operations (only available on 64-bit processors).
#if SB_HAS(64_BIT_ATOMICS)
-SB_C_FORCE_INLINE SbAtomic64
+static SB_C_FORCE_INLINE SbAtomic64
SbAtomicNoBarrier_CompareAndSwap64(volatile SbAtomic64* ptr,
SbAtomic64 old_value,
SbAtomic64 new_value) {
@@ -135,7 +136,7 @@
return prev_value;
}
-SB_C_FORCE_INLINE SbAtomic64
+static SB_C_FORCE_INLINE SbAtomic64
SbAtomicNoBarrier_Exchange64(volatile SbAtomic64* ptr, SbAtomic64 new_value) {
SbAtomic64 old_value;
do {
@@ -144,12 +145,12 @@
return old_value;
}
-SB_C_FORCE_INLINE SbAtomic64
+static SB_C_FORCE_INLINE SbAtomic64
SbAtomicNoBarrier_Increment64(volatile SbAtomic64* ptr, SbAtomic64 increment) {
return SbAtomicBarrier_Increment64(ptr, increment);
}
-SB_C_FORCE_INLINE SbAtomic64
+static SB_C_FORCE_INLINE SbAtomic64
SbAtomicBarrier_Increment64(volatile SbAtomic64* ptr, SbAtomic64 increment) {
for (;;) {
// Atomic exchange the old value with an incremented one.
@@ -163,50 +164,51 @@
}
}
-SB_C_FORCE_INLINE SbAtomic64
+static SB_C_FORCE_INLINE SbAtomic64
SbAtomicAcquire_CompareAndSwap64(volatile SbAtomic64* ptr,
SbAtomic64 old_value,
SbAtomic64 new_value) {
return SbAtomicNoBarrier_CompareAndSwap64(ptr, old_value, new_value);
}
-SB_C_FORCE_INLINE SbAtomic64
+static SB_C_FORCE_INLINE SbAtomic64
SbAtomicRelease_CompareAndSwap64(volatile SbAtomic64* ptr,
SbAtomic64 old_value,
SbAtomic64 new_value) {
return SbAtomicNoBarrier_CompareAndSwap64(ptr, old_value, new_value);
}
-SB_C_FORCE_INLINE void SbAtomicNoBarrier_Store64(volatile SbAtomic64* ptr,
- SbAtomic64 value) {
+static SB_C_FORCE_INLINE void
+SbAtomicNoBarrier_Store64(volatile SbAtomic64* ptr,
+ SbAtomic64 value) {
*ptr = value;
}
-SB_C_FORCE_INLINE void SbAtomicAcquire_Store64(volatile SbAtomic64* ptr,
- SbAtomic64 value) {
+static SB_C_FORCE_INLINE void SbAtomicAcquire_Store64(volatile SbAtomic64* ptr,
+ SbAtomic64 value) {
*ptr = value;
SbAtomicMemoryBarrier();
}
-SB_C_FORCE_INLINE void SbAtomicRelease_Store64(volatile SbAtomic64* ptr,
- SbAtomic64 value) {
+static SB_C_FORCE_INLINE void SbAtomicRelease_Store64(volatile SbAtomic64* ptr,
+ SbAtomic64 value) {
SbAtomicMemoryBarrier();
*ptr = value;
}
-SB_C_FORCE_INLINE SbAtomic64
+static SB_C_FORCE_INLINE SbAtomic64
SbAtomicNoBarrier_Load64(volatile const SbAtomic64* ptr) {
return *ptr;
}
-SB_C_FORCE_INLINE SbAtomic64
+static SB_C_FORCE_INLINE SbAtomic64
SbAtomicAcquire_Load64(volatile const SbAtomic64* ptr) {
SbAtomic64 value = *ptr;
SbAtomicMemoryBarrier();
return value;
}
-SB_C_FORCE_INLINE SbAtomic64
+static SB_C_FORCE_INLINE SbAtomic64
SbAtomicRelease_Load64(volatile const SbAtomic64* ptr) {
SbAtomicMemoryBarrier();
return *ptr;
diff --git a/src/starboard/shared/pthread/thread_create.cc b/src/starboard/shared/pthread/thread_create.cc
index 70a1fdb..1971d0d 100644
--- a/src/starboard/shared/pthread/thread_create.cc
+++ b/src/starboard/shared/pthread/thread_create.cc
@@ -1,4 +1,4 @@
-// Copyright 2015 Google Inc. All Rights Reserved.
+// Copyright 2016 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -16,17 +16,50 @@
#include <pthread.h>
#include <sched.h>
+#include <unistd.h>
+#include "starboard/log.h"
#include "starboard/shared/pthread/is_success.h"
#include "starboard/string.h"
+#if SB_HAS(THREAD_PRIORITY_SUPPORT)
+#if !defined(_POSIX_PRIORITY_SCHEDULING)
+#error "The _POSIX_PRIORITY_SCHEDULING define indicates that a pthreads \
+system supports thread priorities, however this define is not \
+defined on this system, contradicting the Starboard configuration \
+indicating that priority scheduling is supported."
+#endif // !defined(_POSIX_PRIORITY_SCHEDULING)
+#endif // SB_HAS(THREAD_PRIORITY_SUPPORT)
+
namespace {
+int SbThreadPriorityToPthread(SbThreadPriority priority) {
+ switch (priority) {
+ case kSbThreadPriorityLowest:
+ SB_NOTREACHED() << "Lowest priority threads should use SCHED_OTHER.";
+ return 0;
+ break;
+ case kSbThreadPriorityLow: return 2;
+ case kSbThreadNoPriority:
+ // Fall through on purpose to default to kThreadPriority_Normal.
+ case kSbThreadPriorityNormal: return 3;
+ case kSbThreadPriorityHigh: return 4;
+ case kSbThreadPriorityHighest: return 5;
+ case kSbThreadPriorityRealTime: return 6;
+ default:
+ SB_NOTREACHED();
+ return 0;
+ }
+}
+
struct ThreadParams {
SbThreadAffinity affinity;
SbThreadEntryPoint entry_point;
char name[128];
void* context;
+#if SB_HAS(THREAD_PRIORITY_SUPPORT)
+ SbThreadPriority priority;
+#endif // #if SB_HAS(THREAD_PRIORITY_SUPPORT)
};
void* ThreadFunc(void* context) {
@@ -38,6 +71,21 @@
SbThreadSetName(thread_params->name);
}
+#if SB_HAS(THREAD_PRIORITY_SUPPORT)
+ // Use Linux' regular scheduler for lowest priority threads. Real-time
+ // priority threads (of any priority) will always have priority over
+ // non-real-time threads (e.g. threads whose scheduler is setup to be
+ // SCHED_OTHER, the default scheduler).
+ if (thread_params->priority != kSbThreadPriorityLowest) {
+ // Note that use of sched_setscheduler() has been found to be more reliably
+ // supported than pthread_setschedparam(), so we are using that.
+ struct sched_param thread_sched_param;
+ thread_sched_param.sched_priority =
+ SbThreadPriorityToPthread(thread_params->priority);
+ sched_setscheduler(0, SCHED_FIFO, &thread_sched_param);
+ }
+#endif // #if SB_HAS(THREAD_PRIORITY_SUPPORT)
+
delete thread_params;
if (SbThreadIsValidAffinity(affinity)) {
@@ -84,10 +132,6 @@
pthread_attr_setstacksize(&attributes, stack_size);
}
- // Here is where we would use priority, but it doesn't really work on Linux
- // without using a realtime scheduling policy, according to this article:
- // http://stackoverflow.com/questions/3649281/how-to-increase-thread-priority-in-pthreads/3663250
-
ThreadParams* params = new ThreadParams();
params->affinity = affinity;
params->entry_point = entry_point;
@@ -99,6 +143,10 @@
params->name[0] = '\0';
}
+#if SB_HAS(THREAD_PRIORITY_SUPPORT)
+ params->priority = priority;
+#endif // #if SB_HAS(THREAD_PRIORITY_SUPPORT)
+
SbThread thread = kSbThreadInvalid;
result = pthread_create(&thread, &attributes, ThreadFunc, params);
diff --git a/src/starboard/shared/starboard/player/player_internal.cc b/src/starboard/shared/starboard/player/player_internal.cc
index 2c7c9f6..0443b2f 100644
--- a/src/starboard/shared/starboard/player/player_internal.cc
+++ b/src/starboard/shared/starboard/player/player_internal.cc
@@ -26,7 +26,8 @@
SbTimeMonotonic elapsed = SbTimeGetMonotonicNow() - media_pts_update_time;
return media_pts + elapsed * kSbMediaTimeSecond / kSbTimeSecond;
}
-}
+
+} // namespace
SbPlayerPrivate::SbPlayerPrivate(
SbWindow window,
diff --git a/src/starboard/shared/starboard/queue_application.cc b/src/starboard/shared/starboard/queue_application.cc
index 5a14ff2..6ef1cda 100644
--- a/src/starboard/shared/starboard/queue_application.cc
+++ b/src/starboard/shared/starboard/queue_application.cc
@@ -100,6 +100,15 @@
QueueApplication::TimedEventQueue::TimedEventQueue() : set_(&IsLess) {}
+QueueApplication::TimedEventQueue::~TimedEventQueue() {
+ ScopedLock lock(mutex_);
+ for (TimedEventMap::iterator i = map_.begin(); i != map_.end(); ++i) {
+ delete i->second;
+ }
+ map_.clear();
+ set_.clear();
+}
+
bool QueueApplication::TimedEventQueue::Inject(TimedEvent* timed_event) {
ScopedLock lock(mutex_);
SbTimeMonotonic oldTime = GetTimeLocked();
diff --git a/src/starboard/shared/starboard/queue_application.h b/src/starboard/shared/starboard/queue_application.h
index b48d8a7..1278dd0 100644
--- a/src/starboard/shared/starboard/queue_application.h
+++ b/src/starboard/shared/starboard/queue_application.h
@@ -85,6 +85,7 @@
class TimedEventQueue {
public:
TimedEventQueue();
+ ~TimedEventQueue();
// Returns whether the new event pushed up the next wakeup time.
bool Inject(TimedEvent* timed_event);
diff --git a/src/starboard/shared/starboard/shared_main_adapter.cc b/src/starboard/shared/starboard/shared_main_adapter.cc
new file mode 100644
index 0000000..2a6a911
--- /dev/null
+++ b/src/starboard/shared/starboard/shared_main_adapter.cc
@@ -0,0 +1,31 @@
+// Copyright 2016 Google Inc. All Rights Reserved.
+//
+// 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.
+
+// Imports and calls into StarboardMain() from main(). Can be used to
+// link into a shared Starboard executable to turn it into a traditional
+// executable.
+
+#include "starboard/configuration.h"
+
+#undef main
+
+extern "C" {
+
+SB_IMPORT_PLATFORM int StarboardMain(int argc, char** argv);
+
+int main(int argc, char** argv) {
+ return StarboardMain(argc, argv);
+}
+
+} // extern "C"
diff --git a/src/starboard/shared/stub/system_get_number_of_processors.cc b/src/starboard/shared/stub/system_get_number_of_processors.cc
index b0f3a8c..a02ba16 100644
--- a/src/starboard/shared/stub/system_get_number_of_processors.cc
+++ b/src/starboard/shared/stub/system_get_number_of_processors.cc
@@ -15,5 +15,5 @@
#include "starboard/system.h"
int SbSystemGetNumberOfProcessors() {
- return 0;
+ return 1;
}
diff --git a/src/starboard/socket_waiter.h b/src/starboard/socket_waiter.h
index 894f74e..c964d6f 100644
--- a/src/starboard/socket_waiter.h
+++ b/src/starboard/socket_waiter.h
@@ -79,7 +79,7 @@
int ready_interests);
// Well-defined value for an invalid socket watcher handle.
-const SbSocketWaiter kSbSocketWaiterInvalid = (SbSocketWaiter)NULL;
+#define kSbSocketWaiterInvalid ((SbSocketWaiter)NULL)
// Returns whether the given socket handle is valid.
static SB_C_INLINE bool SbSocketWaiterIsValid(SbSocketWaiter watcher) {
diff --git a/src/starboard/starboard.gyp b/src/starboard/starboard.gyp
index 639b3dc..086ee4a 100644
--- a/src/starboard/starboard.gyp
+++ b/src/starboard/starboard.gyp
@@ -23,15 +23,31 @@
'type': 'none',
'sources': [
'atomic.h',
+ 'audio_sink.h',
+ 'blitter.h',
+ 'byte_swap.h',
+ 'character.h',
'condition_variable.h',
'configuration.h',
'directory.h',
'double.h',
+ 'drm.h',
+ 'event.h',
'export.h',
'file.h',
+ 'input.h',
+ 'key.h',
'log.h',
+ 'media.h',
'memory.h',
'mutex.h',
+ 'once.h',
+ 'player.h',
+ 'queue.h',
+ 'socket.h',
+ 'socket_waiter.h',
+ 'spin_lock.h',
+ 'storage.h',
'string.h',
'system.h',
'thread.h',
@@ -39,11 +55,13 @@
'time.h',
'time_zone.h',
'types.h',
+ 'user.h',
+ 'window.h',
],
'conditions': [
['starboard_path == ""', {
# TODO: Make starboard_path required. This legacy condition is only
- # here to support starboard-linux while it still exists.
+ # here to support semi-starboard platforms while they still exist.
'dependencies': [
'<(DEPTH)/starboard/<(target_arch)/starboard_platform.gyp:starboard_platform',
],
@@ -58,6 +76,17 @@
'<(DEPTH)/<(starboard_path)/starboard_platform.gyp:starboard_platform',
],
}],
+ ['final_executable_type=="shared_library"', {
+ 'all_dependent_settings': {
+ 'target_conditions': [
+ ['_type=="executable" and _toolset=="target"', {
+ 'sources': [
+ '<(DEPTH)/starboard/shared/starboard/shared_main_adapter.cc',
+ ],
+ }],
+ ],
+ },
+ }],
],
},
],
diff --git a/src/starboard/stub/configuration_public.h b/src/starboard/stub/configuration_public.h
index af9c671..5af547f 100644
--- a/src/starboard/stub/configuration_public.h
+++ b/src/starboard/stub/configuration_public.h
@@ -85,6 +85,9 @@
// Whether the current platform is expected to have exactly 6 cores.
#define SB_HAS_6_CORES 0
+// Whether the current platform supports thread priorities.
+#define SB_HAS_THREAD_PRIORITY_SUPPORT 0
+
// Whether the current platform's thread scheduler will automatically balance
// threads between cores, as opposed to systems where threads will only ever run
// on the specifically pinned core.
@@ -300,6 +303,12 @@
// textures. These textures typically originate from video decoders.
#define SB_HAS_NV12_TEXTURE_SUPPORT 0
+// Whether the current platform should frequently flip their display buffer.
+// If this is not required (e.g. SB_MUST_FREQUENTLY_FLIP_DISPLAY_BUFFER is set
+// to 0), then optimizations where the display buffer is not flipped if the
+// scene hasn't changed are enabled.
+#define SB_MUST_FREQUENTLY_FLIP_DISPLAY_BUFFER 0
+
// --- Media Configuration ---------------------------------------------------
// Specifies whether this platform has support for a possibly-decrypting
@@ -356,7 +365,7 @@
// macro should be set to a value that is greater than the sum of the above
// source buffer stream memory limits with extra room to take account of
// fragmentations and memory used by demuxers.
-#define SB_MEDIA_MAIN_BUFFER_BUDGET (128U * 1024U * 1024U)
+#define SB_MEDIA_MAIN_BUFFER_BUDGET (32U * 1024U * 1024U)
// Specifies how much GPU memory to reserve up-front for media source buffers.
// This should only be set to non-zero on system with limited CPU memory and
diff --git a/src/starboard/window.h b/src/starboard/window.h
index c3e25dd..44bb3e1 100644
--- a/src/starboard/window.h
+++ b/src/starboard/window.h
@@ -48,7 +48,7 @@
//
// Values greater than 1.0f mean that the video resolution is higher (denser,
// larger) than the graphics resolution. This is a common case as devices
- // often have less video decoding capabilities than graphics rendering
+ // often have more video decoding capabilities than graphics rendering
// capabilities (or memory, etc...).
//
// Values less than 1.0f mean that the maximum video resolution is smaller
@@ -74,7 +74,7 @@
} SbWindowOptions;
// Well-defined value for an invalid window handle.
-const SbWindow kSbWindowInvalid = (SbWindow)NULL;
+#define kSbWindowInvalid ((SbWindow)NULL)
// Returns whether the given window handle is valid.
static SB_C_INLINE bool SbWindowIsValid(SbWindow window) {
diff --git a/src/third_party/glm/CMakeLists.txt b/src/third_party/glm/CMakeLists.txt
new file mode 100644
index 0000000..bdb9f43
--- /dev/null
+++ b/src/third_party/glm/CMakeLists.txt
@@ -0,0 +1,227 @@
+cmake_minimum_required(VERSION 2.6 FATAL_ERROR)
+cmake_policy(VERSION 2.6)
+if (NOT CMAKE_VERSION VERSION_LESS "3.1")
+ cmake_policy(SET CMP0054 NEW)
+endif()
+
+project(glm)
+set(GLM_VERSION "0.9.9")
+
+list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
+
+include(GNUInstallDirs)
+include(CMakePackageConfigHelpers)
+
+enable_testing()
+
+add_definitions(-D_CRT_SECURE_NO_WARNINGS)
+
+option(GLM_STATIC_LIBRARY_ENABLE "GLM static library" OFF)
+if(GLM_STATIC_LIBRARY_ENABLE)
+ message(STATUS "GLM is a header only library, no need to build it. Set the option GLM_STATIC_LIBRARY_ENABLE with ON to build an optional static library")
+endif()
+
+option(GLM_DYNAMIC_LIBRARY_ENABLE "GLM static library" OFF)
+if(GLM_DYNAMIC_LIBRARY_ENABLE)
+ message(STATUS "GLM is a header only library, no need to build it. Set the option GLM_DYNAMIC_LIBRARY_ENABLE with ON to build an optional dynamic library")
+endif()
+
+option(GLM_TEST_ENABLE "GLM test" OFF)
+if(NOT GLM_TEST_ENABLE)
+ message(STATUS "GLM is a header only library, no need to build it. Set the option GLM_TEST_ENABLE with ON to build and run the test bench")
+endif()
+
+option(GLM_TEST_ENABLE_FAST_MATH "Enable fast math optimizations" OFF)
+
+if(("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") OR ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") OR (("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel") AND UNIX))
+ option(GLM_TEST_ENABLE_CXX_98 "Enable C++ 98" OFF)
+ option(GLM_TEST_ENABLE_CXX_0X "Enable C++ 0x" OFF)
+ option(GLM_TEST_ENABLE_CXX_11 "Enable C++ 11" OFF)
+ option(GLM_TEST_ENABLE_CXX_1Y "Enable C++ 1y" OFF)
+ option(GLM_TEST_ENABLE_CXX_14 "Enable C++ 14" OFF)
+ option(GLM_TEST_ENABLE_CXX_1Z "Enable C++ 1z" OFF)
+
+ if(GLM_TEST_ENABLE_CXX_1Z)
+ set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++1z")
+ set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
+ set(CMAKE_CXX_FLAGS "-std=c++1Z")
+ elseif(GLM_TEST_ENABLE_CXX_14)
+ set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++14")
+ set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
+ set(CMAKE_CXX_FLAGS "-std=c++14")
+ elseif(GLM_TEST_ENABLE_CXX_1Y)
+ set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++1y")
+ set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
+ set(CMAKE_CXX_FLAGS "-std=c++1y")
+ elseif(GLM_TEST_ENABLE_CXX_11)
+ set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++11")
+ set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
+ set(CMAKE_CXX_FLAGS "-std=c++11")
+ elseif(GLM_TEST_ENABLE_CXX_0X)
+ set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++0x")
+ set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
+ set(CMAKE_CXX_FLAGS "-std=c++0x")
+ elseif(GLM_TEST_ENABLE_CXX_98)
+ set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++98")
+ set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
+ set(CMAKE_CXX_FLAGS "-std=c++98")
+ if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
+ add_definitions(-Wno-long-long)
+ endif()
+ endif()
+endif()
+
+option(GLM_TEST_ENABLE_LANG_EXTENSIONS "Enable language extensions" OFF)
+
+if(GLM_TEST_ENABLE_LANG_EXTENSIONS)
+ if(GLM_TEST_ENABLE_FAST_MATH)
+ if(CMAKE_COMPILER_IS_GNUCXX)
+ add_definitions(-ffast-math)
+ endif()
+
+ if(MSVC)
+ add_definitions(/fp:fast)
+ endif()
+ elseif(NOT GLM_TEST_ENABLE_FAST_MATH)
+ if(MSVC)
+ add_definitions(/fp:precise)
+ endif()
+ endif()
+else()
+ if(("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") OR (("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel") AND WIN32))
+ add_definitions(/Za)
+ elseif(("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") OR ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU"))
+ add_definitions(-pedantic)
+ endif()
+endif()
+
+option(GLM_TEST_ENABLE_SIMD_SSE2 "Enable SSE2 optimizations" OFF)
+option(GLM_TEST_ENABLE_SIMD_SSE3 "Enable SSE3 optimizations" OFF)
+option(GLM_TEST_ENABLE_SIMD_AVX "Enable AVX optimizations" OFF)
+option(GLM_TEST_ENABLE_SIMD_AVX2 "Enable AVX2 optimizations" OFF)
+option(GLM_TEST_FORCE_PURE "Force 'pure' instructions" OFF)
+
+if(GLM_TEST_FORCE_PURE)
+ add_definitions(-DGLM_FORCE_PURE)
+
+ if(CMAKE_COMPILER_IS_GNUCXX)
+ add_definitions(-mfpmath=387)
+ endif()
+elseif(GLM_TEST_ENABLE_SIMD_AVX2)
+ if(CMAKE_COMPILER_IS_GNUCXX)
+ add_definitions(-mavx2)
+ elseif(GLM_USE_INTEL)
+ add_definitions(/QxAVX2)
+ elseif(MSVC)
+ add_definitions(/arch:AVX2)
+ endif()
+elseif(GLM_TEST_ENABLE_SIMD_AVX)
+ if(CMAKE_COMPILER_IS_GNUCXX)
+ add_definitions(-mavx)
+ elseif(GLM_USE_INTEL)
+ add_definitions(/QxAVX)
+ elseif(MSVC)
+ add_definitions(/arch:AVX)
+ endif()
+elseif(GLM_TEST_ENABLE_SIMD_SSE3)
+ if(CMAKE_COMPILER_IS_GNUCXX)
+ add_definitions(-msse3)
+ elseif(GLM_USE_INTEL)
+ add_definitions(/QxSSE3)
+ elseif(MSVC AND NOT CMAKE_CL_64)
+ add_definitions(/arch:SSE2) # VC doesn't support /arch:SSE3
+ endif()
+elseif(GLM_TEST_ENABLE_SIMD_SSE2)
+ if(CMAKE_COMPILER_IS_GNUCXX)
+ add_definitions(-msse2)
+ elseif(GLM_USE_INTEL)
+ add_definitions(/QxSSE2)
+ elseif(MSVC AND NOT CMAKE_CL_64)
+ add_definitions(/arch:SSE2)
+ endif()
+endif()
+
+if(CMAKE_COMPILER_IS_GNUCXX)
+ #add_definitions(-S)
+ #add_definitions(-s)
+ add_definitions(-O2)
+
+ #add_definitions(-fprofile-arcs -ftest-coverage) gcov
+ #ctest_enable_coverage()
+endif()
+
+if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
+ add_definitions(/FAs)
+endif()
+
+include_directories("${PROJECT_SOURCE_DIR}")
+include_directories("${PROJECT_SOURCE_DIR}/test/external")
+
+add_subdirectory(glm)
+add_subdirectory(test)
+
+set(GLM_INSTALL_CONFIGDIR "${CMAKE_INSTALL_LIBDIR}/cmake/glm")
+install(DIRECTORY glm DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
+
+write_basic_package_version_file(
+ "${CMAKE_CURRENT_BINARY_DIR}/glmVersion.cmake"
+ VERSION ${GLM_VERSION}
+ COMPATIBILITY AnyNewerVersion
+)
+
+# build tree package config
+configure_file(
+ cmake/glmBuildConfig.cmake.in
+ glmConfig.cmake
+ @ONLY
+)
+
+# install tree package config
+configure_package_config_file(
+ cmake/glmConfig.cmake.in
+ ${GLM_INSTALL_CONFIGDIR}/glmConfig.cmake
+ INSTALL_DESTINATION ${GLM_INSTALL_CONFIGDIR}
+ PATH_VARS CMAKE_INSTALL_INCLUDEDIR
+ NO_CHECK_REQUIRED_COMPONENTS_MACRO
+)
+
+install(
+ FILES
+ "${CMAKE_CURRENT_BINARY_DIR}/${GLM_INSTALL_CONFIGDIR}/glmConfig.cmake"
+ "${CMAKE_CURRENT_BINARY_DIR}/glmVersion.cmake"
+ DESTINATION ${GLM_INSTALL_CONFIGDIR}
+)
+
+if (NOT CMAKE_VERSION VERSION_LESS "3.0")
+ add_library(glm INTERFACE)
+ target_include_directories(glm INTERFACE
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
+ )
+ install(TARGETS glm EXPORT glmTargets)
+
+ export(
+ EXPORT glmTargets
+ FILE "${CMAKE_CURRENT_BINARY_DIR}/glmTargets.cmake"
+ )
+
+ install(
+ EXPORT glmTargets FILE glmTargets.cmake
+ DESTINATION ${GLM_INSTALL_CONFIGDIR}
+ )
+endif()
+
+# build pkg-config file
+configure_file(
+ "./cmake/glm.pc.in"
+ "glm.pc"
+ @ONLY
+)
+
+# install pkg-config file
+install(
+ FILES "${CMAKE_CURRENT_BINARY_DIR}/glm.pc"
+ DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig"
+)
+
+export(PACKAGE glm)
diff --git a/src/third_party/glm/cmake/CMakePackageConfigHelpers.cmake b/src/third_party/glm/cmake/CMakePackageConfigHelpers.cmake
new file mode 100644
index 0000000..d5bf4a2
--- /dev/null
+++ b/src/third_party/glm/cmake/CMakePackageConfigHelpers.cmake
@@ -0,0 +1,227 @@
+# - CONFIGURE_PACKAGE_CONFIG_FILE(), WRITE_BASIC_PACKAGE_VERSION_FILE()
+#
+# CONFIGURE_PACKAGE_CONFIG_FILE(<input> <output> INSTALL_DESTINATION <path>
+# [PATH_VARS <var1> <var2> ... <varN>]
+# [NO_SET_AND_CHECK_MACRO]
+# [NO_CHECK_REQUIRED_COMPONENTS_MACRO])
+#
+# CONFIGURE_PACKAGE_CONFIG_FILE() should be used instead of the plain
+# CONFIGURE_FILE() command when creating the <Name>Config.cmake or <Name>-config.cmake
+# file for installing a project or library. It helps making the resulting package
+# relocatable by avoiding hardcoded paths in the installed Config.cmake file.
+#
+# In a FooConfig.cmake file there may be code like this to make the
+# install destinations know to the using project:
+# set(FOO_INCLUDE_DIR "@CMAKE_INSTALL_FULL_INCLUDEDIR@" )
+# set(FOO_DATA_DIR "@CMAKE_INSTALL_PREFIX@/@RELATIVE_DATA_INSTALL_DIR@" )
+# set(FOO_ICONS_DIR "@CMAKE_INSTALL_PREFIX@/share/icons" )
+# ...logic to determine installedPrefix from the own location...
+# set(FOO_CONFIG_DIR "${installedPrefix}/@CONFIG_INSTALL_DIR@" )
+# All 4 options shown above are not sufficient, since the first 3 hardcode
+# the absolute directory locations, and the 4th case works only if the logic
+# to determine the installedPrefix is correct, and if CONFIG_INSTALL_DIR contains
+# a relative path, which in general cannot be guaranteed.
+# This has the effect that the resulting FooConfig.cmake file would work poorly
+# under Windows and OSX, where users are used to choose the install location
+# of a binary package at install time, independent from how CMAKE_INSTALL_PREFIX
+# was set at build/cmake time.
+#
+# Using CONFIGURE_PACKAGE_CONFIG_FILE() helps. If used correctly, it makes the
+# resulting FooConfig.cmake file relocatable.
+# Usage:
+# 1. write a FooConfig.cmake.in file as you are used to
+# 2. insert a line containing only the string "@PACKAGE_INIT@"
+# 3. instead of SET(FOO_DIR "@SOME_INSTALL_DIR@"), use SET(FOO_DIR "@PACKAGE_SOME_INSTALL_DIR@")
+# (this must be after the @PACKAGE_INIT@ line)
+# 4. instead of using the normal CONFIGURE_FILE(), use CONFIGURE_PACKAGE_CONFIG_FILE()
+#
+# The <input> and <output> arguments are the input and output file, the same way
+# as in CONFIGURE_FILE().
+#
+# The <path> given to INSTALL_DESTINATION must be the destination where the FooConfig.cmake
+# file will be installed to. This can either be a relative or absolute path, both work.
+#
+# The variables <var1> to <varN> given as PATH_VARS are the variables which contain
+# install destinations. For each of them the macro will create a helper variable
+# PACKAGE_<var...>. These helper variables must be used
+# in the FooConfig.cmake.in file for setting the installed location. They are calculated
+# by CONFIGURE_PACKAGE_CONFIG_FILE() so that they are always relative to the
+# installed location of the package. This works both for relative and also for absolute locations.
+# For absolute locations it works only if the absolute location is a subdirectory
+# of CMAKE_INSTALL_PREFIX.
+#
+# By default configure_package_config_file() also generates two helper macros,
+# set_and_check() and check_required_components() into the FooConfig.cmake file.
+#
+# set_and_check() should be used instead of the normal set()
+# command for setting directories and file locations. Additionally to setting the
+# variable it also checks that the referenced file or directory actually exists
+# and fails with a FATAL_ERROR otherwise. This makes sure that the created
+# FooConfig.cmake file does not contain wrong references.
+# When using the NO_SET_AND_CHECK_MACRO, this macro is not generated into the
+# FooConfig.cmake file.
+#
+# check_required_components(<package_name>) should be called at the end of the
+# FooConfig.cmake file if the package supports components.
+# This macro checks whether all requested, non-optional components have been found,
+# and if this is not the case, sets the Foo_FOUND variable to FALSE, so that the package
+# is considered to be not found.
+# It does that by testing the Foo_<Component>_FOUND variables for all requested
+# required components.
+# When using the NO_CHECK_REQUIRED_COMPONENTS option, this macro is not generated
+# into the FooConfig.cmake file.
+#
+# For an example see below the documentation for WRITE_BASIC_PACKAGE_VERSION_FILE().
+#
+#
+# WRITE_BASIC_PACKAGE_VERSION_FILE( filename VERSION major.minor.patch COMPATIBILITY (AnyNewerVersion|SameMajorVersion|ExactVersion) )
+#
+# Writes a file for use as <package>ConfigVersion.cmake file to <filename>.
+# See the documentation of FIND_PACKAGE() for details on this.
+# filename is the output filename, it should be in the build tree.
+# major.minor.patch is the version number of the project to be installed
+# The COMPATIBILITY mode AnyNewerVersion means that the installed package version
+# will be considered compatible if it is newer or exactly the same as the requested version.
+# This mode should be used for packages which are fully backward compatible,
+# also across major versions.
+# If SameMajorVersion is used instead, then the behaviour differs from AnyNewerVersion
+# in that the major version number must be the same as requested, e.g. version 2.0 will
+# not be considered compatible if 1.0 is requested.
+# This mode should be used for packages which guarantee backward compatibility within the
+# same major version.
+# If ExactVersion is used, then the package is only considered compatible if the requested
+# version matches exactly its own version number (not considering the tweak version).
+# For example, version 1.2.3 of a package is only considered compatible to requested version 1.2.3.
+# This mode is for packages without compatibility guarantees.
+# If your project has more elaborated version matching rules, you will need to write your
+# own custom ConfigVersion.cmake file instead of using this macro.
+#
+# Internally, this macro executes configure_file() to create the resulting
+# version file. Depending on the COMPATIBILITY, either the file
+# BasicConfigVersion-SameMajorVersion.cmake.in or BasicConfigVersion-AnyNewerVersion.cmake.in
+# is used. Please note that these two files are internal to CMake and you should
+# not call configure_file() on them yourself, but they can be used as starting
+# point to create more sophisticted custom ConfigVersion.cmake files.
+#
+#
+# Example using both configure_package_config_file() and write_basic_package_version_file():
+# CMakeLists.txt:
+# set(INCLUDE_INSTALL_DIR include/ ... CACHE )
+# set(LIB_INSTALL_DIR lib/ ... CACHE )
+# set(SYSCONFIG_INSTALL_DIR etc/foo/ ... CACHE )
+# ...
+# include(CMakePackageConfigHelpers)
+# configure_package_config_file(FooConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/FooConfig.cmake
+# INSTALL_DESTINATION ${LIB_INSTALL_DIR}/Foo/cmake
+# PATH_VARS INCLUDE_INSTALL_DIR SYSCONFIG_INSTALL_DIR)
+# write_basic_package_version_file(${CMAKE_CURRENT_BINARY_DIR}/FooConfigVersion.cmake
+# VERSION 1.2.3
+# COMPATIBILITY SameMajorVersion )
+# install(FILES ${CMAKE_CURRENT_BINARY_DIR}/FooConfig.cmake ${CMAKE_CURRENT_BINARY_DIR}/FooConfigVersion.cmake
+# DESTINATION ${LIB_INSTALL_DIR}/Foo/cmake )
+#
+# With a FooConfig.cmake.in:
+# set(FOO_VERSION x.y.z)
+# ...
+# @PACKAGE_INIT@
+# ...
+# set_and_check(FOO_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@")
+# set_and_check(FOO_SYSCONFIG_DIR "@PACKAGE_SYSCONFIG_INSTALL_DIR@")
+#
+# check_required_components(Foo)
+
+
+#=============================================================================
+# Copyright 2012 Alexander Neundorf <neundorf@kde.org>
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# (To distribute this file outside of CMake, substitute the full
+# License text for the above reference.)
+
+include(CMakeParseArguments)
+
+include(WriteBasicConfigVersionFile)
+
+macro(WRITE_BASIC_PACKAGE_VERSION_FILE)
+ write_basic_config_version_file(${ARGN})
+endmacro()
+
+
+function(CONFIGURE_PACKAGE_CONFIG_FILE _inputFile _outputFile)
+ set(options NO_SET_AND_CHECK_MACRO NO_CHECK_REQUIRED_COMPONENTS_MACRO)
+ set(oneValueArgs INSTALL_DESTINATION )
+ set(multiValueArgs PATH_VARS )
+
+ cmake_parse_arguments(CCF "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
+
+ if(CCF_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "Unknown keywords given to CONFIGURE_PACKAGE_CONFIG_FILE(): \"${CCF_UNPARSED_ARGUMENTS}\"")
+ endif()
+
+ if(NOT CCF_INSTALL_DESTINATION)
+ message(FATAL_ERROR "No INSTALL_DESTINATION given to CONFIGURE_PACKAGE_CONFIG_FILE()")
+ endif()
+
+ if(IS_ABSOLUTE "${CCF_INSTALL_DESTINATION}")
+ set(absInstallDir "${CCF_INSTALL_DESTINATION}")
+ else()
+ set(absInstallDir "${CMAKE_INSTALL_PREFIX}/${CCF_INSTALL_DESTINATION}")
+ endif()
+ file(RELATIVE_PATH PACKAGE_RELATIVE_PATH "${absInstallDir}" "${CMAKE_INSTALL_PREFIX}" )
+
+ foreach(var ${CCF_PATH_VARS})
+ if(NOT DEFINED ${var})
+ message(FATAL_ERROR "Variable ${var} does not exist")
+ else()
+ if(IS_ABSOLUTE "${${var}}")
+ string(REPLACE "${CMAKE_INSTALL_PREFIX}" "\${PACKAGE_PREFIX_DIR}"
+ PACKAGE_${var} "${${var}}")
+ else()
+ set(PACKAGE_${var} "\${PACKAGE_PREFIX_DIR}/${${var}}")
+ endif()
+ endif()
+ endforeach()
+
+ set(PACKAGE_INIT "
+####### Expanded from @PACKAGE_INIT@ by configure_package_config_file() #######
+get_filename_component(PACKAGE_PREFIX_DIR \"\${CMAKE_CURRENT_LIST_DIR}/${PACKAGE_RELATIVE_PATH}\" ABSOLUTE)
+")
+
+ if(NOT CCF_NO_SET_AND_CHECK_MACRO)
+ set(PACKAGE_INIT "${PACKAGE_INIT}
+macro(set_and_check _var _file)
+ set(\${_var} \"\${_file}\")
+ if(NOT EXISTS \"\${_file}\")
+ message(FATAL_ERROR \"File or directory \${_file} referenced by variable \${_var} does not exist !\")
+ endif()
+endmacro()
+")
+ endif()
+
+
+ if(NOT CCF_NO_CHECK_REQUIRED_COMPONENTS_MACRO)
+ set(PACKAGE_INIT "${PACKAGE_INIT}
+macro(check_required_components _NAME)
+ foreach(comp \${\${_NAME}_FIND_COMPONENTS})
+ if(NOT \${_NAME}_\${comp}_FOUND)
+ if(\${_NAME}_FIND_REQUIRED_\${comp})
+ set(\${_NAME}_FOUND FALSE)
+ endif()
+ endif()
+ endforeach(comp)
+endmacro()
+")
+ endif()
+
+ set(PACKAGE_INIT "${PACKAGE_INIT}
+####################################################################################")
+
+ configure_file("${_inputFile}" "${_outputFile}" @ONLY)
+
+endfunction()
diff --git a/src/third_party/glm/cmake/GNUInstallDirs.cmake b/src/third_party/glm/cmake/GNUInstallDirs.cmake
new file mode 100644
index 0000000..4dc2d68
--- /dev/null
+++ b/src/third_party/glm/cmake/GNUInstallDirs.cmake
@@ -0,0 +1,188 @@
+# - Define GNU standard installation directories
+# Provides install directory variables as defined for GNU software:
+# http://www.gnu.org/prep/standards/html_node/Directory-Variables.html
+# Inclusion of this module defines the following variables:
+# CMAKE_INSTALL_<dir> - destination for files of a given type
+# CMAKE_INSTALL_FULL_<dir> - corresponding absolute path
+# where <dir> is one of:
+# BINDIR - user executables (bin)
+# SBINDIR - system admin executables (sbin)
+# LIBEXECDIR - program executables (libexec)
+# SYSCONFDIR - read-only single-machine data (etc)
+# SHAREDSTATEDIR - modifiable architecture-independent data (com)
+# LOCALSTATEDIR - modifiable single-machine data (var)
+# LIBDIR - object code libraries (lib or lib64 or lib/<multiarch-tuple> on Debian)
+# INCLUDEDIR - C header files (include)
+# OLDINCLUDEDIR - C header files for non-gcc (/usr/include)
+# DATAROOTDIR - read-only architecture-independent data root (share)
+# DATADIR - read-only architecture-independent data (DATAROOTDIR)
+# INFODIR - info documentation (DATAROOTDIR/info)
+# LOCALEDIR - locale-dependent data (DATAROOTDIR/locale)
+# MANDIR - man documentation (DATAROOTDIR/man)
+# DOCDIR - documentation root (DATAROOTDIR/doc/PROJECT_NAME)
+# Each CMAKE_INSTALL_<dir> value may be passed to the DESTINATION options of
+# install() commands for the corresponding file type. If the includer does
+# not define a value the above-shown default will be used and the value will
+# appear in the cache for editing by the user.
+# Each CMAKE_INSTALL_FULL_<dir> value contains an absolute path constructed
+# from the corresponding destination by prepending (if necessary) the value
+# of CMAKE_INSTALL_PREFIX.
+
+#=============================================================================
+# Copyright 2011 Nikita Krupen'ko <krnekit@gmail.com>
+# Copyright 2011 Kitware, Inc.
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# (To distribute this file outside of CMake, substitute the full
+# License text for the above reference.)
+
+# Installation directories
+#
+if(NOT DEFINED CMAKE_INSTALL_BINDIR)
+ set(CMAKE_INSTALL_BINDIR "bin" CACHE PATH "user executables (bin)")
+endif()
+
+if(NOT DEFINED CMAKE_INSTALL_SBINDIR)
+ set(CMAKE_INSTALL_SBINDIR "sbin" CACHE PATH "system admin executables (sbin)")
+endif()
+
+if(NOT DEFINED CMAKE_INSTALL_LIBEXECDIR)
+ set(CMAKE_INSTALL_LIBEXECDIR "libexec" CACHE PATH "program executables (libexec)")
+endif()
+
+if(NOT DEFINED CMAKE_INSTALL_SYSCONFDIR)
+ set(CMAKE_INSTALL_SYSCONFDIR "etc" CACHE PATH "read-only single-machine data (etc)")
+endif()
+
+if(NOT DEFINED CMAKE_INSTALL_SHAREDSTATEDIR)
+ set(CMAKE_INSTALL_SHAREDSTATEDIR "com" CACHE PATH "modifiable architecture-independent data (com)")
+endif()
+
+if(NOT DEFINED CMAKE_INSTALL_LOCALSTATEDIR)
+ set(CMAKE_INSTALL_LOCALSTATEDIR "var" CACHE PATH "modifiable single-machine data (var)")
+endif()
+
+if(NOT DEFINED CMAKE_INSTALL_LIBDIR)
+ set(_LIBDIR_DEFAULT "lib")
+ # Override this default 'lib' with 'lib64' iff:
+ # - we are on Linux system but NOT cross-compiling
+ # - we are NOT on debian
+ # - we are on a 64 bits system
+ # reason is: amd64 ABI: http://www.x86-64.org/documentation/abi.pdf
+ # For Debian with multiarch, use 'lib/${CMAKE_LIBRARY_ARCHITECTURE}' if
+ # CMAKE_LIBRARY_ARCHITECTURE is set (which contains e.g. "i386-linux-gnu"
+ # See http://wiki.debian.org/Multiarch
+ if((CMAKE_SYSTEM_NAME MATCHES "Linux|kFreeBSD" OR CMAKE_SYSTEM_NAME STREQUAL "GNU")
+ AND NOT CMAKE_CROSSCOMPILING)
+ if (EXISTS "/etc/debian_version") # is this a debian system ?
+ if(CMAKE_LIBRARY_ARCHITECTURE)
+ set(_LIBDIR_DEFAULT "lib/${CMAKE_LIBRARY_ARCHITECTURE}")
+ endif()
+ else() # not debian, rely on CMAKE_SIZEOF_VOID_P:
+ if(NOT DEFINED CMAKE_SIZEOF_VOID_P)
+ message(AUTHOR_WARNING
+ "Unable to determine default CMAKE_INSTALL_LIBDIR directory because no target architecture is known. "
+ "Please enable at least one language before including GNUInstallDirs.")
+ else()
+ if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
+ set(_LIBDIR_DEFAULT "lib64")
+ endif()
+ endif()
+ endif()
+ endif()
+ set(CMAKE_INSTALL_LIBDIR "${_LIBDIR_DEFAULT}" CACHE PATH "object code libraries (${_LIBDIR_DEFAULT})")
+endif()
+
+if(NOT DEFINED CMAKE_INSTALL_INCLUDEDIR)
+ set(CMAKE_INSTALL_INCLUDEDIR "include" CACHE PATH "C header files (include)")
+endif()
+
+if(NOT DEFINED CMAKE_INSTALL_OLDINCLUDEDIR)
+ set(CMAKE_INSTALL_OLDINCLUDEDIR "/usr/include" CACHE PATH "C header files for non-gcc (/usr/include)")
+endif()
+
+if(NOT DEFINED CMAKE_INSTALL_DATAROOTDIR)
+ set(CMAKE_INSTALL_DATAROOTDIR "share" CACHE PATH "read-only architecture-independent data root (share)")
+endif()
+
+#-----------------------------------------------------------------------------
+# Values whose defaults are relative to DATAROOTDIR. Store empty values in
+# the cache and store the defaults in local variables if the cache values are
+# not set explicitly. This auto-updates the defaults as DATAROOTDIR changes.
+
+if(NOT CMAKE_INSTALL_DATADIR)
+ set(CMAKE_INSTALL_DATADIR "" CACHE PATH "read-only architecture-independent data (DATAROOTDIR)")
+ set(CMAKE_INSTALL_DATADIR "${CMAKE_INSTALL_DATAROOTDIR}")
+endif()
+
+if(NOT CMAKE_INSTALL_INFODIR)
+ set(CMAKE_INSTALL_INFODIR "" CACHE PATH "info documentation (DATAROOTDIR/info)")
+ set(CMAKE_INSTALL_INFODIR "${CMAKE_INSTALL_DATAROOTDIR}/info")
+endif()
+
+if(NOT CMAKE_INSTALL_LOCALEDIR)
+ set(CMAKE_INSTALL_LOCALEDIR "" CACHE PATH "locale-dependent data (DATAROOTDIR/locale)")
+ set(CMAKE_INSTALL_LOCALEDIR "${CMAKE_INSTALL_DATAROOTDIR}/locale")
+endif()
+
+if(NOT CMAKE_INSTALL_MANDIR)
+ set(CMAKE_INSTALL_MANDIR "" CACHE PATH "man documentation (DATAROOTDIR/man)")
+ set(CMAKE_INSTALL_MANDIR "${CMAKE_INSTALL_DATAROOTDIR}/man")
+endif()
+
+if(NOT CMAKE_INSTALL_DOCDIR)
+ set(CMAKE_INSTALL_DOCDIR "" CACHE PATH "documentation root (DATAROOTDIR/doc/PROJECT_NAME)")
+ set(CMAKE_INSTALL_DOCDIR "${CMAKE_INSTALL_DATAROOTDIR}/doc/${PROJECT_NAME}")
+endif()
+
+#-----------------------------------------------------------------------------
+
+mark_as_advanced(
+ CMAKE_INSTALL_BINDIR
+ CMAKE_INSTALL_SBINDIR
+ CMAKE_INSTALL_LIBEXECDIR
+ CMAKE_INSTALL_SYSCONFDIR
+ CMAKE_INSTALL_SHAREDSTATEDIR
+ CMAKE_INSTALL_LOCALSTATEDIR
+ CMAKE_INSTALL_LIBDIR
+ CMAKE_INSTALL_INCLUDEDIR
+ CMAKE_INSTALL_OLDINCLUDEDIR
+ CMAKE_INSTALL_DATAROOTDIR
+ CMAKE_INSTALL_DATADIR
+ CMAKE_INSTALL_INFODIR
+ CMAKE_INSTALL_LOCALEDIR
+ CMAKE_INSTALL_MANDIR
+ CMAKE_INSTALL_DOCDIR
+ )
+
+# Result directories
+#
+foreach(dir
+ BINDIR
+ SBINDIR
+ LIBEXECDIR
+ SYSCONFDIR
+ SHAREDSTATEDIR
+ LOCALSTATEDIR
+ LIBDIR
+ INCLUDEDIR
+ OLDINCLUDEDIR
+ DATAROOTDIR
+ DATADIR
+ INFODIR
+ LOCALEDIR
+ MANDIR
+ DOCDIR
+ )
+ if(NOT IS_ABSOLUTE ${CMAKE_INSTALL_${dir}})
+ set(CMAKE_INSTALL_FULL_${dir} "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_${dir}}")
+ else()
+ set(CMAKE_INSTALL_FULL_${dir} "${CMAKE_INSTALL_${dir}}")
+ endif()
+endforeach()
diff --git a/src/third_party/glm/cmake/glm.pc.in b/src/third_party/glm/cmake/glm.pc.in
new file mode 100644
index 0000000..fc5c7bb
--- /dev/null
+++ b/src/third_party/glm/cmake/glm.pc.in
@@ -0,0 +1,7 @@
+prefix=@CMAKE_INSTALL_PREFIX@
+includedir=${prefix}/include
+
+Name: GLM
+Description: OpenGL Mathematics
+Version: @GLM_VERSION@
+Cflags: -I${includedir}
diff --git a/src/third_party/glm/cmake/glmBuildConfig.cmake.in b/src/third_party/glm/cmake/glmBuildConfig.cmake.in
new file mode 100644
index 0000000..1258dea
--- /dev/null
+++ b/src/third_party/glm/cmake/glmBuildConfig.cmake.in
@@ -0,0 +1,6 @@
+set(GLM_VERSION "@GLM_VERSION@")
+set(GLM_INCLUDE_DIRS "@CMAKE_CURRENT_SOURCE_DIR@")
+
+if (NOT CMAKE_VERSION VERSION_LESS "3.0")
+ include("${CMAKE_CURRENT_LIST_DIR}/glmTargets.cmake")
+endif()
diff --git a/src/third_party/glm/cmake/glmConfig.cmake.in b/src/third_party/glm/cmake/glmConfig.cmake.in
new file mode 100644
index 0000000..37d5ad8
--- /dev/null
+++ b/src/third_party/glm/cmake/glmConfig.cmake.in
@@ -0,0 +1,9 @@
+set(GLM_VERSION "@GLM_VERSION@")
+
+@PACKAGE_INIT@
+
+set_and_check(GLM_INCLUDE_DIRS "@PACKAGE_CMAKE_INSTALL_INCLUDEDIR@")
+
+if (NOT CMAKE_VERSION VERSION_LESS "3.0")
+ include("${CMAKE_CURRENT_LIST_DIR}/glmTargets.cmake")
+endif()
diff --git a/src/third_party/glm/copying.txt b/src/third_party/glm/copying.txt
new file mode 100644
index 0000000..7c20b4a
--- /dev/null
+++ b/src/third_party/glm/copying.txt
@@ -0,0 +1,54 @@
+================================================================================
+OpenGL Mathematics (GLM)
+--------------------------------------------------------------------------------
+GLM can be distributed and/or modified under the terms of either
+a) The Happy Bunny License, or b) the MIT License.
+
+================================================================================
+The Happy Bunny License (Modified MIT License)
+--------------------------------------------------------------------------------
+Copyright (c) 2005 - 2016 G-Truc Creation
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+Restrictions: By making use of the Software for military purposes, you choose
+to make a Bunny unhappy.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+================================================================================
+The MIT License
+--------------------------------------------------------------------------------
+Copyright (c) 2005 - 2016 G-Truc Creation
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/src/third_party/glm/doc/api/a00001.html b/src/third_party/glm/doc/api/a00001.html
new file mode 100644
index 0000000..bf310c8
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00001.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: _features.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">_features.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00001_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+
+<p>Definition in file <a class="el" href="a00001_source.html">_features.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00001_source.html b/src/third_party/glm/doc/api/a00001_source.html
new file mode 100644
index 0000000..2c98fae
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00001_source.html
@@ -0,0 +1,457 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: _features.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">_features.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00001.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">// #define GLM_CXX98_EXCEPTIONS</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">// #define GLM_CXX98_RTTI</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> </div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">// #define GLM_CXX11_RVALUE_REFERENCES</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">// Rvalue references - GCC 4.3</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2118.html</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> </div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">// GLM_CXX11_TRAILING_RETURN</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">// Rvalue references for *this - GCC not supported</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2439.htm</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">// GLM_CXX11_NONSTATIC_MEMBER_INIT</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">// Initialization of class objects by rvalues - GCC any</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1610.html</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment">// GLM_CXX11_NONSTATIC_MEMBER_INIT</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment">// Non-static data member initializers - GCC 4.7</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment">// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2008/n2756.htm</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment">// #define GLM_CXX11_VARIADIC_TEMPLATE</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment">// Variadic templates - GCC 4.3</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2242.pdf</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="comment">// </span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="comment">// Extending variadic template template parameters - GCC 4.4</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2555.pdf</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="comment">// #define GLM_CXX11_GENERALIZED_INITIALIZERS</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="comment">// Initializer lists - GCC 4.4</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="comment">// #define GLM_CXX11_STATIC_ASSERT </span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="comment">// Static assertions - GCC 4.3</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1720.html</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="comment">// #define GLM_CXX11_AUTO_TYPE</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="comment">// auto-typed variables - GCC 4.4</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1984.pdf</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="comment">// #define GLM_CXX11_AUTO_TYPE</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="comment">// Multi-declarator auto - GCC 4.4</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1737.pdf</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="comment">// #define GLM_CXX11_AUTO_TYPE</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="comment">// Removal of auto as a storage-class specifier - GCC 4.4</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2546.htm</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="comment">// #define GLM_CXX11_AUTO_TYPE</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="comment">// New function declarator syntax - GCC 4.4</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2541.htm</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="comment">// #define GLM_CXX11_LAMBDAS</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="comment">// New wording for C++0x lambdas - GCC 4.5</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="comment">// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2927.pdf</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="comment">// #define GLM_CXX11_DECLTYPE</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="comment">// Declared type of an expression - GCC 4.3</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2343.pdf</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="comment">// </span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="comment">// Right angle brackets - GCC 4.3</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1757.html</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="comment">// </span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="comment">// Default template arguments for function templates DR226 GCC 4.3</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#226</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="comment">// </span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="comment">// Solving the SFINAE problem for expressions DR339 GCC 4.4</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2634.html</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="comment">// #define GLM_CXX11_ALIAS_TEMPLATE</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="comment">// Template aliases N2258 GCC 4.7</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="comment">// </span></div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="comment">// Extern templates N1987 Yes</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1987.htm</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="comment">// #define GLM_CXX11_NULLPTR</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="comment">// Null pointer constant N2431 GCC 4.6</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2431.pdf</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="comment">// #define GLM_CXX11_STRONG_ENUMS</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="comment">// Strongly-typed enums N2347 GCC 4.4</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="comment">// </span></div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="comment">// Forward declarations for enums N2764 GCC 4.6</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2764.pdf</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="comment">// </span></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="comment">// Generalized attributes N2761 GCC 4.8</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2761.pdf</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="comment">// </span></div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="comment">// Generalized constant expressions N2235 GCC 4.6</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235.pdf</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="comment">// </span></div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="comment">// Alignment support N2341 GCC 4.8</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="comment">// #define GLM_CXX11_DELEGATING_CONSTRUCTORS</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="comment">// Delegating constructors N1986 GCC 4.7</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1986.pdf</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="comment">// </span></div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="comment">// Inheriting constructors N2540 GCC 4.8</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2540.htm</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="comment">// #define GLM_CXX11_EXPLICIT_CONVERSIONS</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="comment">// Explicit conversion operators N2437 GCC 4.5</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="comment">// </span></div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="comment">// New character types N2249 GCC 4.4</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2249.html</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="comment">// </span></div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="comment">// Unicode string literals N2442 GCC 4.5</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="comment">// </span></div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="comment">// Raw string literals N2442 GCC 4.5</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="comment">// </span></div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="comment">// Universal character name literals N2170 GCC 4.5</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2170.html</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="comment">// #define GLM_CXX11_USER_LITERALS</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="comment">// User-defined literals N2765 GCC 4.7</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2765.pdf</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="comment">// </span></div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="comment">// Standard Layout Types N2342 GCC 4.5</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2342.htm</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="comment">// #define GLM_CXX11_DEFAULTED_FUNCTIONS</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="comment">// #define GLM_CXX11_DELETED_FUNCTIONS</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="comment">// Defaulted and deleted functions N2346 GCC 4.4</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2346.htm</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="comment">// </span></div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="comment">// Extended friend declarations N1791 GCC 4.7</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1791.pdf</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="comment">// </span></div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="comment">// Extending sizeof N2253 GCC 4.4</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2253.html</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="comment">// #define GLM_CXX11_INLINE_NAMESPACES</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="comment">// Inline namespaces N2535 GCC 4.4</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2535.htm</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="comment">// #define GLM_CXX11_UNRESTRICTED_UNIONS</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="comment">// Unrestricted unions N2544 GCC 4.6</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="comment">// #define GLM_CXX11_LOCAL_TYPE_TEMPLATE_ARGS</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="comment">// Local and unnamed types as template arguments N2657 GCC 4.5</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2657.htm</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="comment">// #define GLM_CXX11_RANGE_FOR</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="comment">// Range-based for N2930 GCC 4.6</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="comment">// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2930.html</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="comment">// #define GLM_CXX11_OVERRIDE_CONTROL</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="comment">// Explicit virtual overrides N2928 N3206 N3272 GCC 4.7</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="comment">// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2928.htm</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3206.htm</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3272.htm</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> </div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="comment">// </span></div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="comment">// Minimal support for garbage collection and reachability-based leak detection N2670 No</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2670.htm</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="comment">// #define GLM_CXX11_NOEXCEPT</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="comment">// Allowing move constructors to throw [noexcept] N3050 GCC 4.6 (core language only)</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3050.html</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="comment">// </span></div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="comment">// Defining move special member functions N3053 GCC 4.6</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3053.html</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> </div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="comment">// </span></div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="comment">// Sequence points N2239 Yes</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="comment">// </span></div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="comment">// Atomic operations N2427 GCC 4.4</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> </div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="comment">// </span></div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="comment">// Strong Compare and Exchange N2748 GCC 4.5</span></div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2427.html</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> </div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="comment">// </span></div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="comment">// Bidirectional Fences N2752 GCC 4.8</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2752.htm</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> </div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="comment">// </span></div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="comment">// Memory model N2429 GCC 4.8</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2429.htm</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="comment">// </span></div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="comment">// Data-dependency ordering: atomics and memory model N2664 GCC 4.4</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2664.htm</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> </div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="comment">// </span></div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="comment">// Propagating exceptions N2179 GCC 4.4</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2179.html</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="comment">// </span></div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="comment">// Abandoning a process and at_quick_exit N2440 GCC 4.8</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2440.htm</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="comment">// </span></div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="comment">// Allow atomics use in signal handlers N2547 Yes</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2547.htm</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> </div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="comment">// </span></div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="comment">// Thread-local storage N2659 GCC 4.8</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2659.htm</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> </div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> <span class="comment">// </span></div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <span class="comment">// Dynamic initialization and destruction with concurrency N2660 GCC 4.3</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2660.htm</span></div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> </div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="comment">// </span></div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="comment">// __func__ predefined identifier N2340 GCC 4.3</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2340.htm</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> </div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="comment">// </span></div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="comment">// C99 preprocessor N1653 GCC 4.3</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1653.htm</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> </div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="comment">// </span></div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="comment">// long long N1811 GCC 4.3</span></div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1811.pdf</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> </div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <span class="comment">// </span></div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="comment">// Extended integral types N1988 Yes</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1988.pdf</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> </div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <span class="preprocessor">#if(GLM_COMPILER & GLM_COMPILER_GCC)</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> </div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> <span class="preprocessor"># if(GLM_COMPILER >= GLM_COMPILER_GCC43)</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <span class="preprocessor"># define GLM_CXX11_STATIC_ASSERT</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> </div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="preprocessor">#elif(GLM_COMPILER & GLM_COMPILER_CLANG)</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <span class="preprocessor"># if(__has_feature(cxx_exceptions))</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> <span class="preprocessor"># define GLM_CXX98_EXCEPTIONS</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> </div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="preprocessor"># if(__has_feature(cxx_rtti))</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> <span class="preprocessor"># define GLM_CXX98_RTTI</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> </div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <span class="preprocessor"># if(__has_feature(cxx_access_control_sfinae))</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> <span class="preprocessor"># define GLM_CXX11_ACCESS_CONTROL_SFINAE</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="preprocessor"># if(__has_feature(cxx_alias_templates))</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <span class="preprocessor"># define GLM_CXX11_ALIAS_TEMPLATE</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> </div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="preprocessor"># if(__has_feature(cxx_alignas))</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> <span class="preprocessor"># define GLM_CXX11_ALIGNAS</span></div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> </div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> <span class="preprocessor"># if(__has_feature(cxx_attributes))</span></div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="preprocessor"># define GLM_CXX11_ATTRIBUTES</span></div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> </div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <span class="preprocessor"># if(__has_feature(cxx_constexpr))</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="preprocessor"># define GLM_CXX11_CONSTEXPR</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> </div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> <span class="preprocessor"># if(__has_feature(cxx_decltype))</span></div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> <span class="preprocessor"># define GLM_CXX11_DECLTYPE</span></div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> </div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <span class="preprocessor"># if(__has_feature(cxx_default_function_template_args))</span></div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="preprocessor"># define GLM_CXX11_DEFAULT_FUNCTION_TEMPLATE_ARGS</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> </div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> <span class="preprocessor"># if(__has_feature(cxx_defaulted_functions))</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="preprocessor"># define GLM_CXX11_DEFAULTED_FUNCTIONS</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> </div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> <span class="preprocessor"># if(__has_feature(cxx_delegating_constructors))</span></div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> <span class="preprocessor"># define GLM_CXX11_DELEGATING_CONSTRUCTORS</span></div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> </div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> <span class="preprocessor"># if(__has_feature(cxx_deleted_functions))</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <span class="preprocessor"># define GLM_CXX11_DELETED_FUNCTIONS</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> </div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> <span class="preprocessor"># if(__has_feature(cxx_explicit_conversions))</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <span class="preprocessor"># define GLM_CXX11_EXPLICIT_CONVERSIONS</span></div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> </div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="preprocessor"># if(__has_feature(cxx_generalized_initializers))</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="preprocessor"># define GLM_CXX11_GENERALIZED_INITIALIZERS</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> </div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="preprocessor"># if(__has_feature(cxx_implicit_moves))</span></div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> <span class="preprocessor"># define GLM_CXX11_IMPLICIT_MOVES</span></div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> </div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> <span class="preprocessor"># if(__has_feature(cxx_inheriting_constructors))</span></div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="preprocessor"># define GLM_CXX11_INHERITING_CONSTRUCTORS</span></div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> </div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <span class="preprocessor"># if(__has_feature(cxx_inline_namespaces))</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> <span class="preprocessor"># define GLM_CXX11_INLINE_NAMESPACES</span></div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> </div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> <span class="preprocessor"># if(__has_feature(cxx_lambdas))</span></div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> <span class="preprocessor"># define GLM_CXX11_LAMBDAS</span></div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> </div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> <span class="preprocessor"># if(__has_feature(cxx_local_type_template_args))</span></div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> <span class="preprocessor"># define GLM_CXX11_LOCAL_TYPE_TEMPLATE_ARGS</span></div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> </div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="preprocessor"># if(__has_feature(cxx_noexcept))</span></div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> <span class="preprocessor"># define GLM_CXX11_NOEXCEPT</span></div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> </div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> <span class="preprocessor"># if(__has_feature(cxx_nonstatic_member_init))</span></div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> <span class="preprocessor"># define GLM_CXX11_NONSTATIC_MEMBER_INIT</span></div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> </div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> <span class="preprocessor"># if(__has_feature(cxx_nullptr))</span></div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> <span class="preprocessor"># define GLM_CXX11_NULLPTR</span></div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> </div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> <span class="preprocessor"># if(__has_feature(cxx_override_control))</span></div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <span class="preprocessor"># define GLM_CXX11_OVERRIDE_CONTROL</span></div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> </div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <span class="preprocessor"># if(__has_feature(cxx_reference_qualified_functions))</span></div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="preprocessor"># define GLM_CXX11_REFERENCE_QUALIFIED_FUNCTIONS</span></div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> </div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> <span class="preprocessor"># if(__has_feature(cxx_range_for))</span></div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> <span class="preprocessor"># define GLM_CXX11_RANGE_FOR</span></div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> </div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="preprocessor"># if(__has_feature(cxx_raw_string_literals))</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> <span class="preprocessor"># define GLM_CXX11_RAW_STRING_LITERALS</span></div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> </div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> <span class="preprocessor"># if(__has_feature(cxx_rvalue_references))</span></div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <span class="preprocessor"># define GLM_CXX11_RVALUE_REFERENCES</span></div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> </div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> <span class="preprocessor"># if(__has_feature(cxx_static_assert))</span></div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <span class="preprocessor"># define GLM_CXX11_STATIC_ASSERT</span></div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> </div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> <span class="preprocessor"># if(__has_feature(cxx_auto_type))</span></div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> <span class="preprocessor"># define GLM_CXX11_AUTO_TYPE</span></div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> </div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> <span class="preprocessor"># if(__has_feature(cxx_strong_enums))</span></div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> <span class="preprocessor"># define GLM_CXX11_STRONG_ENUMS</span></div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> </div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> <span class="preprocessor"># if(__has_feature(cxx_trailing_return))</span></div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> <span class="preprocessor"># define GLM_CXX11_TRAILING_RETURN</span></div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> </div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> <span class="preprocessor"># if(__has_feature(cxx_unicode_literals))</span></div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> <span class="preprocessor"># define GLM_CXX11_UNICODE_LITERALS</span></div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> </div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="preprocessor"># if(__has_feature(cxx_unrestricted_unions))</span></div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <span class="preprocessor"># define GLM_CXX11_UNRESTRICTED_UNIONS</span></div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> </div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <span class="preprocessor"># if(__has_feature(cxx_user_literals))</span></div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> <span class="preprocessor"># define GLM_CXX11_USER_LITERALS</span></div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> </div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> <span class="preprocessor"># if(__has_feature(cxx_variadic_templates))</span></div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> <span class="preprocessor"># define GLM_CXX11_VARIADIC_TEMPLATES</span></div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> </div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> <span class="preprocessor">#endif//(GLM_COMPILER & GLM_COMPILER_CLANG)</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00002.html b/src/third_party/glm/doc/api/a00002.html
new file mode 100644
index 0000000..523bac0
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00002.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: _fixes.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">_fixes.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00002_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+
+<p>Definition in file <a class="el" href="a00002_source.html">_fixes.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00002_source.html b/src/third_party/glm/doc/api/a00002_source.html
new file mode 100644
index 0000000..0941ab7
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00002_source.html
@@ -0,0 +1,83 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: _fixes.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">_fixes.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00002.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#include <cmath></span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#ifdef max</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor">#undef max</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> </div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor">#ifdef min</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#undef min</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#ifdef isnan</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#undef isnan</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#ifdef isinf</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#undef isinf</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#ifdef log2</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#undef log2</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00003.html b/src/third_party/glm/doc/api/a00003.html
new file mode 100644
index 0000000..b5ad770
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00003.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: _noise.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">_noise.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00003_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+
+<p>Definition in file <a class="el" href="a00003_source.html">_noise.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00003_source.html b/src/third_party/glm/doc/api/a00003_source.html
new file mode 100644
index 0000000..2575ec4
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00003_source.html
@@ -0,0 +1,167 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: _noise.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">_noise.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00003.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include "../vec2.hpp"</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#include "../vec3.hpp"</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor">#include "../vec4.hpp"</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#include "../common.hpp"</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> </div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a>{</div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="keyword">namespace </span>detail</div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> {</div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>  GLM_FUNC_QUALIFIER T mod289(T <span class="keyword">const</span> & x)</div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>  {</div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>  <span class="keywordflow">return</span> x - <a class="code" href="a00146.html#ga568b822b78f045f77c3325e165b44d5d">floor</a>(x * static_cast<T>(1.0) / static_cast<T>(289.0)) * <span class="keyword">static_cast<</span>T<span class="keyword">></span>(289.0);</div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  }</div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  GLM_FUNC_QUALIFIER T permute(T <span class="keyword">const</span> & x)</div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  {</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keywordflow">return</span> mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x);</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  }</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  GLM_FUNC_QUALIFIER tvec2<T, P> permute(tvec2<T, P> <span class="keyword">const</span> & x)</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  {</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keywordflow">return</span> mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x);</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  }</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  GLM_FUNC_QUALIFIER tvec3<T, P> permute(tvec3<T, P> <span class="keyword">const</span> & x)</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  {</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keywordflow">return</span> mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x);</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  }</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  </div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  GLM_FUNC_QUALIFIER tvec4<T, P> permute(tvec4<T, P> <span class="keyword">const</span> & x)</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  {</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keywordflow">return</span> mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x);</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  }</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="comment"> template <typename T, precision P, template<typename> class vecType></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="comment"> GLM_FUNC_QUALIFIER vecType<T, P> permute(vecType<T, P> const & x)</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="comment"> {</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="comment"> return mod289(((x * T(34)) + T(1)) * x);</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="comment"> }</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  GLM_FUNC_QUALIFIER T taylorInvSqrt(T <span class="keyword">const</span> & r)</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  {</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keywordflow">return</span> T(1.79284291400159) - T(0.85373472095314) * r;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  }</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  </div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  GLM_FUNC_QUALIFIER tvec2<T, P> taylorInvSqrt(tvec2<T, P> <span class="keyword">const</span> & r)</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  {</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keywordflow">return</span> T(1.79284291400159) - T(0.85373472095314) * r;</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  }</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  </div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  GLM_FUNC_QUALIFIER tvec3<T, P> taylorInvSqrt(tvec3<T, P> <span class="keyword">const</span> & r)</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  {</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keywordflow">return</span> T(1.79284291400159) - T(0.85373472095314) * r;</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  }</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  </div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  GLM_FUNC_QUALIFIER tvec4<T, P> taylorInvSqrt(tvec4<T, P> <span class="keyword">const</span> & r)</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  {</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="keywordflow">return</span> T(1.79284291400159) - T(0.85373472095314) * r;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  }</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="comment"> template <typename T, precision P, template<typename> class vecType></span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="comment"> GLM_FUNC_QUALIFIER vecType<T, P> taylorInvSqrt(vecType<T, P> const & r)</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="comment"> {</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="comment"> return T(1.79284291400159) - T(0.85373472095314) * r;</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="comment"> }</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  </div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  GLM_FUNC_QUALIFIER tvec2<T, P> fade(tvec2<T, P> <span class="keyword">const</span> & t)</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  {</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keywordflow">return</span> (t * t * t) * (t * (t * T(6) - T(15)) + T(10));</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  }</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  </div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  GLM_FUNC_QUALIFIER tvec3<T, P> fade(tvec3<T, P> <span class="keyword">const</span> & t)</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  {</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="keywordflow">return</span> (t * t * t) * (t * (t * T(6) - T(15)) + T(10));</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  }</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  </div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  GLM_FUNC_QUALIFIER tvec4<T, P> fade(tvec4<T, P> <span class="keyword">const</span> & t)</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  {</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keywordflow">return</span> (t * t * t) * (t * (t * T(6) - T(15)) + T(10));</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  }</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="comment"> template <typename T, precision P, template <typename> class vecType></span></div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="comment"> GLM_FUNC_QUALIFIER vecType<T, P> fade(vecType<T, P> const & t)</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="comment"> {</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="comment"> return (t * t * t) * (t * (t * T(6) - T(15)) + T(10));</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="comment"> }</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> }<span class="comment">//namespace detail</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> </div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00146_html_ga568b822b78f045f77c3325e165b44d5d"><div class="ttname"><a href="a00146.html#ga568b822b78f045f77c3325e165b44d5d">glm::floor</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > floor(vecType< T, P > const &x)</div><div class="ttdoc">Returns a value equal to the nearest integer that is less then or equal to x. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00004.html b/src/third_party/glm/doc/api/a00004.html
new file mode 100644
index 0000000..dc12366
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00004.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: _swizzle.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">_swizzle.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00004_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+
+<p>Definition in file <a class="el" href="a00004_source.html">_swizzle.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00004_source.html b/src/third_party/glm/doc/api/a00004_source.html
new file mode 100644
index 0000000..2402657
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00004_source.html
@@ -0,0 +1,857 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: _swizzle.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">_swizzle.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00004.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a>{</div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="keyword">namespace </span>detail</div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> {</div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>  <span class="comment">// Internal class for implementing swizzle operators</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, <span class="keywordtype">int</span> N></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>  <span class="keyword">struct </span>_swizzle_base0</div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>  {</div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>  <span class="keyword">protected</span>:</div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>  GLM_FUNC_QUALIFIER T& elem(<span class="keywordtype">size_t</span> i){ <span class="keywordflow">return</span> (reinterpret_cast<T*>(_buffer))[i]; }</div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>  GLM_FUNC_QUALIFIER T <span class="keyword">const</span>& elem(<span class="keywordtype">size_t</span> i)<span class="keyword"> const</span>{ <span class="keywordflow">return</span> (reinterpret_cast<const T*>(_buffer))[i]; }</div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>  <span class="comment">// Use an opaque buffer to *ensure* the compiler doesn't call a constructor.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  <span class="comment">// The size 1 buffer is assumed to aligned to the actual members so that the</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <span class="comment">// elem() </span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <span class="keywordtype">char</span> _buffer[1];</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  };</div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keyword">template</span> <<span class="keywordtype">int</span> N, <span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType, <span class="keywordtype">int</span> E0, <span class="keywordtype">int</span> E1, <span class="keywordtype">int</span> E2, <span class="keywordtype">int</span> E3, <span class="keywordtype">bool</span> Aligned></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="keyword">struct </span>_swizzle_base1 : <span class="keyword">public</span> _swizzle_base0<T, N></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  {</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  };</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType, <span class="keywordtype">int</span> E0, <span class="keywordtype">int</span> E1, <span class="keywordtype">bool</span> Aligned></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keyword">struct </span>_swizzle_base1<2, T, P, vecType, E0,E1,-1,-2, Aligned> : <span class="keyword">public</span> _swizzle_base0<T, 2></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  {</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  GLM_FUNC_QUALIFIER vecType<T, P> operator ()()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> vecType<T, P>(this->elem(E0), this->elem(E1)); }</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  };</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType, <span class="keywordtype">int</span> E0, <span class="keywordtype">int</span> E1, <span class="keywordtype">int</span> E2, <span class="keywordtype">bool</span> Aligned></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keyword">struct </span>_swizzle_base1<3, T, P, vecType, E0,E1,E2,-1, Aligned> : <span class="keyword">public</span> _swizzle_base0<T, 3></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  {</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  GLM_FUNC_QUALIFIER vecType<T, P> operator ()()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> vecType<T, P>(this->elem(E0), this->elem(E1), this->elem(E2)); }</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  };</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType, <span class="keywordtype">int</span> E0, <span class="keywordtype">int</span> E1, <span class="keywordtype">int</span> E2, <span class="keywordtype">int</span> E3, <span class="keywordtype">bool</span> Aligned></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keyword">struct </span>_swizzle_base1<4, T, P, vecType, E0,E1,E2,E3, Aligned> : <span class="keyword">public</span> _swizzle_base0<T, 4></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  { </div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  GLM_FUNC_QUALIFIER vecType<T, P> operator ()()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> vecType<T, P>(this->elem(E0), this->elem(E1), this->elem(E2), this->elem(E3)); }</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  };</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="comment">// Internal class for implementing swizzle operators</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="comment">/*</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="comment"> Template parameters:</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="comment"></span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="comment"> ValueType = type of scalar values (e.g. float, double)</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="comment"> VecType = class the swizzle is applies to (e.g. tvec3<float>)</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="comment"> N = number of components in the vector (e.g. 3)</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="comment"> E0...3 = what index the n-th element of this swizzle refers to in the unswizzled vec</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="comment"></span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="comment"> DUPLICATE_ELEMENTS = 1 if there is a repeated element, 0 otherwise (used to specialize swizzles</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="comment"> containing duplicate elements so that they cannot be used as r-values). </span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keyword">template</span> <<span class="keywordtype">int</span> N, <span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType, <span class="keywordtype">int</span> E0, <span class="keywordtype">int</span> E1, <span class="keywordtype">int</span> E2, <span class="keywordtype">int</span> E3, <span class="keywordtype">int</span> DUPLICATE_ELEMENTS></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keyword">struct </span>_swizzle_base2 : <span class="keyword">public</span> _swizzle_base1<N, T, P, vecType, E0,E1,E2,E3, detail::is_aligned<P>::value></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  {</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  GLM_FUNC_QUALIFIER _swizzle_base2& operator= (<span class="keyword">const</span> T& t)</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  {</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < N; ++i)</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  (*<span class="keyword">this</span>)[i] = t;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  }</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  GLM_FUNC_QUALIFIER _swizzle_base2& operator= (vecType<T, P> <span class="keyword">const</span>& that)</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  {</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keyword">struct </span>op { </div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  GLM_FUNC_QUALIFIER <span class="keywordtype">void</span> operator() (T& <a class="code" href="a00162.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139">e</a>, T& t) { e = t; } </div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  };</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  _apply_op(that, op());</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  }</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  GLM_FUNC_QUALIFIER <span class="keywordtype">void</span> operator -= (vecType<T, P> <span class="keyword">const</span>& that)</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  {</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keyword">struct </span>op { </div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  GLM_FUNC_QUALIFIER <span class="keywordtype">void</span> operator() (T& <a class="code" href="a00162.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139">e</a>, T& t) { e -= t; } </div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  };</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  _apply_op(that, op());</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  }</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  GLM_FUNC_QUALIFIER <span class="keywordtype">void</span> operator += (vecType<T, P> <span class="keyword">const</span>& that)</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  {</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="keyword">struct </span>op { </div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  GLM_FUNC_QUALIFIER <span class="keywordtype">void</span> operator() (T& <a class="code" href="a00162.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139">e</a>, T& t) { e += t; } </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  };</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  _apply_op(that, op());</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  }</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  GLM_FUNC_QUALIFIER <span class="keywordtype">void</span> operator *= (vecType<T, P> <span class="keyword">const</span>& that)</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  {</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="keyword">struct </span>op { </div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  GLM_FUNC_QUALIFIER <span class="keywordtype">void</span> operator() (T& <a class="code" href="a00162.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139">e</a>, T& t) { e *= t; } </div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  };</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  _apply_op(that, op());</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  }</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  GLM_FUNC_QUALIFIER <span class="keywordtype">void</span> operator /= (vecType<T, P> <span class="keyword">const</span>& that)</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  {</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keyword">struct </span>op { </div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  GLM_FUNC_QUALIFIER <span class="keywordtype">void</span> operator() (T& <a class="code" href="a00162.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139">e</a>, T& t) { e /= t; } </div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  };</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  _apply_op(that, op());</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  }</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  GLM_FUNC_QUALIFIER T& operator[](<span class="keywordtype">size_t</span> i)</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  {</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> offset_dst[4] = { E0, E1, E2, E3 };</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keywordflow">return</span> this->elem(offset_dst[i]);</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  }</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  GLM_FUNC_QUALIFIER T operator[](<span class="keywordtype">size_t</span> i)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keyword"> </span>{</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> offset_dst[4] = { E0, E1, E2, E3 };</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="keywordflow">return</span> this->elem(offset_dst[i]);</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  }</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="keyword">protected</span>:</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  GLM_FUNC_QUALIFIER <span class="keywordtype">void</span> _apply_op(vecType<T, P> <span class="keyword">const</span>& that, U op)</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  {</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="comment">// Make a copy of the data in this == &that.</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="comment">// The copier should optimize out the copy in cases where the function is</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="comment">// properly inlined and the copy is not necessary.</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  T t[N];</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < N; ++i)</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  t[i] = that[i];</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < N; ++i)</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  op( (*<span class="keyword">this</span>)[i], t[i] );</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  }</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  };</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="comment">// Specialization for swizzles containing duplicate elements. These cannot be modified.</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keyword">template</span> <<span class="keywordtype">int</span> N, <span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType, <span class="keywordtype">int</span> E0, <span class="keywordtype">int</span> E1, <span class="keywordtype">int</span> E2, <span class="keywordtype">int</span> E3></div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keyword">struct </span>_swizzle_base2<N, T, P, vecType, E0,E1,E2,E3, 1> : <span class="keyword">public</span> _swizzle_base1<N, T, P, vecType, E0,E1,E2,E3, detail::is_aligned<P>::value></div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  {</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="keyword">struct </span>Stub {};</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  GLM_FUNC_QUALIFIER _swizzle_base2& operator= (Stub <span class="keyword">const</span> &) { <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  GLM_FUNC_QUALIFIER T operator[] (<span class="keywordtype">size_t</span> i)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="keyword"> </span>{</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> offset_dst[4] = { E0, E1, E2, E3 };</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keywordflow">return</span> this->elem(offset_dst[i]);</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  }</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  };</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keyword">template</span> <<span class="keywordtype">int</span> N, <span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType, <span class="keywordtype">int</span> E0, <span class="keywordtype">int</span> E1, <span class="keywordtype">int</span> E2, <span class="keywordtype">int</span> E3></div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="keyword">struct </span>_swizzle : <span class="keyword">public</span> _swizzle_base2<N, T, P, vecType, E0, E1, E2, E3, (E0 == E1 || E0 == E2 || E0 == E3 || E1 == E2 || E1 == E3 || E2 == E3)></div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  {</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <span class="keyword">typedef</span> _swizzle_base2<N, T, P, vecType, E0, E1, E2, E3, (E0 == E1 || E0 == E2 || E0 == E3 || E1 == E2 || E1 == E3 || E2 == E3)> base_type;</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keyword">using</span> base_type::operator=;</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  GLM_FUNC_QUALIFIER <span class="keyword">operator</span> vecType<T, P> () <span class="keyword">const</span> { <span class="keywordflow">return</span> (*<span class="keyword">this</span>)(); }</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  };</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="comment">// To prevent the C++ syntax from getting entirely overwhelming, define some alias macros</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="preprocessor">#define _GLM_SWIZZLE_TEMPLATE1 template <int N, typename T, precision P, template <typename, precision> class vecType, int E0, int E1, int E2, int E3></span></div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="preprocessor">#define _GLM_SWIZZLE_TEMPLATE2 template <int N, typename T, precision P, template <typename, precision> class vecType, int E0, int E1, int E2, int E3, int F0, int F1, int F2, int F3></span></div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="preprocessor">#define _GLM_SWIZZLE_TYPE1 _swizzle<N, T, P, vecType, E0, E1, E2, E3></span></div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="preprocessor">#define _GLM_SWIZZLE_TYPE2 _swizzle<N, T, P, vecType, F0, F1, F2, F3></span></div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> </div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="comment">// Wrapper for a binary operator (e.g. u.yy + v.zy)</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="preprocessor">#define _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND) \</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="preprocessor"> _GLM_SWIZZLE_TEMPLATE2 \</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="preprocessor"> GLM_FUNC_QUALIFIER vecType<T, P> operator OPERAND ( const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE2& b) \</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="preprocessor"> return a() OPERAND b(); \</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="preprocessor"> _GLM_SWIZZLE_TEMPLATE1 \</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="preprocessor"> GLM_FUNC_QUALIFIER vecType<T, P> operator OPERAND ( const _GLM_SWIZZLE_TYPE1& a, const vecType<T, P>& b) \</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="preprocessor"> return a() OPERAND b; \</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="preprocessor"> _GLM_SWIZZLE_TEMPLATE1 \</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="preprocessor"> GLM_FUNC_QUALIFIER vecType<T, P> operator OPERAND ( const vecType<T, P>& a, const _GLM_SWIZZLE_TYPE1& b) \</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="preprocessor"> return a OPERAND b(); \</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="preprocessor"> }</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="comment">// Wrapper for a operand between a swizzle and a binary (e.g. 1.0f - u.xyz)</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="preprocessor">#define _GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND) \</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="preprocessor"> _GLM_SWIZZLE_TEMPLATE1 \</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="preprocessor"> GLM_FUNC_QUALIFIER vecType<T, P> operator OPERAND ( const _GLM_SWIZZLE_TYPE1& a, const T& b) \</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="preprocessor"> return a() OPERAND b; \</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="preprocessor"> _GLM_SWIZZLE_TEMPLATE1 \</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="preprocessor"> GLM_FUNC_QUALIFIER vecType<T, P> operator OPERAND ( const T& a, const _GLM_SWIZZLE_TYPE1& b) \</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="preprocessor"> return a OPERAND b(); \</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="preprocessor"> }</span></div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> </div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="comment">// Macro for wrapping a function taking one argument (e.g. abs())</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="preprocessor">#define _GLM_SWIZZLE_FUNCTION_1_ARGS(RETURN_TYPE,FUNCTION) \</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="preprocessor"> _GLM_SWIZZLE_TEMPLATE1 \</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="preprocessor"> GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a) \</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="preprocessor"> return FUNCTION(a()); \</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="preprocessor"> }</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> </div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="comment">// Macro for wrapping a function taking two vector arguments (e.g. dot()).</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="preprocessor">#define _GLM_SWIZZLE_FUNCTION_2_ARGS(RETURN_TYPE,FUNCTION) \</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="preprocessor"> _GLM_SWIZZLE_TEMPLATE2 \</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="preprocessor"> GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE2& b) \</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="preprocessor"> return FUNCTION(a(), b()); \</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="preprocessor"> _GLM_SWIZZLE_TEMPLATE1 \</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="preprocessor"> GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE1& b) \</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="preprocessor"> return FUNCTION(a(), b()); \</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="preprocessor"> _GLM_SWIZZLE_TEMPLATE1 \</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="preprocessor"> GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const typename V& b) \</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="preprocessor"> return FUNCTION(a(), b); \</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> <span class="preprocessor"> _GLM_SWIZZLE_TEMPLATE1 \</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <span class="preprocessor"> GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const V& a, const _GLM_SWIZZLE_TYPE1& b) \</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="preprocessor"> return FUNCTION(a, b()); \</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="preprocessor"> } </span></div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> </div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="comment">// Macro for wrapping a function take 2 vec arguments followed by a scalar (e.g. mix()).</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="preprocessor">#define _GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(RETURN_TYPE,FUNCTION) \</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="preprocessor"> _GLM_SWIZZLE_TEMPLATE2 \</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <span class="preprocessor"> GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE2& b, const T& c) \</span></div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="preprocessor"> return FUNCTION(a(), b(), c); \</span></div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> <span class="preprocessor"> _GLM_SWIZZLE_TEMPLATE1 \</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <span class="preprocessor"> GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE1& b, const T& c) \</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> <span class="preprocessor"> return FUNCTION(a(), b(), c); \</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <span class="preprocessor"> _GLM_SWIZZLE_TEMPLATE1 \</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="preprocessor"> GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const typename S0::vec_type& b, const T& c)\</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <span class="preprocessor"> return FUNCTION(a(), b, c); \</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="preprocessor"> _GLM_SWIZZLE_TEMPLATE1 \</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="preprocessor"> GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const typename V& a, const _GLM_SWIZZLE_TYPE1& b, const T& c) \</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> <span class="preprocessor"> return FUNCTION(a, b(), c); \</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="preprocessor"> } </span></div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  </div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> }<span class="comment">//namespace detail </span></div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> </div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> {</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <span class="keyword">namespace </span>detail</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  {</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  _GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(-)</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  _GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(*)</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(+)</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(-)</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(*)</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(/)</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  }</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> </div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <span class="comment">//</span></div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  <span class="comment">// Swizzles are distinct types from the unswizzled type. The below macros will</span></div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <span class="comment">// provide template specializations for the swizzle types for the given functions</span></div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  <span class="comment">// so that the compiler does not have any ambiguity to choosing how to handle</span></div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <span class="comment">// the function.</span></div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  <span class="comment">//</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  <span class="comment">// The alternative is to use the operator()() when calling the function in order</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  <span class="comment">// to explicitly convert the swizzled type to the unswizzled type.</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  <span class="comment">//</span></div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> </div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <span class="comment">//_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, abs);</span></div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="comment">//_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, acos);</span></div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  <span class="comment">//_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, acosh);</span></div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  <span class="comment">//_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, all);</span></div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  <span class="comment">//_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, any);</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> </div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  <span class="comment">//_GLM_SWIZZLE_FUNCTION_2_ARGS(value_type, dot);</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  <span class="comment">//_GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type, cross);</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  <span class="comment">//_GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type, step); </span></div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  <span class="comment">//_GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(vec_type, mix);</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> }</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> </div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> <span class="preprocessor">#define _GLM_SWIZZLE2_2_MEMBERS(T, P, V, E0,E1) \</span></div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <span class="preprocessor"> struct { detail::_swizzle<2, T, P, V, 0,0,-1,-2> E0 ## E0; }; \</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="preprocessor"> struct { detail::_swizzle<2, T, P, V, 0,1,-1,-2> E0 ## E1; }; \</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> <span class="preprocessor"> struct { detail::_swizzle<2, T, P, V, 1,0,-1,-2> E1 ## E0; }; \</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <span class="preprocessor"> struct { detail::_swizzle<2, T, P, V, 1,1,-1,-2> E1 ## E1; }; </span></div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> </div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <span class="preprocessor">#define _GLM_SWIZZLE2_3_MEMBERS(T, P, V, E0,E1) \</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> <span class="preprocessor"> struct { detail::_swizzle<3,T, P, V, 0,0,0,-1> E0 ## E0 ## E0; }; \</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <span class="preprocessor"> struct { detail::_swizzle<3,T, P, V, 0,0,1,-1> E0 ## E0 ## E1; }; \</span></div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <span class="preprocessor"> struct { detail::_swizzle<3,T, P, V, 0,1,0,-1> E0 ## E1 ## E0; }; \</span></div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="preprocessor"> struct { detail::_swizzle<3,T, P, V, 0,1,1,-1> E0 ## E1 ## E1; }; \</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="preprocessor"> struct { detail::_swizzle<3,T, P, V, 1,0,0,-1> E1 ## E0 ## E0; }; \</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="preprocessor"> struct { detail::_swizzle<3,T, P, V, 1,0,1,-1> E1 ## E0 ## E1; }; \</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="preprocessor"> struct { detail::_swizzle<3,T, P, V, 1,1,0,-1> E1 ## E1 ## E0; }; \</span></div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> <span class="preprocessor"> struct { detail::_swizzle<3,T, P, V, 1,1,1,-1> E1 ## E1 ## E1; }; </span></div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> </div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> <span class="preprocessor">#define _GLM_SWIZZLE2_4_MEMBERS(T, P, V, E0,E1) \</span></div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \</span></div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \</span></div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \</span></div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \</span></div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \</span></div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \</span></div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \</span></div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \</span></div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \</span></div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \</span></div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \</span></div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \</span></div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \</span></div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 1,1,1,1> E1 ## E1 ## E1 ## E1; };</span></div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> </div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> <span class="preprocessor">#define _GLM_SWIZZLE3_2_MEMBERS(T, P, V, E0,E1,E2) \</span></div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="preprocessor"> struct { detail::_swizzle<2,T, P, V, 0,0,-1,-2> E0 ## E0; }; \</span></div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> <span class="preprocessor"> struct { detail::_swizzle<2,T, P, V, 0,1,-1,-2> E0 ## E1; }; \</span></div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> <span class="preprocessor"> struct { detail::_swizzle<2,T, P, V, 0,2,-1,-2> E0 ## E2; }; \</span></div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> <span class="preprocessor"> struct { detail::_swizzle<2,T, P, V, 1,0,-1,-2> E1 ## E0; }; \</span></div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> <span class="preprocessor"> struct { detail::_swizzle<2,T, P, V, 1,1,-1,-2> E1 ## E1; }; \</span></div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> <span class="preprocessor"> struct { detail::_swizzle<2,T, P, V, 1,2,-1,-2> E1 ## E2; }; \</span></div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> <span class="preprocessor"> struct { detail::_swizzle<2,T, P, V, 2,0,-1,-2> E2 ## E0; }; \</span></div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> <span class="preprocessor"> struct { detail::_swizzle<2,T, P, V, 2,1,-1,-2> E2 ## E1; }; \</span></div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> <span class="preprocessor"> struct { detail::_swizzle<2,T, P, V, 2,2,-1,-2> E2 ## E2; };</span></div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> </div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <span class="preprocessor">#define _GLM_SWIZZLE3_3_MEMBERS(T, P, V ,E0,E1,E2) \</span></div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 0,0,0,-1> E0 ## E0 ## E0; }; \</span></div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 0,0,1,-1> E0 ## E0 ## E1; }; \</span></div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 0,0,2,-1> E0 ## E0 ## E2; }; \</span></div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 0,1,0,-1> E0 ## E1 ## E0; }; \</span></div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 0,1,1,-1> E0 ## E1 ## E1; }; \</span></div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 0,1,2,-1> E0 ## E1 ## E2; }; \</span></div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 0,2,0,-1> E0 ## E2 ## E0; }; \</span></div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 0,2,1,-1> E0 ## E2 ## E1; }; \</span></div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 0,2,2,-1> E0 ## E2 ## E2; }; \</span></div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 1,0,0,-1> E1 ## E0 ## E0; }; \</span></div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 1,0,1,-1> E1 ## E0 ## E1; }; \</span></div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 1,0,2,-1> E1 ## E0 ## E2; }; \</span></div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 1,1,0,-1> E1 ## E1 ## E0; }; \</span></div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 1,1,1,-1> E1 ## E1 ## E1; }; \</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 1,1,2,-1> E1 ## E1 ## E2; }; \</span></div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 1,2,0,-1> E1 ## E2 ## E0; }; \</span></div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 1,2,1,-1> E1 ## E2 ## E1; }; \</span></div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 1,2,2,-1> E1 ## E2 ## E2; }; \</span></div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 2,0,0,-1> E2 ## E0 ## E0; }; \</span></div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 2,0,1,-1> E2 ## E0 ## E1; }; \</span></div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 2,0,2,-1> E2 ## E0 ## E2; }; \</span></div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 2,1,0,-1> E2 ## E1 ## E0; }; \</span></div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 2,1,1,-1> E2 ## E1 ## E1; }; \</span></div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 2,1,2,-1> E2 ## E1 ## E2; }; \</span></div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 2,2,0,-1> E2 ## E2 ## E0; }; \</span></div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 2,2,1,-1> E2 ## E2 ## E1; }; \</span></div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 2,2,2,-1> E2 ## E2 ## E2; };</span></div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> </div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> <span class="preprocessor">#define _GLM_SWIZZLE3_4_MEMBERS(T, P, V, E0,E1,E2) \</span></div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \</span></div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \</span></div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 0,0,0,2> E0 ## E0 ## E0 ## E2; }; \</span></div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \</span></div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \</span></div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 0,0,1,2> E0 ## E0 ## E1 ## E2; }; \</span></div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 0,0,2,0> E0 ## E0 ## E2 ## E0; }; \</span></div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 0,0,2,1> E0 ## E0 ## E2 ## E1; }; \</span></div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 0,0,2,2> E0 ## E0 ## E2 ## E2; }; \</span></div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \</span></div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \</span></div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 0,1,0,2> E0 ## E1 ## E0 ## E2; }; \</span></div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \</span></div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \</span></div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 0,1,1,2> E0 ## E1 ## E1 ## E2; }; \</span></div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 0,1,2,0> E0 ## E1 ## E2 ## E0; }; \</span></div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 0,1,2,1> E0 ## E1 ## E2 ## E1; }; \</span></div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 0,1,2,2> E0 ## E1 ## E2 ## E2; }; \</span></div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 0,2,0,0> E0 ## E2 ## E0 ## E0; }; \</span></div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 0,2,0,1> E0 ## E2 ## E0 ## E1; }; \</span></div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 0,2,0,2> E0 ## E2 ## E0 ## E2; }; \</span></div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 0,2,1,0> E0 ## E2 ## E1 ## E0; }; \</span></div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 0,2,1,1> E0 ## E2 ## E1 ## E1; }; \</span></div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 0,2,1,2> E0 ## E2 ## E1 ## E2; }; \</span></div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 0,2,2,0> E0 ## E2 ## E2 ## E0; }; \</span></div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 0,2,2,1> E0 ## E2 ## E2 ## E1; }; \</span></div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 0,2,2,2> E0 ## E2 ## E2 ## E2; }; \</span></div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \</span></div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \</span></div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 1,0,0,2> E1 ## E0 ## E0 ## E2; }; \</span></div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \</span></div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \</span></div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 1,0,1,2> E1 ## E0 ## E1 ## E2; }; \</span></div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 1,0,2,0> E1 ## E0 ## E2 ## E0; }; \</span></div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 1,0,2,1> E1 ## E0 ## E2 ## E1; }; \</span></div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 1,0,2,2> E1 ## E0 ## E2 ## E2; }; \</span></div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \</span></div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \</span></div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 1,1,0,2> E1 ## E1 ## E0 ## E2; }; \</span></div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \</span></div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 1,1,1,1> E1 ## E1 ## E1 ## E1; }; \</span></div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 1,1,1,2> E1 ## E1 ## E1 ## E2; }; \</span></div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 1,1,2,0> E1 ## E1 ## E2 ## E0; }; \</span></div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 1,1,2,1> E1 ## E1 ## E2 ## E1; }; \</span></div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 1,1,2,2> E1 ## E1 ## E2 ## E2; }; \</span></div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 1,2,0,0> E1 ## E2 ## E0 ## E0; }; \</span></div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 1,2,0,1> E1 ## E2 ## E0 ## E1; }; \</span></div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 1,2,0,2> E1 ## E2 ## E0 ## E2; }; \</span></div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 1,2,1,0> E1 ## E2 ## E1 ## E0; }; \</span></div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 1,2,1,1> E1 ## E2 ## E1 ## E1; }; \</span></div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 1,2,1,2> E1 ## E2 ## E1 ## E2; }; \</span></div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 1,2,2,0> E1 ## E2 ## E2 ## E0; }; \</span></div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 1,2,2,1> E1 ## E2 ## E2 ## E1; }; \</span></div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 1,2,2,2> E1 ## E2 ## E2 ## E2; }; \</span></div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 2,0,0,0> E2 ## E0 ## E0 ## E0; }; \</span></div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 2,0,0,1> E2 ## E0 ## E0 ## E1; }; \</span></div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 2,0,0,2> E2 ## E0 ## E0 ## E2; }; \</span></div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 2,0,1,0> E2 ## E0 ## E1 ## E0; }; \</span></div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 2,0,1,1> E2 ## E0 ## E1 ## E1; }; \</span></div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 2,0,1,2> E2 ## E0 ## E1 ## E2; }; \</span></div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 2,0,2,0> E2 ## E0 ## E2 ## E0; }; \</span></div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 2,0,2,1> E2 ## E0 ## E2 ## E1; }; \</span></div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 2,0,2,2> E2 ## E0 ## E2 ## E2; }; \</span></div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 2,1,0,0> E2 ## E1 ## E0 ## E0; }; \</span></div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 2,1,0,1> E2 ## E1 ## E0 ## E1; }; \</span></div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 2,1,0,2> E2 ## E1 ## E0 ## E2; }; \</span></div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 2,1,1,0> E2 ## E1 ## E1 ## E0; }; \</span></div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 2,1,1,1> E2 ## E1 ## E1 ## E1; }; \</span></div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 2,1,1,2> E2 ## E1 ## E1 ## E2; }; \</span></div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 2,1,2,0> E2 ## E1 ## E2 ## E0; }; \</span></div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 2,1,2,1> E2 ## E1 ## E2 ## E1; }; \</span></div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 2,1,2,2> E2 ## E1 ## E2 ## E2; }; \</span></div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 2,2,0,0> E2 ## E2 ## E0 ## E0; }; \</span></div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 2,2,0,1> E2 ## E2 ## E0 ## E1; }; \</span></div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 2,2,0,2> E2 ## E2 ## E0 ## E2; }; \</span></div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 2,2,1,0> E2 ## E2 ## E1 ## E0; }; \</span></div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 2,2,1,1> E2 ## E2 ## E1 ## E1; }; \</span></div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 2,2,1,2> E2 ## E2 ## E1 ## E2; }; \</span></div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 2,2,2,0> E2 ## E2 ## E2 ## E0; }; \</span></div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 2,2,2,1> E2 ## E2 ## E2 ## E1; }; \</span></div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, P, V, 2,2,2,2> E2 ## E2 ## E2 ## E2; }; </span></div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> </div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> <span class="preprocessor">#define _GLM_SWIZZLE4_2_MEMBERS(T, P, V, E0,E1,E2,E3) \</span></div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> <span class="preprocessor"> struct { detail::_swizzle<2,T, P, V, 0,0,-1,-2> E0 ## E0; }; \</span></div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> <span class="preprocessor"> struct { detail::_swizzle<2,T, P, V, 0,1,-1,-2> E0 ## E1; }; \</span></div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> <span class="preprocessor"> struct { detail::_swizzle<2,T, P, V, 0,2,-1,-2> E0 ## E2; }; \</span></div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> <span class="preprocessor"> struct { detail::_swizzle<2,T, P, V, 0,3,-1,-2> E0 ## E3; }; \</span></div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> <span class="preprocessor"> struct { detail::_swizzle<2,T, P, V, 1,0,-1,-2> E1 ## E0; }; \</span></div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> <span class="preprocessor"> struct { detail::_swizzle<2,T, P, V, 1,1,-1,-2> E1 ## E1; }; \</span></div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> <span class="preprocessor"> struct { detail::_swizzle<2,T, P, V, 1,2,-1,-2> E1 ## E2; }; \</span></div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> <span class="preprocessor"> struct { detail::_swizzle<2,T, P, V, 1,3,-1,-2> E1 ## E3; }; \</span></div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> <span class="preprocessor"> struct { detail::_swizzle<2,T, P, V, 2,0,-1,-2> E2 ## E0; }; \</span></div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> <span class="preprocessor"> struct { detail::_swizzle<2,T, P, V, 2,1,-1,-2> E2 ## E1; }; \</span></div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> <span class="preprocessor"> struct { detail::_swizzle<2,T, P, V, 2,2,-1,-2> E2 ## E2; }; \</span></div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> <span class="preprocessor"> struct { detail::_swizzle<2,T, P, V, 2,3,-1,-2> E2 ## E3; }; \</span></div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> <span class="preprocessor"> struct { detail::_swizzle<2,T, P, V, 3,0,-1,-2> E3 ## E0; }; \</span></div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> <span class="preprocessor"> struct { detail::_swizzle<2,T, P, V, 3,1,-1,-2> E3 ## E1; }; \</span></div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> <span class="preprocessor"> struct { detail::_swizzle<2,T, P, V, 3,2,-1,-2> E3 ## E2; }; \</span></div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <span class="preprocessor"> struct { detail::_swizzle<2,T, P, V, 3,3,-1,-2> E3 ## E3; }; </span></div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> </div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> <span class="preprocessor">#define _GLM_SWIZZLE4_3_MEMBERS(T, P, V, E0,E1,E2,E3) \</span></div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 0,0,0,-1> E0 ## E0 ## E0; }; \</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 0,0,1,-1> E0 ## E0 ## E1; }; \</span></div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 0,0,2,-1> E0 ## E0 ## E2; }; \</span></div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 0,0,3,-1> E0 ## E0 ## E3; }; \</span></div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 0,1,0,-1> E0 ## E1 ## E0; }; \</span></div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 0,1,1,-1> E0 ## E1 ## E1; }; \</span></div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 0,1,2,-1> E0 ## E1 ## E2; }; \</span></div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 0,1,3,-1> E0 ## E1 ## E3; }; \</span></div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 0,2,0,-1> E0 ## E2 ## E0; }; \</span></div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 0,2,1,-1> E0 ## E2 ## E1; }; \</span></div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 0,2,2,-1> E0 ## E2 ## E2; }; \</span></div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 0,2,3,-1> E0 ## E2 ## E3; }; \</span></div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 0,3,0,-1> E0 ## E3 ## E0; }; \</span></div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 0,3,1,-1> E0 ## E3 ## E1; }; \</span></div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 0,3,2,-1> E0 ## E3 ## E2; }; \</span></div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 0,3,3,-1> E0 ## E3 ## E3; }; \</span></div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 1,0,0,-1> E1 ## E0 ## E0; }; \</span></div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 1,0,1,-1> E1 ## E0 ## E1; }; \</span></div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 1,0,2,-1> E1 ## E0 ## E2; }; \</span></div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 1,0,3,-1> E1 ## E0 ## E3; }; \</span></div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 1,1,0,-1> E1 ## E1 ## E0; }; \</span></div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 1,1,1,-1> E1 ## E1 ## E1; }; \</span></div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 1,1,2,-1> E1 ## E1 ## E2; }; \</span></div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 1,1,3,-1> E1 ## E1 ## E3; }; \</span></div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 1,2,0,-1> E1 ## E2 ## E0; }; \</span></div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 1,2,1,-1> E1 ## E2 ## E1; }; \</span></div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 1,2,2,-1> E1 ## E2 ## E2; }; \</span></div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 1,2,3,-1> E1 ## E2 ## E3; }; \</span></div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 1,3,0,-1> E1 ## E3 ## E0; }; \</span></div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 1,3,1,-1> E1 ## E3 ## E1; }; \</span></div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 1,3,2,-1> E1 ## E3 ## E2; }; \</span></div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 1,3,3,-1> E1 ## E3 ## E3; }; \</span></div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 2,0,0,-1> E2 ## E0 ## E0; }; \</span></div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 2,0,1,-1> E2 ## E0 ## E1; }; \</span></div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 2,0,2,-1> E2 ## E0 ## E2; }; \</span></div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 2,0,3,-1> E2 ## E0 ## E3; }; \</span></div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 2,1,0,-1> E2 ## E1 ## E0; }; \</span></div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 2,1,1,-1> E2 ## E1 ## E1; }; \</span></div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 2,1,2,-1> E2 ## E1 ## E2; }; \</span></div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 2,1,3,-1> E2 ## E1 ## E3; }; \</span></div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 2,2,0,-1> E2 ## E2 ## E0; }; \</span></div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 2,2,1,-1> E2 ## E2 ## E1; }; \</span></div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 2,2,2,-1> E2 ## E2 ## E2; }; \</span></div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 2,2,3,-1> E2 ## E2 ## E3; }; \</span></div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 2,3,0,-1> E2 ## E3 ## E0; }; \</span></div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 2,3,1,-1> E2 ## E3 ## E1; }; \</span></div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 2,3,2,-1> E2 ## E3 ## E2; }; \</span></div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 2,3,3,-1> E2 ## E3 ## E3; }; \</span></div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 3,0,0,-1> E3 ## E0 ## E0; }; \</span></div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 3,0,1,-1> E3 ## E0 ## E1; }; \</span></div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 3,0,2,-1> E3 ## E0 ## E2; }; \</span></div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 3,0,3,-1> E3 ## E0 ## E3; }; \</span></div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 3,1,0,-1> E3 ## E1 ## E0; }; \</span></div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 3,1,1,-1> E3 ## E1 ## E1; }; \</span></div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 3,1,2,-1> E3 ## E1 ## E2; }; \</span></div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 3,1,3,-1> E3 ## E1 ## E3; }; \</span></div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 3,2,0,-1> E3 ## E2 ## E0; }; \</span></div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 3,2,1,-1> E3 ## E2 ## E1; }; \</span></div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 3,2,2,-1> E3 ## E2 ## E2; }; \</span></div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 3,2,3,-1> E3 ## E2 ## E3; }; \</span></div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 3,3,0,-1> E3 ## E3 ## E0; }; \</span></div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 3,3,1,-1> E3 ## E3 ## E1; }; \</span></div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 3,3,2,-1> E3 ## E3 ## E2; }; \</span></div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, P, V, 3,3,3,-1> E3 ## E3 ## E3; }; </span></div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> </div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> <span class="preprocessor">#define _GLM_SWIZZLE4_4_MEMBERS(T, P, V, E0,E1,E2,E3) \</span></div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \</span></div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \</span></div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,0,0,2> E0 ## E0 ## E0 ## E2; }; \</span></div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,0,0,3> E0 ## E0 ## E0 ## E3; }; \</span></div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \</span></div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \</span></div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,0,1,2> E0 ## E0 ## E1 ## E2; }; \</span></div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,0,1,3> E0 ## E0 ## E1 ## E3; }; \</span></div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,0,2,0> E0 ## E0 ## E2 ## E0; }; \</span></div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,0,2,1> E0 ## E0 ## E2 ## E1; }; \</span></div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,0,2,2> E0 ## E0 ## E2 ## E2; }; \</span></div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,0,2,3> E0 ## E0 ## E2 ## E3; }; \</span></div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,0,3,0> E0 ## E0 ## E3 ## E0; }; \</span></div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,0,3,1> E0 ## E0 ## E3 ## E1; }; \</span></div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,0,3,2> E0 ## E0 ## E3 ## E2; }; \</span></div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,0,3,3> E0 ## E0 ## E3 ## E3; }; \</span></div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \</span></div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \</span></div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,1,0,2> E0 ## E1 ## E0 ## E2; }; \</span></div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,1,0,3> E0 ## E1 ## E0 ## E3; }; \</span></div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \</span></div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \</span></div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,1,1,2> E0 ## E1 ## E1 ## E2; }; \</span></div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,1,1,3> E0 ## E1 ## E1 ## E3; }; \</span></div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,1,2,0> E0 ## E1 ## E2 ## E0; }; \</span></div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,1,2,1> E0 ## E1 ## E2 ## E1; }; \</span></div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,1,2,2> E0 ## E1 ## E2 ## E2; }; \</span></div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,1,2,3> E0 ## E1 ## E2 ## E3; }; \</span></div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,1,3,0> E0 ## E1 ## E3 ## E0; }; \</span></div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,1,3,1> E0 ## E1 ## E3 ## E1; }; \</span></div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,1,3,2> E0 ## E1 ## E3 ## E2; }; \</span></div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,1,3,3> E0 ## E1 ## E3 ## E3; }; \</span></div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,2,0,0> E0 ## E2 ## E0 ## E0; }; \</span></div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,2,0,1> E0 ## E2 ## E0 ## E1; }; \</span></div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,2,0,2> E0 ## E2 ## E0 ## E2; }; \</span></div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,2,0,3> E0 ## E2 ## E0 ## E3; }; \</span></div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,2,1,0> E0 ## E2 ## E1 ## E0; }; \</span></div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,2,1,1> E0 ## E2 ## E1 ## E1; }; \</span></div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,2,1,2> E0 ## E2 ## E1 ## E2; }; \</span></div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,2,1,3> E0 ## E2 ## E1 ## E3; }; \</span></div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,2,2,0> E0 ## E2 ## E2 ## E0; }; \</span></div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,2,2,1> E0 ## E2 ## E2 ## E1; }; \</span></div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,2,2,2> E0 ## E2 ## E2 ## E2; }; \</span></div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,2,2,3> E0 ## E2 ## E2 ## E3; }; \</span></div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,2,3,0> E0 ## E2 ## E3 ## E0; }; \</span></div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,2,3,1> E0 ## E2 ## E3 ## E1; }; \</span></div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,2,3,2> E0 ## E2 ## E3 ## E2; }; \</span></div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,2,3,3> E0 ## E2 ## E3 ## E3; }; \</span></div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,3,0,0> E0 ## E3 ## E0 ## E0; }; \</span></div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,3,0,1> E0 ## E3 ## E0 ## E1; }; \</span></div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,3,0,2> E0 ## E3 ## E0 ## E2; }; \</span></div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,3,0,3> E0 ## E3 ## E0 ## E3; }; \</span></div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,3,1,0> E0 ## E3 ## E1 ## E0; }; \</span></div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,3,1,1> E0 ## E3 ## E1 ## E1; }; \</span></div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,3,1,2> E0 ## E3 ## E1 ## E2; }; \</span></div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,3,1,3> E0 ## E3 ## E1 ## E3; }; \</span></div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,3,2,0> E0 ## E3 ## E2 ## E0; }; \</span></div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,3,2,1> E0 ## E3 ## E2 ## E1; }; \</span></div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,3,2,2> E0 ## E3 ## E2 ## E2; }; \</span></div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,3,2,3> E0 ## E3 ## E2 ## E3; }; \</span></div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,3,3,0> E0 ## E3 ## E3 ## E0; }; \</span></div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,3,3,1> E0 ## E3 ## E3 ## E1; }; \</span></div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,3,3,2> E0 ## E3 ## E3 ## E2; }; \</span></div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 0,3,3,3> E0 ## E3 ## E3 ## E3; }; \</span></div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \</span></div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \</span></div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,0,0,2> E1 ## E0 ## E0 ## E2; }; \</span></div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,0,0,3> E1 ## E0 ## E0 ## E3; }; \</span></div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \</span></div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \</span></div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,0,1,2> E1 ## E0 ## E1 ## E2; }; \</span></div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,0,1,3> E1 ## E0 ## E1 ## E3; }; \</span></div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,0,2,0> E1 ## E0 ## E2 ## E0; }; \</span></div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,0,2,1> E1 ## E0 ## E2 ## E1; }; \</span></div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,0,2,2> E1 ## E0 ## E2 ## E2; }; \</span></div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,0,2,3> E1 ## E0 ## E2 ## E3; }; \</span></div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,0,3,0> E1 ## E0 ## E3 ## E0; }; \</span></div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,0,3,1> E1 ## E0 ## E3 ## E1; }; \</span></div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,0,3,2> E1 ## E0 ## E3 ## E2; }; \</span></div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,0,3,3> E1 ## E0 ## E3 ## E3; }; \</span></div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \</span></div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \</span></div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,1,0,2> E1 ## E1 ## E0 ## E2; }; \</span></div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,1,0,3> E1 ## E1 ## E0 ## E3; }; \</span></div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \</span></div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,1,1,1> E1 ## E1 ## E1 ## E1; }; \</span></div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,1,1,2> E1 ## E1 ## E1 ## E2; }; \</span></div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,1,1,3> E1 ## E1 ## E1 ## E3; }; \</span></div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,1,2,0> E1 ## E1 ## E2 ## E0; }; \</span></div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,1,2,1> E1 ## E1 ## E2 ## E1; }; \</span></div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,1,2,2> E1 ## E1 ## E2 ## E2; }; \</span></div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,1,2,3> E1 ## E1 ## E2 ## E3; }; \</span></div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,1,3,0> E1 ## E1 ## E3 ## E0; }; \</span></div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,1,3,1> E1 ## E1 ## E3 ## E1; }; \</span></div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,1,3,2> E1 ## E1 ## E3 ## E2; }; \</span></div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,1,3,3> E1 ## E1 ## E3 ## E3; }; \</span></div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,2,0,0> E1 ## E2 ## E0 ## E0; }; \</span></div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,2,0,1> E1 ## E2 ## E0 ## E1; }; \</span></div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,2,0,2> E1 ## E2 ## E0 ## E2; }; \</span></div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,2,0,3> E1 ## E2 ## E0 ## E3; }; \</span></div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,2,1,0> E1 ## E2 ## E1 ## E0; }; \</span></div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,2,1,1> E1 ## E2 ## E1 ## E1; }; \</span></div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,2,1,2> E1 ## E2 ## E1 ## E2; }; \</span></div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,2,1,3> E1 ## E2 ## E1 ## E3; }; \</span></div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,2,2,0> E1 ## E2 ## E2 ## E0; }; \</span></div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,2,2,1> E1 ## E2 ## E2 ## E1; }; \</span></div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,2,2,2> E1 ## E2 ## E2 ## E2; }; \</span></div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,2,2,3> E1 ## E2 ## E2 ## E3; }; \</span></div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,2,3,0> E1 ## E2 ## E3 ## E0; }; \</span></div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,2,3,1> E1 ## E2 ## E3 ## E1; }; \</span></div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,2,3,2> E1 ## E2 ## E3 ## E2; }; \</span></div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,2,3,3> E1 ## E2 ## E3 ## E3; }; \</span></div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,3,0,0> E1 ## E3 ## E0 ## E0; }; \</span></div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,3,0,1> E1 ## E3 ## E0 ## E1; }; \</span></div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,3,0,2> E1 ## E3 ## E0 ## E2; }; \</span></div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,3,0,3> E1 ## E3 ## E0 ## E3; }; \</span></div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,3,1,0> E1 ## E3 ## E1 ## E0; }; \</span></div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,3,1,1> E1 ## E3 ## E1 ## E1; }; \</span></div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,3,1,2> E1 ## E3 ## E1 ## E2; }; \</span></div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,3,1,3> E1 ## E3 ## E1 ## E3; }; \</span></div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,3,2,0> E1 ## E3 ## E2 ## E0; }; \</span></div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,3,2,1> E1 ## E3 ## E2 ## E1; }; \</span></div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,3,2,2> E1 ## E3 ## E2 ## E2; }; \</span></div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,3,2,3> E1 ## E3 ## E2 ## E3; }; \</span></div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,3,3,0> E1 ## E3 ## E3 ## E0; }; \</span></div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,3,3,1> E1 ## E3 ## E3 ## E1; }; \</span></div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,3,3,2> E1 ## E3 ## E3 ## E2; }; \</span></div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 1,3,3,3> E1 ## E3 ## E3 ## E3; }; \</span></div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,0,0,0> E2 ## E0 ## E0 ## E0; }; \</span></div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,0,0,1> E2 ## E0 ## E0 ## E1; }; \</span></div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,0,0,2> E2 ## E0 ## E0 ## E2; }; \</span></div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,0,0,3> E2 ## E0 ## E0 ## E3; }; \</span></div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,0,1,0> E2 ## E0 ## E1 ## E0; }; \</span></div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,0,1,1> E2 ## E0 ## E1 ## E1; }; \</span></div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,0,1,2> E2 ## E0 ## E1 ## E2; }; \</span></div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,0,1,3> E2 ## E0 ## E1 ## E3; }; \</span></div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,0,2,0> E2 ## E0 ## E2 ## E0; }; \</span></div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,0,2,1> E2 ## E0 ## E2 ## E1; }; \</span></div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,0,2,2> E2 ## E0 ## E2 ## E2; }; \</span></div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,0,2,3> E2 ## E0 ## E2 ## E3; }; \</span></div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,0,3,0> E2 ## E0 ## E3 ## E0; }; \</span></div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,0,3,1> E2 ## E0 ## E3 ## E1; }; \</span></div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,0,3,2> E2 ## E0 ## E3 ## E2; }; \</span></div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,0,3,3> E2 ## E0 ## E3 ## E3; }; \</span></div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,1,0,0> E2 ## E1 ## E0 ## E0; }; \</span></div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,1,0,1> E2 ## E1 ## E0 ## E1; }; \</span></div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,1,0,2> E2 ## E1 ## E0 ## E2; }; \</span></div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,1,0,3> E2 ## E1 ## E0 ## E3; }; \</span></div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,1,1,0> E2 ## E1 ## E1 ## E0; }; \</span></div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,1,1,1> E2 ## E1 ## E1 ## E1; }; \</span></div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,1,1,2> E2 ## E1 ## E1 ## E2; }; \</span></div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,1,1,3> E2 ## E1 ## E1 ## E3; }; \</span></div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,1,2,0> E2 ## E1 ## E2 ## E0; }; \</span></div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,1,2,1> E2 ## E1 ## E2 ## E1; }; \</span></div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,1,2,2> E2 ## E1 ## E2 ## E2; }; \</span></div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,1,2,3> E2 ## E1 ## E2 ## E3; }; \</span></div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,1,3,0> E2 ## E1 ## E3 ## E0; }; \</span></div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,1,3,1> E2 ## E1 ## E3 ## E1; }; \</span></div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,1,3,2> E2 ## E1 ## E3 ## E2; }; \</span></div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,1,3,3> E2 ## E1 ## E3 ## E3; }; \</span></div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,2,0,0> E2 ## E2 ## E0 ## E0; }; \</span></div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,2,0,1> E2 ## E2 ## E0 ## E1; }; \</span></div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,2,0,2> E2 ## E2 ## E0 ## E2; }; \</span></div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,2,0,3> E2 ## E2 ## E0 ## E3; }; \</span></div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,2,1,0> E2 ## E2 ## E1 ## E0; }; \</span></div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,2,1,1> E2 ## E2 ## E1 ## E1; }; \</span></div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,2,1,2> E2 ## E2 ## E1 ## E2; }; \</span></div>
+<div class="line"><a name="l00709"></a><span class="lineno"> 709</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,2,1,3> E2 ## E2 ## E1 ## E3; }; \</span></div>
+<div class="line"><a name="l00710"></a><span class="lineno"> 710</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,2,2,0> E2 ## E2 ## E2 ## E0; }; \</span></div>
+<div class="line"><a name="l00711"></a><span class="lineno"> 711</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,2,2,1> E2 ## E2 ## E2 ## E1; }; \</span></div>
+<div class="line"><a name="l00712"></a><span class="lineno"> 712</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,2,2,2> E2 ## E2 ## E2 ## E2; }; \</span></div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,2,2,3> E2 ## E2 ## E2 ## E3; }; \</span></div>
+<div class="line"><a name="l00714"></a><span class="lineno"> 714</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,2,3,0> E2 ## E2 ## E3 ## E0; }; \</span></div>
+<div class="line"><a name="l00715"></a><span class="lineno"> 715</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,2,3,1> E2 ## E2 ## E3 ## E1; }; \</span></div>
+<div class="line"><a name="l00716"></a><span class="lineno"> 716</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,2,3,2> E2 ## E2 ## E3 ## E2; }; \</span></div>
+<div class="line"><a name="l00717"></a><span class="lineno"> 717</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,2,3,3> E2 ## E2 ## E3 ## E3; }; \</span></div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,3,0,0> E2 ## E3 ## E0 ## E0; }; \</span></div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,3,0,1> E2 ## E3 ## E0 ## E1; }; \</span></div>
+<div class="line"><a name="l00720"></a><span class="lineno"> 720</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,3,0,2> E2 ## E3 ## E0 ## E2; }; \</span></div>
+<div class="line"><a name="l00721"></a><span class="lineno"> 721</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,3,0,3> E2 ## E3 ## E0 ## E3; }; \</span></div>
+<div class="line"><a name="l00722"></a><span class="lineno"> 722</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,3,1,0> E2 ## E3 ## E1 ## E0; }; \</span></div>
+<div class="line"><a name="l00723"></a><span class="lineno"> 723</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,3,1,1> E2 ## E3 ## E1 ## E1; }; \</span></div>
+<div class="line"><a name="l00724"></a><span class="lineno"> 724</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,3,1,2> E2 ## E3 ## E1 ## E2; }; \</span></div>
+<div class="line"><a name="l00725"></a><span class="lineno"> 725</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,3,1,3> E2 ## E3 ## E1 ## E3; }; \</span></div>
+<div class="line"><a name="l00726"></a><span class="lineno"> 726</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,3,2,0> E2 ## E3 ## E2 ## E0; }; \</span></div>
+<div class="line"><a name="l00727"></a><span class="lineno"> 727</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,3,2,1> E2 ## E3 ## E2 ## E1; }; \</span></div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,3,2,2> E2 ## E3 ## E2 ## E2; }; \</span></div>
+<div class="line"><a name="l00729"></a><span class="lineno"> 729</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,3,2,3> E2 ## E3 ## E2 ## E3; }; \</span></div>
+<div class="line"><a name="l00730"></a><span class="lineno"> 730</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,3,3,0> E2 ## E3 ## E3 ## E0; }; \</span></div>
+<div class="line"><a name="l00731"></a><span class="lineno"> 731</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,3,3,1> E2 ## E3 ## E3 ## E1; }; \</span></div>
+<div class="line"><a name="l00732"></a><span class="lineno"> 732</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,3,3,2> E2 ## E3 ## E3 ## E2; }; \</span></div>
+<div class="line"><a name="l00733"></a><span class="lineno"> 733</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 2,3,3,3> E2 ## E3 ## E3 ## E3; }; \</span></div>
+<div class="line"><a name="l00734"></a><span class="lineno"> 734</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,0,0,0> E3 ## E0 ## E0 ## E0; }; \</span></div>
+<div class="line"><a name="l00735"></a><span class="lineno"> 735</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,0,0,1> E3 ## E0 ## E0 ## E1; }; \</span></div>
+<div class="line"><a name="l00736"></a><span class="lineno"> 736</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,0,0,2> E3 ## E0 ## E0 ## E2; }; \</span></div>
+<div class="line"><a name="l00737"></a><span class="lineno"> 737</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,0,0,3> E3 ## E0 ## E0 ## E3; }; \</span></div>
+<div class="line"><a name="l00738"></a><span class="lineno"> 738</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,0,1,0> E3 ## E0 ## E1 ## E0; }; \</span></div>
+<div class="line"><a name="l00739"></a><span class="lineno"> 739</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,0,1,1> E3 ## E0 ## E1 ## E1; }; \</span></div>
+<div class="line"><a name="l00740"></a><span class="lineno"> 740</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,0,1,2> E3 ## E0 ## E1 ## E2; }; \</span></div>
+<div class="line"><a name="l00741"></a><span class="lineno"> 741</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,0,1,3> E3 ## E0 ## E1 ## E3; }; \</span></div>
+<div class="line"><a name="l00742"></a><span class="lineno"> 742</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,0,2,0> E3 ## E0 ## E2 ## E0; }; \</span></div>
+<div class="line"><a name="l00743"></a><span class="lineno"> 743</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,0,2,1> E3 ## E0 ## E2 ## E1; }; \</span></div>
+<div class="line"><a name="l00744"></a><span class="lineno"> 744</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,0,2,2> E3 ## E0 ## E2 ## E2; }; \</span></div>
+<div class="line"><a name="l00745"></a><span class="lineno"> 745</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,0,2,3> E3 ## E0 ## E2 ## E3; }; \</span></div>
+<div class="line"><a name="l00746"></a><span class="lineno"> 746</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,0,3,0> E3 ## E0 ## E3 ## E0; }; \</span></div>
+<div class="line"><a name="l00747"></a><span class="lineno"> 747</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,0,3,1> E3 ## E0 ## E3 ## E1; }; \</span></div>
+<div class="line"><a name="l00748"></a><span class="lineno"> 748</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,0,3,2> E3 ## E0 ## E3 ## E2; }; \</span></div>
+<div class="line"><a name="l00749"></a><span class="lineno"> 749</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,0,3,3> E3 ## E0 ## E3 ## E3; }; \</span></div>
+<div class="line"><a name="l00750"></a><span class="lineno"> 750</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,1,0,0> E3 ## E1 ## E0 ## E0; }; \</span></div>
+<div class="line"><a name="l00751"></a><span class="lineno"> 751</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,1,0,1> E3 ## E1 ## E0 ## E1; }; \</span></div>
+<div class="line"><a name="l00752"></a><span class="lineno"> 752</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,1,0,2> E3 ## E1 ## E0 ## E2; }; \</span></div>
+<div class="line"><a name="l00753"></a><span class="lineno"> 753</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,1,0,3> E3 ## E1 ## E0 ## E3; }; \</span></div>
+<div class="line"><a name="l00754"></a><span class="lineno"> 754</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,1,1,0> E3 ## E1 ## E1 ## E0; }; \</span></div>
+<div class="line"><a name="l00755"></a><span class="lineno"> 755</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,1,1,1> E3 ## E1 ## E1 ## E1; }; \</span></div>
+<div class="line"><a name="l00756"></a><span class="lineno"> 756</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,1,1,2> E3 ## E1 ## E1 ## E2; }; \</span></div>
+<div class="line"><a name="l00757"></a><span class="lineno"> 757</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,1,1,3> E3 ## E1 ## E1 ## E3; }; \</span></div>
+<div class="line"><a name="l00758"></a><span class="lineno"> 758</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,1,2,0> E3 ## E1 ## E2 ## E0; }; \</span></div>
+<div class="line"><a name="l00759"></a><span class="lineno"> 759</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,1,2,1> E3 ## E1 ## E2 ## E1; }; \</span></div>
+<div class="line"><a name="l00760"></a><span class="lineno"> 760</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,1,2,2> E3 ## E1 ## E2 ## E2; }; \</span></div>
+<div class="line"><a name="l00761"></a><span class="lineno"> 761</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,1,2,3> E3 ## E1 ## E2 ## E3; }; \</span></div>
+<div class="line"><a name="l00762"></a><span class="lineno"> 762</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,1,3,0> E3 ## E1 ## E3 ## E0; }; \</span></div>
+<div class="line"><a name="l00763"></a><span class="lineno"> 763</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,1,3,1> E3 ## E1 ## E3 ## E1; }; \</span></div>
+<div class="line"><a name="l00764"></a><span class="lineno"> 764</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,1,3,2> E3 ## E1 ## E3 ## E2; }; \</span></div>
+<div class="line"><a name="l00765"></a><span class="lineno"> 765</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,1,3,3> E3 ## E1 ## E3 ## E3; }; \</span></div>
+<div class="line"><a name="l00766"></a><span class="lineno"> 766</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,2,0,0> E3 ## E2 ## E0 ## E0; }; \</span></div>
+<div class="line"><a name="l00767"></a><span class="lineno"> 767</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,2,0,1> E3 ## E2 ## E0 ## E1; }; \</span></div>
+<div class="line"><a name="l00768"></a><span class="lineno"> 768</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,2,0,2> E3 ## E2 ## E0 ## E2; }; \</span></div>
+<div class="line"><a name="l00769"></a><span class="lineno"> 769</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,2,0,3> E3 ## E2 ## E0 ## E3; }; \</span></div>
+<div class="line"><a name="l00770"></a><span class="lineno"> 770</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,2,1,0> E3 ## E2 ## E1 ## E0; }; \</span></div>
+<div class="line"><a name="l00771"></a><span class="lineno"> 771</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,2,1,1> E3 ## E2 ## E1 ## E1; }; \</span></div>
+<div class="line"><a name="l00772"></a><span class="lineno"> 772</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,2,1,2> E3 ## E2 ## E1 ## E2; }; \</span></div>
+<div class="line"><a name="l00773"></a><span class="lineno"> 773</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,2,1,3> E3 ## E2 ## E1 ## E3; }; \</span></div>
+<div class="line"><a name="l00774"></a><span class="lineno"> 774</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,2,2,0> E3 ## E2 ## E2 ## E0; }; \</span></div>
+<div class="line"><a name="l00775"></a><span class="lineno"> 775</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,2,2,1> E3 ## E2 ## E2 ## E1; }; \</span></div>
+<div class="line"><a name="l00776"></a><span class="lineno"> 776</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,2,2,2> E3 ## E2 ## E2 ## E2; }; \</span></div>
+<div class="line"><a name="l00777"></a><span class="lineno"> 777</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,2,2,3> E3 ## E2 ## E2 ## E3; }; \</span></div>
+<div class="line"><a name="l00778"></a><span class="lineno"> 778</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,2,3,0> E3 ## E2 ## E3 ## E0; }; \</span></div>
+<div class="line"><a name="l00779"></a><span class="lineno"> 779</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,2,3,1> E3 ## E2 ## E3 ## E1; }; \</span></div>
+<div class="line"><a name="l00780"></a><span class="lineno"> 780</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,2,3,2> E3 ## E2 ## E3 ## E2; }; \</span></div>
+<div class="line"><a name="l00781"></a><span class="lineno"> 781</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,2,3,3> E3 ## E2 ## E3 ## E3; }; \</span></div>
+<div class="line"><a name="l00782"></a><span class="lineno"> 782</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,3,0,0> E3 ## E3 ## E0 ## E0; }; \</span></div>
+<div class="line"><a name="l00783"></a><span class="lineno"> 783</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,3,0,1> E3 ## E3 ## E0 ## E1; }; \</span></div>
+<div class="line"><a name="l00784"></a><span class="lineno"> 784</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,3,0,2> E3 ## E3 ## E0 ## E2; }; \</span></div>
+<div class="line"><a name="l00785"></a><span class="lineno"> 785</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,3,0,3> E3 ## E3 ## E0 ## E3; }; \</span></div>
+<div class="line"><a name="l00786"></a><span class="lineno"> 786</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,3,1,0> E3 ## E3 ## E1 ## E0; }; \</span></div>
+<div class="line"><a name="l00787"></a><span class="lineno"> 787</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,3,1,1> E3 ## E3 ## E1 ## E1; }; \</span></div>
+<div class="line"><a name="l00788"></a><span class="lineno"> 788</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,3,1,2> E3 ## E3 ## E1 ## E2; }; \</span></div>
+<div class="line"><a name="l00789"></a><span class="lineno"> 789</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,3,1,3> E3 ## E3 ## E1 ## E3; }; \</span></div>
+<div class="line"><a name="l00790"></a><span class="lineno"> 790</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,3,2,0> E3 ## E3 ## E2 ## E0; }; \</span></div>
+<div class="line"><a name="l00791"></a><span class="lineno"> 791</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,3,2,1> E3 ## E3 ## E2 ## E1; }; \</span></div>
+<div class="line"><a name="l00792"></a><span class="lineno"> 792</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,3,2,2> E3 ## E3 ## E2 ## E2; }; \</span></div>
+<div class="line"><a name="l00793"></a><span class="lineno"> 793</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,3,2,3> E3 ## E3 ## E2 ## E3; }; \</span></div>
+<div class="line"><a name="l00794"></a><span class="lineno"> 794</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,3,3,0> E3 ## E3 ## E3 ## E0; }; \</span></div>
+<div class="line"><a name="l00795"></a><span class="lineno"> 795</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,3,3,1> E3 ## E3 ## E3 ## E1; }; \</span></div>
+<div class="line"><a name="l00796"></a><span class="lineno"> 796</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,3,3,2> E3 ## E3 ## E3 ## E2; }; \</span></div>
+<div class="line"><a name="l00797"></a><span class="lineno"> 797</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, P, V, 3,3,3,3> E3 ## E3 ## E3 ## E3; };</span></div>
+<div class="ttc" id="a00162_html_ga4b7956eb6e2fbedfc7cf2e46e85c5139"><div class="ttname"><a href="a00162.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139">glm::e</a></div><div class="ttdeci">GLM_FUNC_DECL GLM_CONSTEXPR genType e()</div><div class="ttdoc">Return e constant. </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00005.html b/src/third_party/glm/doc/api/a00005.html
new file mode 100644
index 0000000..05e12ab
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00005.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: _swizzle_func.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">_swizzle_func.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00005_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+
+<p>Definition in file <a class="el" href="a00005_source.html">_swizzle_func.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00005_source.html b/src/third_party/glm/doc/api/a00005_source.html
new file mode 100644
index 0000000..b8cf723
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00005_source.html
@@ -0,0 +1,754 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: _swizzle_func.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">_swizzle_func.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00005.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B) \</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor"> SWIZZLED_TYPE<TMPL_TYPE, PRECISION> A ## B() CONST \</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor"> return SWIZZLED_TYPE<TMPL_TYPE, PRECISION>(this->A, this->B); \</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor"> }</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> </div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C) \</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor"> SWIZZLED_TYPE<TMPL_TYPE, PRECISION> A ## B ## C() CONST \</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor"> return SWIZZLED_TYPE<TMPL_TYPE, PRECISION>(this->A, this->B, this->C); \</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor"> }</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C, D) \</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor"> SWIZZLED_TYPE<TMPL_TYPE, PRECISION> A ## B ## C ## D() CONST \</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor"> return SWIZZLED_TYPE<TMPL_TYPE, PRECISION>(this->A, this->B, this->C, this->D); \</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"> }</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_VEC2_ENTRY_DEF(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B) \</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor"> template <typename TMPL_TYPE> \</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor"> SWIZZLED_TYPE<TMPL_TYPE> CLASS_TYPE<TMPL_TYPE, PRECISION>::A ## B() CONST \</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor"> return SWIZZLED_TYPE<TMPL_TYPE, PRECISION>(this->A, this->B); \</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor"> }</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_VEC3_ENTRY_DEF(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C) \</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor"> template <typename TMPL_TYPE> \</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor"> SWIZZLED_TYPE<TMPL_TYPE> CLASS_TYPE<TMPL_TYPE, PRECISION>::A ## B ## C() CONST \</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor"> return SWIZZLED_TYPE<TMPL_TYPE, PRECISION>(this->A, this->B, this->C); \</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor"> }</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_VEC4_ENTRY_DEF(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C, D) \</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor"> template <typename TMPL_TYPE> \</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor"> SWIZZLED_TYPE<TMPL_TYPE> CLASS_TYPE<TMPL_TYPE, PRECISION>::A ## B ## C ## D() CONST \</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor"> { \</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor"> return SWIZZLED_TYPE<TMPL_TYPE, PRECISION>(this->A, this->B, this->C, this->D); \</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor"> }</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor">#define GLM_MUTABLE</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B) \</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B) \</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A)</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_REF_FROM_VEC2(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE) \</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, x, y) \</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, r, g) \</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, s, t)</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="comment">//GLM_SWIZZLE_GEN_REF_FROM_VEC2(valType, detail::vec2, detail::ref2)</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B) \</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, C) \</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A) \</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, C) \</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, A) \</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, B)</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B, C) \</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, C, B) \</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A, C) \</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, C, A) \</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, A, B) \</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, B, A)</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, A, B, C) \</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C) \</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C)</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_REF_FROM_VEC3(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE) \</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, x, y, z) \</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, r, g, b) \</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, s, t, p)</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="comment">//GLM_SWIZZLE_GEN_REF_FROM_VEC3(valType, detail::vec3, detail::ref2, detail::ref3)</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B) \</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, C) \</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, D) \</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A) \</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, C) \</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, D) \</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, A) \</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, B) \</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, D) \</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, D, A) \</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, D, B) \</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, D, C)</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, B, C) \</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, B, D) \</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, C, B) \</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, C, D) \</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, D, B) \</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, D, C) \</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, A, C) \</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, A, D) \</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, C, A) \</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, C, D) \</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, D, A) \</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, D, C) \</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, A, B) \</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, A, D) \</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, B, A) \</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, B, D) \</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, D, A) \</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, D, B) \</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, A, B) \</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, A, C) \</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, B, A) \</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, B, C) \</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, C, A) \</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, C, B)</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, C, B, D) \</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, C, D, B) \</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, D, B, C) \</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, D, C, B) \</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, B, D, C) \</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, B, C, D) \</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, C, A, D) \</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, C, D, A) \</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, D, A, C) \</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, D, C, A) \</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, A, D, C) \</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, A, C, D) \</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, B, A, D) \</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, B, D, A) \</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, D, A, B) \</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, D, B, A) \</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, A, D, B) \</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, A, B, D) \</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, C, B, A) \</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, C, A, B) \</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, A, B, C) \</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, A, C, B) \</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, B, A, C) \</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, B, C, A)</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D) \</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C, D) \</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C, D) \</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D)</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> </div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_REF_FROM_VEC4(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y, z, w) \</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g, b, a) \</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t, p, q)</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> </div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="comment">//GLM_SWIZZLE_GEN_REF_FROM_VEC4(valType, detail::vec4, detail::ref2, detail::ref3, detail::ref4)</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B) \</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A) \</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B) \</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A) \</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B)</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B) \</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A) \</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B) \</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A) \</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B) \</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A) \</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B) \</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A) \</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B)</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B) \</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, A) \</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, B) \</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, A) \</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, B) \</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, A) \</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, B) \</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, A) \</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, B) \</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, A) \</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, B) \</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, A) \</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, B) \</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, A) \</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, B) \</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, A) \</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, B)</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B) \</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B) \</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B) \</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B)</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_VEC_FROM_VEC2(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y) \</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g) \</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t)</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="comment">//GLM_SWIZZLE_GEN_VEC_FROM_VEC2(valType, detail::vec2, detail::vec2, detail::vec3, detail::vec4)</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A) \</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B) \</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C) \</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A) \</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B) \</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C) \</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A) \</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B) \</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C)</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A) \</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B) \</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C) \</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A) \</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B) \</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C) \</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A) \</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B) \</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C) \</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A) \</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B) \</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C) \</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A) \</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B) \</span></div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C) \</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A) \</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B) \</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C) \</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A) \</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B) \</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C) \</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A) \</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B) \</span></div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C) \</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A) \</span></div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B) \</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C)</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> </div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, A) \</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, B) \</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, C) \</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, A) \</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, B) \</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, C) \</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, A) \</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, B) \</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, C) \</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, A) \</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, B) \</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, C) \</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, A) \</span></div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, B) \</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, C) \</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, A) \</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, B) \</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, C) \</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, A) \</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, B) \</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, C) \</span></div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, A) \</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, B) \</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, C) \</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, A) \</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, B) \</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, C) \</span></div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, A) \</span></div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, B) \</span></div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, C) \</span></div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, A) \</span></div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, B) \</span></div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, C) \</span></div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, A) \</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, B) \</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, C) \</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, A) \</span></div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, B) \</span></div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, C) \</span></div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, A) \</span></div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, B) \</span></div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, C) \</span></div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, A) \</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, B) \</span></div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, C) \</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, A) \</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, B) \</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, C) \</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, A) \</span></div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, B) \</span></div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, C) \</span></div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, A) \</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, B) \</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, C) \</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, A) \</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, B) \</span></div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, C) \</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, A) \</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, B) \</span></div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, C) \</span></div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, A) \</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, B) \</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, C) \</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, A) \</span></div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, B) \</span></div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, C) \</span></div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, A) \</span></div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, B) \</span></div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, C) \</span></div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, A) \</span></div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, B) \</span></div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, C) \</span></div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, A) \</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, B) \</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, C) \</span></div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, A) \</span></div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, B) \</span></div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, C) \</span></div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, A) \</span></div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, B) \</span></div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, C)</span></div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> </div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B, C) \</span></div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C) \</span></div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C) \</span></div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B, C)</span></div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> </div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_VEC_FROM_VEC3(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \</span></div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y, z) \</span></div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g, b) \</span></div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t, p)</span></div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> </div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> <span class="comment">//GLM_SWIZZLE_GEN_VEC_FROM_VEC3(valType, detail::vec3, detail::vec2, detail::vec3, detail::vec4)</span></div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> </div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \</span></div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A) \</span></div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B) \</span></div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C) \</span></div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D) \</span></div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A) \</span></div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B) \</span></div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C) \</span></div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D) \</span></div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A) \</span></div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B) \</span></div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C) \</span></div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D) \</span></div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A) \</span></div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B) \</span></div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C) \</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D)</span></div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> </div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \</span></div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A) \</span></div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B) \</span></div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C) \</span></div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D) \</span></div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A) \</span></div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B) \</span></div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C) \</span></div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D) \</span></div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A) \</span></div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B) \</span></div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C) \</span></div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D) \</span></div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A) \</span></div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B) \</span></div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C) \</span></div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D) \</span></div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A) \</span></div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B) \</span></div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C) \</span></div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D) \</span></div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A) \</span></div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B) \</span></div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C) \</span></div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D) \</span></div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A) \</span></div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B) \</span></div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C) \</span></div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D) \</span></div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A) \</span></div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B) \</span></div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C) \</span></div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D) \</span></div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A) \</span></div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B) \</span></div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C) \</span></div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D) \</span></div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A) \</span></div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B) \</span></div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C) \</span></div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D) \</span></div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A) \</span></div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B) \</span></div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C) \</span></div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D) \</span></div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A) \</span></div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B) \</span></div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C) \</span></div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D) \</span></div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A) \</span></div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B) \</span></div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C) \</span></div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D) \</span></div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A) \</span></div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B) \</span></div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C) \</span></div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D) \</span></div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A) \</span></div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B) \</span></div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C) \</span></div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D) \</span></div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A) \</span></div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B) \</span></div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C) \</span></div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D)</span></div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> </div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \</span></div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, A) \</span></div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, B) \</span></div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, C) \</span></div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, D) \</span></div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, A) \</span></div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, B) \</span></div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, C) \</span></div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, D) \</span></div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, A) \</span></div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, B) \</span></div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, C) \</span></div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, D) \</span></div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, A) \</span></div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, B) \</span></div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, C) \</span></div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, D) \</span></div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, A) \</span></div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, B) \</span></div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, C) \</span></div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, D) \</span></div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, A) \</span></div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, B) \</span></div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, C) \</span></div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, D) \</span></div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, A) \</span></div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, B) \</span></div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, C) \</span></div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, D) \</span></div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, A) \</span></div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, B) \</span></div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, C) \</span></div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, D) \</span></div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, A) \</span></div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, B) \</span></div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, C) \</span></div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, D) \</span></div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, A) \</span></div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, B) \</span></div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, C) \</span></div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, D) \</span></div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, A) \</span></div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, B) \</span></div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, C) \</span></div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, D) \</span></div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, A) \</span></div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, B) \</span></div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, C) \</span></div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, D) \</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, A) \</span></div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, B) \</span></div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, C) \</span></div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, D) \</span></div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, A) \</span></div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, B) \</span></div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, C) \</span></div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, D) \</span></div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, A) \</span></div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, B) \</span></div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, C) \</span></div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, D) \</span></div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, A) \</span></div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, B) \</span></div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, C) \</span></div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, D) \</span></div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, A) \</span></div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, B) \</span></div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, C) \</span></div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, D) \</span></div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, A) \</span></div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, B) \</span></div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, C) \</span></div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, D) \</span></div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, A) \</span></div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, B) \</span></div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, C) \</span></div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, D) \</span></div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, A) \</span></div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, B) \</span></div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, C) \</span></div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, D) \</span></div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, A) \</span></div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, B) \</span></div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, C) \</span></div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, D) \</span></div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, A) \</span></div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, B) \</span></div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, C) \</span></div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, D) \</span></div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, A) \</span></div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, B) \</span></div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, C) \</span></div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, D) \</span></div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, A) \</span></div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, B) \</span></div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, C) \</span></div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, D) \</span></div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, A) \</span></div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, B) \</span></div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, C) \</span></div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, D) \</span></div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, A) \</span></div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, B) \</span></div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, C) \</span></div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, D) \</span></div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, A) \</span></div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, B) \</span></div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, C) \</span></div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, D) \</span></div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, A) \</span></div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, B) \</span></div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, C) \</span></div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, D) \</span></div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, A) \</span></div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, B) \</span></div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, C) \</span></div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, D) \</span></div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, A) \</span></div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, B) \</span></div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, C) \</span></div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, D) \</span></div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, A) \</span></div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, B) \</span></div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, C) \</span></div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, D) \</span></div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, A) \</span></div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, B) \</span></div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, C) \</span></div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, D) \</span></div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, A) \</span></div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, B) \</span></div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, C) \</span></div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, D) \</span></div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, A) \</span></div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, B) \</span></div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, C) \</span></div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, D) \</span></div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, A) \</span></div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, B) \</span></div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, C) \</span></div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, D) \</span></div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, A) \</span></div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, B) \</span></div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, C) \</span></div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, D) \</span></div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, A) \</span></div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, B) \</span></div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, C) \</span></div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, D) \</span></div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, A) \</span></div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, B) \</span></div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, C) \</span></div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, D) \</span></div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, A) \</span></div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, B) \</span></div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, C) \</span></div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, D) \</span></div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, A) \</span></div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, B) \</span></div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, C) \</span></div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, D) \</span></div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, A) \</span></div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, B) \</span></div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, C) \</span></div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, D) \</span></div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, A) \</span></div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, B) \</span></div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, C) \</span></div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, D) \</span></div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, A) \</span></div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, B) \</span></div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, C) \</span></div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, D) \</span></div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, A) \</span></div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, B) \</span></div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, C) \</span></div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, D) \</span></div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, A) \</span></div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, B) \</span></div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, C) \</span></div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, D) \</span></div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, A) \</span></div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, B) \</span></div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, C) \</span></div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, D) \</span></div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, A) \</span></div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, B) \</span></div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, C) \</span></div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, D) \</span></div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, A) \</span></div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, B) \</span></div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, C) \</span></div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, D) \</span></div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, A) \</span></div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, B) \</span></div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, C) \</span></div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, D) \</span></div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, A) \</span></div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, B) \</span></div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, C) \</span></div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, D) \</span></div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, A) \</span></div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, B) \</span></div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, C) \</span></div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, D) \</span></div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, A) \</span></div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, B) \</span></div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, C) \</span></div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, D) \</span></div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, A) \</span></div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, B) \</span></div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, C) \</span></div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, D) \</span></div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, A) \</span></div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, B) \</span></div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, C) \</span></div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, D) \</span></div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, A) \</span></div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, B) \</span></div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, C) \</span></div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, D) \</span></div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, A) \</span></div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, B) \</span></div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, C) \</span></div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, D) \</span></div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, A) \</span></div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, B) \</span></div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, C) \</span></div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, D) \</span></div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, A) \</span></div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, B) \</span></div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, C) \</span></div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, D) \</span></div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, A) \</span></div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, B) \</span></div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, C) \</span></div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, D) \</span></div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, A) \</span></div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, B) \</span></div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, C) \</span></div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, D) \</span></div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, A) \</span></div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, B) \</span></div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, C) \</span></div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, D) \</span></div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, A) \</span></div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, B) \</span></div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, C) \</span></div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, D) \</span></div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, A) \</span></div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, B) \</span></div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, C) \</span></div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, D) \</span></div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, A) \</span></div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, B) \</span></div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, C) \</span></div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, D)</span></div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span> </div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D) \</span></div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C, D) \</span></div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C, D) \</span></div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D)</span></div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span> </div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_VEC_FROM_VEC4(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \</span></div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y, z, w) \</span></div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g, b, a) \</span></div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t, p, q)</span></div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span> </div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span> <span class="comment">//GLM_SWIZZLE_GEN_VEC_FROM_VEC4(valType, detail::vec4, detail::vec2, detail::vec3, detail::vec4)</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00006.html b/src/third_party/glm/doc/api/a00006.html
new file mode 100644
index 0000000..2dd5b1d
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00006.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: _vectorize.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">_vectorize.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00006_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+
+<p>Definition in file <a class="el" href="a00006_source.html">_vectorize.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00006_source.html b/src/third_party/glm/doc/api/a00006_source.html
new file mode 100644
index 0000000..50c4a9b
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00006_source.html
@@ -0,0 +1,194 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: _vectorize.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">_vectorize.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00006.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include "<a class="code" href="a00128.html">type_vec1.hpp</a>"</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#include "<a class="code" href="a00129.html">type_vec2.hpp</a>"</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor">#include "<a class="code" href="a00130.html">type_vec3.hpp</a>"</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#include "<a class="code" href="a00131.html">type_vec4.hpp</a>"</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> </div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a>{</div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="keyword">namespace </span>detail</div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> {</div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> R, <span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>  <span class="keyword">struct </span>functor1{};</div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> R, <span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  <span class="keyword">struct </span>functor1<R, T, P, tvec1></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  {</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  GLM_FUNC_QUALIFIER <span class="keyword">static</span> tvec1<R, P> call(R (*Func) (T x), tvec1<T, P> <span class="keyword">const</span> & v)</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  {</div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keywordflow">return</span> tvec1<R, P>(Func(v.x));</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  }</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  };</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> R, <span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keyword">struct </span>functor1<R, T, P, tvec2></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  {</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  GLM_FUNC_QUALIFIER <span class="keyword">static</span> tvec2<R, P> call(R (*Func) (T x), tvec2<T, P> <span class="keyword">const</span> & v)</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  {</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <span class="keywordflow">return</span> tvec2<R, P>(Func(v.x), Func(v.y));</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  }</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  };</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> R, <span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keyword">struct </span>functor1<R, T, P, tvec3></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  {</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  GLM_FUNC_QUALIFIER <span class="keyword">static</span> tvec3<R, P> call(R (*Func) (T x), tvec3<T, P> <span class="keyword">const</span> & v)</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  {</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keywordflow">return</span> tvec3<R, P>(Func(v.x), Func(v.y), Func(v.z));</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  }</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  };</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> R, <span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keyword">struct </span>functor1<R, T, P, tvec4></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  {</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  GLM_FUNC_QUALIFIER <span class="keyword">static</span> tvec4<R, P> call(R (*Func) (T x), tvec4<T, P> <span class="keyword">const</span> & v)</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  {</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keywordflow">return</span> tvec4<R, P>(Func(v.x), Func(v.y), Func(v.z), Func(v.w));</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  }</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  };</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keyword">struct </span>functor2{};</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keyword">struct </span>functor2<T, P, tvec1></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  {</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  GLM_FUNC_QUALIFIER <span class="keyword">static</span> tvec1<T, P> call(T (*Func) (T x, T y), tvec1<T, P> <span class="keyword">const</span> & a, tvec1<T, P> <span class="keyword">const</span> & b)</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  {</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keywordflow">return</span> tvec1<T, P>(Func(a.x, b.x));</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  }</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  };</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keyword">struct </span>functor2<T, P, tvec2></div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  {</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  GLM_FUNC_QUALIFIER <span class="keyword">static</span> tvec2<T, P> call(T (*Func) (T x, T y), tvec2<T, P> <span class="keyword">const</span> & a, tvec2<T, P> <span class="keyword">const</span> & b)</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  {</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordflow">return</span> tvec2<T, P>(Func(a.x, b.x), Func(a.y, b.y));</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  }</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  };</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="keyword">struct </span>functor2<T, P, tvec3></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  {</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  GLM_FUNC_QUALIFIER <span class="keyword">static</span> tvec3<T, P> call(T (*Func) (T x, T y), tvec3<T, P> <span class="keyword">const</span> & a, tvec3<T, P> <span class="keyword">const</span> & b)</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  {</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordflow">return</span> tvec3<T, P>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z));</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  }</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  };</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keyword">struct </span>functor2<T, P, tvec4></div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  {</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  GLM_FUNC_QUALIFIER <span class="keyword">static</span> tvec4<T, P> call(T (*Func) (T x, T y), tvec4<T, P> <span class="keyword">const</span> & a, tvec4<T, P> <span class="keyword">const</span> & b)</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  {</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keywordflow">return</span> tvec4<T, P>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z), Func(a.w, b.w));</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  }</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  };</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="keyword">struct </span>functor2_vec_sca{};</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keyword">struct </span>functor2_vec_sca<T, P, tvec1></div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  {</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  GLM_FUNC_QUALIFIER <span class="keyword">static</span> tvec1<T, P> call(T (*Func) (T x, T y), tvec1<T, P> <span class="keyword">const</span> & a, T b)</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  {</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="keywordflow">return</span> tvec1<T, P>(Func(a.x, b));</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  }</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  };</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="keyword">struct </span>functor2_vec_sca<T, P, tvec2></div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  {</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  GLM_FUNC_QUALIFIER <span class="keyword">static</span> tvec2<T, P> call(T (*Func) (T x, T y), tvec2<T, P> <span class="keyword">const</span> & a, T b)</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  {</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="keywordflow">return</span> tvec2<T, P>(Func(a.x, b), Func(a.y, b));</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  }</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  };</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keyword">struct </span>functor2_vec_sca<T, P, tvec3></div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  {</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  GLM_FUNC_QUALIFIER <span class="keyword">static</span> tvec3<T, P> call(T (*Func) (T x, T y), tvec3<T, P> <span class="keyword">const</span> & a, T b)</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  {</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="keywordflow">return</span> tvec3<T, P>(Func(a.x, b), Func(a.y, b), Func(a.z, b));</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  }</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  };</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="keyword">struct </span>functor2_vec_sca<T, P, tvec4></div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  {</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  GLM_FUNC_QUALIFIER <span class="keyword">static</span> tvec4<T, P> call(T (*Func) (T x, T y), tvec4<T, P> <span class="keyword">const</span> & a, T b)</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  {</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keywordflow">return</span> tvec4<T, P>(Func(a.x, b), Func(a.y, b), Func(a.z, b), Func(a.w, b));</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  }</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  };</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> }<span class="comment">//namespace detail</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> }<span class="comment">//namespace glm</span></div>
+<div class="ttc" id="a00130_html"><div class="ttname"><a href="a00130.html">type_vec3.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00129_html"><div class="ttname"><a href="a00129.html">type_vec2.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00131_html"><div class="ttname"><a href="a00131.html">type_vec4.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00128_html"><div class="ttname"><a href="a00128.html">type_vec1.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00007.html b/src/third_party/glm/doc/api/a00007.html
new file mode 100644
index 0000000..cc8b373
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00007.html
@@ -0,0 +1,141 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: associated_min_max.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">associated_min_max.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00007_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga7d9c8785230c8db60f72ec8975f1ba45"><td class="memTemplParams" colspan="2">template<typename T , typename U > </td></tr>
+<tr class="memitem:ga7d9c8785230c8db60f72ec8975f1ba45"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL U </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00181.html#ga7d9c8785230c8db60f72ec8975f1ba45">associatedMax</a> (T x, U a, T y, U b)</td></tr>
+<tr class="separator:ga7d9c8785230c8db60f72ec8975f1ba45"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga10ba6001798f42a0f941f19ff30e066a"><td class="memTemplParams" colspan="2">template<typename T , typename U , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga10ba6001798f42a0f941f19ff30e066a"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec2< U, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00181.html#ga10ba6001798f42a0f941f19ff30e066a">associatedMax</a> (vecType< T, P > const &x, vecType< U, P > const &a, vecType< T, P > const &y, vecType< U, P > const &b)</td></tr>
+<tr class="separator:ga10ba6001798f42a0f941f19ff30e066a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga62ca63cca6b21387b8a25474f441a869"><td class="memTemplParams" colspan="2">template<typename T , typename U , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga62ca63cca6b21387b8a25474f441a869"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00181.html#ga62ca63cca6b21387b8a25474f441a869">associatedMax</a> (T x, vecType< U, P > const &a, T y, vecType< U, P > const &b)</td></tr>
+<tr class="separator:ga62ca63cca6b21387b8a25474f441a869"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5364520173815b66a9d9e452c38bf312"><td class="memTemplParams" colspan="2">template<typename T , typename U , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga5364520173815b66a9d9e452c38bf312"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< U, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00181.html#ga5364520173815b66a9d9e452c38bf312">associatedMax</a> (vecType< T, P > const &x, U a, vecType< T, P > const &y, U b)</td></tr>
+<tr class="separator:ga5364520173815b66a9d9e452c38bf312"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaec891e363d91abbf3a4443cf2f652209"><td class="memTemplParams" colspan="2">template<typename T , typename U > </td></tr>
+<tr class="memitem:gaec891e363d91abbf3a4443cf2f652209"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL U </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00181.html#gaec891e363d91abbf3a4443cf2f652209">associatedMax</a> (T x, U a, T y, U b, T z, U c)</td></tr>
+<tr class="separator:gaec891e363d91abbf3a4443cf2f652209"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga065a0c1eb7837118ef79be88dfd78487"><td class="memTemplParams" colspan="2">template<typename T , typename U , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga065a0c1eb7837118ef79be88dfd78487"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< U, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00181.html#ga065a0c1eb7837118ef79be88dfd78487">associatedMax</a> (vecType< T, P > const &x, vecType< U, P > const &a, vecType< T, P > const &y, vecType< U, P > const &b, vecType< T, P > const &z, vecType< U, P > const &c)</td></tr>
+<tr class="separator:ga065a0c1eb7837118ef79be88dfd78487"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga553431a468e251623408603bcb51c9cb"><td class="memTemplParams" colspan="2">template<typename T , typename U , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga553431a468e251623408603bcb51c9cb"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00181.html#ga553431a468e251623408603bcb51c9cb">associatedMax</a> (T x, vecType< U, P > const &a, T y, vecType< U, P > const &b, T z, vecType< U, P > const &c)</td></tr>
+<tr class="separator:ga553431a468e251623408603bcb51c9cb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga327136e6a568569c03a056f90814b656"><td class="memTemplParams" colspan="2">template<typename T , typename U , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga327136e6a568569c03a056f90814b656"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< U, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00181.html#ga327136e6a568569c03a056f90814b656">associatedMax</a> (vecType< T, P > const &x, U a, vecType< T, P > const &y, U b, vecType< T, P > const &z, U c)</td></tr>
+<tr class="separator:ga327136e6a568569c03a056f90814b656"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3038ffcb43eaa6af75897a99a5047ccc"><td class="memTemplParams" colspan="2">template<typename T , typename U > </td></tr>
+<tr class="memitem:ga3038ffcb43eaa6af75897a99a5047ccc"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL U </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00181.html#ga3038ffcb43eaa6af75897a99a5047ccc">associatedMax</a> (T x, U a, T y, U b, T z, U c, T w, U d)</td></tr>
+<tr class="separator:ga3038ffcb43eaa6af75897a99a5047ccc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf607886421c35cd7e4f41a50d7c330e3"><td class="memTemplParams" colspan="2">template<typename T , typename U , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gaf607886421c35cd7e4f41a50d7c330e3"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< U, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00181.html#gaf607886421c35cd7e4f41a50d7c330e3">associatedMax</a> (vecType< T, P > const &x, vecType< U, P > const &a, vecType< T, P > const &y, vecType< U, P > const &b, vecType< T, P > const &z, vecType< U, P > const &c, vecType< T, P > const &w, vecType< U, P > const &d)</td></tr>
+<tr class="separator:gaf607886421c35cd7e4f41a50d7c330e3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7a165de1af9a3f9193516a3b47407086"><td class="memTemplParams" colspan="2">template<typename T , typename U , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga7a165de1af9a3f9193516a3b47407086"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< U, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00181.html#ga7a165de1af9a3f9193516a3b47407086">associatedMax</a> (T x, vecType< U, P > const &a, T y, vecType< U, P > const &b, T z, vecType< U, P > const &c, T w, vecType< U, P > const &d)</td></tr>
+<tr class="separator:ga7a165de1af9a3f9193516a3b47407086"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3122fbe8133ea54749b10fb93e8a167e"><td class="memTemplParams" colspan="2">template<typename T , typename U , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga3122fbe8133ea54749b10fb93e8a167e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< U, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00181.html#ga3122fbe8133ea54749b10fb93e8a167e">associatedMax</a> (vecType< T, P > const &x, U a, vecType< T, P > const &y, U b, vecType< T, P > const &z, U c, vecType< T, P > const &w, U d)</td></tr>
+<tr class="separator:ga3122fbe8133ea54749b10fb93e8a167e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gacc01bd272359572fc28437ae214a02df"><td class="memTemplParams" colspan="2">template<typename T , typename U , precision P> </td></tr>
+<tr class="memitem:gacc01bd272359572fc28437ae214a02df"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL U </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00181.html#gacc01bd272359572fc28437ae214a02df">associatedMin</a> (T x, U a, T y, U b)</td></tr>
+<tr class="separator:gacc01bd272359572fc28437ae214a02df"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8b538d10872626668a078e2bd495af25"><td class="memTemplParams" colspan="2">template<typename T , typename U , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga8b538d10872626668a078e2bd495af25"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec2< U, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00181.html#ga8b538d10872626668a078e2bd495af25">associatedMin</a> (vecType< T, P > const &x, vecType< U, P > const &a, vecType< T, P > const &y, vecType< U, P > const &b)</td></tr>
+<tr class="separator:ga8b538d10872626668a078e2bd495af25"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1dccff48fa5650c746533de83467da6e"><td class="memTemplParams" colspan="2">template<typename T , typename U , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga1dccff48fa5650c746533de83467da6e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< U, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00181.html#ga1dccff48fa5650c746533de83467da6e">associatedMin</a> (T x, const vecType< U, P > &a, T y, const vecType< U, P > &b)</td></tr>
+<tr class="separator:ga1dccff48fa5650c746533de83467da6e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga076717f4e07c6ae725cc1382d1ac4869"><td class="memTemplParams" colspan="2">template<typename T , typename U , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga076717f4e07c6ae725cc1382d1ac4869"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< U, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00181.html#ga076717f4e07c6ae725cc1382d1ac4869">associatedMin</a> (vecType< T, P > const &x, U a, vecType< T, P > const &y, U b)</td></tr>
+<tr class="separator:ga076717f4e07c6ae725cc1382d1ac4869"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad0aa8f86259a26d839d34a3577a923fc"><td class="memTemplParams" colspan="2">template<typename T , typename U > </td></tr>
+<tr class="memitem:gad0aa8f86259a26d839d34a3577a923fc"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL U </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00181.html#gad0aa8f86259a26d839d34a3577a923fc">associatedMin</a> (T x, U a, T y, U b, T z, U c)</td></tr>
+<tr class="separator:gad0aa8f86259a26d839d34a3577a923fc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5bc6b9acbf9e060d58a342fbe3b73d43"><td class="memTemplParams" colspan="2">template<typename T , typename U , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga5bc6b9acbf9e060d58a342fbe3b73d43"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< U, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00181.html#ga5bc6b9acbf9e060d58a342fbe3b73d43">associatedMin</a> (vecType< T, P > const &x, vecType< U, P > const &a, vecType< T, P > const &y, vecType< U, P > const &b, vecType< T, P > const &z, vecType< U, P > const &c)</td></tr>
+<tr class="separator:ga5bc6b9acbf9e060d58a342fbe3b73d43"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga432224ebe2085eaa2b63a077ecbbbff6"><td class="memTemplParams" colspan="2">template<typename T , typename U > </td></tr>
+<tr class="memitem:ga432224ebe2085eaa2b63a077ecbbbff6"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL U </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00181.html#ga432224ebe2085eaa2b63a077ecbbbff6">associatedMin</a> (T x, U a, T y, U b, T z, U c, T w, U d)</td></tr>
+<tr class="separator:ga432224ebe2085eaa2b63a077ecbbbff6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga88e031f22b80215505928900d3dde549"><td class="memTemplParams" colspan="2">template<typename T , typename U , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga88e031f22b80215505928900d3dde549"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< U, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00181.html#ga88e031f22b80215505928900d3dde549">associatedMin</a> (vecType< T, P > const &x, vecType< U, P > const &a, vecType< T, P > const &y, vecType< U, P > const &b, vecType< T, P > const &z, vecType< U, P > const &c, vecType< T, P > const &w, vecType< U, P > const &d)</td></tr>
+<tr class="separator:ga88e031f22b80215505928900d3dde549"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0f63b0dce5a5c3242cc6d9847e7d14f1"><td class="memTemplParams" colspan="2">template<typename T , typename U , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga0f63b0dce5a5c3242cc6d9847e7d14f1"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< U, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00181.html#ga0f63b0dce5a5c3242cc6d9847e7d14f1">associatedMin</a> (T x, vecType< U, P > const &a, T y, vecType< U, P > const &b, T z, vecType< U, P > const &c, T w, vecType< U, P > const &d)</td></tr>
+<tr class="separator:ga0f63b0dce5a5c3242cc6d9847e7d14f1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga00a949fd345f4b31b259f033d3ab4a1c"><td class="memTemplParams" colspan="2">template<typename T , typename U , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga00a949fd345f4b31b259f033d3ab4a1c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< U, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00181.html#ga00a949fd345f4b31b259f033d3ab4a1c">associatedMin</a> (vecType< T, P > const &x, U a, vecType< T, P > const &y, U b, vecType< T, P > const &z, U c, vecType< T, P > const &w, U d)</td></tr>
+<tr class="separator:ga00a949fd345f4b31b259f033d3ab4a1c"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00181.html">GLM_GTX_associated_min_max</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd>
+<dd>
+<a class="el" href="a00192.html" title="Min and max functions for 3 to 4 parameters. ">GLM_GTX_extented_min_max</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00007_source.html">associated_min_max.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00007_source.html b/src/third_party/glm/doc/api/a00007_source.html
new file mode 100644
index 0000000..d3d9bb2
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00007_source.html
@@ -0,0 +1,207 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: associated_min_max.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">associated_min_max.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00007.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include "../glm.hpp"</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_associated_min_max extension included")</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> {</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U, precision P></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  GLM_FUNC_DECL U <a class="code" href="a00181.html#ga00a949fd345f4b31b259f033d3ab4a1c">associatedMin</a>(T x, U a, T y, U b);</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  GLM_FUNC_DECL tvec2<U, P> <a class="code" href="a00181.html#ga00a949fd345f4b31b259f033d3ab4a1c">associatedMin</a>(</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  vecType<T, P> <span class="keyword">const</span> & x, vecType<U, P> <span class="keyword">const</span> & a,</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  vecType<T, P> <span class="keyword">const</span> & y, vecType<U, P> <span class="keyword">const</span> & b);</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  GLM_FUNC_DECL vecType<U, P> <a class="code" href="a00181.html#ga00a949fd345f4b31b259f033d3ab4a1c">associatedMin</a>(</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  T x, <span class="keyword">const</span> vecType<U, P>& a,</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  T y, <span class="keyword">const</span> vecType<U, P>& b);</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  GLM_FUNC_DECL vecType<U, P> <a class="code" href="a00181.html#ga00a949fd345f4b31b259f033d3ab4a1c">associatedMin</a>(</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  vecType<T, P> <span class="keyword">const</span> & x, U a,</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  vecType<T, P> <span class="keyword">const</span> & y, U b);</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  GLM_FUNC_DECL U <a class="code" href="a00181.html#ga00a949fd345f4b31b259f033d3ab4a1c">associatedMin</a>(</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  T x, U a,</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  T y, U b,</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  T z, U c);</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  GLM_FUNC_DECL vecType<U, P> <a class="code" href="a00181.html#ga00a949fd345f4b31b259f033d3ab4a1c">associatedMin</a>(</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  vecType<T, P> <span class="keyword">const</span> & x, vecType<U, P> <span class="keyword">const</span> & a,</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  vecType<T, P> <span class="keyword">const</span> & y, vecType<U, P> <span class="keyword">const</span> & b,</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  vecType<T, P> <span class="keyword">const</span> & z, vecType<U, P> <span class="keyword">const</span> & c);</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  GLM_FUNC_DECL U <a class="code" href="a00181.html#ga00a949fd345f4b31b259f033d3ab4a1c">associatedMin</a>(</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  T x, U a,</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  T y, U b,</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  T z, U c,</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  T w, U d);</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  GLM_FUNC_DECL vecType<U, P> <a class="code" href="a00181.html#ga00a949fd345f4b31b259f033d3ab4a1c">associatedMin</a>(</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  vecType<T, P> <span class="keyword">const</span> & x, vecType<U, P> <span class="keyword">const</span> & a,</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  vecType<T, P> <span class="keyword">const</span> & y, vecType<U, P> <span class="keyword">const</span> & b,</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  vecType<T, P> <span class="keyword">const</span> & z, vecType<U, P> <span class="keyword">const</span> & c,</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  vecType<T, P> <span class="keyword">const</span> & w, vecType<U, P> <span class="keyword">const</span> & d);</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  GLM_FUNC_DECL vecType<U, P> <a class="code" href="a00181.html#ga00a949fd345f4b31b259f033d3ab4a1c">associatedMin</a>(</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  T x, vecType<U, P> <span class="keyword">const</span> & a,</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  T y, vecType<U, P> <span class="keyword">const</span> & b,</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  T z, vecType<U, P> <span class="keyword">const</span> & c,</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  T w, vecType<U, P> <span class="keyword">const</span> & d);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  GLM_FUNC_DECL vecType<U, P> <a class="code" href="a00181.html#ga00a949fd345f4b31b259f033d3ab4a1c">associatedMin</a>(</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  vecType<T, P> <span class="keyword">const</span> & x, U a,</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  vecType<T, P> <span class="keyword">const</span> & y, U b,</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  vecType<T, P> <span class="keyword">const</span> & z, U c,</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  vecType<T, P> <span class="keyword">const</span> & w, U d);</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  GLM_FUNC_DECL U <a class="code" href="a00181.html#ga3122fbe8133ea54749b10fb93e8a167e">associatedMax</a>(T x, U a, T y, U b);</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  GLM_FUNC_DECL tvec2<U, P> <a class="code" href="a00181.html#ga3122fbe8133ea54749b10fb93e8a167e">associatedMax</a>(</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  vecType<T, P> <span class="keyword">const</span> & x, vecType<U, P> <span class="keyword">const</span> & a,</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  vecType<T, P> <span class="keyword">const</span> & y, vecType<U, P> <span class="keyword">const</span> & b);</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00181.html#ga3122fbe8133ea54749b10fb93e8a167e">associatedMax</a>(</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  T x, vecType<U, P> <span class="keyword">const</span> & a,</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  T y, vecType<U, P> <span class="keyword">const</span> & b);</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  GLM_FUNC_DECL vecType<U, P> <a class="code" href="a00181.html#ga3122fbe8133ea54749b10fb93e8a167e">associatedMax</a>(</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  vecType<T, P> <span class="keyword">const</span> & x, U a,</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  vecType<T, P> <span class="keyword">const</span> & y, U b);</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  GLM_FUNC_DECL U <a class="code" href="a00181.html#ga3122fbe8133ea54749b10fb93e8a167e">associatedMax</a>(</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  T x, U a,</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  T y, U b,</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  T z, U c);</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  GLM_FUNC_DECL vecType<U, P> <a class="code" href="a00181.html#ga3122fbe8133ea54749b10fb93e8a167e">associatedMax</a>(</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  vecType<T, P> <span class="keyword">const</span> & x, vecType<U, P> <span class="keyword">const</span> & a,</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  vecType<T, P> <span class="keyword">const</span> & y, vecType<U, P> <span class="keyword">const</span> & b,</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  vecType<T, P> <span class="keyword">const</span> & z, vecType<U, P> <span class="keyword">const</span> & c);</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00181.html#ga3122fbe8133ea54749b10fb93e8a167e">associatedMax</a>(</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  T x, vecType<U, P> <span class="keyword">const</span> & a,</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  T y, vecType<U, P> <span class="keyword">const</span> & b,</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  T z, vecType<U, P> <span class="keyword">const</span> & c);</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  GLM_FUNC_DECL vecType<U, P> <a class="code" href="a00181.html#ga3122fbe8133ea54749b10fb93e8a167e">associatedMax</a>(</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  vecType<T, P> <span class="keyword">const</span> & x, U a,</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  vecType<T, P> <span class="keyword">const</span> & y, U b,</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  vecType<T, P> <span class="keyword">const</span> & z, U c);</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  GLM_FUNC_DECL U <a class="code" href="a00181.html#ga3122fbe8133ea54749b10fb93e8a167e">associatedMax</a>(</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  T x, U a,</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  T y, U b,</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  T z, U c,</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  T w, U d);</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  GLM_FUNC_DECL vecType<U, P> <a class="code" href="a00181.html#ga3122fbe8133ea54749b10fb93e8a167e">associatedMax</a>(</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  vecType<T, P> <span class="keyword">const</span> & x, vecType<U, P> <span class="keyword">const</span> & a,</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  vecType<T, P> <span class="keyword">const</span> & y, vecType<U, P> <span class="keyword">const</span> & b,</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  vecType<T, P> <span class="keyword">const</span> & z, vecType<U, P> <span class="keyword">const</span> & c,</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  vecType<T, P> <span class="keyword">const</span> & w, vecType<U, P> <span class="keyword">const</span> & d);</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  GLM_FUNC_DECL vecType<U, P> <a class="code" href="a00181.html#ga3122fbe8133ea54749b10fb93e8a167e">associatedMax</a>(</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  T x, vecType<U, P> <span class="keyword">const</span> & a,</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  T y, vecType<U, P> <span class="keyword">const</span> & b,</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  T z, vecType<U, P> <span class="keyword">const</span> & c,</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  T w, vecType<U, P> <span class="keyword">const</span> & d);</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> </div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  GLM_FUNC_DECL vecType<U, P> <a class="code" href="a00181.html#ga3122fbe8133ea54749b10fb93e8a167e">associatedMax</a>(</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  vecType<T, P> <span class="keyword">const</span> & x, U a,</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  vecType<T, P> <span class="keyword">const</span> & y, U b,</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  vecType<T, P> <span class="keyword">const</span> & z, U c,</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  vecType<T, P> <span class="keyword">const</span> & w, U d);</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> </div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> } <span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="preprocessor">#include "associated_min_max.inl"</span></div>
+<div class="ttc" id="a00181_html_ga3122fbe8133ea54749b10fb93e8a167e"><div class="ttname"><a href="a00181.html#ga3122fbe8133ea54749b10fb93e8a167e">glm::associatedMax</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< U, P > associatedMax(vecType< T, P > const &x, U a, vecType< T, P > const &y, U b, vecType< T, P > const &z, U c, vecType< T, P > const &w, U d)</div><div class="ttdoc">Maximum comparison between 4 variables and returns 4 associated variable values. </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00181_html_ga00a949fd345f4b31b259f033d3ab4a1c"><div class="ttname"><a href="a00181.html#ga00a949fd345f4b31b259f033d3ab4a1c">glm::associatedMin</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< U, P > associatedMin(vecType< T, P > const &x, U a, vecType< T, P > const &y, U b, vecType< T, P > const &z, U c, vecType< T, P > const &w, U d)</div><div class="ttdoc">Minimum comparison between 4 variables and returns 4 associated variable values. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00008.html b/src/third_party/glm/doc/api/a00008.html
new file mode 100644
index 0000000..2ac48be
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00008.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: bit.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">bit.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00008_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga0dcc8fe7c3d3ad60dea409281efa3d05"><td class="memTemplParams" colspan="2">template<typename genIUType > </td></tr>
+<tr class="memitem:ga0dcc8fe7c3d3ad60dea409281efa3d05"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genIUType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00182.html#ga0dcc8fe7c3d3ad60dea409281efa3d05">highestBitValue</a> (genIUType Value)</td></tr>
+<tr class="separator:ga0dcc8fe7c3d3ad60dea409281efa3d05"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5eea3a4d429040af13d39a7d7cd84d73"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga5eea3a4d429040af13d39a7d7cd84d73"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00182.html#ga5eea3a4d429040af13d39a7d7cd84d73">highestBitValue</a> (vecType< T, P > const &value)</td></tr>
+<tr class="separator:ga5eea3a4d429040af13d39a7d7cd84d73"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2ff6568089f3a9b67f5c30918855fc6f"><td class="memTemplParams" colspan="2">template<typename genIUType > </td></tr>
+<tr class="memitem:ga2ff6568089f3a9b67f5c30918855fc6f"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genIUType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00182.html#ga2ff6568089f3a9b67f5c30918855fc6f">lowestBitValue</a> (genIUType Value)</td></tr>
+<tr class="separator:ga2ff6568089f3a9b67f5c30918855fc6f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8cda2459871f574a0aecbe702ac93291"><td class="memTemplParams" colspan="2">template<typename genIUType > </td></tr>
+<tr class="memitem:ga8cda2459871f574a0aecbe702ac93291"><td class="memTemplItemLeft" align="right" valign="top">GLM_DEPRECATED GLM_FUNC_DECL genIUType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00182.html#ga8cda2459871f574a0aecbe702ac93291">powerOfTwoAbove</a> (genIUType Value)</td></tr>
+<tr class="separator:ga8cda2459871f574a0aecbe702ac93291"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafe08808a50226b75b50e640a08b32ddc"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gafe08808a50226b75b50e640a08b32ddc"><td class="memTemplItemLeft" align="right" valign="top">GLM_DEPRECATED GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00182.html#gafe08808a50226b75b50e640a08b32ddc">powerOfTwoAbove</a> (vecType< T, P > const &value)</td></tr>
+<tr class="separator:gafe08808a50226b75b50e640a08b32ddc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3de7df63c589325101a2817a56f8e29d"><td class="memTemplParams" colspan="2">template<typename genIUType > </td></tr>
+<tr class="memitem:ga3de7df63c589325101a2817a56f8e29d"><td class="memTemplItemLeft" align="right" valign="top">GLM_DEPRECATED GLM_FUNC_DECL genIUType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00182.html#ga3de7df63c589325101a2817a56f8e29d">powerOfTwoBelow</a> (genIUType Value)</td></tr>
+<tr class="separator:ga3de7df63c589325101a2817a56f8e29d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae33bb1ca2b55846b23a0f0796a679195"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gae33bb1ca2b55846b23a0f0796a679195"><td class="memTemplItemLeft" align="right" valign="top">GLM_DEPRECATED GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00182.html#gae33bb1ca2b55846b23a0f0796a679195">powerOfTwoBelow</a> (vecType< T, P > const &value)</td></tr>
+<tr class="separator:gae33bb1ca2b55846b23a0f0796a679195"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5f65973a5d2ea38c719e6a663149ead9"><td class="memTemplParams" colspan="2">template<typename genIUType > </td></tr>
+<tr class="memitem:ga5f65973a5d2ea38c719e6a663149ead9"><td class="memTemplItemLeft" align="right" valign="top">GLM_DEPRECATED GLM_FUNC_DECL genIUType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00182.html#ga5f65973a5d2ea38c719e6a663149ead9">powerOfTwoNearest</a> (genIUType Value)</td></tr>
+<tr class="separator:ga5f65973a5d2ea38c719e6a663149ead9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2d7e85995d097518b8d70cd409bda39e"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga2d7e85995d097518b8d70cd409bda39e"><td class="memTemplItemLeft" align="right" valign="top">GLM_DEPRECATED GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00182.html#ga2d7e85995d097518b8d70cd409bda39e">powerOfTwoNearest</a> (vecType< T, P > const &value)</td></tr>
+<tr class="separator:ga2d7e85995d097518b8d70cd409bda39e"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00182.html">GLM_GTX_bit</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd>
+<dd>
+gtc_half_float (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00008_source.html">bit.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00008_source.html b/src/third_party/glm/doc/api/a00008_source.html
new file mode 100644
index 0000000..0c428de
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00008_source.html
@@ -0,0 +1,111 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: bit.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">bit.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00008.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// Dependencies</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "../gtc/bitfield.hpp"</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_bit extension is deprecated, include GLM_GTC_bitfield and GLM_GTC_integer instead")</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> {</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genIUType></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  GLM_FUNC_DECL genIUType <a class="code" href="a00182.html#ga5eea3a4d429040af13d39a7d7cd84d73">highestBitValue</a>(genIUType Value);</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genIUType></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  GLM_FUNC_DECL genIUType <a class="code" href="a00182.html#ga2ff6568089f3a9b67f5c30918855fc6f">lowestBitValue</a>(genIUType Value);</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00182.html#ga5eea3a4d429040af13d39a7d7cd84d73">highestBitValue</a>(vecType<T, P> <span class="keyword">const</span> & value);</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genIUType></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  GLM_DEPRECATED GLM_FUNC_DECL genIUType <a class="code" href="a00182.html#gafe08808a50226b75b50e640a08b32ddc">powerOfTwoAbove</a>(genIUType Value);</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  GLM_DEPRECATED GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00182.html#gafe08808a50226b75b50e640a08b32ddc">powerOfTwoAbove</a>(vecType<T, P> <span class="keyword">const</span> & value);</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genIUType></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  GLM_DEPRECATED GLM_FUNC_DECL genIUType <a class="code" href="a00182.html#gae33bb1ca2b55846b23a0f0796a679195">powerOfTwoBelow</a>(genIUType Value);</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  GLM_DEPRECATED GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00182.html#gae33bb1ca2b55846b23a0f0796a679195">powerOfTwoBelow</a>(vecType<T, P> <span class="keyword">const</span> & value);</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genIUType></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  GLM_DEPRECATED GLM_FUNC_DECL genIUType <a class="code" href="a00182.html#ga2d7e85995d097518b8d70cd409bda39e">powerOfTwoNearest</a>(genIUType Value);</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  GLM_DEPRECATED GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00182.html#ga2d7e85995d097518b8d70cd409bda39e">powerOfTwoNearest</a>(vecType<T, P> <span class="keyword">const</span> & value);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> } <span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="preprocessor">#include "bit.inl"</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div>
+<div class="ttc" id="a00182_html_gae33bb1ca2b55846b23a0f0796a679195"><div class="ttname"><a href="a00182.html#gae33bb1ca2b55846b23a0f0796a679195">glm::powerOfTwoBelow</a></div><div class="ttdeci">GLM_DEPRECATED GLM_FUNC_DECL vecType< T, P > powerOfTwoBelow(vecType< T, P > const &value)</div><div class="ttdoc">Return the power of two number which value is just lower the input value. </div></div>
+<div class="ttc" id="a00182_html_gafe08808a50226b75b50e640a08b32ddc"><div class="ttname"><a href="a00182.html#gafe08808a50226b75b50e640a08b32ddc">glm::powerOfTwoAbove</a></div><div class="ttdeci">GLM_DEPRECATED GLM_FUNC_DECL vecType< T, P > powerOfTwoAbove(vecType< T, P > const &value)</div><div class="ttdoc">Return the power of two number which value is just higher the input value. </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00182_html_ga2ff6568089f3a9b67f5c30918855fc6f"><div class="ttname"><a href="a00182.html#ga2ff6568089f3a9b67f5c30918855fc6f">glm::lowestBitValue</a></div><div class="ttdeci">GLM_FUNC_DECL genIUType lowestBitValue(genIUType Value)</div></div>
+<div class="ttc" id="a00182_html_ga5eea3a4d429040af13d39a7d7cd84d73"><div class="ttname"><a href="a00182.html#ga5eea3a4d429040af13d39a7d7cd84d73">glm::highestBitValue</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > highestBitValue(vecType< T, P > const &value)</div><div class="ttdoc">Find the highest bit set to 1 in a integer variable and return its value. </div></div>
+<div class="ttc" id="a00182_html_ga2d7e85995d097518b8d70cd409bda39e"><div class="ttname"><a href="a00182.html#ga2d7e85995d097518b8d70cd409bda39e">glm::powerOfTwoNearest</a></div><div class="ttdeci">GLM_DEPRECATED GLM_FUNC_DECL vecType< T, P > powerOfTwoNearest(vecType< T, P > const &value)</div><div class="ttdoc">Return the power of two number which value is the closet to the input value. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00009.html b/src/third_party/glm/doc/api/a00009.html
new file mode 100644
index 0000000..a1a9621
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00009.html
@@ -0,0 +1,137 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: bitfield.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_9440d7c11b99dcd7e5d369c7cf9802fe.html">gtc</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">bitfield.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00009_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga46f9295abe3b5c7658f5b13c7f819f0a"><td class="memTemplParams" colspan="2">template<typename genIUType > </td></tr>
+<tr class="memitem:ga46f9295abe3b5c7658f5b13c7f819f0a"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genIUType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00160.html#ga46f9295abe3b5c7658f5b13c7f819f0a">bitfieldFillOne</a> (genIUType Value, int FirstBit, int BitCount)</td></tr>
+<tr class="separator:ga46f9295abe3b5c7658f5b13c7f819f0a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad789042e84e8292ae95dc1af856f2ad5"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gad789042e84e8292ae95dc1af856f2ad5"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00160.html#gad789042e84e8292ae95dc1af856f2ad5">bitfieldFillOne</a> (vecType< T, P > const &Value, int FirstBit, int BitCount)</td></tr>
+<tr class="separator:gad789042e84e8292ae95dc1af856f2ad5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga697b86998b7d74ee0a69d8e9f8819fee"><td class="memTemplParams" colspan="2">template<typename genIUType > </td></tr>
+<tr class="memitem:ga697b86998b7d74ee0a69d8e9f8819fee"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genIUType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00160.html#ga697b86998b7d74ee0a69d8e9f8819fee">bitfieldFillZero</a> (genIUType Value, int FirstBit, int BitCount)</td></tr>
+<tr class="separator:ga697b86998b7d74ee0a69d8e9f8819fee"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaddba3196316b0bd240295b09b43c2958"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gaddba3196316b0bd240295b09b43c2958"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00160.html#gaddba3196316b0bd240295b09b43c2958">bitfieldFillZero</a> (vecType< T, P > const &Value, int FirstBit, int BitCount)</td></tr>
+<tr class="separator:gaddba3196316b0bd240295b09b43c2958"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga24cad0069f9a0450abd80b3e89501adf"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL int16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#ga24cad0069f9a0450abd80b3e89501adf">bitfieldInterleave</a> (int8 x, int8 y)</td></tr>
+<tr class="separator:ga24cad0069f9a0450abd80b3e89501adf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9a4976a529aec2cee56525e1165da484"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#ga9a4976a529aec2cee56525e1165da484">bitfieldInterleave</a> (uint8 x, uint8 y)</td></tr>
+<tr class="separator:ga9a4976a529aec2cee56525e1165da484"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac51c33a394593f0631fa3aa5bb778809"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL int32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#gac51c33a394593f0631fa3aa5bb778809">bitfieldInterleave</a> (int16 x, int16 y)</td></tr>
+<tr class="separator:gac51c33a394593f0631fa3aa5bb778809"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga94f3646a5667f4be56f8dcf3310e963f"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#ga94f3646a5667f4be56f8dcf3310e963f">bitfieldInterleave</a> (uint16 x, uint16 y)</td></tr>
+<tr class="separator:ga94f3646a5667f4be56f8dcf3310e963f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaebb756a24a0784e3d6fba8bd011ab77a"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL int64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#gaebb756a24a0784e3d6fba8bd011ab77a">bitfieldInterleave</a> (int32 x, int32 y)</td></tr>
+<tr class="separator:gaebb756a24a0784e3d6fba8bd011ab77a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2f1e2b3fe699e7d897ae38b2115ddcbd"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#ga2f1e2b3fe699e7d897ae38b2115ddcbd">bitfieldInterleave</a> (uint32 x, uint32 y)</td></tr>
+<tr class="separator:ga2f1e2b3fe699e7d897ae38b2115ddcbd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8fdb724dccd4a07d57efc01147102137"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL int32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#ga8fdb724dccd4a07d57efc01147102137">bitfieldInterleave</a> (int8 x, int8 y, int8 z)</td></tr>
+<tr class="separator:ga8fdb724dccd4a07d57efc01147102137"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9fc2a0dd5dcf8b00e113f272a5feca93"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#ga9fc2a0dd5dcf8b00e113f272a5feca93">bitfieldInterleave</a> (uint8 x, uint8 y, uint8 z)</td></tr>
+<tr class="separator:ga9fc2a0dd5dcf8b00e113f272a5feca93"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa901c36a842fa5d126ea650549f17b24"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL int64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#gaa901c36a842fa5d126ea650549f17b24">bitfieldInterleave</a> (int16 x, int16 y, int16 z)</td></tr>
+<tr class="separator:gaa901c36a842fa5d126ea650549f17b24"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3afd6d38881fe3948c53d4214d2197fd"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#ga3afd6d38881fe3948c53d4214d2197fd">bitfieldInterleave</a> (uint16 x, uint16 y, uint16 z)</td></tr>
+<tr class="separator:ga3afd6d38881fe3948c53d4214d2197fd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad2075d96a6640121edaa98ea534102ca"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL int64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#gad2075d96a6640121edaa98ea534102ca">bitfieldInterleave</a> (int32 x, int32 y, int32 z)</td></tr>
+<tr class="separator:gad2075d96a6640121edaa98ea534102ca"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab19fbc739fc0cf7247978602c36f7da8"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#gab19fbc739fc0cf7247978602c36f7da8">bitfieldInterleave</a> (uint32 x, uint32 y, uint32 z)</td></tr>
+<tr class="separator:gab19fbc739fc0cf7247978602c36f7da8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8a44ae22f5c953b296c42d067dccbe6d"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL int32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#ga8a44ae22f5c953b296c42d067dccbe6d">bitfieldInterleave</a> (int8 x, int8 y, int8 z, int8 w)</td></tr>
+<tr class="separator:ga8a44ae22f5c953b296c42d067dccbe6d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga14bb274d54a3c26f4919dd7ed0dd0c36"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#ga14bb274d54a3c26f4919dd7ed0dd0c36">bitfieldInterleave</a> (uint8 x, uint8 y, uint8 z, uint8 w)</td></tr>
+<tr class="separator:ga14bb274d54a3c26f4919dd7ed0dd0c36"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga180a63161e1319fbd5a53c84d0429c7a"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL int64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#ga180a63161e1319fbd5a53c84d0429c7a">bitfieldInterleave</a> (int16 x, int16 y, int16 z, int16 w)</td></tr>
+<tr class="separator:ga180a63161e1319fbd5a53c84d0429c7a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafca8768671a14c8016facccb66a89f26"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a> (uint16 x, uint16 y, uint16 z, uint16 w)</td></tr>
+<tr class="separator:gafca8768671a14c8016facccb66a89f26"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2eb49678a344ce1495bdb5586d9896b9"><td class="memTemplParams" colspan="2">template<typename genIUType > </td></tr>
+<tr class="memitem:ga2eb49678a344ce1495bdb5586d9896b9"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genIUType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00160.html#ga2eb49678a344ce1495bdb5586d9896b9">bitfieldRotateLeft</a> (genIUType In, int Shift)</td></tr>
+<tr class="separator:ga2eb49678a344ce1495bdb5586d9896b9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga410d130917d85b865718e3ebc32cf0ef"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga410d130917d85b865718e3ebc32cf0ef"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00160.html#ga410d130917d85b865718e3ebc32cf0ef">bitfieldRotateLeft</a> (vecType< T, P > const &In, int Shift)</td></tr>
+<tr class="separator:ga410d130917d85b865718e3ebc32cf0ef"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1c33d075c5fb8bd8dbfd5092bfc851ca"><td class="memTemplParams" colspan="2">template<typename genIUType > </td></tr>
+<tr class="memitem:ga1c33d075c5fb8bd8dbfd5092bfc851ca"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genIUType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00160.html#ga1c33d075c5fb8bd8dbfd5092bfc851ca">bitfieldRotateRight</a> (genIUType In, int Shift)</td></tr>
+<tr class="separator:ga1c33d075c5fb8bd8dbfd5092bfc851ca"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga96b56fd2adad1eeaee9e10dfe83904ba"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga96b56fd2adad1eeaee9e10dfe83904ba"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00160.html#ga96b56fd2adad1eeaee9e10dfe83904ba">bitfieldRotateRight</a> (vecType< T, P > const &In, int Shift)</td></tr>
+<tr class="separator:ga96b56fd2adad1eeaee9e10dfe83904ba"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad7eba518a0b71662114571ee76939f8a"><td class="memTemplParams" colspan="2">template<typename genIUType > </td></tr>
+<tr class="memitem:gad7eba518a0b71662114571ee76939f8a"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genIUType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00160.html#gad7eba518a0b71662114571ee76939f8a">mask</a> (genIUType Bits)</td></tr>
+<tr class="separator:gad7eba518a0b71662114571ee76939f8a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga073dbd8642f550b51da3572541431c1c"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecIUType> </td></tr>
+<tr class="memitem:ga073dbd8642f550b51da3572541431c1c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecIUType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00160.html#ga073dbd8642f550b51da3572541431c1c">mask</a> (vecIUType< T, P > const &v)</td></tr>
+<tr class="separator:ga073dbd8642f550b51da3572541431c1c"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00160.html">GLM_GTC_bitfield</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd>
+<dd>
+<a class="el" href="a00160.html" title="Allow to perform bit operations on integer values. ">GLM_GTC_bitfield</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00009_source.html">bitfield.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00009_source.html b/src/third_party/glm/doc/api/a00009_source.html
new file mode 100644
index 0000000..9d837c2
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00009_source.html
@@ -0,0 +1,149 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: bitfield.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_9440d7c11b99dcd7e5d369c7cf9802fe.html">gtc</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">bitfield.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00009.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// Dependencies</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "../detail/setup.hpp"</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "../detail/precision.hpp"</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include "../detail/type_int.hpp"</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "../detail/_vectorize.hpp"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <limits></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor"># pragma message("GLM: GLM_GTC_bitfield extension included")</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> {</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genIUType></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  GLM_FUNC_DECL genIUType <a class="code" href="a00160.html#ga073dbd8642f550b51da3572541431c1c">mask</a>(genIUType Bits);</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecIUType></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  GLM_FUNC_DECL vecIUType<T, P> <a class="code" href="a00160.html#ga073dbd8642f550b51da3572541431c1c">mask</a>(vecIUType<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genIUType></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  GLM_FUNC_DECL genIUType <a class="code" href="a00160.html#ga96b56fd2adad1eeaee9e10dfe83904ba">bitfieldRotateRight</a>(genIUType In, <span class="keywordtype">int</span> Shift);</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00160.html#ga96b56fd2adad1eeaee9e10dfe83904ba">bitfieldRotateRight</a>(vecType<T, P> <span class="keyword">const</span> & In, <span class="keywordtype">int</span> Shift);</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genIUType></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  GLM_FUNC_DECL genIUType <a class="code" href="a00160.html#ga410d130917d85b865718e3ebc32cf0ef">bitfieldRotateLeft</a>(genIUType In, <span class="keywordtype">int</span> Shift);</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00160.html#ga410d130917d85b865718e3ebc32cf0ef">bitfieldRotateLeft</a>(vecType<T, P> <span class="keyword">const</span> & In, <span class="keywordtype">int</span> Shift);</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genIUType></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  GLM_FUNC_DECL genIUType <a class="code" href="a00160.html#gad789042e84e8292ae95dc1af856f2ad5">bitfieldFillOne</a>(genIUType Value, <span class="keywordtype">int</span> FirstBit, <span class="keywordtype">int</span> BitCount);</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00160.html#gad789042e84e8292ae95dc1af856f2ad5">bitfieldFillOne</a>(vecType<T, P> <span class="keyword">const</span> & Value, <span class="keywordtype">int</span> FirstBit, <span class="keywordtype">int</span> BitCount);</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genIUType></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  GLM_FUNC_DECL genIUType <a class="code" href="a00160.html#gaddba3196316b0bd240295b09b43c2958">bitfieldFillZero</a>(genIUType Value, <span class="keywordtype">int</span> FirstBit, <span class="keywordtype">int</span> BitCount);</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00160.html#gaddba3196316b0bd240295b09b43c2958">bitfieldFillZero</a>(vecType<T, P> <span class="keyword">const</span> & Value, <span class="keywordtype">int</span> FirstBit, <span class="keywordtype">int</span> BitCount);</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  GLM_FUNC_DECL int16 <a class="code" href="a00160.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(int8 x, int8 y);</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  GLM_FUNC_DECL uint16 <a class="code" href="a00160.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(uint8 x, uint8 y);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  GLM_FUNC_DECL int32 <a class="code" href="a00160.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(int16 x, int16 y);</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  GLM_FUNC_DECL uint32 <a class="code" href="a00160.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(uint16 x, uint16 y);</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  GLM_FUNC_DECL int64 <a class="code" href="a00160.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(int32 x, int32 y);</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  GLM_FUNC_DECL uint64 <a class="code" href="a00160.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(uint32 x, uint32 y);</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  GLM_FUNC_DECL int32 <a class="code" href="a00160.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(int8 x, int8 y, int8 z);</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  GLM_FUNC_DECL uint32 <a class="code" href="a00160.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(uint8 x, uint8 y, uint8 z);</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  GLM_FUNC_DECL int64 <a class="code" href="a00160.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(int16 x, int16 y, int16 z);</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  GLM_FUNC_DECL uint64 <a class="code" href="a00160.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(uint16 x, uint16 y, uint16 z);</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  GLM_FUNC_DECL int64 <a class="code" href="a00160.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(int32 x, int32 y, int32 z);</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  GLM_FUNC_DECL uint64 <a class="code" href="a00160.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(uint32 x, uint32 y, uint32 z);</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  GLM_FUNC_DECL int32 <a class="code" href="a00160.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(int8 x, int8 y, int8 z, int8 w);</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  GLM_FUNC_DECL uint32 <a class="code" href="a00160.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(uint8 x, uint8 y, uint8 z, uint8 w);</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  GLM_FUNC_DECL int64 <a class="code" href="a00160.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(int16 x, int16 y, int16 z, int16 w);</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  GLM_FUNC_DECL uint64 <a class="code" href="a00160.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(uint16 x, uint16 y, uint16 z, uint16 w);</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> } <span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="preprocessor">#include "bitfield.inl"</span></div>
+<div class="ttc" id="a00160_html_gafca8768671a14c8016facccb66a89f26"><div class="ttname"><a href="a00160.html#gafca8768671a14c8016facccb66a89f26">glm::bitfieldInterleave</a></div><div class="ttdeci">GLM_FUNC_DECL uint64 bitfieldInterleave(uint16 x, uint16 y, uint16 z, uint16 w)</div><div class="ttdoc">Interleaves the bits of x, y, z and w. </div></div>
+<div class="ttc" id="a00160_html_ga410d130917d85b865718e3ebc32cf0ef"><div class="ttname"><a href="a00160.html#ga410d130917d85b865718e3ebc32cf0ef">glm::bitfieldRotateLeft</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > bitfieldRotateLeft(vecType< T, P > const &In, int Shift)</div><div class="ttdoc">Rotate all bits to the left. </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00160_html_ga073dbd8642f550b51da3572541431c1c"><div class="ttname"><a href="a00160.html#ga073dbd8642f550b51da3572541431c1c">glm::mask</a></div><div class="ttdeci">GLM_FUNC_DECL vecIUType< T, P > mask(vecIUType< T, P > const &v)</div><div class="ttdoc">Build a mask of 'count' bits. </div></div>
+<div class="ttc" id="a00160_html_gad789042e84e8292ae95dc1af856f2ad5"><div class="ttname"><a href="a00160.html#gad789042e84e8292ae95dc1af856f2ad5">glm::bitfieldFillOne</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > bitfieldFillOne(vecType< T, P > const &Value, int FirstBit, int BitCount)</div><div class="ttdoc">Set to 1 a range of bits. </div></div>
+<div class="ttc" id="a00160_html_ga96b56fd2adad1eeaee9e10dfe83904ba"><div class="ttname"><a href="a00160.html#ga96b56fd2adad1eeaee9e10dfe83904ba">glm::bitfieldRotateRight</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > bitfieldRotateRight(vecType< T, P > const &In, int Shift)</div><div class="ttdoc">Rotate all bits to the right. </div></div>
+<div class="ttc" id="a00160_html_gaddba3196316b0bd240295b09b43c2958"><div class="ttname"><a href="a00160.html#gaddba3196316b0bd240295b09b43c2958">glm::bitfieldFillZero</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > bitfieldFillZero(vecType< T, P > const &Value, int FirstBit, int BitCount)</div><div class="ttdoc">Set to 0 a range of bits. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00010.html b/src/third_party/glm/doc/api/a00010.html
new file mode 100644
index 0000000..9efdc5e
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00010.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: closest_point.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">closest_point.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00010_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gac26353282a8213e469f5e33560c1200f"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gac26353282a8213e469f5e33560c1200f"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00183.html#gac26353282a8213e469f5e33560c1200f">closestPointOnLine</a> (tvec3< T, P > const &point, tvec3< T, P > const &a, tvec3< T, P > const &b)</td></tr>
+<tr class="separator:gac26353282a8213e469f5e33560c1200f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gadc7010070bb0cacd284f560299b21660"><td class="memTemplParams" colspan="2"><a class="anchor" id="gadc7010070bb0cacd284f560299b21660"></a>
+template<typename T , precision P> </td></tr>
+<tr class="memitem:gadc7010070bb0cacd284f560299b21660"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec2< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00183.html#gadc7010070bb0cacd284f560299b21660">closestPointOnLine</a> (tvec2< T, P > const &point, tvec2< T, P > const &a, tvec2< T, P > const &b)</td></tr>
+<tr class="separator:gadc7010070bb0cacd284f560299b21660"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00183.html">GLM_GTX_closest_point</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00010_source.html">closest_point.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00010_source.html b/src/third_party/glm/doc/api/a00010_source.html
new file mode 100644
index 0000000..9f0b6f4
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00010_source.html
@@ -0,0 +1,90 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: closest_point.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">closest_point.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00010.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include "../glm.hpp"</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_closest_point extension included")</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> {</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  GLM_FUNC_DECL tvec3<T, P> <a class="code" href="a00183.html#gadc7010070bb0cacd284f560299b21660">closestPointOnLine</a>(</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  tvec3<T, P> <span class="keyword">const</span> & point,</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  tvec3<T, P> <span class="keyword">const</span> & a, </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  tvec3<T, P> <span class="keyword">const</span> & b);</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  </div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  GLM_FUNC_DECL tvec2<T, P> <a class="code" href="a00183.html#gadc7010070bb0cacd284f560299b21660">closestPointOnLine</a>(</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  tvec2<T, P> <span class="keyword">const</span> & point,</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  tvec2<T, P> <span class="keyword">const</span> & a, </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  tvec2<T, P> <span class="keyword">const</span> & b); </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> }<span class="comment">// namespace glm</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor">#include "closest_point.inl"</span></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00183_html_gadc7010070bb0cacd284f560299b21660"><div class="ttname"><a href="a00183.html#gadc7010070bb0cacd284f560299b21660">glm::closestPointOnLine</a></div><div class="ttdeci">GLM_FUNC_DECL tvec2< T, P > closestPointOnLine(tvec2< T, P > const &point, tvec2< T, P > const &a, tvec2< T, P > const &b)</div><div class="ttdoc">2d lines work as well </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00011.html b/src/third_party/glm/doc/api/a00011.html
new file mode 100644
index 0000000..0e586e7
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00011.html
@@ -0,0 +1,88 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: color_space.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_9440d7c11b99dcd7e5d369c7cf9802fe.html">gtc</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">gtc/color_space.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00011_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gad813dcd99644cafc775e83d6504ccb93"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gad813dcd99644cafc775e83d6504ccb93"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00161.html#gad813dcd99644cafc775e83d6504ccb93">convertLinearToSRGB</a> (vecType< T, P > const &ColorLinear)</td></tr>
+<tr class="separator:gad813dcd99644cafc775e83d6504ccb93"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga63f8b003da7acf44370eb47bfb8b3d42"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga63f8b003da7acf44370eb47bfb8b3d42"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00161.html#ga63f8b003da7acf44370eb47bfb8b3d42">convertLinearToSRGB</a> (vecType< T, P > const &ColorLinear, T Gamma)</td></tr>
+<tr class="separator:ga63f8b003da7acf44370eb47bfb8b3d42"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga28e98e64347cf385cadc1ceb4def55c9"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga28e98e64347cf385cadc1ceb4def55c9"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00161.html#ga28e98e64347cf385cadc1ceb4def55c9">convertSRGBToLinear</a> (vecType< T, P > const &ColorSRGB)</td></tr>
+<tr class="separator:ga28e98e64347cf385cadc1ceb4def55c9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga61c4f0efdf55c29d9cfbd26141fddef8"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga61c4f0efdf55c29d9cfbd26141fddef8"></a>
+template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga61c4f0efdf55c29d9cfbd26141fddef8"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00161.html#ga61c4f0efdf55c29d9cfbd26141fddef8">convertSRGBToLinear</a> (vecType< T, P > const &ColorSRGB, T Gamma)</td></tr>
+<tr class="separator:ga61c4f0efdf55c29d9cfbd26141fddef8"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00161.html">GLM_GTC_color_space</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd>
+<dd>
+<a class="el" href="a00161.html" title="Allow to perform bit operations on integer values. ">GLM_GTC_color_space</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00011_source.html">gtc/color_space.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00011_source.html b/src/third_party/glm/doc/api/a00011_source.html
new file mode 100644
index 0000000..88bc75c
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00011_source.html
@@ -0,0 +1,97 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: color_space.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_9440d7c11b99dcd7e5d369c7cf9802fe.html">gtc</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">gtc/color_space.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00011.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// Dependencies</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "../detail/setup.hpp"</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "../detail/precision.hpp"</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include "../exponential.hpp"</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "../vec3.hpp"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "../vec4.hpp"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <limits></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor"># pragma message("GLM: GLM_GTC_color_space extension included")</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> {</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00161.html#ga63f8b003da7acf44370eb47bfb8b3d42">convertLinearToSRGB</a>(vecType<T, P> <span class="keyword">const</span> & ColorLinear);</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00161.html#ga63f8b003da7acf44370eb47bfb8b3d42">convertLinearToSRGB</a>(vecType<T, P> <span class="keyword">const</span> & ColorLinear, T Gamma);</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00161.html#ga61c4f0efdf55c29d9cfbd26141fddef8">convertSRGBToLinear</a>(vecType<T, P> <span class="keyword">const</span> & ColorSRGB);</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="comment">// IEC 61966-2-1:1999 specification https://www.w3.org/Graphics/Color/srgb</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00161.html#ga61c4f0efdf55c29d9cfbd26141fddef8">convertSRGBToLinear</a>(vecType<T, P> <span class="keyword">const</span> & ColorSRGB, T Gamma);</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> } <span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="preprocessor">#include "color_space.inl"</span></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00161_html_ga61c4f0efdf55c29d9cfbd26141fddef8"><div class="ttname"><a href="a00161.html#ga61c4f0efdf55c29d9cfbd26141fddef8">glm::convertSRGBToLinear</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > convertSRGBToLinear(vecType< T, P > const &ColorSRGB, T Gamma)</div><div class="ttdoc">Convert a sRGB color to linear color using a custom gamma correction. </div></div>
+<div class="ttc" id="a00161_html_ga63f8b003da7acf44370eb47bfb8b3d42"><div class="ttname"><a href="a00161.html#ga63f8b003da7acf44370eb47bfb8b3d42">glm::convertLinearToSRGB</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > convertLinearToSRGB(vecType< T, P > const &ColorLinear, T Gamma)</div><div class="ttdoc">Convert a linear color to sRGB color using a custom gamma correction. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00012.html b/src/third_party/glm/doc/api/a00012.html
new file mode 100644
index 0000000..6f932a3
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00012.html
@@ -0,0 +1,91 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: color_space.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">gtx/color_space.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00012_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gae72039c00a7be2f03a3b94b37a54349a"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gae72039c00a7be2f03a3b94b37a54349a"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00184.html#gae72039c00a7be2f03a3b94b37a54349a">hsvColor</a> (tvec3< T, P > const &rgbValue)</td></tr>
+<tr class="separator:gae72039c00a7be2f03a3b94b37a54349a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa2f38a5100c3e1c7d39920df43bd8cbe"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gaa2f38a5100c3e1c7d39920df43bd8cbe"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00184.html#gaa2f38a5100c3e1c7d39920df43bd8cbe">luminosity</a> (tvec3< T, P > const &color)</td></tr>
+<tr class="separator:gaa2f38a5100c3e1c7d39920df43bd8cbe"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga36b0619e31daf57bc4a54dac2dcf34b7"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga36b0619e31daf57bc4a54dac2dcf34b7"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00184.html#ga36b0619e31daf57bc4a54dac2dcf34b7">rgbColor</a> (tvec3< T, P > const &hsvValue)</td></tr>
+<tr class="separator:ga36b0619e31daf57bc4a54dac2dcf34b7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafecfb15d58da8445103745af3348e516"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gafecfb15d58da8445103745af3348e516"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00184.html#gafecfb15d58da8445103745af3348e516">saturation</a> (T const s)</td></tr>
+<tr class="separator:gafecfb15d58da8445103745af3348e516"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga632ee8dadb44e90a05885f6f8c07d46c"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga632ee8dadb44e90a05885f6f8c07d46c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00184.html#ga632ee8dadb44e90a05885f6f8c07d46c">saturation</a> (T const s, tvec3< T, P > const &color)</td></tr>
+<tr class="separator:ga632ee8dadb44e90a05885f6f8c07d46c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2033e0566c595230714af396744e8a61"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga2033e0566c595230714af396744e8a61"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00184.html#ga2033e0566c595230714af396744e8a61">saturation</a> (T const s, tvec4< T, P > const &color)</td></tr>
+<tr class="separator:ga2033e0566c595230714af396744e8a61"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00184.html">GLM_GTX_color_space</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00012_source.html">gtx/color_space.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00012_source.html b/src/third_party/glm/doc/api/a00012_source.html
new file mode 100644
index 0000000..2b28d69
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00012_source.html
@@ -0,0 +1,107 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: color_space.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">gtx/color_space.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00012.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include "../glm.hpp"</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_color_space extension included")</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> {</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  GLM_FUNC_DECL tvec3<T, P> <a class="code" href="a00184.html#ga36b0619e31daf57bc4a54dac2dcf34b7">rgbColor</a>(</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  tvec3<T, P> <span class="keyword">const</span> & hsvValue);</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  GLM_FUNC_DECL tvec3<T, P> <a class="code" href="a00184.html#gae72039c00a7be2f03a3b94b37a54349a">hsvColor</a>(</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  tvec3<T, P> <span class="keyword">const</span> & rgbValue);</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  GLM_FUNC_DECL tmat4x4<T, defaultp> <a class="code" href="a00184.html#ga2033e0566c595230714af396744e8a61">saturation</a>(</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  T <span class="keyword">const</span> s);</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  GLM_FUNC_DECL tvec3<T, P> <a class="code" href="a00184.html#ga2033e0566c595230714af396744e8a61">saturation</a>(</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  T <span class="keyword">const</span> s,</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  tvec3<T, P> <span class="keyword">const</span> & color);</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  GLM_FUNC_DECL tvec4<T, P> <a class="code" href="a00184.html#ga2033e0566c595230714af396744e8a61">saturation</a>(</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  T <span class="keyword">const</span> s,</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  tvec4<T, P> <span class="keyword">const</span> & color);</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  </div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  GLM_FUNC_DECL T <a class="code" href="a00184.html#gaa2f38a5100c3e1c7d39920df43bd8cbe">luminosity</a>(</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  tvec3<T, P> <span class="keyword">const</span> & color);</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="preprocessor">#include "color_space.inl"</span></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00184_html_ga2033e0566c595230714af396744e8a61"><div class="ttname"><a href="a00184.html#ga2033e0566c595230714af396744e8a61">glm::saturation</a></div><div class="ttdeci">GLM_FUNC_DECL tvec4< T, P > saturation(T const s, tvec4< T, P > const &color)</div><div class="ttdoc">Modify the saturation of a color. </div></div>
+<div class="ttc" id="a00184_html_gae72039c00a7be2f03a3b94b37a54349a"><div class="ttname"><a href="a00184.html#gae72039c00a7be2f03a3b94b37a54349a">glm::hsvColor</a></div><div class="ttdeci">GLM_FUNC_DECL tvec3< T, P > hsvColor(tvec3< T, P > const &rgbValue)</div><div class="ttdoc">Converts a color from RGB color space to its color in HSV color space. </div></div>
+<div class="ttc" id="a00184_html_ga36b0619e31daf57bc4a54dac2dcf34b7"><div class="ttname"><a href="a00184.html#ga36b0619e31daf57bc4a54dac2dcf34b7">glm::rgbColor</a></div><div class="ttdeci">GLM_FUNC_DECL tvec3< T, P > rgbColor(tvec3< T, P > const &hsvValue)</div><div class="ttdoc">Converts a color from HSV color space to its color in RGB color space. </div></div>
+<div class="ttc" id="a00184_html_gaa2f38a5100c3e1c7d39920df43bd8cbe"><div class="ttname"><a href="a00184.html#gaa2f38a5100c3e1c7d39920df43bd8cbe">glm::luminosity</a></div><div class="ttdeci">GLM_FUNC_DECL T luminosity(tvec3< T, P > const &color)</div><div class="ttdoc">Compute color luminosity associating ratios (0.33, 0.59, 0.11) to RGB canals. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00013.html b/src/third_party/glm/doc/api/a00013.html
new file mode 100644
index 0000000..8d7aaba
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00013.html
@@ -0,0 +1,85 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: color_space_YCoCg.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">color_space_YCoCg.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00013_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga19481f6947c5b5482debd41e71b8c941"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga19481f6947c5b5482debd41e71b8c941"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00185.html#ga19481f6947c5b5482debd41e71b8c941">rgb2YCoCg</a> (tvec3< T, P > const &rgbColor)</td></tr>
+<tr class="separator:ga19481f6947c5b5482debd41e71b8c941"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2e534594cc8ad252d23b14fb363ae9e2"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga2e534594cc8ad252d23b14fb363ae9e2"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00185.html#ga2e534594cc8ad252d23b14fb363ae9e2">rgb2YCoCgR</a> (tvec3< T, P > const &rgbColor)</td></tr>
+<tr class="separator:ga2e534594cc8ad252d23b14fb363ae9e2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6d7e988a79b299ca1fa59f537e13800b"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga6d7e988a79b299ca1fa59f537e13800b"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00185.html#ga6d7e988a79b299ca1fa59f537e13800b">YCoCg2rgb</a> (tvec3< T, P > const &YCoCgColor)</td></tr>
+<tr class="separator:ga6d7e988a79b299ca1fa59f537e13800b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4bac5462c00df0ae89242ecdbbe5dbad"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga4bac5462c00df0ae89242ecdbbe5dbad"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00185.html#ga4bac5462c00df0ae89242ecdbbe5dbad">YCoCgR2rgb</a> (tvec3< T, P > const &YCoCgColor)</td></tr>
+<tr class="separator:ga4bac5462c00df0ae89242ecdbbe5dbad"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00185.html">GLM_GTX_color_space_YCoCg</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00013_source.html">color_space_YCoCg.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00013_source.html b/src/third_party/glm/doc/api/a00013_source.html
new file mode 100644
index 0000000..da22584
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00013_source.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: color_space_YCoCg.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">color_space_YCoCg.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00013.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include "../glm.hpp"</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_color_space_YCoCg extension included")</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> {</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  GLM_FUNC_DECL tvec3<T, P> <a class="code" href="a00185.html#ga19481f6947c5b5482debd41e71b8c941">rgb2YCoCg</a>(</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  tvec3<T, P> <span class="keyword">const</span> & <a class="code" href="a00184.html#ga36b0619e31daf57bc4a54dac2dcf34b7">rgbColor</a>);</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  GLM_FUNC_DECL tvec3<T, P> <a class="code" href="a00185.html#ga6d7e988a79b299ca1fa59f537e13800b">YCoCg2rgb</a>(</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  tvec3<T, P> <span class="keyword">const</span> & YCoCgColor);</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  GLM_FUNC_DECL tvec3<T, P> <a class="code" href="a00185.html#ga2e534594cc8ad252d23b14fb363ae9e2">rgb2YCoCgR</a>(</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  tvec3<T, P> <span class="keyword">const</span> & <a class="code" href="a00184.html#ga36b0619e31daf57bc4a54dac2dcf34b7">rgbColor</a>);</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  GLM_FUNC_DECL tvec3<T, P> <a class="code" href="a00185.html#ga4bac5462c00df0ae89242ecdbbe5dbad">YCoCgR2rgb</a>(</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  tvec3<T, P> <span class="keyword">const</span> & YCoCgColor);</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="preprocessor">#include "color_space_YCoCg.inl"</span></div>
+<div class="ttc" id="a00185_html_ga6d7e988a79b299ca1fa59f537e13800b"><div class="ttname"><a href="a00185.html#ga6d7e988a79b299ca1fa59f537e13800b">glm::YCoCg2rgb</a></div><div class="ttdeci">GLM_FUNC_DECL tvec3< T, P > YCoCg2rgb(tvec3< T, P > const &YCoCgColor)</div><div class="ttdoc">Convert a color from YCoCg color space to RGB color space. </div></div>
+<div class="ttc" id="a00185_html_ga2e534594cc8ad252d23b14fb363ae9e2"><div class="ttname"><a href="a00185.html#ga2e534594cc8ad252d23b14fb363ae9e2">glm::rgb2YCoCgR</a></div><div class="ttdeci">GLM_FUNC_DECL tvec3< T, P > rgb2YCoCgR(tvec3< T, P > const &rgbColor)</div><div class="ttdoc">Convert a color from RGB color space to YCoCgR color space. </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00185_html_ga19481f6947c5b5482debd41e71b8c941"><div class="ttname"><a href="a00185.html#ga19481f6947c5b5482debd41e71b8c941">glm::rgb2YCoCg</a></div><div class="ttdeci">GLM_FUNC_DECL tvec3< T, P > rgb2YCoCg(tvec3< T, P > const &rgbColor)</div><div class="ttdoc">Convert a color from RGB color space to YCoCg color space. </div></div>
+<div class="ttc" id="a00184_html_ga36b0619e31daf57bc4a54dac2dcf34b7"><div class="ttname"><a href="a00184.html#ga36b0619e31daf57bc4a54dac2dcf34b7">glm::rgbColor</a></div><div class="ttdeci">GLM_FUNC_DECL tvec3< T, P > rgbColor(tvec3< T, P > const &hsvValue)</div><div class="ttdoc">Converts a color from HSV color space to its color in RGB color space. </div></div>
+<div class="ttc" id="a00185_html_ga4bac5462c00df0ae89242ecdbbe5dbad"><div class="ttname"><a href="a00185.html#ga4bac5462c00df0ae89242ecdbbe5dbad">glm::YCoCgR2rgb</a></div><div class="ttdeci">GLM_FUNC_DECL tvec3< T, P > YCoCgR2rgb(tvec3< T, P > const &YCoCgColor)</div><div class="ttdoc">Convert a color from YCoCgR color space to RGB color space. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00014.html b/src/third_party/glm/doc/api/a00014.html
new file mode 100644
index 0000000..e30426b
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00014.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: common.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">common.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00014_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+
+<p>Definition in file <a class="el" href="a00014_source.html">common.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00014_source.html b/src/third_party/glm/doc/api/a00014_source.html
new file mode 100644
index 0000000..ce900ea
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00014_source.html
@@ -0,0 +1,65 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: common.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">common.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00014.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include "<a class="code" href="a00029.html">detail/func_common.hpp</a>"</span></div>
+<div class="ttc" id="a00029_html"><div class="ttname"><a href="a00029.html">func_common.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00015.html b/src/third_party/glm/doc/api/a00015.html
new file mode 100644
index 0000000..b58716c
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00015.html
@@ -0,0 +1,81 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: common.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">gtx/common.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00015_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga2580f50d4064557d62f4a533dfc6c7e3"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga2580f50d4064557d62f4a533dfc6c7e3"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00186.html#ga2580f50d4064557d62f4a533dfc6c7e3">fmod</a> (vecType< T, P > const &v)</td></tr>
+<tr class="separator:ga2580f50d4064557d62f4a533dfc6c7e3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga74aa7c7462245d83bd5a9edf9c6c2d91"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga74aa7c7462245d83bd5a9edf9c6c2d91"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType::bool_type </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00186.html#ga74aa7c7462245d83bd5a9edf9c6c2d91">isdenormal</a> (genType const &x)</td></tr>
+<tr class="separator:ga74aa7c7462245d83bd5a9edf9c6c2d91"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00186.html">GLM_GTX_common</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd>
+<dd>
+gtc_half_float (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00015_source.html">gtx/common.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00015_source.html b/src/third_party/glm/doc/api/a00015_source.html
new file mode 100644
index 0000000..61e22f7
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00015_source.html
@@ -0,0 +1,88 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: common.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">gtx/common.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00015.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// Dependencies:</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "../vec2.hpp"</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "../vec3.hpp"</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include "../vec4.hpp"</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "../gtc/vec1.hpp"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_common extension included")</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> {</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  GLM_FUNC_DECL <span class="keyword">typename</span> genType::bool_type <a class="code" href="a00186.html#ga74aa7c7462245d83bd5a9edf9c6c2d91">isdenormal</a>(genType <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00186.html#ga2580f50d4064557d62f4a533dfc6c7e3">fmod</a>(vecType<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="preprocessor">#include "common.inl"</span></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00186_html_ga74aa7c7462245d83bd5a9edf9c6c2d91"><div class="ttname"><a href="a00186.html#ga74aa7c7462245d83bd5a9edf9c6c2d91">glm::isdenormal</a></div><div class="ttdeci">GLM_FUNC_DECL genType::bool_type isdenormal(genType const &x)</div><div class="ttdoc">Returns true if x is a denormalized number Numbers whose absolute value is too small to be represente...</div></div>
+<div class="ttc" id="a00186_html_ga2580f50d4064557d62f4a533dfc6c7e3"><div class="ttname"><a href="a00186.html#ga2580f50d4064557d62f4a533dfc6c7e3">glm::fmod</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > fmod(vecType< T, P > const &v)</div><div class="ttdoc">Similar to 'mod' but with a different rounding and integer support. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00016.html b/src/third_party/glm/doc/api/a00016.html
new file mode 100644
index 0000000..36a0921
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00016.html
@@ -0,0 +1,327 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: compatibility.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#typedef-members">Typedefs</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">compatibility.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00016_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:gaddcd7aa2e30e61af5b38660613d3979e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaddcd7aa2e30e61af5b38660613d3979e"></a>
+typedef bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gaddcd7aa2e30e61af5b38660613d3979e">bool1</a></td></tr>
+<tr class="separator:gaddcd7aa2e30e61af5b38660613d3979e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7f895c936f0c29c8729afbbf22806090"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7f895c936f0c29c8729afbbf22806090"></a>
+typedef bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga7f895c936f0c29c8729afbbf22806090">bool1x1</a></td></tr>
+<tr class="separator:ga7f895c936f0c29c8729afbbf22806090"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafa8d0bc8dfa7eeb928208305714f648d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gafa8d0bc8dfa7eeb928208305714f648d"></a>
+typedef tvec2< bool, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gafa8d0bc8dfa7eeb928208305714f648d">bool2</a></td></tr>
+<tr class="separator:gafa8d0bc8dfa7eeb928208305714f648d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2bfb53bc320966c85149934fffb0329d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2bfb53bc320966c85149934fffb0329d"></a>
+typedef tmat2x2< bool, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga2bfb53bc320966c85149934fffb0329d">bool2x2</a></td></tr>
+<tr class="separator:ga2bfb53bc320966c85149934fffb0329d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad02e7dff74039bb1454643e293d85dfe"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad02e7dff74039bb1454643e293d85dfe"></a>
+typedef tmat2x3< bool, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gad02e7dff74039bb1454643e293d85dfe">bool2x3</a></td></tr>
+<tr class="separator:gad02e7dff74039bb1454643e293d85dfe"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga379c0869949e8a69c3d06d7637caa5d7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga379c0869949e8a69c3d06d7637caa5d7"></a>
+typedef tmat2x4< bool, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga379c0869949e8a69c3d06d7637caa5d7">bool2x4</a></td></tr>
+<tr class="separator:ga379c0869949e8a69c3d06d7637caa5d7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab8d74ea4c4f4bd980b650ffb27cdb659"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gab8d74ea4c4f4bd980b650ffb27cdb659"></a>
+typedef tvec3< bool, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gab8d74ea4c4f4bd980b650ffb27cdb659">bool3</a></td></tr>
+<tr class="separator:gab8d74ea4c4f4bd980b650ffb27cdb659"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0fc7ecb53df5be5f9d766fbbfe5190d7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga0fc7ecb53df5be5f9d766fbbfe5190d7"></a>
+typedef tmat3x2< bool, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga0fc7ecb53df5be5f9d766fbbfe5190d7">bool3x2</a></td></tr>
+<tr class="separator:ga0fc7ecb53df5be5f9d766fbbfe5190d7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae621c9eabcba552eea5f6ade1f403605"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae621c9eabcba552eea5f6ade1f403605"></a>
+typedef tmat3x3< bool, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gae621c9eabcba552eea5f6ade1f403605">bool3x3</a></td></tr>
+<tr class="separator:gae621c9eabcba552eea5f6ade1f403605"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad13f8250579ebf79760dcf64215ddb17"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad13f8250579ebf79760dcf64215ddb17"></a>
+typedef tmat3x4< bool, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gad13f8250579ebf79760dcf64215ddb17">bool3x4</a></td></tr>
+<tr class="separator:gad13f8250579ebf79760dcf64215ddb17"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6e79dbfab5917c467a154638ba27898e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga6e79dbfab5917c467a154638ba27898e"></a>
+typedef tvec4< bool, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga6e79dbfab5917c467a154638ba27898e">bool4</a></td></tr>
+<tr class="separator:ga6e79dbfab5917c467a154638ba27898e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga184ee05ac2bbbf0a91dd364ba8e528db"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga184ee05ac2bbbf0a91dd364ba8e528db"></a>
+typedef tmat4x2< bool, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga184ee05ac2bbbf0a91dd364ba8e528db">bool4x2</a></td></tr>
+<tr class="separator:ga184ee05ac2bbbf0a91dd364ba8e528db"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga83e4c62ab1addfe708dc3409cc0e5dfb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga83e4c62ab1addfe708dc3409cc0e5dfb"></a>
+typedef tmat4x3< bool, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga83e4c62ab1addfe708dc3409cc0e5dfb">bool4x3</a></td></tr>
+<tr class="separator:ga83e4c62ab1addfe708dc3409cc0e5dfb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9770607032813e7b0ca7362a47efea1e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga9770607032813e7b0ca7362a47efea1e"></a>
+typedef tmat4x4< bool, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga9770607032813e7b0ca7362a47efea1e">bool4x4</a></td></tr>
+<tr class="separator:ga9770607032813e7b0ca7362a47efea1e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga20b861a9b6e2a300323671c57a02525b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga20b861a9b6e2a300323671c57a02525b"></a>
+typedef double </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga20b861a9b6e2a300323671c57a02525b">double1</a></td></tr>
+<tr class="separator:ga20b861a9b6e2a300323671c57a02525b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga45f16a4dd0db1f199afaed9fd12fe9a8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga45f16a4dd0db1f199afaed9fd12fe9a8"></a>
+typedef double </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga45f16a4dd0db1f199afaed9fd12fe9a8">double1x1</a></td></tr>
+<tr class="separator:ga45f16a4dd0db1f199afaed9fd12fe9a8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa16a13c6f2768e83ca133430e82ab89e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaa16a13c6f2768e83ca133430e82ab89e"></a>
+typedef tvec2< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gaa16a13c6f2768e83ca133430e82ab89e">double2</a></td></tr>
+<tr class="separator:gaa16a13c6f2768e83ca133430e82ab89e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga320d0a71a4ad9f14a1992d40546cffa7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga320d0a71a4ad9f14a1992d40546cffa7"></a>
+typedef tmat2x2< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga320d0a71a4ad9f14a1992d40546cffa7">double2x2</a></td></tr>
+<tr class="separator:ga320d0a71a4ad9f14a1992d40546cffa7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gade37cf30c69bacb41ceea7e32717eac7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gade37cf30c69bacb41ceea7e32717eac7"></a>
+typedef tmat2x3< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gade37cf30c69bacb41ceea7e32717eac7">double2x3</a></td></tr>
+<tr class="separator:gade37cf30c69bacb41ceea7e32717eac7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf923922adf744404d5bfb3fafb7d0d8e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaf923922adf744404d5bfb3fafb7d0d8e"></a>
+typedef tmat2x4< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gaf923922adf744404d5bfb3fafb7d0d8e">double2x4</a></td></tr>
+<tr class="separator:gaf923922adf744404d5bfb3fafb7d0d8e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaed4bc64196bd25d46f6a1f417320a391"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaed4bc64196bd25d46f6a1f417320a391"></a>
+typedef tvec3< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gaed4bc64196bd25d46f6a1f417320a391">double3</a></td></tr>
+<tr class="separator:gaed4bc64196bd25d46f6a1f417320a391"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaeaac4d0e18164e4d2fe54432c0fbbcf6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaeaac4d0e18164e4d2fe54432c0fbbcf6"></a>
+typedef tmat3x2< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gaeaac4d0e18164e4d2fe54432c0fbbcf6">double3x2</a></td></tr>
+<tr class="separator:gaeaac4d0e18164e4d2fe54432c0fbbcf6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac934f579ee5cf3cbdbb25b73f2640c0a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac934f579ee5cf3cbdbb25b73f2640c0a"></a>
+typedef tmat3x3< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gac934f579ee5cf3cbdbb25b73f2640c0a">double3x3</a></td></tr>
+<tr class="separator:gac934f579ee5cf3cbdbb25b73f2640c0a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaad84a1ea83be8fce04c1570c5e719413"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaad84a1ea83be8fce04c1570c5e719413"></a>
+typedef tmat3x4< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gaad84a1ea83be8fce04c1570c5e719413">double3x4</a></td></tr>
+<tr class="separator:gaad84a1ea83be8fce04c1570c5e719413"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab8bbb086c9a6c2deffbe0e80afd6be56"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gab8bbb086c9a6c2deffbe0e80afd6be56"></a>
+typedef tvec4< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gab8bbb086c9a6c2deffbe0e80afd6be56">double4</a></td></tr>
+<tr class="separator:gab8bbb086c9a6c2deffbe0e80afd6be56"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2f87500119da15e35e4a74780ba512bd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2f87500119da15e35e4a74780ba512bd"></a>
+typedef tmat4x2< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga2f87500119da15e35e4a74780ba512bd">double4x2</a></td></tr>
+<tr class="separator:ga2f87500119da15e35e4a74780ba512bd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa4e6d53c03780dfa76bd399324f9fe37"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaa4e6d53c03780dfa76bd399324f9fe37"></a>
+typedef tmat4x3< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gaa4e6d53c03780dfa76bd399324f9fe37">double4x3</a></td></tr>
+<tr class="separator:gaa4e6d53c03780dfa76bd399324f9fe37"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga686a3a5590f0a0e721faba08bda301d6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga686a3a5590f0a0e721faba08bda301d6"></a>
+typedef tmat4x4< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga686a3a5590f0a0e721faba08bda301d6">double4x4</a></td></tr>
+<tr class="separator:ga686a3a5590f0a0e721faba08bda301d6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf5208d01f6c6fbcb7bb55d610b9c0ead"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaf5208d01f6c6fbcb7bb55d610b9c0ead"></a>
+typedef float </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gaf5208d01f6c6fbcb7bb55d610b9c0ead">float1</a></td></tr>
+<tr class="separator:gaf5208d01f6c6fbcb7bb55d610b9c0ead"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga73720b8dc4620835b17f74d428f98c0c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga73720b8dc4620835b17f74d428f98c0c"></a>
+typedef float </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga73720b8dc4620835b17f74d428f98c0c">float1x1</a></td></tr>
+<tr class="separator:ga73720b8dc4620835b17f74d428f98c0c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga872a70333dd25af68b1ebba485be9e42"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga872a70333dd25af68b1ebba485be9e42"></a>
+typedef tvec2< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga872a70333dd25af68b1ebba485be9e42">float2</a></td></tr>
+<tr class="separator:ga872a70333dd25af68b1ebba485be9e42"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaad93cbc2b863e363d53d405d0451d03e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaad93cbc2b863e363d53d405d0451d03e"></a>
+typedef tmat2x2< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gaad93cbc2b863e363d53d405d0451d03e">float2x2</a></td></tr>
+<tr class="separator:gaad93cbc2b863e363d53d405d0451d03e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga098c33a30f901f4f6a76969d6db6b01b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga098c33a30f901f4f6a76969d6db6b01b"></a>
+typedef tmat2x3< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga098c33a30f901f4f6a76969d6db6b01b">float2x3</a></td></tr>
+<tr class="separator:ga098c33a30f901f4f6a76969d6db6b01b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab2ce4c366abc06c8bf7fe097ecea0dde"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gab2ce4c366abc06c8bf7fe097ecea0dde"></a>
+typedef tmat2x4< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gab2ce4c366abc06c8bf7fe097ecea0dde">float2x4</a></td></tr>
+<tr class="separator:gab2ce4c366abc06c8bf7fe097ecea0dde"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2bfa618285894e34f299e4984f092d56"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2bfa618285894e34f299e4984f092d56"></a>
+typedef tvec3< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga2bfa618285894e34f299e4984f092d56">float3</a></td></tr>
+<tr class="separator:ga2bfa618285894e34f299e4984f092d56"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf30014e7b6874f45d58eb580d04764ff"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaf30014e7b6874f45d58eb580d04764ff"></a>
+typedef tmat3x2< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gaf30014e7b6874f45d58eb580d04764ff">float3x2</a></td></tr>
+<tr class="separator:gaf30014e7b6874f45d58eb580d04764ff"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2692a729a69615d72dbebbdd0eba2363"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2692a729a69615d72dbebbdd0eba2363"></a>
+typedef tmat3x3< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga2692a729a69615d72dbebbdd0eba2363">float3x3</a></td></tr>
+<tr class="separator:ga2692a729a69615d72dbebbdd0eba2363"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac38c8929ccc87a2dc81eaab97ad5190e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac38c8929ccc87a2dc81eaab97ad5190e"></a>
+typedef tmat3x4< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gac38c8929ccc87a2dc81eaab97ad5190e">float3x4</a></td></tr>
+<tr class="separator:gac38c8929ccc87a2dc81eaab97ad5190e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5d49ed44dd9a9e944abc30371fc9045b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga5d49ed44dd9a9e944abc30371fc9045b"></a>
+typedef tvec4< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga5d49ed44dd9a9e944abc30371fc9045b">float4</a></td></tr>
+<tr class="separator:ga5d49ed44dd9a9e944abc30371fc9045b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga39a2af7aa8f2d29ca40afd2256c0e7c8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga39a2af7aa8f2d29ca40afd2256c0e7c8"></a>
+typedef tmat4x2< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga39a2af7aa8f2d29ca40afd2256c0e7c8">float4x2</a></td></tr>
+<tr class="separator:ga39a2af7aa8f2d29ca40afd2256c0e7c8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad749b26be059f35394fd71c7f7a44034"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad749b26be059f35394fd71c7f7a44034"></a>
+typedef tmat4x3< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gad749b26be059f35394fd71c7f7a44034">float4x3</a></td></tr>
+<tr class="separator:gad749b26be059f35394fd71c7f7a44034"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf40529862492ded2f3b96a6c886f6136"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaf40529862492ded2f3b96a6c886f6136"></a>
+typedef tmat4x4< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gaf40529862492ded2f3b96a6c886f6136">float4x4</a></td></tr>
+<tr class="separator:gaf40529862492ded2f3b96a6c886f6136"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0670a2111b5e4a6410bd027fa0232fc3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga0670a2111b5e4a6410bd027fa0232fc3"></a>
+typedef int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga0670a2111b5e4a6410bd027fa0232fc3">int1</a></td></tr>
+<tr class="separator:ga0670a2111b5e4a6410bd027fa0232fc3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga056ffe02d3a45af626f8e62221881c7a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga056ffe02d3a45af626f8e62221881c7a"></a>
+typedef int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga056ffe02d3a45af626f8e62221881c7a">int1x1</a></td></tr>
+<tr class="separator:ga056ffe02d3a45af626f8e62221881c7a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2eca687990bf3a08ef28bc4a9f2fe700"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2eca687990bf3a08ef28bc4a9f2fe700"></a>
+typedef tvec2< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga2eca687990bf3a08ef28bc4a9f2fe700">int2</a></td></tr>
+<tr class="separator:ga2eca687990bf3a08ef28bc4a9f2fe700"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab1c5d0631a6ae34e28bfb2851da387cc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gab1c5d0631a6ae34e28bfb2851da387cc"></a>
+typedef tmat2x2< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gab1c5d0631a6ae34e28bfb2851da387cc">int2x2</a></td></tr>
+<tr class="separator:gab1c5d0631a6ae34e28bfb2851da387cc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6dc93f0794eb5fadd7f68b85141a2434"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga6dc93f0794eb5fadd7f68b85141a2434"></a>
+typedef tmat2x3< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga6dc93f0794eb5fadd7f68b85141a2434">int2x3</a></td></tr>
+<tr class="separator:ga6dc93f0794eb5fadd7f68b85141a2434"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad5da9e1b4e0c64c5436b5696ab49540e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad5da9e1b4e0c64c5436b5696ab49540e"></a>
+typedef tmat2x4< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gad5da9e1b4e0c64c5436b5696ab49540e">int2x4</a></td></tr>
+<tr class="separator:gad5da9e1b4e0c64c5436b5696ab49540e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaaa6ceedf08a85e5fd73a482bc8b77b88"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaaa6ceedf08a85e5fd73a482bc8b77b88"></a>
+typedef tvec3< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gaaa6ceedf08a85e5fd73a482bc8b77b88">int3</a></td></tr>
+<tr class="separator:gaaa6ceedf08a85e5fd73a482bc8b77b88"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa98b1a06b802c975f02a5583f43632db"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaa98b1a06b802c975f02a5583f43632db"></a>
+typedef tmat3x2< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gaa98b1a06b802c975f02a5583f43632db">int3x2</a></td></tr>
+<tr class="separator:gaa98b1a06b802c975f02a5583f43632db"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga20c4d23defbc123ac4745c9b4262156f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga20c4d23defbc123ac4745c9b4262156f"></a>
+typedef tmat3x3< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga20c4d23defbc123ac4745c9b4262156f">int3x3</a></td></tr>
+<tr class="separator:ga20c4d23defbc123ac4745c9b4262156f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7b00c53838143bce963177122ab92c39"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7b00c53838143bce963177122ab92c39"></a>
+typedef tmat3x4< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga7b00c53838143bce963177122ab92c39">int3x4</a></td></tr>
+<tr class="separator:ga7b00c53838143bce963177122ab92c39"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab19c2df22e9b14081390fabd074081f1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gab19c2df22e9b14081390fabd074081f1"></a>
+typedef tvec4< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gab19c2df22e9b14081390fabd074081f1">int4</a></td></tr>
+<tr class="separator:gab19c2df22e9b14081390fabd074081f1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa53815539021200c4e10fd282832dcd3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaa53815539021200c4e10fd282832dcd3"></a>
+typedef tmat4x2< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gaa53815539021200c4e10fd282832dcd3">int4x2</a></td></tr>
+<tr class="separator:gaa53815539021200c4e10fd282832dcd3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4a3bf0ecd6f6ff60836c5bee26c14abe"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga4a3bf0ecd6f6ff60836c5bee26c14abe"></a>
+typedef tmat4x3< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga4a3bf0ecd6f6ff60836c5bee26c14abe">int4x3</a></td></tr>
+<tr class="separator:ga4a3bf0ecd6f6ff60836c5bee26c14abe"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3bacf576b4b29f2f2959abff7a36652d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3bacf576b4b29f2f2959abff7a36652d"></a>
+typedef tmat4x4< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga3bacf576b4b29f2f2959abff7a36652d">int4x4</a></td></tr>
+<tr class="separator:ga3bacf576b4b29f2f2959abff7a36652d"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gac63011205bf6d0be82589dc56dd26708"><td class="memTemplParams" colspan="2"><a class="anchor" id="gac63011205bf6d0be82589dc56dd26708"></a>
+template<typename T , precision P> </td></tr>
+<tr class="memitem:gac63011205bf6d0be82589dc56dd26708"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00187.html#gac63011205bf6d0be82589dc56dd26708">atan2</a> (T x, T y)</td></tr>
+<tr class="separator:gac63011205bf6d0be82589dc56dd26708"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga525f3e849d0fc64807f8ab571b4545f9"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga525f3e849d0fc64807f8ab571b4545f9"></a>
+template<typename T , precision P> </td></tr>
+<tr class="memitem:ga525f3e849d0fc64807f8ab571b4545f9"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER tvec2< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00187.html#ga525f3e849d0fc64807f8ab571b4545f9">atan2</a> (const tvec2< T, P > &x, const tvec2< T, P > &y)</td></tr>
+<tr class="separator:ga525f3e849d0fc64807f8ab571b4545f9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad328042b6734d3f2c49c0ec1328b14c0"><td class="memTemplParams" colspan="2"><a class="anchor" id="gad328042b6734d3f2c49c0ec1328b14c0"></a>
+template<typename T , precision P> </td></tr>
+<tr class="memitem:gad328042b6734d3f2c49c0ec1328b14c0"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00187.html#gad328042b6734d3f2c49c0ec1328b14c0">atan2</a> (const tvec3< T, P > &x, const tvec3< T, P > &y)</td></tr>
+<tr class="separator:gad328042b6734d3f2c49c0ec1328b14c0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga09d39c391a509a045b6c7061f15bdff5"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga09d39c391a509a045b6c7061f15bdff5"></a>
+template<typename T , precision P> </td></tr>
+<tr class="memitem:ga09d39c391a509a045b6c7061f15bdff5"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER tvec4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00187.html#ga09d39c391a509a045b6c7061f15bdff5">atan2</a> (const tvec4< T, P > &x, const tvec4< T, P > &y)</td></tr>
+<tr class="separator:ga09d39c391a509a045b6c7061f15bdff5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf4b04dcd3526996d68c1bfe17bfc8657"><td class="memTemplParams" colspan="2"><a class="anchor" id="gaf4b04dcd3526996d68c1bfe17bfc8657"></a>
+template<typename genType > </td></tr>
+<tr class="memitem:gaf4b04dcd3526996d68c1bfe17bfc8657"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00187.html#gaf4b04dcd3526996d68c1bfe17bfc8657">isfinite</a> (genType const &x)</td></tr>
+<tr class="separator:gaf4b04dcd3526996d68c1bfe17bfc8657"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga553e2e95b06a0f70c718605998889d3b"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga553e2e95b06a0f70c718605998889d3b"></a>
+template<typename T , precision P> </td></tr>
+<tr class="memitem:ga553e2e95b06a0f70c718605998889d3b"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec1< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00187.html#ga553e2e95b06a0f70c718605998889d3b">isfinite</a> (const tvec1< T, P > &x)</td></tr>
+<tr class="separator:ga553e2e95b06a0f70c718605998889d3b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7dd492aa7d6ec21715f9a91b6e5e596a"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga7dd492aa7d6ec21715f9a91b6e5e596a"></a>
+template<typename T , precision P> </td></tr>
+<tr class="memitem:ga7dd492aa7d6ec21715f9a91b6e5e596a"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec2< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00187.html#ga7dd492aa7d6ec21715f9a91b6e5e596a">isfinite</a> (const tvec2< T, P > &x)</td></tr>
+<tr class="separator:ga7dd492aa7d6ec21715f9a91b6e5e596a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1be9593d810fceb278a2854da8a25273"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga1be9593d810fceb278a2854da8a25273"></a>
+template<typename T , precision P> </td></tr>
+<tr class="memitem:ga1be9593d810fceb278a2854da8a25273"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00187.html#ga1be9593d810fceb278a2854da8a25273">isfinite</a> (const tvec3< T, P > &x)</td></tr>
+<tr class="separator:ga1be9593d810fceb278a2854da8a25273"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8c6a59e2f2ac84fba0c5932f1c35bf7a"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga8c6a59e2f2ac84fba0c5932f1c35bf7a"></a>
+template<typename T , precision P> </td></tr>
+<tr class="memitem:ga8c6a59e2f2ac84fba0c5932f1c35bf7a"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec4< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00187.html#ga8c6a59e2f2ac84fba0c5932f1c35bf7a">isfinite</a> (const tvec4< T, P > &x)</td></tr>
+<tr class="separator:ga8c6a59e2f2ac84fba0c5932f1c35bf7a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5494ba3a95ea6594c86fc75236886864"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga5494ba3a95ea6594c86fc75236886864"></a>
+template<typename T > </td></tr>
+<tr class="memitem:ga5494ba3a95ea6594c86fc75236886864"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00187.html#ga5494ba3a95ea6594c86fc75236886864">lerp</a> (T x, T y, T a)</td></tr>
+<tr class="separator:ga5494ba3a95ea6594c86fc75236886864"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0aa79a146332650a1eb18ae996c653fe"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga0aa79a146332650a1eb18ae996c653fe"></a>
+template<typename T , precision P> </td></tr>
+<tr class="memitem:ga0aa79a146332650a1eb18ae996c653fe"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER tvec2< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00187.html#ga0aa79a146332650a1eb18ae996c653fe">lerp</a> (const tvec2< T, P > &x, const tvec2< T, P > &y, T a)</td></tr>
+<tr class="separator:ga0aa79a146332650a1eb18ae996c653fe"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf4c885ac72b8879b05777cb516c555c9"><td class="memTemplParams" colspan="2"><a class="anchor" id="gaf4c885ac72b8879b05777cb516c555c9"></a>
+template<typename T , precision P> </td></tr>
+<tr class="memitem:gaf4c885ac72b8879b05777cb516c555c9"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00187.html#gaf4c885ac72b8879b05777cb516c555c9">lerp</a> (const tvec3< T, P > &x, const tvec3< T, P > &y, T a)</td></tr>
+<tr class="separator:gaf4c885ac72b8879b05777cb516c555c9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga363d5d069d31a6c2cdd1e9589dde4a60"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga363d5d069d31a6c2cdd1e9589dde4a60"></a>
+template<typename T , precision P> </td></tr>
+<tr class="memitem:ga363d5d069d31a6c2cdd1e9589dde4a60"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER tvec4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00187.html#ga363d5d069d31a6c2cdd1e9589dde4a60">lerp</a> (const tvec4< T, P > &x, const tvec4< T, P > &y, T a)</td></tr>
+<tr class="separator:ga363d5d069d31a6c2cdd1e9589dde4a60"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7609b44d8aefc5a277efe73395ff4070"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga7609b44d8aefc5a277efe73395ff4070"></a>
+template<typename T , precision P> </td></tr>
+<tr class="memitem:ga7609b44d8aefc5a277efe73395ff4070"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER tvec2< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00187.html#ga7609b44d8aefc5a277efe73395ff4070">lerp</a> (const tvec2< T, P > &x, const tvec2< T, P > &y, const tvec2< T, P > &a)</td></tr>
+<tr class="separator:ga7609b44d8aefc5a277efe73395ff4070"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga90a1d1364a8d078846857178bdcc9af1"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga90a1d1364a8d078846857178bdcc9af1"></a>
+template<typename T , precision P> </td></tr>
+<tr class="memitem:ga90a1d1364a8d078846857178bdcc9af1"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00187.html#ga90a1d1364a8d078846857178bdcc9af1">lerp</a> (const tvec3< T, P > &x, const tvec3< T, P > &y, const tvec3< T, P > &a)</td></tr>
+<tr class="separator:ga90a1d1364a8d078846857178bdcc9af1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae4b0244b0d882657bed0a99dfa33f379"><td class="memTemplParams" colspan="2"><a class="anchor" id="gae4b0244b0d882657bed0a99dfa33f379"></a>
+template<typename T , precision P> </td></tr>
+<tr class="memitem:gae4b0244b0d882657bed0a99dfa33f379"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER tvec4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00187.html#gae4b0244b0d882657bed0a99dfa33f379">lerp</a> (const tvec4< T, P > &x, const tvec4< T, P > &y, const tvec4< T, P > &a)</td></tr>
+<tr class="separator:gae4b0244b0d882657bed0a99dfa33f379"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0fd09e616d122bc2ed9726682ffd44b7"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga0fd09e616d122bc2ed9726682ffd44b7"></a>
+template<typename T , precision P> </td></tr>
+<tr class="memitem:ga0fd09e616d122bc2ed9726682ffd44b7"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00187.html#ga0fd09e616d122bc2ed9726682ffd44b7">saturate</a> (T x)</td></tr>
+<tr class="separator:ga0fd09e616d122bc2ed9726682ffd44b7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5815a26488231dfdf92242cf0c2d2107"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga5815a26488231dfdf92242cf0c2d2107"></a>
+template<typename T , precision P> </td></tr>
+<tr class="memitem:ga5815a26488231dfdf92242cf0c2d2107"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER tvec2< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00187.html#ga5815a26488231dfdf92242cf0c2d2107">saturate</a> (const tvec2< T, P > &x)</td></tr>
+<tr class="separator:ga5815a26488231dfdf92242cf0c2d2107"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga02ed1a53c6df104d56b69f8fb5e9af1b"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga02ed1a53c6df104d56b69f8fb5e9af1b"></a>
+template<typename T , precision P> </td></tr>
+<tr class="memitem:ga02ed1a53c6df104d56b69f8fb5e9af1b"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00187.html#ga02ed1a53c6df104d56b69f8fb5e9af1b">saturate</a> (const tvec3< T, P > &x)</td></tr>
+<tr class="separator:ga02ed1a53c6df104d56b69f8fb5e9af1b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga63791409bdef9745b956406afe3157f1"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga63791409bdef9745b956406afe3157f1"></a>
+template<typename T , precision P> </td></tr>
+<tr class="memitem:ga63791409bdef9745b956406afe3157f1"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER tvec4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00187.html#ga63791409bdef9745b956406afe3157f1">saturate</a> (const tvec4< T, P > &x)</td></tr>
+<tr class="separator:ga63791409bdef9745b956406afe3157f1"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00187.html">GLM_GTX_compatibility</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd>
+<dd>
+gtc_half_float (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00016_source.html">compatibility.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00016_source.html b/src/third_party/glm/doc/api/a00016_source.html
new file mode 100644
index 0000000..6a6d190
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00016_source.html
@@ -0,0 +1,239 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: compatibility.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">compatibility.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00016.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "../glm.hpp"</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "../gtc/quaternion.hpp"</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_compatibility extension included")</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#if GLM_COMPILER & GLM_COMPILER_VC</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor"># include <cfloat></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#elif GLM_COMPILER & GLM_COMPILER_GCC</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor"># include <cmath></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor"># if(GLM_PLATFORM & GLM_PLATFORM_ANDROID)</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor"># undef isfinite</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#endif//GLM_COMPILER</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> {</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="a00187.html#ga5494ba3a95ea6594c86fc75236886864"> 38</a></span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T> GLM_FUNC_QUALIFIER T <a class="code" href="a00187.html#gae4b0244b0d882657bed0a99dfa33f379">lerp</a>(T x, T y, T a){<span class="keywordflow">return</span> <a class="code" href="a00146.html#gadccbaffe46f369cf1a96b2aef92cbfdd">mix</a>(x, y, a);} </div>
+<div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="a00187.html#ga0aa79a146332650a1eb18ae996c653fe"> 39</a></span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> GLM_FUNC_QUALIFIER tvec2<T, P> <a class="code" href="a00187.html#gae4b0244b0d882657bed0a99dfa33f379">lerp</a>(<span class="keyword">const</span> tvec2<T, P>& x, <span class="keyword">const</span> tvec2<T, P>& y, T a){<span class="keywordflow">return</span> <a class="code" href="a00146.html#gadccbaffe46f369cf1a96b2aef92cbfdd">mix</a>(x, y, a);} </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="a00187.html#gaf4c885ac72b8879b05777cb516c555c9"> 41</a></span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> GLM_FUNC_QUALIFIER tvec3<T, P> <a class="code" href="a00187.html#gae4b0244b0d882657bed0a99dfa33f379">lerp</a>(<span class="keyword">const</span> tvec3<T, P>& x, <span class="keyword">const</span> tvec3<T, P>& y, T a){<span class="keywordflow">return</span> <a class="code" href="a00146.html#gadccbaffe46f369cf1a96b2aef92cbfdd">mix</a>(x, y, a);} </div>
+<div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="a00187.html#ga363d5d069d31a6c2cdd1e9589dde4a60"> 42</a></span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> GLM_FUNC_QUALIFIER tvec4<T, P> <a class="code" href="a00187.html#gae4b0244b0d882657bed0a99dfa33f379">lerp</a>(<span class="keyword">const</span> tvec4<T, P>& x, <span class="keyword">const</span> tvec4<T, P>& y, T a){<span class="keywordflow">return</span> <a class="code" href="a00146.html#gadccbaffe46f369cf1a96b2aef92cbfdd">mix</a>(x, y, a);} </div>
+<div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="a00187.html#ga7609b44d8aefc5a277efe73395ff4070"> 43</a></span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> GLM_FUNC_QUALIFIER tvec2<T, P> <a class="code" href="a00187.html#gae4b0244b0d882657bed0a99dfa33f379">lerp</a>(<span class="keyword">const</span> tvec2<T, P>& x, <span class="keyword">const</span> tvec2<T, P>& y, <span class="keyword">const</span> tvec2<T, P>& a){<span class="keywordflow">return</span> <a class="code" href="a00146.html#gadccbaffe46f369cf1a96b2aef92cbfdd">mix</a>(x, y, a);} </div>
+<div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="a00187.html#ga90a1d1364a8d078846857178bdcc9af1"> 44</a></span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> GLM_FUNC_QUALIFIER tvec3<T, P> <a class="code" href="a00187.html#gae4b0244b0d882657bed0a99dfa33f379">lerp</a>(<span class="keyword">const</span> tvec3<T, P>& x, <span class="keyword">const</span> tvec3<T, P>& y, <span class="keyword">const</span> tvec3<T, P>& a){<span class="keywordflow">return</span> <a class="code" href="a00146.html#gadccbaffe46f369cf1a96b2aef92cbfdd">mix</a>(x, y, a);} </div>
+<div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="a00187.html#gae4b0244b0d882657bed0a99dfa33f379"> 45</a></span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> GLM_FUNC_QUALIFIER tvec4<T, P> <a class="code" href="a00187.html#gae4b0244b0d882657bed0a99dfa33f379">lerp</a>(<span class="keyword">const</span> tvec4<T, P>& x, <span class="keyword">const</span> tvec4<T, P>& y, <span class="keyword">const</span> tvec4<T, P>& a){<span class="keywordflow">return</span> <a class="code" href="a00146.html#gadccbaffe46f369cf1a96b2aef92cbfdd">mix</a>(x, y, a);} </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="a00187.html#ga0fd09e616d122bc2ed9726682ffd44b7"> 47</a></span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> GLM_FUNC_QUALIFIER T <a class="code" href="a00187.html#ga63791409bdef9745b956406afe3157f1">saturate</a>(T x){<span class="keywordflow">return</span> <a class="code" href="a00146.html#ga93bce26c7d80d30a62f5c508f8498a6c">clamp</a>(x, T(0), T(1));} </div>
+<div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="a00187.html#ga5815a26488231dfdf92242cf0c2d2107"> 48</a></span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> GLM_FUNC_QUALIFIER tvec2<T, P> <a class="code" href="a00187.html#ga63791409bdef9745b956406afe3157f1">saturate</a>(<span class="keyword">const</span> tvec2<T, P>& x){<span class="keywordflow">return</span> <a class="code" href="a00146.html#ga93bce26c7d80d30a62f5c508f8498a6c">clamp</a>(x, T(0), T(1));} </div>
+<div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="a00187.html#ga02ed1a53c6df104d56b69f8fb5e9af1b"> 49</a></span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> GLM_FUNC_QUALIFIER tvec3<T, P> <a class="code" href="a00187.html#ga63791409bdef9745b956406afe3157f1">saturate</a>(<span class="keyword">const</span> tvec3<T, P>& x){<span class="keywordflow">return</span> <a class="code" href="a00146.html#ga93bce26c7d80d30a62f5c508f8498a6c">clamp</a>(x, T(0), T(1));} </div>
+<div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="a00187.html#ga63791409bdef9745b956406afe3157f1"> 50</a></span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> GLM_FUNC_QUALIFIER tvec4<T, P> <a class="code" href="a00187.html#ga63791409bdef9745b956406afe3157f1">saturate</a>(<span class="keyword">const</span> tvec4<T, P>& x){<span class="keywordflow">return</span> <a class="code" href="a00146.html#ga93bce26c7d80d30a62f5c508f8498a6c">clamp</a>(x, T(0), T(1));} </div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="a00187.html#gac63011205bf6d0be82589dc56dd26708"> 52</a></span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> GLM_FUNC_QUALIFIER T <a class="code" href="a00187.html#ga09d39c391a509a045b6c7061f15bdff5">atan2</a>(T x, T y){<span class="keywordflow">return</span> <a class="code" href="a00152.html#ga461e769acb8b8cb695a5a89334546611">atan</a>(x, y);} </div>
+<div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="a00187.html#ga525f3e849d0fc64807f8ab571b4545f9"> 53</a></span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> GLM_FUNC_QUALIFIER tvec2<T, P> <a class="code" href="a00187.html#ga09d39c391a509a045b6c7061f15bdff5">atan2</a>(<span class="keyword">const</span> tvec2<T, P>& x, <span class="keyword">const</span> tvec2<T, P>& y){<span class="keywordflow">return</span> <a class="code" href="a00152.html#ga461e769acb8b8cb695a5a89334546611">atan</a>(x, y);} </div>
+<div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="a00187.html#gad328042b6734d3f2c49c0ec1328b14c0"> 54</a></span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> GLM_FUNC_QUALIFIER tvec3<T, P> <a class="code" href="a00187.html#ga09d39c391a509a045b6c7061f15bdff5">atan2</a>(<span class="keyword">const</span> tvec3<T, P>& x, <span class="keyword">const</span> tvec3<T, P>& y){<span class="keywordflow">return</span> <a class="code" href="a00152.html#ga461e769acb8b8cb695a5a89334546611">atan</a>(x, y);} </div>
+<div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="a00187.html#ga09d39c391a509a045b6c7061f15bdff5"> 55</a></span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> GLM_FUNC_QUALIFIER tvec4<T, P> <a class="code" href="a00187.html#ga09d39c391a509a045b6c7061f15bdff5">atan2</a>(<span class="keyword">const</span> tvec4<T, P>& x, <span class="keyword">const</span> tvec4<T, P>& y){<span class="keywordflow">return</span> <a class="code" href="a00152.html#ga461e769acb8b8cb695a5a89334546611">atan</a>(x, y);} </div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType> GLM_FUNC_DECL <span class="keywordtype">bool</span> <a class="code" href="a00187.html#ga8c6a59e2f2ac84fba0c5932f1c35bf7a">isfinite</a>(genType <span class="keyword">const</span> & x); </div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> GLM_FUNC_DECL tvec1<bool, P> <a class="code" href="a00187.html#ga8c6a59e2f2ac84fba0c5932f1c35bf7a">isfinite</a>(<span class="keyword">const</span> tvec1<T, P>& x); </div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> GLM_FUNC_DECL tvec2<bool, P> <a class="code" href="a00187.html#ga8c6a59e2f2ac84fba0c5932f1c35bf7a">isfinite</a>(<span class="keyword">const</span> tvec2<T, P>& x); </div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> GLM_FUNC_DECL tvec3<bool, P> <a class="code" href="a00187.html#ga8c6a59e2f2ac84fba0c5932f1c35bf7a">isfinite</a>(<span class="keyword">const</span> tvec3<T, P>& x); </div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> GLM_FUNC_DECL tvec4<bool, P> <a class="code" href="a00187.html#ga8c6a59e2f2ac84fba0c5932f1c35bf7a">isfinite</a>(<span class="keyword">const</span> tvec4<T, P>& x); </div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="a00187.html#gaddcd7aa2e30e61af5b38660613d3979e"> 63</a></span>  <span class="keyword">typedef</span> <span class="keywordtype">bool</span> <a class="code" href="a00187.html#gaddcd7aa2e30e61af5b38660613d3979e">bool1</a>; </div>
+<div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="a00187.html#gafa8d0bc8dfa7eeb928208305714f648d"> 64</a></span>  <span class="keyword">typedef</span> tvec2<bool, highp> <a class="code" href="a00187.html#gafa8d0bc8dfa7eeb928208305714f648d">bool2</a>; </div>
+<div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="a00187.html#gab8d74ea4c4f4bd980b650ffb27cdb659"> 65</a></span>  <span class="keyword">typedef</span> tvec3<bool, highp> <a class="code" href="a00187.html#gab8d74ea4c4f4bd980b650ffb27cdb659">bool3</a>; </div>
+<div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="a00187.html#ga6e79dbfab5917c467a154638ba27898e"> 66</a></span>  <span class="keyword">typedef</span> tvec4<bool, highp> <a class="code" href="a00187.html#ga6e79dbfab5917c467a154638ba27898e">bool4</a>; </div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="a00187.html#ga7f895c936f0c29c8729afbbf22806090"> 68</a></span>  <span class="keyword">typedef</span> <span class="keywordtype">bool</span> <a class="code" href="a00187.html#ga7f895c936f0c29c8729afbbf22806090">bool1x1</a>; </div>
+<div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="a00187.html#ga2bfb53bc320966c85149934fffb0329d"> 69</a></span>  <span class="keyword">typedef</span> tmat2x2<bool, highp> <a class="code" href="a00187.html#ga2bfb53bc320966c85149934fffb0329d">bool2x2</a>; </div>
+<div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="a00187.html#gad02e7dff74039bb1454643e293d85dfe"> 70</a></span>  <span class="keyword">typedef</span> tmat2x3<bool, highp> <a class="code" href="a00187.html#gad02e7dff74039bb1454643e293d85dfe">bool2x3</a>; </div>
+<div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="a00187.html#ga379c0869949e8a69c3d06d7637caa5d7"> 71</a></span>  <span class="keyword">typedef</span> tmat2x4<bool, highp> <a class="code" href="a00187.html#ga379c0869949e8a69c3d06d7637caa5d7">bool2x4</a>; </div>
+<div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="a00187.html#ga0fc7ecb53df5be5f9d766fbbfe5190d7"> 72</a></span>  <span class="keyword">typedef</span> tmat3x2<bool, highp> <a class="code" href="a00187.html#ga0fc7ecb53df5be5f9d766fbbfe5190d7">bool3x2</a>; </div>
+<div class="line"><a name="l00073"></a><span class="lineno"><a class="line" href="a00187.html#gae621c9eabcba552eea5f6ade1f403605"> 73</a></span>  <span class="keyword">typedef</span> tmat3x3<bool, highp> <a class="code" href="a00187.html#gae621c9eabcba552eea5f6ade1f403605">bool3x3</a>; </div>
+<div class="line"><a name="l00074"></a><span class="lineno"><a class="line" href="a00187.html#gad13f8250579ebf79760dcf64215ddb17"> 74</a></span>  <span class="keyword">typedef</span> tmat3x4<bool, highp> <a class="code" href="a00187.html#gad13f8250579ebf79760dcf64215ddb17">bool3x4</a>; </div>
+<div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="a00187.html#ga184ee05ac2bbbf0a91dd364ba8e528db"> 75</a></span>  <span class="keyword">typedef</span> tmat4x2<bool, highp> <a class="code" href="a00187.html#ga184ee05ac2bbbf0a91dd364ba8e528db">bool4x2</a>; </div>
+<div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="a00187.html#ga83e4c62ab1addfe708dc3409cc0e5dfb"> 76</a></span>  <span class="keyword">typedef</span> tmat4x3<bool, highp> <a class="code" href="a00187.html#ga83e4c62ab1addfe708dc3409cc0e5dfb">bool4x3</a>; </div>
+<div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="a00187.html#ga9770607032813e7b0ca7362a47efea1e"> 77</a></span>  <span class="keyword">typedef</span> tmat4x4<bool, highp> <a class="code" href="a00187.html#ga9770607032813e7b0ca7362a47efea1e">bool4x4</a>; </div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="a00187.html#ga0670a2111b5e4a6410bd027fa0232fc3"> 79</a></span>  <span class="keyword">typedef</span> <span class="keywordtype">int</span> <a class="code" href="a00187.html#ga0670a2111b5e4a6410bd027fa0232fc3">int1</a>; </div>
+<div class="line"><a name="l00080"></a><span class="lineno"><a class="line" href="a00187.html#ga2eca687990bf3a08ef28bc4a9f2fe700"> 80</a></span>  <span class="keyword">typedef</span> tvec2<int, highp> <a class="code" href="a00187.html#ga2eca687990bf3a08ef28bc4a9f2fe700">int2</a>; </div>
+<div class="line"><a name="l00081"></a><span class="lineno"><a class="line" href="a00187.html#gaaa6ceedf08a85e5fd73a482bc8b77b88"> 81</a></span>  <span class="keyword">typedef</span> tvec3<int, highp> <a class="code" href="a00187.html#gaaa6ceedf08a85e5fd73a482bc8b77b88">int3</a>; </div>
+<div class="line"><a name="l00082"></a><span class="lineno"><a class="line" href="a00187.html#gab19c2df22e9b14081390fabd074081f1"> 82</a></span>  <span class="keyword">typedef</span> tvec4<int, highp> <a class="code" href="a00187.html#gab19c2df22e9b14081390fabd074081f1">int4</a>; </div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno"><a class="line" href="a00187.html#ga056ffe02d3a45af626f8e62221881c7a"> 84</a></span>  <span class="keyword">typedef</span> <span class="keywordtype">int</span> <a class="code" href="a00187.html#ga056ffe02d3a45af626f8e62221881c7a">int1x1</a>; </div>
+<div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="a00187.html#gab1c5d0631a6ae34e28bfb2851da387cc"> 85</a></span>  <span class="keyword">typedef</span> tmat2x2<int, highp> <a class="code" href="a00187.html#gab1c5d0631a6ae34e28bfb2851da387cc">int2x2</a>; </div>
+<div class="line"><a name="l00086"></a><span class="lineno"><a class="line" href="a00187.html#ga6dc93f0794eb5fadd7f68b85141a2434"> 86</a></span>  <span class="keyword">typedef</span> tmat2x3<int, highp> <a class="code" href="a00187.html#ga6dc93f0794eb5fadd7f68b85141a2434">int2x3</a>; </div>
+<div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="a00187.html#gad5da9e1b4e0c64c5436b5696ab49540e"> 87</a></span>  <span class="keyword">typedef</span> tmat2x4<int, highp> <a class="code" href="a00187.html#gad5da9e1b4e0c64c5436b5696ab49540e">int2x4</a>; </div>
+<div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="a00187.html#gaa98b1a06b802c975f02a5583f43632db"> 88</a></span>  <span class="keyword">typedef</span> tmat3x2<int, highp> <a class="code" href="a00187.html#gaa98b1a06b802c975f02a5583f43632db">int3x2</a>; </div>
+<div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="a00187.html#ga20c4d23defbc123ac4745c9b4262156f"> 89</a></span>  <span class="keyword">typedef</span> tmat3x3<int, highp> <a class="code" href="a00187.html#ga20c4d23defbc123ac4745c9b4262156f">int3x3</a>; </div>
+<div class="line"><a name="l00090"></a><span class="lineno"><a class="line" href="a00187.html#ga7b00c53838143bce963177122ab92c39"> 90</a></span>  <span class="keyword">typedef</span> tmat3x4<int, highp> <a class="code" href="a00187.html#ga7b00c53838143bce963177122ab92c39">int3x4</a>; </div>
+<div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="a00187.html#gaa53815539021200c4e10fd282832dcd3"> 91</a></span>  <span class="keyword">typedef</span> tmat4x2<int, highp> <a class="code" href="a00187.html#gaa53815539021200c4e10fd282832dcd3">int4x2</a>; </div>
+<div class="line"><a name="l00092"></a><span class="lineno"><a class="line" href="a00187.html#ga4a3bf0ecd6f6ff60836c5bee26c14abe"> 92</a></span>  <span class="keyword">typedef</span> tmat4x3<int, highp> <a class="code" href="a00187.html#ga4a3bf0ecd6f6ff60836c5bee26c14abe">int4x3</a>; </div>
+<div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="a00187.html#ga3bacf576b4b29f2f2959abff7a36652d"> 93</a></span>  <span class="keyword">typedef</span> tmat4x4<int, highp> <a class="code" href="a00187.html#ga3bacf576b4b29f2f2959abff7a36652d">int4x4</a>; </div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="a00187.html#gaf5208d01f6c6fbcb7bb55d610b9c0ead"> 95</a></span>  <span class="keyword">typedef</span> <span class="keywordtype">float</span> <a class="code" href="a00187.html#gaf5208d01f6c6fbcb7bb55d610b9c0ead">float1</a>; </div>
+<div class="line"><a name="l00096"></a><span class="lineno"><a class="line" href="a00187.html#ga872a70333dd25af68b1ebba485be9e42"> 96</a></span>  <span class="keyword">typedef</span> tvec2<float, highp> <a class="code" href="a00187.html#ga872a70333dd25af68b1ebba485be9e42">float2</a>; </div>
+<div class="line"><a name="l00097"></a><span class="lineno"><a class="line" href="a00187.html#ga2bfa618285894e34f299e4984f092d56"> 97</a></span>  <span class="keyword">typedef</span> tvec3<float, highp> <a class="code" href="a00187.html#ga2bfa618285894e34f299e4984f092d56">float3</a>; </div>
+<div class="line"><a name="l00098"></a><span class="lineno"><a class="line" href="a00187.html#ga5d49ed44dd9a9e944abc30371fc9045b"> 98</a></span>  <span class="keyword">typedef</span> tvec4<float, highp> <a class="code" href="a00187.html#ga5d49ed44dd9a9e944abc30371fc9045b">float4</a>; </div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno"><a class="line" href="a00187.html#ga73720b8dc4620835b17f74d428f98c0c"> 100</a></span>  <span class="keyword">typedef</span> <span class="keywordtype">float</span> <a class="code" href="a00187.html#ga73720b8dc4620835b17f74d428f98c0c">float1x1</a>; </div>
+<div class="line"><a name="l00101"></a><span class="lineno"><a class="line" href="a00187.html#gaad93cbc2b863e363d53d405d0451d03e"> 101</a></span>  <span class="keyword">typedef</span> tmat2x2<float, highp> <a class="code" href="a00187.html#gaad93cbc2b863e363d53d405d0451d03e">float2x2</a>; </div>
+<div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="a00187.html#ga098c33a30f901f4f6a76969d6db6b01b"> 102</a></span>  <span class="keyword">typedef</span> tmat2x3<float, highp> <a class="code" href="a00187.html#ga098c33a30f901f4f6a76969d6db6b01b">float2x3</a>; </div>
+<div class="line"><a name="l00103"></a><span class="lineno"><a class="line" href="a00187.html#gab2ce4c366abc06c8bf7fe097ecea0dde"> 103</a></span>  <span class="keyword">typedef</span> tmat2x4<float, highp> <a class="code" href="a00187.html#gab2ce4c366abc06c8bf7fe097ecea0dde">float2x4</a>; </div>
+<div class="line"><a name="l00104"></a><span class="lineno"><a class="line" href="a00187.html#gaf30014e7b6874f45d58eb580d04764ff"> 104</a></span>  <span class="keyword">typedef</span> tmat3x2<float, highp> <a class="code" href="a00187.html#gaf30014e7b6874f45d58eb580d04764ff">float3x2</a>; </div>
+<div class="line"><a name="l00105"></a><span class="lineno"><a class="line" href="a00187.html#ga2692a729a69615d72dbebbdd0eba2363"> 105</a></span>  <span class="keyword">typedef</span> tmat3x3<float, highp> <a class="code" href="a00187.html#ga2692a729a69615d72dbebbdd0eba2363">float3x3</a>; </div>
+<div class="line"><a name="l00106"></a><span class="lineno"><a class="line" href="a00187.html#gac38c8929ccc87a2dc81eaab97ad5190e"> 106</a></span>  <span class="keyword">typedef</span> tmat3x4<float, highp> <a class="code" href="a00187.html#gac38c8929ccc87a2dc81eaab97ad5190e">float3x4</a>; </div>
+<div class="line"><a name="l00107"></a><span class="lineno"><a class="line" href="a00187.html#ga39a2af7aa8f2d29ca40afd2256c0e7c8"> 107</a></span>  <span class="keyword">typedef</span> tmat4x2<float, highp> <a class="code" href="a00187.html#ga39a2af7aa8f2d29ca40afd2256c0e7c8">float4x2</a>; </div>
+<div class="line"><a name="l00108"></a><span class="lineno"><a class="line" href="a00187.html#gad749b26be059f35394fd71c7f7a44034"> 108</a></span>  <span class="keyword">typedef</span> tmat4x3<float, highp> <a class="code" href="a00187.html#gad749b26be059f35394fd71c7f7a44034">float4x3</a>; </div>
+<div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="a00187.html#gaf40529862492ded2f3b96a6c886f6136"> 109</a></span>  <span class="keyword">typedef</span> tmat4x4<float, highp> <a class="code" href="a00187.html#gaf40529862492ded2f3b96a6c886f6136">float4x4</a>; </div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno"><a class="line" href="a00187.html#ga20b861a9b6e2a300323671c57a02525b"> 111</a></span>  <span class="keyword">typedef</span> <span class="keywordtype">double</span> <a class="code" href="a00187.html#ga20b861a9b6e2a300323671c57a02525b">double1</a>; </div>
+<div class="line"><a name="l00112"></a><span class="lineno"><a class="line" href="a00187.html#gaa16a13c6f2768e83ca133430e82ab89e"> 112</a></span>  <span class="keyword">typedef</span> tvec2<double, highp> <a class="code" href="a00187.html#gaa16a13c6f2768e83ca133430e82ab89e">double2</a>; </div>
+<div class="line"><a name="l00113"></a><span class="lineno"><a class="line" href="a00187.html#gaed4bc64196bd25d46f6a1f417320a391"> 113</a></span>  <span class="keyword">typedef</span> tvec3<double, highp> <a class="code" href="a00187.html#gaed4bc64196bd25d46f6a1f417320a391">double3</a>; </div>
+<div class="line"><a name="l00114"></a><span class="lineno"><a class="line" href="a00187.html#gab8bbb086c9a6c2deffbe0e80afd6be56"> 114</a></span>  <span class="keyword">typedef</span> tvec4<double, highp> <a class="code" href="a00187.html#gab8bbb086c9a6c2deffbe0e80afd6be56">double4</a>; </div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno"><a class="line" href="a00187.html#ga45f16a4dd0db1f199afaed9fd12fe9a8"> 116</a></span>  <span class="keyword">typedef</span> <span class="keywordtype">double</span> <a class="code" href="a00187.html#ga45f16a4dd0db1f199afaed9fd12fe9a8">double1x1</a>; </div>
+<div class="line"><a name="l00117"></a><span class="lineno"><a class="line" href="a00187.html#ga320d0a71a4ad9f14a1992d40546cffa7"> 117</a></span>  <span class="keyword">typedef</span> tmat2x2<double, highp> <a class="code" href="a00187.html#ga320d0a71a4ad9f14a1992d40546cffa7">double2x2</a>; </div>
+<div class="line"><a name="l00118"></a><span class="lineno"><a class="line" href="a00187.html#gade37cf30c69bacb41ceea7e32717eac7"> 118</a></span>  <span class="keyword">typedef</span> tmat2x3<double, highp> <a class="code" href="a00187.html#gade37cf30c69bacb41ceea7e32717eac7">double2x3</a>; </div>
+<div class="line"><a name="l00119"></a><span class="lineno"><a class="line" href="a00187.html#gaf923922adf744404d5bfb3fafb7d0d8e"> 119</a></span>  <span class="keyword">typedef</span> tmat2x4<double, highp> <a class="code" href="a00187.html#gaf923922adf744404d5bfb3fafb7d0d8e">double2x4</a>; </div>
+<div class="line"><a name="l00120"></a><span class="lineno"><a class="line" href="a00187.html#gaeaac4d0e18164e4d2fe54432c0fbbcf6"> 120</a></span>  <span class="keyword">typedef</span> tmat3x2<double, highp> <a class="code" href="a00187.html#gaeaac4d0e18164e4d2fe54432c0fbbcf6">double3x2</a>; </div>
+<div class="line"><a name="l00121"></a><span class="lineno"><a class="line" href="a00187.html#gac934f579ee5cf3cbdbb25b73f2640c0a"> 121</a></span>  <span class="keyword">typedef</span> tmat3x3<double, highp> <a class="code" href="a00187.html#gac934f579ee5cf3cbdbb25b73f2640c0a">double3x3</a>; </div>
+<div class="line"><a name="l00122"></a><span class="lineno"><a class="line" href="a00187.html#gaad84a1ea83be8fce04c1570c5e719413"> 122</a></span>  <span class="keyword">typedef</span> tmat3x4<double, highp> <a class="code" href="a00187.html#gaad84a1ea83be8fce04c1570c5e719413">double3x4</a>; </div>
+<div class="line"><a name="l00123"></a><span class="lineno"><a class="line" href="a00187.html#ga2f87500119da15e35e4a74780ba512bd"> 123</a></span>  <span class="keyword">typedef</span> tmat4x2<double, highp> <a class="code" href="a00187.html#ga2f87500119da15e35e4a74780ba512bd">double4x2</a>; </div>
+<div class="line"><a name="l00124"></a><span class="lineno"><a class="line" href="a00187.html#gaa4e6d53c03780dfa76bd399324f9fe37"> 124</a></span>  <span class="keyword">typedef</span> tmat4x3<double, highp> <a class="code" href="a00187.html#gaa4e6d53c03780dfa76bd399324f9fe37">double4x3</a>; </div>
+<div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="a00187.html#ga686a3a5590f0a0e721faba08bda301d6"> 125</a></span>  <span class="keyword">typedef</span> tmat4x4<double, highp> <a class="code" href="a00187.html#ga686a3a5590f0a0e721faba08bda301d6">double4x4</a>; </div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="preprocessor">#include "compatibility.inl"</span></div>
+<div class="ttc" id="a00187_html_ga056ffe02d3a45af626f8e62221881c7a"><div class="ttname"><a href="a00187.html#ga056ffe02d3a45af626f8e62221881c7a">glm::int1x1</a></div><div class="ttdeci">int int1x1</div><div class="ttdoc">integer matrix with 1 component. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00084">compatibility.hpp:84</a></div></div>
+<div class="ttc" id="a00187_html_gae621c9eabcba552eea5f6ade1f403605"><div class="ttname"><a href="a00187.html#gae621c9eabcba552eea5f6ade1f403605">glm::bool3x3</a></div><div class="ttdeci">tmat3x3< bool, highp > bool3x3</div><div class="ttdoc">boolean matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00073">compatibility.hpp:73</a></div></div>
+<div class="ttc" id="a00187_html_ga2692a729a69615d72dbebbdd0eba2363"><div class="ttname"><a href="a00187.html#ga2692a729a69615d72dbebbdd0eba2363">glm::float3x3</a></div><div class="ttdeci">tmat3x3< float, highp > float3x3</div><div class="ttdoc">single-precision floating-point matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00105">compatibility.hpp:105</a></div></div>
+<div class="ttc" id="a00187_html_gad5da9e1b4e0c64c5436b5696ab49540e"><div class="ttname"><a href="a00187.html#gad5da9e1b4e0c64c5436b5696ab49540e">glm::int2x4</a></div><div class="ttdeci">tmat2x4< int, highp > int2x4</div><div class="ttdoc">integer matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00087">compatibility.hpp:87</a></div></div>
+<div class="ttc" id="a00187_html_gab2ce4c366abc06c8bf7fe097ecea0dde"><div class="ttname"><a href="a00187.html#gab2ce4c366abc06c8bf7fe097ecea0dde">glm::float2x4</a></div><div class="ttdeci">tmat2x4< float, highp > float2x4</div><div class="ttdoc">single-precision floating-point matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00103">compatibility.hpp:103</a></div></div>
+<div class="ttc" id="a00187_html_gad749b26be059f35394fd71c7f7a44034"><div class="ttname"><a href="a00187.html#gad749b26be059f35394fd71c7f7a44034">glm::float4x3</a></div><div class="ttdeci">tmat4x3< float, highp > float4x3</div><div class="ttdoc">single-precision floating-point matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00108">compatibility.hpp:108</a></div></div>
+<div class="ttc" id="a00187_html_ga20b861a9b6e2a300323671c57a02525b"><div class="ttname"><a href="a00187.html#ga20b861a9b6e2a300323671c57a02525b">glm::double1</a></div><div class="ttdeci">double double1</div><div class="ttdoc">double-precision floating-point vector with 1 component. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00111">compatibility.hpp:111</a></div></div>
+<div class="ttc" id="a00187_html_ga320d0a71a4ad9f14a1992d40546cffa7"><div class="ttname"><a href="a00187.html#ga320d0a71a4ad9f14a1992d40546cffa7">glm::double2x2</a></div><div class="ttdeci">tmat2x2< double, highp > double2x2</div><div class="ttdoc">double-precision floating-point matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00117">compatibility.hpp:117</a></div></div>
+<div class="ttc" id="a00187_html_gaad84a1ea83be8fce04c1570c5e719413"><div class="ttname"><a href="a00187.html#gaad84a1ea83be8fce04c1570c5e719413">glm::double3x4</a></div><div class="ttdeci">tmat3x4< double, highp > double3x4</div><div class="ttdoc">double-precision floating-point matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00122">compatibility.hpp:122</a></div></div>
+<div class="ttc" id="a00187_html_gab1c5d0631a6ae34e28bfb2851da387cc"><div class="ttname"><a href="a00187.html#gab1c5d0631a6ae34e28bfb2851da387cc">glm::int2x2</a></div><div class="ttdeci">tmat2x2< int, highp > int2x2</div><div class="ttdoc">integer matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00085">compatibility.hpp:85</a></div></div>
+<div class="ttc" id="a00187_html_ga2eca687990bf3a08ef28bc4a9f2fe700"><div class="ttname"><a href="a00187.html#ga2eca687990bf3a08ef28bc4a9f2fe700">glm::int2</a></div><div class="ttdeci">tvec2< int, highp > int2</div><div class="ttdoc">integer vector with 2 components. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00080">compatibility.hpp:80</a></div></div>
+<div class="ttc" id="a00187_html_gaed4bc64196bd25d46f6a1f417320a391"><div class="ttname"><a href="a00187.html#gaed4bc64196bd25d46f6a1f417320a391">glm::double3</a></div><div class="ttdeci">tvec3< double, highp > double3</div><div class="ttdoc">double-precision floating-point vector with 3 components. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00113">compatibility.hpp:113</a></div></div>
+<div class="ttc" id="a00187_html_gae4b0244b0d882657bed0a99dfa33f379"><div class="ttname"><a href="a00187.html#gae4b0244b0d882657bed0a99dfa33f379">glm::lerp</a></div><div class="ttdeci">GLM_FUNC_QUALIFIER tvec4< T, P > lerp(const tvec4< T, P > &x, const tvec4< T, P > &y, const tvec4< T, P > &a)</div><div class="ttdoc">Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using v...</div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00045">compatibility.hpp:45</a></div></div>
+<div class="ttc" id="a00187_html_ga20c4d23defbc123ac4745c9b4262156f"><div class="ttname"><a href="a00187.html#ga20c4d23defbc123ac4745c9b4262156f">glm::int3x3</a></div><div class="ttdeci">tmat3x3< int, highp > int3x3</div><div class="ttdoc">integer matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00089">compatibility.hpp:89</a></div></div>
+<div class="ttc" id="a00187_html_gac934f579ee5cf3cbdbb25b73f2640c0a"><div class="ttname"><a href="a00187.html#gac934f579ee5cf3cbdbb25b73f2640c0a">glm::double3x3</a></div><div class="ttdeci">tmat3x3< double, highp > double3x3</div><div class="ttdoc">double-precision floating-point matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00121">compatibility.hpp:121</a></div></div>
+<div class="ttc" id="a00187_html_gad02e7dff74039bb1454643e293d85dfe"><div class="ttname"><a href="a00187.html#gad02e7dff74039bb1454643e293d85dfe">glm::bool2x3</a></div><div class="ttdeci">tmat2x3< bool, highp > bool2x3</div><div class="ttdoc">boolean matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00070">compatibility.hpp:70</a></div></div>
+<div class="ttc" id="a00187_html_ga9770607032813e7b0ca7362a47efea1e"><div class="ttname"><a href="a00187.html#ga9770607032813e7b0ca7362a47efea1e">glm::bool4x4</a></div><div class="ttdeci">tmat4x4< bool, highp > bool4x4</div><div class="ttdoc">boolean matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00077">compatibility.hpp:77</a></div></div>
+<div class="ttc" id="a00187_html_ga83e4c62ab1addfe708dc3409cc0e5dfb"><div class="ttname"><a href="a00187.html#ga83e4c62ab1addfe708dc3409cc0e5dfb">glm::bool4x3</a></div><div class="ttdeci">tmat4x3< bool, highp > bool4x3</div><div class="ttdoc">boolean matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00076">compatibility.hpp:76</a></div></div>
+<div class="ttc" id="a00187_html_gaad93cbc2b863e363d53d405d0451d03e"><div class="ttname"><a href="a00187.html#gaad93cbc2b863e363d53d405d0451d03e">glm::float2x2</a></div><div class="ttdeci">tmat2x2< float, highp > float2x2</div><div class="ttdoc">single-precision floating-point matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00101">compatibility.hpp:101</a></div></div>
+<div class="ttc" id="a00187_html_ga63791409bdef9745b956406afe3157f1"><div class="ttname"><a href="a00187.html#ga63791409bdef9745b956406afe3157f1">glm::saturate</a></div><div class="ttdeci">GLM_FUNC_QUALIFIER tvec4< T, P > saturate(const tvec4< T, P > &x)</div><div class="ttdoc">Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) </div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00050">compatibility.hpp:50</a></div></div>
+<div class="ttc" id="a00187_html_gafa8d0bc8dfa7eeb928208305714f648d"><div class="ttname"><a href="a00187.html#gafa8d0bc8dfa7eeb928208305714f648d">glm::bool2</a></div><div class="ttdeci">tvec2< bool, highp > bool2</div><div class="ttdoc">boolean type with 2 components. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00064">compatibility.hpp:64</a></div></div>
+<div class="ttc" id="a00187_html_ga8c6a59e2f2ac84fba0c5932f1c35bf7a"><div class="ttname"><a href="a00187.html#ga8c6a59e2f2ac84fba0c5932f1c35bf7a">glm::isfinite</a></div><div class="ttdeci">GLM_FUNC_DECL tvec4< bool, P > isfinite(const tvec4< T, P > &x)</div><div class="ttdoc">Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility)...</div></div>
+<div class="ttc" id="a00187_html_ga5d49ed44dd9a9e944abc30371fc9045b"><div class="ttname"><a href="a00187.html#ga5d49ed44dd9a9e944abc30371fc9045b">glm::float4</a></div><div class="ttdeci">tvec4< float, highp > float4</div><div class="ttdoc">single-precision floating-point vector with 4 components. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00098">compatibility.hpp:98</a></div></div>
+<div class="ttc" id="a00187_html_gaf40529862492ded2f3b96a6c886f6136"><div class="ttname"><a href="a00187.html#gaf40529862492ded2f3b96a6c886f6136">glm::float4x4</a></div><div class="ttdeci">tmat4x4< float, highp > float4x4</div><div class="ttdoc">single-precision floating-point matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00109">compatibility.hpp:109</a></div></div>
+<div class="ttc" id="a00187_html_ga39a2af7aa8f2d29ca40afd2256c0e7c8"><div class="ttname"><a href="a00187.html#ga39a2af7aa8f2d29ca40afd2256c0e7c8">glm::float4x2</a></div><div class="ttdeci">tmat4x2< float, highp > float4x2</div><div class="ttdoc">single-precision floating-point matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00107">compatibility.hpp:107</a></div></div>
+<div class="ttc" id="a00187_html_gaf5208d01f6c6fbcb7bb55d610b9c0ead"><div class="ttname"><a href="a00187.html#gaf5208d01f6c6fbcb7bb55d610b9c0ead">glm::float1</a></div><div class="ttdeci">float float1</div><div class="ttdoc">single-precision floating-point vector with 1 component. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00095">compatibility.hpp:95</a></div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00187_html_gaf30014e7b6874f45d58eb580d04764ff"><div class="ttname"><a href="a00187.html#gaf30014e7b6874f45d58eb580d04764ff">glm::float3x2</a></div><div class="ttdeci">tmat3x2< float, highp > float3x2</div><div class="ttdoc">single-precision floating-point matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00104">compatibility.hpp:104</a></div></div>
+<div class="ttc" id="a00187_html_ga2f87500119da15e35e4a74780ba512bd"><div class="ttname"><a href="a00187.html#ga2f87500119da15e35e4a74780ba512bd">glm::double4x2</a></div><div class="ttdeci">tmat4x2< double, highp > double4x2</div><div class="ttdoc">double-precision floating-point matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00123">compatibility.hpp:123</a></div></div>
+<div class="ttc" id="a00187_html_gaa4e6d53c03780dfa76bd399324f9fe37"><div class="ttname"><a href="a00187.html#gaa4e6d53c03780dfa76bd399324f9fe37">glm::double4x3</a></div><div class="ttdeci">tmat4x3< double, highp > double4x3</div><div class="ttdoc">double-precision floating-point matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00124">compatibility.hpp:124</a></div></div>
+<div class="ttc" id="a00187_html_ga45f16a4dd0db1f199afaed9fd12fe9a8"><div class="ttname"><a href="a00187.html#ga45f16a4dd0db1f199afaed9fd12fe9a8">glm::double1x1</a></div><div class="ttdeci">double double1x1</div><div class="ttdoc">double-precision floating-point matrix with 1 component. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00116">compatibility.hpp:116</a></div></div>
+<div class="ttc" id="a00187_html_gaa53815539021200c4e10fd282832dcd3"><div class="ttname"><a href="a00187.html#gaa53815539021200c4e10fd282832dcd3">glm::int4x2</a></div><div class="ttdeci">tmat4x2< int, highp > int4x2</div><div class="ttdoc">integer matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00091">compatibility.hpp:91</a></div></div>
+<div class="ttc" id="a00187_html_gab19c2df22e9b14081390fabd074081f1"><div class="ttname"><a href="a00187.html#gab19c2df22e9b14081390fabd074081f1">glm::int4</a></div><div class="ttdeci">tvec4< int, highp > int4</div><div class="ttdoc">integer vector with 4 components. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00082">compatibility.hpp:82</a></div></div>
+<div class="ttc" id="a00187_html_gab8d74ea4c4f4bd980b650ffb27cdb659"><div class="ttname"><a href="a00187.html#gab8d74ea4c4f4bd980b650ffb27cdb659">glm::bool3</a></div><div class="ttdeci">tvec3< bool, highp > bool3</div><div class="ttdoc">boolean type with 3 components. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00065">compatibility.hpp:65</a></div></div>
+<div class="ttc" id="a00146_html_gadccbaffe46f369cf1a96b2aef92cbfdd"><div class="ttname"><a href="a00146.html#gadccbaffe46f369cf1a96b2aef92cbfdd">glm::mix</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > mix(vecType< T, P > const &x, vecType< T, P > const &y, vecType< U, P > const &a)</div><div class="ttdoc">If genTypeU is a floating scalar or vector: Returns x * (1.0 - a) + y * a, i.e., the linear blend of ...</div></div>
+<div class="ttc" id="a00152_html_ga461e769acb8b8cb695a5a89334546611"><div class="ttname"><a href="a00152.html#ga461e769acb8b8cb695a5a89334546611">glm::atan</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > atan(vecType< T, P > const &y, vecType< T, P > const &x)</div><div class="ttdoc">Arc tangent. </div></div>
+<div class="ttc" id="a00187_html_gaa98b1a06b802c975f02a5583f43632db"><div class="ttname"><a href="a00187.html#gaa98b1a06b802c975f02a5583f43632db">glm::int3x2</a></div><div class="ttdeci">tmat3x2< int, highp > int3x2</div><div class="ttdoc">integer matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00088">compatibility.hpp:88</a></div></div>
+<div class="ttc" id="a00187_html_gaeaac4d0e18164e4d2fe54432c0fbbcf6"><div class="ttname"><a href="a00187.html#gaeaac4d0e18164e4d2fe54432c0fbbcf6">glm::double3x2</a></div><div class="ttdeci">tmat3x2< double, highp > double3x2</div><div class="ttdoc">double-precision floating-point matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00120">compatibility.hpp:120</a></div></div>
+<div class="ttc" id="a00187_html_ga09d39c391a509a045b6c7061f15bdff5"><div class="ttname"><a href="a00187.html#ga09d39c391a509a045b6c7061f15bdff5">glm::atan2</a></div><div class="ttdeci">GLM_FUNC_QUALIFIER tvec4< T, P > atan2(const tvec4< T, P > &x, const tvec4< T, P > &y)</div><div class="ttdoc">Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what q...</div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00055">compatibility.hpp:55</a></div></div>
+<div class="ttc" id="a00187_html_gab8bbb086c9a6c2deffbe0e80afd6be56"><div class="ttname"><a href="a00187.html#gab8bbb086c9a6c2deffbe0e80afd6be56">glm::double4</a></div><div class="ttdeci">tvec4< double, highp > double4</div><div class="ttdoc">double-precision floating-point vector with 4 components. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00114">compatibility.hpp:114</a></div></div>
+<div class="ttc" id="a00187_html_ga184ee05ac2bbbf0a91dd364ba8e528db"><div class="ttname"><a href="a00187.html#ga184ee05ac2bbbf0a91dd364ba8e528db">glm::bool4x2</a></div><div class="ttdeci">tmat4x2< bool, highp > bool4x2</div><div class="ttdoc">boolean matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00075">compatibility.hpp:75</a></div></div>
+<div class="ttc" id="a00187_html_gaf923922adf744404d5bfb3fafb7d0d8e"><div class="ttname"><a href="a00187.html#gaf923922adf744404d5bfb3fafb7d0d8e">glm::double2x4</a></div><div class="ttdeci">tmat2x4< double, highp > double2x4</div><div class="ttdoc">double-precision floating-point matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00119">compatibility.hpp:119</a></div></div>
+<div class="ttc" id="a00187_html_ga4a3bf0ecd6f6ff60836c5bee26c14abe"><div class="ttname"><a href="a00187.html#ga4a3bf0ecd6f6ff60836c5bee26c14abe">glm::int4x3</a></div><div class="ttdeci">tmat4x3< int, highp > int4x3</div><div class="ttdoc">integer matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00092">compatibility.hpp:92</a></div></div>
+<div class="ttc" id="a00187_html_gade37cf30c69bacb41ceea7e32717eac7"><div class="ttname"><a href="a00187.html#gade37cf30c69bacb41ceea7e32717eac7">glm::double2x3</a></div><div class="ttdeci">tmat2x3< double, highp > double2x3</div><div class="ttdoc">double-precision floating-point matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00118">compatibility.hpp:118</a></div></div>
+<div class="ttc" id="a00187_html_ga098c33a30f901f4f6a76969d6db6b01b"><div class="ttname"><a href="a00187.html#ga098c33a30f901f4f6a76969d6db6b01b">glm::float2x3</a></div><div class="ttdeci">tmat2x3< float, highp > float2x3</div><div class="ttdoc">single-precision floating-point matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00102">compatibility.hpp:102</a></div></div>
+<div class="ttc" id="a00187_html_ga7b00c53838143bce963177122ab92c39"><div class="ttname"><a href="a00187.html#ga7b00c53838143bce963177122ab92c39">glm::int3x4</a></div><div class="ttdeci">tmat3x4< int, highp > int3x4</div><div class="ttdoc">integer matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00090">compatibility.hpp:90</a></div></div>
+<div class="ttc" id="a00187_html_ga379c0869949e8a69c3d06d7637caa5d7"><div class="ttname"><a href="a00187.html#ga379c0869949e8a69c3d06d7637caa5d7">glm::bool2x4</a></div><div class="ttdeci">tmat2x4< bool, highp > bool2x4</div><div class="ttdoc">boolean matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00071">compatibility.hpp:71</a></div></div>
+<div class="ttc" id="a00187_html_ga3bacf576b4b29f2f2959abff7a36652d"><div class="ttname"><a href="a00187.html#ga3bacf576b4b29f2f2959abff7a36652d">glm::int4x4</a></div><div class="ttdeci">tmat4x4< int, highp > int4x4</div><div class="ttdoc">integer matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00093">compatibility.hpp:93</a></div></div>
+<div class="ttc" id="a00187_html_ga0670a2111b5e4a6410bd027fa0232fc3"><div class="ttname"><a href="a00187.html#ga0670a2111b5e4a6410bd027fa0232fc3">glm::int1</a></div><div class="ttdeci">int int1</div><div class="ttdoc">integer vector with 1 component. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00079">compatibility.hpp:79</a></div></div>
+<div class="ttc" id="a00187_html_ga872a70333dd25af68b1ebba485be9e42"><div class="ttname"><a href="a00187.html#ga872a70333dd25af68b1ebba485be9e42">glm::float2</a></div><div class="ttdeci">tvec2< float, highp > float2</div><div class="ttdoc">single-precision floating-point vector with 2 components. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00096">compatibility.hpp:96</a></div></div>
+<div class="ttc" id="a00187_html_ga2bfb53bc320966c85149934fffb0329d"><div class="ttname"><a href="a00187.html#ga2bfb53bc320966c85149934fffb0329d">glm::bool2x2</a></div><div class="ttdeci">tmat2x2< bool, highp > bool2x2</div><div class="ttdoc">boolean matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00069">compatibility.hpp:69</a></div></div>
+<div class="ttc" id="a00187_html_ga6e79dbfab5917c467a154638ba27898e"><div class="ttname"><a href="a00187.html#ga6e79dbfab5917c467a154638ba27898e">glm::bool4</a></div><div class="ttdeci">tvec4< bool, highp > bool4</div><div class="ttdoc">boolean type with 4 components. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00066">compatibility.hpp:66</a></div></div>
+<div class="ttc" id="a00187_html_ga686a3a5590f0a0e721faba08bda301d6"><div class="ttname"><a href="a00187.html#ga686a3a5590f0a0e721faba08bda301d6">glm::double4x4</a></div><div class="ttdeci">tmat4x4< double, highp > double4x4</div><div class="ttdoc">double-precision floating-point matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00125">compatibility.hpp:125</a></div></div>
+<div class="ttc" id="a00187_html_gaddcd7aa2e30e61af5b38660613d3979e"><div class="ttname"><a href="a00187.html#gaddcd7aa2e30e61af5b38660613d3979e">glm::bool1</a></div><div class="ttdeci">bool bool1</div><div class="ttdoc">boolean type with 1 component. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00063">compatibility.hpp:63</a></div></div>
+<div class="ttc" id="a00187_html_gad13f8250579ebf79760dcf64215ddb17"><div class="ttname"><a href="a00187.html#gad13f8250579ebf79760dcf64215ddb17">glm::bool3x4</a></div><div class="ttdeci">tmat3x4< bool, highp > bool3x4</div><div class="ttdoc">boolean matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00074">compatibility.hpp:74</a></div></div>
+<div class="ttc" id="a00187_html_ga0fc7ecb53df5be5f9d766fbbfe5190d7"><div class="ttname"><a href="a00187.html#ga0fc7ecb53df5be5f9d766fbbfe5190d7">glm::bool3x2</a></div><div class="ttdeci">tmat3x2< bool, highp > bool3x2</div><div class="ttdoc">boolean matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00072">compatibility.hpp:72</a></div></div>
+<div class="ttc" id="a00187_html_gac38c8929ccc87a2dc81eaab97ad5190e"><div class="ttname"><a href="a00187.html#gac38c8929ccc87a2dc81eaab97ad5190e">glm::float3x4</a></div><div class="ttdeci">tmat3x4< float, highp > float3x4</div><div class="ttdoc">single-precision floating-point matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00106">compatibility.hpp:106</a></div></div>
+<div class="ttc" id="a00187_html_ga6dc93f0794eb5fadd7f68b85141a2434"><div class="ttname"><a href="a00187.html#ga6dc93f0794eb5fadd7f68b85141a2434">glm::int2x3</a></div><div class="ttdeci">tmat2x3< int, highp > int2x3</div><div class="ttdoc">integer matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00086">compatibility.hpp:86</a></div></div>
+<div class="ttc" id="a00187_html_ga2bfa618285894e34f299e4984f092d56"><div class="ttname"><a href="a00187.html#ga2bfa618285894e34f299e4984f092d56">glm::float3</a></div><div class="ttdeci">tvec3< float, highp > float3</div><div class="ttdoc">single-precision floating-point vector with 3 components. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00097">compatibility.hpp:97</a></div></div>
+<div class="ttc" id="a00146_html_ga93bce26c7d80d30a62f5c508f8498a6c"><div class="ttname"><a href="a00146.html#ga93bce26c7d80d30a62f5c508f8498a6c">glm::clamp</a></div><div class="ttdeci">GLM_FUNC_DECL genType clamp(genType x, genType minVal, genType maxVal)</div><div class="ttdoc">Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal an...</div></div>
+<div class="ttc" id="a00187_html_gaaa6ceedf08a85e5fd73a482bc8b77b88"><div class="ttname"><a href="a00187.html#gaaa6ceedf08a85e5fd73a482bc8b77b88">glm::int3</a></div><div class="ttdeci">tvec3< int, highp > int3</div><div class="ttdoc">integer vector with 3 components. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00081">compatibility.hpp:81</a></div></div>
+<div class="ttc" id="a00187_html_ga73720b8dc4620835b17f74d428f98c0c"><div class="ttname"><a href="a00187.html#ga73720b8dc4620835b17f74d428f98c0c">glm::float1x1</a></div><div class="ttdeci">float float1x1</div><div class="ttdoc">single-precision floating-point matrix with 1 component. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00100">compatibility.hpp:100</a></div></div>
+<div class="ttc" id="a00187_html_gaa16a13c6f2768e83ca133430e82ab89e"><div class="ttname"><a href="a00187.html#gaa16a13c6f2768e83ca133430e82ab89e">glm::double2</a></div><div class="ttdeci">tvec2< double, highp > double2</div><div class="ttdoc">double-precision floating-point vector with 2 components. (From GLM_GTX_compatibility extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00112">compatibility.hpp:112</a></div></div>
+<div class="ttc" id="a00187_html_ga7f895c936f0c29c8729afbbf22806090"><div class="ttname"><a href="a00187.html#ga7f895c936f0c29c8729afbbf22806090">glm::bool1x1</a></div><div class="ttdeci">bool bool1x1</div><div class="ttdoc">boolean matrix with 1 x 1 component. (From GLM_GTX_compatibility extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00016_source.html#l00068">compatibility.hpp:68</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00017.html b/src/third_party/glm/doc/api/a00017.html
new file mode 100644
index 0000000..aa96a11
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00017.html
@@ -0,0 +1,93 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: component_wise.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">component_wise.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00017_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gaf71833350e15e74d31cbf8a3e7f27051"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gaf71833350e15e74d31cbf8a3e7f27051"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType::value_type </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00188.html#gaf71833350e15e74d31cbf8a3e7f27051">compAdd</a> (genType const &v)</td></tr>
+<tr class="separator:gaf71833350e15e74d31cbf8a3e7f27051"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gabfa4bb19298c8c73d4217ba759c496b6"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gabfa4bb19298c8c73d4217ba759c496b6"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType::value_type </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00188.html#gabfa4bb19298c8c73d4217ba759c496b6">compMax</a> (genType const &v)</td></tr>
+<tr class="separator:gabfa4bb19298c8c73d4217ba759c496b6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab5d0832b5c7bb01b8d7395973bfb1425"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gab5d0832b5c7bb01b8d7395973bfb1425"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType::value_type </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00188.html#gab5d0832b5c7bb01b8d7395973bfb1425">compMin</a> (genType const &v)</td></tr>
+<tr class="separator:gab5d0832b5c7bb01b8d7395973bfb1425"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae8ab88024197202c9479d33bdc5a8a5d"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gae8ab88024197202c9479d33bdc5a8a5d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType::value_type </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00188.html#gae8ab88024197202c9479d33bdc5a8a5d">compMul</a> (genType const &v)</td></tr>
+<tr class="separator:gae8ab88024197202c9479d33bdc5a8a5d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaeb34fdf090d2d4da9babcdfec267f09e"><td class="memTemplParams" colspan="2">template<typename floatType , typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gaeb34fdf090d2d4da9babcdfec267f09e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< floatType, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00188.html#gaeb34fdf090d2d4da9babcdfec267f09e">compNormalize</a> (vecType< T, P > const &v)</td></tr>
+<tr class="separator:gaeb34fdf090d2d4da9babcdfec267f09e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaea99a3271016bfd331d9fa7587f3db37"><td class="memTemplParams" colspan="2">template<typename T , typename floatType , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gaea99a3271016bfd331d9fa7587f3db37"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00188.html#gaea99a3271016bfd331d9fa7587f3db37">compScale</a> (vecType< floatType, P > const &v)</td></tr>
+<tr class="separator:gaea99a3271016bfd331d9fa7587f3db37"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00188.html">GLM_GTX_component_wise</a> </p>
+<dl class="section date"><dt>Date</dt><dd>2007-05-21 / 2011-06-07 </dd></dl>
+<dl class="section author"><dt>Author</dt><dd>Christophe Riccio</dd></dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00017_source.html">component_wise.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00017_source.html b/src/third_party/glm/doc/api/a00017_source.html
new file mode 100644
index 0000000..de76ebb
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00017_source.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: component_wise.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">component_wise.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00017.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">// Dependencies</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "../detail/setup.hpp"</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include "../detail/precision.hpp"</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_component_wise extension included")</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> {</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> <span class="keywordtype">float</span>Type, <span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  GLM_FUNC_DECL vecType<floatType, P> <a class="code" href="a00188.html#gaeb34fdf090d2d4da9babcdfec267f09e">compNormalize</a>(vecType<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, <span class="keyword">typename</span> <span class="keywordtype">float</span>Type, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00188.html#gaea99a3271016bfd331d9fa7587f3db37">compScale</a>(vecType<floatType, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType> </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  GLM_FUNC_DECL <span class="keyword">typename</span> genType::value_type <a class="code" href="a00188.html#gaf71833350e15e74d31cbf8a3e7f27051">compAdd</a>(genType <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType> </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  GLM_FUNC_DECL <span class="keyword">typename</span> genType::value_type <a class="code" href="a00188.html#gae8ab88024197202c9479d33bdc5a8a5d">compMul</a>(genType <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType> </div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  GLM_FUNC_DECL <span class="keyword">typename</span> genType::value_type <a class="code" href="a00188.html#gab5d0832b5c7bb01b8d7395973bfb1425">compMin</a>(genType <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType> </div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  GLM_FUNC_DECL <span class="keyword">typename</span> genType::value_type <a class="code" href="a00188.html#gabfa4bb19298c8c73d4217ba759c496b6">compMax</a>(genType <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="preprocessor">#include "component_wise.inl"</span></div>
+<div class="ttc" id="a00188_html_gaf71833350e15e74d31cbf8a3e7f27051"><div class="ttname"><a href="a00188.html#gaf71833350e15e74d31cbf8a3e7f27051">glm::compAdd</a></div><div class="ttdeci">GLM_FUNC_DECL genType::value_type compAdd(genType const &v)</div><div class="ttdoc">Add all vector components together. </div></div>
+<div class="ttc" id="a00188_html_gaea99a3271016bfd331d9fa7587f3db37"><div class="ttname"><a href="a00188.html#gaea99a3271016bfd331d9fa7587f3db37">glm::compScale</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > compScale(vecType< floatType, P > const &v)</div><div class="ttdoc">Convert a normalized float vector to an integer vector. </div></div>
+<div class="ttc" id="a00188_html_gae8ab88024197202c9479d33bdc5a8a5d"><div class="ttname"><a href="a00188.html#gae8ab88024197202c9479d33bdc5a8a5d">glm::compMul</a></div><div class="ttdeci">GLM_FUNC_DECL genType::value_type compMul(genType const &v)</div><div class="ttdoc">Multiply all vector components together. </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00188_html_gaeb34fdf090d2d4da9babcdfec267f09e"><div class="ttname"><a href="a00188.html#gaeb34fdf090d2d4da9babcdfec267f09e">glm::compNormalize</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< floatType, P > compNormalize(vecType< T, P > const &v)</div><div class="ttdoc">Convert an integer vector to a normalized float vector. </div></div>
+<div class="ttc" id="a00188_html_gab5d0832b5c7bb01b8d7395973bfb1425"><div class="ttname"><a href="a00188.html#gab5d0832b5c7bb01b8d7395973bfb1425">glm::compMin</a></div><div class="ttdeci">GLM_FUNC_DECL genType::value_type compMin(genType const &v)</div><div class="ttdoc">Find the minimum value between single vector components. </div></div>
+<div class="ttc" id="a00188_html_gabfa4bb19298c8c73d4217ba759c496b6"><div class="ttname"><a href="a00188.html#gabfa4bb19298c8c73d4217ba759c496b6">glm::compMax</a></div><div class="ttdeci">GLM_FUNC_DECL genType::value_type compMax(genType const &v)</div><div class="ttdoc">Find the maximum value between single vector components. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00018.html b/src/third_party/glm/doc/api/a00018.html
new file mode 100644
index 0000000..76b2c5a
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00018.html
@@ -0,0 +1,162 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: constants.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_9440d7c11b99dcd7e5d369c7cf9802fe.html">gtc</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">constants.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00018_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga4b7956eb6e2fbedfc7cf2e46e85c5139"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga4b7956eb6e2fbedfc7cf2e46e85c5139"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139">e</a> ()</td></tr>
+<tr class="separator:ga4b7956eb6e2fbedfc7cf2e46e85c5139"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2a1e57fc5592b69cfae84174cbfc9429"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga2a1e57fc5592b69cfae84174cbfc9429"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#ga2a1e57fc5592b69cfae84174cbfc9429">epsilon</a> ()</td></tr>
+<tr class="separator:ga2a1e57fc5592b69cfae84174cbfc9429"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad8fe2e6f90bce9d829e9723b649fbd42"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gad8fe2e6f90bce9d829e9723b649fbd42"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#gad8fe2e6f90bce9d829e9723b649fbd42">euler</a> ()</td></tr>
+<tr class="separator:gad8fe2e6f90bce9d829e9723b649fbd42"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga753950e5140e4ea6a88e4a18ba61dc09"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga753950e5140e4ea6a88e4a18ba61dc09"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#ga753950e5140e4ea6a88e4a18ba61dc09">four_over_pi</a> ()</td></tr>
+<tr class="separator:ga753950e5140e4ea6a88e4a18ba61dc09"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga748cf8642830657c5b7eae04d0a80899"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga748cf8642830657c5b7eae04d0a80899"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#ga748cf8642830657c5b7eae04d0a80899">golden_ratio</a> ()</td></tr>
+<tr class="separator:ga748cf8642830657c5b7eae04d0a80899"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0c36b41d462e45641faf7d7938948bac"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga0c36b41d462e45641faf7d7938948bac"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#ga0c36b41d462e45641faf7d7938948bac">half_pi</a> ()</td></tr>
+<tr class="separator:ga0c36b41d462e45641faf7d7938948bac"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaca94292c839ed31a405ab7a81ae7e850"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gaca94292c839ed31a405ab7a81ae7e850"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#gaca94292c839ed31a405ab7a81ae7e850">ln_ln_two</a> ()</td></tr>
+<tr class="separator:gaca94292c839ed31a405ab7a81ae7e850"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf97ebc6c059ffd788e6c4946f71ef66c"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gaf97ebc6c059ffd788e6c4946f71ef66c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#gaf97ebc6c059ffd788e6c4946f71ef66c">ln_ten</a> ()</td></tr>
+<tr class="separator:gaf97ebc6c059ffd788e6c4946f71ef66c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga24f4d27765678116f41a2f336ab7975c"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga24f4d27765678116f41a2f336ab7975c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#ga24f4d27765678116f41a2f336ab7975c">ln_two</a> ()</td></tr>
+<tr class="separator:ga24f4d27765678116f41a2f336ab7975c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga39c2fb227631ca25894326529bdd1ee5"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga39c2fb227631ca25894326529bdd1ee5"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#ga39c2fb227631ca25894326529bdd1ee5">one</a> ()</td></tr>
+<tr class="separator:ga39c2fb227631ca25894326529bdd1ee5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga555150da2b06d23c8738981d5013e0eb"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga555150da2b06d23c8738981d5013e0eb"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#ga555150da2b06d23c8738981d5013e0eb">one_over_pi</a> ()</td></tr>
+<tr class="separator:ga555150da2b06d23c8738981d5013e0eb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga788fa23a0939bac4d1d0205fb4f35818"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga788fa23a0939bac4d1d0205fb4f35818"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#ga788fa23a0939bac4d1d0205fb4f35818">one_over_root_two</a> ()</td></tr>
+<tr class="separator:ga788fa23a0939bac4d1d0205fb4f35818"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7c922b427986cbb2e4c6ac69874eefbc"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga7c922b427986cbb2e4c6ac69874eefbc"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#ga7c922b427986cbb2e4c6ac69874eefbc">one_over_two_pi</a> ()</td></tr>
+<tr class="separator:ga7c922b427986cbb2e4c6ac69874eefbc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga94bafeb2a0f23ab6450fed1f98ee4e45"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga94bafeb2a0f23ab6450fed1f98ee4e45"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#ga94bafeb2a0f23ab6450fed1f98ee4e45">pi</a> ()</td></tr>
+<tr class="separator:ga94bafeb2a0f23ab6450fed1f98ee4e45"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3c9df42bd73c519a995c43f0f99e77e0"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga3c9df42bd73c519a995c43f0f99e77e0"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#ga3c9df42bd73c519a995c43f0f99e77e0">quarter_pi</a> ()</td></tr>
+<tr class="separator:ga3c9df42bd73c519a995c43f0f99e77e0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae9ebbded75b53d4faeb1e4ef8b3347a2"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gae9ebbded75b53d4faeb1e4ef8b3347a2"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#gae9ebbded75b53d4faeb1e4ef8b3347a2">root_five</a> ()</td></tr>
+<tr class="separator:gae9ebbded75b53d4faeb1e4ef8b3347a2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4e276cb823cc5e612d4f89ed99c75039"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga4e276cb823cc5e612d4f89ed99c75039"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#ga4e276cb823cc5e612d4f89ed99c75039">root_half_pi</a> ()</td></tr>
+<tr class="separator:ga4e276cb823cc5e612d4f89ed99c75039"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4129412e96b33707a77c1a07652e23e2"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga4129412e96b33707a77c1a07652e23e2"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#ga4129412e96b33707a77c1a07652e23e2">root_ln_four</a> ()</td></tr>
+<tr class="separator:ga4129412e96b33707a77c1a07652e23e2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga261380796b2cd496f68d2cf1d08b8eb9"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga261380796b2cd496f68d2cf1d08b8eb9"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#ga261380796b2cd496f68d2cf1d08b8eb9">root_pi</a> ()</td></tr>
+<tr class="separator:ga261380796b2cd496f68d2cf1d08b8eb9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4f286be4abe88be1eed7d2a9f6cb193e"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga4f286be4abe88be1eed7d2a9f6cb193e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#ga4f286be4abe88be1eed7d2a9f6cb193e">root_three</a> ()</td></tr>
+<tr class="separator:ga4f286be4abe88be1eed7d2a9f6cb193e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga74e607d29020f100c0d0dc46ce2ca950"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga74e607d29020f100c0d0dc46ce2ca950"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#ga74e607d29020f100c0d0dc46ce2ca950">root_two</a> ()</td></tr>
+<tr class="separator:ga74e607d29020f100c0d0dc46ce2ca950"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2bcedc575039fe0cd765742f8bbb0bd3"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga2bcedc575039fe0cd765742f8bbb0bd3"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#ga2bcedc575039fe0cd765742f8bbb0bd3">root_two_pi</a> ()</td></tr>
+<tr class="separator:ga2bcedc575039fe0cd765742f8bbb0bd3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3077c6311010a214b69ddc8214ec13b5"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga3077c6311010a214b69ddc8214ec13b5"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#ga3077c6311010a214b69ddc8214ec13b5">third</a> ()</td></tr>
+<tr class="separator:ga3077c6311010a214b69ddc8214ec13b5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae94950df74b0ce382b1fc1d978ef7394"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gae94950df74b0ce382b1fc1d978ef7394"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#gae94950df74b0ce382b1fc1d978ef7394">three_over_two_pi</a> ()</td></tr>
+<tr class="separator:gae94950df74b0ce382b1fc1d978ef7394"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga74eadc8a211253079683219a3ea0462a"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga74eadc8a211253079683219a3ea0462a"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#ga74eadc8a211253079683219a3ea0462a">two_over_pi</a> ()</td></tr>
+<tr class="separator:ga74eadc8a211253079683219a3ea0462a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5827301817640843cf02026a8d493894"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga5827301817640843cf02026a8d493894"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#ga5827301817640843cf02026a8d493894">two_over_root_pi</a> ()</td></tr>
+<tr class="separator:ga5827301817640843cf02026a8d493894"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa5276a4617566abcfe49286f40e3a256"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gaa5276a4617566abcfe49286f40e3a256"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#gaa5276a4617566abcfe49286f40e3a256">two_pi</a> ()</td></tr>
+<tr class="separator:gaa5276a4617566abcfe49286f40e3a256"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9b4d2f4322edcf63a6737b92a29dd1f5"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga9b4d2f4322edcf63a6737b92a29dd1f5"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#ga9b4d2f4322edcf63a6737b92a29dd1f5">two_thirds</a> ()</td></tr>
+<tr class="separator:ga9b4d2f4322edcf63a6737b92a29dd1f5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga788f5a421fc0f40a1296ebc094cbaa8a"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga788f5a421fc0f40a1296ebc094cbaa8a"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#ga788f5a421fc0f40a1296ebc094cbaa8a">zero</a> ()</td></tr>
+<tr class="separator:ga788f5a421fc0f40a1296ebc094cbaa8a"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00162.html">GLM_GTC_constants</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd>
+<dd>
+gtc_half_float (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00018_source.html">constants.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00018_source.html b/src/third_party/glm/doc/api/a00018_source.html
new file mode 100644
index 0000000..2468481
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00018_source.html
@@ -0,0 +1,193 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: constants.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_9440d7c11b99dcd7e5d369c7cf9802fe.html">gtc</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">constants.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00018.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// Dependencies</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "../detail/setup.hpp"</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor"># pragma message("GLM: GLM_GTC_constants extension included")</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> {</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00162.html#ga2a1e57fc5592b69cfae84174cbfc9429">epsilon</a>();</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00162.html#ga788f5a421fc0f40a1296ebc094cbaa8a">zero</a>();</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00162.html#ga39c2fb227631ca25894326529bdd1ee5">one</a>();</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00162.html#ga94bafeb2a0f23ab6450fed1f98ee4e45">pi</a>();</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00162.html#gaa5276a4617566abcfe49286f40e3a256">two_pi</a>();</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00162.html#ga261380796b2cd496f68d2cf1d08b8eb9">root_pi</a>();</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00162.html#ga0c36b41d462e45641faf7d7938948bac">half_pi</a>();</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00162.html#gae94950df74b0ce382b1fc1d978ef7394">three_over_two_pi</a>();</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00162.html#ga3c9df42bd73c519a995c43f0f99e77e0">quarter_pi</a>();</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00162.html#ga555150da2b06d23c8738981d5013e0eb">one_over_pi</a>();</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00162.html#ga7c922b427986cbb2e4c6ac69874eefbc">one_over_two_pi</a>();</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00162.html#ga74eadc8a211253079683219a3ea0462a">two_over_pi</a>();</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00162.html#ga753950e5140e4ea6a88e4a18ba61dc09">four_over_pi</a>();</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00162.html#ga5827301817640843cf02026a8d493894">two_over_root_pi</a>();</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00162.html#ga788fa23a0939bac4d1d0205fb4f35818">one_over_root_two</a>();</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00162.html#ga4e276cb823cc5e612d4f89ed99c75039">root_half_pi</a>();</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00162.html#ga2bcedc575039fe0cd765742f8bbb0bd3">root_two_pi</a>();</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00162.html#ga4129412e96b33707a77c1a07652e23e2">root_ln_four</a>();</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00162.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139">e</a>();</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00162.html#gad8fe2e6f90bce9d829e9723b649fbd42">euler</a>();</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00162.html#ga74e607d29020f100c0d0dc46ce2ca950">root_two</a>();</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00162.html#ga4f286be4abe88be1eed7d2a9f6cb193e">root_three</a>();</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00162.html#gae9ebbded75b53d4faeb1e4ef8b3347a2">root_five</a>();</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00162.html#ga24f4d27765678116f41a2f336ab7975c">ln_two</a>();</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00162.html#gaf97ebc6c059ffd788e6c4946f71ef66c">ln_ten</a>();</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00162.html#gaca94292c839ed31a405ab7a81ae7e850">ln_ln_two</a>();</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00162.html#ga3077c6311010a214b69ddc8214ec13b5">third</a>();</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00162.html#ga9b4d2f4322edcf63a6737b92a29dd1f5">two_thirds</a>();</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00162.html#ga748cf8642830657c5b7eae04d0a80899">golden_ratio</a>();</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> } <span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="preprocessor">#include "constants.inl"</span></div>
+<div class="ttc" id="a00162_html_ga74e607d29020f100c0d0dc46ce2ca950"><div class="ttname"><a href="a00162.html#ga74e607d29020f100c0d0dc46ce2ca950">glm::root_two</a></div><div class="ttdeci">GLM_FUNC_DECL GLM_CONSTEXPR genType root_two()</div><div class="ttdoc">Return sqrt(2). </div></div>
+<div class="ttc" id="a00162_html_ga261380796b2cd496f68d2cf1d08b8eb9"><div class="ttname"><a href="a00162.html#ga261380796b2cd496f68d2cf1d08b8eb9">glm::root_pi</a></div><div class="ttdeci">GLM_FUNC_DECL GLM_CONSTEXPR genType root_pi()</div><div class="ttdoc">Return square root of pi. </div></div>
+<div class="ttc" id="a00162_html_ga788f5a421fc0f40a1296ebc094cbaa8a"><div class="ttname"><a href="a00162.html#ga788f5a421fc0f40a1296ebc094cbaa8a">glm::zero</a></div><div class="ttdeci">GLM_FUNC_DECL GLM_CONSTEXPR genType zero()</div><div class="ttdoc">Return 0. </div></div>
+<div class="ttc" id="a00162_html_ga39c2fb227631ca25894326529bdd1ee5"><div class="ttname"><a href="a00162.html#ga39c2fb227631ca25894326529bdd1ee5">glm::one</a></div><div class="ttdeci">GLM_FUNC_DECL GLM_CONSTEXPR genType one()</div><div class="ttdoc">Return 1. </div></div>
+<div class="ttc" id="a00162_html_gad8fe2e6f90bce9d829e9723b649fbd42"><div class="ttname"><a href="a00162.html#gad8fe2e6f90bce9d829e9723b649fbd42">glm::euler</a></div><div class="ttdeci">GLM_FUNC_DECL GLM_CONSTEXPR genType euler()</div><div class="ttdoc">Return Euler's constant. </div></div>
+<div class="ttc" id="a00162_html_ga2a1e57fc5592b69cfae84174cbfc9429"><div class="ttname"><a href="a00162.html#ga2a1e57fc5592b69cfae84174cbfc9429">glm::epsilon</a></div><div class="ttdeci">GLM_FUNC_DECL GLM_CONSTEXPR genType epsilon()</div><div class="ttdoc">Return the epsilon constant for floating point types. </div></div>
+<div class="ttc" id="a00162_html_ga4b7956eb6e2fbedfc7cf2e46e85c5139"><div class="ttname"><a href="a00162.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139">glm::e</a></div><div class="ttdeci">GLM_FUNC_DECL GLM_CONSTEXPR genType e()</div><div class="ttdoc">Return e constant. </div></div>
+<div class="ttc" id="a00162_html_ga5827301817640843cf02026a8d493894"><div class="ttname"><a href="a00162.html#ga5827301817640843cf02026a8d493894">glm::two_over_root_pi</a></div><div class="ttdeci">GLM_FUNC_DECL GLM_CONSTEXPR genType two_over_root_pi()</div><div class="ttdoc">Return 2 / sqrt(pi). </div></div>
+<div class="ttc" id="a00162_html_ga4f286be4abe88be1eed7d2a9f6cb193e"><div class="ttname"><a href="a00162.html#ga4f286be4abe88be1eed7d2a9f6cb193e">glm::root_three</a></div><div class="ttdeci">GLM_FUNC_DECL GLM_CONSTEXPR genType root_three()</div><div class="ttdoc">Return sqrt(3). </div></div>
+<div class="ttc" id="a00162_html_gaf97ebc6c059ffd788e6c4946f71ef66c"><div class="ttname"><a href="a00162.html#gaf97ebc6c059ffd788e6c4946f71ef66c">glm::ln_ten</a></div><div class="ttdeci">GLM_FUNC_DECL GLM_CONSTEXPR genType ln_ten()</div><div class="ttdoc">Return ln(10). </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00162_html_ga3077c6311010a214b69ddc8214ec13b5"><div class="ttname"><a href="a00162.html#ga3077c6311010a214b69ddc8214ec13b5">glm::third</a></div><div class="ttdeci">GLM_FUNC_DECL GLM_CONSTEXPR genType third()</div><div class="ttdoc">Return 1 / 3. </div></div>
+<div class="ttc" id="a00162_html_ga24f4d27765678116f41a2f336ab7975c"><div class="ttname"><a href="a00162.html#ga24f4d27765678116f41a2f336ab7975c">glm::ln_two</a></div><div class="ttdeci">GLM_FUNC_DECL GLM_CONSTEXPR genType ln_two()</div><div class="ttdoc">Return ln(2). </div></div>
+<div class="ttc" id="a00162_html_ga788fa23a0939bac4d1d0205fb4f35818"><div class="ttname"><a href="a00162.html#ga788fa23a0939bac4d1d0205fb4f35818">glm::one_over_root_two</a></div><div class="ttdeci">GLM_FUNC_DECL GLM_CONSTEXPR genType one_over_root_two()</div><div class="ttdoc">Return 1 / sqrt(2). </div></div>
+<div class="ttc" id="a00162_html_gaca94292c839ed31a405ab7a81ae7e850"><div class="ttname"><a href="a00162.html#gaca94292c839ed31a405ab7a81ae7e850">glm::ln_ln_two</a></div><div class="ttdeci">GLM_FUNC_DECL GLM_CONSTEXPR genType ln_ln_two()</div><div class="ttdoc">Return ln(ln(2)). </div></div>
+<div class="ttc" id="a00162_html_gae94950df74b0ce382b1fc1d978ef7394"><div class="ttname"><a href="a00162.html#gae94950df74b0ce382b1fc1d978ef7394">glm::three_over_two_pi</a></div><div class="ttdeci">GLM_FUNC_DECL GLM_CONSTEXPR genType three_over_two_pi()</div><div class="ttdoc">Return pi / 2 * 3. </div></div>
+<div class="ttc" id="a00162_html_ga0c36b41d462e45641faf7d7938948bac"><div class="ttname"><a href="a00162.html#ga0c36b41d462e45641faf7d7938948bac">glm::half_pi</a></div><div class="ttdeci">GLM_FUNC_DECL GLM_CONSTEXPR genType half_pi()</div><div class="ttdoc">Return pi / 2. </div></div>
+<div class="ttc" id="a00162_html_ga7c922b427986cbb2e4c6ac69874eefbc"><div class="ttname"><a href="a00162.html#ga7c922b427986cbb2e4c6ac69874eefbc">glm::one_over_two_pi</a></div><div class="ttdeci">GLM_FUNC_DECL GLM_CONSTEXPR genType one_over_two_pi()</div><div class="ttdoc">Return 1 / (pi * 2). </div></div>
+<div class="ttc" id="a00162_html_gae9ebbded75b53d4faeb1e4ef8b3347a2"><div class="ttname"><a href="a00162.html#gae9ebbded75b53d4faeb1e4ef8b3347a2">glm::root_five</a></div><div class="ttdeci">GLM_FUNC_DECL GLM_CONSTEXPR genType root_five()</div><div class="ttdoc">Return sqrt(5). </div></div>
+<div class="ttc" id="a00162_html_ga4e276cb823cc5e612d4f89ed99c75039"><div class="ttname"><a href="a00162.html#ga4e276cb823cc5e612d4f89ed99c75039">glm::root_half_pi</a></div><div class="ttdeci">GLM_FUNC_DECL GLM_CONSTEXPR genType root_half_pi()</div><div class="ttdoc">Return sqrt(pi / 2). </div></div>
+<div class="ttc" id="a00162_html_ga2bcedc575039fe0cd765742f8bbb0bd3"><div class="ttname"><a href="a00162.html#ga2bcedc575039fe0cd765742f8bbb0bd3">glm::root_two_pi</a></div><div class="ttdeci">GLM_FUNC_DECL GLM_CONSTEXPR genType root_two_pi()</div><div class="ttdoc">Return sqrt(2 * pi). </div></div>
+<div class="ttc" id="a00162_html_ga753950e5140e4ea6a88e4a18ba61dc09"><div class="ttname"><a href="a00162.html#ga753950e5140e4ea6a88e4a18ba61dc09">glm::four_over_pi</a></div><div class="ttdeci">GLM_FUNC_DECL GLM_CONSTEXPR genType four_over_pi()</div><div class="ttdoc">Return 4 / pi. </div></div>
+<div class="ttc" id="a00162_html_ga4129412e96b33707a77c1a07652e23e2"><div class="ttname"><a href="a00162.html#ga4129412e96b33707a77c1a07652e23e2">glm::root_ln_four</a></div><div class="ttdeci">GLM_FUNC_DECL GLM_CONSTEXPR genType root_ln_four()</div><div class="ttdoc">Return sqrt(ln(4)). </div></div>
+<div class="ttc" id="a00162_html_ga555150da2b06d23c8738981d5013e0eb"><div class="ttname"><a href="a00162.html#ga555150da2b06d23c8738981d5013e0eb">glm::one_over_pi</a></div><div class="ttdeci">GLM_FUNC_DECL GLM_CONSTEXPR genType one_over_pi()</div><div class="ttdoc">Return 1 / pi. </div></div>
+<div class="ttc" id="a00162_html_ga9b4d2f4322edcf63a6737b92a29dd1f5"><div class="ttname"><a href="a00162.html#ga9b4d2f4322edcf63a6737b92a29dd1f5">glm::two_thirds</a></div><div class="ttdeci">GLM_FUNC_DECL GLM_CONSTEXPR genType two_thirds()</div><div class="ttdoc">Return 2 / 3. </div></div>
+<div class="ttc" id="a00162_html_ga3c9df42bd73c519a995c43f0f99e77e0"><div class="ttname"><a href="a00162.html#ga3c9df42bd73c519a995c43f0f99e77e0">glm::quarter_pi</a></div><div class="ttdeci">GLM_FUNC_DECL GLM_CONSTEXPR genType quarter_pi()</div><div class="ttdoc">Return pi / 4. </div></div>
+<div class="ttc" id="a00162_html_ga94bafeb2a0f23ab6450fed1f98ee4e45"><div class="ttname"><a href="a00162.html#ga94bafeb2a0f23ab6450fed1f98ee4e45">glm::pi</a></div><div class="ttdeci">GLM_FUNC_DECL GLM_CONSTEXPR genType pi()</div><div class="ttdoc">Return the pi constant. </div></div>
+<div class="ttc" id="a00162_html_ga74eadc8a211253079683219a3ea0462a"><div class="ttname"><a href="a00162.html#ga74eadc8a211253079683219a3ea0462a">glm::two_over_pi</a></div><div class="ttdeci">GLM_FUNC_DECL GLM_CONSTEXPR genType two_over_pi()</div><div class="ttdoc">Return 2 / pi. </div></div>
+<div class="ttc" id="a00162_html_ga748cf8642830657c5b7eae04d0a80899"><div class="ttname"><a href="a00162.html#ga748cf8642830657c5b7eae04d0a80899">glm::golden_ratio</a></div><div class="ttdeci">GLM_FUNC_DECL GLM_CONSTEXPR genType golden_ratio()</div><div class="ttdoc">Return the golden ratio constant. </div></div>
+<div class="ttc" id="a00162_html_gaa5276a4617566abcfe49286f40e3a256"><div class="ttname"><a href="a00162.html#gaa5276a4617566abcfe49286f40e3a256">glm::two_pi</a></div><div class="ttdeci">GLM_FUNC_DECL GLM_CONSTEXPR genType two_pi()</div><div class="ttdoc">Return pi * 2. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00019.html b/src/third_party/glm/doc/api/a00019.html
new file mode 100644
index 0000000..07d7a1b
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00019.html
@@ -0,0 +1,129 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: dual_quaternion.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#typedef-members">Typedefs</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">dual_quaternion.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00019_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ga3d71f98d84ba59dfe4e369fde4714cd6"><td class="memItemLeft" align="right" valign="top">typedef highp_ddualquat </td><td class="memItemRight" valign="bottom"><a class="el" href="a00189.html#ga3d71f98d84ba59dfe4e369fde4714cd6">ddualquat</a></td></tr>
+<tr class="separator:ga3d71f98d84ba59dfe4e369fde4714cd6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae93abee0c979902fbec6a7bee0f6fae1"><td class="memItemLeft" align="right" valign="top">typedef highp_fdualquat </td><td class="memItemRight" valign="bottom"><a class="el" href="a00189.html#gae93abee0c979902fbec6a7bee0f6fae1">dualquat</a></td></tr>
+<tr class="separator:gae93abee0c979902fbec6a7bee0f6fae1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga237c2b9b42c9a930e49de5840ae0f930"><td class="memItemLeft" align="right" valign="top">typedef highp_fdualquat </td><td class="memItemRight" valign="bottom"><a class="el" href="a00189.html#ga237c2b9b42c9a930e49de5840ae0f930">fdualquat</a></td></tr>
+<tr class="separator:ga237c2b9b42c9a930e49de5840ae0f930"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8f67eafa7197d7a668dad5105a463d2a"><td class="memItemLeft" align="right" valign="top">typedef tdualquat< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00189.html#ga8f67eafa7197d7a668dad5105a463d2a">highp_ddualquat</a></td></tr>
+<tr class="separator:ga8f67eafa7197d7a668dad5105a463d2a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9ef5bf1da52a9d4932335a517086ceaf"><td class="memItemLeft" align="right" valign="top">typedef tdualquat< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00189.html#ga9ef5bf1da52a9d4932335a517086ceaf">highp_dualquat</a></td></tr>
+<tr class="separator:ga9ef5bf1da52a9d4932335a517086ceaf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4c4e55e9c99dc57b299ed590968da564"><td class="memItemLeft" align="right" valign="top">typedef tdualquat< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00189.html#ga4c4e55e9c99dc57b299ed590968da564">highp_fdualquat</a></td></tr>
+<tr class="separator:ga4c4e55e9c99dc57b299ed590968da564"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab4c5103338af3dac7e0fbc86895a3f1a"><td class="memItemLeft" align="right" valign="top">typedef tdualquat< double, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00189.html#gab4c5103338af3dac7e0fbc86895a3f1a">lowp_ddualquat</a></td></tr>
+<tr class="separator:gab4c5103338af3dac7e0fbc86895a3f1a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gade05d29ebd4deea0f883d0e1bb4169aa"><td class="memItemLeft" align="right" valign="top">typedef tdualquat< float, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00189.html#gade05d29ebd4deea0f883d0e1bb4169aa">lowp_dualquat</a></td></tr>
+<tr class="separator:gade05d29ebd4deea0f883d0e1bb4169aa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa38f671be25a7f3b136a452a8bb42860"><td class="memItemLeft" align="right" valign="top">typedef tdualquat< float, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00189.html#gaa38f671be25a7f3b136a452a8bb42860">lowp_fdualquat</a></td></tr>
+<tr class="separator:gaa38f671be25a7f3b136a452a8bb42860"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0fb11e48e2d16348ccb06a25213641b4"><td class="memItemLeft" align="right" valign="top">typedef tdualquat< double, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00189.html#ga0fb11e48e2d16348ccb06a25213641b4">mediump_ddualquat</a></td></tr>
+<tr class="separator:ga0fb11e48e2d16348ccb06a25213641b4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa7aeb54c167712b38f2178a1be2360ad"><td class="memItemLeft" align="right" valign="top">typedef tdualquat< float, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00189.html#gaa7aeb54c167712b38f2178a1be2360ad">mediump_dualquat</a></td></tr>
+<tr class="separator:gaa7aeb54c167712b38f2178a1be2360ad"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4a6b594ff7e81150d8143001367a9431"><td class="memItemLeft" align="right" valign="top">typedef tdualquat< float, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00189.html#ga4a6b594ff7e81150d8143001367a9431">mediump_fdualquat</a></td></tr>
+<tr class="separator:ga4a6b594ff7e81150d8143001367a9431"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gada9799afe2b62394dc498534beb5bc78"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gada9799afe2b62394dc498534beb5bc78"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tdualquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00189.html#gada9799afe2b62394dc498534beb5bc78">dualquat_cast</a> (tmat2x4< T, P > const &x)</td></tr>
+<tr class="separator:gada9799afe2b62394dc498534beb5bc78"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga20eb5758beb73cc6dbc2d9104f03ec20"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga20eb5758beb73cc6dbc2d9104f03ec20"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tdualquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00189.html#ga20eb5758beb73cc6dbc2d9104f03ec20">dualquat_cast</a> (tmat3x4< T, P > const &x)</td></tr>
+<tr class="separator:ga20eb5758beb73cc6dbc2d9104f03ec20"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2149d3cb8af04d9530de0cd16aa1aab2"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga2149d3cb8af04d9530de0cd16aa1aab2"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tdualquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00189.html#ga2149d3cb8af04d9530de0cd16aa1aab2">inverse</a> (tdualquat< T, P > const &q)</td></tr>
+<tr class="separator:ga2149d3cb8af04d9530de0cd16aa1aab2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8039b88397ca09275be924a26a806a59"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga8039b88397ca09275be924a26a806a59"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tdualquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00189.html#ga8039b88397ca09275be924a26a806a59">lerp</a> (tdualquat< T, P > const &x, tdualquat< T, P > const &y, T const &a)</td></tr>
+<tr class="separator:ga8039b88397ca09275be924a26a806a59"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2d124748183e12db8288eeaca350298e"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga2d124748183e12db8288eeaca350298e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat2x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00189.html#ga2d124748183e12db8288eeaca350298e">mat2x4_cast</a> (tdualquat< T, P > const &x)</td></tr>
+<tr class="separator:ga2d124748183e12db8288eeaca350298e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga576745d979e3c079a64152490c816954"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga576745d979e3c079a64152490c816954"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat3x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00189.html#ga576745d979e3c079a64152490c816954">mat3x4_cast</a> (tdualquat< T, P > const &x)</td></tr>
+<tr class="separator:ga576745d979e3c079a64152490c816954"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga495818aa48c23e9e730f87a3c337d1d5"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga495818aa48c23e9e730f87a3c337d1d5"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tdualquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00189.html#ga495818aa48c23e9e730f87a3c337d1d5">normalize</a> (tdualquat< T, P > const &q)</td></tr>
+<tr class="separator:ga495818aa48c23e9e730f87a3c337d1d5"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00189.html">GLM_GTX_dual_quaternion</a> </p>
+<dl class="section author"><dt>Author</dt><dd>Maksim Vorobiev (<a href="#" onclick="location.href='mai'+'lto:'+'mso'+'me'+'one'+'@g'+'mai'+'l.'+'com'; return false;">msome<span style="display: none;">.nosp@m.</span>one@<span style="display: none;">.nosp@m.</span>gmail<span style="display: none;">.nosp@m.</span>.com</a>)</dd></dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd>
+<dd>
+gtc_half_float (dependence) </dd>
+<dd>
+<a class="el" href="a00162.html" title="Provide a list of constants and precomputed useful values. ">GLM_GTC_constants</a> (dependence) </dd>
+<dd>
+<a class="el" href="a00172.html" title="Defines a templated quaternion type and several quaternion operations. ">GLM_GTC_quaternion</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00019_source.html">dual_quaternion.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00019_source.html b/src/third_party/glm/doc/api/a00019_source.html
new file mode 100644
index 0000000..9e03752
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00019_source.html
@@ -0,0 +1,271 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: dual_quaternion.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">dual_quaternion.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00019.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "../glm.hpp"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "../gtc/constants.hpp"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "../gtc/quaternion.hpp"</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_dual_quaternion extension included")</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> {</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P = defaultp></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keyword">struct </span>tdualquat</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  {</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="comment">// -- Implementation detail --</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keyword">typedef</span> T value_type;</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keyword">typedef</span> glm::tquat<T, P> part_type;</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="comment">// -- Data --</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  glm::tquat<T, P> real, dual;</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="comment">// -- Component accesses --</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keyword">typedef</span> length_t length_type;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  GLM_FUNC_DECL GLM_CONSTEXPR length_type <a class="code" href="a00148.html#ga18d45e3d4c7705e67ccfabd99e521604">length</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  GLM_FUNC_DECL part_type & operator[](length_type i);</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  GLM_FUNC_DECL part_type <span class="keyword">const</span> & operator[](length_type i) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="comment">// -- Implicit basic constructors --</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  GLM_FUNC_DECL GLM_CONSTEXPR tdualquat() GLM_DEFAULT_CTOR;</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(tdualquat<T, P> const & d) GLM_DEFAULT;</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  template <precision Q></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(tdualquat<T, Q> const & d);</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="comment">// -- Explicit basic constructors --</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tdualquat(ctor);</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(tquat<T, P> const & real);</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(tquat<T, P> const & <a class="code" href="a00224.html#ga49b4d082305cdfcfe0a5c184f684a902">orientation</a>, tvec3<T, P> const & translation);</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(tquat<T, P> const & real, tquat<T, P> const & dual);</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="comment">// -- Conversion constructors --</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  template <typename U, precision Q></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT tdualquat(tdualquat<U, Q> const & q);</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  GLM_FUNC_DECL GLM_EXPLICIT tdualquat(tmat2x4<T, P> const & holder_mat);</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  GLM_FUNC_DECL GLM_EXPLICIT tdualquat(tmat3x4<T, P> const & aug_mat);</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="comment">// -- Unary arithmetic operators --</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  GLM_FUNC_DECL tdualquat<T, P> & operator=(tdualquat<T, P> const & m) GLM_DEFAULT;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  template <typename U></div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  GLM_FUNC_DECL tdualquat<T, P> & operator=(tdualquat<U, P> const & m);</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  template <typename U></div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  GLM_FUNC_DECL tdualquat<T, P> & operator*=(U s);</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  template <typename U></div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  GLM_FUNC_DECL tdualquat<T, P> & operator/=(U s);</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  };</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="comment">// -- Unary bit operators --</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  GLM_FUNC_DECL tdualquat<T, P> operator+(tdualquat<T, P> const & q);</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  GLM_FUNC_DECL tdualquat<T, P> operator-(tdualquat<T, P> const & q);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="comment">// -- Binary operators --</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  GLM_FUNC_DECL tdualquat<T, P> operator+(tdualquat<T, P> const & q, tdualquat<T, P> const & p);</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  GLM_FUNC_DECL tdualquat<T, P> operator*(tdualquat<T, P> const & q, tdualquat<T, P> const & p);</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  GLM_FUNC_DECL tvec3<T, P> operator*(tdualquat<T, P> const & q, tvec3<T, P> const & v);</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  GLM_FUNC_DECL tvec3<T, P> operator*(tvec3<T, P> const & v, tdualquat<T, P> const & q);</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  GLM_FUNC_DECL tvec4<T, P> operator*(tdualquat<T, P> const & q, tvec4<T, P> const & v);</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  GLM_FUNC_DECL tvec4<T, P> operator*(tvec4<T, P> const & v, tdualquat<T, P> const & q);</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  GLM_FUNC_DECL tdualquat<T, P> operator*(tdualquat<T, P> const & q, T const & s);</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  GLM_FUNC_DECL tdualquat<T, P> operator*(T const & s, tdualquat<T, P> const & q);</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  GLM_FUNC_DECL tdualquat<T, P> operator/(tdualquat<T, P> const & q, T const & s);</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="comment">// -- Boolean operators --</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> operator==(tdualquat<T, P> const & q1, tdualquat<T, P> const & q2);</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> operator!=(tdualquat<T, P> const & q1, tdualquat<T, P> const & q2);</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> </div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  GLM_FUNC_DECL tdualquat<T, P> <a class="code" href="a00189.html#ga495818aa48c23e9e730f87a3c337d1d5">normalize</a>(tdualquat<T, P> const & q);</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  GLM_FUNC_DECL tdualquat<T, P> <a class="code" href="a00189.html#ga8039b88397ca09275be924a26a806a59">lerp</a>(tdualquat<T, P> const & x, tdualquat<T, P> const & y, T const & a);</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  GLM_FUNC_DECL tdualquat<T, P> <a class="code" href="a00189.html#ga2149d3cb8af04d9530de0cd16aa1aab2">inverse</a>(tdualquat<T, P> const & q);</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  GLM_FUNC_DECL tmat2x4<T, P> <a class="code" href="a00189.html#ga2d124748183e12db8288eeaca350298e">mat2x4_cast</a>(tdualquat<T, P> const & x);</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  GLM_FUNC_DECL tmat3x4<T, P> <a class="code" href="a00189.html#ga576745d979e3c079a64152490c816954">mat3x4_cast</a>(tdualquat<T, P> const & x);</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  GLM_FUNC_DECL tdualquat<T, P> <a class="code" href="a00189.html#ga20eb5758beb73cc6dbc2d9104f03ec20">dualquat_cast</a>(tmat2x4<T, P> const & x);</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  GLM_FUNC_DECL tdualquat<T, P> <a class="code" href="a00189.html#ga20eb5758beb73cc6dbc2d9104f03ec20">dualquat_cast</a>(tmat3x4<T, P> const & x);</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno"><a class="line" href="a00189.html#gade05d29ebd4deea0f883d0e1bb4169aa"> 179</a></span>  typedef tdualquat<<span class="keywordtype">float</span>, lowp> <a class="code" href="a00189.html#gade05d29ebd4deea0f883d0e1bb4169aa">lowp_dualquat</a>;</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div>
+<div class="line"><a name="l00184"></a><span class="lineno"><a class="line" href="a00189.html#gaa7aeb54c167712b38f2178a1be2360ad"> 184</a></span>  typedef tdualquat<<span class="keywordtype">float</span>, mediump> <a class="code" href="a00189.html#gaa7aeb54c167712b38f2178a1be2360ad">mediump_dualquat</a>;</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno"><a class="line" href="a00189.html#ga9ef5bf1da52a9d4932335a517086ceaf"> 189</a></span>  typedef tdualquat<<span class="keywordtype">float</span>, highp> <a class="code" href="a00189.html#ga9ef5bf1da52a9d4932335a517086ceaf">highp_dualquat</a>;</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> </div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno"><a class="line" href="a00189.html#gaa38f671be25a7f3b136a452a8bb42860"> 195</a></span>  typedef tdualquat<<span class="keywordtype">float</span>, lowp> <a class="code" href="a00189.html#gaa38f671be25a7f3b136a452a8bb42860">lowp_fdualquat</a>;</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> </div>
+<div class="line"><a name="l00200"></a><span class="lineno"><a class="line" href="a00189.html#ga4a6b594ff7e81150d8143001367a9431"> 200</a></span>  typedef tdualquat<<span class="keywordtype">float</span>, mediump> <a class="code" href="a00189.html#ga4a6b594ff7e81150d8143001367a9431">mediump_fdualquat</a>;</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno"><a class="line" href="a00189.html#ga4c4e55e9c99dc57b299ed590968da564"> 205</a></span>  typedef tdualquat<<span class="keywordtype">float</span>, highp> <a class="code" href="a00189.html#ga4c4e55e9c99dc57b299ed590968da564">highp_fdualquat</a>;</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> </div>
+<div class="line"><a name="l00211"></a><span class="lineno"><a class="line" href="a00189.html#gab4c5103338af3dac7e0fbc86895a3f1a"> 211</a></span>  typedef tdualquat<<span class="keywordtype">double</span>, lowp> <a class="code" href="a00189.html#gab4c5103338af3dac7e0fbc86895a3f1a">lowp_ddualquat</a>;</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> </div>
+<div class="line"><a name="l00216"></a><span class="lineno"><a class="line" href="a00189.html#ga0fb11e48e2d16348ccb06a25213641b4"> 216</a></span>  typedef tdualquat<<span class="keywordtype">double</span>, mediump> <a class="code" href="a00189.html#ga0fb11e48e2d16348ccb06a25213641b4">mediump_ddualquat</a>;</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> </div>
+<div class="line"><a name="l00221"></a><span class="lineno"><a class="line" href="a00189.html#ga8f67eafa7197d7a668dad5105a463d2a"> 221</a></span>  typedef tdualquat<<span class="keywordtype">double</span>, highp> <a class="code" href="a00189.html#ga8f67eafa7197d7a668dad5105a463d2a">highp_ddualquat</a>;</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> </div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="preprocessor">#if(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="keyword">typedef</span> highp_fdualquat <a class="code" href="a00189.html#gae93abee0c979902fbec6a7bee0f6fae1">dualquat</a>;</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> </div>
+<div class="line"><a name="l00233"></a><span class="lineno"><a class="line" href="a00189.html#ga237c2b9b42c9a930e49de5840ae0f930"> 233</a></span>  <span class="keyword">typedef</span> highp_fdualquat <a class="code" href="a00189.html#ga237c2b9b42c9a930e49de5840ae0f930">fdualquat</a>;</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="preprocessor">#elif(defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))</span></div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <span class="keyword">typedef</span> highp_fdualquat <a class="code" href="a00189.html#gae93abee0c979902fbec6a7bee0f6fae1">dualquat</a>;</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <span class="keyword">typedef</span> highp_fdualquat <a class="code" href="a00189.html#ga237c2b9b42c9a930e49de5840ae0f930">fdualquat</a>;</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="preprocessor">#elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="keyword">typedef</span> mediump_fdualquat <a class="code" href="a00189.html#gae93abee0c979902fbec6a7bee0f6fae1">dualquat</a>;</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="keyword">typedef</span> mediump_fdualquat <a class="code" href="a00189.html#ga237c2b9b42c9a930e49de5840ae0f930">fdualquat</a>;</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="preprocessor">#elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && defined(GLM_PRECISION_LOWP_FLOAT))</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <span class="keyword">typedef</span> lowp_fdualquat <a class="code" href="a00189.html#gae93abee0c979902fbec6a7bee0f6fae1">dualquat</a>;</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <span class="keyword">typedef</span> lowp_fdualquat <a class="code" href="a00189.html#ga237c2b9b42c9a930e49de5840ae0f930">fdualquat</a>;</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="preprocessor"># error "GLM error: multiple default precision requested for single-precision floating-point types"</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> </div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> </div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <span class="preprocessor">#if(!defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE))</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  <span class="keyword">typedef</span> highp_ddualquat <a class="code" href="a00189.html#ga3d71f98d84ba59dfe4e369fde4714cd6">ddualquat</a>;</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="preprocessor">#elif(defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE))</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  <span class="keyword">typedef</span> highp_ddualquat <a class="code" href="a00189.html#ga3d71f98d84ba59dfe4e369fde4714cd6">ddualquat</a>;</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <span class="preprocessor">#elif(!defined(GLM_PRECISION_HIGHP_DOUBLE) && defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE))</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  <span class="keyword">typedef</span> mediump_ddualquat <a class="code" href="a00189.html#ga3d71f98d84ba59dfe4e369fde4714cd6">ddualquat</a>;</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="preprocessor">#elif(!defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && defined(GLM_PRECISION_LOWP_DOUBLE))</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <span class="keyword">typedef</span> lowp_ddualquat <a class="code" href="a00189.html#ga3d71f98d84ba59dfe4e369fde4714cd6">ddualquat</a>;</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> <span class="preprocessor"># error "GLM error: Multiple default precision requested for double-precision floating-point types"</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> </div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> } <span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> </div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> <span class="preprocessor">#include "dual_quaternion.inl"</span></div>
+<div class="ttc" id="a00224_html_ga49b4d082305cdfcfe0a5c184f684a902"><div class="ttname"><a href="a00224.html#ga49b4d082305cdfcfe0a5c184f684a902">glm::orientation</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, P > orientation(tvec3< T, P > const &Normal, tvec3< T, P > const &Up)</div><div class="ttdoc">Build a rotation matrix from a normal and a up vector. </div></div>
+<div class="ttc" id="a00189_html_gaa38f671be25a7f3b136a452a8bb42860"><div class="ttname"><a href="a00189.html#gaa38f671be25a7f3b136a452a8bb42860">glm::lowp_fdualquat</a></div><div class="ttdeci">tdualquat< float, lowp > lowp_fdualquat</div><div class="ttdoc">Dual-quaternion of low single-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00019_source.html#l00195">dual_quaternion.hpp:195</a></div></div>
+<div class="ttc" id="a00189_html_ga20eb5758beb73cc6dbc2d9104f03ec20"><div class="ttname"><a href="a00189.html#ga20eb5758beb73cc6dbc2d9104f03ec20">glm::dualquat_cast</a></div><div class="ttdeci">GLM_FUNC_DECL tdualquat< T, P > dualquat_cast(tmat3x4< T, P > const &x)</div><div class="ttdoc">Converts a 3 * 4 matrix (augmented matrix rotation + translation) to a quaternion. </div></div>
+<div class="ttc" id="a00189_html_ga237c2b9b42c9a930e49de5840ae0f930"><div class="ttname"><a href="a00189.html#ga237c2b9b42c9a930e49de5840ae0f930">glm::fdualquat</a></div><div class="ttdeci">highp_fdualquat fdualquat</div><div class="ttdoc">Dual-quaternion of single-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00019_source.html#l00233">dual_quaternion.hpp:233</a></div></div>
+<div class="ttc" id="a00189_html_ga0fb11e48e2d16348ccb06a25213641b4"><div class="ttname"><a href="a00189.html#ga0fb11e48e2d16348ccb06a25213641b4">glm::mediump_ddualquat</a></div><div class="ttdeci">tdualquat< double, mediump > mediump_ddualquat</div><div class="ttdoc">Dual-quaternion of medium double-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00019_source.html#l00216">dual_quaternion.hpp:216</a></div></div>
+<div class="ttc" id="a00189_html_ga495818aa48c23e9e730f87a3c337d1d5"><div class="ttname"><a href="a00189.html#ga495818aa48c23e9e730f87a3c337d1d5">glm::normalize</a></div><div class="ttdeci">GLM_FUNC_DECL tdualquat< T, P > normalize(tdualquat< T, P > const &q)</div><div class="ttdoc">Returns the normalized quaternion. </div></div>
+<div class="ttc" id="a00189_html_ga4a6b594ff7e81150d8143001367a9431"><div class="ttname"><a href="a00189.html#ga4a6b594ff7e81150d8143001367a9431">glm::mediump_fdualquat</a></div><div class="ttdeci">tdualquat< float, mediump > mediump_fdualquat</div><div class="ttdoc">Dual-quaternion of medium single-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00019_source.html#l00200">dual_quaternion.hpp:200</a></div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00189_html_gab4c5103338af3dac7e0fbc86895a3f1a"><div class="ttname"><a href="a00189.html#gab4c5103338af3dac7e0fbc86895a3f1a">glm::lowp_ddualquat</a></div><div class="ttdeci">tdualquat< double, lowp > lowp_ddualquat</div><div class="ttdoc">Dual-quaternion of low double-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00019_source.html#l00211">dual_quaternion.hpp:211</a></div></div>
+<div class="ttc" id="a00189_html_ga3d71f98d84ba59dfe4e369fde4714cd6"><div class="ttname"><a href="a00189.html#ga3d71f98d84ba59dfe4e369fde4714cd6">glm::ddualquat</a></div><div class="ttdeci">highp_ddualquat ddualquat</div><div class="ttdoc">Dual-quaternion of default double-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00019_source.html#l00252">dual_quaternion.hpp:252</a></div></div>
+<div class="ttc" id="a00189_html_gae93abee0c979902fbec6a7bee0f6fae1"><div class="ttname"><a href="a00189.html#gae93abee0c979902fbec6a7bee0f6fae1">glm::dualquat</a></div><div class="ttdeci">highp_fdualquat dualquat</div><div class="ttdoc">Dual-quaternion of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00019_source.html#l00228">dual_quaternion.hpp:228</a></div></div>
+<div class="ttc" id="a00189_html_ga4c4e55e9c99dc57b299ed590968da564"><div class="ttname"><a href="a00189.html#ga4c4e55e9c99dc57b299ed590968da564">glm::highp_fdualquat</a></div><div class="ttdeci">tdualquat< float, highp > highp_fdualquat</div><div class="ttdoc">Dual-quaternion of high single-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00019_source.html#l00205">dual_quaternion.hpp:205</a></div></div>
+<div class="ttc" id="a00189_html_gaa7aeb54c167712b38f2178a1be2360ad"><div class="ttname"><a href="a00189.html#gaa7aeb54c167712b38f2178a1be2360ad">glm::mediump_dualquat</a></div><div class="ttdeci">tdualquat< float, mediump > mediump_dualquat</div><div class="ttdoc">Dual-quaternion of medium single-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00019_source.html#l00184">dual_quaternion.hpp:184</a></div></div>
+<div class="ttc" id="a00189_html_ga8039b88397ca09275be924a26a806a59"><div class="ttname"><a href="a00189.html#ga8039b88397ca09275be924a26a806a59">glm::lerp</a></div><div class="ttdeci">GLM_FUNC_DECL tdualquat< T, P > lerp(tdualquat< T, P > const &x, tdualquat< T, P > const &y, T const &a)</div><div class="ttdoc">Returns the linear interpolation of two dual quaternion. </div></div>
+<div class="ttc" id="a00189_html_ga576745d979e3c079a64152490c816954"><div class="ttname"><a href="a00189.html#ga576745d979e3c079a64152490c816954">glm::mat3x4_cast</a></div><div class="ttdeci">GLM_FUNC_DECL tmat3x4< T, P > mat3x4_cast(tdualquat< T, P > const &x)</div><div class="ttdoc">Converts a quaternion to a 3 * 4 matrix. </div></div>
+<div class="ttc" id="a00189_html_ga9ef5bf1da52a9d4932335a517086ceaf"><div class="ttname"><a href="a00189.html#ga9ef5bf1da52a9d4932335a517086ceaf">glm::highp_dualquat</a></div><div class="ttdeci">tdualquat< float, highp > highp_dualquat</div><div class="ttdoc">Dual-quaternion of high single-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00019_source.html#l00189">dual_quaternion.hpp:189</a></div></div>
+<div class="ttc" id="a00189_html_ga2d124748183e12db8288eeaca350298e"><div class="ttname"><a href="a00189.html#ga2d124748183e12db8288eeaca350298e">glm::mat2x4_cast</a></div><div class="ttdeci">GLM_FUNC_DECL tmat2x4< T, P > mat2x4_cast(tdualquat< T, P > const &x)</div><div class="ttdoc">Converts a quaternion to a 2 * 4 matrix. </div></div>
+<div class="ttc" id="a00189_html_gade05d29ebd4deea0f883d0e1bb4169aa"><div class="ttname"><a href="a00189.html#gade05d29ebd4deea0f883d0e1bb4169aa">glm::lowp_dualquat</a></div><div class="ttdeci">tdualquat< float, lowp > lowp_dualquat</div><div class="ttdoc">Dual-quaternion of low single-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00019_source.html#l00179">dual_quaternion.hpp:179</a></div></div>
+<div class="ttc" id="a00148_html_ga18d45e3d4c7705e67ccfabd99e521604"><div class="ttname"><a href="a00148.html#ga18d45e3d4c7705e67ccfabd99e521604">glm::length</a></div><div class="ttdeci">GLM_FUNC_DECL T length(vecType< T, P > const &x)</div><div class="ttdoc">Returns the length of x, i.e., sqrt(x * x). </div></div>
+<div class="ttc" id="a00189_html_ga2149d3cb8af04d9530de0cd16aa1aab2"><div class="ttname"><a href="a00189.html#ga2149d3cb8af04d9530de0cd16aa1aab2">glm::inverse</a></div><div class="ttdeci">GLM_FUNC_DECL tdualquat< T, P > inverse(tdualquat< T, P > const &q)</div><div class="ttdoc">Returns the q inverse. </div></div>
+<div class="ttc" id="a00189_html_ga8f67eafa7197d7a668dad5105a463d2a"><div class="ttname"><a href="a00189.html#ga8f67eafa7197d7a668dad5105a463d2a">glm::highp_ddualquat</a></div><div class="ttdeci">tdualquat< double, highp > highp_ddualquat</div><div class="ttdoc">Dual-quaternion of high double-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00019_source.html#l00221">dual_quaternion.hpp:221</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00020.html b/src/third_party/glm/doc/api/a00020.html
new file mode 100644
index 0000000..351c770
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00020.html
@@ -0,0 +1,89 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: epsilon.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_9440d7c11b99dcd7e5d369c7cf9802fe.html">gtc</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">epsilon.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00020_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gaca9443f217dc36587624247245522331"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gaca9443f217dc36587624247245522331"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00163.html#gaca9443f217dc36587624247245522331">epsilonEqual</a> (vecType< T, P > const &x, vecType< T, P > const &y, T const &epsilon)</td></tr>
+<tr class="separator:gaca9443f217dc36587624247245522331"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa7f227999ca09e7ca994e8b35aba47bb"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gaa7f227999ca09e7ca994e8b35aba47bb"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00163.html#gaa7f227999ca09e7ca994e8b35aba47bb">epsilonEqual</a> (genType const &x, genType const &y, genType const &epsilon)</td></tr>
+<tr class="separator:gaa7f227999ca09e7ca994e8b35aba47bb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga14e2888a304654ade8a3996024e2739c"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga14e2888a304654ade8a3996024e2739c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType::boolType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00163.html#ga14e2888a304654ade8a3996024e2739c">epsilonNotEqual</a> (genType const &x, genType const &y, typename genType::value_type const &epsilon)</td></tr>
+<tr class="separator:ga14e2888a304654ade8a3996024e2739c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga50a92103fb0cbd796908e1bf20c79aaf"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga50a92103fb0cbd796908e1bf20c79aaf"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00163.html#ga50a92103fb0cbd796908e1bf20c79aaf">epsilonNotEqual</a> (genType const &x, genType const &y, genType const &epsilon)</td></tr>
+<tr class="separator:ga50a92103fb0cbd796908e1bf20c79aaf"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00163.html">GLM_GTC_epsilon</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd>
+<dd>
+gtc_half_float (dependence) </dd>
+<dd>
+<a class="el" href="a00172.html" title="Defines a templated quaternion type and several quaternion operations. ">GLM_GTC_quaternion</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00020_source.html">epsilon.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00020_source.html b/src/third_party/glm/doc/api/a00020_source.html
new file mode 100644
index 0000000..9444656
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00020_source.html
@@ -0,0 +1,105 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: epsilon.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_9440d7c11b99dcd7e5d369c7cf9802fe.html">gtc</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">epsilon.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00020.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">// Dependencies</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "../detail/setup.hpp"</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include "../detail/precision.hpp"</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"># pragma message("GLM: GLM_GTC_epsilon extension included")</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> {</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  GLM_FUNC_DECL vecType<bool, P> <a class="code" href="a00163.html#gaa7f227999ca09e7ca994e8b35aba47bb">epsilonEqual</a>(</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  vecType<T, P> <span class="keyword">const</span> & x,</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  vecType<T, P> <span class="keyword">const</span> & y,</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  T <span class="keyword">const</span> & <a class="code" href="a00162.html#ga2a1e57fc5592b69cfae84174cbfc9429">epsilon</a>);</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> <a class="code" href="a00163.html#gaa7f227999ca09e7ca994e8b35aba47bb">epsilonEqual</a>(</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  genType <span class="keyword">const</span> & x,</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  genType <span class="keyword">const</span> & y,</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  genType <span class="keyword">const</span> & <a class="code" href="a00162.html#ga2a1e57fc5592b69cfae84174cbfc9429">epsilon</a>);</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  GLM_FUNC_DECL <span class="keyword">typename</span> genType::boolType <a class="code" href="a00163.html#ga50a92103fb0cbd796908e1bf20c79aaf">epsilonNotEqual</a>(</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  genType <span class="keyword">const</span> & x,</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  genType <span class="keyword">const</span> & y,</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keyword">typename</span> genType::value_type <span class="keyword">const</span> & <a class="code" href="a00162.html#ga2a1e57fc5592b69cfae84174cbfc9429">epsilon</a>);</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> <a class="code" href="a00163.html#ga50a92103fb0cbd796908e1bf20c79aaf">epsilonNotEqual</a>(</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  genType <span class="keyword">const</span> & x,</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  genType <span class="keyword">const</span> & y,</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  genType <span class="keyword">const</span> & <a class="code" href="a00162.html#ga2a1e57fc5592b69cfae84174cbfc9429">epsilon</a>);</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="preprocessor">#include "epsilon.inl"</span></div>
+<div class="ttc" id="a00163_html_ga50a92103fb0cbd796908e1bf20c79aaf"><div class="ttname"><a href="a00163.html#ga50a92103fb0cbd796908e1bf20c79aaf">glm::epsilonNotEqual</a></div><div class="ttdeci">GLM_FUNC_DECL bool epsilonNotEqual(genType const &x, genType const &y, genType const &epsilon)</div><div class="ttdoc">Returns the component-wise comparison of |x - y| >= epsilon. </div></div>
+<div class="ttc" id="a00162_html_ga2a1e57fc5592b69cfae84174cbfc9429"><div class="ttname"><a href="a00162.html#ga2a1e57fc5592b69cfae84174cbfc9429">glm::epsilon</a></div><div class="ttdeci">GLM_FUNC_DECL GLM_CONSTEXPR genType epsilon()</div><div class="ttdoc">Return the epsilon constant for floating point types. </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00163_html_gaa7f227999ca09e7ca994e8b35aba47bb"><div class="ttname"><a href="a00163.html#gaa7f227999ca09e7ca994e8b35aba47bb">glm::epsilonEqual</a></div><div class="ttdeci">GLM_FUNC_DECL bool epsilonEqual(genType const &x, genType const &y, genType const &epsilon)</div><div class="ttdoc">Returns the component-wise comparison of |x - y| < epsilon. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00021.html b/src/third_party/glm/doc/api/a00021.html
new file mode 100644
index 0000000..cc8303b
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00021.html
@@ -0,0 +1,126 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: euler_angles.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">euler_angles.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00021_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga82cd3b8a04943f1a0d1a562aff358dc8"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga82cd3b8a04943f1a0d1a562aff358dc8"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00190.html#ga82cd3b8a04943f1a0d1a562aff358dc8">eulerAngleX</a> (T const &angleX)</td></tr>
+<tr class="separator:ga82cd3b8a04943f1a0d1a562aff358dc8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8bf84f92ca976a7f50dbe4b30ceb72dd"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga8bf84f92ca976a7f50dbe4b30ceb72dd"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00190.html#ga8bf84f92ca976a7f50dbe4b30ceb72dd">eulerAngleXY</a> (T const &angleX, T const &angleY)</td></tr>
+<tr class="separator:ga8bf84f92ca976a7f50dbe4b30ceb72dd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaaedda1657a1aebe0a904d864b33844e8"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gaaedda1657a1aebe0a904d864b33844e8"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00190.html#gaaedda1657a1aebe0a904d864b33844e8">eulerAngleXYZ</a> (T const &t1, T const &t2, T const &t3)</td></tr>
+<tr class="separator:gaaedda1657a1aebe0a904d864b33844e8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab2d7dc94b9a7519d741aaa208c7a335b"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gab2d7dc94b9a7519d741aaa208c7a335b"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00190.html#gab2d7dc94b9a7519d741aaa208c7a335b">eulerAngleXZ</a> (T const &angleX, T const &angleZ)</td></tr>
+<tr class="separator:gab2d7dc94b9a7519d741aaa208c7a335b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaeb193af1184bdf39c23636d756e1ff33"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gaeb193af1184bdf39c23636d756e1ff33"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00190.html#gaeb193af1184bdf39c23636d756e1ff33">eulerAngleY</a> (T const &angleY)</td></tr>
+<tr class="separator:gaeb193af1184bdf39c23636d756e1ff33"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafdd02f9a37511190962119adef5c1c25"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gafdd02f9a37511190962119adef5c1c25"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00190.html#gafdd02f9a37511190962119adef5c1c25">eulerAngleYX</a> (T const &angleY, T const &angleX)</td></tr>
+<tr class="separator:gafdd02f9a37511190962119adef5c1c25"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0242b5ab68651db70c6025815549427f"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga0242b5ab68651db70c6025815549427f"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00190.html#ga0242b5ab68651db70c6025815549427f">eulerAngleYXZ</a> (T const &yaw, T const &pitch, T const &roll)</td></tr>
+<tr class="separator:ga0242b5ab68651db70c6025815549427f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1033f84f51d61646145352ef0c1bb58c"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga1033f84f51d61646145352ef0c1bb58c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00190.html#ga1033f84f51d61646145352ef0c1bb58c">eulerAngleYZ</a> (T const &angleY, T const &angleZ)</td></tr>
+<tr class="separator:ga1033f84f51d61646145352ef0c1bb58c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab59c4fe7f735568255cc19fddd3ddfcd"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gab59c4fe7f735568255cc19fddd3ddfcd"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00190.html#gab59c4fe7f735568255cc19fddd3ddfcd">eulerAngleZ</a> (T const &angleZ)</td></tr>
+<tr class="separator:gab59c4fe7f735568255cc19fddd3ddfcd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaef83cf40bd9ae780011b29970f16f622"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gaef83cf40bd9ae780011b29970f16f622"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00190.html#gaef83cf40bd9ae780011b29970f16f622">eulerAngleZX</a> (T const &angle, T const &angleX)</td></tr>
+<tr class="separator:gaef83cf40bd9ae780011b29970f16f622"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga02f037926568bbd12dfece3b28b20343"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga02f037926568bbd12dfece3b28b20343"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00190.html#ga02f037926568bbd12dfece3b28b20343">eulerAngleZY</a> (T const &angleZ, T const &angleY)</td></tr>
+<tr class="separator:ga02f037926568bbd12dfece3b28b20343"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad5838a4c87ce2b8ee4c4e17bd162fd14"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gad5838a4c87ce2b8ee4c4e17bd162fd14"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00190.html#gad5838a4c87ce2b8ee4c4e17bd162fd14">extractEulerAngleXYZ</a> (tmat4x4< T, defaultp > const &M, T &t1, T &t2, T &t3)</td></tr>
+<tr class="separator:gad5838a4c87ce2b8ee4c4e17bd162fd14"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6f465681cbbc575ad93a53ec918dacf3"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga6f465681cbbc575ad93a53ec918dacf3"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat2x2< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00190.html#ga6f465681cbbc575ad93a53ec918dacf3">orientate2</a> (T const &angle)</td></tr>
+<tr class="separator:ga6f465681cbbc575ad93a53ec918dacf3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab188e2526dea3c003e86e298f618085e"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gab188e2526dea3c003e86e298f618085e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat3x3< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00190.html#gab188e2526dea3c003e86e298f618085e">orientate3</a> (T const &angle)</td></tr>
+<tr class="separator:gab188e2526dea3c003e86e298f618085e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga33f0d790cecd8337ee83f8e3a8109b11"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga33f0d790cecd8337ee83f8e3a8109b11"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat3x3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00190.html#ga33f0d790cecd8337ee83f8e3a8109b11">orientate3</a> (tvec3< T, P > const &angles)</td></tr>
+<tr class="separator:ga33f0d790cecd8337ee83f8e3a8109b11"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4e25c9468b6f002c76e9a2412bcfa503"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga4e25c9468b6f002c76e9a2412bcfa503"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00190.html#ga4e25c9468b6f002c76e9a2412bcfa503">orientate4</a> (tvec3< T, P > const &angles)</td></tr>
+<tr class="separator:ga4e25c9468b6f002c76e9a2412bcfa503"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf9c8d0f1df88c5344165600774489bc5"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gaf9c8d0f1df88c5344165600774489bc5"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00190.html#gaf9c8d0f1df88c5344165600774489bc5">yawPitchRoll</a> (T const &yaw, T const &pitch, T const &roll)</td></tr>
+<tr class="separator:gaf9c8d0f1df88c5344165600774489bc5"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00190.html">GLM_GTX_euler_angles</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd>
+<dd>
+gtc_half_float (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00021_source.html">euler_angles.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00021_source.html b/src/third_party/glm/doc/api/a00021_source.html
new file mode 100644
index 0000000..8436efb
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00021_source.html
@@ -0,0 +1,175 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: euler_angles.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">euler_angles.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00021.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "../glm.hpp"</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_euler_angles extension included")</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> {</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  GLM_FUNC_DECL tmat4x4<T, defaultp> <a class="code" href="a00190.html#ga82cd3b8a04943f1a0d1a562aff358dc8">eulerAngleX</a>(</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  T <span class="keyword">const</span> & angleX);</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  GLM_FUNC_DECL tmat4x4<T, defaultp> <a class="code" href="a00190.html#gaeb193af1184bdf39c23636d756e1ff33">eulerAngleY</a>(</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  T <span class="keyword">const</span> & angleY);</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  GLM_FUNC_DECL tmat4x4<T, defaultp> <a class="code" href="a00190.html#gab59c4fe7f735568255cc19fddd3ddfcd">eulerAngleZ</a>(</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  T <span class="keyword">const</span> & angleZ);</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  GLM_FUNC_DECL tmat4x4<T, defaultp> <a class="code" href="a00190.html#ga8bf84f92ca976a7f50dbe4b30ceb72dd">eulerAngleXY</a>(</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  T <span class="keyword">const</span> & angleX,</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  T <span class="keyword">const</span> & angleY);</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  GLM_FUNC_DECL tmat4x4<T, defaultp> <a class="code" href="a00190.html#gafdd02f9a37511190962119adef5c1c25">eulerAngleYX</a>(</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  T <span class="keyword">const</span> & angleY,</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  T <span class="keyword">const</span> & angleX);</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  GLM_FUNC_DECL tmat4x4<T, defaultp> <a class="code" href="a00190.html#gab2d7dc94b9a7519d741aaa208c7a335b">eulerAngleXZ</a>(</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  T <span class="keyword">const</span> & angleX,</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  T <span class="keyword">const</span> & angleZ);</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  GLM_FUNC_DECL tmat4x4<T, defaultp> <a class="code" href="a00190.html#gaef83cf40bd9ae780011b29970f16f622">eulerAngleZX</a>(</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  T <span class="keyword">const</span> & <a class="code" href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">angle</a>,</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  T <span class="keyword">const</span> & angleX);</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  GLM_FUNC_DECL tmat4x4<T, defaultp> <a class="code" href="a00190.html#ga1033f84f51d61646145352ef0c1bb58c">eulerAngleYZ</a>(</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  T <span class="keyword">const</span> & angleY,</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  T <span class="keyword">const</span> & angleZ);</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  GLM_FUNC_DECL tmat4x4<T, defaultp> <a class="code" href="a00190.html#ga02f037926568bbd12dfece3b28b20343">eulerAngleZY</a>(</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  T <span class="keyword">const</span> & angleZ,</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  T <span class="keyword">const</span> & angleY);</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  GLM_FUNC_DECL tmat4x4<T, defaultp> <a class="code" href="a00190.html#gaaedda1657a1aebe0a904d864b33844e8">eulerAngleXYZ</a>(</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  T <span class="keyword">const</span> & t1,</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  T <span class="keyword">const</span> & t2,</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  T <span class="keyword">const</span> & t3);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  </div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  GLM_FUNC_DECL tmat4x4<T, defaultp> <a class="code" href="a00190.html#ga0242b5ab68651db70c6025815549427f">eulerAngleYXZ</a>(</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  T <span class="keyword">const</span> & <a class="code" href="a00172.html#ga724a5df282b70cec0a6cb0d6dcddb6d6">yaw</a>,</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  T <span class="keyword">const</span> & <a class="code" href="a00172.html#ga2c08b93a4261c10748fd4d2104346f17">pitch</a>,</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  T <span class="keyword">const</span> & <a class="code" href="a00172.html#ga4fd705376c6c1fd667be0055a0ea58ec">roll</a>);</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  </div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  GLM_FUNC_DECL tmat4x4<T, defaultp> <a class="code" href="a00190.html#gaf9c8d0f1df88c5344165600774489bc5">yawPitchRoll</a>(</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  T <span class="keyword">const</span> & <a class="code" href="a00172.html#ga724a5df282b70cec0a6cb0d6dcddb6d6">yaw</a>,</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  T <span class="keyword">const</span> & <a class="code" href="a00172.html#ga2c08b93a4261c10748fd4d2104346f17">pitch</a>,</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  T <span class="keyword">const</span> & <a class="code" href="a00172.html#ga4fd705376c6c1fd667be0055a0ea58ec">roll</a>);</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  GLM_FUNC_DECL tmat2x2<T, defaultp> <a class="code" href="a00190.html#ga6f465681cbbc575ad93a53ec918dacf3">orientate2</a>(T <span class="keyword">const</span> & <a class="code" href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">angle</a>);</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  GLM_FUNC_DECL tmat3x3<T, defaultp> <a class="code" href="a00190.html#ga33f0d790cecd8337ee83f8e3a8109b11">orientate3</a>(T <span class="keyword">const</span> & <a class="code" href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">angle</a>);</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  GLM_FUNC_DECL tmat3x3<T, P> <a class="code" href="a00190.html#ga33f0d790cecd8337ee83f8e3a8109b11">orientate3</a>(tvec3<T, P> <span class="keyword">const</span> & angles);</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  </div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  GLM_FUNC_DECL tmat4x4<T, P> <a class="code" href="a00190.html#ga4e25c9468b6f002c76e9a2412bcfa503">orientate4</a>(tvec3<T, P> <span class="keyword">const</span> & angles);</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  GLM_FUNC_DECL <span class="keywordtype">void</span> <a class="code" href="a00190.html#gad5838a4c87ce2b8ee4c4e17bd162fd14">extractEulerAngleXYZ</a>(tmat4x4<T, defaultp> <span class="keyword">const</span> & M,</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  T & t1,</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  T & t2,</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  T & t3);</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  </div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="preprocessor">#include "euler_angles.inl"</span></div>
+<div class="ttc" id="a00172_html_ga4fd705376c6c1fd667be0055a0ea58ec"><div class="ttname"><a href="a00172.html#ga4fd705376c6c1fd667be0055a0ea58ec">glm::roll</a></div><div class="ttdeci">GLM_FUNC_DECL T roll(tquat< T, P > const &x)</div><div class="ttdoc">Returns roll value of euler angles expressed in radians. </div></div>
+<div class="ttc" id="a00190_html_ga82cd3b8a04943f1a0d1a562aff358dc8"><div class="ttname"><a href="a00190.html#ga82cd3b8a04943f1a0d1a562aff358dc8">glm::eulerAngleX</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, defaultp > eulerAngleX(T const &angleX)</div><div class="ttdoc">Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle X. </div></div>
+<div class="ttc" id="a00190_html_gab2d7dc94b9a7519d741aaa208c7a335b"><div class="ttname"><a href="a00190.html#gab2d7dc94b9a7519d741aaa208c7a335b">glm::eulerAngleXZ</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, defaultp > eulerAngleXZ(T const &angleX, T const &angleZ)</div><div class="ttdoc">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z). </div></div>
+<div class="ttc" id="a00190_html_ga1033f84f51d61646145352ef0c1bb58c"><div class="ttname"><a href="a00190.html#ga1033f84f51d61646145352ef0c1bb58c">glm::eulerAngleYZ</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, defaultp > eulerAngleYZ(T const &angleY, T const &angleZ)</div><div class="ttdoc">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z). </div></div>
+<div class="ttc" id="a00172_html_ga2c08b93a4261c10748fd4d2104346f17"><div class="ttname"><a href="a00172.html#ga2c08b93a4261c10748fd4d2104346f17">glm::pitch</a></div><div class="ttdeci">GLM_FUNC_DECL T pitch(tquat< T, P > const &x)</div><div class="ttdoc">Returns pitch value of euler angles expressed in radians. </div></div>
+<div class="ttc" id="a00190_html_gaf9c8d0f1df88c5344165600774489bc5"><div class="ttname"><a href="a00190.html#gaf9c8d0f1df88c5344165600774489bc5">glm::yawPitchRoll</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, defaultp > yawPitchRoll(T const &yaw, T const &pitch, T const &roll)</div><div class="ttdoc">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z). </div></div>
+<div class="ttc" id="a00190_html_gaaedda1657a1aebe0a904d864b33844e8"><div class="ttname"><a href="a00190.html#gaaedda1657a1aebe0a904d864b33844e8">glm::eulerAngleXYZ</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, defaultp > eulerAngleXYZ(T const &t1, T const &t2, T const &t3)</div><div class="ttdoc">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y * Z). </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00190_html_ga0242b5ab68651db70c6025815549427f"><div class="ttname"><a href="a00190.html#ga0242b5ab68651db70c6025815549427f">glm::eulerAngleYXZ</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, defaultp > eulerAngleYXZ(T const &yaw, T const &pitch, T const &roll)</div><div class="ttdoc">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z). </div></div>
+<div class="ttc" id="a00190_html_gaeb193af1184bdf39c23636d756e1ff33"><div class="ttname"><a href="a00190.html#gaeb193af1184bdf39c23636d756e1ff33">glm::eulerAngleY</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, defaultp > eulerAngleY(T const &angleY)</div><div class="ttdoc">Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Y. </div></div>
+<div class="ttc" id="a00190_html_ga02f037926568bbd12dfece3b28b20343"><div class="ttname"><a href="a00190.html#ga02f037926568bbd12dfece3b28b20343">glm::eulerAngleZY</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, defaultp > eulerAngleZY(T const &angleZ, T const &angleY)</div><div class="ttdoc">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y). </div></div>
+<div class="ttc" id="a00190_html_gaef83cf40bd9ae780011b29970f16f622"><div class="ttname"><a href="a00190.html#gaef83cf40bd9ae780011b29970f16f622">glm::eulerAngleZX</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, defaultp > eulerAngleZX(T const &angle, T const &angleX)</div><div class="ttdoc">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X). </div></div>
+<div class="ttc" id="a00190_html_ga4e25c9468b6f002c76e9a2412bcfa503"><div class="ttname"><a href="a00190.html#ga4e25c9468b6f002c76e9a2412bcfa503">glm::orientate4</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, P > orientate4(tvec3< T, P > const &angles)</div><div class="ttdoc">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z). </div></div>
+<div class="ttc" id="a00190_html_gab59c4fe7f735568255cc19fddd3ddfcd"><div class="ttname"><a href="a00190.html#gab59c4fe7f735568255cc19fddd3ddfcd">glm::eulerAngleZ</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, defaultp > eulerAngleZ(T const &angleZ)</div><div class="ttdoc">Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Z. </div></div>
+<div class="ttc" id="a00172_html_gad4a4448baedb198b2b1e7880d2544dc9"><div class="ttname"><a href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">glm::angle</a></div><div class="ttdeci">GLM_FUNC_DECL T angle(tquat< T, P > const &x)</div><div class="ttdoc">Returns the quaternion rotation angle. </div></div>
+<div class="ttc" id="a00190_html_gafdd02f9a37511190962119adef5c1c25"><div class="ttname"><a href="a00190.html#gafdd02f9a37511190962119adef5c1c25">glm::eulerAngleYX</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, defaultp > eulerAngleYX(T const &angleY, T const &angleX)</div><div class="ttdoc">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X). </div></div>
+<div class="ttc" id="a00190_html_ga33f0d790cecd8337ee83f8e3a8109b11"><div class="ttname"><a href="a00190.html#ga33f0d790cecd8337ee83f8e3a8109b11">glm::orientate3</a></div><div class="ttdeci">GLM_FUNC_DECL tmat3x3< T, P > orientate3(tvec3< T, P > const &angles)</div><div class="ttdoc">Creates a 3D 3 * 3 rotation matrix from euler angles (Y * X * Z). </div></div>
+<div class="ttc" id="a00190_html_ga8bf84f92ca976a7f50dbe4b30ceb72dd"><div class="ttname"><a href="a00190.html#ga8bf84f92ca976a7f50dbe4b30ceb72dd">glm::eulerAngleXY</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, defaultp > eulerAngleXY(T const &angleX, T const &angleY)</div><div class="ttdoc">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y). </div></div>
+<div class="ttc" id="a00190_html_gad5838a4c87ce2b8ee4c4e17bd162fd14"><div class="ttname"><a href="a00190.html#gad5838a4c87ce2b8ee4c4e17bd162fd14">glm::extractEulerAngleXYZ</a></div><div class="ttdeci">GLM_FUNC_DECL void extractEulerAngleXYZ(tmat4x4< T, defaultp > const &M, T &t1, T &t2, T &t3)</div><div class="ttdoc">Extracts the (X * Y * Z) Euler angles from the rotation matrix M. </div></div>
+<div class="ttc" id="a00172_html_ga724a5df282b70cec0a6cb0d6dcddb6d6"><div class="ttname"><a href="a00172.html#ga724a5df282b70cec0a6cb0d6dcddb6d6">glm::yaw</a></div><div class="ttdeci">GLM_FUNC_DECL T yaw(tquat< T, P > const &x)</div><div class="ttdoc">Returns yaw value of euler angles expressed in radians. </div></div>
+<div class="ttc" id="a00190_html_ga6f465681cbbc575ad93a53ec918dacf3"><div class="ttname"><a href="a00190.html#ga6f465681cbbc575ad93a53ec918dacf3">glm::orientate2</a></div><div class="ttdeci">GLM_FUNC_DECL tmat2x2< T, defaultp > orientate2(T const &angle)</div><div class="ttdoc">Creates a 2D 2 * 2 rotation matrix from an euler angle. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00022.html b/src/third_party/glm/doc/api/a00022.html
new file mode 100644
index 0000000..1a875f0
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00022.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: exponential.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">exponential.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00022_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+
+<p>Definition in file <a class="el" href="a00022_source.html">exponential.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00022_source.html b/src/third_party/glm/doc/api/a00022_source.html
new file mode 100644
index 0000000..ecad960
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00022_source.html
@@ -0,0 +1,65 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: exponential.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">exponential.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00022.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include "<a class="code" href="a00030.html">detail/func_exponential.hpp</a>"</span></div>
+<div class="ttc" id="a00030_html"><div class="ttname"><a href="a00030.html">func_exponential.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00023.html b/src/third_party/glm/doc/api/a00023.html
new file mode 100644
index 0000000..d873328
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00023.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: ext.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">ext.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00023_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> (Dependence) </p>
+
+<p>Definition in file <a class="el" href="a00023_source.html">ext.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00023_source.html b/src/third_party/glm/doc/api/a00023_source.html
new file mode 100644
index 0000000..6638219
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00023_source.html
@@ -0,0 +1,219 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: ext.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">ext.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00023.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "<a class="code" href="a00040.html">glm.hpp</a>"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_MESSAGE_EXT_INCLUDED_DISPLAYED)</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor"># define GLM_MESSAGE_EXT_INCLUDED_DISPLAYED</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor"># pragma message("GLM: All extensions included (not recommanded)")</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#endif//GLM_MESSAGES</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#include "<a class="code" href="a00009.html">./gtc/bitfield.hpp</a>"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#include "<a class="code" href="a00011.html">./gtc/color_space.hpp</a>"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#include "<a class="code" href="a00018.html">./gtc/constants.hpp</a>"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor">#include "<a class="code" href="a00020.html">./gtc/epsilon.hpp</a>"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor">#include "<a class="code" href="a00037.html">./gtc/functions.hpp</a>"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor">#include "<a class="code" href="a00044.html">./gtc/integer.hpp</a>"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor">#include "<a class="code" href="a00061.html">./gtc/matrix_access.hpp</a>"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor">#include "<a class="code" href="a00064.html">./gtc/matrix_integer.hpp</a>"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor">#include "<a class="code" href="a00066.html">./gtc/matrix_inverse.hpp</a>"</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="preprocessor">#include "<a class="code" href="a00070.html">./gtc/matrix_transform.hpp</a>"</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor">#include "<a class="code" href="a00073.html">./gtc/noise.hpp</a>"</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor">#include "<a class="code" href="a00080.html">./gtc/packing.hpp</a>"</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="preprocessor">#include "<a class="code" href="a00087.html">./gtc/quaternion.hpp</a>"</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="preprocessor">#include "<a class="code" href="a00089.html">./gtc/random.hpp</a>"</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="preprocessor">#include "<a class="code" href="a00092.html">./gtc/reciprocal.hpp</a>"</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="preprocessor">#include "<a class="code" href="a00095.html">./gtc/round.hpp</a>"</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="comment">//#include "./gtc/type_aligned.hpp"</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="preprocessor">#include "<a class="code" href="a00124.html">./gtc/type_precision.hpp</a>"</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="preprocessor">#include "<a class="code" href="a00125.html">./gtc/type_ptr.hpp</a>"</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="preprocessor">#include "<a class="code" href="a00132.html">./gtc/ulp.hpp</a>"</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="preprocessor">#include "<a class="code" href="a00133.html">./gtc/vec1.hpp</a>"</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="preprocessor">#if GLM_HAS_ALIGNED_TYPE</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="preprocessor"># include "<a class="code" href="a00108.html">./gtc/type_aligned.hpp</a>"</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="preprocessor">#include "<a class="code" href="a00007.html">./gtx/associated_min_max.hpp</a>"</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="preprocessor">#include "<a class="code" href="a00008.html">./gtx/bit.hpp</a>"</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="preprocessor">#include "<a class="code" href="a00010.html">./gtx/closest_point.hpp</a>"</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="preprocessor">#include "<a class="code" href="a00012.html">./gtx/color_space.hpp</a>"</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="preprocessor">#include "<a class="code" href="a00013.html">./gtx/color_space_YCoCg.hpp</a>"</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="preprocessor">#include "<a class="code" href="a00016.html">./gtx/compatibility.hpp</a>"</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="preprocessor">#include "<a class="code" href="a00017.html">./gtx/component_wise.hpp</a>"</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="preprocessor">#include "<a class="code" href="a00019.html">./gtx/dual_quaternion.hpp</a>"</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="preprocessor">#include "<a class="code" href="a00021.html">./gtx/euler_angles.hpp</a>"</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="preprocessor">#include "<a class="code" href="a00024.html">./gtx/extend.hpp</a>"</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="preprocessor">#include "<a class="code" href="a00025.html">./gtx/extended_min_max.hpp</a>"</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="preprocessor">#include "<a class="code" href="a00026.html">./gtx/fast_exponential.hpp</a>"</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="preprocessor">#include "<a class="code" href="a00027.html">./gtx/fast_square_root.hpp</a>"</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="preprocessor">#include "<a class="code" href="a00028.html">./gtx/fast_trigonometry.hpp</a>"</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="preprocessor">#include "<a class="code" href="a00041.html">./gtx/gradient_paint.hpp</a>"</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="preprocessor">#include "<a class="code" href="a00042.html">./gtx/handed_coordinate_space.hpp</a>"</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="preprocessor">#include "<a class="code" href="a00045.html">./gtx/integer.hpp</a>"</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="preprocessor">#include "<a class="code" href="a00047.html">./gtx/intersect.hpp</a>"</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="preprocessor">#include "<a class="code" href="a00049.html">./gtx/log_base.hpp</a>"</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="preprocessor">#include "<a class="code" href="a00062.html">./gtx/matrix_cross_product.hpp</a>"</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="preprocessor">#include "<a class="code" href="a00065.html">./gtx/matrix_interpolation.hpp</a>"</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="preprocessor">#include "<a class="code" href="a00067.html">./gtx/matrix_major_storage.hpp</a>"</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="preprocessor">#include "<a class="code" href="a00068.html">./gtx/matrix_operation.hpp</a>"</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="preprocessor">#include "<a class="code" href="a00069.html">./gtx/matrix_query.hpp</a>"</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="preprocessor">#include "<a class="code" href="a00072.html">./gtx/mixed_product.hpp</a>"</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="preprocessor">#include "<a class="code" href="a00074.html">./gtx/norm.hpp</a>"</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="preprocessor">#include "<a class="code" href="a00075.html">./gtx/normal.hpp</a>"</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="preprocessor">#include "<a class="code" href="a00076.html">./gtx/normalize_dot.hpp</a>"</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="preprocessor">#include "<a class="code" href="a00077.html">./gtx/number_precision.hpp</a>"</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="preprocessor">#include "<a class="code" href="a00078.html">./gtx/optimum_pow.hpp</a>"</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="preprocessor">#include "<a class="code" href="a00079.html">./gtx/orthonormalize.hpp</a>"</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="preprocessor">#include "<a class="code" href="a00083.html">./gtx/perpendicular.hpp</a>"</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="preprocessor">#include "<a class="code" href="a00084.html">./gtx/polar_coordinates.hpp</a>"</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="preprocessor">#include "<a class="code" href="a00086.html">./gtx/projection.hpp</a>"</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="preprocessor">#include "<a class="code" href="a00088.html">./gtx/quaternion.hpp</a>"</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="preprocessor">#include "<a class="code" href="a00091.html">./gtx/raw_data.hpp</a>"</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="preprocessor">#include "<a class="code" href="a00094.html">./gtx/rotate_vector.hpp</a>"</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="preprocessor">#include "<a class="code" href="a00102.html">./gtx/spline.hpp</a>"</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="preprocessor">#include "<a class="code" href="a00103.html">./gtx/std_based_type.hpp</a>"</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="preprocessor">#if !(GLM_COMPILER & GLM_COMPILER_CUDA)</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="preprocessor"># include "<a class="code" href="a00104.html">./gtx/string_cast.hpp</a>"</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="preprocessor">#include "<a class="code" href="a00105.html">./gtx/transform.hpp</a>"</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="preprocessor">#include "<a class="code" href="a00106.html">./gtx/transform2.hpp</a>"</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="preprocessor">#include "<a class="code" href="a00137.html">./gtx/vector_angle.hpp</a>"</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="preprocessor">#include "<a class="code" href="a00138.html">./gtx/vector_query.hpp</a>"</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="preprocessor">#include "<a class="code" href="a00140.html">./gtx/wrap.hpp</a>"</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="preprocessor">#if GLM_HAS_TEMPLATE_ALIASES</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="preprocessor"># include "<a class="code" href="a00096.html">./gtx/scalar_multiplication.hpp</a>"</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="preprocessor">#if GLM_HAS_RANGE_FOR</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="preprocessor"># include "<a class="code" href="a00090.html">./gtx/range.hpp</a>"</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="preprocessor">#endif</span></div>
+<div class="ttc" id="a00024_html"><div class="ttname"><a href="a00024.html">extend.hpp</a></div><div class="ttdoc">GLM_GTX_extend </div></div>
+<div class="ttc" id="a00124_html"><div class="ttname"><a href="a00124.html">type_precision.hpp</a></div><div class="ttdoc">GLM_GTC_type_precision </div></div>
+<div class="ttc" id="a00010_html"><div class="ttname"><a href="a00010.html">closest_point.hpp</a></div><div class="ttdoc">GLM_GTX_closest_point </div></div>
+<div class="ttc" id="a00068_html"><div class="ttname"><a href="a00068.html">matrix_operation.hpp</a></div><div class="ttdoc">GLM_GTX_matrix_operation </div></div>
+<div class="ttc" id="a00091_html"><div class="ttname"><a href="a00091.html">raw_data.hpp</a></div><div class="ttdoc">GLM_GTX_raw_data </div></div>
+<div class="ttc" id="a00027_html"><div class="ttname"><a href="a00027.html">fast_square_root.hpp</a></div><div class="ttdoc">GLM_GTX_fast_square_root </div></div>
+<div class="ttc" id="a00044_html"><div class="ttname"><a href="a00044.html">integer.hpp</a></div><div class="ttdoc">GLM_GTC_integer </div></div>
+<div class="ttc" id="a00042_html"><div class="ttname"><a href="a00042.html">handed_coordinate_space.hpp</a></div><div class="ttdoc">GLM_GTX_handed_coordinate_space </div></div>
+<div class="ttc" id="a00103_html"><div class="ttname"><a href="a00103.html">std_based_type.hpp</a></div><div class="ttdoc">GLM_GTX_std_based_type </div></div>
+<div class="ttc" id="a00088_html"><div class="ttname"><a href="a00088.html">quaternion.hpp</a></div><div class="ttdoc">GLM_GTX_quaternion </div></div>
+<div class="ttc" id="a00076_html"><div class="ttname"><a href="a00076.html">normalize_dot.hpp</a></div><div class="ttdoc">GLM_GTX_normalize_dot </div></div>
+<div class="ttc" id="a00047_html"><div class="ttname"><a href="a00047.html">intersect.hpp</a></div><div class="ttdoc">GLM_GTX_intersect </div></div>
+<div class="ttc" id="a00064_html"><div class="ttname"><a href="a00064.html">matrix_integer.hpp</a></div><div class="ttdoc">GLM_GTC_matrix_integer </div></div>
+<div class="ttc" id="a00062_html"><div class="ttname"><a href="a00062.html">matrix_cross_product.hpp</a></div><div class="ttdoc">GLM_GTX_matrix_cross_product </div></div>
+<div class="ttc" id="a00021_html"><div class="ttname"><a href="a00021.html">euler_angles.hpp</a></div><div class="ttdoc">GLM_GTX_euler_angles </div></div>
+<div class="ttc" id="a00079_html"><div class="ttname"><a href="a00079.html">orthonormalize.hpp</a></div><div class="ttdoc">GLM_GTX_orthonormalize </div></div>
+<div class="ttc" id="a00096_html"><div class="ttname"><a href="a00096.html">scalar_multiplication.hpp</a></div><div class="ttdoc">GTX Extensions (Experimental) </div></div>
+<div class="ttc" id="a00067_html"><div class="ttname"><a href="a00067.html">matrix_major_storage.hpp</a></div><div class="ttdoc">GLM_GTX_matrix_major_storage </div></div>
+<div class="ttc" id="a00084_html"><div class="ttname"><a href="a00084.html">polar_coordinates.hpp</a></div><div class="ttdoc">GLM_GTX_polar_coordinates </div></div>
+<div class="ttc" id="a00018_html"><div class="ttname"><a href="a00018.html">constants.hpp</a></div><div class="ttdoc">GLM_GTC_constants </div></div>
+<div class="ttc" id="a00070_html"><div class="ttname"><a href="a00070.html">matrix_transform.hpp</a></div><div class="ttdoc">GLM_GTC_matrix_transform </div></div>
+<div class="ttc" id="a00041_html"><div class="ttname"><a href="a00041.html">gradient_paint.hpp</a></div><div class="ttdoc">GLM_GTX_gradient_paint </div></div>
+<div class="ttc" id="a00106_html"><div class="ttname"><a href="a00106.html">transform2.hpp</a></div><div class="ttdoc">GLM_GTX_transform2 </div></div>
+<div class="ttc" id="a00087_html"><div class="ttname"><a href="a00087.html">quaternion.hpp</a></div><div class="ttdoc">GLM_GTC_quaternion </div></div>
+<div class="ttc" id="a00075_html"><div class="ttname"><a href="a00075.html">normal.hpp</a></div><div class="ttdoc">GLM_GTX_normal </div></div>
+<div class="ttc" id="a00009_html"><div class="ttname"><a href="a00009.html">bitfield.hpp</a></div><div class="ttdoc">GLM_GTC_bitfield </div></div>
+<div class="ttc" id="a00138_html"><div class="ttname"><a href="a00138.html">vector_query.hpp</a></div><div class="ttdoc">GLM_GTX_vector_query </div></div>
+<div class="ttc" id="a00090_html"><div class="ttname"><a href="a00090.html">range.hpp</a></div><div class="ttdoc">GLM_GTX_range </div></div>
+<div class="ttc" id="a00061_html"><div class="ttname"><a href="a00061.html">matrix_access.hpp</a></div><div class="ttdoc">GLM_GTC_matrix_access </div></div>
+<div class="ttc" id="a00026_html"><div class="ttname"><a href="a00026.html">fast_exponential.hpp</a></div><div class="ttdoc">GLM_GTX_fast_exponential </div></div>
+<div class="ttc" id="a00012_html"><div class="ttname"><a href="a00012.html">color_space.hpp</a></div><div class="ttdoc">GLM_GTX_color_space </div></div>
+<div class="ttc" id="a00095_html"><div class="ttname"><a href="a00095.html">round.hpp</a></div><div class="ttdoc">GLM_GTC_round </div></div>
+<div class="ttc" id="a00083_html"><div class="ttname"><a href="a00083.html">perpendicular.hpp</a></div><div class="ttdoc">GLM_GTX_perpendicular </div></div>
+<div class="ttc" id="a00017_html"><div class="ttname"><a href="a00017.html">component_wise.hpp</a></div><div class="ttdoc">GLM_GTX_component_wise </div></div>
+<div class="ttc" id="a00105_html"><div class="ttname"><a href="a00105.html">transform.hpp</a></div><div class="ttdoc">GLM_GTX_transform </div></div>
+<div class="ttc" id="a00132_html"><div class="ttname"><a href="a00132.html">ulp.hpp</a></div><div class="ttdoc">GLM_GTC_ulp </div></div>
+<div class="ttc" id="a00020_html"><div class="ttname"><a href="a00020.html">epsilon.hpp</a></div><div class="ttdoc">GLM_GTC_epsilon </div></div>
+<div class="ttc" id="a00078_html"><div class="ttname"><a href="a00078.html">optimum_pow.hpp</a></div><div class="ttdoc">GLM_GTX_optimum_pow </div></div>
+<div class="ttc" id="a00049_html"><div class="ttname"><a href="a00049.html">log_base.hpp</a></div><div class="ttdoc">GLM_GTX_log_base </div></div>
+<div class="ttc" id="a00066_html"><div class="ttname"><a href="a00066.html">matrix_inverse.hpp</a></div><div class="ttdoc">GLM_GTC_matrix_inverse </div></div>
+<div class="ttc" id="a00037_html"><div class="ttname"><a href="a00037.html">functions.hpp</a></div><div class="ttdoc">GLM_GTC_functions </div></div>
+<div class="ttc" id="a00137_html"><div class="ttname"><a href="a00137.html">vector_angle.hpp</a></div><div class="ttdoc">GLM_GTX_vector_angle </div></div>
+<div class="ttc" id="a00025_html"><div class="ttname"><a href="a00025.html">extended_min_max.hpp</a></div><div class="ttdoc">gtx_extended_min_max </div></div>
+<div class="ttc" id="a00125_html"><div class="ttname"><a href="a00125.html">type_ptr.hpp</a></div><div class="ttdoc">GLM_GTC_type_ptr </div></div>
+<div class="ttc" id="a00013_html"><div class="ttname"><a href="a00013.html">color_space_YCoCg.hpp</a></div><div class="ttdoc">GLM_GTX_color_space_YCoCg </div></div>
+<div class="ttc" id="a00040_html"><div class="ttname"><a href="a00040.html">glm.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00011_html"><div class="ttname"><a href="a00011.html">color_space.hpp</a></div><div class="ttdoc">GLM_GTC_color_space </div></div>
+<div class="ttc" id="a00140_html"><div class="ttname"><a href="a00140.html">wrap.hpp</a></div><div class="ttdoc">GLM_GTX_wrap </div></div>
+<div class="ttc" id="a00069_html"><div class="ttname"><a href="a00069.html">matrix_query.hpp</a></div><div class="ttdoc">GLM_GTX_matrix_query </div></div>
+<div class="ttc" id="a00086_html"><div class="ttname"><a href="a00086.html">projection.hpp</a></div><div class="ttdoc">GLM_GTX_projection </div></div>
+<div class="ttc" id="a00074_html"><div class="ttname"><a href="a00074.html">norm.hpp</a></div><div class="ttdoc">GLM_GTX_norm </div></div>
+<div class="ttc" id="a00045_html"><div class="ttname"><a href="a00045.html">integer.hpp</a></div><div class="ttdoc">GLM_GTX_integer </div></div>
+<div class="ttc" id="a00072_html"><div class="ttname"><a href="a00072.html">mixed_product.hpp</a></div><div class="ttdoc">GLM_GTX_mixed_producte </div></div>
+<div class="ttc" id="a00008_html"><div class="ttname"><a href="a00008.html">bit.hpp</a></div><div class="ttdoc">GLM_GTX_bit </div></div>
+<div class="ttc" id="a00133_html"><div class="ttname"><a href="a00133.html">vec1.hpp</a></div><div class="ttdoc">GLM_GTC_vec1 </div></div>
+<div class="ttc" id="a00108_html"><div class="ttname"><a href="a00108.html">type_aligned.hpp</a></div><div class="ttdoc">GLM_GTC_type_aligned </div></div>
+<div class="ttc" id="a00089_html"><div class="ttname"><a href="a00089.html">random.hpp</a></div><div class="ttdoc">GLM_GTC_random </div></div>
+<div class="ttc" id="a00077_html"><div class="ttname"><a href="a00077.html">number_precision.hpp</a></div><div class="ttdoc">GLM_GTX_number_precision </div></div>
+<div class="ttc" id="a00094_html"><div class="ttname"><a href="a00094.html">rotate_vector.hpp</a></div><div class="ttdoc">GLM_GTX_rotate_vector </div></div>
+<div class="ttc" id="a00065_html"><div class="ttname"><a href="a00065.html">matrix_interpolation.hpp</a></div><div class="ttdoc">GLM_GTX_matrix_interpolation </div></div>
+<div class="ttc" id="a00092_html"><div class="ttname"><a href="a00092.html">reciprocal.hpp</a></div><div class="ttdoc">GLM_GTC_reciprocal </div></div>
+<div class="ttc" id="a00028_html"><div class="ttname"><a href="a00028.html">fast_trigonometry.hpp</a></div><div class="ttdoc">GLM_GTX_fast_trigonometry </div></div>
+<div class="ttc" id="a00080_html"><div class="ttname"><a href="a00080.html">packing.hpp</a></div><div class="ttdoc">GLM_GTC_packing </div></div>
+<div class="ttc" id="a00016_html"><div class="ttname"><a href="a00016.html">compatibility.hpp</a></div><div class="ttdoc">GLM_GTX_compatibility </div></div>
+<div class="ttc" id="a00104_html"><div class="ttname"><a href="a00104.html">string_cast.hpp</a></div><div class="ttdoc">GLM_GTX_string_cast </div></div>
+<div class="ttc" id="a00102_html"><div class="ttname"><a href="a00102.html">spline.hpp</a></div><div class="ttdoc">GLM_GTX_spline </div></div>
+<div class="ttc" id="a00073_html"><div class="ttname"><a href="a00073.html">noise.hpp</a></div><div class="ttdoc">GLM_GTC_noise </div></div>
+<div class="ttc" id="a00019_html"><div class="ttname"><a href="a00019.html">dual_quaternion.hpp</a></div><div class="ttdoc">GLM_GTX_dual_quaternion </div></div>
+<div class="ttc" id="a00007_html"><div class="ttname"><a href="a00007.html">associated_min_max.hpp</a></div><div class="ttdoc">GLM_GTX_associated_min_max </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00024.html b/src/third_party/glm/doc/api/a00024.html
new file mode 100644
index 0000000..a06b629
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00024.html
@@ -0,0 +1,76 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: extend.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">extend.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00024_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga8140caae613b0f847ab0d7175dc03a37"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga8140caae613b0f847ab0d7175dc03a37"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00191.html#ga8140caae613b0f847ab0d7175dc03a37">extend</a> (genType const &Origin, genType const &Source, typename genType::value_type const Length)</td></tr>
+<tr class="separator:ga8140caae613b0f847ab0d7175dc03a37"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00191.html">GLM_GTX_extend</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00024_source.html">extend.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00024_source.html b/src/third_party/glm/doc/api/a00024_source.html
new file mode 100644
index 0000000..e82d146
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00024_source.html
@@ -0,0 +1,84 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: extend.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">extend.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00024.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include "../glm.hpp"</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_extend extension included")</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> {</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  GLM_FUNC_DECL genType <a class="code" href="a00191.html#ga8140caae613b0f847ab0d7175dc03a37">extend</a>(</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  genType <span class="keyword">const</span> & Origin, </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  genType <span class="keyword">const</span> & Source, </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keyword">typename</span> genType::value_type <span class="keyword">const</span> Length);</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#include "extend.inl"</span></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00191_html_ga8140caae613b0f847ab0d7175dc03a37"><div class="ttname"><a href="a00191.html#ga8140caae613b0f847ab0d7175dc03a37">glm::extend</a></div><div class="ttdeci">GLM_FUNC_DECL genType extend(genType const &Origin, genType const &Source, typename genType::value_type const Length)</div><div class="ttdoc">Extends of Length the Origin position using the (Source - Origin) direction. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00025.html b/src/third_party/glm/doc/api/a00025.html
new file mode 100644
index 0000000..e99d60e
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00025.html
@@ -0,0 +1,111 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: extended_min_max.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">extended_min_max.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00025_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga04991ccb9865c4c4e58488cfb209ce69"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga04991ccb9865c4c4e58488cfb209ce69"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00192.html#ga04991ccb9865c4c4e58488cfb209ce69">max</a> (T const &x, T const &y, T const &z)</td></tr>
+<tr class="separator:ga04991ccb9865c4c4e58488cfb209ce69"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae1b7bbe5c91de4924835ea3e14530744"><td class="memTemplParams" colspan="2">template<typename T , template< typename > class C> </td></tr>
+<tr class="memitem:gae1b7bbe5c91de4924835ea3e14530744"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL C< T > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00192.html#gae1b7bbe5c91de4924835ea3e14530744">max</a> (C< T > const &x, typename C< T >::T const &y, typename C< T >::T const &z)</td></tr>
+<tr class="separator:gae1b7bbe5c91de4924835ea3e14530744"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf832e9d4ab4826b2dda2fda25935a3a4"><td class="memTemplParams" colspan="2">template<typename T , template< typename > class C> </td></tr>
+<tr class="memitem:gaf832e9d4ab4826b2dda2fda25935a3a4"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL C< T > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00192.html#gaf832e9d4ab4826b2dda2fda25935a3a4">max</a> (C< T > const &x, C< T > const &y, C< T > const &z)</td></tr>
+<tr class="separator:gaf832e9d4ab4826b2dda2fda25935a3a4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga78e04a0cef1c4863fcae1a2130500d87"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga78e04a0cef1c4863fcae1a2130500d87"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00192.html#ga78e04a0cef1c4863fcae1a2130500d87">max</a> (T const &x, T const &y, T const &z, T const &w)</td></tr>
+<tr class="separator:ga78e04a0cef1c4863fcae1a2130500d87"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7cca8b53cfda402040494cdf40fbdf4a"><td class="memTemplParams" colspan="2">template<typename T , template< typename > class C> </td></tr>
+<tr class="memitem:ga7cca8b53cfda402040494cdf40fbdf4a"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL C< T > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00192.html#ga7cca8b53cfda402040494cdf40fbdf4a">max</a> (C< T > const &x, typename C< T >::T const &y, typename C< T >::T const &z, typename C< T >::T const &w)</td></tr>
+<tr class="separator:ga7cca8b53cfda402040494cdf40fbdf4a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaacffbc466c2d08c140b181e7fd8a4858"><td class="memTemplParams" colspan="2">template<typename T , template< typename > class C> </td></tr>
+<tr class="memitem:gaacffbc466c2d08c140b181e7fd8a4858"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL C< T > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00192.html#gaacffbc466c2d08c140b181e7fd8a4858">max</a> (C< T > const &x, C< T > const &y, C< T > const &z, C< T > const &w)</td></tr>
+<tr class="separator:gaacffbc466c2d08c140b181e7fd8a4858"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga713d3f9b3e76312c0d314e0c8611a6a6"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga713d3f9b3e76312c0d314e0c8611a6a6"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00192.html#ga713d3f9b3e76312c0d314e0c8611a6a6">min</a> (T const &x, T const &y, T const &z)</td></tr>
+<tr class="separator:ga713d3f9b3e76312c0d314e0c8611a6a6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga74d1a96e7cdbac40f6d35142d3bcbbd4"><td class="memTemplParams" colspan="2">template<typename T , template< typename > class C> </td></tr>
+<tr class="memitem:ga74d1a96e7cdbac40f6d35142d3bcbbd4"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL C< T > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00192.html#ga74d1a96e7cdbac40f6d35142d3bcbbd4">min</a> (C< T > const &x, typename C< T >::T const &y, typename C< T >::T const &z)</td></tr>
+<tr class="separator:ga74d1a96e7cdbac40f6d35142d3bcbbd4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga42b5c3fc027fd3d9a50d2ccc9126d9f0"><td class="memTemplParams" colspan="2">template<typename T , template< typename > class C> </td></tr>
+<tr class="memitem:ga42b5c3fc027fd3d9a50d2ccc9126d9f0"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL C< T > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00192.html#ga42b5c3fc027fd3d9a50d2ccc9126d9f0">min</a> (C< T > const &x, C< T > const &y, C< T > const &z)</td></tr>
+<tr class="separator:ga42b5c3fc027fd3d9a50d2ccc9126d9f0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga95466987024d03039607f09e69813d69"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga95466987024d03039607f09e69813d69"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00192.html#ga95466987024d03039607f09e69813d69">min</a> (T const &x, T const &y, T const &z, T const &w)</td></tr>
+<tr class="separator:ga95466987024d03039607f09e69813d69"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4fe35dd31dd0c45693c9b60b830b8d47"><td class="memTemplParams" colspan="2">template<typename T , template< typename > class C> </td></tr>
+<tr class="memitem:ga4fe35dd31dd0c45693c9b60b830b8d47"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL C< T > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00192.html#ga4fe35dd31dd0c45693c9b60b830b8d47">min</a> (C< T > const &x, typename C< T >::T const &y, typename C< T >::T const &z, typename C< T >::T const &w)</td></tr>
+<tr class="separator:ga4fe35dd31dd0c45693c9b60b830b8d47"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7471ea4159eed8dd9ea4ac5d46c2fead"><td class="memTemplParams" colspan="2">template<typename T , template< typename > class C> </td></tr>
+<tr class="memitem:ga7471ea4159eed8dd9ea4ac5d46c2fead"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL C< T > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00192.html#ga7471ea4159eed8dd9ea4ac5d46c2fead">min</a> (C< T > const &x, C< T > const &y, C< T > const &z, C< T > const &w)</td></tr>
+<tr class="separator:ga7471ea4159eed8dd9ea4ac5d46c2fead"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>gtx_extended_min_max </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd>
+<dd>
+gtx_half_float (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00025_source.html">extended_min_max.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00025_source.html b/src/third_party/glm/doc/api/a00025_source.html
new file mode 100644
index 0000000..ff10605
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00025_source.html
@@ -0,0 +1,157 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: extended_min_max.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">extended_min_max.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00025.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "../glm.hpp"</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_extented_min_max extension included")</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> {</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  GLM_FUNC_DECL T <a class="code" href="a00192.html#ga7471ea4159eed8dd9ea4ac5d46c2fead">min</a>(</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  T <span class="keyword">const</span> & x, </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  T <span class="keyword">const</span> & y, </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  T <span class="keyword">const</span> & z);</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, <span class="keyword">template</span> <<span class="keyword">typename</span>> <span class="keyword">class </span>C></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  GLM_FUNC_DECL C<T> <a class="code" href="a00192.html#ga7471ea4159eed8dd9ea4ac5d46c2fead">min</a>(</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  C<T> <span class="keyword">const</span> & x, </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keyword">typename</span> C<T>::T <span class="keyword">const</span> & y, </div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keyword">typename</span> C<T>::T <span class="keyword">const</span> & z);</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, <span class="keyword">template</span> <<span class="keyword">typename</span>> <span class="keyword">class </span>C></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  GLM_FUNC_DECL C<T> <a class="code" href="a00192.html#ga7471ea4159eed8dd9ea4ac5d46c2fead">min</a>(</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  C<T> <span class="keyword">const</span> & x, </div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  C<T> <span class="keyword">const</span> & y, </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  C<T> <span class="keyword">const</span> & z);</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  GLM_FUNC_DECL T <a class="code" href="a00192.html#ga7471ea4159eed8dd9ea4ac5d46c2fead">min</a>(</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  T <span class="keyword">const</span> & x, </div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  T <span class="keyword">const</span> & y, </div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  T <span class="keyword">const</span> & z, </div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  T <span class="keyword">const</span> & w);</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, <span class="keyword">template</span> <<span class="keyword">typename</span>> <span class="keyword">class </span>C></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  GLM_FUNC_DECL C<T> <a class="code" href="a00192.html#ga7471ea4159eed8dd9ea4ac5d46c2fead">min</a>(</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  C<T> <span class="keyword">const</span> & x, </div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keyword">typename</span> C<T>::T <span class="keyword">const</span> & y, </div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keyword">typename</span> C<T>::T <span class="keyword">const</span> & z, </div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keyword">typename</span> C<T>::T <span class="keyword">const</span> & w);</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, <span class="keyword">template</span> <<span class="keyword">typename</span>> <span class="keyword">class </span>C></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  GLM_FUNC_DECL C<T> <a class="code" href="a00192.html#ga7471ea4159eed8dd9ea4ac5d46c2fead">min</a>(</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  C<T> <span class="keyword">const</span> & x, </div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  C<T> <span class="keyword">const</span> & y, </div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  C<T> <span class="keyword">const</span> & z,</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  C<T> <span class="keyword">const</span> & w);</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  GLM_FUNC_DECL T <a class="code" href="a00192.html#gaacffbc466c2d08c140b181e7fd8a4858">max</a>(</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  T <span class="keyword">const</span> & x, </div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  T <span class="keyword">const</span> & y, </div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  T <span class="keyword">const</span> & z);</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, <span class="keyword">template</span> <<span class="keyword">typename</span>> <span class="keyword">class </span>C></div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  GLM_FUNC_DECL C<T> <a class="code" href="a00192.html#gaacffbc466c2d08c140b181e7fd8a4858">max</a>(</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  C<T> <span class="keyword">const</span> & x, </div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keyword">typename</span> C<T>::T <span class="keyword">const</span> & y, </div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="keyword">typename</span> C<T>::T <span class="keyword">const</span> & z);</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, <span class="keyword">template</span> <<span class="keyword">typename</span>> <span class="keyword">class </span>C></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  GLM_FUNC_DECL C<T> <a class="code" href="a00192.html#gaacffbc466c2d08c140b181e7fd8a4858">max</a>(</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  C<T> <span class="keyword">const</span> & x, </div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  C<T> <span class="keyword">const</span> & y, </div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  C<T> <span class="keyword">const</span> & z);</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  GLM_FUNC_DECL T <a class="code" href="a00192.html#gaacffbc466c2d08c140b181e7fd8a4858">max</a>(</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  T <span class="keyword">const</span> & x, </div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  T <span class="keyword">const</span> & y, </div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  T <span class="keyword">const</span> & z, </div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  T <span class="keyword">const</span> & w);</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, <span class="keyword">template</span> <<span class="keyword">typename</span>> <span class="keyword">class </span>C></div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  GLM_FUNC_DECL C<T> <a class="code" href="a00192.html#gaacffbc466c2d08c140b181e7fd8a4858">max</a>(</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  C<T> <span class="keyword">const</span> & x, </div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="keyword">typename</span> C<T>::T <span class="keyword">const</span> & y, </div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="keyword">typename</span> C<T>::T <span class="keyword">const</span> & z, </div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keyword">typename</span> C<T>::T <span class="keyword">const</span> & w);</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, <span class="keyword">template</span> <<span class="keyword">typename</span>> <span class="keyword">class </span>C></div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  GLM_FUNC_DECL C<T> <a class="code" href="a00192.html#gaacffbc466c2d08c140b181e7fd8a4858">max</a>(</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  C<T> <span class="keyword">const</span> & x, </div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  C<T> <span class="keyword">const</span> & y, </div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  C<T> <span class="keyword">const</span> & z, </div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  C<T> <span class="keyword">const</span> & w);</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="preprocessor">#include "extended_min_max.inl"</span></div>
+<div class="ttc" id="a00192_html_ga7471ea4159eed8dd9ea4ac5d46c2fead"><div class="ttname"><a href="a00192.html#ga7471ea4159eed8dd9ea4ac5d46c2fead">glm::min</a></div><div class="ttdeci">GLM_FUNC_DECL C< T > min(C< T > const &x, C< T > const &y, C< T > const &z, C< T > const &w)</div><div class="ttdoc">Return the minimum component-wise values of 4 inputs. </div></div>
+<div class="ttc" id="a00192_html_gaacffbc466c2d08c140b181e7fd8a4858"><div class="ttname"><a href="a00192.html#gaacffbc466c2d08c140b181e7fd8a4858">glm::max</a></div><div class="ttdeci">GLM_FUNC_DECL C< T > max(C< T > const &x, C< T > const &y, C< T > const &z, C< T > const &w)</div><div class="ttdoc">Return the maximum component-wise values of 4 inputs. </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00026.html b/src/third_party/glm/doc/api/a00026.html
new file mode 100644
index 0000000..fe6542d
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00026.html
@@ -0,0 +1,111 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: fast_exponential.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">fast_exponential.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00026_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gaa3180ac8f96ab37ab96e0cacaf608e10"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gaa3180ac8f96ab37ab96e0cacaf608e10"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00193.html#gaa3180ac8f96ab37ab96e0cacaf608e10">fastExp</a> (T x)</td></tr>
+<tr class="separator:gaa3180ac8f96ab37ab96e0cacaf608e10"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4faf0b61115de36efcf47c4ecb55a5fa"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga4faf0b61115de36efcf47c4ecb55a5fa"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00193.html#ga4faf0b61115de36efcf47c4ecb55a5fa">fastExp</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:ga4faf0b61115de36efcf47c4ecb55a5fa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0af50585955eb14c60bb286297fabab2"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga0af50585955eb14c60bb286297fabab2"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00193.html#ga0af50585955eb14c60bb286297fabab2">fastExp2</a> (T x)</td></tr>
+<tr class="separator:ga0af50585955eb14c60bb286297fabab2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9e6219327b7a33077dbec7620d981fff"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga9e6219327b7a33077dbec7620d981fff"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00193.html#ga9e6219327b7a33077dbec7620d981fff">fastExp2</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:ga9e6219327b7a33077dbec7620d981fff"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae1bdc97b7f96a600e29c753f1cd4388a"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gae1bdc97b7f96a600e29c753f1cd4388a"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00193.html#gae1bdc97b7f96a600e29c753f1cd4388a">fastLog</a> (T x)</td></tr>
+<tr class="separator:gae1bdc97b7f96a600e29c753f1cd4388a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga789abcbc34d08008d2f5a4547dd6e5e3"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga789abcbc34d08008d2f5a4547dd6e5e3"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00193.html#ga789abcbc34d08008d2f5a4547dd6e5e3">fastLog</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:ga789abcbc34d08008d2f5a4547dd6e5e3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6e98118685f6dc9e05fbb13dd5e5234e"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga6e98118685f6dc9e05fbb13dd5e5234e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00193.html#ga6e98118685f6dc9e05fbb13dd5e5234e">fastLog2</a> (T x)</td></tr>
+<tr class="separator:ga6e98118685f6dc9e05fbb13dd5e5234e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gabc46086fe6636b8be87f09e6c5d2bb58"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gabc46086fe6636b8be87f09e6c5d2bb58"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00193.html#gabc46086fe6636b8be87f09e6c5d2bb58">fastLog2</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:gabc46086fe6636b8be87f09e6c5d2bb58"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5340e98a11fcbbd936ba6e983a154d50"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga5340e98a11fcbbd936ba6e983a154d50"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00193.html#ga5340e98a11fcbbd936ba6e983a154d50">fastPow</a> (genType x, genType y)</td></tr>
+<tr class="separator:ga5340e98a11fcbbd936ba6e983a154d50"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga07b73976a9af4005945bc338b45d8466"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga07b73976a9af4005945bc338b45d8466"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00193.html#ga07b73976a9af4005945bc338b45d8466">fastPow</a> (vecType< T, P > const &x, vecType< T, P > const &y)</td></tr>
+<tr class="separator:ga07b73976a9af4005945bc338b45d8466"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7f2562db9c3e02ae76169c36b086c3f6"><td class="memTemplParams" colspan="2">template<typename genTypeT , typename genTypeU > </td></tr>
+<tr class="memitem:ga7f2562db9c3e02ae76169c36b086c3f6"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genTypeT </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00193.html#ga7f2562db9c3e02ae76169c36b086c3f6">fastPow</a> (genTypeT x, genTypeU y)</td></tr>
+<tr class="separator:ga7f2562db9c3e02ae76169c36b086c3f6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga29924aea1aa11c5c504fb2d621221906"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga29924aea1aa11c5c504fb2d621221906"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00193.html#ga29924aea1aa11c5c504fb2d621221906">fastPow</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:ga29924aea1aa11c5c504fb2d621221906"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00193.html">GLM_GTX_fast_exponential</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd>
+<dd>
+gtx_half_float (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00026_source.html">fast_exponential.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00026_source.html b/src/third_party/glm/doc/api/a00026_source.html
new file mode 100644
index 0000000..67bf8b8
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00026_source.html
@@ -0,0 +1,118 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: fast_exponential.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">fast_exponential.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00026.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "../glm.hpp"</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_fast_exponential extension included")</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> {</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  GLM_FUNC_DECL genType <a class="code" href="a00193.html#ga29924aea1aa11c5c504fb2d621221906">fastPow</a>(genType x, genType y);</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00193.html#ga29924aea1aa11c5c504fb2d621221906">fastPow</a>(vecType<T, P> <span class="keyword">const</span> & x, vecType<T, P> <span class="keyword">const</span> & y);</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genTypeT, <span class="keyword">typename</span> genTypeU></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  GLM_FUNC_DECL genTypeT <a class="code" href="a00193.html#ga29924aea1aa11c5c504fb2d621221906">fastPow</a>(genTypeT x, genTypeU y);</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00193.html#ga29924aea1aa11c5c504fb2d621221906">fastPow</a>(vecType<T, P> <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  GLM_FUNC_DECL T <a class="code" href="a00193.html#ga4faf0b61115de36efcf47c4ecb55a5fa">fastExp</a>(T x);</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00193.html#ga4faf0b61115de36efcf47c4ecb55a5fa">fastExp</a>(vecType<T, P> <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  GLM_FUNC_DECL T <a class="code" href="a00193.html#ga789abcbc34d08008d2f5a4547dd6e5e3">fastLog</a>(T x);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00193.html#ga789abcbc34d08008d2f5a4547dd6e5e3">fastLog</a>(vecType<T, P> <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  GLM_FUNC_DECL T <a class="code" href="a00193.html#ga9e6219327b7a33077dbec7620d981fff">fastExp2</a>(T x);</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00193.html#ga9e6219327b7a33077dbec7620d981fff">fastExp2</a>(vecType<T, P> <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  GLM_FUNC_DECL T <a class="code" href="a00193.html#gabc46086fe6636b8be87f09e6c5d2bb58">fastLog2</a>(T x);</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00193.html#gabc46086fe6636b8be87f09e6c5d2bb58">fastLog2</a>(vecType<T, P> <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="preprocessor">#include "fast_exponential.inl"</span></div>
+<div class="ttc" id="a00193_html_ga789abcbc34d08008d2f5a4547dd6e5e3"><div class="ttname"><a href="a00193.html#ga789abcbc34d08008d2f5a4547dd6e5e3">glm::fastLog</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > fastLog(vecType< T, P > const &x)</div><div class="ttdoc">Faster than the common exp2 function but less accurate. </div></div>
+<div class="ttc" id="a00193_html_ga29924aea1aa11c5c504fb2d621221906"><div class="ttname"><a href="a00193.html#ga29924aea1aa11c5c504fb2d621221906">glm::fastPow</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > fastPow(vecType< T, P > const &x)</div><div class="ttdoc">Faster than the common pow function but less accurate. </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00193_html_ga4faf0b61115de36efcf47c4ecb55a5fa"><div class="ttname"><a href="a00193.html#ga4faf0b61115de36efcf47c4ecb55a5fa">glm::fastExp</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > fastExp(vecType< T, P > const &x)</div><div class="ttdoc">Faster than the common exp function but less accurate. </div></div>
+<div class="ttc" id="a00193_html_ga9e6219327b7a33077dbec7620d981fff"><div class="ttname"><a href="a00193.html#ga9e6219327b7a33077dbec7620d981fff">glm::fastExp2</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > fastExp2(vecType< T, P > const &x)</div><div class="ttdoc">Faster than the common exp2 function but less accurate. </div></div>
+<div class="ttc" id="a00193_html_gabc46086fe6636b8be87f09e6c5d2bb58"><div class="ttname"><a href="a00193.html#gabc46086fe6636b8be87f09e6c5d2bb58">glm::fastLog2</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > fastLog2(vecType< T, P > const &x)</div><div class="ttdoc">Faster than the common log2 function but less accurate. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00027.html b/src/third_party/glm/doc/api/a00027.html
new file mode 100644
index 0000000..7efc7ac
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00027.html
@@ -0,0 +1,100 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: fast_square_root.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">fast_square_root.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00027_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gaac333418d0c4e0cc6d3d219ed606c238"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gaac333418d0c4e0cc6d3d219ed606c238"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00194.html#gaac333418d0c4e0cc6d3d219ed606c238">fastDistance</a> (genType x, genType y)</td></tr>
+<tr class="separator:gaac333418d0c4e0cc6d3d219ed606c238"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6d1ac559cd77d69119e30c3aca0e14b5"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga6d1ac559cd77d69119e30c3aca0e14b5"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00194.html#ga6d1ac559cd77d69119e30c3aca0e14b5">fastDistance</a> (vecType< T, P > const &x, vecType< T, P > const &y)</td></tr>
+<tr class="separator:ga6d1ac559cd77d69119e30c3aca0e14b5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7f081b14d9c7035c8714eba5f7f75a8f"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga7f081b14d9c7035c8714eba5f7f75a8f"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00194.html#ga7f081b14d9c7035c8714eba5f7f75a8f">fastInverseSqrt</a> (genType x)</td></tr>
+<tr class="separator:ga7f081b14d9c7035c8714eba5f7f75a8f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga903878071f92e51e551791e584a171a1"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga903878071f92e51e551791e584a171a1"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00194.html#ga903878071f92e51e551791e584a171a1">fastInverseSqrt</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:ga903878071f92e51e551791e584a171a1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafe697d6287719538346bbdf8b1367c59"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gafe697d6287719538346bbdf8b1367c59"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00194.html#gafe697d6287719538346bbdf8b1367c59">fastLength</a> (genType x)</td></tr>
+<tr class="separator:gafe697d6287719538346bbdf8b1367c59"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae28a3099cbd6404a4ea8ef22147ed7b0"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gae28a3099cbd6404a4ea8ef22147ed7b0"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00194.html#gae28a3099cbd6404a4ea8ef22147ed7b0">fastLength</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:gae28a3099cbd6404a4ea8ef22147ed7b0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3b02c1d6e0c754144e2f1e110bf9f16c"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga3b02c1d6e0c754144e2f1e110bf9f16c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00194.html#ga3b02c1d6e0c754144e2f1e110bf9f16c">fastNormalize</a> (genType const &x)</td></tr>
+<tr class="separator:ga3b02c1d6e0c754144e2f1e110bf9f16c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6c460e9414a50b2fc455c8f64c86cdc9"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga6c460e9414a50b2fc455c8f64c86cdc9"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00194.html#ga6c460e9414a50b2fc455c8f64c86cdc9">fastSqrt</a> (genType x)</td></tr>
+<tr class="separator:ga6c460e9414a50b2fc455c8f64c86cdc9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaad9f601bbc3faa04dda384e4c4e1592c"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gaad9f601bbc3faa04dda384e4c4e1592c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00194.html#gaad9f601bbc3faa04dda384e4c4e1592c">fastSqrt</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:gaad9f601bbc3faa04dda384e4c4e1592c"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00194.html">GLM_GTX_fast_square_root</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00027_source.html">fast_square_root.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00027_source.html b/src/third_party/glm/doc/api/a00027_source.html
new file mode 100644
index 0000000..4b314ef
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00027_source.html
@@ -0,0 +1,111 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: fast_square_root.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">fast_square_root.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00027.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "../common.hpp"</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include "../exponential.hpp"</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "../geometric.hpp"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_fast_square_root extension included")</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> {</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType> </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  GLM_FUNC_DECL genType <a class="code" href="a00194.html#gaad9f601bbc3faa04dda384e4c4e1592c">fastSqrt</a>(genType x);</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00194.html#gaad9f601bbc3faa04dda384e4c4e1592c">fastSqrt</a>(vecType<T, P> <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType> </div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  GLM_FUNC_DECL genType <a class="code" href="a00194.html#ga903878071f92e51e551791e584a171a1">fastInverseSqrt</a>(genType x);</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00194.html#ga903878071f92e51e551791e584a171a1">fastInverseSqrt</a>(vecType<T, P> <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  GLM_FUNC_DECL genType <a class="code" href="a00194.html#gae28a3099cbd6404a4ea8ef22147ed7b0">fastLength</a>(genType x);</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  GLM_FUNC_DECL T <a class="code" href="a00194.html#gae28a3099cbd6404a4ea8ef22147ed7b0">fastLength</a>(vecType<T, P> <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  GLM_FUNC_DECL genType <a class="code" href="a00194.html#ga6d1ac559cd77d69119e30c3aca0e14b5">fastDistance</a>(genType x, genType y);</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  GLM_FUNC_DECL T <a class="code" href="a00194.html#ga6d1ac559cd77d69119e30c3aca0e14b5">fastDistance</a>(vecType<T, P> <span class="keyword">const</span> & x, vecType<T, P> <span class="keyword">const</span> & y);</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType> </div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  GLM_FUNC_DECL genType <a class="code" href="a00194.html#ga3b02c1d6e0c754144e2f1e110bf9f16c">fastNormalize</a>(genType <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> }<span class="comment">// namespace glm</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="preprocessor">#include "fast_square_root.inl"</span></div>
+<div class="ttc" id="a00194_html_ga6d1ac559cd77d69119e30c3aca0e14b5"><div class="ttname"><a href="a00194.html#ga6d1ac559cd77d69119e30c3aca0e14b5">glm::fastDistance</a></div><div class="ttdeci">GLM_FUNC_DECL T fastDistance(vecType< T, P > const &x, vecType< T, P > const &y)</div><div class="ttdoc">Faster than the common distance function but less accurate. </div></div>
+<div class="ttc" id="a00194_html_ga3b02c1d6e0c754144e2f1e110bf9f16c"><div class="ttname"><a href="a00194.html#ga3b02c1d6e0c754144e2f1e110bf9f16c">glm::fastNormalize</a></div><div class="ttdeci">GLM_FUNC_DECL genType fastNormalize(genType const &x)</div><div class="ttdoc">Faster than the common normalize function but less accurate. </div></div>
+<div class="ttc" id="a00194_html_ga903878071f92e51e551791e584a171a1"><div class="ttname"><a href="a00194.html#ga903878071f92e51e551791e584a171a1">glm::fastInverseSqrt</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > fastInverseSqrt(vecType< T, P > const &x)</div><div class="ttdoc">Faster than the common inversesqrt function but less accurate. </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00194_html_gaad9f601bbc3faa04dda384e4c4e1592c"><div class="ttname"><a href="a00194.html#gaad9f601bbc3faa04dda384e4c4e1592c">glm::fastSqrt</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > fastSqrt(vecType< T, P > const &x)</div><div class="ttdoc">Faster than the common sqrt function but less accurate. </div></div>
+<div class="ttc" id="a00194_html_gae28a3099cbd6404a4ea8ef22147ed7b0"><div class="ttname"><a href="a00194.html#gae28a3099cbd6404a4ea8ef22147ed7b0">glm::fastLength</a></div><div class="ttdeci">GLM_FUNC_DECL T fastLength(vecType< T, P > const &x)</div><div class="ttdoc">Faster than the common length function but less accurate. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00028.html b/src/third_party/glm/doc/api/a00028.html
new file mode 100644
index 0000000..11c45da
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00028.html
@@ -0,0 +1,97 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: fast_trigonometry.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">fast_trigonometry.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00028_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga9721d63356e5d94fdc4b393a426ab26b"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga9721d63356e5d94fdc4b393a426ab26b"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00195.html#ga9721d63356e5d94fdc4b393a426ab26b">fastAcos</a> (T angle)</td></tr>
+<tr class="separator:ga9721d63356e5d94fdc4b393a426ab26b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga562cb62c51fbfe7fac7db0bce706b81f"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga562cb62c51fbfe7fac7db0bce706b81f"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00195.html#ga562cb62c51fbfe7fac7db0bce706b81f">fastAsin</a> (T angle)</td></tr>
+<tr class="separator:ga562cb62c51fbfe7fac7db0bce706b81f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8d197c6ef564f5e5d59af3b3f8adcc2c"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga8d197c6ef564f5e5d59af3b3f8adcc2c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00195.html#ga8d197c6ef564f5e5d59af3b3f8adcc2c">fastAtan</a> (T y, T x)</td></tr>
+<tr class="separator:ga8d197c6ef564f5e5d59af3b3f8adcc2c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae25de86a968490ff56856fa425ec9d30"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gae25de86a968490ff56856fa425ec9d30"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00195.html#gae25de86a968490ff56856fa425ec9d30">fastAtan</a> (T angle)</td></tr>
+<tr class="separator:gae25de86a968490ff56856fa425ec9d30"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab34c8b45c23c0165a64dcecfcc3b302a"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gab34c8b45c23c0165a64dcecfcc3b302a"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00195.html#gab34c8b45c23c0165a64dcecfcc3b302a">fastCos</a> (T angle)</td></tr>
+<tr class="separator:gab34c8b45c23c0165a64dcecfcc3b302a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0aab3257bb3b628d10a1e0483e2c6915"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga0aab3257bb3b628d10a1e0483e2c6915"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00195.html#ga0aab3257bb3b628d10a1e0483e2c6915">fastSin</a> (T angle)</td></tr>
+<tr class="separator:ga0aab3257bb3b628d10a1e0483e2c6915"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf29b9c1101a10007b4f79ee89df27ba2"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gaf29b9c1101a10007b4f79ee89df27ba2"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00195.html#gaf29b9c1101a10007b4f79ee89df27ba2">fastTan</a> (T angle)</td></tr>
+<tr class="separator:gaf29b9c1101a10007b4f79ee89df27ba2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga069527c6dbd64f53435b8ebc4878b473"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga069527c6dbd64f53435b8ebc4878b473"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00195.html#ga069527c6dbd64f53435b8ebc4878b473">wrapAngle</a> (T angle)</td></tr>
+<tr class="separator:ga069527c6dbd64f53435b8ebc4878b473"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00195.html">GLM_GTX_fast_trigonometry</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00028_source.html">fast_trigonometry.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00028_source.html b/src/third_party/glm/doc/api/a00028_source.html
new file mode 100644
index 0000000..8e2af01
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00028_source.html
@@ -0,0 +1,109 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: fast_trigonometry.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">fast_trigonometry.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00028.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include "../gtc/constants.hpp"</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_fast_trigonometry extension included")</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> {</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  GLM_FUNC_DECL T <a class="code" href="a00195.html#ga069527c6dbd64f53435b8ebc4878b473">wrapAngle</a>(T <a class="code" href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">angle</a>);</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  GLM_FUNC_DECL T <a class="code" href="a00195.html#ga0aab3257bb3b628d10a1e0483e2c6915">fastSin</a>(T <a class="code" href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">angle</a>);</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  GLM_FUNC_DECL T <a class="code" href="a00195.html#gab34c8b45c23c0165a64dcecfcc3b302a">fastCos</a>(T <a class="code" href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">angle</a>);</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T> </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  GLM_FUNC_DECL T <a class="code" href="a00195.html#gaf29b9c1101a10007b4f79ee89df27ba2">fastTan</a>(T <a class="code" href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">angle</a>);</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T> </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  GLM_FUNC_DECL T <a class="code" href="a00195.html#ga562cb62c51fbfe7fac7db0bce706b81f">fastAsin</a>(T <a class="code" href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">angle</a>);</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T> </div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  GLM_FUNC_DECL T <a class="code" href="a00195.html#ga9721d63356e5d94fdc4b393a426ab26b">fastAcos</a>(T <a class="code" href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">angle</a>);</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T> </div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  GLM_FUNC_DECL T <a class="code" href="a00195.html#gae25de86a968490ff56856fa425ec9d30">fastAtan</a>(T y, T x);</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T> </div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  GLM_FUNC_DECL T <a class="code" href="a00195.html#gae25de86a968490ff56856fa425ec9d30">fastAtan</a>(T <a class="code" href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">angle</a>);</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="preprocessor">#include "fast_trigonometry.inl"</span></div>
+<div class="ttc" id="a00195_html_ga9721d63356e5d94fdc4b393a426ab26b"><div class="ttname"><a href="a00195.html#ga9721d63356e5d94fdc4b393a426ab26b">glm::fastAcos</a></div><div class="ttdeci">GLM_FUNC_DECL T fastAcos(T angle)</div><div class="ttdoc">Faster than the common acos function but less accurate. </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00195_html_ga0aab3257bb3b628d10a1e0483e2c6915"><div class="ttname"><a href="a00195.html#ga0aab3257bb3b628d10a1e0483e2c6915">glm::fastSin</a></div><div class="ttdeci">GLM_FUNC_DECL T fastSin(T angle)</div><div class="ttdoc">Faster than the common sin function but less accurate. </div></div>
+<div class="ttc" id="a00195_html_ga069527c6dbd64f53435b8ebc4878b473"><div class="ttname"><a href="a00195.html#ga069527c6dbd64f53435b8ebc4878b473">glm::wrapAngle</a></div><div class="ttdeci">GLM_FUNC_DECL T wrapAngle(T angle)</div><div class="ttdoc">Wrap an angle to [0 2pi[ From GLM_GTX_fast_trigonometry extension. </div></div>
+<div class="ttc" id="a00195_html_ga562cb62c51fbfe7fac7db0bce706b81f"><div class="ttname"><a href="a00195.html#ga562cb62c51fbfe7fac7db0bce706b81f">glm::fastAsin</a></div><div class="ttdeci">GLM_FUNC_DECL T fastAsin(T angle)</div><div class="ttdoc">Faster than the common asin function but less accurate. </div></div>
+<div class="ttc" id="a00172_html_gad4a4448baedb198b2b1e7880d2544dc9"><div class="ttname"><a href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">glm::angle</a></div><div class="ttdeci">GLM_FUNC_DECL T angle(tquat< T, P > const &x)</div><div class="ttdoc">Returns the quaternion rotation angle. </div></div>
+<div class="ttc" id="a00195_html_gaf29b9c1101a10007b4f79ee89df27ba2"><div class="ttname"><a href="a00195.html#gaf29b9c1101a10007b4f79ee89df27ba2">glm::fastTan</a></div><div class="ttdeci">GLM_FUNC_DECL T fastTan(T angle)</div><div class="ttdoc">Faster than the common tan function but less accurate. </div></div>
+<div class="ttc" id="a00195_html_gab34c8b45c23c0165a64dcecfcc3b302a"><div class="ttname"><a href="a00195.html#gab34c8b45c23c0165a64dcecfcc3b302a">glm::fastCos</a></div><div class="ttdeci">GLM_FUNC_DECL T fastCos(T angle)</div><div class="ttdoc">Faster than the common cos function but less accurate. </div></div>
+<div class="ttc" id="a00195_html_gae25de86a968490ff56856fa425ec9d30"><div class="ttname"><a href="a00195.html#gae25de86a968490ff56856fa425ec9d30">glm::fastAtan</a></div><div class="ttdeci">GLM_FUNC_DECL T fastAtan(T angle)</div><div class="ttdoc">Faster than the common atan function but less accurate. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00029.html b/src/third_party/glm/doc/api/a00029.html
new file mode 100644
index 0000000..984be42
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00029.html
@@ -0,0 +1,168 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: func_common.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">func_common.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00029_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga693d77696ff36572a0da79efec965acd"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga693d77696ff36572a0da79efec965acd"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#ga693d77696ff36572a0da79efec965acd">abs</a> (genType x)</td></tr>
+<tr class="separator:ga693d77696ff36572a0da79efec965acd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9189b2bec45ff301923ea8f8dd157fb8"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga9189b2bec45ff301923ea8f8dd157fb8"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#ga9189b2bec45ff301923ea8f8dd157fb8">ceil</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:ga9189b2bec45ff301923ea8f8dd157fb8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga93bce26c7d80d30a62f5c508f8498a6c"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga93bce26c7d80d30a62f5c508f8498a6c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#ga93bce26c7d80d30a62f5c508f8498a6c">clamp</a> (genType x, genType minVal, genType maxVal)</td></tr>
+<tr class="separator:ga93bce26c7d80d30a62f5c508f8498a6c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1425c1c3160ec51214b03a0469a3013d"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00146.html#ga1425c1c3160ec51214b03a0469a3013d">floatBitsToInt</a> (float const &v)</td></tr>
+<tr class="separator:ga1425c1c3160ec51214b03a0469a3013d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac4a0710238ae54c67931dd29a0b0f873"><td class="memTemplParams" colspan="2">template<template< typename, precision > class vecType, precision P> </td></tr>
+<tr class="memitem:gac4a0710238ae54c67931dd29a0b0f873"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< int, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#gac4a0710238ae54c67931dd29a0b0f873">floatBitsToInt</a> (vecType< float, P > const &v)</td></tr>
+<tr class="separator:gac4a0710238ae54c67931dd29a0b0f873"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga70e0271c34af52f3100c7960e18c3f2b"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint </td><td class="memItemRight" valign="bottom"><a class="el" href="a00146.html#ga70e0271c34af52f3100c7960e18c3f2b">floatBitsToUint</a> (float const &v)</td></tr>
+<tr class="separator:ga70e0271c34af52f3100c7960e18c3f2b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1804d4c443605d8a27be644aa461afe4"><td class="memTemplParams" colspan="2">template<template< typename, precision > class vecType, precision P> </td></tr>
+<tr class="memitem:ga1804d4c443605d8a27be644aa461afe4"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< uint, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#ga1804d4c443605d8a27be644aa461afe4">floatBitsToUint</a> (vecType< float, P > const &v)</td></tr>
+<tr class="separator:ga1804d4c443605d8a27be644aa461afe4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga568b822b78f045f77c3325e165b44d5d"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga568b822b78f045f77c3325e165b44d5d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#ga568b822b78f045f77c3325e165b44d5d">floor</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:ga568b822b78f045f77c3325e165b44d5d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad0f444d4b81cc53c3b6edf5aa25078c2"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gad0f444d4b81cc53c3b6edf5aa25078c2"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#gad0f444d4b81cc53c3b6edf5aa25078c2">fma</a> (genType const &a, genType const &b, genType const &c)</td></tr>
+<tr class="separator:gad0f444d4b81cc53c3b6edf5aa25078c2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8ba89e40e55ae5cdf228548f9b7639c7"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga8ba89e40e55ae5cdf228548f9b7639c7"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#ga8ba89e40e55ae5cdf228548f9b7639c7">fract</a> (genType x)</td></tr>
+<tr class="separator:ga8ba89e40e55ae5cdf228548f9b7639c7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga20620e83544d1a988857a3bc4ebe0e1d"><td class="memTemplParams" colspan="2">template<typename genType , typename genIType > </td></tr>
+<tr class="memitem:ga20620e83544d1a988857a3bc4ebe0e1d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#ga20620e83544d1a988857a3bc4ebe0e1d">frexp</a> (genType const &x, genIType &exp)</td></tr>
+<tr class="separator:ga20620e83544d1a988857a3bc4ebe0e1d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4fb7c21c2dce064b26fd9ccdaf9adcd4"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL float </td><td class="memItemRight" valign="bottom"><a class="el" href="a00146.html#ga4fb7c21c2dce064b26fd9ccdaf9adcd4">intBitsToFloat</a> (int const &v)</td></tr>
+<tr class="separator:ga4fb7c21c2dce064b26fd9ccdaf9adcd4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad21ab176dd0e6b59d923db5efca87f4e"><td class="memTemplParams" colspan="2">template<template< typename, precision > class vecType, precision P> </td></tr>
+<tr class="memitem:gad21ab176dd0e6b59d923db5efca87f4e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< float, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#gad21ab176dd0e6b59d923db5efca87f4e">intBitsToFloat</a> (vecType< int, P > const &v)</td></tr>
+<tr class="separator:gad21ab176dd0e6b59d923db5efca87f4e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf28f7a4696746f081685c9fd05c7e2de"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gaf28f7a4696746f081685c9fd05c7e2de"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#gaf28f7a4696746f081685c9fd05c7e2de">isinf</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:gaf28f7a4696746f081685c9fd05c7e2de"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6cb8f202a52eed2331724a3800198ebf"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga6cb8f202a52eed2331724a3800198ebf"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#ga6cb8f202a52eed2331724a3800198ebf">isnan</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:ga6cb8f202a52eed2331724a3800198ebf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga52e319d7289b849ec92055abd4830533"><td class="memTemplParams" colspan="2">template<typename genType , typename genIType > </td></tr>
+<tr class="memitem:ga52e319d7289b849ec92055abd4830533"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#ga52e319d7289b849ec92055abd4830533">ldexp</a> (genType const &x, genIType const &exp)</td></tr>
+<tr class="separator:ga52e319d7289b849ec92055abd4830533"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga98caa7f95a94c86a86ebce893a45326c"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga98caa7f95a94c86a86ebce893a45326c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#ga98caa7f95a94c86a86ebce893a45326c">max</a> (genType x, genType y)</td></tr>
+<tr class="separator:ga98caa7f95a94c86a86ebce893a45326c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2c2bde1cec025b7ddff83c74a1113719"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga2c2bde1cec025b7ddff83c74a1113719"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#ga2c2bde1cec025b7ddff83c74a1113719">min</a> (genType x, genType y)</td></tr>
+<tr class="separator:ga2c2bde1cec025b7ddff83c74a1113719"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gadccbaffe46f369cf1a96b2aef92cbfdd"><td class="memTemplParams" colspan="2">template<typename T , typename U , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gadccbaffe46f369cf1a96b2aef92cbfdd"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#gadccbaffe46f369cf1a96b2aef92cbfdd">mix</a> (vecType< T, P > const &x, vecType< T, P > const &y, vecType< U, P > const &a)</td></tr>
+<tr class="separator:gadccbaffe46f369cf1a96b2aef92cbfdd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga12201563ef902e3b07e0d1d7656efdb1"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga12201563ef902e3b07e0d1d7656efdb1"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#ga12201563ef902e3b07e0d1d7656efdb1">mod</a> (genType x, genType y)</td></tr>
+<tr class="separator:ga12201563ef902e3b07e0d1d7656efdb1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac76ae7d82ff22526bcf6d6a1b51af6c3"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gac76ae7d82ff22526bcf6d6a1b51af6c3"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00165.html#gac76ae7d82ff22526bcf6d6a1b51af6c3">mod</a> (vecType< T, P > const &x, T y)</td></tr>
+<tr class="separator:gac76ae7d82ff22526bcf6d6a1b51af6c3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf5ae5330f6b30b4a35fb95f9a73d6134"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gaf5ae5330f6b30b4a35fb95f9a73d6134"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00165.html#gaf5ae5330f6b30b4a35fb95f9a73d6134">mod</a> (vecType< T, P > const &x, vecType< T, P > const &y)</td></tr>
+<tr class="separator:gaf5ae5330f6b30b4a35fb95f9a73d6134"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga85e33f139b8db1b39b590a5713b9e679"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga85e33f139b8db1b39b590a5713b9e679"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#ga85e33f139b8db1b39b590a5713b9e679">modf</a> (genType x, genType &i)</td></tr>
+<tr class="separator:ga85e33f139b8db1b39b590a5713b9e679"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gada0165544c0618d634c8056a88082ce9"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gada0165544c0618d634c8056a88082ce9"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#gada0165544c0618d634c8056a88082ce9">round</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:gada0165544c0618d634c8056a88082ce9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga655598104195a60a950291485e84a97e"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga655598104195a60a950291485e84a97e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#ga655598104195a60a950291485e84a97e">roundEven</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:ga655598104195a60a950291485e84a97e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac3446b4138e0b8757561c07cd19f084d"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gac3446b4138e0b8757561c07cd19f084d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#gac3446b4138e0b8757561c07cd19f084d">sign</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:gac3446b4138e0b8757561c07cd19f084d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga562edf7eca082cc5b7a0aaf180436daf"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga562edf7eca082cc5b7a0aaf180436daf"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#ga562edf7eca082cc5b7a0aaf180436daf">smoothstep</a> (genType edge0, genType edge1, genType x)</td></tr>
+<tr class="separator:ga562edf7eca082cc5b7a0aaf180436daf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga015a1261ff23e12650211aa872863cce"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga015a1261ff23e12650211aa872863cce"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#ga015a1261ff23e12650211aa872863cce">step</a> (genType edge, genType x)</td></tr>
+<tr class="separator:ga015a1261ff23e12650211aa872863cce"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf15b74ab672af2c7d7b535a9b4803700"><td class="memTemplParams" colspan="2">template<template< typename, precision > class vecType, typename T , precision P> </td></tr>
+<tr class="memitem:gaf15b74ab672af2c7d7b535a9b4803700"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#gaf15b74ab672af2c7d7b535a9b4803700">step</a> (T edge, vecType< T, P > const &x)</td></tr>
+<tr class="separator:gaf15b74ab672af2c7d7b535a9b4803700"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6d84170051fb87c183c38883ec85b411"><td class="memTemplParams" colspan="2">template<template< typename, precision > class vecType, typename T , precision P> </td></tr>
+<tr class="memitem:ga6d84170051fb87c183c38883ec85b411"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#ga6d84170051fb87c183c38883ec85b411">step</a> (vecType< T, P > const &edge, vecType< T, P > const &x)</td></tr>
+<tr class="separator:ga6d84170051fb87c183c38883ec85b411"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga634cdbf8b37edca03f2248450570fd54"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga634cdbf8b37edca03f2248450570fd54"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#ga634cdbf8b37edca03f2248450570fd54">trunc</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:ga634cdbf8b37edca03f2248450570fd54"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab2bae0d15dcdca6093f88f76b3975d97"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL float </td><td class="memItemRight" valign="bottom"><a class="el" href="a00146.html#gab2bae0d15dcdca6093f88f76b3975d97">uintBitsToFloat</a> (uint const &v)</td></tr>
+<tr class="separator:gab2bae0d15dcdca6093f88f76b3975d97"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3acab37650ecd792dc84548094b58684"><td class="memTemplParams" colspan="2">template<template< typename, precision > class vecType, precision P> </td></tr>
+<tr class="memitem:ga3acab37650ecd792dc84548094b58684"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< float, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#ga3acab37650ecd792dc84548094b58684">uintBitsToFloat</a> (vecType< uint, P > const &v)</td></tr>
+<tr class="separator:ga3acab37650ecd792dc84548094b58684"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>
+
+<p>Definition in file <a class="el" href="a00029_source.html">func_common.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00029_source.html b/src/third_party/glm/doc/api/a00029_source.html
new file mode 100644
index 0000000..7818dbb
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00029_source.html
@@ -0,0 +1,238 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: func_common.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">func_common.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00029.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> </div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#include "<a class="code" href="a00098.html">setup.hpp</a>"</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#include "<a class="code" href="a00085.html">precision.hpp</a>"</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#include "<a class="code" href="a00113.html">type_int.hpp</a>"</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include "<a class="code" href="a00002.html">_fixes.hpp</a>"</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> {</div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  GLM_FUNC_DECL genType <a class="code" href="a00146.html#ga693d77696ff36572a0da79efec965acd">abs</a>(genType x);</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00146.html#ga693d77696ff36572a0da79efec965acd">abs</a>(vecType<T, P> <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00146.html#gac3446b4138e0b8757561c07cd19f084d">sign</a>(vecType<T, P> <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00146.html#ga568b822b78f045f77c3325e165b44d5d">floor</a>(vecType<T, P> <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00146.html#ga634cdbf8b37edca03f2248450570fd54">trunc</a>(vecType<T, P> <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00146.html#gada0165544c0618d634c8056a88082ce9">round</a>(vecType<T, P> <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00146.html#ga655598104195a60a950291485e84a97e">roundEven</a>(vecType<T, P> <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00146.html#ga9189b2bec45ff301923ea8f8dd157fb8">ceil</a>(vecType<T, P> <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  GLM_FUNC_DECL genType <a class="code" href="a00146.html#ga8ba89e40e55ae5cdf228548f9b7639c7">fract</a>(genType x);</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00146.html#ga8ba89e40e55ae5cdf228548f9b7639c7">fract</a>(vecType<T, P> <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  GLM_FUNC_DECL genType <a class="code" href="a00165.html#gaf5ae5330f6b30b4a35fb95f9a73d6134">mod</a>(genType x, genType y);</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00165.html#gaf5ae5330f6b30b4a35fb95f9a73d6134">mod</a>(vecType<T, P> <span class="keyword">const</span> & x, T y);</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00165.html#gaf5ae5330f6b30b4a35fb95f9a73d6134">mod</a>(vecType<T, P> <span class="keyword">const</span> & x, vecType<T, P> <span class="keyword">const</span> & y);</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  GLM_FUNC_DECL genType <a class="code" href="a00146.html#ga85e33f139b8db1b39b590a5713b9e679">modf</a>(genType x, genType & i);</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  GLM_FUNC_DECL genType <a class="code" href="a00146.html#ga2c2bde1cec025b7ddff83c74a1113719">min</a>(genType x, genType y);</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00146.html#ga2c2bde1cec025b7ddff83c74a1113719">min</a>(vecType<T, P> <span class="keyword">const</span> & x, T y);</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00146.html#ga2c2bde1cec025b7ddff83c74a1113719">min</a>(vecType<T, P> <span class="keyword">const</span> & x, vecType<T, P> <span class="keyword">const</span> & y);</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  GLM_FUNC_DECL genType <a class="code" href="a00146.html#ga98caa7f95a94c86a86ebce893a45326c">max</a>(genType x, genType y);</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00146.html#ga98caa7f95a94c86a86ebce893a45326c">max</a>(vecType<T, P> <span class="keyword">const</span> & x, T y);</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00146.html#ga98caa7f95a94c86a86ebce893a45326c">max</a>(vecType<T, P> <span class="keyword">const</span> & x, vecType<T, P> <span class="keyword">const</span> & y);</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  GLM_FUNC_DECL genType <a class="code" href="a00146.html#ga93bce26c7d80d30a62f5c508f8498a6c">clamp</a>(genType x, genType minVal, genType maxVal);</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> </div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00146.html#ga93bce26c7d80d30a62f5c508f8498a6c">clamp</a>(vecType<T, P> <span class="keyword">const</span> & x, T minVal, T maxVal);</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00146.html#ga93bce26c7d80d30a62f5c508f8498a6c">clamp</a>(vecType<T, P> <span class="keyword">const</span> & x, vecType<T, P> <span class="keyword">const</span> & minVal, vecType<T, P> <span class="keyword">const</span> & maxVal);</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, <span class="keyword">typename</span> U, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00146.html#gadccbaffe46f369cf1a96b2aef92cbfdd">mix</a>(vecType<T, P> <span class="keyword">const</span> & x, vecType<T, P> <span class="keyword">const</span> & y, vecType<U, P> <span class="keyword">const</span> & a);</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> </div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, <span class="keyword">typename</span> U, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00146.html#gadccbaffe46f369cf1a96b2aef92cbfdd">mix</a>(vecType<T, P> <span class="keyword">const</span> & x, vecType<T, P> <span class="keyword">const</span> & y, U a);</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> </div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genTypeT, <span class="keyword">typename</span> genTypeU></div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  GLM_FUNC_DECL genTypeT <a class="code" href="a00146.html#gadccbaffe46f369cf1a96b2aef92cbfdd">mix</a>(genTypeT x, genTypeT y, genTypeU a);</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> </div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  GLM_FUNC_DECL genType <a class="code" href="a00146.html#ga6d84170051fb87c183c38883ec85b411">step</a>(genType edge, genType x);</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> </div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="keyword">template</span> <<span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType, <span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00146.html#ga6d84170051fb87c183c38883ec85b411">step</a>(T edge, vecType<T, P> <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> </div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  <span class="keyword">template</span> <<span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType, <span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00146.html#ga6d84170051fb87c183c38883ec85b411">step</a>(vecType<T, P> <span class="keyword">const</span> & edge, vecType<T, P> <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  GLM_FUNC_DECL genType <a class="code" href="a00146.html#ga562edf7eca082cc5b7a0aaf180436daf">smoothstep</a>(genType edge0, genType edge1, genType x);</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> </div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00146.html#ga562edf7eca082cc5b7a0aaf180436daf">smoothstep</a>(T edge0, T edge1, vecType<T, P> <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> </div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00146.html#ga562edf7eca082cc5b7a0aaf180436daf">smoothstep</a>(vecType<T, P> <span class="keyword">const</span> & edge0, vecType<T, P> <span class="keyword">const</span> & edge1, vecType<T, P> <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> </div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  GLM_FUNC_DECL vecType<bool, P> <a class="code" href="a00146.html#ga6cb8f202a52eed2331724a3800198ebf">isnan</a>(vecType<T, P> <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> </div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  GLM_FUNC_DECL vecType<bool, P> <a class="code" href="a00146.html#gaf28f7a4696746f081685c9fd05c7e2de">isinf</a>(vecType<T, P> <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> </div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  GLM_FUNC_DECL <span class="keywordtype">int</span> <a class="code" href="a00146.html#gac4a0710238ae54c67931dd29a0b0f873">floatBitsToInt</a>(<span class="keywordtype">float</span> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> </div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  <span class="keyword">template</span> <<span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType, precision P></div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  GLM_FUNC_DECL vecType<int, P> <a class="code" href="a00146.html#gac4a0710238ae54c67931dd29a0b0f873">floatBitsToInt</a>(vecType<float, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> </div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  GLM_FUNC_DECL <a class="code" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a> <a class="code" href="a00146.html#ga1804d4c443605d8a27be644aa461afe4">floatBitsToUint</a>(<span class="keywordtype">float</span> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> </div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  <span class="keyword">template</span> <<span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType, precision P></div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  GLM_FUNC_DECL vecType<uint, P> <a class="code" href="a00146.html#ga1804d4c443605d8a27be644aa461afe4">floatBitsToUint</a>(vecType<float, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> </div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  GLM_FUNC_DECL <span class="keywordtype">float</span> <a class="code" href="a00146.html#gad21ab176dd0e6b59d923db5efca87f4e">intBitsToFloat</a>(<span class="keywordtype">int</span> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> </div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  <span class="keyword">template</span> <<span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType, precision P></div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  GLM_FUNC_DECL vecType<float, P> <a class="code" href="a00146.html#gad21ab176dd0e6b59d923db5efca87f4e">intBitsToFloat</a>(vecType<int, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> </div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  GLM_FUNC_DECL <span class="keywordtype">float</span> <a class="code" href="a00146.html#ga3acab37650ecd792dc84548094b58684">uintBitsToFloat</a>(<a class="code" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> </div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  <span class="keyword">template</span> <<span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType, precision P></div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  GLM_FUNC_DECL vecType<float, P> <a class="code" href="a00146.html#ga3acab37650ecd792dc84548094b58684">uintBitsToFloat</a>(vecType<uint, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> </div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  GLM_FUNC_DECL genType <a class="code" href="a00146.html#gad0f444d4b81cc53c3b6edf5aa25078c2">fma</a>(genType <span class="keyword">const</span> & a, genType <span class="keyword">const</span> & b, genType <span class="keyword">const</span> & c);</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> </div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType, <span class="keyword">typename</span> genIType></div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  GLM_FUNC_DECL genType <a class="code" href="a00146.html#ga20620e83544d1a988857a3bc4ebe0e1d">frexp</a>(genType <span class="keyword">const</span> & x, genIType & <a class="code" href="a00147.html#ga25e54a7f44fc49ec6ac6ffc7675cf04a">exp</a>);</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> </div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType, <span class="keyword">typename</span> genIType></div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  GLM_FUNC_DECL genType <a class="code" href="a00146.html#ga52e319d7289b849ec92055abd4830533">ldexp</a>(genType <span class="keyword">const</span> & x, genIType <span class="keyword">const</span> & <a class="code" href="a00147.html#ga25e54a7f44fc49ec6ac6ffc7675cf04a">exp</a>);</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> </div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> </div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> <span class="preprocessor">#include "func_common.inl"</span></div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> </div>
+<div class="ttc" id="a00146_html_ga8ba89e40e55ae5cdf228548f9b7639c7"><div class="ttname"><a href="a00146.html#ga8ba89e40e55ae5cdf228548f9b7639c7">glm::fract</a></div><div class="ttdeci">GLM_FUNC_DECL genType fract(genType x)</div><div class="ttdoc">Return x - floor(x). </div></div>
+<div class="ttc" id="a00146_html_ga52e319d7289b849ec92055abd4830533"><div class="ttname"><a href="a00146.html#ga52e319d7289b849ec92055abd4830533">glm::ldexp</a></div><div class="ttdeci">GLM_FUNC_DECL genType ldexp(genType const &x, genIType const &exp)</div><div class="ttdoc">Builds a floating-point number from x and the corresponding integral exponent of two in exp...</div></div>
+<div class="ttc" id="a00146_html_gad21ab176dd0e6b59d923db5efca87f4e"><div class="ttname"><a href="a00146.html#gad21ab176dd0e6b59d923db5efca87f4e">glm::intBitsToFloat</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< float, P > intBitsToFloat(vecType< int, P > const &v)</div><div class="ttdoc">Returns a floating-point value corresponding to a signed integer encoding of a floating-point value...</div></div>
+<div class="ttc" id="a00146_html_ga9189b2bec45ff301923ea8f8dd157fb8"><div class="ttname"><a href="a00146.html#ga9189b2bec45ff301923ea8f8dd157fb8">glm::ceil</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > ceil(vecType< T, P > const &x)</div><div class="ttdoc">Returns a value equal to the nearest integer that is greater than or equal to x. </div></div>
+<div class="ttc" id="a00146_html_ga85e33f139b8db1b39b590a5713b9e679"><div class="ttname"><a href="a00146.html#ga85e33f139b8db1b39b590a5713b9e679">glm::modf</a></div><div class="ttdeci">GLM_FUNC_DECL genType modf(genType x, genType &i)</div><div class="ttdoc">Returns the fractional part of x and sets i to the integer part (as a whole number floating point val...</div></div>
+<div class="ttc" id="a00146_html_ga562edf7eca082cc5b7a0aaf180436daf"><div class="ttname"><a href="a00146.html#ga562edf7eca082cc5b7a0aaf180436daf">glm::smoothstep</a></div><div class="ttdeci">GLM_FUNC_DECL genType smoothstep(genType edge0, genType edge1, genType x)</div><div class="ttdoc">Returns 0.0 if x <= edge0 and 1.0 if x >= edge1 and performs smooth Hermite interpolation between 0 a...</div></div>
+<div class="ttc" id="a00146_html_ga98caa7f95a94c86a86ebce893a45326c"><div class="ttname"><a href="a00146.html#ga98caa7f95a94c86a86ebce893a45326c">glm::max</a></div><div class="ttdeci">GLM_FUNC_DECL genType max(genType x, genType y)</div><div class="ttdoc">Returns y if x < y; otherwise, it returns x. </div></div>
+<div class="ttc" id="a00158_html_ga91ad9478d81a7aaf2593e8d9c3d06a14"><div class="ttname"><a href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">glm::uint</a></div><div class="ttdeci">unsigned int uint</div><div class="ttdoc">Unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00113_source.html#l00288">type_int.hpp:288</a></div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00146_html_gada0165544c0618d634c8056a88082ce9"><div class="ttname"><a href="a00146.html#gada0165544c0618d634c8056a88082ce9">glm::round</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > round(vecType< T, P > const &x)</div><div class="ttdoc">Returns a value equal to the nearest integer to x. </div></div>
+<div class="ttc" id="a00146_html_ga655598104195a60a950291485e84a97e"><div class="ttname"><a href="a00146.html#ga655598104195a60a950291485e84a97e">glm::roundEven</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > roundEven(vecType< T, P > const &x)</div><div class="ttdoc">Returns a value equal to the nearest integer to x. </div></div>
+<div class="ttc" id="a00146_html_gadccbaffe46f369cf1a96b2aef92cbfdd"><div class="ttname"><a href="a00146.html#gadccbaffe46f369cf1a96b2aef92cbfdd">glm::mix</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > mix(vecType< T, P > const &x, vecType< T, P > const &y, vecType< U, P > const &a)</div><div class="ttdoc">If genTypeU is a floating scalar or vector: Returns x * (1.0 - a) + y * a, i.e., the linear blend of ...</div></div>
+<div class="ttc" id="a00146_html_ga634cdbf8b37edca03f2248450570fd54"><div class="ttname"><a href="a00146.html#ga634cdbf8b37edca03f2248450570fd54">glm::trunc</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > trunc(vecType< T, P > const &x)</div><div class="ttdoc">Returns a value equal to the nearest integer to x whose absolute value is not larger than the absolut...</div></div>
+<div class="ttc" id="a00146_html_ga693d77696ff36572a0da79efec965acd"><div class="ttname"><a href="a00146.html#ga693d77696ff36572a0da79efec965acd">glm::abs</a></div><div class="ttdeci">GLM_FUNC_DECL genType abs(genType x)</div><div class="ttdoc">Returns x if x >= 0; otherwise, it returns -x. </div></div>
+<div class="ttc" id="a00146_html_ga6cb8f202a52eed2331724a3800198ebf"><div class="ttname"><a href="a00146.html#ga6cb8f202a52eed2331724a3800198ebf">glm::isnan</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< bool, P > isnan(vecType< T, P > const &x)</div><div class="ttdoc">Returns true if x holds a NaN (not a number) representation in the underlying implementation's set of...</div></div>
+<div class="ttc" id="a00146_html_ga20620e83544d1a988857a3bc4ebe0e1d"><div class="ttname"><a href="a00146.html#ga20620e83544d1a988857a3bc4ebe0e1d">glm::frexp</a></div><div class="ttdeci">GLM_FUNC_DECL genType frexp(genType const &x, genIType &exp)</div><div class="ttdoc">Splits x into a floating-point significand in the range [0.5, 1.0) and an integral exponent of two...</div></div>
+<div class="ttc" id="a00113_html"><div class="ttname"><a href="a00113.html">type_int.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00146_html_ga1804d4c443605d8a27be644aa461afe4"><div class="ttname"><a href="a00146.html#ga1804d4c443605d8a27be644aa461afe4">glm::floatBitsToUint</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< uint, P > floatBitsToUint(vecType< float, P > const &v)</div><div class="ttdoc">Returns a unsigned integer value representing the encoding of a floating-point value. </div></div>
+<div class="ttc" id="a00098_html"><div class="ttname"><a href="a00098.html">setup.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00146_html_ga3acab37650ecd792dc84548094b58684"><div class="ttname"><a href="a00146.html#ga3acab37650ecd792dc84548094b58684">glm::uintBitsToFloat</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< float, P > uintBitsToFloat(vecType< uint, P > const &v)</div><div class="ttdoc">Returns a floating-point value corresponding to a unsigned integer encoding of a floating-point value...</div></div>
+<div class="ttc" id="a00146_html_ga6d84170051fb87c183c38883ec85b411"><div class="ttname"><a href="a00146.html#ga6d84170051fb87c183c38883ec85b411">glm::step</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > step(vecType< T, P > const &edge, vecType< T, P > const &x)</div><div class="ttdoc">Returns 0.0 if x < edge, otherwise it returns 1.0. </div></div>
+<div class="ttc" id="a00147_html_ga25e54a7f44fc49ec6ac6ffc7675cf04a"><div class="ttname"><a href="a00147.html#ga25e54a7f44fc49ec6ac6ffc7675cf04a">glm::exp</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > exp(vecType< T, P > const &v)</div><div class="ttdoc">Returns the natural exponentiation of x, i.e., e^x. </div></div>
+<div class="ttc" id="a00146_html_gaf28f7a4696746f081685c9fd05c7e2de"><div class="ttname"><a href="a00146.html#gaf28f7a4696746f081685c9fd05c7e2de">glm::isinf</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< bool, P > isinf(vecType< T, P > const &x)</div><div class="ttdoc">Returns true if x holds a positive infinity or negative infinity representation in the underlying imp...</div></div>
+<div class="ttc" id="a00165_html_gaf5ae5330f6b30b4a35fb95f9a73d6134"><div class="ttname"><a href="a00165.html#gaf5ae5330f6b30b4a35fb95f9a73d6134">glm::mod</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > mod(vecType< T, P > const &x, vecType< T, P > const &y)</div><div class="ttdoc">Modulus. </div></div>
+<div class="ttc" id="a00146_html_ga2c2bde1cec025b7ddff83c74a1113719"><div class="ttname"><a href="a00146.html#ga2c2bde1cec025b7ddff83c74a1113719">glm::min</a></div><div class="ttdeci">GLM_FUNC_DECL genType min(genType x, genType y)</div><div class="ttdoc">Returns y if y < x; otherwise, it returns x. </div></div>
+<div class="ttc" id="a00146_html_gad0f444d4b81cc53c3b6edf5aa25078c2"><div class="ttname"><a href="a00146.html#gad0f444d4b81cc53c3b6edf5aa25078c2">glm::fma</a></div><div class="ttdeci">GLM_FUNC_DECL genType fma(genType const &a, genType const &b, genType const &c)</div><div class="ttdoc">Computes and returns a * b + c. </div></div>
+<div class="ttc" id="a00002_html"><div class="ttname"><a href="a00002.html">_fixes.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00146_html_ga568b822b78f045f77c3325e165b44d5d"><div class="ttname"><a href="a00146.html#ga568b822b78f045f77c3325e165b44d5d">glm::floor</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > floor(vecType< T, P > const &x)</div><div class="ttdoc">Returns a value equal to the nearest integer that is less then or equal to x. </div></div>
+<div class="ttc" id="a00085_html"><div class="ttname"><a href="a00085.html">precision.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00146_html_gac4a0710238ae54c67931dd29a0b0f873"><div class="ttname"><a href="a00146.html#gac4a0710238ae54c67931dd29a0b0f873">glm::floatBitsToInt</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< int, P > floatBitsToInt(vecType< float, P > const &v)</div><div class="ttdoc">Returns a signed integer value representing the encoding of a floating-point value. </div></div>
+<div class="ttc" id="a00146_html_ga93bce26c7d80d30a62f5c508f8498a6c"><div class="ttname"><a href="a00146.html#ga93bce26c7d80d30a62f5c508f8498a6c">glm::clamp</a></div><div class="ttdeci">GLM_FUNC_DECL genType clamp(genType x, genType minVal, genType maxVal)</div><div class="ttdoc">Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal an...</div></div>
+<div class="ttc" id="a00146_html_gac3446b4138e0b8757561c07cd19f084d"><div class="ttname"><a href="a00146.html#gac3446b4138e0b8757561c07cd19f084d">glm::sign</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > sign(vecType< T, P > const &x)</div><div class="ttdoc">Returns 1.0 if x > 0, 0.0 if x == 0, or -1.0 if x < 0. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00030.html b/src/third_party/glm/doc/api/a00030.html
new file mode 100644
index 0000000..aafc203
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00030.html
@@ -0,0 +1,94 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: func_exponential.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">func_exponential.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00030_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga25e54a7f44fc49ec6ac6ffc7675cf04a"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga25e54a7f44fc49ec6ac6ffc7675cf04a"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00147.html#ga25e54a7f44fc49ec6ac6ffc7675cf04a">exp</a> (vecType< T, P > const &v)</td></tr>
+<tr class="separator:ga25e54a7f44fc49ec6ac6ffc7675cf04a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga42ca440d9062f1f456f5a9e896378f9c"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga42ca440d9062f1f456f5a9e896378f9c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00147.html#ga42ca440d9062f1f456f5a9e896378f9c">exp2</a> (vecType< T, P > const &v)</td></tr>
+<tr class="separator:ga42ca440d9062f1f456f5a9e896378f9c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga599103d4fe4ef2234761ba8da7268627"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga599103d4fe4ef2234761ba8da7268627"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00147.html#ga599103d4fe4ef2234761ba8da7268627">inversesqrt</a> (vecType< T, P > const &v)</td></tr>
+<tr class="separator:ga599103d4fe4ef2234761ba8da7268627"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga21efca311e62d233de0ae96bab126b83"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga21efca311e62d233de0ae96bab126b83"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00147.html#ga21efca311e62d233de0ae96bab126b83">log</a> (vecType< T, P > const &v)</td></tr>
+<tr class="separator:ga21efca311e62d233de0ae96bab126b83"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gabae30945338a555a03733f00dad95d0d"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gabae30945338a555a03733f00dad95d0d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00147.html#gabae30945338a555a03733f00dad95d0d">log2</a> (vecType< T, P > const &v)</td></tr>
+<tr class="separator:gabae30945338a555a03733f00dad95d0d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga082b332a4b7c6ad1d43e09ff19e214dd"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga082b332a4b7c6ad1d43e09ff19e214dd"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00147.html#ga082b332a4b7c6ad1d43e09ff19e214dd">pow</a> (vecType< T, P > const &base, vecType< T, P > const &exponent)</td></tr>
+<tr class="separator:ga082b332a4b7c6ad1d43e09ff19e214dd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae7ac2e44c14d4e8004098d0bfba6e2b8"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gae7ac2e44c14d4e8004098d0bfba6e2b8"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00147.html#gae7ac2e44c14d4e8004098d0bfba6e2b8">sqrt</a> (vecType< T, P > const &v)</td></tr>
+<tr class="separator:gae7ac2e44c14d4e8004098d0bfba6e2b8"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a> </dd></dl>
+
+<p>Definition in file <a class="el" href="a00030_source.html">func_exponential.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00030_source.html b/src/third_party/glm/doc/api/a00030_source.html
new file mode 100644
index 0000000..589a3b4
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00030_source.html
@@ -0,0 +1,110 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: func_exponential.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">func_exponential.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00030.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> </div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#include "<a class="code" href="a00128.html">type_vec1.hpp</a>"</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#include "<a class="code" href="a00129.html">type_vec2.hpp</a>"</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#include "<a class="code" href="a00130.html">type_vec3.hpp</a>"</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include "<a class="code" href="a00131.html">type_vec4.hpp</a>"</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include <cmath></span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> {</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00147.html#ga082b332a4b7c6ad1d43e09ff19e214dd">pow</a>(vecType<T, P> <span class="keyword">const</span> & base, vecType<T, P> <span class="keyword">const</span> & exponent);</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00147.html#ga25e54a7f44fc49ec6ac6ffc7675cf04a">exp</a>(vecType<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00147.html#ga21efca311e62d233de0ae96bab126b83">log</a>(vecType<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00147.html#ga42ca440d9062f1f456f5a9e896378f9c">exp2</a>(vecType<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00147.html#gabae30945338a555a03733f00dad95d0d">log2</a>(vecType<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="comment">//template <typename genType></span></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="comment">//GLM_FUNC_DECL genType sqrt(genType const & x);</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00147.html#gae7ac2e44c14d4e8004098d0bfba6e2b8">sqrt</a>(vecType<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  </div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00147.html#ga599103d4fe4ef2234761ba8da7268627">inversesqrt</a>(vecType<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="preprocessor">#include "func_exponential.inl"</span></div>
+<div class="ttc" id="a00147_html_ga082b332a4b7c6ad1d43e09ff19e214dd"><div class="ttname"><a href="a00147.html#ga082b332a4b7c6ad1d43e09ff19e214dd">glm::pow</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > pow(vecType< T, P > const &base, vecType< T, P > const &exponent)</div><div class="ttdoc">Returns 'base' raised to the power 'exponent'. </div></div>
+<div class="ttc" id="a00130_html"><div class="ttname"><a href="a00130.html">type_vec3.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00147_html_ga21efca311e62d233de0ae96bab126b83"><div class="ttname"><a href="a00147.html#ga21efca311e62d233de0ae96bab126b83">glm::log</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > log(vecType< T, P > const &v)</div><div class="ttdoc">Returns the natural logarithm of v, i.e., returns the value y which satisfies the equation x = e^y...</div></div>
+<div class="ttc" id="a00147_html_ga42ca440d9062f1f456f5a9e896378f9c"><div class="ttname"><a href="a00147.html#ga42ca440d9062f1f456f5a9e896378f9c">glm::exp2</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > exp2(vecType< T, P > const &v)</div><div class="ttdoc">Returns 2 raised to the v power. </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00129_html"><div class="ttname"><a href="a00129.html">type_vec2.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00147_html_gabae30945338a555a03733f00dad95d0d"><div class="ttname"><a href="a00147.html#gabae30945338a555a03733f00dad95d0d">glm::log2</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > log2(vecType< T, P > const &v)</div><div class="ttdoc">Returns the base 2 log of x, i.e., returns the value y, which satisfies the equation x = 2 ^ y...</div></div>
+<div class="ttc" id="a00147_html_gae7ac2e44c14d4e8004098d0bfba6e2b8"><div class="ttname"><a href="a00147.html#gae7ac2e44c14d4e8004098d0bfba6e2b8">glm::sqrt</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > sqrt(vecType< T, P > const &v)</div><div class="ttdoc">Returns the positive square root of v. </div></div>
+<div class="ttc" id="a00131_html"><div class="ttname"><a href="a00131.html">type_vec4.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00147_html_ga25e54a7f44fc49ec6ac6ffc7675cf04a"><div class="ttname"><a href="a00147.html#ga25e54a7f44fc49ec6ac6ffc7675cf04a">glm::exp</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > exp(vecType< T, P > const &v)</div><div class="ttdoc">Returns the natural exponentiation of x, i.e., e^x. </div></div>
+<div class="ttc" id="a00128_html"><div class="ttname"><a href="a00128.html">type_vec1.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00147_html_ga599103d4fe4ef2234761ba8da7268627"><div class="ttname"><a href="a00147.html#ga599103d4fe4ef2234761ba8da7268627">glm::inversesqrt</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > inversesqrt(vecType< T, P > const &v)</div><div class="ttdoc">Returns the reciprocal of the positive square root of v. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00031.html b/src/third_party/glm/doc/api/a00031.html
new file mode 100644
index 0000000..8ba48c7
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00031.html
@@ -0,0 +1,97 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: func_geometric.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">func_geometric.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00031_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gafe2cae8cb26fd44be62aee97369d0af8"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gafe2cae8cb26fd44be62aee97369d0af8"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00148.html#gafe2cae8cb26fd44be62aee97369d0af8">cross</a> (tvec3< T, P > const &x, tvec3< T, P > const &y)</td></tr>
+<tr class="separator:gafe2cae8cb26fd44be62aee97369d0af8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7ca317dde0d7e94d920153554d4a02a8"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga7ca317dde0d7e94d920153554d4a02a8"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00148.html#ga7ca317dde0d7e94d920153554d4a02a8">distance</a> (vecType< T, P > const &p0, vecType< T, P > const &p1)</td></tr>
+<tr class="separator:ga7ca317dde0d7e94d920153554d4a02a8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7dada304da2ba7dd3376ab4f178c3f6b"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga7dada304da2ba7dd3376ab4f178c3f6b"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00148.html#ga7dada304da2ba7dd3376ab4f178c3f6b">dot</a> (vecType< T, P > const &x, vecType< T, P > const &y)</td></tr>
+<tr class="separator:ga7dada304da2ba7dd3376ab4f178c3f6b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaea854e5aec1b5839832ac2dfc7cd3c0d"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gaea854e5aec1b5839832ac2dfc7cd3c0d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00148.html#gaea854e5aec1b5839832ac2dfc7cd3c0d">faceforward</a> (vecType< T, P > const &N, vecType< T, P > const &I, vecType< T, P > const &Nref)</td></tr>
+<tr class="separator:gaea854e5aec1b5839832ac2dfc7cd3c0d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga18d45e3d4c7705e67ccfabd99e521604"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga18d45e3d4c7705e67ccfabd99e521604"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00148.html#ga18d45e3d4c7705e67ccfabd99e521604">length</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:ga18d45e3d4c7705e67ccfabd99e521604"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gada9451ec170a36fe53552812b9c03a68"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gada9451ec170a36fe53552812b9c03a68"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00148.html#gada9451ec170a36fe53552812b9c03a68">normalize</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:gada9451ec170a36fe53552812b9c03a68"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab63646fc36b81cf69d3ce123a72f76f2"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gab63646fc36b81cf69d3ce123a72f76f2"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00148.html#gab63646fc36b81cf69d3ce123a72f76f2">reflect</a> (genType const &I, genType const &N)</td></tr>
+<tr class="separator:gab63646fc36b81cf69d3ce123a72f76f2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab7e7cdf4403931a5f7b74560ad64159b"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gab7e7cdf4403931a5f7b74560ad64159b"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00148.html#gab7e7cdf4403931a5f7b74560ad64159b">refract</a> (vecType< T, P > const &I, vecType< T, P > const &N, T eta)</td></tr>
+<tr class="separator:gab7e7cdf4403931a5f7b74560ad64159b"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a> </dd></dl>
+
+<p>Definition in file <a class="el" href="a00031_source.html">func_geometric.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00031_source.html b/src/third_party/glm/doc/api/a00031_source.html
new file mode 100644
index 0000000..71f4c42
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00031_source.html
@@ -0,0 +1,121 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: func_geometric.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">func_geometric.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00031.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> </div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#include "<a class="code" href="a00130.html">type_vec3.hpp</a>"</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> {</div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  GLM_FUNC_DECL T <a class="code" href="a00148.html#ga18d45e3d4c7705e67ccfabd99e521604">length</a>(</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  vecType<T, P> <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  GLM_FUNC_DECL T <a class="code" href="a00148.html#ga7ca317dde0d7e94d920153554d4a02a8">distance</a>(</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  vecType<T, P> <span class="keyword">const</span> & p0,</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  vecType<T, P> <span class="keyword">const</span> & p1);</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  GLM_FUNC_DECL T <a class="code" href="a00148.html#ga7dada304da2ba7dd3376ab4f178c3f6b">dot</a>(</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  vecType<T, P> <span class="keyword">const</span> & x,</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  vecType<T, P> <span class="keyword">const</span> & y);</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  GLM_FUNC_DECL tvec3<T, P> <a class="code" href="a00148.html#gafe2cae8cb26fd44be62aee97369d0af8">cross</a>(</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  tvec3<T, P> <span class="keyword">const</span> & x,</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  tvec3<T, P> <span class="keyword">const</span> & y);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00148.html#gada9451ec170a36fe53552812b9c03a68">normalize</a>(</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  vecType<T, P> <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00148.html#gaea854e5aec1b5839832ac2dfc7cd3c0d">faceforward</a>(</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  vecType<T, P> <span class="keyword">const</span> & N,</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  vecType<T, P> <span class="keyword">const</span> & I,</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  vecType<T, P> <span class="keyword">const</span> & Nref);</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  GLM_FUNC_DECL genType <a class="code" href="a00148.html#gab63646fc36b81cf69d3ce123a72f76f2">reflect</a>(</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  genType <span class="keyword">const</span> & I,</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  genType <span class="keyword">const</span> & N);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00148.html#gab7e7cdf4403931a5f7b74560ad64159b">refract</a>(</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  vecType<T, P> <span class="keyword">const</span> & I,</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  vecType<T, P> <span class="keyword">const</span> & N,</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  T eta);</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="preprocessor">#include "func_geometric.inl"</span></div>
+<div class="ttc" id="a00130_html"><div class="ttname"><a href="a00130.html">type_vec3.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00148_html_ga7dada304da2ba7dd3376ab4f178c3f6b"><div class="ttname"><a href="a00148.html#ga7dada304da2ba7dd3376ab4f178c3f6b">glm::dot</a></div><div class="ttdeci">GLM_FUNC_DECL T dot(vecType< T, P > const &x, vecType< T, P > const &y)</div><div class="ttdoc">Returns the dot product of x and y, i.e., result = x * y. </div></div>
+<div class="ttc" id="a00148_html_gafe2cae8cb26fd44be62aee97369d0af8"><div class="ttname"><a href="a00148.html#gafe2cae8cb26fd44be62aee97369d0af8">glm::cross</a></div><div class="ttdeci">GLM_FUNC_DECL tvec3< T, P > cross(tvec3< T, P > const &x, tvec3< T, P > const &y)</div><div class="ttdoc">Returns the cross product of x and y. </div></div>
+<div class="ttc" id="a00148_html_gab63646fc36b81cf69d3ce123a72f76f2"><div class="ttname"><a href="a00148.html#gab63646fc36b81cf69d3ce123a72f76f2">glm::reflect</a></div><div class="ttdeci">GLM_FUNC_DECL genType reflect(genType const &I, genType const &N)</div><div class="ttdoc">For the incident vector I and surface orientation N, returns the reflection direction : result = I - ...</div></div>
+<div class="ttc" id="a00148_html_gaea854e5aec1b5839832ac2dfc7cd3c0d"><div class="ttname"><a href="a00148.html#gaea854e5aec1b5839832ac2dfc7cd3c0d">glm::faceforward</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > faceforward(vecType< T, P > const &N, vecType< T, P > const &I, vecType< T, P > const &Nref)</div><div class="ttdoc">If dot(Nref, I) < 0.0, return N, otherwise, return -N. </div></div>
+<div class="ttc" id="a00148_html_gada9451ec170a36fe53552812b9c03a68"><div class="ttname"><a href="a00148.html#gada9451ec170a36fe53552812b9c03a68">glm::normalize</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > normalize(vecType< T, P > const &x)</div><div class="ttdoc">Returns a vector in the same direction as x but with length of 1. </div></div>
+<div class="ttc" id="a00148_html_ga7ca317dde0d7e94d920153554d4a02a8"><div class="ttname"><a href="a00148.html#ga7ca317dde0d7e94d920153554d4a02a8">glm::distance</a></div><div class="ttdeci">GLM_FUNC_DECL T distance(vecType< T, P > const &p0, vecType< T, P > const &p1)</div><div class="ttdoc">Returns the distance betwwen p0 and p1, i.e., length(p0 - p1). </div></div>
+<div class="ttc" id="a00148_html_ga18d45e3d4c7705e67ccfabd99e521604"><div class="ttname"><a href="a00148.html#ga18d45e3d4c7705e67ccfabd99e521604">glm::length</a></div><div class="ttdeci">GLM_FUNC_DECL T length(vecType< T, P > const &x)</div><div class="ttdoc">Returns the length of x, i.e., sqrt(x * x). </div></div>
+<div class="ttc" id="a00148_html_gab7e7cdf4403931a5f7b74560ad64159b"><div class="ttname"><a href="a00148.html#gab7e7cdf4403931a5f7b74560ad64159b">glm::refract</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > refract(vecType< T, P > const &I, vecType< T, P > const &N, T eta)</div><div class="ttdoc">For the incident vector I and surface normal N, and the ratio of indices of refraction eta...</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00032.html b/src/third_party/glm/doc/api/a00032.html
new file mode 100644
index 0000000..3d67986
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00032.html
@@ -0,0 +1,112 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: func_integer.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">func_integer.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00032_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga44abfe3379e11cbd29425a843420d0d6"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga44abfe3379e11cbd29425a843420d0d6"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL int </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00149.html#ga44abfe3379e11cbd29425a843420d0d6">bitCount</a> (genType v)</td></tr>
+<tr class="separator:ga44abfe3379e11cbd29425a843420d0d6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1f29640969a3c54564da06ac67a5392e"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga1f29640969a3c54564da06ac67a5392e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< int, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00149.html#ga1f29640969a3c54564da06ac67a5392e">bitCount</a> (vecType< T, P > const &v)</td></tr>
+<tr class="separator:ga1f29640969a3c54564da06ac67a5392e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab84b88f3a8e367774e5dd1c618c353cf"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gab84b88f3a8e367774e5dd1c618c353cf"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00149.html#gab84b88f3a8e367774e5dd1c618c353cf">bitfieldExtract</a> (vecType< T, P > const &Value, int Offset, int Bits)</td></tr>
+<tr class="separator:gab84b88f3a8e367774e5dd1c618c353cf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5681dfac9239beb1b8bd995e3c6496d7"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga5681dfac9239beb1b8bd995e3c6496d7"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00149.html#ga5681dfac9239beb1b8bd995e3c6496d7">bitfieldInsert</a> (vecType< T, P > const &Base, vecType< T, P > const &Insert, int Offset, int Bits)</td></tr>
+<tr class="separator:ga5681dfac9239beb1b8bd995e3c6496d7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga153e7e8d0c035f83cce50fc3e580930f"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga153e7e8d0c035f83cce50fc3e580930f"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00149.html#ga153e7e8d0c035f83cce50fc3e580930f">bitfieldReverse</a> (vecType< T, P > const &v)</td></tr>
+<tr class="separator:ga153e7e8d0c035f83cce50fc3e580930f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf74c4d969fa34ab8acb9d390f5ca5274"><td class="memTemplParams" colspan="2">template<typename genIUType > </td></tr>
+<tr class="memitem:gaf74c4d969fa34ab8acb9d390f5ca5274"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL int </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00149.html#gaf74c4d969fa34ab8acb9d390f5ca5274">findLSB</a> (genIUType x)</td></tr>
+<tr class="separator:gaf74c4d969fa34ab8acb9d390f5ca5274"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga014a72009e68233c34c06a6dc2251b8c"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga014a72009e68233c34c06a6dc2251b8c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< int, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00149.html#ga014a72009e68233c34c06a6dc2251b8c">findLSB</a> (vecType< T, P > const &v)</td></tr>
+<tr class="separator:ga014a72009e68233c34c06a6dc2251b8c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7e4a794d766861c70bc961630f8ef621"><td class="memTemplParams" colspan="2">template<typename genIUType > </td></tr>
+<tr class="memitem:ga7e4a794d766861c70bc961630f8ef621"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL int </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00149.html#ga7e4a794d766861c70bc961630f8ef621">findMSB</a> (genIUType x)</td></tr>
+<tr class="separator:ga7e4a794d766861c70bc961630f8ef621"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga433104d77ec2ba58888aaefb77e9183f"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga433104d77ec2ba58888aaefb77e9183f"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< int, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00149.html#ga433104d77ec2ba58888aaefb77e9183f">findMSB</a> (vecType< T, P > const &v)</td></tr>
+<tr class="separator:ga433104d77ec2ba58888aaefb77e9183f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6e6e8b29ca40d8ca2df10b58ed17d426"><td class="memTemplParams" colspan="2">template<precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga6e6e8b29ca40d8ca2df10b58ed17d426"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00149.html#ga6e6e8b29ca40d8ca2df10b58ed17d426">imulExtended</a> (vecType< int, P > const &x, vecType< int, P > const &y, vecType< int, P > &msb, vecType< int, P > &lsb)</td></tr>
+<tr class="separator:ga6e6e8b29ca40d8ca2df10b58ed17d426"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2fc1a46e7b7e9fbbd8fa444fbacaa2aa"><td class="memTemplParams" colspan="2">template<precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga2fc1a46e7b7e9fbbd8fa444fbacaa2aa"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< uint, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00149.html#ga2fc1a46e7b7e9fbbd8fa444fbacaa2aa">uaddCarry</a> (vecType< uint, P > const &x, vecType< uint, P > const &y, vecType< uint, P > &carry)</td></tr>
+<tr class="separator:ga2fc1a46e7b7e9fbbd8fa444fbacaa2aa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga456ff9dcec42f6769a9ae2a2af7f1ce1"><td class="memTemplParams" colspan="2">template<precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga456ff9dcec42f6769a9ae2a2af7f1ce1"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00149.html#ga456ff9dcec42f6769a9ae2a2af7f1ce1">umulExtended</a> (vecType< uint, P > const &x, vecType< uint, P > const &y, vecType< uint, P > &msb, vecType< uint, P > &lsb)</td></tr>
+<tr class="separator:ga456ff9dcec42f6769a9ae2a2af7f1ce1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga22a889bf08313b7e547e2cdb8bb15ee4"><td class="memTemplParams" colspan="2">template<precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga22a889bf08313b7e547e2cdb8bb15ee4"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< uint, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00149.html#ga22a889bf08313b7e547e2cdb8bb15ee4">usubBorrow</a> (vecType< uint, P > const &x, vecType< uint, P > const &y, vecType< uint, P > &borrow)</td></tr>
+<tr class="separator:ga22a889bf08313b7e547e2cdb8bb15ee4"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> </dd></dl>
+
+<p>Definition in file <a class="el" href="a00032_source.html">func_integer.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00032_source.html b/src/third_party/glm/doc/api/a00032_source.html
new file mode 100644
index 0000000..ef3d916
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00032_source.html
@@ -0,0 +1,149 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: func_integer.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">func_integer.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00032.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#include "<a class="code" href="a00098.html">setup.hpp</a>"</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include "<a class="code" href="a00085.html">precision.hpp</a>"</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "<a class="code" href="a00029.html">func_common.hpp</a>"</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "<a class="code" href="a00036.html">func_vector_relational.hpp</a>"</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> {</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keyword">template</span> <precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  GLM_FUNC_DECL vecType<uint, P> <a class="code" href="a00149.html#ga2fc1a46e7b7e9fbbd8fa444fbacaa2aa">uaddCarry</a>(</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  vecType<uint, P> <span class="keyword">const</span> & x,</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  vecType<uint, P> <span class="keyword">const</span> & y,</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  vecType<uint, P> & carry);</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keyword">template</span> <precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  GLM_FUNC_DECL vecType<uint, P> <a class="code" href="a00149.html#ga22a889bf08313b7e547e2cdb8bb15ee4">usubBorrow</a>(</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  vecType<uint, P> <span class="keyword">const</span> & x,</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  vecType<uint, P> <span class="keyword">const</span> & y,</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  vecType<uint, P> & borrow);</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keyword">template</span> <precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  GLM_FUNC_DECL <span class="keywordtype">void</span> <a class="code" href="a00149.html#ga456ff9dcec42f6769a9ae2a2af7f1ce1">umulExtended</a>(</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  vecType<uint, P> <span class="keyword">const</span> & x,</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  vecType<uint, P> <span class="keyword">const</span> & y,</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  vecType<uint, P> & msb,</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  vecType<uint, P> & lsb);</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  </div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keyword">template</span> <precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  GLM_FUNC_DECL <span class="keywordtype">void</span> <a class="code" href="a00149.html#ga6e6e8b29ca40d8ca2df10b58ed17d426">imulExtended</a>(</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  vecType<int, P> <span class="keyword">const</span> & x,</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  vecType<int, P> <span class="keyword">const</span> & y,</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  vecType<int, P> & msb,</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  vecType<int, P> & lsb);</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00149.html#gab84b88f3a8e367774e5dd1c618c353cf">bitfieldExtract</a>(</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  vecType<T, P> <span class="keyword">const</span> & Value,</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keywordtype">int</span> Offset,</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <span class="keywordtype">int</span> Bits);</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00149.html#ga5681dfac9239beb1b8bd995e3c6496d7">bitfieldInsert</a>(</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  vecType<T, P> <span class="keyword">const</span> & Base,</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  vecType<T, P> <span class="keyword">const</span> & Insert,</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordtype">int</span> Offset,</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="keywordtype">int</span> Bits);</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00149.html#ga153e7e8d0c035f83cce50fc3e580930f">bitfieldReverse</a>(vecType<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  GLM_FUNC_DECL <span class="keywordtype">int</span> <a class="code" href="a00149.html#ga1f29640969a3c54564da06ac67a5392e">bitCount</a>(genType v);</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  GLM_FUNC_DECL vecType<int, P> <a class="code" href="a00149.html#ga1f29640969a3c54564da06ac67a5392e">bitCount</a>(vecType<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genIUType></div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  GLM_FUNC_DECL <span class="keywordtype">int</span> <a class="code" href="a00149.html#ga014a72009e68233c34c06a6dc2251b8c">findLSB</a>(genIUType x);</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  GLM_FUNC_DECL vecType<int, P> <a class="code" href="a00149.html#ga014a72009e68233c34c06a6dc2251b8c">findLSB</a>(vecType<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genIUType></div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  GLM_FUNC_DECL <span class="keywordtype">int</span> <a class="code" href="a00149.html#ga433104d77ec2ba58888aaefb77e9183f">findMSB</a>(genIUType x);</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  GLM_FUNC_DECL vecType<int, P> <a class="code" href="a00149.html#ga433104d77ec2ba58888aaefb77e9183f">findMSB</a>(vecType<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> </div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> </div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="preprocessor">#include "func_integer.inl"</span></div>
+<div class="ttc" id="a00149_html_ga2fc1a46e7b7e9fbbd8fa444fbacaa2aa"><div class="ttname"><a href="a00149.html#ga2fc1a46e7b7e9fbbd8fa444fbacaa2aa">glm::uaddCarry</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< uint, P > uaddCarry(vecType< uint, P > const &x, vecType< uint, P > const &y, vecType< uint, P > &carry)</div><div class="ttdoc">Adds 32-bit unsigned integer x and y, returning the sum modulo pow(2, 32). </div></div>
+<div class="ttc" id="a00149_html_ga22a889bf08313b7e547e2cdb8bb15ee4"><div class="ttname"><a href="a00149.html#ga22a889bf08313b7e547e2cdb8bb15ee4">glm::usubBorrow</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< uint, P > usubBorrow(vecType< uint, P > const &x, vecType< uint, P > const &y, vecType< uint, P > &borrow)</div><div class="ttdoc">Subtracts the 32-bit unsigned integer y from x, returning the difference if non-negative, or pow(2, 32) plus the difference otherwise. </div></div>
+<div class="ttc" id="a00149_html_ga5681dfac9239beb1b8bd995e3c6496d7"><div class="ttname"><a href="a00149.html#ga5681dfac9239beb1b8bd995e3c6496d7">glm::bitfieldInsert</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > bitfieldInsert(vecType< T, P > const &Base, vecType< T, P > const &Insert, int Offset, int Bits)</div><div class="ttdoc">Returns the insertion the bits least-significant bits of insert into base. </div></div>
+<div class="ttc" id="a00149_html_ga456ff9dcec42f6769a9ae2a2af7f1ce1"><div class="ttname"><a href="a00149.html#ga456ff9dcec42f6769a9ae2a2af7f1ce1">glm::umulExtended</a></div><div class="ttdeci">GLM_FUNC_DECL void umulExtended(vecType< uint, P > const &x, vecType< uint, P > const &y, vecType< uint, P > &msb, vecType< uint, P > &lsb)</div><div class="ttdoc">Multiplies 32-bit integers x and y, producing a 64-bit result. </div></div>
+<div class="ttc" id="a00149_html_gab84b88f3a8e367774e5dd1c618c353cf"><div class="ttname"><a href="a00149.html#gab84b88f3a8e367774e5dd1c618c353cf">glm::bitfieldExtract</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > bitfieldExtract(vecType< T, P > const &Value, int Offset, int Bits)</div><div class="ttdoc">Extracts bits [offset, offset + bits - 1] from value, returning them in the least significant bits of...</div></div>
+<div class="ttc" id="a00149_html_ga014a72009e68233c34c06a6dc2251b8c"><div class="ttname"><a href="a00149.html#ga014a72009e68233c34c06a6dc2251b8c">glm::findLSB</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< int, P > findLSB(vecType< T, P > const &v)</div><div class="ttdoc">Returns the bit number of the least significant bit set to 1 in the binary representation of value...</div></div>
+<div class="ttc" id="a00149_html_ga153e7e8d0c035f83cce50fc3e580930f"><div class="ttname"><a href="a00149.html#ga153e7e8d0c035f83cce50fc3e580930f">glm::bitfieldReverse</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > bitfieldReverse(vecType< T, P > const &v)</div><div class="ttdoc">Returns the reversal of the bits of value. </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00029_html"><div class="ttname"><a href="a00029.html">func_common.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00149_html_ga1f29640969a3c54564da06ac67a5392e"><div class="ttname"><a href="a00149.html#ga1f29640969a3c54564da06ac67a5392e">glm::bitCount</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< int, P > bitCount(vecType< T, P > const &v)</div><div class="ttdoc">Returns the number of bits set to 1 in the binary representation of value. </div></div>
+<div class="ttc" id="a00098_html"><div class="ttname"><a href="a00098.html">setup.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00149_html_ga6e6e8b29ca40d8ca2df10b58ed17d426"><div class="ttname"><a href="a00149.html#ga6e6e8b29ca40d8ca2df10b58ed17d426">glm::imulExtended</a></div><div class="ttdeci">GLM_FUNC_DECL void imulExtended(vecType< int, P > const &x, vecType< int, P > const &y, vecType< int, P > &msb, vecType< int, P > &lsb)</div><div class="ttdoc">Multiplies 32-bit integers x and y, producing a 64-bit result. </div></div>
+<div class="ttc" id="a00149_html_ga433104d77ec2ba58888aaefb77e9183f"><div class="ttname"><a href="a00149.html#ga433104d77ec2ba58888aaefb77e9183f">glm::findMSB</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< int, P > findMSB(vecType< T, P > const &v)</div><div class="ttdoc">Returns the bit number of the most significant bit in the binary representation of value...</div></div>
+<div class="ttc" id="a00085_html"><div class="ttname"><a href="a00085.html">precision.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00036_html"><div class="ttname"><a href="a00036.html">func_vector_relational.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00033.html b/src/third_party/glm/doc/api/a00033.html
new file mode 100644
index 0000000..3fc46b0
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00033.html
@@ -0,0 +1,85 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: func_matrix.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">func_matrix.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00033_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga26ea77c574802bc6fc193c40478718d2"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class matType> </td></tr>
+<tr class="memitem:ga26ea77c574802bc6fc193c40478718d2"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00150.html#ga26ea77c574802bc6fc193c40478718d2">determinant</a> (matType< T, P > const &m)</td></tr>
+<tr class="separator:ga26ea77c574802bc6fc193c40478718d2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa7e1d5586cd499126cec76e0f11871e3"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class matType> </td></tr>
+<tr class="memitem:gaa7e1d5586cd499126cec76e0f11871e3"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL matType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00150.html#gaa7e1d5586cd499126cec76e0f11871e3">inverse</a> (matType< T, P > const &m)</td></tr>
+<tr class="separator:gaa7e1d5586cd499126cec76e0f11871e3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4a54992e4741188ee624b21e3ba91814"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class matType> </td></tr>
+<tr class="memitem:ga4a54992e4741188ee624b21e3ba91814"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL matType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00150.html#ga4a54992e4741188ee624b21e3ba91814">matrixCompMult</a> (matType< T, P > const &x, matType< T, P > const &y)</td></tr>
+<tr class="separator:ga4a54992e4741188ee624b21e3ba91814"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae9f513dc8e4f3ceb993669321b6d0f09"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecTypeA, template< typename, precision > class vecTypeB> </td></tr>
+<tr class="memitem:gae9f513dc8e4f3ceb993669321b6d0f09"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL detail::outerProduct_trait< T, P, vecTypeA, vecTypeB >::type </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00150.html#gae9f513dc8e4f3ceb993669321b6d0f09">outerProduct</a> (vecTypeA< T, P > const &c, vecTypeB< T, P > const &r)</td></tr>
+<tr class="separator:gae9f513dc8e4f3ceb993669321b6d0f09"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a> </dd></dl>
+
+<p>Definition in file <a class="el" href="a00033_source.html">func_matrix.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00033_source.html b/src/third_party/glm/doc/api/a00033_source.html
new file mode 100644
index 0000000..c3a03bc
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00033_source.html
@@ -0,0 +1,165 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: func_matrix.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">func_matrix.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00033.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">// Dependencies</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "../detail/precision.hpp"</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include "../detail/setup.hpp"</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "../detail/type_mat.hpp"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "../vec2.hpp"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "../vec3.hpp"</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "../vec4.hpp"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "../mat2x2.hpp"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "../mat2x3.hpp"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "../mat2x4.hpp"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "../mat3x2.hpp"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include "../mat3x3.hpp"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "../mat3x4.hpp"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "../mat4x2.hpp"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include "../mat4x3.hpp"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include "../mat4x4.hpp"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a>{</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keyword">namespace </span>detail</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> {</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keyword">struct </span>outerProduct_trait<T, P, tvec2, tvec2></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  {</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keyword">typedef</span> tmat2x2<T, P> type;</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  };</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keyword">struct </span>outerProduct_trait<T, P, tvec2, tvec3></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  {</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keyword">typedef</span> tmat3x2<T, P> type;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  };</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keyword">struct </span>outerProduct_trait<T, P, tvec2, tvec4></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  {</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keyword">typedef</span> tmat4x2<T, P> type;</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  };</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keyword">struct </span>outerProduct_trait<T, P, tvec3, tvec2></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  {</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keyword">typedef</span> tmat2x3<T, P> type;</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  };</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keyword">struct </span>outerProduct_trait<T, P, tvec3, tvec3></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  {</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keyword">typedef</span> tmat3x3<T, P> type;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  };</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keyword">struct </span>outerProduct_trait<T, P, tvec3, tvec4></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  {</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keyword">typedef</span> tmat4x3<T, P> type;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  };</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keyword">struct </span>outerProduct_trait<T, P, tvec4, tvec2></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  {</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keyword">typedef</span> tmat2x4<T, P> type;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  };</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keyword">struct </span>outerProduct_trait<T, P, tvec4, tvec3></div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  {</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keyword">typedef</span> tmat3x4<T, P> type;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  };</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="keyword">struct </span>outerProduct_trait<T, P, tvec4, tvec4></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  {</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keyword">typedef</span> tmat4x4<T, P> type;</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  };</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> }<span class="comment">//namespace detail</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>matType></div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  GLM_FUNC_DECL matType<T, P> <a class="code" href="a00150.html#ga4a54992e4741188ee624b21e3ba91814">matrixCompMult</a>(matType<T, P> <span class="keyword">const</span> & x, matType<T, P> <span class="keyword">const</span> & y);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecTypeA, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecTypeB></div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  GLM_FUNC_DECL <span class="keyword">typename</span> detail::outerProduct_trait<T, P, vecTypeA, vecTypeB>::type <a class="code" href="a00150.html#gae9f513dc8e4f3ceb993669321b6d0f09">outerProduct</a>(vecTypeA<T, P> <span class="keyword">const</span> & c, vecTypeB<T, P> <span class="keyword">const</span> & r);</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="preprocessor"># if((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2012))</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>matType></div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  GLM_FUNC_DECL <span class="keyword">typename</span> matType<T, P>::transpose_type transpose(matType<T, P> <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  </div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>matType></div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  GLM_FUNC_DECL T <a class="code" href="a00150.html#ga26ea77c574802bc6fc193c40478718d2">determinant</a>(matType<T, P> <span class="keyword">const</span> & m);</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>matType></div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  GLM_FUNC_DECL matType<T, P> <a class="code" href="a00150.html#gaa7e1d5586cd499126cec76e0f11871e3">inverse</a>(matType<T, P> <span class="keyword">const</span> & m);</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="preprocessor">#include "func_matrix.inl"</span></div>
+<div class="ttc" id="a00150_html_ga26ea77c574802bc6fc193c40478718d2"><div class="ttname"><a href="a00150.html#ga26ea77c574802bc6fc193c40478718d2">glm::determinant</a></div><div class="ttdeci">GLM_FUNC_DECL T determinant(matType< T, P > const &m)</div><div class="ttdoc">Returns the transposed matrix of x. </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00150_html_gaa7e1d5586cd499126cec76e0f11871e3"><div class="ttname"><a href="a00150.html#gaa7e1d5586cd499126cec76e0f11871e3">glm::inverse</a></div><div class="ttdeci">GLM_FUNC_DECL matType< T, P > inverse(matType< T, P > const &m)</div><div class="ttdoc">Return the inverse of a squared matrix. </div></div>
+<div class="ttc" id="a00150_html_gae9f513dc8e4f3ceb993669321b6d0f09"><div class="ttname"><a href="a00150.html#gae9f513dc8e4f3ceb993669321b6d0f09">glm::outerProduct</a></div><div class="ttdeci">GLM_FUNC_DECL detail::outerProduct_trait< T, P, vecTypeA, vecTypeB >::type outerProduct(vecTypeA< T, P > const &c, vecTypeB< T, P > const &r)</div><div class="ttdoc">Treats the first parameter c as a column vector and the second parameter r as a row vector and does a...</div></div>
+<div class="ttc" id="a00150_html_ga4a54992e4741188ee624b21e3ba91814"><div class="ttname"><a href="a00150.html#ga4a54992e4741188ee624b21e3ba91814">glm::matrixCompMult</a></div><div class="ttdeci">GLM_FUNC_DECL matType< T, P > matrixCompMult(matType< T, P > const &x, matType< T, P > const &y)</div><div class="ttdoc">Multiply matrix x by matrix y component-wise, i.e., result[i][j] is the scalar product of x[i][j] and...</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00034.html b/src/third_party/glm/doc/api/a00034.html
new file mode 100644
index 0000000..71f62da
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00034.html
@@ -0,0 +1,99 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: func_packing.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">func_packing.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00034_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gaa916ca426b2bb0343ba17e3753e245c2"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL double </td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html#gaa916ca426b2bb0343ba17e3753e245c2">packDouble2x32</a> (uvec2 const &v)</td></tr>
+<tr class="separator:gaa916ca426b2bb0343ba17e3753e245c2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga20f134b07db3a3d3a38efb2617388c92"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint </td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html#ga20f134b07db3a3d3a38efb2617388c92">packHalf2x16</a> (vec2 const &v)</td></tr>
+<tr class="separator:ga20f134b07db3a3d3a38efb2617388c92"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga977ab172da5494e5ac63e952afacfbe2"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint </td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html#ga977ab172da5494e5ac63e952afacfbe2">packSnorm2x16</a> (vec2 const &v)</td></tr>
+<tr class="separator:ga977ab172da5494e5ac63e952afacfbe2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga85e8f17627516445026ab7a9c2e3531a"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint </td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html#ga85e8f17627516445026ab7a9c2e3531a">packSnorm4x8</a> (vec4 const &v)</td></tr>
+<tr class="separator:ga85e8f17627516445026ab7a9c2e3531a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0e2d107039fe608a209497af867b85fb"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint </td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html#ga0e2d107039fe608a209497af867b85fb">packUnorm2x16</a> (vec2 const &v)</td></tr>
+<tr class="separator:ga0e2d107039fe608a209497af867b85fb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf7d2f7341a9eeb4a436929d6f9ad08f2"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint </td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html#gaf7d2f7341a9eeb4a436929d6f9ad08f2">packUnorm4x8</a> (vec4 const &v)</td></tr>
+<tr class="separator:gaf7d2f7341a9eeb4a436929d6f9ad08f2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5f4296dc5f12f0aa67ac05b8bb322483"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uvec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html#ga5f4296dc5f12f0aa67ac05b8bb322483">unpackDouble2x32</a> (double v)</td></tr>
+<tr class="separator:ga5f4296dc5f12f0aa67ac05b8bb322483"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf59b52e6b28da9335322c4ae19b5d745"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL vec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html#gaf59b52e6b28da9335322c4ae19b5d745">unpackHalf2x16</a> (uint v)</td></tr>
+<tr class="separator:gaf59b52e6b28da9335322c4ae19b5d745"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gacd8f8971a3fe28418be0d0fa1f786b38"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL vec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html#gacd8f8971a3fe28418be0d0fa1f786b38">unpackSnorm2x16</a> (uint p)</td></tr>
+<tr class="separator:gacd8f8971a3fe28418be0d0fa1f786b38"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2db488646d48b7c43d3218954523fe82"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL vec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html#ga2db488646d48b7c43d3218954523fe82">unpackSnorm4x8</a> (uint p)</td></tr>
+<tr class="separator:ga2db488646d48b7c43d3218954523fe82"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1f66188e5d65afeb9ffba1ad971e4007"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL vec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html#ga1f66188e5d65afeb9ffba1ad971e4007">unpackUnorm2x16</a> (uint p)</td></tr>
+<tr class="separator:ga1f66188e5d65afeb9ffba1ad971e4007"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7f903259150b67e9466f5f8edffcd197"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL vec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html#ga7f903259150b67e9466f5f8edffcd197">unpackUnorm4x8</a> (uint p)</td></tr>
+<tr class="separator:ga7f903259150b67e9466f5f8edffcd197"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd>
+<dd>
+<a class="el" href="a00171.html" title="This extension provides a set of function to convert vertors to packed formats. ">GLM_GTC_packing</a> </dd></dl>
+
+<p>Definition in file <a class="el" href="a00034_source.html">func_packing.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00034_source.html b/src/third_party/glm/doc/api/a00034_source.html
new file mode 100644
index 0000000..be75162
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00034_source.html
@@ -0,0 +1,115 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: func_packing.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">func_packing.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00034.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> </div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#include "<a class="code" href="a00129.html">type_vec2.hpp</a>"</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#include "<a class="code" href="a00131.html">type_vec4.hpp</a>"</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> {</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  GLM_FUNC_DECL <a class="code" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a> <a class="code" href="a00151.html#ga0e2d107039fe608a209497af867b85fb">packUnorm2x16</a>(<a class="code" href="a00157.html#ga09d0200e8ff86391d8804b4fefd5f1da">vec2</a> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  GLM_FUNC_DECL <a class="code" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a> <a class="code" href="a00151.html#ga977ab172da5494e5ac63e952afacfbe2">packSnorm2x16</a>(<a class="code" href="a00157.html#ga09d0200e8ff86391d8804b4fefd5f1da">vec2</a> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  GLM_FUNC_DECL <a class="code" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a> <a class="code" href="a00151.html#gaf7d2f7341a9eeb4a436929d6f9ad08f2">packUnorm4x8</a>(<a class="code" href="a00157.html#gafbab23070ca47932487d25332adc7d7c">vec4</a> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  GLM_FUNC_DECL <a class="code" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a> <a class="code" href="a00151.html#ga85e8f17627516445026ab7a9c2e3531a">packSnorm4x8</a>(<a class="code" href="a00157.html#gafbab23070ca47932487d25332adc7d7c">vec4</a> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  GLM_FUNC_DECL <a class="code" href="a00157.html#ga09d0200e8ff86391d8804b4fefd5f1da">vec2</a> <a class="code" href="a00151.html#ga1f66188e5d65afeb9ffba1ad971e4007">unpackUnorm2x16</a>(<a class="code" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a> p);</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  GLM_FUNC_DECL <a class="code" href="a00157.html#ga09d0200e8ff86391d8804b4fefd5f1da">vec2</a> <a class="code" href="a00151.html#gacd8f8971a3fe28418be0d0fa1f786b38">unpackSnorm2x16</a>(<a class="code" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a> p);</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  GLM_FUNC_DECL <a class="code" href="a00157.html#gafbab23070ca47932487d25332adc7d7c">vec4</a> <a class="code" href="a00151.html#ga7f903259150b67e9466f5f8edffcd197">unpackUnorm4x8</a>(<a class="code" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a> p);</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  GLM_FUNC_DECL <a class="code" href="a00157.html#gafbab23070ca47932487d25332adc7d7c">vec4</a> <a class="code" href="a00151.html#ga2db488646d48b7c43d3218954523fe82">unpackSnorm4x8</a>(<a class="code" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a> p);</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  GLM_FUNC_DECL <span class="keywordtype">double</span> <a class="code" href="a00151.html#gaa916ca426b2bb0343ba17e3753e245c2">packDouble2x32</a>(<a class="code" href="a00157.html#ga9bcffa2d49f28d16f680757b5c0e7c84">uvec2</a> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  GLM_FUNC_DECL <a class="code" href="a00157.html#ga9bcffa2d49f28d16f680757b5c0e7c84">uvec2</a> <a class="code" href="a00151.html#ga5f4296dc5f12f0aa67ac05b8bb322483">unpackDouble2x32</a>(<span class="keywordtype">double</span> v);</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  GLM_FUNC_DECL <a class="code" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a> <a class="code" href="a00151.html#ga20f134b07db3a3d3a38efb2617388c92">packHalf2x16</a>(<a class="code" href="a00157.html#ga09d0200e8ff86391d8804b4fefd5f1da">vec2</a> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  </div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  GLM_FUNC_DECL <a class="code" href="a00157.html#ga09d0200e8ff86391d8804b4fefd5f1da">vec2</a> <a class="code" href="a00151.html#gaf59b52e6b28da9335322c4ae19b5d745">unpackHalf2x16</a>(<a class="code" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a> v);</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  </div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> </div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="preprocessor">#include "func_packing.inl"</span></div>
+<div class="ttc" id="a00151_html_gaf7d2f7341a9eeb4a436929d6f9ad08f2"><div class="ttname"><a href="a00151.html#gaf7d2f7341a9eeb4a436929d6f9ad08f2">glm::packUnorm4x8</a></div><div class="ttdeci">GLM_FUNC_DECL uint packUnorm4x8(vec4 const &v)</div><div class="ttdoc">First, converts each component of the normalized floating-point value v into 8- or 16-bit integer val...</div></div>
+<div class="ttc" id="a00157_html_gafbab23070ca47932487d25332adc7d7c"><div class="ttname"><a href="a00157.html#gafbab23070ca47932487d25332adc7d7c">glm::vec4</a></div><div class="ttdeci">highp_vec4 vec4</div><div class="ttdoc">4 components vector of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00466">type_vec.hpp:466</a></div></div>
+<div class="ttc" id="a00151_html_gaa916ca426b2bb0343ba17e3753e245c2"><div class="ttname"><a href="a00151.html#gaa916ca426b2bb0343ba17e3753e245c2">glm::packDouble2x32</a></div><div class="ttdeci">GLM_FUNC_DECL double packDouble2x32(uvec2 const &v)</div><div class="ttdoc">Returns a double-precision value obtained by packing the components of v into a 64-bit value...</div></div>
+<div class="ttc" id="a00151_html_ga20f134b07db3a3d3a38efb2617388c92"><div class="ttname"><a href="a00151.html#ga20f134b07db3a3d3a38efb2617388c92">glm::packHalf2x16</a></div><div class="ttdeci">GLM_FUNC_DECL uint packHalf2x16(vec2 const &v)</div><div class="ttdoc">Returns an unsigned integer obtained by converting the components of a two-component floating-point v...</div></div>
+<div class="ttc" id="a00158_html_ga91ad9478d81a7aaf2593e8d9c3d06a14"><div class="ttname"><a href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">glm::uint</a></div><div class="ttdeci">unsigned int uint</div><div class="ttdoc">Unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00113_source.html#l00288">type_int.hpp:288</a></div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00151_html_ga2db488646d48b7c43d3218954523fe82"><div class="ttname"><a href="a00151.html#ga2db488646d48b7c43d3218954523fe82">glm::unpackSnorm4x8</a></div><div class="ttdeci">GLM_FUNC_DECL vec4 unpackSnorm4x8(uint p)</div><div class="ttdoc">First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. </div></div>
+<div class="ttc" id="a00129_html"><div class="ttname"><a href="a00129.html">type_vec2.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00151_html_gaf59b52e6b28da9335322c4ae19b5d745"><div class="ttname"><a href="a00151.html#gaf59b52e6b28da9335322c4ae19b5d745">glm::unpackHalf2x16</a></div><div class="ttdeci">GLM_FUNC_DECL vec2 unpackHalf2x16(uint v)</div><div class="ttdoc">Returns a two-component floating-point vector with components obtained by unpacking a 32-bit unsigned...</div></div>
+<div class="ttc" id="a00151_html_ga1f66188e5d65afeb9ffba1ad971e4007"><div class="ttname"><a href="a00151.html#ga1f66188e5d65afeb9ffba1ad971e4007">glm::unpackUnorm2x16</a></div><div class="ttdeci">GLM_FUNC_DECL vec2 unpackUnorm2x16(uint p)</div><div class="ttdoc">First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. </div></div>
+<div class="ttc" id="a00151_html_ga0e2d107039fe608a209497af867b85fb"><div class="ttname"><a href="a00151.html#ga0e2d107039fe608a209497af867b85fb">glm::packUnorm2x16</a></div><div class="ttdeci">GLM_FUNC_DECL uint packUnorm2x16(vec2 const &v)</div><div class="ttdoc">First, converts each component of the normalized floating-point value v into 8- or 16-bit integer val...</div></div>
+<div class="ttc" id="a00151_html_ga977ab172da5494e5ac63e952afacfbe2"><div class="ttname"><a href="a00151.html#ga977ab172da5494e5ac63e952afacfbe2">glm::packSnorm2x16</a></div><div class="ttdeci">GLM_FUNC_DECL uint packSnorm2x16(vec2 const &v)</div><div class="ttdoc">First, converts each component of the normalized floating-point value v into 8- or 16-bit integer val...</div></div>
+<div class="ttc" id="a00151_html_gacd8f8971a3fe28418be0d0fa1f786b38"><div class="ttname"><a href="a00151.html#gacd8f8971a3fe28418be0d0fa1f786b38">glm::unpackSnorm2x16</a></div><div class="ttdeci">GLM_FUNC_DECL vec2 unpackSnorm2x16(uint p)</div><div class="ttdoc">First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. </div></div>
+<div class="ttc" id="a00151_html_ga7f903259150b67e9466f5f8edffcd197"><div class="ttname"><a href="a00151.html#ga7f903259150b67e9466f5f8edffcd197">glm::unpackUnorm4x8</a></div><div class="ttdeci">GLM_FUNC_DECL vec4 unpackUnorm4x8(uint p)</div><div class="ttdoc">First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. </div></div>
+<div class="ttc" id="a00157_html_ga9bcffa2d49f28d16f680757b5c0e7c84"><div class="ttname"><a href="a00157.html#ga9bcffa2d49f28d16f680757b5c0e7c84">glm::uvec2</a></div><div class="ttdeci">highp_uvec2 uvec2</div><div class="ttdoc">2 components vector of unsigned integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00537">type_vec.hpp:537</a></div></div>
+<div class="ttc" id="a00131_html"><div class="ttname"><a href="a00131.html">type_vec4.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00151_html_ga5f4296dc5f12f0aa67ac05b8bb322483"><div class="ttname"><a href="a00151.html#ga5f4296dc5f12f0aa67ac05b8bb322483">glm::unpackDouble2x32</a></div><div class="ttdeci">GLM_FUNC_DECL uvec2 unpackDouble2x32(double v)</div><div class="ttdoc">Returns a two-component unsigned integer vector representation of v. </div></div>
+<div class="ttc" id="a00151_html_ga85e8f17627516445026ab7a9c2e3531a"><div class="ttname"><a href="a00151.html#ga85e8f17627516445026ab7a9c2e3531a">glm::packSnorm4x8</a></div><div class="ttdeci">GLM_FUNC_DECL uint packSnorm4x8(vec4 const &v)</div><div class="ttdoc">First, converts each component of the normalized floating-point value v into 8- or 16-bit integer val...</div></div>
+<div class="ttc" id="a00157_html_ga09d0200e8ff86391d8804b4fefd5f1da"><div class="ttname"><a href="a00157.html#ga09d0200e8ff86391d8804b4fefd5f1da">glm::vec2</a></div><div class="ttdeci">highp_vec2 vec2</div><div class="ttdoc">2 components vector of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00456">type_vec.hpp:456</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00035.html b/src/third_party/glm/doc/api/a00035.html
new file mode 100644
index 0000000..7c3313d
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00035.html
@@ -0,0 +1,118 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: func_trigonometric.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">func_trigonometric.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00035_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga58ad259b788528fe0a4bd2eeb5e381cc"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga58ad259b788528fe0a4bd2eeb5e381cc"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00152.html#ga58ad259b788528fe0a4bd2eeb5e381cc">acos</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:ga58ad259b788528fe0a4bd2eeb5e381cc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3f368ad3e1883b60748ca2634d816104"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga3f368ad3e1883b60748ca2634d816104"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00152.html#ga3f368ad3e1883b60748ca2634d816104">acosh</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:ga3f368ad3e1883b60748ca2634d816104"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga88e29b8289e882859d76a25798dd9490"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga88e29b8289e882859d76a25798dd9490"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00152.html#ga88e29b8289e882859d76a25798dd9490">asin</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:ga88e29b8289e882859d76a25798dd9490"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga72bf44c1984e1afb63acf821ba33cac7"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga72bf44c1984e1afb63acf821ba33cac7"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00152.html#ga72bf44c1984e1afb63acf821ba33cac7">asinh</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:ga72bf44c1984e1afb63acf821ba33cac7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga461e769acb8b8cb695a5a89334546611"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga461e769acb8b8cb695a5a89334546611"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00152.html#ga461e769acb8b8cb695a5a89334546611">atan</a> (vecType< T, P > const &y, vecType< T, P > const &x)</td></tr>
+<tr class="separator:ga461e769acb8b8cb695a5a89334546611"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae8f22458bba8f2321ceb1bfc4a543216"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gae8f22458bba8f2321ceb1bfc4a543216"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00152.html#gae8f22458bba8f2321ceb1bfc4a543216">atan</a> (vecType< T, P > const &y_over_x)</td></tr>
+<tr class="separator:gae8f22458bba8f2321ceb1bfc4a543216"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaffa8decdd8620759f4e6fe4834768b87"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gaffa8decdd8620759f4e6fe4834768b87"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00152.html#gaffa8decdd8620759f4e6fe4834768b87">atanh</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:gaffa8decdd8620759f4e6fe4834768b87"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga728fd86f14609e37d83f82429995b7b3"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga728fd86f14609e37d83f82429995b7b3"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00152.html#ga728fd86f14609e37d83f82429995b7b3">cos</a> (vecType< T, P > const &angle)</td></tr>
+<tr class="separator:ga728fd86f14609e37d83f82429995b7b3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga660582a4e5e843b6c1cd535777e8c295"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga660582a4e5e843b6c1cd535777e8c295"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00152.html#ga660582a4e5e843b6c1cd535777e8c295">cosh</a> (vecType< T, P > const &angle)</td></tr>
+<tr class="separator:ga660582a4e5e843b6c1cd535777e8c295"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gabccdcc282134fd62af0ff3d6e4bb21f1"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gabccdcc282134fd62af0ff3d6e4bb21f1"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00152.html#gabccdcc282134fd62af0ff3d6e4bb21f1">degrees</a> (vecType< T, P > const &radians)</td></tr>
+<tr class="separator:gabccdcc282134fd62af0ff3d6e4bb21f1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafffb5e533f75318bdf4e0967d8a6c05c"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gafffb5e533f75318bdf4e0967d8a6c05c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00152.html#gafffb5e533f75318bdf4e0967d8a6c05c">radians</a> (vecType< T, P > const &degrees)</td></tr>
+<tr class="separator:gafffb5e533f75318bdf4e0967d8a6c05c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4a0ddceb6b1e64ce0e4da209dcb021d5"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga4a0ddceb6b1e64ce0e4da209dcb021d5"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00152.html#ga4a0ddceb6b1e64ce0e4da209dcb021d5">sin</a> (vecType< T, P > const &angle)</td></tr>
+<tr class="separator:ga4a0ddceb6b1e64ce0e4da209dcb021d5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad8f89c12efe6f8d3ae8046625b266254"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gad8f89c12efe6f8d3ae8046625b266254"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00152.html#gad8f89c12efe6f8d3ae8046625b266254">sinh</a> (vecType< T, P > const &angle)</td></tr>
+<tr class="separator:gad8f89c12efe6f8d3ae8046625b266254"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab3ae890c38b7d3aa4d5e00998fd296b2"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gab3ae890c38b7d3aa4d5e00998fd296b2"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00152.html#gab3ae890c38b7d3aa4d5e00998fd296b2">tan</a> (vecType< T, P > const &angle)</td></tr>
+<tr class="separator:gab3ae890c38b7d3aa4d5e00998fd296b2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga234e904a0075f88654a594b5f837711f"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga234e904a0075f88654a594b5f837711f"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00152.html#ga234e904a0075f88654a594b5f837711f">tanh</a> (vecType< T, P > const &angle)</td></tr>
+<tr class="separator:ga234e904a0075f88654a594b5f837711f"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> </dd></dl>
+
+<p>Definition in file <a class="el" href="a00035_source.html">func_trigonometric.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00035_source.html b/src/third_party/glm/doc/api/a00035_source.html
new file mode 100644
index 0000000..0beb9f9
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00035_source.html
@@ -0,0 +1,135 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: func_trigonometric.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">func_trigonometric.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00035.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "<a class="code" href="a00098.html">setup.hpp</a>"</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "<a class="code" href="a00085.html">precision.hpp</a>"</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> {</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  GLM_FUNC_DECL GLM_CONSTEXPR vecType<T, P> <a class="code" href="a00152.html#gafffb5e533f75318bdf4e0967d8a6c05c">radians</a>(vecType<T, P> <span class="keyword">const</span> & <a class="code" href="a00152.html#gabccdcc282134fd62af0ff3d6e4bb21f1">degrees</a>);</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  GLM_FUNC_DECL GLM_CONSTEXPR vecType<T, P> <a class="code" href="a00152.html#gabccdcc282134fd62af0ff3d6e4bb21f1">degrees</a>(vecType<T, P> <span class="keyword">const</span> & <a class="code" href="a00152.html#gafffb5e533f75318bdf4e0967d8a6c05c">radians</a>);</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00152.html#ga4a0ddceb6b1e64ce0e4da209dcb021d5">sin</a>(vecType<T, P> <span class="keyword">const</span> & <a class="code" href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">angle</a>);</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00152.html#ga728fd86f14609e37d83f82429995b7b3">cos</a>(vecType<T, P> <span class="keyword">const</span> & <a class="code" href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">angle</a>);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00152.html#gab3ae890c38b7d3aa4d5e00998fd296b2">tan</a>(vecType<T, P> <span class="keyword">const</span> & <a class="code" href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">angle</a>); </div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00152.html#ga88e29b8289e882859d76a25798dd9490">asin</a>(vecType<T, P> <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00152.html#ga58ad259b788528fe0a4bd2eeb5e381cc">acos</a>(vecType<T, P> <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00152.html#gae8f22458bba8f2321ceb1bfc4a543216">atan</a>(vecType<T, P> <span class="keyword">const</span> & y, vecType<T, P> <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00152.html#gae8f22458bba8f2321ceb1bfc4a543216">atan</a>(vecType<T, P> <span class="keyword">const</span> & y_over_x);</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00152.html#gad8f89c12efe6f8d3ae8046625b266254">sinh</a>(vecType<T, P> <span class="keyword">const</span> & <a class="code" href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">angle</a>);</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00152.html#ga660582a4e5e843b6c1cd535777e8c295">cosh</a>(vecType<T, P> <span class="keyword">const</span> & <a class="code" href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">angle</a>);</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00152.html#ga234e904a0075f88654a594b5f837711f">tanh</a>(vecType<T, P> <span class="keyword">const</span> & <a class="code" href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">angle</a>);</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00152.html#ga72bf44c1984e1afb63acf821ba33cac7">asinh</a>(vecType<T, P> <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  </div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00152.html#ga3f368ad3e1883b60748ca2634d816104">acosh</a>(vecType<T, P> <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00152.html#gaffa8decdd8620759f4e6fe4834768b87">atanh</a>(vecType<T, P> <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="preprocessor">#include "func_trigonometric.inl"</span></div>
+<div class="ttc" id="a00152_html_gab3ae890c38b7d3aa4d5e00998fd296b2"><div class="ttname"><a href="a00152.html#gab3ae890c38b7d3aa4d5e00998fd296b2">glm::tan</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > tan(vecType< T, P > const &angle)</div><div class="ttdoc">The standard trigonometric tangent function. </div></div>
+<div class="ttc" id="a00152_html_ga4a0ddceb6b1e64ce0e4da209dcb021d5"><div class="ttname"><a href="a00152.html#ga4a0ddceb6b1e64ce0e4da209dcb021d5">glm::sin</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > sin(vecType< T, P > const &angle)</div><div class="ttdoc">The standard trigonometric sine function. </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00152_html_gae8f22458bba8f2321ceb1bfc4a543216"><div class="ttname"><a href="a00152.html#gae8f22458bba8f2321ceb1bfc4a543216">glm::atan</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > atan(vecType< T, P > const &y_over_x)</div><div class="ttdoc">Arc tangent. </div></div>
+<div class="ttc" id="a00152_html_gaffa8decdd8620759f4e6fe4834768b87"><div class="ttname"><a href="a00152.html#gaffa8decdd8620759f4e6fe4834768b87">glm::atanh</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > atanh(vecType< T, P > const &x)</div><div class="ttdoc">Arc hyperbolic tangent; returns the inverse of tanh. </div></div>
+<div class="ttc" id="a00152_html_ga660582a4e5e843b6c1cd535777e8c295"><div class="ttname"><a href="a00152.html#ga660582a4e5e843b6c1cd535777e8c295">glm::cosh</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > cosh(vecType< T, P > const &angle)</div><div class="ttdoc">Returns the hyperbolic cosine function, (exp(x) + exp(-x)) / 2. </div></div>
+<div class="ttc" id="a00152_html_gad8f89c12efe6f8d3ae8046625b266254"><div class="ttname"><a href="a00152.html#gad8f89c12efe6f8d3ae8046625b266254">glm::sinh</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > sinh(vecType< T, P > const &angle)</div><div class="ttdoc">Returns the hyperbolic sine function, (exp(x) - exp(-x)) / 2. </div></div>
+<div class="ttc" id="a00152_html_ga58ad259b788528fe0a4bd2eeb5e381cc"><div class="ttname"><a href="a00152.html#ga58ad259b788528fe0a4bd2eeb5e381cc">glm::acos</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > acos(vecType< T, P > const &x)</div><div class="ttdoc">Arc cosine. </div></div>
+<div class="ttc" id="a00152_html_ga72bf44c1984e1afb63acf821ba33cac7"><div class="ttname"><a href="a00152.html#ga72bf44c1984e1afb63acf821ba33cac7">glm::asinh</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > asinh(vecType< T, P > const &x)</div><div class="ttdoc">Arc hyperbolic sine; returns the inverse of sinh. </div></div>
+<div class="ttc" id="a00098_html"><div class="ttname"><a href="a00098.html">setup.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00152_html_gabccdcc282134fd62af0ff3d6e4bb21f1"><div class="ttname"><a href="a00152.html#gabccdcc282134fd62af0ff3d6e4bb21f1">glm::degrees</a></div><div class="ttdeci">GLM_FUNC_DECL GLM_CONSTEXPR vecType< T, P > degrees(vecType< T, P > const &radians)</div><div class="ttdoc">Converts radians to degrees and returns the result. </div></div>
+<div class="ttc" id="a00172_html_gad4a4448baedb198b2b1e7880d2544dc9"><div class="ttname"><a href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">glm::angle</a></div><div class="ttdeci">GLM_FUNC_DECL T angle(tquat< T, P > const &x)</div><div class="ttdoc">Returns the quaternion rotation angle. </div></div>
+<div class="ttc" id="a00152_html_ga88e29b8289e882859d76a25798dd9490"><div class="ttname"><a href="a00152.html#ga88e29b8289e882859d76a25798dd9490">glm::asin</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > asin(vecType< T, P > const &x)</div><div class="ttdoc">Arc sine. </div></div>
+<div class="ttc" id="a00152_html_ga234e904a0075f88654a594b5f837711f"><div class="ttname"><a href="a00152.html#ga234e904a0075f88654a594b5f837711f">glm::tanh</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > tanh(vecType< T, P > const &angle)</div><div class="ttdoc">Returns the hyperbolic tangent function, sinh(angle) / cosh(angle) </div></div>
+<div class="ttc" id="a00152_html_ga3f368ad3e1883b60748ca2634d816104"><div class="ttname"><a href="a00152.html#ga3f368ad3e1883b60748ca2634d816104">glm::acosh</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > acosh(vecType< T, P > const &x)</div><div class="ttdoc">Arc hyperbolic cosine; returns the non-negative inverse of cosh. </div></div>
+<div class="ttc" id="a00152_html_ga728fd86f14609e37d83f82429995b7b3"><div class="ttname"><a href="a00152.html#ga728fd86f14609e37d83f82429995b7b3">glm::cos</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > cos(vecType< T, P > const &angle)</div><div class="ttdoc">The standard trigonometric cosine function. </div></div>
+<div class="ttc" id="a00085_html"><div class="ttname"><a href="a00085.html">precision.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00152_html_gafffb5e533f75318bdf4e0967d8a6c05c"><div class="ttname"><a href="a00152.html#gafffb5e533f75318bdf4e0967d8a6c05c">glm::radians</a></div><div class="ttdeci">GLM_FUNC_DECL GLM_CONSTEXPR vecType< T, P > radians(vecType< T, P > const &degrees)</div><div class="ttdoc">Converts degrees to radians and returns the result. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00036.html b/src/third_party/glm/doc/api/a00036.html
new file mode 100644
index 0000000..d05b9de
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00036.html
@@ -0,0 +1,100 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: func_vector_relational.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">func_vector_relational.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00036_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga14bbc94f2ae2774a1d64d91f8767773e"><td class="memTemplParams" colspan="2">template<precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga14bbc94f2ae2774a1d64d91f8767773e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00153.html#ga14bbc94f2ae2774a1d64d91f8767773e">all</a> (vecType< bool, P > const &v)</td></tr>
+<tr class="separator:ga14bbc94f2ae2774a1d64d91f8767773e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga632a2644532d9332011c8860400d30b2"><td class="memTemplParams" colspan="2">template<precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga632a2644532d9332011c8860400d30b2"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00153.html#ga632a2644532d9332011c8860400d30b2">any</a> (vecType< bool, P > const &v)</td></tr>
+<tr class="separator:ga632a2644532d9332011c8860400d30b2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga39c80d8baf49b0ce69f2bb22d45b3801"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga39c80d8baf49b0ce69f2bb22d45b3801"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00153.html#ga39c80d8baf49b0ce69f2bb22d45b3801">equal</a> (vecType< T, P > const &x, vecType< T, P > const &y)</td></tr>
+<tr class="separator:ga39c80d8baf49b0ce69f2bb22d45b3801"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gadd80263161a308462d3e3e287e79cccd"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gadd80263161a308462d3e3e287e79cccd"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00153.html#gadd80263161a308462d3e3e287e79cccd">greaterThan</a> (vecType< T, P > const &x, vecType< T, P > const &y)</td></tr>
+<tr class="separator:gadd80263161a308462d3e3e287e79cccd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaee7e101f8cc4ea43924f14dcdeb2ef26"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gaee7e101f8cc4ea43924f14dcdeb2ef26"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00153.html#gaee7e101f8cc4ea43924f14dcdeb2ef26">greaterThanEqual</a> (vecType< T, P > const &x, vecType< T, P > const &y)</td></tr>
+<tr class="separator:gaee7e101f8cc4ea43924f14dcdeb2ef26"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6261970937a70b0b747ae0d3ade1c188"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga6261970937a70b0b747ae0d3ade1c188"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00153.html#ga6261970937a70b0b747ae0d3ade1c188">lessThan</a> (vecType< T, P > const &x, vecType< T, P > const &y)</td></tr>
+<tr class="separator:ga6261970937a70b0b747ae0d3ade1c188"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaaf1d88119f11200c32011de7c5ec0102"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gaaf1d88119f11200c32011de7c5ec0102"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00153.html#gaaf1d88119f11200c32011de7c5ec0102">lessThanEqual</a> (vecType< T, P > const &x, vecType< T, P > const &y)</td></tr>
+<tr class="separator:gaaf1d88119f11200c32011de7c5ec0102"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4329ecbc2ef012c9ec704bd09da1f177"><td class="memTemplParams" colspan="2">template<precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga4329ecbc2ef012c9ec704bd09da1f177"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00153.html#ga4329ecbc2ef012c9ec704bd09da1f177">not_</a> (vecType< bool, P > const &v)</td></tr>
+<tr class="separator:ga4329ecbc2ef012c9ec704bd09da1f177"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5aca2b745e5eb0096716bbc394846309"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga5aca2b745e5eb0096716bbc394846309"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00153.html#ga5aca2b745e5eb0096716bbc394846309">notEqual</a> (vecType< T, P > const &x, vecType< T, P > const &y)</td></tr>
+<tr class="separator:ga5aca2b745e5eb0096716bbc394846309"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a> </dd></dl>
+
+<p>Definition in file <a class="el" href="a00036_source.html">func_vector_relational.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00036_source.html b/src/third_party/glm/doc/api/a00036_source.html
new file mode 100644
index 0000000..6ee0fa2
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00036_source.html
@@ -0,0 +1,111 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: func_vector_relational.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">func_vector_relational.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00036.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "<a class="code" href="a00085.html">precision.hpp</a>"</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include "<a class="code" href="a00098.html">setup.hpp</a>"</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> {</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  GLM_FUNC_DECL vecType<bool, P> <a class="code" href="a00153.html#ga6261970937a70b0b747ae0d3ade1c188">lessThan</a>(vecType<T, P> <span class="keyword">const</span> & x, vecType<T, P> <span class="keyword">const</span> & y);</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  GLM_FUNC_DECL vecType<bool, P> <a class="code" href="a00153.html#gaaf1d88119f11200c32011de7c5ec0102">lessThanEqual</a>(vecType<T, P> <span class="keyword">const</span> & x, vecType<T, P> <span class="keyword">const</span> & y);</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  GLM_FUNC_DECL vecType<bool, P> <a class="code" href="a00153.html#gadd80263161a308462d3e3e287e79cccd">greaterThan</a>(vecType<T, P> <span class="keyword">const</span> & x, vecType<T, P> <span class="keyword">const</span> & y);</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  GLM_FUNC_DECL vecType<bool, P> <a class="code" href="a00153.html#gaee7e101f8cc4ea43924f14dcdeb2ef26">greaterThanEqual</a>(vecType<T, P> <span class="keyword">const</span> & x, vecType<T, P> <span class="keyword">const</span> & y);</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  GLM_FUNC_DECL vecType<bool, P> <a class="code" href="a00153.html#ga39c80d8baf49b0ce69f2bb22d45b3801">equal</a>(vecType<T, P> <span class="keyword">const</span> & x, vecType<T, P> <span class="keyword">const</span> & y);</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  GLM_FUNC_DECL vecType<bool, P> <a class="code" href="a00153.html#ga5aca2b745e5eb0096716bbc394846309">notEqual</a>(vecType<T, P> <span class="keyword">const</span> & x, vecType<T, P> <span class="keyword">const</span> & y);</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="keyword">template</span> <precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> <a class="code" href="a00153.html#ga632a2644532d9332011c8860400d30b2">any</a>(vecType<bool, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="keyword">template</span> <precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> <a class="code" href="a00153.html#ga14bbc94f2ae2774a1d64d91f8767773e">all</a>(vecType<bool, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="keyword">template</span> <precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  GLM_FUNC_DECL vecType<bool, P> <a class="code" href="a00153.html#ga4329ecbc2ef012c9ec704bd09da1f177">not_</a>(vecType<bool, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="preprocessor">#include "func_vector_relational.inl"</span></div>
+<div class="ttc" id="a00153_html_ga5aca2b745e5eb0096716bbc394846309"><div class="ttname"><a href="a00153.html#ga5aca2b745e5eb0096716bbc394846309">glm::notEqual</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< bool, P > notEqual(vecType< T, P > const &x, vecType< T, P > const &y)</div><div class="ttdoc">Returns the component-wise comparison of result x != y. </div></div>
+<div class="ttc" id="a00153_html_gadd80263161a308462d3e3e287e79cccd"><div class="ttname"><a href="a00153.html#gadd80263161a308462d3e3e287e79cccd">glm::greaterThan</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< bool, P > greaterThan(vecType< T, P > const &x, vecType< T, P > const &y)</div><div class="ttdoc">Returns the component-wise comparison of result x > y. </div></div>
+<div class="ttc" id="a00153_html_ga39c80d8baf49b0ce69f2bb22d45b3801"><div class="ttname"><a href="a00153.html#ga39c80d8baf49b0ce69f2bb22d45b3801">glm::equal</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< bool, P > equal(vecType< T, P > const &x, vecType< T, P > const &y)</div><div class="ttdoc">Returns the component-wise comparison of result x == y. </div></div>
+<div class="ttc" id="a00153_html_ga6261970937a70b0b747ae0d3ade1c188"><div class="ttname"><a href="a00153.html#ga6261970937a70b0b747ae0d3ade1c188">glm::lessThan</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< bool, P > lessThan(vecType< T, P > const &x, vecType< T, P > const &y)</div><div class="ttdoc">Returns the component-wise comparison result of x < y. </div></div>
+<div class="ttc" id="a00153_html_ga632a2644532d9332011c8860400d30b2"><div class="ttname"><a href="a00153.html#ga632a2644532d9332011c8860400d30b2">glm::any</a></div><div class="ttdeci">GLM_FUNC_DECL bool any(vecType< bool, P > const &v)</div><div class="ttdoc">Returns true if any component of x is true. </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00153_html_gaee7e101f8cc4ea43924f14dcdeb2ef26"><div class="ttname"><a href="a00153.html#gaee7e101f8cc4ea43924f14dcdeb2ef26">glm::greaterThanEqual</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< bool, P > greaterThanEqual(vecType< T, P > const &x, vecType< T, P > const &y)</div><div class="ttdoc">Returns the component-wise comparison of result x >= y. </div></div>
+<div class="ttc" id="a00098_html"><div class="ttname"><a href="a00098.html">setup.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00153_html_ga14bbc94f2ae2774a1d64d91f8767773e"><div class="ttname"><a href="a00153.html#ga14bbc94f2ae2774a1d64d91f8767773e">glm::all</a></div><div class="ttdeci">GLM_FUNC_DECL bool all(vecType< bool, P > const &v)</div><div class="ttdoc">Returns true if all components of x are true. </div></div>
+<div class="ttc" id="a00153_html_gaaf1d88119f11200c32011de7c5ec0102"><div class="ttname"><a href="a00153.html#gaaf1d88119f11200c32011de7c5ec0102">glm::lessThanEqual</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< bool, P > lessThanEqual(vecType< T, P > const &x, vecType< T, P > const &y)</div><div class="ttdoc">Returns the component-wise comparison of result x <= y. </div></div>
+<div class="ttc" id="a00085_html"><div class="ttname"><a href="a00085.html">precision.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00153_html_ga4329ecbc2ef012c9ec704bd09da1f177"><div class="ttname"><a href="a00153.html#ga4329ecbc2ef012c9ec704bd09da1f177">glm::not_</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< bool, P > not_(vecType< bool, P > const &v)</div><div class="ttdoc">Returns the component-wise logical complement of x. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00037.html b/src/third_party/glm/doc/api/a00037.html
new file mode 100644
index 0000000..61979e1
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00037.html
@@ -0,0 +1,83 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: functions.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_9440d7c11b99dcd7e5d369c7cf9802fe.html">gtc</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">functions.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00037_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga0b50b197ff74261a0fad90f4b8d24702"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga0b50b197ff74261a0fad90f4b8d24702"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00164.html#ga0b50b197ff74261a0fad90f4b8d24702">gauss</a> (T x, T ExpectedValue, T StandardDeviation)</td></tr>
+<tr class="separator:ga0b50b197ff74261a0fad90f4b8d24702"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7448f9eb74bb5924f6330ab532f2899c"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga7448f9eb74bb5924f6330ab532f2899c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00164.html#ga7448f9eb74bb5924f6330ab532f2899c">gauss</a> (tvec2< T, P > const &Coord, tvec2< T, P > const &ExpectedValue, tvec2< T, P > const &StandardDeviation)</td></tr>
+<tr class="separator:ga7448f9eb74bb5924f6330ab532f2899c"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00164.html">GLM_GTC_functions</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd>
+<dd>
+gtc_half_float (dependence) </dd>
+<dd>
+<a class="el" href="a00172.html" title="Defines a templated quaternion type and several quaternion operations. ">GLM_GTC_quaternion</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00037_source.html">functions.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00037_source.html b/src/third_party/glm/doc/api/a00037_source.html
new file mode 100644
index 0000000..ea52ded
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00037_source.html
@@ -0,0 +1,93 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: functions.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_9440d7c11b99dcd7e5d369c7cf9802fe.html">gtc</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">functions.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00037.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">// Dependencies</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "../detail/setup.hpp"</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include "../detail/precision.hpp"</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "../detail/type_vec2.hpp"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor"># pragma message("GLM: GLM_GTC_functions extension included")</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> {</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  GLM_FUNC_DECL T <a class="code" href="a00164.html#ga7448f9eb74bb5924f6330ab532f2899c">gauss</a>(</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  T x,</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  T ExpectedValue,</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  T StandardDeviation);</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  GLM_FUNC_DECL T <a class="code" href="a00164.html#ga7448f9eb74bb5924f6330ab532f2899c">gauss</a>(</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  tvec2<T, P> <span class="keyword">const</span>& Coord,</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  tvec2<T, P> <span class="keyword">const</span>& ExpectedValue,</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  tvec2<T, P> <span class="keyword">const</span>& StandardDeviation);</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="preprocessor">#include "functions.inl"</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00164_html_ga7448f9eb74bb5924f6330ab532f2899c"><div class="ttname"><a href="a00164.html#ga7448f9eb74bb5924f6330ab532f2899c">glm::gauss</a></div><div class="ttdeci">GLM_FUNC_DECL T gauss(tvec2< T, P > const &Coord, tvec2< T, P > const &ExpectedValue, tvec2< T, P > const &StandardDeviation)</div><div class="ttdoc">2D gauss function </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00038.html b/src/third_party/glm/doc/api/a00038.html
new file mode 100644
index 0000000..9573eab
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00038.html
@@ -0,0 +1,979 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: fwd.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#typedef-members">Typedefs</a> </div>
+ <div class="headertitle">
+<div class="title">fwd.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00038_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:af62ed3862b7f5db4da71756a7b1367be"><td class="memItemLeft" align="right" valign="top">typedef highp_dquat </td><td class="memItemRight" valign="bottom"><b>dquat</b></td></tr>
+<tr class="separator:af62ed3862b7f5db4da71756a7b1367be"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gabe6a542dd6c1d5ffd847f1b9b4c9c9b7"><td class="memItemLeft" align="right" valign="top">typedef highp_float32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gabe6a542dd6c1d5ffd847f1b9b4c9c9b7">f32</a></td></tr>
+<tr class="separator:gabe6a542dd6c1d5ffd847f1b9b4c9c9b7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1fedd5d29746afdaf2d3303a4442704e"><td class="memItemLeft" align="right" valign="top">typedef f32mat2x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga1fedd5d29746afdaf2d3303a4442704e">f32mat2</a></td></tr>
+<tr class="separator:ga1fedd5d29746afdaf2d3303a4442704e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf3a5016bf360977ce114deb2e01ae10a"><td class="memItemLeft" align="right" valign="top">typedef highp_f32mat2x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaf3a5016bf360977ce114deb2e01ae10a">f32mat2x2</a></td></tr>
+<tr class="separator:gaf3a5016bf360977ce114deb2e01ae10a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad5f1043adbe803928fe7bf1a90a1f767"><td class="memItemLeft" align="right" valign="top">typedef highp_f32mat2x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gad5f1043adbe803928fe7bf1a90a1f767">f32mat2x3</a></td></tr>
+<tr class="separator:gad5f1043adbe803928fe7bf1a90a1f767"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5ed667d0247cce477f013ea31982843d"><td class="memItemLeft" align="right" valign="top">typedef highp_f32mat2x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga5ed667d0247cce477f013ea31982843d">f32mat2x4</a></td></tr>
+<tr class="separator:ga5ed667d0247cce477f013ea31982843d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf4377997b299a287f7ab3358c9bd3e4c"><td class="memItemLeft" align="right" valign="top">typedef f32mat3x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaf4377997b299a287f7ab3358c9bd3e4c">f32mat3</a></td></tr>
+<tr class="separator:gaf4377997b299a287f7ab3358c9bd3e4c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8709a1ea268fa69bdf1e11616d7fbaf1"><td class="memItemLeft" align="right" valign="top">typedef highp_f32mat3x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga8709a1ea268fa69bdf1e11616d7fbaf1">f32mat3x2</a></td></tr>
+<tr class="separator:ga8709a1ea268fa69bdf1e11616d7fbaf1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1e4c52bb824ca16c6e2e5b03635669d0"><td class="memItemLeft" align="right" valign="top">typedef highp_f32mat3x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga1e4c52bb824ca16c6e2e5b03635669d0">f32mat3x3</a></td></tr>
+<tr class="separator:ga1e4c52bb824ca16c6e2e5b03635669d0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0100666c90176eaba80e49357d123c7f"><td class="memItemLeft" align="right" valign="top">typedef highp_f32mat3x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga0100666c90176eaba80e49357d123c7f">f32mat3x4</a></td></tr>
+<tr class="separator:ga0100666c90176eaba80e49357d123c7f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga797fa3ab16e04456174c36238e091341"><td class="memItemLeft" align="right" valign="top">typedef f32mat4x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga797fa3ab16e04456174c36238e091341">f32mat4</a></td></tr>
+<tr class="separator:ga797fa3ab16e04456174c36238e091341"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga27f897bdfe4bbded9481b8947553d1ff"><td class="memItemLeft" align="right" valign="top">typedef highp_f32mat4x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga27f897bdfe4bbded9481b8947553d1ff">f32mat4x2</a></td></tr>
+<tr class="separator:ga27f897bdfe4bbded9481b8947553d1ff"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa69e73ffb01a52499071391d395908fb"><td class="memItemLeft" align="right" valign="top">typedef highp_f32mat4x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaa69e73ffb01a52499071391d395908fb">f32mat4x3</a></td></tr>
+<tr class="separator:gaa69e73ffb01a52499071391d395908fb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafe2e08549805a7ded26da2a868bedbf5"><td class="memItemLeft" align="right" valign="top">typedef highp_f32mat4x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gafe2e08549805a7ded26da2a868bedbf5">f32mat4x4</a></td></tr>
+<tr class="separator:gafe2e08549805a7ded26da2a868bedbf5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6966c0cb4673928c9c9da2e91006d2c0"><td class="memItemLeft" align="right" valign="top">typedef highp_f32quat </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga6966c0cb4673928c9c9da2e91006d2c0">f32quat</a></td></tr>
+<tr class="separator:ga6966c0cb4673928c9c9da2e91006d2c0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3174a49dc84a977cad7012a62f4af02f"><td class="memItemLeft" align="right" valign="top">typedef highp_f32vec1 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga3174a49dc84a977cad7012a62f4af02f">f32vec1</a></td></tr>
+<tr class="separator:ga3174a49dc84a977cad7012a62f4af02f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae0cb53ea6fe3d977fe588ce423d57cc3"><td class="memItemLeft" align="right" valign="top">typedef highp_f32vec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gae0cb53ea6fe3d977fe588ce423d57cc3">f32vec2</a></td></tr>
+<tr class="separator:gae0cb53ea6fe3d977fe588ce423d57cc3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga19d5e0d4d3d6d226c9c6c0f39756f9ad"><td class="memItemLeft" align="right" valign="top">typedef highp_f32vec3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga19d5e0d4d3d6d226c9c6c0f39756f9ad">f32vec3</a></td></tr>
+<tr class="separator:ga19d5e0d4d3d6d226c9c6c0f39756f9ad"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaeb25dbb0261f82cb08da23e26d343704"><td class="memItemLeft" align="right" valign="top">typedef highp_f32vec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaeb25dbb0261f82cb08da23e26d343704">f32vec4</a></td></tr>
+<tr class="separator:gaeb25dbb0261f82cb08da23e26d343704"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1d794d240091678f602e8de225b8d8c9"><td class="memItemLeft" align="right" valign="top">typedef highp_float64_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga1d794d240091678f602e8de225b8d8c9">f64</a></td></tr>
+<tr class="separator:ga1d794d240091678f602e8de225b8d8c9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga74b9918c90ea60ce58b3979cde963a38"><td class="memItemLeft" align="right" valign="top">typedef f64mat2x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga74b9918c90ea60ce58b3979cde963a38">f64mat2</a></td></tr>
+<tr class="separator:ga74b9918c90ea60ce58b3979cde963a38"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaeb817419c76a0766c88713d2754e6cb3"><td class="memItemLeft" align="right" valign="top">typedef highp_f64mat2x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaeb817419c76a0766c88713d2754e6cb3">f64mat2x2</a></td></tr>
+<tr class="separator:gaeb817419c76a0766c88713d2754e6cb3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga87d256f4719417e311cd0ea14264678d"><td class="memItemLeft" align="right" valign="top">typedef highp_f64mat2x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga87d256f4719417e311cd0ea14264678d">f64mat2x3</a></td></tr>
+<tr class="separator:ga87d256f4719417e311cd0ea14264678d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafb18822e2eac88fa861a76cefd25d550"><td class="memItemLeft" align="right" valign="top">typedef highp_f64mat2x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gafb18822e2eac88fa861a76cefd25d550">f64mat2x4</a></td></tr>
+<tr class="separator:gafb18822e2eac88fa861a76cefd25d550"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga68894201dd511792a7af6cff7b5adf71"><td class="memItemLeft" align="right" valign="top">typedef f64mat3x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga68894201dd511792a7af6cff7b5adf71">f64mat3</a></td></tr>
+<tr class="separator:ga68894201dd511792a7af6cff7b5adf71"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga11e5684b10e098f573ff484c1a569ae2"><td class="memItemLeft" align="right" valign="top">typedef highp_f64mat3x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga11e5684b10e098f573ff484c1a569ae2">f64mat3x2</a></td></tr>
+<tr class="separator:ga11e5684b10e098f573ff484c1a569ae2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae1a5081181c96cc37ce9418f6e856cb6"><td class="memItemLeft" align="right" valign="top">typedef highp_f64mat3x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gae1a5081181c96cc37ce9418f6e856cb6">f64mat3x3</a></td></tr>
+<tr class="separator:gae1a5081181c96cc37ce9418f6e856cb6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad37a55a8ce1154083a721b4ecfd55293"><td class="memItemLeft" align="right" valign="top">typedef highp_f64mat3x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gad37a55a8ce1154083a721b4ecfd55293">f64mat3x4</a></td></tr>
+<tr class="separator:gad37a55a8ce1154083a721b4ecfd55293"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga219c683b0aa29f4f482f76d77d5c9e95"><td class="memItemLeft" align="right" valign="top">typedef f64mat4x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga219c683b0aa29f4f482f76d77d5c9e95">f64mat4</a></td></tr>
+<tr class="separator:ga219c683b0aa29f4f482f76d77d5c9e95"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa669dfb59031a441de19b34a92704d57"><td class="memItemLeft" align="right" valign="top">typedef highp_f64mat4x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaa669dfb59031a441de19b34a92704d57">f64mat4x2</a></td></tr>
+<tr class="separator:gaa669dfb59031a441de19b34a92704d57"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaba137814a509704937746cc1e82edc32"><td class="memItemLeft" align="right" valign="top">typedef highp_f64mat4x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaba137814a509704937746cc1e82edc32">f64mat4x3</a></td></tr>
+<tr class="separator:gaba137814a509704937746cc1e82edc32"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga489163773b021f1800a33cc2fa730c3b"><td class="memItemLeft" align="right" valign="top">typedef highp_f64mat4x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga489163773b021f1800a33cc2fa730c3b">f64mat4x4</a></td></tr>
+<tr class="separator:ga489163773b021f1800a33cc2fa730c3b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga14c583bd625eda8cf4935a14d5dd544d"><td class="memItemLeft" align="right" valign="top">typedef highp_f64quat </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga14c583bd625eda8cf4935a14d5dd544d">f64quat</a></td></tr>
+<tr class="separator:ga14c583bd625eda8cf4935a14d5dd544d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac5b04f32ae3084a9131a0851e7f4cfae"><td class="memItemLeft" align="right" valign="top">typedef highp_f64vec1 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gac5b04f32ae3084a9131a0851e7f4cfae">f64vec1</a></td></tr>
+<tr class="separator:gac5b04f32ae3084a9131a0851e7f4cfae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafaad77b464b5a35626c31205ac6780e3"><td class="memItemLeft" align="right" valign="top">typedef highp_f64vec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gafaad77b464b5a35626c31205ac6780e3">f64vec2</a></td></tr>
+<tr class="separator:gafaad77b464b5a35626c31205ac6780e3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafacc3614bb1136a7756293e67d34de22"><td class="memItemLeft" align="right" valign="top">typedef highp_f64vec3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gafacc3614bb1136a7756293e67d34de22">f64vec3</a></td></tr>
+<tr class="separator:gafacc3614bb1136a7756293e67d34de22"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8723186104dc02eb85da386105fba75f"><td class="memItemLeft" align="right" valign="top">typedef highp_f64vec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga8723186104dc02eb85da386105fba75f">f64vec4</a></td></tr>
+<tr class="separator:ga8723186104dc02eb85da386105fba75f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga41d579d81c3d98edd0532244fa02da77"><td class="memItemLeft" align="right" valign="top">typedef highp_float32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga41d579d81c3d98edd0532244fa02da77">float32_t</a></td></tr>
+<tr class="separator:ga41d579d81c3d98edd0532244fa02da77"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6957c7b22f405683bb276554ca40dc37"><td class="memItemLeft" align="right" valign="top">typedef highp_float64_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga6957c7b22f405683bb276554ca40dc37">float64_t</a></td></tr>
+<tr class="separator:ga6957c7b22f405683bb276554ca40dc37"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gabb01d4ff646ee07241934b1a0cc0f985"><td class="memItemLeft" align="right" valign="top">typedef fmat2x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gabb01d4ff646ee07241934b1a0cc0f985">fmat2</a></td></tr>
+<tr class="separator:gabb01d4ff646ee07241934b1a0cc0f985"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga74ac2e71b650162d8f7cb2a70c2f6711"><td class="memItemLeft" align="right" valign="top">typedef highp_f32mat2x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga74ac2e71b650162d8f7cb2a70c2f6711">fmat2x2</a></td></tr>
+<tr class="separator:ga74ac2e71b650162d8f7cb2a70c2f6711"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf17b2604c0d92bffb92375d8aa588756"><td class="memItemLeft" align="right" valign="top">typedef highp_f32mat2x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaf17b2604c0d92bffb92375d8aa588756">fmat2x3</a></td></tr>
+<tr class="separator:gaf17b2604c0d92bffb92375d8aa588756"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga709c97c20efa24ff1d9e83cd437b8ed5"><td class="memItemLeft" align="right" valign="top">typedef highp_f32mat2x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga709c97c20efa24ff1d9e83cd437b8ed5">fmat2x4</a></td></tr>
+<tr class="separator:ga709c97c20efa24ff1d9e83cd437b8ed5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5165fbee2d78f342950265b69a07353d"><td class="memItemLeft" align="right" valign="top">typedef fmat3x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga5165fbee2d78f342950265b69a07353d">fmat3</a></td></tr>
+<tr class="separator:ga5165fbee2d78f342950265b69a07353d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9f20af6e8eca2abdcde08408948cc1ca"><td class="memItemLeft" align="right" valign="top">typedef highp_f32mat3x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga9f20af6e8eca2abdcde08408948cc1ca">fmat3x2</a></td></tr>
+<tr class="separator:ga9f20af6e8eca2abdcde08408948cc1ca"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad339e25c32fe6665acf028f26c1b3e22"><td class="memItemLeft" align="right" valign="top">typedef highp_f32mat3x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gad339e25c32fe6665acf028f26c1b3e22">fmat3x3</a></td></tr>
+<tr class="separator:gad339e25c32fe6665acf028f26c1b3e22"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab04bc97371cb6b5f54b3688e0c81578b"><td class="memItemLeft" align="right" valign="top">typedef highp_f32mat3x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gab04bc97371cb6b5f54b3688e0c81578b">fmat3x4</a></td></tr>
+<tr class="separator:gab04bc97371cb6b5f54b3688e0c81578b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab3f31d867df4874e42172ebf188a3ebd"><td class="memItemLeft" align="right" valign="top">typedef fmat4x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gab3f31d867df4874e42172ebf188a3ebd">fmat4</a></td></tr>
+<tr class="separator:gab3f31d867df4874e42172ebf188a3ebd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab0082a25f19f02d2d0af0fcbe5ead732"><td class="memItemLeft" align="right" valign="top">typedef highp_f32mat4x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gab0082a25f19f02d2d0af0fcbe5ead732">fmat4x2</a></td></tr>
+<tr class="separator:gab0082a25f19f02d2d0af0fcbe5ead732"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1a11c170f030ab34ddf037714e936cba"><td class="memItemLeft" align="right" valign="top">typedef highp_f32mat4x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga1a11c170f030ab34ddf037714e936cba">fmat4x3</a></td></tr>
+<tr class="separator:ga1a11c170f030ab34ddf037714e936cba"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gabd79752ff357d83b49136b6299ea62d9"><td class="memItemLeft" align="right" valign="top">typedef highp_f32mat4x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gabd79752ff357d83b49136b6299ea62d9">fmat4x4</a></td></tr>
+<tr class="separator:gabd79752ff357d83b49136b6299ea62d9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af31dbba5cedde97099c8e30b9661edf0"><td class="memItemLeft" align="right" valign="top">typedef quat </td><td class="memItemRight" valign="bottom"><b>fquat</b></td></tr>
+<tr class="separator:af31dbba5cedde97099c8e30b9661edf0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga10d8bd3c923a5386efcf25a4117fd84f"><td class="memItemLeft" align="right" valign="top">typedef highp_f32vec1 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga10d8bd3c923a5386efcf25a4117fd84f">fvec1</a></td></tr>
+<tr class="separator:ga10d8bd3c923a5386efcf25a4117fd84f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf9f4173dd9e8b2d0b663c6f80ed09ff6"><td class="memItemLeft" align="right" valign="top">typedef highp_f32vec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaf9f4173dd9e8b2d0b663c6f80ed09ff6">fvec2</a></td></tr>
+<tr class="separator:gaf9f4173dd9e8b2d0b663c6f80ed09ff6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4ef2d77dcab241b1ef83f09edb2f1084"><td class="memItemLeft" align="right" valign="top">typedef highp_f32vec3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga4ef2d77dcab241b1ef83f09edb2f1084">fvec3</a></td></tr>
+<tr class="separator:ga4ef2d77dcab241b1ef83f09edb2f1084"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga981b63d5c5f7233a29364e0a968d139b"><td class="memItemLeft" align="right" valign="top">typedef highp_f32vec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga981b63d5c5f7233a29364e0a968d139b">fvec4</a></td></tr>
+<tr class="separator:ga981b63d5c5f7233a29364e0a968d139b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a30d694434c136946d9f98c8baa3d40a1"><td class="memItemLeft" align="right" valign="top">typedef tquat< double, highp > </td><td class="memItemRight" valign="bottom"><b>highp_dquat</b></td></tr>
+<tr class="separator:a30d694434c136946d9f98c8baa3d40a1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6906e1ef0b34064b4b675489c5c38725"><td class="memItemLeft" align="right" valign="top">typedef float32 </td><td class="memItemRight" valign="bottom"><b>highp_f32</b></td></tr>
+<tr class="separator:a6906e1ef0b34064b4b675489c5c38725"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a298f7d4d273678d0282812368da27fda"><td class="memItemLeft" align="right" valign="top">typedef highp_f32mat2x2 </td><td class="memItemRight" valign="bottom"><b>highp_f32mat2</b></td></tr>
+<tr class="separator:a298f7d4d273678d0282812368da27fda"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abca6420c08917f60f9c76a924c3fa9ef"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< f32, highp > </td><td class="memItemRight" valign="bottom"><b>highp_f32mat2x2</b></td></tr>
+<tr class="separator:abca6420c08917f60f9c76a924c3fa9ef"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a05a62dfea812122ea4a07ca23f9200a3"><td class="memItemLeft" align="right" valign="top">typedef tmat2x3< f32, highp > </td><td class="memItemRight" valign="bottom"><b>highp_f32mat2x3</b></td></tr>
+<tr class="separator:a05a62dfea812122ea4a07ca23f9200a3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5ac9c94767805c13008b5ad3ceeb48b0"><td class="memItemLeft" align="right" valign="top">typedef tmat2x4< f32, highp > </td><td class="memItemRight" valign="bottom"><b>highp_f32mat2x4</b></td></tr>
+<tr class="separator:a5ac9c94767805c13008b5ad3ceeb48b0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a24f9ef3263b1638564713892cc37981f"><td class="memItemLeft" align="right" valign="top">typedef highp_f32mat3x3 </td><td class="memItemRight" valign="bottom"><b>highp_f32mat3</b></td></tr>
+<tr class="separator:a24f9ef3263b1638564713892cc37981f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0ac1c27267fb7e42ab4d16a60bc37d12"><td class="memItemLeft" align="right" valign="top">typedef tmat3x2< f32, highp > </td><td class="memItemRight" valign="bottom"><b>highp_f32mat3x2</b></td></tr>
+<tr class="separator:a0ac1c27267fb7e42ab4d16a60bc37d12"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aeb88d894a02f3c506e7895a364acf329"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< f32, highp > </td><td class="memItemRight" valign="bottom"><b>highp_f32mat3x3</b></td></tr>
+<tr class="separator:aeb88d894a02f3c506e7895a364acf329"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2270e71161b53344ef300feea86ce8f8"><td class="memItemLeft" align="right" valign="top">typedef tmat3x4< f32, highp > </td><td class="memItemRight" valign="bottom"><b>highp_f32mat3x4</b></td></tr>
+<tr class="separator:a2270e71161b53344ef300feea86ce8f8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a14c90ca49885723f51d06e295587236f"><td class="memItemLeft" align="right" valign="top">typedef highp_f32mat4x4 </td><td class="memItemRight" valign="bottom"><b>highp_f32mat4</b></td></tr>
+<tr class="separator:a14c90ca49885723f51d06e295587236f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5bbfbe5348102c80ff5ec5b25a8552e8"><td class="memItemLeft" align="right" valign="top">typedef tmat4x2< f32, highp > </td><td class="memItemRight" valign="bottom"><b>highp_f32mat4x2</b></td></tr>
+<tr class="separator:a5bbfbe5348102c80ff5ec5b25a8552e8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7ccff35ecac00891d63998ace1369cf8"><td class="memItemLeft" align="right" valign="top">typedef tmat4x3< f32, highp > </td><td class="memItemRight" valign="bottom"><b>highp_f32mat4x3</b></td></tr>
+<tr class="separator:a7ccff35ecac00891d63998ace1369cf8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0ab79fc2711ccd850f42d5e816012397"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< f32, highp > </td><td class="memItemRight" valign="bottom"><b>highp_f32mat4x4</b></td></tr>
+<tr class="separator:a0ab79fc2711ccd850f42d5e816012397"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abe379321f08ebc6fc89563908f3e4cda"><td class="memItemLeft" align="right" valign="top">typedef tquat< f32, highp > </td><td class="memItemRight" valign="bottom"><b>highp_f32quat</b></td></tr>
+<tr class="separator:abe379321f08ebc6fc89563908f3e4cda"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0f40d1860ed9eb243181e025bfb5c479"><td class="memItemLeft" align="right" valign="top">typedef tvec1< f32, highp > </td><td class="memItemRight" valign="bottom"><b>highp_f32vec1</b></td></tr>
+<tr class="separator:a0f40d1860ed9eb243181e025bfb5c479"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a51a457bcd2c0840cac5dd18b6547a32e"><td class="memItemLeft" align="right" valign="top">typedef tvec2< f32, highp > </td><td class="memItemRight" valign="bottom"><b>highp_f32vec2</b></td></tr>
+<tr class="separator:a51a457bcd2c0840cac5dd18b6547a32e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a78bfcaf2c007f183c973e6f46b8a9b0a"><td class="memItemLeft" align="right" valign="top">typedef tvec3< f32, highp > </td><td class="memItemRight" valign="bottom"><b>highp_f32vec3</b></td></tr>
+<tr class="separator:a78bfcaf2c007f183c973e6f46b8a9b0a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a809699b904d856484f97d3ea89f45ed7"><td class="memItemLeft" align="right" valign="top">typedef tvec4< f32, highp > </td><td class="memItemRight" valign="bottom"><b>highp_f32vec4</b></td></tr>
+<tr class="separator:a809699b904d856484f97d3ea89f45ed7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a51d5266017d88f62737c1973923a7cf4"><td class="memItemLeft" align="right" valign="top">typedef float64 </td><td class="memItemRight" valign="bottom"><b>highp_f64</b></td></tr>
+<tr class="separator:a51d5266017d88f62737c1973923a7cf4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af7adb92ce8de0afaff01436b039fd924"><td class="memItemLeft" align="right" valign="top">typedef highp_f64mat2x2 </td><td class="memItemRight" valign="bottom"><b>highp_f64mat2</b></td></tr>
+<tr class="separator:af7adb92ce8de0afaff01436b039fd924"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af538d136729000563979da800678fcdb"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< f64, highp > </td><td class="memItemRight" valign="bottom"><b>highp_f64mat2x2</b></td></tr>
+<tr class="separator:af538d136729000563979da800678fcdb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7d56d15ebc86c890d91b7a77415945d6"><td class="memItemLeft" align="right" valign="top">typedef tmat2x3< f64, highp > </td><td class="memItemRight" valign="bottom"><b>highp_f64mat2x3</b></td></tr>
+<tr class="separator:a7d56d15ebc86c890d91b7a77415945d6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac451118b55d9c1c8645a13dc905da2ef"><td class="memItemLeft" align="right" valign="top">typedef tmat2x4< f64, highp > </td><td class="memItemRight" valign="bottom"><b>highp_f64mat2x4</b></td></tr>
+<tr class="separator:ac451118b55d9c1c8645a13dc905da2ef"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a609bf0ace941d6ab1bb2f9522a04e546"><td class="memItemLeft" align="right" valign="top">typedef highp_f64mat3x3 </td><td class="memItemRight" valign="bottom"><b>highp_f64mat3</b></td></tr>
+<tr class="separator:a609bf0ace941d6ab1bb2f9522a04e546"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae9b193febd3179de366dfa1ba31ee6ce"><td class="memItemLeft" align="right" valign="top">typedef tmat3x2< f64, highp > </td><td class="memItemRight" valign="bottom"><b>highp_f64mat3x2</b></td></tr>
+<tr class="separator:ae9b193febd3179de366dfa1ba31ee6ce"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5b24baf9696ed586df64253fb58404af"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< f64, highp > </td><td class="memItemRight" valign="bottom"><b>highp_f64mat3x3</b></td></tr>
+<tr class="separator:a5b24baf9696ed586df64253fb58404af"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7cbe7df03752d9ade687d4eaf9e2498e"><td class="memItemLeft" align="right" valign="top">typedef tmat3x4< f64, highp > </td><td class="memItemRight" valign="bottom"><b>highp_f64mat3x4</b></td></tr>
+<tr class="separator:a7cbe7df03752d9ade687d4eaf9e2498e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad308e0ed27d64daa4213fb257fcbd5a5"><td class="memItemLeft" align="right" valign="top">typedef highp_f64mat4x4 </td><td class="memItemRight" valign="bottom"><b>highp_f64mat4</b></td></tr>
+<tr class="separator:ad308e0ed27d64daa4213fb257fcbd5a5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afa65ad618b70fa8a2d6412d084c6abf3"><td class="memItemLeft" align="right" valign="top">typedef tmat4x2< f64, highp > </td><td class="memItemRight" valign="bottom"><b>highp_f64mat4x2</b></td></tr>
+<tr class="separator:afa65ad618b70fa8a2d6412d084c6abf3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4b7feceabacde08ca13d1f5ef120d128"><td class="memItemLeft" align="right" valign="top">typedef tmat4x3< f64, highp > </td><td class="memItemRight" valign="bottom"><b>highp_f64mat4x3</b></td></tr>
+<tr class="separator:a4b7feceabacde08ca13d1f5ef120d128"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a097940f00a411b5982c35ed5ee66974d"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< f64, highp > </td><td class="memItemRight" valign="bottom"><b>highp_f64mat4x4</b></td></tr>
+<tr class="separator:a097940f00a411b5982c35ed5ee66974d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab51c057647a12b62a8a6a855ece8d167"><td class="memItemLeft" align="right" valign="top">typedef tquat< f64, highp > </td><td class="memItemRight" valign="bottom"><b>highp_f64quat</b></td></tr>
+<tr class="separator:ab51c057647a12b62a8a6a855ece8d167"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a89237ecd4974b66bfeca50946f41e9c1"><td class="memItemLeft" align="right" valign="top">typedef tvec1< f64, highp > </td><td class="memItemRight" valign="bottom"><b>highp_f64vec1</b></td></tr>
+<tr class="separator:a89237ecd4974b66bfeca50946f41e9c1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a89dc53052e92cfafd97ecd391397baf0"><td class="memItemLeft" align="right" valign="top">typedef tvec2< f64, highp > </td><td class="memItemRight" valign="bottom"><b>highp_f64vec2</b></td></tr>
+<tr class="separator:a89dc53052e92cfafd97ecd391397baf0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aec720296a0a21668a2ed5a1d5f139169"><td class="memItemLeft" align="right" valign="top">typedef tvec3< f64, highp > </td><td class="memItemRight" valign="bottom"><b>highp_f64vec3</b></td></tr>
+<tr class="separator:aec720296a0a21668a2ed5a1d5f139169"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0d2488c3fb459e4646405e1156e2e00c"><td class="memItemLeft" align="right" valign="top">typedef tvec4< f64, highp > </td><td class="memItemRight" valign="bottom"><b>highp_f64vec4</b></td></tr>
+<tr class="separator:a0d2488c3fb459e4646405e1156e2e00c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adde4415e846cff13c6cb74a6fe73d01e"><td class="memItemLeft" align="right" valign="top">typedef detail::float32 </td><td class="memItemRight" valign="bottom"><b>highp_float32</b></td></tr>
+<tr class="separator:adde4415e846cff13c6cb74a6fe73d01e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a52ccfbf2e504ae2e5abcf2ad93b4f4a2"><td class="memItemLeft" align="right" valign="top">typedef detail::float32 </td><td class="memItemRight" valign="bottom"><b>highp_float32_t</b></td></tr>
+<tr class="separator:a52ccfbf2e504ae2e5abcf2ad93b4f4a2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae9b1ba717a8b1e9a7b028ac98d9998d3"><td class="memItemLeft" align="right" valign="top">typedef detail::float64 </td><td class="memItemRight" valign="bottom"><b>highp_float64</b></td></tr>
+<tr class="separator:ae9b1ba717a8b1e9a7b028ac98d9998d3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a982f41429168a9f2d557500008b0ec22"><td class="memItemLeft" align="right" valign="top">typedef detail::float64 </td><td class="memItemRight" valign="bottom"><b>highp_float64_t</b></td></tr>
+<tr class="separator:a982f41429168a9f2d557500008b0ec22"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae98c88d9a7befa9b5877f49176225535"><td class="memItemLeft" align="right" valign="top">typedef highp_fmat2x2 </td><td class="memItemRight" valign="bottom"><b>highp_fmat2</b></td></tr>
+<tr class="separator:ae98c88d9a7befa9b5877f49176225535"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7af72bc0af9dbd21139d6dc5f66ac5be"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< f32, highp > </td><td class="memItemRight" valign="bottom"><b>highp_fmat2x2</b></td></tr>
+<tr class="separator:a7af72bc0af9dbd21139d6dc5f66ac5be"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adb7ad165be67b8607d6fcac71a913f0b"><td class="memItemLeft" align="right" valign="top">typedef tmat2x3< f32, highp > </td><td class="memItemRight" valign="bottom"><b>highp_fmat2x3</b></td></tr>
+<tr class="separator:adb7ad165be67b8607d6fcac71a913f0b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3b10e8ada3693b02f55095efa35fdd8b"><td class="memItemLeft" align="right" valign="top">typedef tmat2x4< f32, highp > </td><td class="memItemRight" valign="bottom"><b>highp_fmat2x4</b></td></tr>
+<tr class="separator:a3b10e8ada3693b02f55095efa35fdd8b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aed2dc69e0d507d4191092dbd44b3eb75"><td class="memItemLeft" align="right" valign="top">typedef highp_fmat3x3 </td><td class="memItemRight" valign="bottom"><b>highp_fmat3</b></td></tr>
+<tr class="separator:aed2dc69e0d507d4191092dbd44b3eb75"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a24225ab930d68cda78866230d5f4c586"><td class="memItemLeft" align="right" valign="top">typedef tmat3x2< f32, highp > </td><td class="memItemRight" valign="bottom"><b>highp_fmat3x2</b></td></tr>
+<tr class="separator:a24225ab930d68cda78866230d5f4c586"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3de1e02382b33fa458eb55392136f55d"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< f32, highp > </td><td class="memItemRight" valign="bottom"><b>highp_fmat3x3</b></td></tr>
+<tr class="separator:a3de1e02382b33fa458eb55392136f55d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a311a121ace2b2d2c1f065cfb0be47092"><td class="memItemLeft" align="right" valign="top">typedef tmat3x4< f32, highp > </td><td class="memItemRight" valign="bottom"><b>highp_fmat3x4</b></td></tr>
+<tr class="separator:a311a121ace2b2d2c1f065cfb0be47092"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abf28443ce0cc0959077ec39b21f32c39"><td class="memItemLeft" align="right" valign="top">typedef highp_fmat4x4 </td><td class="memItemRight" valign="bottom"><b>highp_fmat4</b></td></tr>
+<tr class="separator:abf28443ce0cc0959077ec39b21f32c39"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2d63d03c71b1749daba2c810037b43cd"><td class="memItemLeft" align="right" valign="top">typedef tmat4x2< f32, highp > </td><td class="memItemRight" valign="bottom"><b>highp_fmat4x2</b></td></tr>
+<tr class="separator:a2d63d03c71b1749daba2c810037b43cd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7458dadd4d573105ea10a4f15660207e"><td class="memItemLeft" align="right" valign="top">typedef tmat4x3< f32, highp > </td><td class="memItemRight" valign="bottom"><b>highp_fmat4x3</b></td></tr>
+<tr class="separator:a7458dadd4d573105ea10a4f15660207e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0c272cfdedd2d9fcea43a1eaecb2a414"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< f32, highp > </td><td class="memItemRight" valign="bottom"><b>highp_fmat4x4</b></td></tr>
+<tr class="separator:a0c272cfdedd2d9fcea43a1eaecb2a414"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9d8bda24be0d5c66b38ceda1a193f0c9"><td class="memItemLeft" align="right" valign="top">typedef highp_quat </td><td class="memItemRight" valign="bottom"><b>highp_fquat</b></td></tr>
+<tr class="separator:a9d8bda24be0d5c66b38ceda1a193f0c9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a41c7b342ad9a120310e2f52ee14e3c2e"><td class="memItemLeft" align="right" valign="top">typedef tvec1< float, highp > </td><td class="memItemRight" valign="bottom"><b>highp_fvec1</b></td></tr>
+<tr class="separator:a41c7b342ad9a120310e2f52ee14e3c2e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9d93221df334ded08efdb7a231cdfd26"><td class="memItemLeft" align="right" valign="top">typedef tvec2< float, highp > </td><td class="memItemRight" valign="bottom"><b>highp_fvec2</b></td></tr>
+<tr class="separator:a9d93221df334ded08efdb7a231cdfd26"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab333adb64d923bf12287f0dbc2f12c7f"><td class="memItemLeft" align="right" valign="top">typedef tvec3< float, highp > </td><td class="memItemRight" valign="bottom"><b>highp_fvec3</b></td></tr>
+<tr class="separator:ab333adb64d923bf12287f0dbc2f12c7f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad473477b31e48387ad77054dfab93040"><td class="memItemLeft" align="right" valign="top">typedef tvec4< float, highp > </td><td class="memItemRight" valign="bottom"><b>highp_fvec4</b></td></tr>
+<tr class="separator:ad473477b31e48387ad77054dfab93040"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0336abc2604dd2c20c30e036454b64f8"><td class="memItemLeft" align="right" valign="top">typedef detail::int16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga0336abc2604dd2c20c30e036454b64f8">highp_i16</a></td></tr>
+<tr class="separator:ga0336abc2604dd2c20c30e036454b64f8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2287f1712b96207a66cc858e930fb77a"><td class="memItemLeft" align="right" valign="top">typedef tvec1< i16, highp > </td><td class="memItemRight" valign="bottom"><b>highp_i16vec1</b></td></tr>
+<tr class="separator:a2287f1712b96207a66cc858e930fb77a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3b1278f471d04b27be00462deeef2e0a"><td class="memItemLeft" align="right" valign="top">typedef tvec2< i16, highp > </td><td class="memItemRight" valign="bottom"><b>highp_i16vec2</b></td></tr>
+<tr class="separator:a3b1278f471d04b27be00462deeef2e0a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a232957ed3eea2cddbc313de01a73c958"><td class="memItemLeft" align="right" valign="top">typedef tvec3< i16, highp > </td><td class="memItemRight" valign="bottom"><b>highp_i16vec3</b></td></tr>
+<tr class="separator:a232957ed3eea2cddbc313de01a73c958"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2b1c2815452029cc1d605e02c754d8bd"><td class="memItemLeft" align="right" valign="top">typedef tvec4< i16, highp > </td><td class="memItemRight" valign="bottom"><b>highp_i16vec4</b></td></tr>
+<tr class="separator:a2b1c2815452029cc1d605e02c754d8bd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga727675ac6b5d2fc699520e0059735e25"><td class="memItemLeft" align="right" valign="top">typedef detail::int32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga727675ac6b5d2fc699520e0059735e25">highp_i32</a></td></tr>
+<tr class="separator:ga727675ac6b5d2fc699520e0059735e25"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3650f851ca511552052df19fb6cf8f16"><td class="memItemLeft" align="right" valign="top">typedef tvec1< i32, highp > </td><td class="memItemRight" valign="bottom"><b>highp_i32vec1</b></td></tr>
+<tr class="separator:a3650f851ca511552052df19fb6cf8f16"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a55ae77cc669bc16dce3b56786b3411b9"><td class="memItemLeft" align="right" valign="top">typedef tvec2< i32, highp > </td><td class="memItemRight" valign="bottom"><b>highp_i32vec2</b></td></tr>
+<tr class="separator:a55ae77cc669bc16dce3b56786b3411b9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac29c6f264de4dc336d31e05f84ce89e4"><td class="memItemLeft" align="right" valign="top">typedef tvec3< i32, highp > </td><td class="memItemRight" valign="bottom"><b>highp_i32vec3</b></td></tr>
+<tr class="separator:ac29c6f264de4dc336d31e05f84ce89e4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a389eba6c2510da342d7c5890eae6fa03"><td class="memItemLeft" align="right" valign="top">typedef tvec4< i32, highp > </td><td class="memItemRight" valign="bottom"><b>highp_i32vec4</b></td></tr>
+<tr class="separator:a389eba6c2510da342d7c5890eae6fa03"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac25db6d2b1e2a0f351b77ba3409ac4cd"><td class="memItemLeft" align="right" valign="top">typedef detail::int64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gac25db6d2b1e2a0f351b77ba3409ac4cd">highp_i64</a></td></tr>
+<tr class="separator:gac25db6d2b1e2a0f351b77ba3409ac4cd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a29bc99c6e19f3f6b8820e3f9037416d5"><td class="memItemLeft" align="right" valign="top">typedef tvec1< i64, highp > </td><td class="memItemRight" valign="bottom"><b>highp_i64vec1</b></td></tr>
+<tr class="separator:a29bc99c6e19f3f6b8820e3f9037416d5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9ac957028098e89887a0621d677e1a56"><td class="memItemLeft" align="right" valign="top">typedef tvec2< i64, highp > </td><td class="memItemRight" valign="bottom"><b>highp_i64vec2</b></td></tr>
+<tr class="separator:a9ac957028098e89887a0621d677e1a56"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0ccc0e5d538ee4c48d406fb7ae116694"><td class="memItemLeft" align="right" valign="top">typedef tvec3< i64, highp > </td><td class="memItemRight" valign="bottom"><b>highp_i64vec3</b></td></tr>
+<tr class="separator:a0ccc0e5d538ee4c48d406fb7ae116694"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a239e24f52398e6f2fa7d8c731072c632"><td class="memItemLeft" align="right" valign="top">typedef tvec4< i64, highp > </td><td class="memItemRight" valign="bottom"><b>highp_i64vec4</b></td></tr>
+<tr class="separator:a239e24f52398e6f2fa7d8c731072c632"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gacb88796f2d08ef253d0345aff20c3aee"><td class="memItemLeft" align="right" valign="top">typedef detail::int8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gacb88796f2d08ef253d0345aff20c3aee">highp_i8</a></td></tr>
+<tr class="separator:gacb88796f2d08ef253d0345aff20c3aee"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af405602f84fa85522d81f08b54354055"><td class="memItemLeft" align="right" valign="top">typedef tvec1< i8, highp > </td><td class="memItemRight" valign="bottom"><b>highp_i8vec1</b></td></tr>
+<tr class="separator:af405602f84fa85522d81f08b54354055"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab78a1c49ec73e0113174902ccdac2aab"><td class="memItemLeft" align="right" valign="top">typedef tvec2< i8, highp > </td><td class="memItemRight" valign="bottom"><b>highp_i8vec2</b></td></tr>
+<tr class="separator:ab78a1c49ec73e0113174902ccdac2aab"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a035c5ab8bb99731e0a0cdba9f9e3431a"><td class="memItemLeft" align="right" valign="top">typedef tvec3< i8, highp > </td><td class="memItemRight" valign="bottom"><b>highp_i8vec3</b></td></tr>
+<tr class="separator:a035c5ab8bb99731e0a0cdba9f9e3431a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ada7a04ea9eaaf01e45e6e8460a4f7abe"><td class="memItemLeft" align="right" valign="top">typedef tvec4< i8, highp > </td><td class="memItemRight" valign="bottom"><b>highp_i8vec4</b></td></tr>
+<tr class="separator:ada7a04ea9eaaf01e45e6e8460a4f7abe"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5fde0fa4a3852a9dd5d637a92ee74718"><td class="memItemLeft" align="right" valign="top">typedef detail::int16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga5fde0fa4a3852a9dd5d637a92ee74718">highp_int16</a></td></tr>
+<tr class="separator:ga5fde0fa4a3852a9dd5d637a92ee74718"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gacaea06d0a79ef3172e887a7a6ba434ff"><td class="memItemLeft" align="right" valign="top">typedef detail::int16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gacaea06d0a79ef3172e887a7a6ba434ff">highp_int16_t</a></td></tr>
+<tr class="separator:gacaea06d0a79ef3172e887a7a6ba434ff"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga84ed04b4e0de18c977e932d617e7c223"><td class="memItemLeft" align="right" valign="top">typedef detail::int32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga84ed04b4e0de18c977e932d617e7c223">highp_int32</a></td></tr>
+<tr class="separator:ga84ed04b4e0de18c977e932d617e7c223"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2c71c8bd9e2fe7d2e93ca250d8b6157f"><td class="memItemLeft" align="right" valign="top">typedef detail::int32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga2c71c8bd9e2fe7d2e93ca250d8b6157f">highp_int32_t</a></td></tr>
+<tr class="separator:ga2c71c8bd9e2fe7d2e93ca250d8b6157f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga226a8d52b4e3f77aaa6231135e886aac"><td class="memItemLeft" align="right" valign="top">typedef detail::int64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga226a8d52b4e3f77aaa6231135e886aac">highp_int64</a></td></tr>
+<tr class="separator:ga226a8d52b4e3f77aaa6231135e886aac"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga73c6abb280a45feeff60f9accaee91f3"><td class="memItemLeft" align="right" valign="top">typedef detail::int64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga73c6abb280a45feeff60f9accaee91f3">highp_int64_t</a></td></tr>
+<tr class="separator:ga73c6abb280a45feeff60f9accaee91f3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad0549c902a96a7164e4ac858d5f39dbf"><td class="memItemLeft" align="right" valign="top">typedef detail::int8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gad0549c902a96a7164e4ac858d5f39dbf">highp_int8</a></td></tr>
+<tr class="separator:gad0549c902a96a7164e4ac858d5f39dbf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1085c50dd8fbeb5e7e609b1c127492a5"><td class="memItemLeft" align="right" valign="top">typedef detail::int8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga1085c50dd8fbeb5e7e609b1c127492a5">highp_int8_t</a></td></tr>
+<tr class="separator:ga1085c50dd8fbeb5e7e609b1c127492a5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aefe60e46b0d012d98067425ad2e6cbc1"><td class="memItemLeft" align="right" valign="top">typedef tquat< float, highp > </td><td class="memItemRight" valign="bottom"><b>highp_quat</b></td></tr>
+<tr class="separator:aefe60e46b0d012d98067425ad2e6cbc1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8e62c883d13f47015f3b70ed88751369"><td class="memItemLeft" align="right" valign="top">typedef detail::uint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga8e62c883d13f47015f3b70ed88751369">highp_u16</a></td></tr>
+<tr class="separator:ga8e62c883d13f47015f3b70ed88751369"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8bda7c2533299ff237e174c31f721aee"><td class="memItemLeft" align="right" valign="top">typedef tvec1< u16, highp > </td><td class="memItemRight" valign="bottom"><b>highp_u16vec1</b></td></tr>
+<tr class="separator:a8bda7c2533299ff237e174c31f721aee"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5f26537a923e8a99aa2722ccea04effe"><td class="memItemLeft" align="right" valign="top">typedef tvec2< u16, highp > </td><td class="memItemRight" valign="bottom"><b>highp_u16vec2</b></td></tr>
+<tr class="separator:a5f26537a923e8a99aa2722ccea04effe"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae4b8f63673a7b146a424a5fee3db2ecc"><td class="memItemLeft" align="right" valign="top">typedef tvec3< u16, highp > </td><td class="memItemRight" valign="bottom"><b>highp_u16vec3</b></td></tr>
+<tr class="separator:ae4b8f63673a7b146a424a5fee3db2ecc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a42101fecebea5b85deaedd7a397b4b8e"><td class="memItemLeft" align="right" valign="top">typedef tvec4< u16, highp > </td><td class="memItemRight" valign="bottom"><b>highp_u16vec4</b></td></tr>
+<tr class="separator:a42101fecebea5b85deaedd7a397b4b8e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7a6f1929464dcc680b16381a4ee5f2cf"><td class="memItemLeft" align="right" valign="top">typedef detail::uint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga7a6f1929464dcc680b16381a4ee5f2cf">highp_u32</a></td></tr>
+<tr class="separator:ga7a6f1929464dcc680b16381a4ee5f2cf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a400570a17c30a0d93be64df7aaeca498"><td class="memItemLeft" align="right" valign="top">typedef tvec1< u32, highp > </td><td class="memItemRight" valign="bottom"><b>highp_u32vec1</b></td></tr>
+<tr class="separator:a400570a17c30a0d93be64df7aaeca498"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a450990091b6d2af3d5ce21badfdd409e"><td class="memItemLeft" align="right" valign="top">typedef tvec2< u32, highp > </td><td class="memItemRight" valign="bottom"><b>highp_u32vec2</b></td></tr>
+<tr class="separator:a450990091b6d2af3d5ce21badfdd409e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5ff192bf2205bec34497aa1f8ba05838"><td class="memItemLeft" align="right" valign="top">typedef tvec3< u32, highp > </td><td class="memItemRight" valign="bottom"><b>highp_u32vec3</b></td></tr>
+<tr class="separator:a5ff192bf2205bec34497aa1f8ba05838"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a447c20d8123d9c4dbab2016337670fad"><td class="memItemLeft" align="right" valign="top">typedef tvec4< u32, highp > </td><td class="memItemRight" valign="bottom"><b>highp_u32vec4</b></td></tr>
+<tr class="separator:a447c20d8123d9c4dbab2016337670fad"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0c181fdf06a309691999926b6690c969"><td class="memItemLeft" align="right" valign="top">typedef detail::uint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga0c181fdf06a309691999926b6690c969">highp_u64</a></td></tr>
+<tr class="separator:ga0c181fdf06a309691999926b6690c969"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adcba17098bae31bcde33d72f71f96d44"><td class="memItemLeft" align="right" valign="top">typedef tvec1< u64, highp > </td><td class="memItemRight" valign="bottom"><b>highp_u64vec1</b></td></tr>
+<tr class="separator:adcba17098bae31bcde33d72f71f96d44"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1c4c47b6745fbe10d61dd86d4a5362ec"><td class="memItemLeft" align="right" valign="top">typedef tvec2< u64, highp > </td><td class="memItemRight" valign="bottom"><b>highp_u64vec2</b></td></tr>
+<tr class="separator:a1c4c47b6745fbe10d61dd86d4a5362ec"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a356770e957a30e5039860337a715f84e"><td class="memItemLeft" align="right" valign="top">typedef tvec3< u64, highp > </td><td class="memItemRight" valign="bottom"><b>highp_u64vec3</b></td></tr>
+<tr class="separator:a356770e957a30e5039860337a715f84e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3af115d5e803c6b966bf4dbc5db2fc63"><td class="memItemLeft" align="right" valign="top">typedef tvec4< u64, highp > </td><td class="memItemRight" valign="bottom"><b>highp_u64vec4</b></td></tr>
+<tr class="separator:a3af115d5e803c6b966bf4dbc5db2fc63"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gacd1259f3a9e8d2a9df5be2d74322ef9c"><td class="memItemLeft" align="right" valign="top">typedef detail::uint8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gacd1259f3a9e8d2a9df5be2d74322ef9c">highp_u8</a></td></tr>
+<tr class="separator:gacd1259f3a9e8d2a9df5be2d74322ef9c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4f09abf961b1b2c2f6561861a1057aa0"><td class="memItemLeft" align="right" valign="top">typedef tvec1< u8, highp > </td><td class="memItemRight" valign="bottom"><b>highp_u8vec1</b></td></tr>
+<tr class="separator:a4f09abf961b1b2c2f6561861a1057aa0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad6f8afc722fcf494a808f31fe33a225f"><td class="memItemLeft" align="right" valign="top">typedef tvec2< u8, highp > </td><td class="memItemRight" valign="bottom"><b>highp_u8vec2</b></td></tr>
+<tr class="separator:ad6f8afc722fcf494a808f31fe33a225f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aac99086122be840a2bb096e4e3c3f339"><td class="memItemLeft" align="right" valign="top">typedef tvec3< u8, highp > </td><td class="memItemRight" valign="bottom"><b>highp_u8vec3</b></td></tr>
+<tr class="separator:aac99086122be840a2bb096e4e3c3f339"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aaf75b696ccff5ae31bc4d96d031d6c60"><td class="memItemLeft" align="right" valign="top">typedef tvec4< u8, highp > </td><td class="memItemRight" valign="bottom"><b>highp_u8vec4</b></td></tr>
+<tr class="separator:aaf75b696ccff5ae31bc4d96d031d6c60"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga746dc6da204f5622e395f492997dbf57"><td class="memItemLeft" align="right" valign="top">typedef detail::uint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga746dc6da204f5622e395f492997dbf57">highp_uint16</a></td></tr>
+<tr class="separator:ga746dc6da204f5622e395f492997dbf57"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gacf54c3330ef60aa3d16cb676c7bcb8c7"><td class="memItemLeft" align="right" valign="top">typedef detail::uint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gacf54c3330ef60aa3d16cb676c7bcb8c7">highp_uint16_t</a></td></tr>
+<tr class="separator:gacf54c3330ef60aa3d16cb676c7bcb8c7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga256b12b650c3f2fb86878fd1c5db8bc3"><td class="memItemLeft" align="right" valign="top">typedef detail::uint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga256b12b650c3f2fb86878fd1c5db8bc3">highp_uint32</a></td></tr>
+<tr class="separator:ga256b12b650c3f2fb86878fd1c5db8bc3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae978599c9711ac263ba732d4ac225b0e"><td class="memItemLeft" align="right" valign="top">typedef detail::uint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gae978599c9711ac263ba732d4ac225b0e">highp_uint32_t</a></td></tr>
+<tr class="separator:gae978599c9711ac263ba732d4ac225b0e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa38d732f5d4a7bc42a1b43b9d3c141ce"><td class="memItemLeft" align="right" valign="top">typedef detail::uint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaa38d732f5d4a7bc42a1b43b9d3c141ce">highp_uint64</a></td></tr>
+<tr class="separator:gaa38d732f5d4a7bc42a1b43b9d3c141ce"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa46172d7dc1c7ffe3e78107ff88adf08"><td class="memItemLeft" align="right" valign="top">typedef detail::uint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaa46172d7dc1c7ffe3e78107ff88adf08">highp_uint64_t</a></td></tr>
+<tr class="separator:gaa46172d7dc1c7ffe3e78107ff88adf08"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga97432f9979e73e66567361fd01e4cffb"><td class="memItemLeft" align="right" valign="top">typedef detail::uint8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga97432f9979e73e66567361fd01e4cffb">highp_uint8</a></td></tr>
+<tr class="separator:ga97432f9979e73e66567361fd01e4cffb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac4e00a26a2adb5f2c0a7096810df29e5"><td class="memItemLeft" align="right" valign="top">typedef detail::uint8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gac4e00a26a2adb5f2c0a7096810df29e5">highp_uint8_t</a></td></tr>
+<tr class="separator:gac4e00a26a2adb5f2c0a7096810df29e5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8f81d4fc98bf6a4de7da0332242c1841"><td class="memItemLeft" align="right" valign="top">typedef tvec1< float, highp > </td><td class="memItemRight" valign="bottom"><b>highp_vec1</b></td></tr>
+<tr class="separator:a8f81d4fc98bf6a4de7da0332242c1841"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3ab5fe184343d394fb6c2723c3ee3699"><td class="memItemLeft" align="right" valign="top">typedef detail::int16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga3ab5fe184343d394fb6c2723c3ee3699">i16</a></td></tr>
+<tr class="separator:ga3ab5fe184343d394fb6c2723c3ee3699"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga28f03a39ac56c70f9bf3ada11cb60e3b"><td class="memItemLeft" align="right" valign="top">typedef highp_i16vec1 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga28f03a39ac56c70f9bf3ada11cb60e3b">i16vec1</a></td></tr>
+<tr class="separator:ga28f03a39ac56c70f9bf3ada11cb60e3b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga110bec18ca44c41c76c3c9e4d7b5bd79"><td class="memItemLeft" align="right" valign="top">typedef highp_i16vec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga110bec18ca44c41c76c3c9e4d7b5bd79">i16vec2</a></td></tr>
+<tr class="separator:ga110bec18ca44c41c76c3c9e4d7b5bd79"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga973b226a9914db682c9372fc761fb535"><td class="memItemLeft" align="right" valign="top">typedef highp_i16vec3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga973b226a9914db682c9372fc761fb535">i16vec3</a></td></tr>
+<tr class="separator:ga973b226a9914db682c9372fc761fb535"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad73e5e905dcf2d8cab002b4ab46e9426"><td class="memItemLeft" align="right" valign="top">typedef highp_i16vec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gad73e5e905dcf2d8cab002b4ab46e9426">i16vec4</a></td></tr>
+<tr class="separator:gad73e5e905dcf2d8cab002b4ab46e9426"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga96faea43ac5f875d2d3ffbf8d213e3eb"><td class="memItemLeft" align="right" valign="top">typedef detail::int32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga96faea43ac5f875d2d3ffbf8d213e3eb">i32</a></td></tr>
+<tr class="separator:ga96faea43ac5f875d2d3ffbf8d213e3eb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4cca6bbd117c45f046291fc8e9d03765"><td class="memItemLeft" align="right" valign="top">typedef highp_i32vec1 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga4cca6bbd117c45f046291fc8e9d03765">i32vec1</a></td></tr>
+<tr class="separator:ga4cca6bbd117c45f046291fc8e9d03765"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3c12cef4135603fd77d8fda85808730c"><td class="memItemLeft" align="right" valign="top">typedef highp_i32vec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga3c12cef4135603fd77d8fda85808730c">i32vec2</a></td></tr>
+<tr class="separator:ga3c12cef4135603fd77d8fda85808730c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga40cd3f391c03512f158d10a70062264e"><td class="memItemLeft" align="right" valign="top">typedef highp_i32vec3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga40cd3f391c03512f158d10a70062264e">i32vec3</a></td></tr>
+<tr class="separator:ga40cd3f391c03512f158d10a70062264e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae3364a8090e7e1408056e00403dfecab"><td class="memItemLeft" align="right" valign="top">typedef highp_i32vec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gae3364a8090e7e1408056e00403dfecab">i32vec4</a></td></tr>
+<tr class="separator:gae3364a8090e7e1408056e00403dfecab"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gadb997e409103d4da18abd837e636a496"><td class="memItemLeft" align="right" valign="top">typedef detail::int64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gadb997e409103d4da18abd837e636a496">i64</a></td></tr>
+<tr class="separator:gadb997e409103d4da18abd837e636a496"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5b4a3e499ee165efc0dc05add9c48235"><td class="memItemLeft" align="right" valign="top">typedef highp_i64vec1 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga5b4a3e499ee165efc0dc05add9c48235">i64vec1</a></td></tr>
+<tr class="separator:ga5b4a3e499ee165efc0dc05add9c48235"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gade69872a31f066e5ae212f1af6008edb"><td class="memItemLeft" align="right" valign="top">typedef highp_i64vec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gade69872a31f066e5ae212f1af6008edb">i64vec2</a></td></tr>
+<tr class="separator:gade69872a31f066e5ae212f1af6008edb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9ece7c77c7bca7a6b824ef9c600f5e5e"><td class="memItemLeft" align="right" valign="top">typedef highp_i64vec3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga9ece7c77c7bca7a6b824ef9c600f5e5e">i64vec3</a></td></tr>
+<tr class="separator:ga9ece7c77c7bca7a6b824ef9c600f5e5e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9756e45c8f80329257f3cbdabc3bd73c"><td class="memItemLeft" align="right" valign="top">typedef highp_i64vec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga9756e45c8f80329257f3cbdabc3bd73c">i64vec4</a></td></tr>
+<tr class="separator:ga9756e45c8f80329257f3cbdabc3bd73c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga302ec977b0c0c3ea245b6c9275495355"><td class="memItemLeft" align="right" valign="top">typedef detail::int8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga302ec977b0c0c3ea245b6c9275495355">i8</a></td></tr>
+<tr class="separator:ga302ec977b0c0c3ea245b6c9275495355"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab2329c5c14ff5a03b1ddec039e2c7409"><td class="memItemLeft" align="right" valign="top">typedef highp_i8vec1 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gab2329c5c14ff5a03b1ddec039e2c7409">i8vec1</a></td></tr>
+<tr class="separator:gab2329c5c14ff5a03b1ddec039e2c7409"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6414484477e4c1b4863cf91af8fd4185"><td class="memItemLeft" align="right" valign="top">typedef highp_i8vec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga6414484477e4c1b4863cf91af8fd4185">i8vec2</a></td></tr>
+<tr class="separator:ga6414484477e4c1b4863cf91af8fd4185"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf4b5993e794e252607f91535b62a7e0c"><td class="memItemLeft" align="right" valign="top">typedef highp_i8vec3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaf4b5993e794e252607f91535b62a7e0c">i8vec3</a></td></tr>
+<tr class="separator:gaf4b5993e794e252607f91535b62a7e0c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga50e58885aee2cf01bb3ba472c5b1697e"><td class="memItemLeft" align="right" valign="top">typedef highp_i8vec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga50e58885aee2cf01bb3ba472c5b1697e">i8vec4</a></td></tr>
+<tr class="separator:ga50e58885aee2cf01bb3ba472c5b1697e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae8f5e3e964ca2ae240adc2c0d74adede"><td class="memItemLeft" align="right" valign="top">typedef detail::int16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gae8f5e3e964ca2ae240adc2c0d74adede">int16_t</a></td></tr>
+<tr class="separator:gae8f5e3e964ca2ae240adc2c0d74adede"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga042ef09ff2f0cb24a36f541bcb3a3710"><td class="memItemLeft" align="right" valign="top">typedef detail::int32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga042ef09ff2f0cb24a36f541bcb3a3710">int32_t</a></td></tr>
+<tr class="separator:ga042ef09ff2f0cb24a36f541bcb3a3710"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga322a7d7d2c2c68994dc872a33de63c61"><td class="memItemLeft" align="right" valign="top">typedef detail::int64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga322a7d7d2c2c68994dc872a33de63c61">int64_t</a></td></tr>
+<tr class="separator:ga322a7d7d2c2c68994dc872a33de63c61"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4bf09d8838a86866b39ee6e109341645"><td class="memItemLeft" align="right" valign="top">typedef detail::int8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga4bf09d8838a86866b39ee6e109341645">int8_t</a></td></tr>
+<tr class="separator:ga4bf09d8838a86866b39ee6e109341645"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5bb5330eb0f9cf0f8135c5f6ab07b96c"><td class="memItemLeft" align="right" valign="top">typedef tquat< double, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_dquat</b></td></tr>
+<tr class="separator:a5bb5330eb0f9cf0f8135c5f6ab07b96c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aeea53879fc327293cf3352a409b7867b"><td class="memItemLeft" align="right" valign="top">typedef float32 </td><td class="memItemRight" valign="bottom"><b>lowp_f32</b></td></tr>
+<tr class="separator:aeea53879fc327293cf3352a409b7867b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a52409bc6d4a2ce3421526c069220d685"><td class="memItemLeft" align="right" valign="top">typedef lowp_f32mat2x2 </td><td class="memItemRight" valign="bottom"><b>lowp_f32mat2</b></td></tr>
+<tr class="separator:a52409bc6d4a2ce3421526c069220d685"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acbfa3780fa74a8aceed53c6cac3d185e"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< f32, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_f32mat2x2</b></td></tr>
+<tr class="separator:acbfa3780fa74a8aceed53c6cac3d185e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7106f1c5fbb3e928556d2176c2828324"><td class="memItemLeft" align="right" valign="top">typedef tmat2x3< f32, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_f32mat2x3</b></td></tr>
+<tr class="separator:a7106f1c5fbb3e928556d2176c2828324"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad63250829617716e7009216970a22a2e"><td class="memItemLeft" align="right" valign="top">typedef tmat2x4< f32, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_f32mat2x4</b></td></tr>
+<tr class="separator:ad63250829617716e7009216970a22a2e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4187f89f196505b40e63f516139511e5"><td class="memItemLeft" align="right" valign="top">typedef lowp_f32mat3x3 </td><td class="memItemRight" valign="bottom"><b>lowp_f32mat3</b></td></tr>
+<tr class="separator:a4187f89f196505b40e63f516139511e5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1386a5915b7f4935ccae0f9a79bfb51f"><td class="memItemLeft" align="right" valign="top">typedef tmat3x2< f32, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_f32mat3x2</b></td></tr>
+<tr class="separator:a1386a5915b7f4935ccae0f9a79bfb51f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad746673e0c3ba5e7027ec0e0b1682d63"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< f32, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_f32mat3x3</b></td></tr>
+<tr class="separator:ad746673e0c3ba5e7027ec0e0b1682d63"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a90a6dc116b6407408e033f73301468ee"><td class="memItemLeft" align="right" valign="top">typedef tmat3x4< f32, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_f32mat3x4</b></td></tr>
+<tr class="separator:a90a6dc116b6407408e033f73301468ee"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a766aed2871e6173a81011a877f398f04"><td class="memItemLeft" align="right" valign="top">typedef lowp_f32mat4x4 </td><td class="memItemRight" valign="bottom"><b>lowp_f32mat4</b></td></tr>
+<tr class="separator:a766aed2871e6173a81011a877f398f04"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4663c5444a670dbcbd8a7fa907148add"><td class="memItemLeft" align="right" valign="top">typedef tmat4x2< f32, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_f32mat4x2</b></td></tr>
+<tr class="separator:a4663c5444a670dbcbd8a7fa907148add"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1b3cd59a64ede38fb8ec16f9db191544"><td class="memItemLeft" align="right" valign="top">typedef tmat4x3< f32, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_f32mat4x3</b></td></tr>
+<tr class="separator:a1b3cd59a64ede38fb8ec16f9db191544"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a752dff4232933964e899b1be27f30af4"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< f32, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_f32mat4x4</b></td></tr>
+<tr class="separator:a752dff4232933964e899b1be27f30af4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa27d7ca08ddd62647ce00b1981ac3967"><td class="memItemLeft" align="right" valign="top">typedef tquat< f32, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_f32quat</b></td></tr>
+<tr class="separator:aa27d7ca08ddd62647ce00b1981ac3967"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a065441db99acdc970d6b1bca51fb0e88"><td class="memItemLeft" align="right" valign="top">typedef tvec1< f32, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_f32vec1</b></td></tr>
+<tr class="separator:a065441db99acdc970d6b1bca51fb0e88"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7e6a3c71f9084c64dee3513de2c91e6a"><td class="memItemLeft" align="right" valign="top">typedef tvec2< f32, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_f32vec2</b></td></tr>
+<tr class="separator:a7e6a3c71f9084c64dee3513de2c91e6a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acc51390c78531eff7546f1877c5a6e2a"><td class="memItemLeft" align="right" valign="top">typedef tvec3< f32, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_f32vec3</b></td></tr>
+<tr class="separator:acc51390c78531eff7546f1877c5a6e2a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3c810baad7672618d387efd82824d3f0"><td class="memItemLeft" align="right" valign="top">typedef tvec4< f32, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_f32vec4</b></td></tr>
+<tr class="separator:a3c810baad7672618d387efd82824d3f0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abc7a97c07cbfac8e35eb5e63beb4b679"><td class="memItemLeft" align="right" valign="top">typedef float64 </td><td class="memItemRight" valign="bottom"><b>lowp_f64</b></td></tr>
+<tr class="separator:abc7a97c07cbfac8e35eb5e63beb4b679"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afc730f6b4242763b0eda0ffa25150292"><td class="memItemLeft" align="right" valign="top">typedef lowp_f64mat2x2 </td><td class="memItemRight" valign="bottom"><b>lowp_f64mat2</b></td></tr>
+<tr class="separator:afc730f6b4242763b0eda0ffa25150292"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9d8b766229a9613e023da6015273c5e0"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< f64, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_f64mat2x2</b></td></tr>
+<tr class="separator:a9d8b766229a9613e023da6015273c5e0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7c9ae336839e72b32d8b54247a71ffba"><td class="memItemLeft" align="right" valign="top">typedef tmat2x3< f64, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_f64mat2x3</b></td></tr>
+<tr class="separator:a7c9ae336839e72b32d8b54247a71ffba"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a842f6af7042f44a489c45e83cf62c58c"><td class="memItemLeft" align="right" valign="top">typedef tmat2x4< f64, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_f64mat2x4</b></td></tr>
+<tr class="separator:a842f6af7042f44a489c45e83cf62c58c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a58119a41d143ebaea0df70fe882e8a40"><td class="memItemLeft" align="right" valign="top">typedef lowp_f64mat3x3 </td><td class="memItemRight" valign="bottom"><b>lowp_f64mat3</b></td></tr>
+<tr class="separator:a58119a41d143ebaea0df70fe882e8a40"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a98cd9aafec70a9d83add4b67e20e4d52"><td class="memItemLeft" align="right" valign="top">typedef tmat3x2< f64, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_f64mat3x2</b></td></tr>
+<tr class="separator:a98cd9aafec70a9d83add4b67e20e4d52"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abb9146c6416d66b57e5c3aea6f2f5c99"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< f64, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_f64mat3x3</b></td></tr>
+<tr class="separator:abb9146c6416d66b57e5c3aea6f2f5c99"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a002c5621e42eceb747ad4f8315122175"><td class="memItemLeft" align="right" valign="top">typedef tmat3x4< f64, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_f64mat3x4</b></td></tr>
+<tr class="separator:a002c5621e42eceb747ad4f8315122175"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7451266e67794bd1125163502bc4a570"><td class="memItemLeft" align="right" valign="top">typedef lowp_f64mat4x4 </td><td class="memItemRight" valign="bottom"><b>lowp_f64mat4</b></td></tr>
+<tr class="separator:a7451266e67794bd1125163502bc4a570"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a691047f2c02376e3c33abc9b09fa7d11"><td class="memItemLeft" align="right" valign="top">typedef tmat4x2< f64, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_f64mat4x2</b></td></tr>
+<tr class="separator:a691047f2c02376e3c33abc9b09fa7d11"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae5421a69235098aa087ec5fde0904854"><td class="memItemLeft" align="right" valign="top">typedef tmat4x3< f64, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_f64mat4x3</b></td></tr>
+<tr class="separator:ae5421a69235098aa087ec5fde0904854"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adc09833bf36fd52048b27158ccf442f6"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< f64, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_f64mat4x4</b></td></tr>
+<tr class="separator:adc09833bf36fd52048b27158ccf442f6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac1a96856970fd9b3dfb5a57146ee9de7"><td class="memItemLeft" align="right" valign="top">typedef tquat< f64, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_f64quat</b></td></tr>
+<tr class="separator:ac1a96856970fd9b3dfb5a57146ee9de7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6b90a9dbb5fbb8ae29fd8fbf35d35127"><td class="memItemLeft" align="right" valign="top">typedef tvec1< f64, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_f64vec1</b></td></tr>
+<tr class="separator:a6b90a9dbb5fbb8ae29fd8fbf35d35127"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac7be5ae5a2881cb153c0c3c3f7399b45"><td class="memItemLeft" align="right" valign="top">typedef tvec2< f64, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_f64vec2</b></td></tr>
+<tr class="separator:ac7be5ae5a2881cb153c0c3c3f7399b45"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7701bd67c12faf9a4bdb24a57d67a3b6"><td class="memItemLeft" align="right" valign="top">typedef tvec3< f64, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_f64vec3</b></td></tr>
+<tr class="separator:a7701bd67c12faf9a4bdb24a57d67a3b6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abee657babf6feea4385d19eb6fa5278a"><td class="memItemLeft" align="right" valign="top">typedef tvec4< f64, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_f64vec4</b></td></tr>
+<tr class="separator:abee657babf6feea4385d19eb6fa5278a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8234cea5c12583310da0fdfe62657638"><td class="memItemLeft" align="right" valign="top">typedef detail::float32 </td><td class="memItemRight" valign="bottom"><b>lowp_float32</b></td></tr>
+<tr class="separator:a8234cea5c12583310da0fdfe62657638"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7a32491c689d3ff33652770868187f27"><td class="memItemLeft" align="right" valign="top">typedef detail::float32 </td><td class="memItemRight" valign="bottom"><b>lowp_float32_t</b></td></tr>
+<tr class="separator:a7a32491c689d3ff33652770868187f27"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a60503f200138a07e57c737abfa57f5f6"><td class="memItemLeft" align="right" valign="top">typedef detail::float64 </td><td class="memItemRight" valign="bottom"><b>lowp_float64</b></td></tr>
+<tr class="separator:a60503f200138a07e57c737abfa57f5f6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a49a3b5a4f1565687927b5edb23f0b35e"><td class="memItemLeft" align="right" valign="top">typedef detail::float64 </td><td class="memItemRight" valign="bottom"><b>lowp_float64_t</b></td></tr>
+<tr class="separator:a49a3b5a4f1565687927b5edb23f0b35e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5bba0ce31210e274f73efacd3364c03f"><td class="memItemLeft" align="right" valign="top">typedef lowp_fmat2x2 </td><td class="memItemRight" valign="bottom"><b>lowp_fmat2</b></td></tr>
+<tr class="separator:a5bba0ce31210e274f73efacd3364c03f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a66f97ccbae05c652595d71ec931d7161"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< f32, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_fmat2x2</b></td></tr>
+<tr class="separator:a66f97ccbae05c652595d71ec931d7161"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac9d407a7e137ee373b310dc0bf769bf9"><td class="memItemLeft" align="right" valign="top">typedef tmat2x3< f32, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_fmat2x3</b></td></tr>
+<tr class="separator:ac9d407a7e137ee373b310dc0bf769bf9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a776e06fd5557d5dca4beecebad19aed3"><td class="memItemLeft" align="right" valign="top">typedef tmat2x4< f32, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_fmat2x4</b></td></tr>
+<tr class="separator:a776e06fd5557d5dca4beecebad19aed3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a83079315e230e8f39728f4bf0d2f9a9b"><td class="memItemLeft" align="right" valign="top">typedef lowp_fmat3x3 </td><td class="memItemRight" valign="bottom"><b>lowp_fmat3</b></td></tr>
+<tr class="separator:a83079315e230e8f39728f4bf0d2f9a9b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad171c065fd8a50e85f3f61d04011ff17"><td class="memItemLeft" align="right" valign="top">typedef tmat3x2< f32, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_fmat3x2</b></td></tr>
+<tr class="separator:ad171c065fd8a50e85f3f61d04011ff17"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab67fff920716329c921e3f3fad4ea2c3"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< f32, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_fmat3x3</b></td></tr>
+<tr class="separator:ab67fff920716329c921e3f3fad4ea2c3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a769421d99e6514dd4ca99b3d3065f037"><td class="memItemLeft" align="right" valign="top">typedef tmat3x4< f32, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_fmat3x4</b></td></tr>
+<tr class="separator:a769421d99e6514dd4ca99b3d3065f037"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5803cb9ae26399762d8bba9e0b2fc09f"><td class="memItemLeft" align="right" valign="top">typedef lowp_fmat4x4 </td><td class="memItemRight" valign="bottom"><b>lowp_fmat4</b></td></tr>
+<tr class="separator:a5803cb9ae26399762d8bba9e0b2fc09f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a037f70890ec5808175f8b8fa2a1ffbe9"><td class="memItemLeft" align="right" valign="top">typedef tmat4x2< f32, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_fmat4x2</b></td></tr>
+<tr class="separator:a037f70890ec5808175f8b8fa2a1ffbe9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0f5ea3f37178a6c8a6a6f26cb47145db"><td class="memItemLeft" align="right" valign="top">typedef tmat4x3< f32, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_fmat4x3</b></td></tr>
+<tr class="separator:a0f5ea3f37178a6c8a6a6f26cb47145db"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa389a235fe6788544cd168b6eba2e250"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< f32, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_fmat4x4</b></td></tr>
+<tr class="separator:aa389a235fe6788544cd168b6eba2e250"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afc9fc7b43c89cb6d7c989d427c3ec5a3"><td class="memItemLeft" align="right" valign="top">typedef lowp_quat </td><td class="memItemRight" valign="bottom"><b>lowp_fquat</b></td></tr>
+<tr class="separator:afc9fc7b43c89cb6d7c989d427c3ec5a3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a65eb3ab6e5f172c001e1160c6fbb4f22"><td class="memItemLeft" align="right" valign="top">typedef tvec1< float, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_fvec1</b></td></tr>
+<tr class="separator:a65eb3ab6e5f172c001e1160c6fbb4f22"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a78c8523592fea346dea7561d12337fd8"><td class="memItemLeft" align="right" valign="top">typedef tvec2< float, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_fvec2</b></td></tr>
+<tr class="separator:a78c8523592fea346dea7561d12337fd8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab7893b199d7493a88dea8bd38bd878b5"><td class="memItemLeft" align="right" valign="top">typedef tvec3< float, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_fvec3</b></td></tr>
+<tr class="separator:ab7893b199d7493a88dea8bd38bd878b5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adbeccbd85012ba9638d51b37d0b88e4e"><td class="memItemLeft" align="right" valign="top">typedef tvec4< float, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_fvec4</b></td></tr>
+<tr class="separator:adbeccbd85012ba9638d51b37d0b88e4e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga392b673fd10847bfb78fb808c6cf8ff7"><td class="memItemLeft" align="right" valign="top">typedef detail::int16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga392b673fd10847bfb78fb808c6cf8ff7">lowp_i16</a></td></tr>
+<tr class="separator:ga392b673fd10847bfb78fb808c6cf8ff7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a29d17771c7521875f7972610a274437d"><td class="memItemLeft" align="right" valign="top">typedef tvec1< i16, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_i16vec1</b></td></tr>
+<tr class="separator:a29d17771c7521875f7972610a274437d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9418f7f14075a2eb419d79dea795fe8e"><td class="memItemLeft" align="right" valign="top">typedef tvec2< i16, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_i16vec2</b></td></tr>
+<tr class="separator:a9418f7f14075a2eb419d79dea795fe8e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a572548327ac6277265d1fb0f3ba05f07"><td class="memItemLeft" align="right" valign="top">typedef tvec3< i16, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_i16vec3</b></td></tr>
+<tr class="separator:a572548327ac6277265d1fb0f3ba05f07"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a877978ecba5f4186b045507593a92d90"><td class="memItemLeft" align="right" valign="top">typedef tvec4< i16, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_i16vec4</b></td></tr>
+<tr class="separator:a877978ecba5f4186b045507593a92d90"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7ff73a45cea9613ebf1a9fad0b9f82ac"><td class="memItemLeft" align="right" valign="top">typedef detail::int32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga7ff73a45cea9613ebf1a9fad0b9f82ac">lowp_i32</a></td></tr>
+<tr class="separator:ga7ff73a45cea9613ebf1a9fad0b9f82ac"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af4d1f110d2643d0911aeaa424dd342f3"><td class="memItemLeft" align="right" valign="top">typedef tvec1< i32, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_i32vec1</b></td></tr>
+<tr class="separator:af4d1f110d2643d0911aeaa424dd342f3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab1d50e964e3ba141afc193a1e135369a"><td class="memItemLeft" align="right" valign="top">typedef tvec2< i32, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_i32vec2</b></td></tr>
+<tr class="separator:ab1d50e964e3ba141afc193a1e135369a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a669898de66e7bb5695f7a86aa8915fd9"><td class="memItemLeft" align="right" valign="top">typedef tvec3< i32, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_i32vec3</b></td></tr>
+<tr class="separator:a669898de66e7bb5695f7a86aa8915fd9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a35522d761caa8f93185a96ed9e61795d"><td class="memItemLeft" align="right" valign="top">typedef tvec4< i32, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_i32vec4</b></td></tr>
+<tr class="separator:a35522d761caa8f93185a96ed9e61795d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga354736e0c645099cd44c42fb2f87c2b8"><td class="memItemLeft" align="right" valign="top">typedef detail::int64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga354736e0c645099cd44c42fb2f87c2b8">lowp_i64</a></td></tr>
+<tr class="separator:ga354736e0c645099cd44c42fb2f87c2b8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7852c10988de095e6e685300904cb2b3"><td class="memItemLeft" align="right" valign="top">typedef tvec1< i64, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_i64vec1</b></td></tr>
+<tr class="separator:a7852c10988de095e6e685300904cb2b3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a305eb0f7ba957bb53972b7690904a24f"><td class="memItemLeft" align="right" valign="top">typedef tvec2< i64, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_i64vec2</b></td></tr>
+<tr class="separator:a305eb0f7ba957bb53972b7690904a24f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adce94f56b502977689df6693fa70c0ed"><td class="memItemLeft" align="right" valign="top">typedef tvec3< i64, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_i64vec3</b></td></tr>
+<tr class="separator:adce94f56b502977689df6693fa70c0ed"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1f9cb33adc669bb6a72329af5381b690"><td class="memItemLeft" align="right" valign="top">typedef tvec4< i64, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_i64vec4</b></td></tr>
+<tr class="separator:a1f9cb33adc669bb6a72329af5381b690"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga552a6bde5e75984efb0f863278da2e54"><td class="memItemLeft" align="right" valign="top">typedef detail::int8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga552a6bde5e75984efb0f863278da2e54">lowp_i8</a></td></tr>
+<tr class="separator:ga552a6bde5e75984efb0f863278da2e54"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a7192dd365ce8d4fa4da3257c676de267"><td class="memItemLeft" align="right" valign="top">typedef tvec1< i8, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_i8vec1</b></td></tr>
+<tr class="separator:a7192dd365ce8d4fa4da3257c676de267"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a02a47f2177b67de3ce1139e68196e56b"><td class="memItemLeft" align="right" valign="top">typedef tvec2< i8, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_i8vec2</b></td></tr>
+<tr class="separator:a02a47f2177b67de3ce1139e68196e56b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6f4179513be603c7494da45295c35bdc"><td class="memItemLeft" align="right" valign="top">typedef tvec3< i8, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_i8vec3</b></td></tr>
+<tr class="separator:a6f4179513be603c7494da45295c35bdc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a76d872db6e41d64e338a36f09b5daeb7"><td class="memItemLeft" align="right" valign="top">typedef tvec4< i8, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_i8vec4</b></td></tr>
+<tr class="separator:a76d872db6e41d64e338a36f09b5daeb7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga698e36b01167fc0f037889334dce8def"><td class="memItemLeft" align="right" valign="top">typedef detail::int16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga698e36b01167fc0f037889334dce8def">lowp_int16</a></td></tr>
+<tr class="separator:ga698e36b01167fc0f037889334dce8def"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8b2cd8d31eb345b2d641d9261c38db1a"><td class="memItemLeft" align="right" valign="top">typedef detail::int16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga8b2cd8d31eb345b2d641d9261c38db1a">lowp_int16_t</a></td></tr>
+<tr class="separator:ga8b2cd8d31eb345b2d641d9261c38db1a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga864aabca5f3296e176e0c3ed9cc16b02"><td class="memItemLeft" align="right" valign="top">typedef detail::int32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga864aabca5f3296e176e0c3ed9cc16b02">lowp_int32</a></td></tr>
+<tr class="separator:ga864aabca5f3296e176e0c3ed9cc16b02"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0350631d35ff800e6133ac6243b13cbc"><td class="memItemLeft" align="right" valign="top">typedef detail::int32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga0350631d35ff800e6133ac6243b13cbc">lowp_int32_t</a></td></tr>
+<tr class="separator:ga0350631d35ff800e6133ac6243b13cbc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf645b1a60203b39c0207baff5e3d8c3c"><td class="memItemLeft" align="right" valign="top">typedef detail::int64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaf645b1a60203b39c0207baff5e3d8c3c">lowp_int64</a></td></tr>
+<tr class="separator:gaf645b1a60203b39c0207baff5e3d8c3c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaebf341fc4a5be233f7dde962c2e33847"><td class="memItemLeft" align="right" valign="top">typedef detail::int64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaebf341fc4a5be233f7dde962c2e33847">lowp_int64_t</a></td></tr>
+<tr class="separator:gaebf341fc4a5be233f7dde962c2e33847"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga760bcf26fdb23a2c3ecad3c928a19ae6"><td class="memItemLeft" align="right" valign="top">typedef detail::int8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga760bcf26fdb23a2c3ecad3c928a19ae6">lowp_int8</a></td></tr>
+<tr class="separator:ga760bcf26fdb23a2c3ecad3c928a19ae6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga119c41d73fe9977358174eb3ac1035a3"><td class="memItemLeft" align="right" valign="top">typedef detail::int8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga119c41d73fe9977358174eb3ac1035a3">lowp_int8_t</a></td></tr>
+<tr class="separator:ga119c41d73fe9977358174eb3ac1035a3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa2d7af2016aba4edc1a14fed266317d2"><td class="memItemLeft" align="right" valign="top">typedef tquat< float, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_quat</b></td></tr>
+<tr class="separator:aa2d7af2016aba4edc1a14fed266317d2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga504ce1631cb2ac02fcf1d44d8c2aa126"><td class="memItemLeft" align="right" valign="top">typedef detail::uint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga504ce1631cb2ac02fcf1d44d8c2aa126">lowp_u16</a></td></tr>
+<tr class="separator:ga504ce1631cb2ac02fcf1d44d8c2aa126"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a016d2c4e5962ee5dcb30978f9de6ac52"><td class="memItemLeft" align="right" valign="top">typedef tvec1< u16, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_u16vec1</b></td></tr>
+<tr class="separator:a016d2c4e5962ee5dcb30978f9de6ac52"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa3bd6951d7eeae1b4f2cc50759dbf640"><td class="memItemLeft" align="right" valign="top">typedef tvec2< u16, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_u16vec2</b></td></tr>
+<tr class="separator:aa3bd6951d7eeae1b4f2cc50759dbf640"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae63c1dbdb499eb7664109fb39857bce4"><td class="memItemLeft" align="right" valign="top">typedef tvec3< u16, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_u16vec3</b></td></tr>
+<tr class="separator:ae63c1dbdb499eb7664109fb39857bce4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6baa0d373bf33bfa1aa666f557eae789"><td class="memItemLeft" align="right" valign="top">typedef tvec4< u16, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_u16vec4</b></td></tr>
+<tr class="separator:a6baa0d373bf33bfa1aa666f557eae789"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4f072ada9552e1e480bbb3b1acde5250"><td class="memItemLeft" align="right" valign="top">typedef detail::uint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga4f072ada9552e1e480bbb3b1acde5250">lowp_u32</a></td></tr>
+<tr class="separator:ga4f072ada9552e1e480bbb3b1acde5250"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad302aa571eb6955dbfc5289c7c84ca1b"><td class="memItemLeft" align="right" valign="top">typedef tvec1< u32, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_u32vec1</b></td></tr>
+<tr class="separator:ad302aa571eb6955dbfc5289c7c84ca1b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0d0d6330a6a0e7c4885f6b554535b200"><td class="memItemLeft" align="right" valign="top">typedef tvec2< u32, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_u32vec2</b></td></tr>
+<tr class="separator:a0d0d6330a6a0e7c4885f6b554535b200"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a82ab625c16f826dc658bde310158ddff"><td class="memItemLeft" align="right" valign="top">typedef tvec3< u32, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_u32vec3</b></td></tr>
+<tr class="separator:a82ab625c16f826dc658bde310158ddff"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a061f6b150324b1913490c743e756d04f"><td class="memItemLeft" align="right" valign="top">typedef tvec4< u32, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_u32vec4</b></td></tr>
+<tr class="separator:a061f6b150324b1913490c743e756d04f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga30069d1f02b19599cbfadf98c23ac6ed"><td class="memItemLeft" align="right" valign="top">typedef detail::uint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga30069d1f02b19599cbfadf98c23ac6ed">lowp_u64</a></td></tr>
+<tr class="separator:ga30069d1f02b19599cbfadf98c23ac6ed"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a318bf8bfd18ab389678d06828a28c39b"><td class="memItemLeft" align="right" valign="top">typedef tvec1< u64, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_u64vec1</b></td></tr>
+<tr class="separator:a318bf8bfd18ab389678d06828a28c39b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a833371ce41eb501163ab6ebd6205fc9a"><td class="memItemLeft" align="right" valign="top">typedef tvec2< u64, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_u64vec2</b></td></tr>
+<tr class="separator:a833371ce41eb501163ab6ebd6205fc9a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae69228b98799312c02544febb1af766b"><td class="memItemLeft" align="right" valign="top">typedef tvec3< u64, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_u64vec3</b></td></tr>
+<tr class="separator:ae69228b98799312c02544febb1af766b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3c1344b4a809a5812c7fd4aed4a7d3fb"><td class="memItemLeft" align="right" valign="top">typedef tvec4< u64, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_u64vec4</b></td></tr>
+<tr class="separator:a3c1344b4a809a5812c7fd4aed4a7d3fb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1b09f03da7ac43055c68a349d5445083"><td class="memItemLeft" align="right" valign="top">typedef detail::uint8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga1b09f03da7ac43055c68a349d5445083">lowp_u8</a></td></tr>
+<tr class="separator:ga1b09f03da7ac43055c68a349d5445083"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac31801407d2141204e74eefea0bf3ef0"><td class="memItemLeft" align="right" valign="top">typedef tvec1< u8, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_u8vec1</b></td></tr>
+<tr class="separator:ac31801407d2141204e74eefea0bf3ef0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4fbff016a05f8fb6bf793c42f4bf1cd5"><td class="memItemLeft" align="right" valign="top">typedef tvec2< u8, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_u8vec2</b></td></tr>
+<tr class="separator:a4fbff016a05f8fb6bf793c42f4bf1cd5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0cbe1a6da09be9171fc08ceadfbb758d"><td class="memItemLeft" align="right" valign="top">typedef tvec3< u8, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_u8vec3</b></td></tr>
+<tr class="separator:a0cbe1a6da09be9171fc08ceadfbb758d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a764d9393e9aff7a84825a5760e2498b9"><td class="memItemLeft" align="right" valign="top">typedef tvec4< u8, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_u8vec4</b></td></tr>
+<tr class="separator:a764d9393e9aff7a84825a5760e2498b9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad68bfd9f881856fc863a6ebca0b67f78"><td class="memItemLeft" align="right" valign="top">typedef detail::uint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gad68bfd9f881856fc863a6ebca0b67f78">lowp_uint16</a></td></tr>
+<tr class="separator:gad68bfd9f881856fc863a6ebca0b67f78"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga91c4815f93177eb423362fd296a87e9f"><td class="memItemLeft" align="right" valign="top">typedef detail::uint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga91c4815f93177eb423362fd296a87e9f">lowp_uint16_t</a></td></tr>
+<tr class="separator:ga91c4815f93177eb423362fd296a87e9f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa6a5b461bbf5fe20982472aa51896d4b"><td class="memItemLeft" align="right" valign="top">typedef detail::uint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaa6a5b461bbf5fe20982472aa51896d4b">lowp_uint32</a></td></tr>
+<tr class="separator:gaa6a5b461bbf5fe20982472aa51896d4b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf1b735b4b1145174f4e4167d13778f9b"><td class="memItemLeft" align="right" valign="top">typedef detail::uint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaf1b735b4b1145174f4e4167d13778f9b">lowp_uint32_t</a></td></tr>
+<tr class="separator:gaf1b735b4b1145174f4e4167d13778f9b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa212b805736a759998e312cbdd550fae"><td class="memItemLeft" align="right" valign="top">typedef detail::uint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaa212b805736a759998e312cbdd550fae">lowp_uint64</a></td></tr>
+<tr class="separator:gaa212b805736a759998e312cbdd550fae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8dd3a3281ae5c970ffe0c41d538aa153"><td class="memItemLeft" align="right" valign="top">typedef detail::uint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga8dd3a3281ae5c970ffe0c41d538aa153">lowp_uint64_t</a></td></tr>
+<tr class="separator:ga8dd3a3281ae5c970ffe0c41d538aa153"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf49470869e9be2c059629b250619804e"><td class="memItemLeft" align="right" valign="top">typedef detail::uint8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaf49470869e9be2c059629b250619804e">lowp_uint8</a></td></tr>
+<tr class="separator:gaf49470869e9be2c059629b250619804e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga667b2ece2b258be898812dc2177995d1"><td class="memItemLeft" align="right" valign="top">typedef detail::uint8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga667b2ece2b258be898812dc2177995d1">lowp_uint8_t</a></td></tr>
+<tr class="separator:ga667b2ece2b258be898812dc2177995d1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8931ec76b5c0c310ed8d96dfdeb6b4c1"><td class="memItemLeft" align="right" valign="top">typedef tvec1< float, lowp > </td><td class="memItemRight" valign="bottom"><b>lowp_vec1</b></td></tr>
+<tr class="separator:a8931ec76b5c0c310ed8d96dfdeb6b4c1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a51178c7b0d10cc540c01ad4cf0ece261"><td class="memItemLeft" align="right" valign="top">typedef tquat< double, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_dquat</b></td></tr>
+<tr class="separator:a51178c7b0d10cc540c01ad4cf0ece261"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3b27fcd9eaa2757f0aaf6b0ce0d85c80"><td class="memItemLeft" align="right" valign="top">typedef float32 </td><td class="memItemRight" valign="bottom"><b>mediump_f32</b></td></tr>
+<tr class="separator:a3b27fcd9eaa2757f0aaf6b0ce0d85c80"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af9020c6176a75bc84828ab01ea7dac25"><td class="memItemLeft" align="right" valign="top">typedef mediump_f32mat2x2 </td><td class="memItemRight" valign="bottom"><b>mediump_f32mat2</b></td></tr>
+<tr class="separator:af9020c6176a75bc84828ab01ea7dac25"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:afaa92b781318fb3fe43ad3e6f32be86b"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< f32, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_f32mat2x2</b></td></tr>
+<tr class="separator:afaa92b781318fb3fe43ad3e6f32be86b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1f38dab02c05c75c87ee02d7896078ec"><td class="memItemLeft" align="right" valign="top">typedef tmat2x3< f32, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_f32mat2x3</b></td></tr>
+<tr class="separator:a1f38dab02c05c75c87ee02d7896078ec"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3798dd54ed8dbba79d5f6ef22c372be3"><td class="memItemLeft" align="right" valign="top">typedef tmat2x4< f32, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_f32mat2x4</b></td></tr>
+<tr class="separator:a3798dd54ed8dbba79d5f6ef22c372be3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aaaf878d0d7bfc0aac054fe269a886ca8"><td class="memItemLeft" align="right" valign="top">typedef mediump_f32mat3x3 </td><td class="memItemRight" valign="bottom"><b>mediump_f32mat3</b></td></tr>
+<tr class="separator:aaaf878d0d7bfc0aac054fe269a886ca8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a77b8afa61c836b25ba97d9ab433ff4ca"><td class="memItemLeft" align="right" valign="top">typedef tmat3x2< f32, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_f32mat3x2</b></td></tr>
+<tr class="separator:a77b8afa61c836b25ba97d9ab433ff4ca"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a1e653136fb7152f4c817aa264d58f9db"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< f32, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_f32mat3x3</b></td></tr>
+<tr class="separator:a1e653136fb7152f4c817aa264d58f9db"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af8cef3c4749d9f699726b0b949dab473"><td class="memItemLeft" align="right" valign="top">typedef tmat3x4< f32, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_f32mat3x4</b></td></tr>
+<tr class="separator:af8cef3c4749d9f699726b0b949dab473"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4491baaebbc46a20f1cb5da985576bf4"><td class="memItemLeft" align="right" valign="top">typedef mediump_f32mat4x4 </td><td class="memItemRight" valign="bottom"><b>mediump_f32mat4</b></td></tr>
+<tr class="separator:a4491baaebbc46a20f1cb5da985576bf4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0dacc0ae65346941372958a08d918bc3"><td class="memItemLeft" align="right" valign="top">typedef tmat4x2< f32, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_f32mat4x2</b></td></tr>
+<tr class="separator:a0dacc0ae65346941372958a08d918bc3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:acc41b629cbdb64c7b8ba3c18646b8e32"><td class="memItemLeft" align="right" valign="top">typedef tmat4x3< f32, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_f32mat4x3</b></td></tr>
+<tr class="separator:acc41b629cbdb64c7b8ba3c18646b8e32"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a01a6f096db7a15dfe2fa28ea1fed183c"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< f32, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_f32mat4x4</b></td></tr>
+<tr class="separator:a01a6f096db7a15dfe2fa28ea1fed183c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abcc1b172969e868108974c92c09ba2e4"><td class="memItemLeft" align="right" valign="top">typedef tquat< f32, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_f32quat</b></td></tr>
+<tr class="separator:abcc1b172969e868108974c92c09ba2e4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af464ab0841bc7f942d55935101923e25"><td class="memItemLeft" align="right" valign="top">typedef tvec1< f32, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_f32vec1</b></td></tr>
+<tr class="separator:af464ab0841bc7f942d55935101923e25"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab0dea9959015c0ae8294360e1aafeb2a"><td class="memItemLeft" align="right" valign="top">typedef tvec2< f32, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_f32vec2</b></td></tr>
+<tr class="separator:ab0dea9959015c0ae8294360e1aafeb2a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a30b37671931aad948d1018ddc5718f34"><td class="memItemLeft" align="right" valign="top">typedef tvec3< f32, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_f32vec3</b></td></tr>
+<tr class="separator:a30b37671931aad948d1018ddc5718f34"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac462ec17fc1037e679d1086d3f26581f"><td class="memItemLeft" align="right" valign="top">typedef tvec4< f32, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_f32vec4</b></td></tr>
+<tr class="separator:ac462ec17fc1037e679d1086d3f26581f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6d40381d78472553f878f66e443feeef"><td class="memItemLeft" align="right" valign="top">typedef float64 </td><td class="memItemRight" valign="bottom"><b>mediump_f64</b></td></tr>
+<tr class="separator:a6d40381d78472553f878f66e443feeef"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac1281da5ded55047e8892b0e1f1ae965"><td class="memItemLeft" align="right" valign="top">typedef mediump_f64mat2x2 </td><td class="memItemRight" valign="bottom"><b>mediump_f64mat2</b></td></tr>
+<tr class="separator:ac1281da5ded55047e8892b0e1f1ae965"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a710c552051cdf26086a52724adeaa0b5"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< f64, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_f64mat2x2</b></td></tr>
+<tr class="separator:a710c552051cdf26086a52724adeaa0b5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af1f4fff1454eb66c97bd3eb123c86e85"><td class="memItemLeft" align="right" valign="top">typedef tmat2x3< f64, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_f64mat2x3</b></td></tr>
+<tr class="separator:af1f4fff1454eb66c97bd3eb123c86e85"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3a181f05bac20864c7b86976428cbbf2"><td class="memItemLeft" align="right" valign="top">typedef tmat2x4< f64, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_f64mat2x4</b></td></tr>
+<tr class="separator:a3a181f05bac20864c7b86976428cbbf2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad35fb67eb1d03c5a514f0bd7aed1c776"><td class="memItemLeft" align="right" valign="top">typedef mediump_f64mat3x3 </td><td class="memItemRight" valign="bottom"><b>mediump_f64mat3</b></td></tr>
+<tr class="separator:ad35fb67eb1d03c5a514f0bd7aed1c776"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5ac17da9eab988cac003014225ba5e9b"><td class="memItemLeft" align="right" valign="top">typedef tmat3x2< f64, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_f64mat3x2</b></td></tr>
+<tr class="separator:a5ac17da9eab988cac003014225ba5e9b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4d09bdb868ee5f7063c70092a929cd38"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< f64, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_f64mat3x3</b></td></tr>
+<tr class="separator:a4d09bdb868ee5f7063c70092a929cd38"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5a93213eb4f0876f713d4d00a38dab86"><td class="memItemLeft" align="right" valign="top">typedef tmat3x4< f64, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_f64mat3x4</b></td></tr>
+<tr class="separator:a5a93213eb4f0876f713d4d00a38dab86"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa805ef691c711dc41e2776cfb67f5cf5"><td class="memItemLeft" align="right" valign="top">typedef mediump_f64mat4x4 </td><td class="memItemRight" valign="bottom"><b>mediump_f64mat4</b></td></tr>
+<tr class="separator:aa805ef691c711dc41e2776cfb67f5cf5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adb511a9a5fa678b1b859364b817cee76"><td class="memItemLeft" align="right" valign="top">typedef tmat4x2< f64, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_f64mat4x2</b></td></tr>
+<tr class="separator:adb511a9a5fa678b1b859364b817cee76"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad2eae3525631e29f7e70dc79be1a9360"><td class="memItemLeft" align="right" valign="top">typedef tmat4x3< f64, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_f64mat4x3</b></td></tr>
+<tr class="separator:ad2eae3525631e29f7e70dc79be1a9360"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aaae60e8c1cf13ee2bc088999e2726332"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< f64, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_f64mat4x4</b></td></tr>
+<tr class="separator:aaae60e8c1cf13ee2bc088999e2726332"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a06275695b922e1b4f068379ee53d17f5"><td class="memItemLeft" align="right" valign="top">typedef tquat< f64, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_f64quat</b></td></tr>
+<tr class="separator:a06275695b922e1b4f068379ee53d17f5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac3ad0aef885256bf3508c4a97aa24ca7"><td class="memItemLeft" align="right" valign="top">typedef tvec1< f64, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_f64vec1</b></td></tr>
+<tr class="separator:ac3ad0aef885256bf3508c4a97aa24ca7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af3a39604855bbd7d2bf01336dbd58c7e"><td class="memItemLeft" align="right" valign="top">typedef tvec2< f64, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_f64vec2</b></td></tr>
+<tr class="separator:af3a39604855bbd7d2bf01336dbd58c7e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8621fc4ddd20c08f8c9f6f89039d7070"><td class="memItemLeft" align="right" valign="top">typedef tvec3< f64, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_f64vec3</b></td></tr>
+<tr class="separator:a8621fc4ddd20c08f8c9f6f89039d7070"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac1dee1be60722fbaba56c5e8d4055224"><td class="memItemLeft" align="right" valign="top">typedef tvec4< f64, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_f64vec4</b></td></tr>
+<tr class="separator:ac1dee1be60722fbaba56c5e8d4055224"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9a90f18a9d062cd5b8046cbb59ef7296"><td class="memItemLeft" align="right" valign="top">typedef detail::float32 </td><td class="memItemRight" valign="bottom"><b>mediump_float32</b></td></tr>
+<tr class="separator:a9a90f18a9d062cd5b8046cbb59ef7296"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8a3a6b5ac1518e864900bdbf6983b54e"><td class="memItemLeft" align="right" valign="top">typedef detail::float32 </td><td class="memItemRight" valign="bottom"><b>mediump_float32_t</b></td></tr>
+<tr class="separator:a8a3a6b5ac1518e864900bdbf6983b54e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a729f6f704ff850a84819c09daf22bf96"><td class="memItemLeft" align="right" valign="top">typedef detail::float64 </td><td class="memItemRight" valign="bottom"><b>mediump_float64</b></td></tr>
+<tr class="separator:a729f6f704ff850a84819c09daf22bf96"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0cd2f21770615d0b0c46daa9a820f2e9"><td class="memItemLeft" align="right" valign="top">typedef detail::float64 </td><td class="memItemRight" valign="bottom"><b>mediump_float64_t</b></td></tr>
+<tr class="separator:a0cd2f21770615d0b0c46daa9a820f2e9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a74e9133378fd0b4da8ac0bc0876702ff"><td class="memItemLeft" align="right" valign="top">typedef mediump_fmat2x2 </td><td class="memItemRight" valign="bottom"><b>mediump_fmat2</b></td></tr>
+<tr class="separator:a74e9133378fd0b4da8ac0bc0876702ff"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a14e3419dd3ed51ae829fba0eeb37a798"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< f32, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_fmat2x2</b></td></tr>
+<tr class="separator:a14e3419dd3ed51ae829fba0eeb37a798"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aad419b656765f99413130f262902f70b"><td class="memItemLeft" align="right" valign="top">typedef tmat2x3< f32, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_fmat2x3</b></td></tr>
+<tr class="separator:aad419b656765f99413130f262902f70b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5ad760dc3087dbe4b81f4735b87c8bff"><td class="memItemLeft" align="right" valign="top">typedef tmat2x4< f32, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_fmat2x4</b></td></tr>
+<tr class="separator:a5ad760dc3087dbe4b81f4735b87c8bff"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a80823dfad5dba98512c76af498343847"><td class="memItemLeft" align="right" valign="top">typedef mediump_fmat3x3 </td><td class="memItemRight" valign="bottom"><b>mediump_fmat3</b></td></tr>
+<tr class="separator:a80823dfad5dba98512c76af498343847"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a5f983e9b6ce2fc4b5bcf48bde86b6c1d"><td class="memItemLeft" align="right" valign="top">typedef tmat3x2< f32, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_fmat3x2</b></td></tr>
+<tr class="separator:a5f983e9b6ce2fc4b5bcf48bde86b6c1d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8122275ad0c77b823ed2d0d0fde9e6c8"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< f32, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_fmat3x3</b></td></tr>
+<tr class="separator:a8122275ad0c77b823ed2d0d0fde9e6c8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8acbe700ac34420e69435e9a1e7106a6"><td class="memItemLeft" align="right" valign="top">typedef tmat3x4< f32, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_fmat3x4</b></td></tr>
+<tr class="separator:a8acbe700ac34420e69435e9a1e7106a6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac1c38778c0b5a1263f07753c05a4f7b9"><td class="memItemLeft" align="right" valign="top">typedef mediump_fmat4x4 </td><td class="memItemRight" valign="bottom"><b>mediump_fmat4</b></td></tr>
+<tr class="separator:ac1c38778c0b5a1263f07753c05a4f7b9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a382a9afa22b0cb41c08e714e9964df18"><td class="memItemLeft" align="right" valign="top">typedef tmat4x2< f32, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_fmat4x2</b></td></tr>
+<tr class="separator:a382a9afa22b0cb41c08e714e9964df18"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:adca208020ec5e450122c5b78b92c311b"><td class="memItemLeft" align="right" valign="top">typedef tmat4x3< f32, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_fmat4x3</b></td></tr>
+<tr class="separator:adca208020ec5e450122c5b78b92c311b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a046dc4e877ae0f041b559ebb8986472f"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< f32, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_fmat4x4</b></td></tr>
+<tr class="separator:a046dc4e877ae0f041b559ebb8986472f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4001f0bde084c58673e6e62116e90702"><td class="memItemLeft" align="right" valign="top">typedef mediump_quat </td><td class="memItemRight" valign="bottom"><b>mediump_fquat</b></td></tr>
+<tr class="separator:a4001f0bde084c58673e6e62116e90702"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a218a7c4d23b962a9bb33adf59ceb8200"><td class="memItemLeft" align="right" valign="top">typedef tvec1< float, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_fvec1</b></td></tr>
+<tr class="separator:a218a7c4d23b962a9bb33adf59ceb8200"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a76feac551dafafd145eb95d558f86b8e"><td class="memItemLeft" align="right" valign="top">typedef tvec2< float, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_fvec2</b></td></tr>
+<tr class="separator:a76feac551dafafd145eb95d558f86b8e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a25ecd692875d6f455dcb6d8bc80b0d26"><td class="memItemLeft" align="right" valign="top">typedef tvec3< float, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_fvec3</b></td></tr>
+<tr class="separator:a25ecd692875d6f455dcb6d8bc80b0d26"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a328c393cd9a393b33342acbf9b91bf72"><td class="memItemLeft" align="right" valign="top">typedef tvec4< float, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_fvec4</b></td></tr>
+<tr class="separator:a328c393cd9a393b33342acbf9b91bf72"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga62a17cddeb4dffb4e18fe3aea23f051a"><td class="memItemLeft" align="right" valign="top">typedef detail::int16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga62a17cddeb4dffb4e18fe3aea23f051a">mediump_i16</a></td></tr>
+<tr class="separator:ga62a17cddeb4dffb4e18fe3aea23f051a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aacc9b5576745206f26ffa9386d4aa883"><td class="memItemLeft" align="right" valign="top">typedef tvec1< i16, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_i16vec1</b></td></tr>
+<tr class="separator:aacc9b5576745206f26ffa9386d4aa883"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac5c4faa5372f985078762db4574bb9d4"><td class="memItemLeft" align="right" valign="top">typedef tvec2< i16, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_i16vec2</b></td></tr>
+<tr class="separator:ac5c4faa5372f985078762db4574bb9d4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad9f994bcfaa4716905cb8c7f81fe1f46"><td class="memItemLeft" align="right" valign="top">typedef tvec3< i16, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_i16vec3</b></td></tr>
+<tr class="separator:ad9f994bcfaa4716905cb8c7f81fe1f46"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abb0c81e9e6d4210216f4d911736aefad"><td class="memItemLeft" align="right" valign="top">typedef tvec4< i16, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_i16vec4</b></td></tr>
+<tr class="separator:abb0c81e9e6d4210216f4d911736aefad"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf5e94bf2a20af7601787c154751dc2e1"><td class="memItemLeft" align="right" valign="top">typedef detail::int32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaf5e94bf2a20af7601787c154751dc2e1">mediump_i32</a></td></tr>
+<tr class="separator:gaf5e94bf2a20af7601787c154751dc2e1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a75733ed8258c5e65ac97160c4a6c953a"><td class="memItemLeft" align="right" valign="top">typedef tvec1< i32, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_i32vec1</b></td></tr>
+<tr class="separator:a75733ed8258c5e65ac97160c4a6c953a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9183cdcdfe5d810078b3eecd1e66aa0a"><td class="memItemLeft" align="right" valign="top">typedef tvec2< i32, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_i32vec2</b></td></tr>
+<tr class="separator:a9183cdcdfe5d810078b3eecd1e66aa0a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad6446c3c348eee2276ddcbfcc28aacc7"><td class="memItemLeft" align="right" valign="top">typedef tvec3< i32, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_i32vec3</b></td></tr>
+<tr class="separator:ad6446c3c348eee2276ddcbfcc28aacc7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae3eec682aede6e122daed84e2f38971d"><td class="memItemLeft" align="right" valign="top">typedef tvec4< i32, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_i32vec4</b></td></tr>
+<tr class="separator:ae3eec682aede6e122daed84e2f38971d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3ebcb1f6d8d8387253de8bccb058d77f"><td class="memItemLeft" align="right" valign="top">typedef detail::int64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga3ebcb1f6d8d8387253de8bccb058d77f">mediump_i64</a></td></tr>
+<tr class="separator:ga3ebcb1f6d8d8387253de8bccb058d77f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a42af3af0131095f8445ddd0738d76827"><td class="memItemLeft" align="right" valign="top">typedef tvec1< i64, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_i64vec1</b></td></tr>
+<tr class="separator:a42af3af0131095f8445ddd0738d76827"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a80e458f3c0e9fb01d4695637a7ac0e5b"><td class="memItemLeft" align="right" valign="top">typedef tvec2< i64, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_i64vec2</b></td></tr>
+<tr class="separator:a80e458f3c0e9fb01d4695637a7ac0e5b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aa521bedc4cdd40c72880e426661f5603"><td class="memItemLeft" align="right" valign="top">typedef tvec3< i64, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_i64vec3</b></td></tr>
+<tr class="separator:aa521bedc4cdd40c72880e426661f5603"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a44f3bdc69f2b2b919c8b68852dbcfad6"><td class="memItemLeft" align="right" valign="top">typedef tvec4< i64, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_i64vec4</b></td></tr>
+<tr class="separator:a44f3bdc69f2b2b919c8b68852dbcfad6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gacf1ded173e1e2d049c511d095b259e21"><td class="memItemLeft" align="right" valign="top">typedef detail::int8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gacf1ded173e1e2d049c511d095b259e21">mediump_i8</a></td></tr>
+<tr class="separator:gacf1ded173e1e2d049c511d095b259e21"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad1256e00d07c078cb4471eaba0f0c2d9"><td class="memItemLeft" align="right" valign="top">typedef tvec1< i8, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_i8vec1</b></td></tr>
+<tr class="separator:ad1256e00d07c078cb4471eaba0f0c2d9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aafab5df83068e06bca1dbaa63da08f99"><td class="memItemLeft" align="right" valign="top">typedef tvec2< i8, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_i8vec2</b></td></tr>
+<tr class="separator:aafab5df83068e06bca1dbaa63da08f99"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0455c25b51ff2d28eb036f34c7f3d486"><td class="memItemLeft" align="right" valign="top">typedef tvec3< i8, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_i8vec3</b></td></tr>
+<tr class="separator:a0455c25b51ff2d28eb036f34c7f3d486"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac6d4413001e39e2f0f2d32b501867a56"><td class="memItemLeft" align="right" valign="top">typedef tvec4< i8, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_i8vec4</b></td></tr>
+<tr class="separator:ac6d4413001e39e2f0f2d32b501867a56"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gadff3608baa4b5bd3ed28f95c1c2c345d"><td class="memItemLeft" align="right" valign="top">typedef detail::int16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gadff3608baa4b5bd3ed28f95c1c2c345d">mediump_int16</a></td></tr>
+<tr class="separator:gadff3608baa4b5bd3ed28f95c1c2c345d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga80e72fe94c88498537e8158ba7591c54"><td class="memItemLeft" align="right" valign="top">typedef detail::int16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga80e72fe94c88498537e8158ba7591c54">mediump_int16_t</a></td></tr>
+<tr class="separator:ga80e72fe94c88498537e8158ba7591c54"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5244cef85d6e870e240c76428a262ae8"><td class="memItemLeft" align="right" valign="top">typedef detail::int32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga5244cef85d6e870e240c76428a262ae8">mediump_int32</a></td></tr>
+<tr class="separator:ga5244cef85d6e870e240c76428a262ae8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga26fc7ced1ad7ca5024f1c973c8dc9180"><td class="memItemLeft" align="right" valign="top">typedef detail::int32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga26fc7ced1ad7ca5024f1c973c8dc9180">mediump_int32_t</a></td></tr>
+<tr class="separator:ga26fc7ced1ad7ca5024f1c973c8dc9180"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7b968f2b86a0442a89c7359171e1d866"><td class="memItemLeft" align="right" valign="top">typedef detail::int64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga7b968f2b86a0442a89c7359171e1d866">mediump_int64</a></td></tr>
+<tr class="separator:ga7b968f2b86a0442a89c7359171e1d866"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac3bc41bcac61d1ba8f02a6f68ce23f64"><td class="memItemLeft" align="right" valign="top">typedef detail::int64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gac3bc41bcac61d1ba8f02a6f68ce23f64">mediump_int64_t</a></td></tr>
+<tr class="separator:gac3bc41bcac61d1ba8f02a6f68ce23f64"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6fbd69cbdaa44345bff923a2cf63de7e"><td class="memItemLeft" align="right" valign="top">typedef detail::int8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga6fbd69cbdaa44345bff923a2cf63de7e">mediump_int8</a></td></tr>
+<tr class="separator:ga6fbd69cbdaa44345bff923a2cf63de7e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6d7b3789ecb932c26430009478cac7ae"><td class="memItemLeft" align="right" valign="top">typedef detail::int8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga6d7b3789ecb932c26430009478cac7ae">mediump_int8_t</a></td></tr>
+<tr class="separator:ga6d7b3789ecb932c26430009478cac7ae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af519098b37a0cfefa5886647dc38e508"><td class="memItemLeft" align="right" valign="top">typedef tquat< float, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_quat</b></td></tr>
+<tr class="separator:af519098b37a0cfefa5886647dc38e508"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9df98857be695d5a30cb30f5bfa38a80"><td class="memItemLeft" align="right" valign="top">typedef detail::uint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga9df98857be695d5a30cb30f5bfa38a80">mediump_u16</a></td></tr>
+<tr class="separator:ga9df98857be695d5a30cb30f5bfa38a80"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9c3b4b9dff5b90eab9d71c47e2d3fb98"><td class="memItemLeft" align="right" valign="top">typedef tvec1< u16, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_u16vec1</b></td></tr>
+<tr class="separator:a9c3b4b9dff5b90eab9d71c47e2d3fb98"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4be7f884cf27a80820cf5fcefeab1459"><td class="memItemLeft" align="right" valign="top">typedef tvec2< u16, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_u16vec2</b></td></tr>
+<tr class="separator:a4be7f884cf27a80820cf5fcefeab1459"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0a253c3e5826e0b99a82b4c3a81900e1"><td class="memItemLeft" align="right" valign="top">typedef tvec3< u16, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_u16vec3</b></td></tr>
+<tr class="separator:a0a253c3e5826e0b99a82b4c3a81900e1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4005c6c2ffb591975adbf0aa73fedc8c"><td class="memItemLeft" align="right" valign="top">typedef tvec4< u16, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_u16vec4</b></td></tr>
+<tr class="separator:a4005c6c2ffb591975adbf0aa73fedc8c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1bd0e914158bf03135f8a317de6debe9"><td class="memItemLeft" align="right" valign="top">typedef detail::uint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga1bd0e914158bf03135f8a317de6debe9">mediump_u32</a></td></tr>
+<tr class="separator:ga1bd0e914158bf03135f8a317de6debe9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a89aa9ebbc28768a9ecb993ea366ce73c"><td class="memItemLeft" align="right" valign="top">typedef tvec1< u32, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_u32vec1</b></td></tr>
+<tr class="separator:a89aa9ebbc28768a9ecb993ea366ce73c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4611b14a12ec8b0b5988ed93c6060432"><td class="memItemLeft" align="right" valign="top">typedef tvec2< u32, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_u32vec2</b></td></tr>
+<tr class="separator:a4611b14a12ec8b0b5988ed93c6060432"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a43bfb277372a5f8a1ab54c20b77467f1"><td class="memItemLeft" align="right" valign="top">typedef tvec3< u32, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_u32vec3</b></td></tr>
+<tr class="separator:a43bfb277372a5f8a1ab54c20b77467f1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a3093e6b1ceef9b6696333b3f6f8e6eef"><td class="memItemLeft" align="right" valign="top">typedef tvec4< u32, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_u32vec4</b></td></tr>
+<tr class="separator:a3093e6b1ceef9b6696333b3f6f8e6eef"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2af9490085ae3bdf36a544e9dd073610"><td class="memItemLeft" align="right" valign="top">typedef detail::uint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga2af9490085ae3bdf36a544e9dd073610">mediump_u64</a></td></tr>
+<tr class="separator:ga2af9490085ae3bdf36a544e9dd073610"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af5c2b2f4b5a5e55285fb6e48360008a9"><td class="memItemLeft" align="right" valign="top">typedef tvec1< u64, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_u64vec1</b></td></tr>
+<tr class="separator:af5c2b2f4b5a5e55285fb6e48360008a9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ad068ce110bf95f22cff8206a9fb4ba2a"><td class="memItemLeft" align="right" valign="top">typedef tvec2< u64, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_u64vec2</b></td></tr>
+<tr class="separator:ad068ce110bf95f22cff8206a9fb4ba2a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a6f514640b5b5827ede77642ebbbf5e68"><td class="memItemLeft" align="right" valign="top">typedef tvec3< u64, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_u64vec3</b></td></tr>
+<tr class="separator:a6f514640b5b5827ede77642ebbbf5e68"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab41db7da28e5948330db80f5ca75d850"><td class="memItemLeft" align="right" valign="top">typedef tvec4< u64, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_u64vec4</b></td></tr>
+<tr class="separator:ab41db7da28e5948330db80f5ca75d850"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad1213a22bbb9e4107f07eaa4956f8281"><td class="memItemLeft" align="right" valign="top">typedef detail::uint8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gad1213a22bbb9e4107f07eaa4956f8281">mediump_u8</a></td></tr>
+<tr class="separator:gad1213a22bbb9e4107f07eaa4956f8281"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a8c4001fcbff65fd29da82274a5d3ff38"><td class="memItemLeft" align="right" valign="top">typedef tvec1< u8, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_u8vec1</b></td></tr>
+<tr class="separator:a8c4001fcbff65fd29da82274a5d3ff38"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a020049aa2177e8e08d2b338a5e904dc9"><td class="memItemLeft" align="right" valign="top">typedef tvec2< u8, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_u8vec2</b></td></tr>
+<tr class="separator:a020049aa2177e8e08d2b338a5e904dc9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a06b978aef31306f3cfd3d8b6094f3ce3"><td class="memItemLeft" align="right" valign="top">typedef tvec3< u8, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_u8vec3</b></td></tr>
+<tr class="separator:a06b978aef31306f3cfd3d8b6094f3ce3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a0ee5018e2f37029d5800e32fbcf74c74"><td class="memItemLeft" align="right" valign="top">typedef tvec4< u8, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_u8vec4</b></td></tr>
+<tr class="separator:a0ee5018e2f37029d5800e32fbcf74c74"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2885a6c89916911e418c06bb76b9bdbb"><td class="memItemLeft" align="right" valign="top">typedef detail::uint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga2885a6c89916911e418c06bb76b9bdbb">mediump_uint16</a></td></tr>
+<tr class="separator:ga2885a6c89916911e418c06bb76b9bdbb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3963b1050fc65a383ee28e3f827b6e3e"><td class="memItemLeft" align="right" valign="top">typedef detail::uint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga3963b1050fc65a383ee28e3f827b6e3e">mediump_uint16_t</a></td></tr>
+<tr class="separator:ga3963b1050fc65a383ee28e3f827b6e3e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga34dd5ec1988c443bae80f1b20a8ade5f"><td class="memItemLeft" align="right" valign="top">typedef detail::uint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga34dd5ec1988c443bae80f1b20a8ade5f">mediump_uint32</a></td></tr>
+<tr class="separator:ga34dd5ec1988c443bae80f1b20a8ade5f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf4dae276fd29623950de14a6ca2586b5"><td class="memItemLeft" align="right" valign="top">typedef detail::uint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaf4dae276fd29623950de14a6ca2586b5">mediump_uint32_t</a></td></tr>
+<tr class="separator:gaf4dae276fd29623950de14a6ca2586b5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga30652709815ad9404272a31957daa59e"><td class="memItemLeft" align="right" valign="top">typedef detail::uint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga30652709815ad9404272a31957daa59e">mediump_uint64</a></td></tr>
+<tr class="separator:ga30652709815ad9404272a31957daa59e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9b170dd4a8f38448a2dc93987c7875e9"><td class="memItemLeft" align="right" valign="top">typedef detail::uint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga9b170dd4a8f38448a2dc93987c7875e9">mediump_uint64_t</a></td></tr>
+<tr class="separator:ga9b170dd4a8f38448a2dc93987c7875e9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1fa92a233b9110861cdbc8c2ccf0b5a3"><td class="memItemLeft" align="right" valign="top">typedef detail::uint8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga1fa92a233b9110861cdbc8c2ccf0b5a3">mediump_uint8</a></td></tr>
+<tr class="separator:ga1fa92a233b9110861cdbc8c2ccf0b5a3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gadfe65c78231039e90507770db50c98c7"><td class="memItemLeft" align="right" valign="top">typedef detail::uint8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gadfe65c78231039e90507770db50c98c7">mediump_uint8_t</a></td></tr>
+<tr class="separator:gadfe65c78231039e90507770db50c98c7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac9bd33e4fdd9fce967a9f4a5e5ab70b4"><td class="memItemLeft" align="right" valign="top">typedef tvec1< float, mediump > </td><td class="memItemRight" valign="bottom"><b>mediump_vec1</b></td></tr>
+<tr class="separator:ac9bd33e4fdd9fce967a9f4a5e5ab70b4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a2fad291f6402e228d28779df175ba37a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2fad291f6402e228d28779df175ba37a"></a>
+typedef highp_quat </td><td class="memItemRight" valign="bottom"><b>quat</b></td></tr>
+<tr class="separator:a2fad291f6402e228d28779df175ba37a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa2d7acc0adb536fab71fe261232a40ff"><td class="memItemLeft" align="right" valign="top">typedef detail::uint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaa2d7acc0adb536fab71fe261232a40ff">u16</a></td></tr>
+<tr class="separator:gaa2d7acc0adb536fab71fe261232a40ff"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaefa2ce8fbdbe89baffd262f46f2d5907"><td class="memItemLeft" align="right" valign="top">typedef highp_u16vec1 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaefa2ce8fbdbe89baffd262f46f2d5907">u16vec1</a></td></tr>
+<tr class="separator:gaefa2ce8fbdbe89baffd262f46f2d5907"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga426030555085ed6c39a54e73afbef962"><td class="memItemLeft" align="right" valign="top">typedef highp_u16vec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga426030555085ed6c39a54e73afbef962">u16vec2</a></td></tr>
+<tr class="separator:ga426030555085ed6c39a54e73afbef962"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7f5dbe417199277e449b8db0210acb71"><td class="memItemLeft" align="right" valign="top">typedef highp_u16vec3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga7f5dbe417199277e449b8db0210acb71">u16vec3</a></td></tr>
+<tr class="separator:ga7f5dbe417199277e449b8db0210acb71"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf524c9059f0342668d8eea359bcceaae"><td class="memItemLeft" align="right" valign="top">typedef highp_u16vec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaf524c9059f0342668d8eea359bcceaae">u16vec4</a></td></tr>
+<tr class="separator:gaf524c9059f0342668d8eea359bcceaae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8165913e068444f7842302d40ba897b9"><td class="memItemLeft" align="right" valign="top">typedef detail::uint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga8165913e068444f7842302d40ba897b9">u32</a></td></tr>
+<tr class="separator:ga8165913e068444f7842302d40ba897b9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga913a8bd51e4ebccd30ad488de3c18da9"><td class="memItemLeft" align="right" valign="top">typedef highp_u32vec1 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga913a8bd51e4ebccd30ad488de3c18da9">u32vec1</a></td></tr>
+<tr class="separator:ga913a8bd51e4ebccd30ad488de3c18da9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0741d40e2b0fea4f1c50cb325114f075"><td class="memItemLeft" align="right" valign="top">typedef highp_u32vec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga0741d40e2b0fea4f1c50cb325114f075">u32vec2</a></td></tr>
+<tr class="separator:ga0741d40e2b0fea4f1c50cb325114f075"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad9b52e1c271cb9c8bfae6365d3e38a23"><td class="memItemLeft" align="right" valign="top">typedef highp_u32vec3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gad9b52e1c271cb9c8bfae6365d3e38a23">u32vec3</a></td></tr>
+<tr class="separator:gad9b52e1c271cb9c8bfae6365d3e38a23"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga155ac7e9e454e2b1f73d11e1e28a0fd6"><td class="memItemLeft" align="right" valign="top">typedef highp_u32vec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga155ac7e9e454e2b1f73d11e1e28a0fd6">u32vec4</a></td></tr>
+<tr class="separator:ga155ac7e9e454e2b1f73d11e1e28a0fd6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf3f312156984c365e9f65620354da70b"><td class="memItemLeft" align="right" valign="top">typedef detail::uint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaf3f312156984c365e9f65620354da70b">u64</a></td></tr>
+<tr class="separator:gaf3f312156984c365e9f65620354da70b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga793c9293cc687a0e342396a377c5df77"><td class="memItemLeft" align="right" valign="top">typedef highp_u64vec1 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga793c9293cc687a0e342396a377c5df77">u64vec1</a></td></tr>
+<tr class="separator:ga793c9293cc687a0e342396a377c5df77"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2204827de9d4ee7fa92ef497093f7d6e"><td class="memItemLeft" align="right" valign="top">typedef highp_u64vec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga2204827de9d4ee7fa92ef497093f7d6e">u64vec2</a></td></tr>
+<tr class="separator:ga2204827de9d4ee7fa92ef497093f7d6e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3460933f040f59f0fedb29df1e9be71c"><td class="memItemLeft" align="right" valign="top">typedef highp_u64vec3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga3460933f040f59f0fedb29df1e9be71c">u64vec3</a></td></tr>
+<tr class="separator:ga3460933f040f59f0fedb29df1e9be71c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafb6ca34df28889a5db9d244aed375411"><td class="memItemLeft" align="right" valign="top">typedef highp_u64vec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gafb6ca34df28889a5db9d244aed375411">u64vec4</a></td></tr>
+<tr class="separator:gafb6ca34df28889a5db9d244aed375411"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaecc7082561fc9028b844b6cf3d305d36"><td class="memItemLeft" align="right" valign="top">typedef detail::uint8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaecc7082561fc9028b844b6cf3d305d36">u8</a></td></tr>
+<tr class="separator:gaecc7082561fc9028b844b6cf3d305d36"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga92e0c191e5cc326255284d08be3af7c5"><td class="memItemLeft" align="right" valign="top">typedef highp_u8vec1 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga92e0c191e5cc326255284d08be3af7c5">u8vec1</a></td></tr>
+<tr class="separator:ga92e0c191e5cc326255284d08be3af7c5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga61667c99caf60ce6c48ebbbac72bd91d"><td class="memItemLeft" align="right" valign="top">typedef highp_u8vec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga61667c99caf60ce6c48ebbbac72bd91d">u8vec2</a></td></tr>
+<tr class="separator:ga61667c99caf60ce6c48ebbbac72bd91d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8ca60d0ba6d438892be6017f43747661"><td class="memItemLeft" align="right" valign="top">typedef highp_u8vec3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga8ca60d0ba6d438892be6017f43747661">u8vec3</a></td></tr>
+<tr class="separator:ga8ca60d0ba6d438892be6017f43747661"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga114e005014d910bea07954eee24b7efb"><td class="memItemLeft" align="right" valign="top">typedef highp_u8vec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga114e005014d910bea07954eee24b7efb">u8vec4</a></td></tr>
+<tr class="separator:ga114e005014d910bea07954eee24b7efb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga91f91f411080c37730856ff5887f5bcf"><td class="memItemLeft" align="right" valign="top">typedef detail::uint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga91f91f411080c37730856ff5887f5bcf">uint16_t</a></td></tr>
+<tr class="separator:ga91f91f411080c37730856ff5887f5bcf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2171d9dc1fefb1c82e2817f45b622eac"><td class="memItemLeft" align="right" valign="top">typedef detail::uint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga2171d9dc1fefb1c82e2817f45b622eac">uint32_t</a></td></tr>
+<tr class="separator:ga2171d9dc1fefb1c82e2817f45b622eac"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3999d3e7ff22025c16ddb601e14dfdee"><td class="memItemLeft" align="right" valign="top">typedef detail::uint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga3999d3e7ff22025c16ddb601e14dfdee">uint64_t</a></td></tr>
+<tr class="separator:ga3999d3e7ff22025c16ddb601e14dfdee"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga28d97808322d3c92186e4a0c067d7e8e"><td class="memItemLeft" align="right" valign="top">typedef detail::uint8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga28d97808322d3c92186e4a0c067d7e8e">uint8_t</a></td></tr>
+<tr class="separator:ga28d97808322d3c92186e4a0c067d7e8e"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+
+<p>Definition in file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00038_source.html b/src/third_party/glm/doc/api/a00038_source.html
new file mode 100644
index 0000000..278b4d1
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00038_source.html
@@ -0,0 +1,1716 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: fwd.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">fwd.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00038.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include "<a class="code" href="a00113.html">detail/type_int.hpp</a>"</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#include "<a class="code" href="a00110.html">detail/type_float.hpp</a>"</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor">#include "<a class="code" href="a00127.html">detail/type_vec.hpp</a>"</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#include "<a class="code" href="a00114.html">detail/type_mat.hpp</a>"</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> </div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">// GLM_GTC_quaternion</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> {</div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> <span class="keyword">struct </span>tquat;</div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <span class="keyword">typedef</span> tquat<float, lowp> lowp_quat;</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <span class="keyword">typedef</span> tquat<float, mediump> mediump_quat;</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keyword">typedef</span> tquat<float, highp> highp_quat;</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#if(defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keyword">typedef</span> highp_quat quat;</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keyword">typedef</span> mediump_quat quat;</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && defined(GLM_PRECISION_LOWP_FLOAT))</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keyword">typedef</span> lowp_quat quat;</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keyword">typedef</span> highp_quat quat;</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keyword">typedef</span> lowp_quat lowp_fquat;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keyword">typedef</span> mediump_quat mediump_fquat;</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keyword">typedef</span> highp_quat highp_fquat;</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keyword">typedef</span> quat fquat;</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keyword">typedef</span> tquat<double, lowp> lowp_dquat;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  </div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keyword">typedef</span> tquat<double, mediump> mediump_dquat;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  </div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keyword">typedef</span> tquat<double, highp> highp_dquat;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  </div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="preprocessor">#if(defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE))</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keyword">typedef</span> highp_dquat dquat;</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="preprocessor">#elif(!defined(GLM_PRECISION_HIGHP_DOUBLE) && defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE))</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keyword">typedef</span> mediump_dquat dquat;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="preprocessor">#elif(!defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && defined(GLM_PRECISION_LOWP_DOUBLE))</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keyword">typedef</span> lowp_dquat dquat;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="preprocessor">#elif(!defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE))</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="keyword">typedef</span> highp_dquat dquat;</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="comment">// GLM_GTC_precision</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> {</div>
+<div class="line"><a name="l00100"></a><span class="lineno"><a class="line" href="a00177.html#ga760bcf26fdb23a2c3ecad3c928a19ae6"> 100</a></span>  <span class="keyword">typedef</span> detail::int8 <a class="code" href="a00177.html#ga760bcf26fdb23a2c3ecad3c928a19ae6">lowp_int8</a>;</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  </div>
+<div class="line"><a name="l00104"></a><span class="lineno"><a class="line" href="a00177.html#ga698e36b01167fc0f037889334dce8def"> 104</a></span>  <span class="keyword">typedef</span> detail::int16 <a class="code" href="a00177.html#ga698e36b01167fc0f037889334dce8def">lowp_int16</a>;</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno"><a class="line" href="a00177.html#ga864aabca5f3296e176e0c3ed9cc16b02"> 108</a></span>  <span class="keyword">typedef</span> detail::int32 <a class="code" href="a00177.html#ga864aabca5f3296e176e0c3ed9cc16b02">lowp_int32</a>;</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno"><a class="line" href="a00177.html#gaf645b1a60203b39c0207baff5e3d8c3c"> 112</a></span>  <span class="keyword">typedef</span> detail::int64 <a class="code" href="a00177.html#gaf645b1a60203b39c0207baff5e3d8c3c">lowp_int64</a>;</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno"><a class="line" href="a00177.html#ga119c41d73fe9977358174eb3ac1035a3"> 116</a></span>  <span class="keyword">typedef</span> detail::int8 <a class="code" href="a00177.html#ga119c41d73fe9977358174eb3ac1035a3">lowp_int8_t</a>;</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  </div>
+<div class="line"><a name="l00120"></a><span class="lineno"><a class="line" href="a00177.html#ga8b2cd8d31eb345b2d641d9261c38db1a"> 120</a></span>  <span class="keyword">typedef</span> detail::int16 <a class="code" href="a00177.html#ga8b2cd8d31eb345b2d641d9261c38db1a">lowp_int16_t</a>;</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno"><a class="line" href="a00177.html#ga0350631d35ff800e6133ac6243b13cbc"> 124</a></span>  <span class="keyword">typedef</span> detail::int32 <a class="code" href="a00177.html#ga0350631d35ff800e6133ac6243b13cbc">lowp_int32_t</a>;</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno"><a class="line" href="a00177.html#gaebf341fc4a5be233f7dde962c2e33847"> 128</a></span>  <span class="keyword">typedef</span> detail::int64 <a class="code" href="a00177.html#gaebf341fc4a5be233f7dde962c2e33847">lowp_int64_t</a>;</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno"><a class="line" href="a00177.html#ga552a6bde5e75984efb0f863278da2e54"> 132</a></span>  <span class="keyword">typedef</span> detail::int8 <a class="code" href="a00177.html#ga552a6bde5e75984efb0f863278da2e54">lowp_i8</a>;</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  </div>
+<div class="line"><a name="l00136"></a><span class="lineno"><a class="line" href="a00177.html#ga392b673fd10847bfb78fb808c6cf8ff7"> 136</a></span>  <span class="keyword">typedef</span> detail::int16 <a class="code" href="a00177.html#ga392b673fd10847bfb78fb808c6cf8ff7">lowp_i16</a>;</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno"><a class="line" href="a00177.html#ga7ff73a45cea9613ebf1a9fad0b9f82ac"> 140</a></span>  <span class="keyword">typedef</span> detail::int32 <a class="code" href="a00177.html#ga7ff73a45cea9613ebf1a9fad0b9f82ac">lowp_i32</a>;</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno"><a class="line" href="a00177.html#ga354736e0c645099cd44c42fb2f87c2b8"> 144</a></span>  <span class="keyword">typedef</span> detail::int64 <a class="code" href="a00177.html#ga354736e0c645099cd44c42fb2f87c2b8">lowp_i64</a>;</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno"><a class="line" href="a00177.html#ga6fbd69cbdaa44345bff923a2cf63de7e"> 148</a></span>  <span class="keyword">typedef</span> detail::int8 <a class="code" href="a00177.html#ga6fbd69cbdaa44345bff923a2cf63de7e">mediump_int8</a>;</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  </div>
+<div class="line"><a name="l00152"></a><span class="lineno"><a class="line" href="a00177.html#gadff3608baa4b5bd3ed28f95c1c2c345d"> 152</a></span>  <span class="keyword">typedef</span> detail::int16 <a class="code" href="a00177.html#gadff3608baa4b5bd3ed28f95c1c2c345d">mediump_int16</a>;</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> </div>
+<div class="line"><a name="l00156"></a><span class="lineno"><a class="line" href="a00177.html#ga5244cef85d6e870e240c76428a262ae8"> 156</a></span>  <span class="keyword">typedef</span> detail::int32 <a class="code" href="a00177.html#ga5244cef85d6e870e240c76428a262ae8">mediump_int32</a>;</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno"><a class="line" href="a00177.html#ga7b968f2b86a0442a89c7359171e1d866"> 160</a></span>  <span class="keyword">typedef</span> detail::int64 <a class="code" href="a00177.html#ga7b968f2b86a0442a89c7359171e1d866">mediump_int64</a>;</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno"><a class="line" href="a00177.html#ga6d7b3789ecb932c26430009478cac7ae"> 164</a></span>  <span class="keyword">typedef</span> detail::int8 <a class="code" href="a00177.html#ga6d7b3789ecb932c26430009478cac7ae">mediump_int8_t</a>;</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  </div>
+<div class="line"><a name="l00168"></a><span class="lineno"><a class="line" href="a00177.html#ga80e72fe94c88498537e8158ba7591c54"> 168</a></span>  <span class="keyword">typedef</span> detail::int16 <a class="code" href="a00177.html#ga80e72fe94c88498537e8158ba7591c54">mediump_int16_t</a>;</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno"><a class="line" href="a00177.html#ga26fc7ced1ad7ca5024f1c973c8dc9180"> 172</a></span>  <span class="keyword">typedef</span> detail::int32 <a class="code" href="a00177.html#ga26fc7ced1ad7ca5024f1c973c8dc9180">mediump_int32_t</a>;</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno"><a class="line" href="a00177.html#gac3bc41bcac61d1ba8f02a6f68ce23f64"> 176</a></span>  <span class="keyword">typedef</span> detail::int64 <a class="code" href="a00177.html#gac3bc41bcac61d1ba8f02a6f68ce23f64">mediump_int64_t</a>;</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> </div>
+<div class="line"><a name="l00180"></a><span class="lineno"><a class="line" href="a00177.html#gacf1ded173e1e2d049c511d095b259e21"> 180</a></span>  <span class="keyword">typedef</span> detail::int8 <a class="code" href="a00177.html#gacf1ded173e1e2d049c511d095b259e21">mediump_i8</a>;</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  </div>
+<div class="line"><a name="l00184"></a><span class="lineno"><a class="line" href="a00177.html#ga62a17cddeb4dffb4e18fe3aea23f051a"> 184</a></span>  <span class="keyword">typedef</span> detail::int16 <a class="code" href="a00177.html#ga62a17cddeb4dffb4e18fe3aea23f051a">mediump_i16</a>;</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno"><a class="line" href="a00177.html#gaf5e94bf2a20af7601787c154751dc2e1"> 188</a></span>  <span class="keyword">typedef</span> detail::int32 <a class="code" href="a00177.html#gaf5e94bf2a20af7601787c154751dc2e1">mediump_i32</a>;</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> </div>
+<div class="line"><a name="l00192"></a><span class="lineno"><a class="line" href="a00177.html#ga3ebcb1f6d8d8387253de8bccb058d77f"> 192</a></span>  <span class="keyword">typedef</span> detail::int64 <a class="code" href="a00177.html#ga3ebcb1f6d8d8387253de8bccb058d77f">mediump_i64</a>;</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno"><a class="line" href="a00177.html#gad0549c902a96a7164e4ac858d5f39dbf"> 196</a></span>  <span class="keyword">typedef</span> detail::int8 <a class="code" href="a00177.html#gad0549c902a96a7164e4ac858d5f39dbf">highp_int8</a>;</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  </div>
+<div class="line"><a name="l00200"></a><span class="lineno"><a class="line" href="a00177.html#ga5fde0fa4a3852a9dd5d637a92ee74718"> 200</a></span>  <span class="keyword">typedef</span> detail::int16 <a class="code" href="a00177.html#ga5fde0fa4a3852a9dd5d637a92ee74718">highp_int16</a>;</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> </div>
+<div class="line"><a name="l00204"></a><span class="lineno"><a class="line" href="a00177.html#ga84ed04b4e0de18c977e932d617e7c223"> 204</a></span>  <span class="keyword">typedef</span> detail::int32 <a class="code" href="a00177.html#ga84ed04b4e0de18c977e932d617e7c223">highp_int32</a>;</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> </div>
+<div class="line"><a name="l00208"></a><span class="lineno"><a class="line" href="a00177.html#ga226a8d52b4e3f77aaa6231135e886aac"> 208</a></span>  <span class="keyword">typedef</span> detail::int64 <a class="code" href="a00177.html#ga226a8d52b4e3f77aaa6231135e886aac">highp_int64</a>;</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno"><a class="line" href="a00177.html#ga1085c50dd8fbeb5e7e609b1c127492a5"> 212</a></span>  <span class="keyword">typedef</span> detail::int8 <a class="code" href="a00177.html#ga1085c50dd8fbeb5e7e609b1c127492a5">highp_int8_t</a>;</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  </div>
+<div class="line"><a name="l00216"></a><span class="lineno"><a class="line" href="a00177.html#gacaea06d0a79ef3172e887a7a6ba434ff"> 216</a></span>  <span class="keyword">typedef</span> detail::int16 <a class="code" href="a00177.html#gacaea06d0a79ef3172e887a7a6ba434ff">highp_int16_t</a>;</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno"><a class="line" href="a00177.html#ga2c71c8bd9e2fe7d2e93ca250d8b6157f"> 220</a></span>  <span class="keyword">typedef</span> detail::int32 <a class="code" href="a00177.html#ga2c71c8bd9e2fe7d2e93ca250d8b6157f">highp_int32_t</a>;</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno"><a class="line" href="a00177.html#ga73c6abb280a45feeff60f9accaee91f3"> 224</a></span>  <span class="keyword">typedef</span> detail::int64 <a class="code" href="a00177.html#ga73c6abb280a45feeff60f9accaee91f3">highp_int64_t</a>;</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> </div>
+<div class="line"><a name="l00228"></a><span class="lineno"><a class="line" href="a00177.html#gacb88796f2d08ef253d0345aff20c3aee"> 228</a></span>  <span class="keyword">typedef</span> detail::int8 <a class="code" href="a00177.html#gacb88796f2d08ef253d0345aff20c3aee">highp_i8</a>;</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  </div>
+<div class="line"><a name="l00232"></a><span class="lineno"><a class="line" href="a00177.html#ga0336abc2604dd2c20c30e036454b64f8"> 232</a></span>  <span class="keyword">typedef</span> detail::int16 <a class="code" href="a00177.html#ga0336abc2604dd2c20c30e036454b64f8">highp_i16</a>;</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> </div>
+<div class="line"><a name="l00236"></a><span class="lineno"><a class="line" href="a00177.html#ga727675ac6b5d2fc699520e0059735e25"> 236</a></span>  <span class="keyword">typedef</span> detail::int32 <a class="code" href="a00177.html#ga727675ac6b5d2fc699520e0059735e25">highp_i32</a>;</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> </div>
+<div class="line"><a name="l00240"></a><span class="lineno"><a class="line" href="a00177.html#gac25db6d2b1e2a0f351b77ba3409ac4cd"> 240</a></span>  <span class="keyword">typedef</span> detail::int64 <a class="code" href="a00177.html#gac25db6d2b1e2a0f351b77ba3409ac4cd">highp_i64</a>;</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  </div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> </div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <span class="keyword">typedef</span> detail::int8 <a class="code" href="a00177.html#ga41c6189f6485c2825d60fdc835b3a2b0">int8</a>;</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  </div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  <span class="keyword">typedef</span> detail::int16 <a class="code" href="a00177.html#ga302041c186d0d028bea31b711fe16759">int16</a>;</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> </div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  <span class="keyword">typedef</span> detail::int32 <a class="code" href="a00177.html#ga8df669f4e7698dfe0c0354d92578d74f">int32</a>;</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> </div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  <span class="keyword">typedef</span> detail::int64 <a class="code" href="a00177.html#gaff5189f97f9e842d9636a0f240001b2e">int64</a>;</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> </div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> </div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> <span class="preprocessor">#if GLM_HAS_EXTENDED_INTEGER_TYPE</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <span class="keyword">using</span> <a class="code" href="a00177.html#ga4bf09d8838a86866b39ee6e109341645">std::int8_t</a>;</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <span class="keyword">using</span> <a class="code" href="a00177.html#gae8f5e3e964ca2ae240adc2c0d74adede">std::int16_t</a>;</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <span class="keyword">using</span> <a class="code" href="a00177.html#ga042ef09ff2f0cb24a36f541bcb3a3710">std::int32_t</a>;</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <span class="keyword">using</span> <a class="code" href="a00177.html#ga322a7d7d2c2c68994dc872a33de63c61">std::int64_t</a>;</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  <span class="keyword">typedef</span> detail::int8 <a class="code" href="a00177.html#ga4bf09d8838a86866b39ee6e109341645">int8_t</a>;</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  </div>
+<div class="line"><a name="l00272"></a><span class="lineno"><a class="line" href="a00177.html#gae8f5e3e964ca2ae240adc2c0d74adede"> 272</a></span>  <span class="keyword">typedef</span> detail::int16 <a class="code" href="a00177.html#gae8f5e3e964ca2ae240adc2c0d74adede">int16_t</a>;</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> </div>
+<div class="line"><a name="l00276"></a><span class="lineno"><a class="line" href="a00177.html#ga042ef09ff2f0cb24a36f541bcb3a3710"> 276</a></span>  <span class="keyword">typedef</span> detail::int32 <a class="code" href="a00177.html#ga042ef09ff2f0cb24a36f541bcb3a3710">int32_t</a>;</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> </div>
+<div class="line"><a name="l00280"></a><span class="lineno"><a class="line" href="a00177.html#ga322a7d7d2c2c68994dc872a33de63c61"> 280</a></span>  <span class="keyword">typedef</span> detail::int64 <a class="code" href="a00177.html#ga322a7d7d2c2c68994dc872a33de63c61">int64_t</a>;</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> </div>
+<div class="line"><a name="l00285"></a><span class="lineno"><a class="line" href="a00177.html#ga302ec977b0c0c3ea245b6c9275495355"> 285</a></span>  <span class="keyword">typedef</span> detail::int8 <a class="code" href="a00177.html#ga302ec977b0c0c3ea245b6c9275495355">i8</a>;</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  </div>
+<div class="line"><a name="l00289"></a><span class="lineno"><a class="line" href="a00177.html#ga3ab5fe184343d394fb6c2723c3ee3699"> 289</a></span>  <span class="keyword">typedef</span> detail::int16 <a class="code" href="a00177.html#ga3ab5fe184343d394fb6c2723c3ee3699">i16</a>;</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> </div>
+<div class="line"><a name="l00293"></a><span class="lineno"><a class="line" href="a00177.html#ga96faea43ac5f875d2d3ffbf8d213e3eb"> 293</a></span>  <span class="keyword">typedef</span> detail::int32 <a class="code" href="a00177.html#ga96faea43ac5f875d2d3ffbf8d213e3eb">i32</a>;</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> </div>
+<div class="line"><a name="l00297"></a><span class="lineno"><a class="line" href="a00177.html#gadb997e409103d4da18abd837e636a496"> 297</a></span>  <span class="keyword">typedef</span> detail::int64 <a class="code" href="a00177.html#gadb997e409103d4da18abd837e636a496">i64</a>;</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  </div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  </div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  </div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <span class="keyword">typedef</span> tvec1<i8, lowp> lowp_i8vec1;</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  </div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  <span class="keyword">typedef</span> tvec2<i8, lowp> lowp_i8vec2;</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  </div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <span class="keyword">typedef</span> tvec3<i8, lowp> lowp_i8vec3;</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  </div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  <span class="keyword">typedef</span> tvec4<i8, lowp> lowp_i8vec4;</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  </div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> </div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  <span class="keyword">typedef</span> tvec1<i8, mediump> mediump_i8vec1;</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  </div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  <span class="keyword">typedef</span> tvec2<i8, mediump> mediump_i8vec2;</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  </div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  <span class="keyword">typedef</span> tvec3<i8, mediump> mediump_i8vec3;</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  </div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <span class="keyword">typedef</span> tvec4<i8, mediump> mediump_i8vec4;</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  </div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  </div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  <span class="keyword">typedef</span> tvec1<i8, highp> highp_i8vec1;</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  </div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  <span class="keyword">typedef</span> tvec2<i8, highp> highp_i8vec2;</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  </div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  <span class="keyword">typedef</span> tvec3<i8, highp> highp_i8vec3;</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  </div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  <span class="keyword">typedef</span> tvec4<i8, highp> highp_i8vec4;</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  </div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <span class="preprocessor">#if(defined(GLM_PRECISION_LOWP_INT))</span></div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  <span class="keyword">typedef</span> lowp_i8vec1 <a class="code" href="a00177.html#gab2329c5c14ff5a03b1ddec039e2c7409">i8vec1</a>;</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  <span class="keyword">typedef</span> lowp_i8vec2 <a class="code" href="a00177.html#ga6414484477e4c1b4863cf91af8fd4185">i8vec2</a>;</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  <span class="keyword">typedef</span> lowp_i8vec3 <a class="code" href="a00177.html#gaf4b5993e794e252607f91535b62a7e0c">i8vec3</a>;</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  <span class="keyword">typedef</span> lowp_i8vec4 <a class="code" href="a00177.html#ga50e58885aee2cf01bb3ba472c5b1697e">i8vec4</a>;</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> <span class="preprocessor">#elif(defined(GLM_PRECISION_MEDIUMP_INT))</span></div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  <span class="keyword">typedef</span> mediump_i8vec1 <a class="code" href="a00177.html#gab2329c5c14ff5a03b1ddec039e2c7409">i8vec1</a>;</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  <span class="keyword">typedef</span> mediump_i8vec2 <a class="code" href="a00177.html#ga6414484477e4c1b4863cf91af8fd4185">i8vec2</a>;</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  <span class="keyword">typedef</span> mediump_i8vec3 <a class="code" href="a00177.html#gaf4b5993e794e252607f91535b62a7e0c">i8vec3</a>;</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  <span class="keyword">typedef</span> mediump_i8vec4 <a class="code" href="a00177.html#ga50e58885aee2cf01bb3ba472c5b1697e">i8vec4</a>; </div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  <span class="keyword">typedef</span> highp_i8vec1 <a class="code" href="a00177.html#gab2329c5c14ff5a03b1ddec039e2c7409">i8vec1</a>;</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  </div>
+<div class="line"><a name="l00368"></a><span class="lineno"><a class="line" href="a00177.html#ga6414484477e4c1b4863cf91af8fd4185"> 368</a></span>  <span class="keyword">typedef</span> highp_i8vec2 <a class="code" href="a00177.html#ga6414484477e4c1b4863cf91af8fd4185">i8vec2</a>;</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  </div>
+<div class="line"><a name="l00372"></a><span class="lineno"><a class="line" href="a00177.html#gaf4b5993e794e252607f91535b62a7e0c"> 372</a></span>  <span class="keyword">typedef</span> highp_i8vec3 <a class="code" href="a00177.html#gaf4b5993e794e252607f91535b62a7e0c">i8vec3</a>;</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  </div>
+<div class="line"><a name="l00376"></a><span class="lineno"><a class="line" href="a00177.html#ga50e58885aee2cf01bb3ba472c5b1697e"> 376</a></span>  <span class="keyword">typedef</span> highp_i8vec4 <a class="code" href="a00177.html#ga50e58885aee2cf01bb3ba472c5b1697e">i8vec4</a>;</div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  </div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  </div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  <span class="keyword">typedef</span> tvec1<i16, lowp> lowp_i16vec1;</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  </div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  <span class="keyword">typedef</span> tvec2<i16, lowp> lowp_i16vec2;</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  </div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  <span class="keyword">typedef</span> tvec3<i16, lowp> lowp_i16vec3;</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  </div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  <span class="keyword">typedef</span> tvec4<i16, lowp> lowp_i16vec4;</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  </div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  </div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  <span class="keyword">typedef</span> tvec1<i16, mediump> mediump_i16vec1;</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  </div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  <span class="keyword">typedef</span> tvec2<i16, mediump> mediump_i16vec2;</div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  </div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  <span class="keyword">typedef</span> tvec3<i16, mediump> mediump_i16vec3;</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  </div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  <span class="keyword">typedef</span> tvec4<i16, mediump> mediump_i16vec4;</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  </div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  </div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  <span class="keyword">typedef</span> tvec1<i16, highp> highp_i16vec1;</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  </div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  <span class="keyword">typedef</span> tvec2<i16, highp> highp_i16vec2;</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  </div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  <span class="keyword">typedef</span> tvec3<i16, highp> highp_i16vec3;</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  </div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  <span class="keyword">typedef</span> tvec4<i16, highp> highp_i16vec4;</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  </div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  </div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> <span class="preprocessor">#if(defined(GLM_PRECISION_LOWP_INT))</span></div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  <span class="keyword">typedef</span> lowp_i16vec1 <a class="code" href="a00177.html#ga28f03a39ac56c70f9bf3ada11cb60e3b">i16vec1</a>;</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  <span class="keyword">typedef</span> lowp_i16vec2 <a class="code" href="a00177.html#ga110bec18ca44c41c76c3c9e4d7b5bd79">i16vec2</a>;</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  <span class="keyword">typedef</span> lowp_i16vec3 <a class="code" href="a00177.html#ga973b226a9914db682c9372fc761fb535">i16vec3</a>;</div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  <span class="keyword">typedef</span> lowp_i16vec4 <a class="code" href="a00177.html#gad73e5e905dcf2d8cab002b4ab46e9426">i16vec4</a>;</div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> <span class="preprocessor">#elif(defined(GLM_PRECISION_MEDIUMP_INT))</span></div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  <span class="keyword">typedef</span> mediump_i16vec1 <a class="code" href="a00177.html#ga28f03a39ac56c70f9bf3ada11cb60e3b">i16vec1</a>;</div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  <span class="keyword">typedef</span> mediump_i16vec2 <a class="code" href="a00177.html#ga110bec18ca44c41c76c3c9e4d7b5bd79">i16vec2</a>;</div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  <span class="keyword">typedef</span> mediump_i16vec3 <a class="code" href="a00177.html#ga973b226a9914db682c9372fc761fb535">i16vec3</a>;</div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  <span class="keyword">typedef</span> mediump_i16vec4 <a class="code" href="a00177.html#gad73e5e905dcf2d8cab002b4ab46e9426">i16vec4</a>;</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  <span class="keyword">typedef</span> highp_i16vec1 <a class="code" href="a00177.html#ga28f03a39ac56c70f9bf3ada11cb60e3b">i16vec1</a>;</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  </div>
+<div class="line"><a name="l00448"></a><span class="lineno"><a class="line" href="a00177.html#ga110bec18ca44c41c76c3c9e4d7b5bd79"> 448</a></span>  <span class="keyword">typedef</span> highp_i16vec2 <a class="code" href="a00177.html#ga110bec18ca44c41c76c3c9e4d7b5bd79">i16vec2</a>;</div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  </div>
+<div class="line"><a name="l00452"></a><span class="lineno"><a class="line" href="a00177.html#ga973b226a9914db682c9372fc761fb535"> 452</a></span>  <span class="keyword">typedef</span> highp_i16vec3 <a class="code" href="a00177.html#ga973b226a9914db682c9372fc761fb535">i16vec3</a>;</div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  </div>
+<div class="line"><a name="l00456"></a><span class="lineno"><a class="line" href="a00177.html#gad73e5e905dcf2d8cab002b4ab46e9426"> 456</a></span>  <span class="keyword">typedef</span> highp_i16vec4 <a class="code" href="a00177.html#gad73e5e905dcf2d8cab002b4ab46e9426">i16vec4</a>;</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> </div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> </div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  <span class="keyword">typedef</span> tvec1<i32, lowp> lowp_i32vec1;</div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  </div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  <span class="keyword">typedef</span> tvec2<i32, lowp> lowp_i32vec2;</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  </div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  <span class="keyword">typedef</span> tvec3<i32, lowp> lowp_i32vec3;</div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  </div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  <span class="keyword">typedef</span> tvec4<i32, lowp> lowp_i32vec4;</div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  </div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  </div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  <span class="keyword">typedef</span> tvec1<i32, mediump> mediump_i32vec1;</div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span>  </div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  <span class="keyword">typedef</span> tvec2<i32, mediump> mediump_i32vec2;</div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  </div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  <span class="keyword">typedef</span> tvec3<i32, mediump> mediump_i32vec3;</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  </div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  <span class="keyword">typedef</span> tvec4<i32, mediump> mediump_i32vec4;</div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  </div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  </div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  <span class="keyword">typedef</span> tvec1<i32, highp> highp_i32vec1;</div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  </div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  <span class="keyword">typedef</span> tvec2<i32, highp> highp_i32vec2;</div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  </div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span>  <span class="keyword">typedef</span> tvec3<i32, highp> highp_i32vec3;</div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  </div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  <span class="keyword">typedef</span> tvec4<i32, highp> highp_i32vec4;</div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  </div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> <span class="preprocessor">#if(defined(GLM_PRECISION_LOWP_INT))</span></div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  <span class="keyword">typedef</span> lowp_i32vec1 <a class="code" href="a00177.html#ga4cca6bbd117c45f046291fc8e9d03765">i32vec1</a>;</div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  <span class="keyword">typedef</span> lowp_i32vec2 <a class="code" href="a00177.html#ga3c12cef4135603fd77d8fda85808730c">i32vec2</a>;</div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  <span class="keyword">typedef</span> lowp_i32vec3 <a class="code" href="a00177.html#ga40cd3f391c03512f158d10a70062264e">i32vec3</a>;</div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  <span class="keyword">typedef</span> lowp_i32vec4 <a class="code" href="a00177.html#gae3364a8090e7e1408056e00403dfecab">i32vec4</a>;</div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> <span class="preprocessor">#elif(defined(GLM_PRECISION_MEDIUMP_INT))</span></div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  <span class="keyword">typedef</span> mediump_i32vec1 <a class="code" href="a00177.html#ga4cca6bbd117c45f046291fc8e9d03765">i32vec1</a>;</div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span>  <span class="keyword">typedef</span> mediump_i32vec2 <a class="code" href="a00177.html#ga3c12cef4135603fd77d8fda85808730c">i32vec2</a>;</div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  <span class="keyword">typedef</span> mediump_i32vec3 <a class="code" href="a00177.html#ga40cd3f391c03512f158d10a70062264e">i32vec3</a>;</div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  <span class="keyword">typedef</span> mediump_i32vec4 <a class="code" href="a00177.html#gae3364a8090e7e1408056e00403dfecab">i32vec4</a>;</div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  <span class="keyword">typedef</span> highp_i32vec1 <a class="code" href="a00177.html#ga4cca6bbd117c45f046291fc8e9d03765">i32vec1</a>;</div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span>  </div>
+<div class="line"><a name="l00527"></a><span class="lineno"><a class="line" href="a00177.html#ga3c12cef4135603fd77d8fda85808730c"> 527</a></span>  <span class="keyword">typedef</span> highp_i32vec2 <a class="code" href="a00177.html#ga3c12cef4135603fd77d8fda85808730c">i32vec2</a>;</div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  </div>
+<div class="line"><a name="l00531"></a><span class="lineno"><a class="line" href="a00177.html#ga40cd3f391c03512f158d10a70062264e"> 531</a></span>  <span class="keyword">typedef</span> highp_i32vec3 <a class="code" href="a00177.html#ga40cd3f391c03512f158d10a70062264e">i32vec3</a>;</div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  </div>
+<div class="line"><a name="l00535"></a><span class="lineno"><a class="line" href="a00177.html#gae3364a8090e7e1408056e00403dfecab"> 535</a></span>  <span class="keyword">typedef</span> highp_i32vec4 <a class="code" href="a00177.html#gae3364a8090e7e1408056e00403dfecab">i32vec4</a>;</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> </div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> </div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  <span class="keyword">typedef</span> tvec1<i32, lowp> lowp_i32vec1;</div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span>  </div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  <span class="keyword">typedef</span> tvec2<i32, lowp> lowp_i32vec2;</div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  </div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  <span class="keyword">typedef</span> tvec3<i32, lowp> lowp_i32vec3;</div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  </div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  <span class="keyword">typedef</span> tvec4<i32, lowp> lowp_i32vec4;</div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span>  </div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span>  </div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  <span class="keyword">typedef</span> tvec1<i32, mediump> mediump_i32vec1;</div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  </div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  <span class="keyword">typedef</span> tvec2<i32, mediump> mediump_i32vec2;</div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  </div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  <span class="keyword">typedef</span> tvec3<i32, mediump> mediump_i32vec3;</div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  </div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  <span class="keyword">typedef</span> tvec4<i32, mediump> mediump_i32vec4;</div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span>  </div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  </div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span>  <span class="keyword">typedef</span> tvec1<i32, highp> highp_i32vec1;</div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  </div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span>  <span class="keyword">typedef</span> tvec2<i32, highp> highp_i32vec2;</div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  </div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  <span class="keyword">typedef</span> tvec3<i32, highp> highp_i32vec3;</div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  </div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  <span class="keyword">typedef</span> tvec4<i32, highp> highp_i32vec4;</div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  </div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> <span class="preprocessor">#if(defined(GLM_PRECISION_LOWP_INT))</span></div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span>  <span class="keyword">typedef</span> lowp_i32vec1 <a class="code" href="a00177.html#ga4cca6bbd117c45f046291fc8e9d03765">i32vec1</a>;</div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  <span class="keyword">typedef</span> lowp_i32vec2 <a class="code" href="a00177.html#ga3c12cef4135603fd77d8fda85808730c">i32vec2</a>;</div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  <span class="keyword">typedef</span> lowp_i32vec3 <a class="code" href="a00177.html#ga40cd3f391c03512f158d10a70062264e">i32vec3</a>;</div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  <span class="keyword">typedef</span> lowp_i32vec4 <a class="code" href="a00177.html#gae3364a8090e7e1408056e00403dfecab">i32vec4</a>;</div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> <span class="preprocessor">#elif(defined(GLM_PRECISION_MEDIUMP_INT))</span></div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  <span class="keyword">typedef</span> mediump_i32vec1 <a class="code" href="a00177.html#ga4cca6bbd117c45f046291fc8e9d03765">i32vec1</a>;</div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span>  <span class="keyword">typedef</span> mediump_i32vec2 <a class="code" href="a00177.html#ga3c12cef4135603fd77d8fda85808730c">i32vec2</a>;</div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  <span class="keyword">typedef</span> mediump_i32vec3 <a class="code" href="a00177.html#ga40cd3f391c03512f158d10a70062264e">i32vec3</a>;</div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span>  <span class="keyword">typedef</span> mediump_i32vec4 <a class="code" href="a00177.html#gae3364a8090e7e1408056e00403dfecab">i32vec4</a>;</div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  <span class="keyword">typedef</span> highp_i32vec1 <a class="code" href="a00177.html#ga4cca6bbd117c45f046291fc8e9d03765">i32vec1</a>;</div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> </div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  <span class="keyword">typedef</span> highp_i32vec2 <a class="code" href="a00177.html#ga3c12cef4135603fd77d8fda85808730c">i32vec2</a>;</div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  </div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span>  <span class="keyword">typedef</span> highp_i32vec3 <a class="code" href="a00177.html#ga40cd3f391c03512f158d10a70062264e">i32vec3</a>;</div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span>  </div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  <span class="keyword">typedef</span> highp_i32vec4 <a class="code" href="a00177.html#gae3364a8090e7e1408056e00403dfecab">i32vec4</a>;</div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> </div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> </div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span>  </div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  <span class="keyword">typedef</span> tvec1<i64, lowp> lowp_i64vec1;</div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  </div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  <span class="keyword">typedef</span> tvec2<i64, lowp> lowp_i64vec2;</div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span>  </div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  <span class="keyword">typedef</span> tvec3<i64, lowp> lowp_i64vec3;</div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  </div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span>  <span class="keyword">typedef</span> tvec4<i64, lowp> lowp_i64vec4;</div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span>  </div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span>  </div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  <span class="keyword">typedef</span> tvec1<i64, mediump> mediump_i64vec1;</div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span>  </div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span>  <span class="keyword">typedef</span> tvec2<i64, mediump> mediump_i64vec2;</div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span>  </div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  <span class="keyword">typedef</span> tvec3<i64, mediump> mediump_i64vec3;</div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span>  </div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span>  <span class="keyword">typedef</span> tvec4<i64, mediump> mediump_i64vec4;</div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  </div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span>  </div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  <span class="keyword">typedef</span> tvec1<i64, highp> highp_i64vec1;</div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  </div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span>  <span class="keyword">typedef</span> tvec2<i64, highp> highp_i64vec2;</div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span>  </div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  <span class="keyword">typedef</span> tvec3<i64, highp> highp_i64vec3;</div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  </div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  <span class="keyword">typedef</span> tvec4<i64, highp> highp_i64vec4;</div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span>  </div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> <span class="preprocessor">#if(defined(GLM_PRECISION_LOWP_INT))</span></div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span>  <span class="keyword">typedef</span> lowp_i64vec1 <a class="code" href="a00177.html#ga5b4a3e499ee165efc0dc05add9c48235">i64vec1</a>;</div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span>  <span class="keyword">typedef</span> lowp_i64vec2 <a class="code" href="a00177.html#gade69872a31f066e5ae212f1af6008edb">i64vec2</a>;</div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  <span class="keyword">typedef</span> lowp_i64vec3 <a class="code" href="a00177.html#ga9ece7c77c7bca7a6b824ef9c600f5e5e">i64vec3</a>;</div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span>  <span class="keyword">typedef</span> lowp_i64vec4 <a class="code" href="a00177.html#ga9756e45c8f80329257f3cbdabc3bd73c">i64vec4</a>;</div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span> <span class="preprocessor">#elif(defined(GLM_PRECISION_MEDIUMP_INT))</span></div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span>  <span class="keyword">typedef</span> mediump_i64vec1 <a class="code" href="a00177.html#ga5b4a3e499ee165efc0dc05add9c48235">i64vec1</a>;</div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  <span class="keyword">typedef</span> mediump_i64vec2 <a class="code" href="a00177.html#gade69872a31f066e5ae212f1af6008edb">i64vec2</a>;</div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span>  <span class="keyword">typedef</span> mediump_i64vec3 <a class="code" href="a00177.html#ga9ece7c77c7bca7a6b824ef9c600f5e5e">i64vec3</a>;</div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span>  <span class="keyword">typedef</span> mediump_i64vec4 <a class="code" href="a00177.html#ga9756e45c8f80329257f3cbdabc3bd73c">i64vec4</a>;</div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  <span class="keyword">typedef</span> highp_i64vec1 <a class="code" href="a00177.html#ga5b4a3e499ee165efc0dc05add9c48235">i64vec1</a>;</div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span> </div>
+<div class="line"><a name="l00686"></a><span class="lineno"><a class="line" href="a00177.html#gade69872a31f066e5ae212f1af6008edb"> 686</a></span>  <span class="keyword">typedef</span> highp_i64vec2 <a class="code" href="a00177.html#gade69872a31f066e5ae212f1af6008edb">i64vec2</a>;</div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  </div>
+<div class="line"><a name="l00690"></a><span class="lineno"><a class="line" href="a00177.html#ga9ece7c77c7bca7a6b824ef9c600f5e5e"> 690</a></span>  <span class="keyword">typedef</span> highp_i64vec3 <a class="code" href="a00177.html#ga9ece7c77c7bca7a6b824ef9c600f5e5e">i64vec3</a>;</div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span>  </div>
+<div class="line"><a name="l00694"></a><span class="lineno"><a class="line" href="a00177.html#ga9756e45c8f80329257f3cbdabc3bd73c"> 694</a></span>  <span class="keyword">typedef</span> highp_i64vec4 <a class="code" href="a00177.html#ga9756e45c8f80329257f3cbdabc3bd73c">i64vec4</a>;</div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span>  </div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span>  </div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span>  <span class="comment">// Unsigned int vector types</span></div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span>  </div>
+<div class="line"><a name="l00703"></a><span class="lineno"><a class="line" href="a00177.html#gaf49470869e9be2c059629b250619804e"> 703</a></span>  <span class="keyword">typedef</span> detail::uint8 <a class="code" href="a00177.html#gaf49470869e9be2c059629b250619804e">lowp_uint8</a>;</div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span>  </div>
+<div class="line"><a name="l00707"></a><span class="lineno"><a class="line" href="a00177.html#gad68bfd9f881856fc863a6ebca0b67f78"> 707</a></span>  <span class="keyword">typedef</span> detail::uint16 <a class="code" href="a00177.html#gad68bfd9f881856fc863a6ebca0b67f78">lowp_uint16</a>;</div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span>  </div>
+<div class="line"><a name="l00711"></a><span class="lineno"><a class="line" href="a00177.html#gaa6a5b461bbf5fe20982472aa51896d4b"> 711</a></span>  <span class="keyword">typedef</span> detail::uint32 <a class="code" href="a00177.html#gaa6a5b461bbf5fe20982472aa51896d4b">lowp_uint32</a>;</div>
+<div class="line"><a name="l00712"></a><span class="lineno"> 712</span>  </div>
+<div class="line"><a name="l00715"></a><span class="lineno"><a class="line" href="a00177.html#gaa212b805736a759998e312cbdd550fae"> 715</a></span>  <span class="keyword">typedef</span> detail::uint64 <a class="code" href="a00177.html#gaa212b805736a759998e312cbdd550fae">lowp_uint64</a>;</div>
+<div class="line"><a name="l00716"></a><span class="lineno"> 716</span>  </div>
+<div class="line"><a name="l00717"></a><span class="lineno"> 717</span>  </div>
+<div class="line"><a name="l00720"></a><span class="lineno"><a class="line" href="a00177.html#ga667b2ece2b258be898812dc2177995d1"> 720</a></span>  <span class="keyword">typedef</span> detail::uint8 <a class="code" href="a00177.html#ga667b2ece2b258be898812dc2177995d1">lowp_uint8_t</a>;</div>
+<div class="line"><a name="l00721"></a><span class="lineno"> 721</span>  </div>
+<div class="line"><a name="l00724"></a><span class="lineno"><a class="line" href="a00177.html#ga91c4815f93177eb423362fd296a87e9f"> 724</a></span>  <span class="keyword">typedef</span> detail::uint16 <a class="code" href="a00177.html#ga91c4815f93177eb423362fd296a87e9f">lowp_uint16_t</a>;</div>
+<div class="line"><a name="l00725"></a><span class="lineno"> 725</span>  </div>
+<div class="line"><a name="l00728"></a><span class="lineno"><a class="line" href="a00177.html#gaf1b735b4b1145174f4e4167d13778f9b"> 728</a></span>  <span class="keyword">typedef</span> detail::uint32 <a class="code" href="a00177.html#gaf1b735b4b1145174f4e4167d13778f9b">lowp_uint32_t</a>;</div>
+<div class="line"><a name="l00729"></a><span class="lineno"> 729</span>  </div>
+<div class="line"><a name="l00732"></a><span class="lineno"><a class="line" href="a00177.html#ga8dd3a3281ae5c970ffe0c41d538aa153"> 732</a></span>  <span class="keyword">typedef</span> detail::uint64 <a class="code" href="a00177.html#ga8dd3a3281ae5c970ffe0c41d538aa153">lowp_uint64_t</a>;</div>
+<div class="line"><a name="l00733"></a><span class="lineno"> 733</span>  </div>
+<div class="line"><a name="l00734"></a><span class="lineno"> 734</span>  </div>
+<div class="line"><a name="l00737"></a><span class="lineno"><a class="line" href="a00177.html#ga1b09f03da7ac43055c68a349d5445083"> 737</a></span>  <span class="keyword">typedef</span> detail::uint8 <a class="code" href="a00177.html#ga1b09f03da7ac43055c68a349d5445083">lowp_u8</a>;</div>
+<div class="line"><a name="l00738"></a><span class="lineno"> 738</span>  </div>
+<div class="line"><a name="l00741"></a><span class="lineno"><a class="line" href="a00177.html#ga504ce1631cb2ac02fcf1d44d8c2aa126"> 741</a></span>  <span class="keyword">typedef</span> detail::uint16 <a class="code" href="a00177.html#ga504ce1631cb2ac02fcf1d44d8c2aa126">lowp_u16</a>;</div>
+<div class="line"><a name="l00742"></a><span class="lineno"> 742</span>  </div>
+<div class="line"><a name="l00745"></a><span class="lineno"><a class="line" href="a00177.html#ga4f072ada9552e1e480bbb3b1acde5250"> 745</a></span>  <span class="keyword">typedef</span> detail::uint32 <a class="code" href="a00177.html#ga4f072ada9552e1e480bbb3b1acde5250">lowp_u32</a>;</div>
+<div class="line"><a name="l00746"></a><span class="lineno"> 746</span>  </div>
+<div class="line"><a name="l00749"></a><span class="lineno"><a class="line" href="a00177.html#ga30069d1f02b19599cbfadf98c23ac6ed"> 749</a></span>  <span class="keyword">typedef</span> detail::uint64 <a class="code" href="a00177.html#ga30069d1f02b19599cbfadf98c23ac6ed">lowp_u64</a>;</div>
+<div class="line"><a name="l00750"></a><span class="lineno"> 750</span>  </div>
+<div class="line"><a name="l00751"></a><span class="lineno"> 751</span>  </div>
+<div class="line"><a name="l00752"></a><span class="lineno"> 752</span>  </div>
+<div class="line"><a name="l00755"></a><span class="lineno"><a class="line" href="a00177.html#ga1fa92a233b9110861cdbc8c2ccf0b5a3"> 755</a></span>  <span class="keyword">typedef</span> detail::uint8 <a class="code" href="a00177.html#ga1fa92a233b9110861cdbc8c2ccf0b5a3">mediump_uint8</a>;</div>
+<div class="line"><a name="l00756"></a><span class="lineno"> 756</span>  </div>
+<div class="line"><a name="l00759"></a><span class="lineno"><a class="line" href="a00177.html#ga2885a6c89916911e418c06bb76b9bdbb"> 759</a></span>  <span class="keyword">typedef</span> detail::uint16 <a class="code" href="a00177.html#ga2885a6c89916911e418c06bb76b9bdbb">mediump_uint16</a>;</div>
+<div class="line"><a name="l00760"></a><span class="lineno"> 760</span>  </div>
+<div class="line"><a name="l00763"></a><span class="lineno"><a class="line" href="a00177.html#ga34dd5ec1988c443bae80f1b20a8ade5f"> 763</a></span>  <span class="keyword">typedef</span> detail::uint32 <a class="code" href="a00177.html#ga34dd5ec1988c443bae80f1b20a8ade5f">mediump_uint32</a>;</div>
+<div class="line"><a name="l00764"></a><span class="lineno"> 764</span>  </div>
+<div class="line"><a name="l00767"></a><span class="lineno"><a class="line" href="a00177.html#ga30652709815ad9404272a31957daa59e"> 767</a></span>  <span class="keyword">typedef</span> detail::uint64 <a class="code" href="a00177.html#ga30652709815ad9404272a31957daa59e">mediump_uint64</a>;</div>
+<div class="line"><a name="l00768"></a><span class="lineno"> 768</span>  </div>
+<div class="line"><a name="l00771"></a><span class="lineno"><a class="line" href="a00177.html#gadfe65c78231039e90507770db50c98c7"> 771</a></span>  <span class="keyword">typedef</span> detail::uint8 <a class="code" href="a00177.html#gadfe65c78231039e90507770db50c98c7">mediump_uint8_t</a>;</div>
+<div class="line"><a name="l00772"></a><span class="lineno"> 772</span>  </div>
+<div class="line"><a name="l00775"></a><span class="lineno"><a class="line" href="a00177.html#ga3963b1050fc65a383ee28e3f827b6e3e"> 775</a></span>  <span class="keyword">typedef</span> detail::uint16 <a class="code" href="a00177.html#ga3963b1050fc65a383ee28e3f827b6e3e">mediump_uint16_t</a>;</div>
+<div class="line"><a name="l00776"></a><span class="lineno"> 776</span>  </div>
+<div class="line"><a name="l00779"></a><span class="lineno"><a class="line" href="a00177.html#gaf4dae276fd29623950de14a6ca2586b5"> 779</a></span>  <span class="keyword">typedef</span> detail::uint32 <a class="code" href="a00177.html#gaf4dae276fd29623950de14a6ca2586b5">mediump_uint32_t</a>;</div>
+<div class="line"><a name="l00780"></a><span class="lineno"> 780</span>  </div>
+<div class="line"><a name="l00783"></a><span class="lineno"><a class="line" href="a00177.html#ga9b170dd4a8f38448a2dc93987c7875e9"> 783</a></span>  <span class="keyword">typedef</span> detail::uint64 <a class="code" href="a00177.html#ga9b170dd4a8f38448a2dc93987c7875e9">mediump_uint64_t</a>;</div>
+<div class="line"><a name="l00784"></a><span class="lineno"> 784</span>  </div>
+<div class="line"><a name="l00787"></a><span class="lineno"><a class="line" href="a00177.html#gad1213a22bbb9e4107f07eaa4956f8281"> 787</a></span>  <span class="keyword">typedef</span> detail::uint8 <a class="code" href="a00177.html#gad1213a22bbb9e4107f07eaa4956f8281">mediump_u8</a>;</div>
+<div class="line"><a name="l00788"></a><span class="lineno"> 788</span>  </div>
+<div class="line"><a name="l00791"></a><span class="lineno"><a class="line" href="a00177.html#ga9df98857be695d5a30cb30f5bfa38a80"> 791</a></span>  <span class="keyword">typedef</span> detail::uint16 <a class="code" href="a00177.html#ga9df98857be695d5a30cb30f5bfa38a80">mediump_u16</a>;</div>
+<div class="line"><a name="l00792"></a><span class="lineno"> 792</span>  </div>
+<div class="line"><a name="l00795"></a><span class="lineno"><a class="line" href="a00177.html#ga1bd0e914158bf03135f8a317de6debe9"> 795</a></span>  <span class="keyword">typedef</span> detail::uint32 <a class="code" href="a00177.html#ga1bd0e914158bf03135f8a317de6debe9">mediump_u32</a>;</div>
+<div class="line"><a name="l00796"></a><span class="lineno"> 796</span>  </div>
+<div class="line"><a name="l00799"></a><span class="lineno"><a class="line" href="a00177.html#ga2af9490085ae3bdf36a544e9dd073610"> 799</a></span>  <span class="keyword">typedef</span> detail::uint64 <a class="code" href="a00177.html#ga2af9490085ae3bdf36a544e9dd073610">mediump_u64</a>;</div>
+<div class="line"><a name="l00800"></a><span class="lineno"> 800</span>  </div>
+<div class="line"><a name="l00801"></a><span class="lineno"> 801</span>  </div>
+<div class="line"><a name="l00802"></a><span class="lineno"> 802</span>  </div>
+<div class="line"><a name="l00805"></a><span class="lineno"><a class="line" href="a00177.html#ga97432f9979e73e66567361fd01e4cffb"> 805</a></span>  <span class="keyword">typedef</span> detail::uint8 <a class="code" href="a00177.html#ga97432f9979e73e66567361fd01e4cffb">highp_uint8</a>;</div>
+<div class="line"><a name="l00806"></a><span class="lineno"> 806</span>  </div>
+<div class="line"><a name="l00809"></a><span class="lineno"><a class="line" href="a00177.html#ga746dc6da204f5622e395f492997dbf57"> 809</a></span>  <span class="keyword">typedef</span> detail::uint16 <a class="code" href="a00177.html#ga746dc6da204f5622e395f492997dbf57">highp_uint16</a>;</div>
+<div class="line"><a name="l00810"></a><span class="lineno"> 810</span>  </div>
+<div class="line"><a name="l00813"></a><span class="lineno"><a class="line" href="a00177.html#ga256b12b650c3f2fb86878fd1c5db8bc3"> 813</a></span>  <span class="keyword">typedef</span> detail::uint32 <a class="code" href="a00177.html#ga256b12b650c3f2fb86878fd1c5db8bc3">highp_uint32</a>;</div>
+<div class="line"><a name="l00814"></a><span class="lineno"> 814</span>  </div>
+<div class="line"><a name="l00817"></a><span class="lineno"><a class="line" href="a00177.html#gaa38d732f5d4a7bc42a1b43b9d3c141ce"> 817</a></span>  <span class="keyword">typedef</span> detail::uint64 <a class="code" href="a00177.html#gaa38d732f5d4a7bc42a1b43b9d3c141ce">highp_uint64</a>;</div>
+<div class="line"><a name="l00818"></a><span class="lineno"> 818</span>  </div>
+<div class="line"><a name="l00821"></a><span class="lineno"><a class="line" href="a00177.html#gac4e00a26a2adb5f2c0a7096810df29e5"> 821</a></span>  <span class="keyword">typedef</span> detail::uint8 <a class="code" href="a00177.html#gac4e00a26a2adb5f2c0a7096810df29e5">highp_uint8_t</a>;</div>
+<div class="line"><a name="l00822"></a><span class="lineno"> 822</span>  </div>
+<div class="line"><a name="l00825"></a><span class="lineno"><a class="line" href="a00177.html#gacf54c3330ef60aa3d16cb676c7bcb8c7"> 825</a></span>  <span class="keyword">typedef</span> detail::uint16 <a class="code" href="a00177.html#gacf54c3330ef60aa3d16cb676c7bcb8c7">highp_uint16_t</a>;</div>
+<div class="line"><a name="l00826"></a><span class="lineno"> 826</span>  </div>
+<div class="line"><a name="l00829"></a><span class="lineno"><a class="line" href="a00177.html#gae978599c9711ac263ba732d4ac225b0e"> 829</a></span>  <span class="keyword">typedef</span> detail::uint32 <a class="code" href="a00177.html#gae978599c9711ac263ba732d4ac225b0e">highp_uint32_t</a>;</div>
+<div class="line"><a name="l00830"></a><span class="lineno"> 830</span>  </div>
+<div class="line"><a name="l00833"></a><span class="lineno"><a class="line" href="a00177.html#gaa46172d7dc1c7ffe3e78107ff88adf08"> 833</a></span>  <span class="keyword">typedef</span> detail::uint64 <a class="code" href="a00177.html#gaa46172d7dc1c7ffe3e78107ff88adf08">highp_uint64_t</a>;</div>
+<div class="line"><a name="l00834"></a><span class="lineno"> 834</span>  </div>
+<div class="line"><a name="l00837"></a><span class="lineno"><a class="line" href="a00177.html#gacd1259f3a9e8d2a9df5be2d74322ef9c"> 837</a></span>  <span class="keyword">typedef</span> detail::uint8 <a class="code" href="a00177.html#gacd1259f3a9e8d2a9df5be2d74322ef9c">highp_u8</a>;</div>
+<div class="line"><a name="l00838"></a><span class="lineno"> 838</span>  </div>
+<div class="line"><a name="l00841"></a><span class="lineno"><a class="line" href="a00177.html#ga8e62c883d13f47015f3b70ed88751369"> 841</a></span>  <span class="keyword">typedef</span> detail::uint16 <a class="code" href="a00177.html#ga8e62c883d13f47015f3b70ed88751369">highp_u16</a>;</div>
+<div class="line"><a name="l00842"></a><span class="lineno"> 842</span>  </div>
+<div class="line"><a name="l00845"></a><span class="lineno"><a class="line" href="a00177.html#ga7a6f1929464dcc680b16381a4ee5f2cf"> 845</a></span>  <span class="keyword">typedef</span> detail::uint32 <a class="code" href="a00177.html#ga7a6f1929464dcc680b16381a4ee5f2cf">highp_u32</a>;</div>
+<div class="line"><a name="l00846"></a><span class="lineno"> 846</span>  </div>
+<div class="line"><a name="l00849"></a><span class="lineno"><a class="line" href="a00177.html#ga0c181fdf06a309691999926b6690c969"> 849</a></span>  <span class="keyword">typedef</span> detail::uint64 <a class="code" href="a00177.html#ga0c181fdf06a309691999926b6690c969">highp_u64</a>;</div>
+<div class="line"><a name="l00850"></a><span class="lineno"> 850</span>  </div>
+<div class="line"><a name="l00851"></a><span class="lineno"> 851</span>  </div>
+<div class="line"><a name="l00852"></a><span class="lineno"> 852</span>  </div>
+<div class="line"><a name="l00855"></a><span class="lineno"> 855</span>  <span class="keyword">typedef</span> detail::uint8 <a class="code" href="a00177.html#ga36475e31b1992cfde54c1a6f5a148865">uint8</a>;</div>
+<div class="line"><a name="l00856"></a><span class="lineno"> 856</span>  </div>
+<div class="line"><a name="l00859"></a><span class="lineno"> 859</span>  <span class="keyword">typedef</span> detail::uint16 <a class="code" href="a00177.html#ga13471cbbe74e4303a57f3743d007b74d">uint16</a>;</div>
+<div class="line"><a name="l00860"></a><span class="lineno"> 860</span>  </div>
+<div class="line"><a name="l00863"></a><span class="lineno"> 863</span>  <span class="keyword">typedef</span> detail::uint32 <a class="code" href="a00177.html#ga5fa3ddcab56c789bc272ff5651faa12d">uint32</a>;</div>
+<div class="line"><a name="l00864"></a><span class="lineno"> 864</span>  </div>
+<div class="line"><a name="l00867"></a><span class="lineno"> 867</span>  <span class="keyword">typedef</span> detail::uint64 <a class="code" href="a00177.html#gab630f76c26b50298187f7889104d4b9c">uint64</a>;</div>
+<div class="line"><a name="l00868"></a><span class="lineno"> 868</span>  </div>
+<div class="line"><a name="l00869"></a><span class="lineno"> 869</span> <span class="preprocessor">#if GLM_HAS_EXTENDED_INTEGER_TYPE</span></div>
+<div class="line"><a name="l00870"></a><span class="lineno"> 870</span>  <span class="keyword">using</span> <a class="code" href="a00177.html#ga28d97808322d3c92186e4a0c067d7e8e">std::uint8_t</a>;</div>
+<div class="line"><a name="l00871"></a><span class="lineno"> 871</span>  <span class="keyword">using</span> <a class="code" href="a00177.html#ga91f91f411080c37730856ff5887f5bcf">std::uint16_t</a>;</div>
+<div class="line"><a name="l00872"></a><span class="lineno"> 872</span>  <span class="keyword">using</span> <a class="code" href="a00177.html#ga2171d9dc1fefb1c82e2817f45b622eac">std::uint32_t</a>;</div>
+<div class="line"><a name="l00873"></a><span class="lineno"> 873</span>  <span class="keyword">using</span> <a class="code" href="a00177.html#ga3999d3e7ff22025c16ddb601e14dfdee">std::uint64_t</a>;</div>
+<div class="line"><a name="l00874"></a><span class="lineno"> 874</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00875"></a><span class="lineno"> 875</span>  <span class="keyword">typedef</span> detail::uint8 <a class="code" href="a00177.html#ga28d97808322d3c92186e4a0c067d7e8e">uint8_t</a>;</div>
+<div class="line"><a name="l00878"></a><span class="lineno"> 878</span>  </div>
+<div class="line"><a name="l00881"></a><span class="lineno"><a class="line" href="a00177.html#ga91f91f411080c37730856ff5887f5bcf"> 881</a></span>  <span class="keyword">typedef</span> detail::uint16 <a class="code" href="a00177.html#ga91f91f411080c37730856ff5887f5bcf">uint16_t</a>;</div>
+<div class="line"><a name="l00882"></a><span class="lineno"> 882</span>  </div>
+<div class="line"><a name="l00885"></a><span class="lineno"><a class="line" href="a00177.html#ga2171d9dc1fefb1c82e2817f45b622eac"> 885</a></span>  <span class="keyword">typedef</span> detail::uint32 <a class="code" href="a00177.html#ga2171d9dc1fefb1c82e2817f45b622eac">uint32_t</a>;</div>
+<div class="line"><a name="l00886"></a><span class="lineno"> 886</span>  </div>
+<div class="line"><a name="l00889"></a><span class="lineno"><a class="line" href="a00177.html#ga3999d3e7ff22025c16ddb601e14dfdee"> 889</a></span>  <span class="keyword">typedef</span> detail::uint64 <a class="code" href="a00177.html#ga3999d3e7ff22025c16ddb601e14dfdee">uint64_t</a>;</div>
+<div class="line"><a name="l00890"></a><span class="lineno"> 890</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00891"></a><span class="lineno"> 891</span> </div>
+<div class="line"><a name="l00894"></a><span class="lineno"><a class="line" href="a00177.html#gaecc7082561fc9028b844b6cf3d305d36"> 894</a></span>  <span class="keyword">typedef</span> detail::uint8 <a class="code" href="a00177.html#gaecc7082561fc9028b844b6cf3d305d36">u8</a>;</div>
+<div class="line"><a name="l00895"></a><span class="lineno"> 895</span> </div>
+<div class="line"><a name="l00898"></a><span class="lineno"><a class="line" href="a00177.html#gaa2d7acc0adb536fab71fe261232a40ff"> 898</a></span>  <span class="keyword">typedef</span> detail::uint16 <a class="code" href="a00177.html#gaa2d7acc0adb536fab71fe261232a40ff">u16</a>;</div>
+<div class="line"><a name="l00899"></a><span class="lineno"> 899</span> </div>
+<div class="line"><a name="l00902"></a><span class="lineno"><a class="line" href="a00177.html#ga8165913e068444f7842302d40ba897b9"> 902</a></span>  <span class="keyword">typedef</span> detail::uint32 <a class="code" href="a00177.html#ga8165913e068444f7842302d40ba897b9">u32</a>;</div>
+<div class="line"><a name="l00903"></a><span class="lineno"> 903</span> </div>
+<div class="line"><a name="l00906"></a><span class="lineno"><a class="line" href="a00177.html#gaf3f312156984c365e9f65620354da70b"> 906</a></span>  <span class="keyword">typedef</span> detail::uint64 <a class="code" href="a00177.html#gaf3f312156984c365e9f65620354da70b">u64</a>;</div>
+<div class="line"><a name="l00907"></a><span class="lineno"> 907</span> </div>
+<div class="line"><a name="l00908"></a><span class="lineno"> 908</span> </div>
+<div class="line"><a name="l00909"></a><span class="lineno"> 909</span> </div>
+<div class="line"><a name="l00912"></a><span class="lineno"> 912</span>  <span class="keyword">typedef</span> tvec1<u8, lowp> lowp_u8vec1;</div>
+<div class="line"><a name="l00913"></a><span class="lineno"> 913</span>  </div>
+<div class="line"><a name="l00916"></a><span class="lineno"> 916</span>  <span class="keyword">typedef</span> tvec2<u8, lowp> lowp_u8vec2;</div>
+<div class="line"><a name="l00917"></a><span class="lineno"> 917</span>  </div>
+<div class="line"><a name="l00920"></a><span class="lineno"> 920</span>  <span class="keyword">typedef</span> tvec3<u8, lowp> lowp_u8vec3;</div>
+<div class="line"><a name="l00921"></a><span class="lineno"> 921</span>  </div>
+<div class="line"><a name="l00924"></a><span class="lineno"> 924</span>  <span class="keyword">typedef</span> tvec4<u8, lowp> lowp_u8vec4;</div>
+<div class="line"><a name="l00925"></a><span class="lineno"> 925</span>  </div>
+<div class="line"><a name="l00926"></a><span class="lineno"> 926</span> </div>
+<div class="line"><a name="l00929"></a><span class="lineno"> 929</span>  <span class="keyword">typedef</span> tvec1<u8, mediump> mediump_u8vec1;</div>
+<div class="line"><a name="l00930"></a><span class="lineno"> 930</span> </div>
+<div class="line"><a name="l00933"></a><span class="lineno"> 933</span>  <span class="keyword">typedef</span> tvec2<u8, mediump> mediump_u8vec2;</div>
+<div class="line"><a name="l00934"></a><span class="lineno"> 934</span> </div>
+<div class="line"><a name="l00937"></a><span class="lineno"> 937</span>  <span class="keyword">typedef</span> tvec3<u8, mediump> mediump_u8vec3;</div>
+<div class="line"><a name="l00938"></a><span class="lineno"> 938</span> </div>
+<div class="line"><a name="l00941"></a><span class="lineno"> 941</span>  <span class="keyword">typedef</span> tvec4<u8, mediump> mediump_u8vec4;</div>
+<div class="line"><a name="l00942"></a><span class="lineno"> 942</span> </div>
+<div class="line"><a name="l00943"></a><span class="lineno"> 943</span> </div>
+<div class="line"><a name="l00946"></a><span class="lineno"> 946</span>  <span class="keyword">typedef</span> tvec1<u8, highp> highp_u8vec1;</div>
+<div class="line"><a name="l00947"></a><span class="lineno"> 947</span> </div>
+<div class="line"><a name="l00950"></a><span class="lineno"> 950</span>  <span class="keyword">typedef</span> tvec2<u8, highp> highp_u8vec2;</div>
+<div class="line"><a name="l00951"></a><span class="lineno"> 951</span> </div>
+<div class="line"><a name="l00954"></a><span class="lineno"> 954</span>  <span class="keyword">typedef</span> tvec3<u8, highp> highp_u8vec3;</div>
+<div class="line"><a name="l00955"></a><span class="lineno"> 955</span> </div>
+<div class="line"><a name="l00958"></a><span class="lineno"> 958</span>  <span class="keyword">typedef</span> tvec4<u8, highp> highp_u8vec4;</div>
+<div class="line"><a name="l00959"></a><span class="lineno"> 959</span> </div>
+<div class="line"><a name="l00960"></a><span class="lineno"> 960</span> <span class="preprocessor">#if(defined(GLM_PRECISION_LOWP_INT))</span></div>
+<div class="line"><a name="l00961"></a><span class="lineno"> 961</span>  <span class="keyword">typedef</span> lowp_u8vec1 <a class="code" href="a00177.html#ga92e0c191e5cc326255284d08be3af7c5">u8vec1</a>;</div>
+<div class="line"><a name="l00962"></a><span class="lineno"> 962</span>  <span class="keyword">typedef</span> lowp_u8vec2 <a class="code" href="a00177.html#ga61667c99caf60ce6c48ebbbac72bd91d">u8vec2</a>;</div>
+<div class="line"><a name="l00963"></a><span class="lineno"> 963</span>  <span class="keyword">typedef</span> lowp_u8vec3 <a class="code" href="a00177.html#ga8ca60d0ba6d438892be6017f43747661">u8vec3</a>;</div>
+<div class="line"><a name="l00964"></a><span class="lineno"> 964</span>  <span class="keyword">typedef</span> lowp_u8vec4 <a class="code" href="a00177.html#ga114e005014d910bea07954eee24b7efb">u8vec4</a>;</div>
+<div class="line"><a name="l00965"></a><span class="lineno"> 965</span> <span class="preprocessor">#elif(defined(GLM_PRECISION_MEDIUMP_INT))</span></div>
+<div class="line"><a name="l00966"></a><span class="lineno"> 966</span>  <span class="keyword">typedef</span> mediump_u8vec1 <a class="code" href="a00177.html#ga92e0c191e5cc326255284d08be3af7c5">u8vec1</a>;</div>
+<div class="line"><a name="l00967"></a><span class="lineno"> 967</span>  <span class="keyword">typedef</span> mediump_u8vec2 <a class="code" href="a00177.html#ga61667c99caf60ce6c48ebbbac72bd91d">u8vec2</a>;</div>
+<div class="line"><a name="l00968"></a><span class="lineno"> 968</span>  <span class="keyword">typedef</span> mediump_u8vec3 <a class="code" href="a00177.html#ga8ca60d0ba6d438892be6017f43747661">u8vec3</a>;</div>
+<div class="line"><a name="l00969"></a><span class="lineno"> 969</span>  <span class="keyword">typedef</span> mediump_u8vec4 <a class="code" href="a00177.html#ga114e005014d910bea07954eee24b7efb">u8vec4</a>; </div>
+<div class="line"><a name="l00970"></a><span class="lineno"> 970</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00971"></a><span class="lineno"> 971</span>  <span class="keyword">typedef</span> highp_u8vec1 <a class="code" href="a00177.html#ga92e0c191e5cc326255284d08be3af7c5">u8vec1</a>;</div>
+<div class="line"><a name="l00974"></a><span class="lineno"> 974</span> </div>
+<div class="line"><a name="l00977"></a><span class="lineno"><a class="line" href="a00177.html#ga61667c99caf60ce6c48ebbbac72bd91d"> 977</a></span>  <span class="keyword">typedef</span> highp_u8vec2 <a class="code" href="a00177.html#ga61667c99caf60ce6c48ebbbac72bd91d">u8vec2</a>;</div>
+<div class="line"><a name="l00978"></a><span class="lineno"> 978</span> </div>
+<div class="line"><a name="l00981"></a><span class="lineno"><a class="line" href="a00177.html#ga8ca60d0ba6d438892be6017f43747661"> 981</a></span>  <span class="keyword">typedef</span> highp_u8vec3 <a class="code" href="a00177.html#ga8ca60d0ba6d438892be6017f43747661">u8vec3</a>;</div>
+<div class="line"><a name="l00982"></a><span class="lineno"> 982</span> </div>
+<div class="line"><a name="l00985"></a><span class="lineno"><a class="line" href="a00177.html#ga114e005014d910bea07954eee24b7efb"> 985</a></span>  <span class="keyword">typedef</span> highp_u8vec4 <a class="code" href="a00177.html#ga114e005014d910bea07954eee24b7efb">u8vec4</a>;</div>
+<div class="line"><a name="l00986"></a><span class="lineno"> 986</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00987"></a><span class="lineno"> 987</span> </div>
+<div class="line"><a name="l00988"></a><span class="lineno"> 988</span> </div>
+<div class="line"><a name="l00991"></a><span class="lineno"> 991</span>  <span class="keyword">typedef</span> tvec1<u16, lowp> lowp_u16vec1;</div>
+<div class="line"><a name="l00992"></a><span class="lineno"> 992</span> </div>
+<div class="line"><a name="l00995"></a><span class="lineno"> 995</span>  <span class="keyword">typedef</span> tvec2<u16, lowp> lowp_u16vec2;</div>
+<div class="line"><a name="l00996"></a><span class="lineno"> 996</span> </div>
+<div class="line"><a name="l00999"></a><span class="lineno"> 999</span>  <span class="keyword">typedef</span> tvec3<u16, lowp> lowp_u16vec3;</div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> </div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>  <span class="keyword">typedef</span> tvec4<u16, lowp> lowp_u16vec4;</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span> </div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span> </div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>  <span class="keyword">typedef</span> tvec1<u16, mediump> mediump_u16vec1;</div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span> </div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>  <span class="keyword">typedef</span> tvec2<u16, mediump> mediump_u16vec2;</div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span> </div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>  <span class="keyword">typedef</span> tvec3<u16, mediump> mediump_u16vec3;</div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span> </div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>  <span class="keyword">typedef</span> tvec4<u16, mediump> mediump_u16vec4;</div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span> </div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span> </div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>  <span class="keyword">typedef</span> tvec1<u16, highp> highp_u16vec1;</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span> </div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>  <span class="keyword">typedef</span> tvec2<u16, highp> highp_u16vec2;</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span> </div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>  <span class="keyword">typedef</span> tvec3<u16, highp> highp_u16vec3;</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span> </div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>  <span class="keyword">typedef</span> tvec4<u16, highp> highp_u16vec4;</div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span> </div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span> </div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span> <span class="preprocessor">#if(defined(GLM_PRECISION_LOWP_INT))</span></div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>  <span class="keyword">typedef</span> lowp_u16vec1 <a class="code" href="a00177.html#gaefa2ce8fbdbe89baffd262f46f2d5907">u16vec1</a>;</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>  <span class="keyword">typedef</span> lowp_u16vec2 <a class="code" href="a00177.html#ga426030555085ed6c39a54e73afbef962">u16vec2</a>;</div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>  <span class="keyword">typedef</span> lowp_u16vec3 <a class="code" href="a00177.html#ga7f5dbe417199277e449b8db0210acb71">u16vec3</a>;</div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>  <span class="keyword">typedef</span> lowp_u16vec4 <a class="code" href="a00177.html#gaf524c9059f0342668d8eea359bcceaae">u16vec4</a>;</div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span> <span class="preprocessor">#elif(defined(GLM_PRECISION_MEDIUMP_INT))</span></div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>  <span class="keyword">typedef</span> mediump_u16vec1 <a class="code" href="a00177.html#gaefa2ce8fbdbe89baffd262f46f2d5907">u16vec1</a>;</div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>  <span class="keyword">typedef</span> mediump_u16vec2 <a class="code" href="a00177.html#ga426030555085ed6c39a54e73afbef962">u16vec2</a>;</div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>  <span class="keyword">typedef</span> mediump_u16vec3 <a class="code" href="a00177.html#ga7f5dbe417199277e449b8db0210acb71">u16vec3</a>;</div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>  <span class="keyword">typedef</span> mediump_u16vec4 <a class="code" href="a00177.html#gaf524c9059f0342668d8eea359bcceaae">u16vec4</a>;</div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>  <span class="keyword">typedef</span> highp_u16vec1 <a class="code" href="a00177.html#gaefa2ce8fbdbe89baffd262f46f2d5907">u16vec1</a>;</div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span> </div>
+<div class="line"><a name="l01057"></a><span class="lineno"><a class="line" href="a00177.html#ga426030555085ed6c39a54e73afbef962"> 1057</a></span>  <span class="keyword">typedef</span> highp_u16vec2 <a class="code" href="a00177.html#ga426030555085ed6c39a54e73afbef962">u16vec2</a>;</div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span> </div>
+<div class="line"><a name="l01061"></a><span class="lineno"><a class="line" href="a00177.html#ga7f5dbe417199277e449b8db0210acb71"> 1061</a></span>  <span class="keyword">typedef</span> highp_u16vec3 <a class="code" href="a00177.html#ga7f5dbe417199277e449b8db0210acb71">u16vec3</a>;</div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span> </div>
+<div class="line"><a name="l01065"></a><span class="lineno"><a class="line" href="a00177.html#gaf524c9059f0342668d8eea359bcceaae"> 1065</a></span>  <span class="keyword">typedef</span> highp_u16vec4 <a class="code" href="a00177.html#gaf524c9059f0342668d8eea359bcceaae">u16vec4</a>;</div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span> </div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span> </div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>  <span class="keyword">typedef</span> tvec1<u32, lowp> lowp_u32vec1;</div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span> </div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>  <span class="keyword">typedef</span> tvec2<u32, lowp> lowp_u32vec2;</div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span> </div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>  <span class="keyword">typedef</span> tvec3<u32, lowp> lowp_u32vec3;</div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span> </div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>  <span class="keyword">typedef</span> tvec4<u32, lowp> lowp_u32vec4;</div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span> </div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span> </div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>  <span class="keyword">typedef</span> tvec1<u32, mediump> mediump_u32vec1;</div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span> </div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>  <span class="keyword">typedef</span> tvec2<u32, mediump> mediump_u32vec2;</div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span> </div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>  <span class="keyword">typedef</span> tvec3<u32, mediump> mediump_u32vec3;</div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span> </div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>  <span class="keyword">typedef</span> tvec4<u32, mediump> mediump_u32vec4;</div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span> </div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span> </div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>  <span class="keyword">typedef</span> tvec1<u32, highp> highp_u32vec1;</div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span> </div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>  <span class="keyword">typedef</span> tvec2<u32, highp> highp_u32vec2;</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span> </div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>  <span class="keyword">typedef</span> tvec3<u32, highp> highp_u32vec3;</div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span> </div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>  <span class="keyword">typedef</span> tvec4<u32, highp> highp_u32vec4;</div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span> </div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span> <span class="preprocessor">#if(defined(GLM_PRECISION_LOWP_INT))</span></div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>  <span class="keyword">typedef</span> lowp_u32vec1 <a class="code" href="a00177.html#ga913a8bd51e4ebccd30ad488de3c18da9">u32vec1</a>;</div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>  <span class="keyword">typedef</span> lowp_u32vec2 <a class="code" href="a00177.html#ga0741d40e2b0fea4f1c50cb325114f075">u32vec2</a>;</div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>  <span class="keyword">typedef</span> lowp_u32vec3 <a class="code" href="a00177.html#gad9b52e1c271cb9c8bfae6365d3e38a23">u32vec3</a>;</div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>  <span class="keyword">typedef</span> lowp_u32vec4 <a class="code" href="a00177.html#ga155ac7e9e454e2b1f73d11e1e28a0fd6">u32vec4</a>;</div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span> <span class="preprocessor">#elif(defined(GLM_PRECISION_MEDIUMP_INT))</span></div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>  <span class="keyword">typedef</span> mediump_u32vec1 <a class="code" href="a00177.html#ga913a8bd51e4ebccd30ad488de3c18da9">u32vec1</a>;</div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>  <span class="keyword">typedef</span> mediump_u32vec2 <a class="code" href="a00177.html#ga0741d40e2b0fea4f1c50cb325114f075">u32vec2</a>;</div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>  <span class="keyword">typedef</span> mediump_u32vec3 <a class="code" href="a00177.html#gad9b52e1c271cb9c8bfae6365d3e38a23">u32vec3</a>;</div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>  <span class="keyword">typedef</span> mediump_u32vec4 <a class="code" href="a00177.html#ga155ac7e9e454e2b1f73d11e1e28a0fd6">u32vec4</a>;</div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>  <span class="keyword">typedef</span> highp_u32vec1 <a class="code" href="a00177.html#ga913a8bd51e4ebccd30ad488de3c18da9">u32vec1</a>;</div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span> </div>
+<div class="line"><a name="l01136"></a><span class="lineno"><a class="line" href="a00177.html#ga0741d40e2b0fea4f1c50cb325114f075"> 1136</a></span>  <span class="keyword">typedef</span> highp_u32vec2 <a class="code" href="a00177.html#ga0741d40e2b0fea4f1c50cb325114f075">u32vec2</a>;</div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span> </div>
+<div class="line"><a name="l01140"></a><span class="lineno"><a class="line" href="a00177.html#gad9b52e1c271cb9c8bfae6365d3e38a23"> 1140</a></span>  <span class="keyword">typedef</span> highp_u32vec3 <a class="code" href="a00177.html#gad9b52e1c271cb9c8bfae6365d3e38a23">u32vec3</a>;</div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span> </div>
+<div class="line"><a name="l01144"></a><span class="lineno"><a class="line" href="a00177.html#ga155ac7e9e454e2b1f73d11e1e28a0fd6"> 1144</a></span>  <span class="keyword">typedef</span> highp_u32vec4 <a class="code" href="a00177.html#ga155ac7e9e454e2b1f73d11e1e28a0fd6">u32vec4</a>;</div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span> </div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span> </div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>  <span class="keyword">typedef</span> tvec1<u32, lowp> lowp_u32vec1;</div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span> </div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>  <span class="keyword">typedef</span> tvec2<u32, lowp> lowp_u32vec2;</div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span> </div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>  <span class="keyword">typedef</span> tvec3<u32, lowp> lowp_u32vec3;</div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span> </div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>  <span class="keyword">typedef</span> tvec4<u32, lowp> lowp_u32vec4;</div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span> </div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span> </div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>  <span class="keyword">typedef</span> tvec1<u32, mediump> mediump_u32vec1;</div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span> </div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>  <span class="keyword">typedef</span> tvec2<u32, mediump> mediump_u32vec2;</div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span> </div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>  <span class="keyword">typedef</span> tvec3<u32, mediump> mediump_u32vec3;</div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span> </div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>  <span class="keyword">typedef</span> tvec4<u32, mediump> mediump_u32vec4;</div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span> </div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span> </div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>  <span class="keyword">typedef</span> tvec1<u32, highp> highp_u32vec1;</div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span> </div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>  <span class="keyword">typedef</span> tvec2<u32, highp> highp_u32vec2;</div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span> </div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>  <span class="keyword">typedef</span> tvec3<u32, highp> highp_u32vec3;</div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span> </div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>  <span class="keyword">typedef</span> tvec4<u32, highp> highp_u32vec4;</div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span> </div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span> <span class="preprocessor">#if(defined(GLM_PRECISION_LOWP_INT))</span></div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>  <span class="keyword">typedef</span> lowp_u32vec1 <a class="code" href="a00177.html#ga913a8bd51e4ebccd30ad488de3c18da9">u32vec1</a>;</div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>  <span class="keyword">typedef</span> lowp_u32vec2 <a class="code" href="a00177.html#ga0741d40e2b0fea4f1c50cb325114f075">u32vec2</a>;</div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>  <span class="keyword">typedef</span> lowp_u32vec3 <a class="code" href="a00177.html#gad9b52e1c271cb9c8bfae6365d3e38a23">u32vec3</a>;</div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>  <span class="keyword">typedef</span> lowp_u32vec4 <a class="code" href="a00177.html#ga155ac7e9e454e2b1f73d11e1e28a0fd6">u32vec4</a>;</div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span> <span class="preprocessor">#elif(defined(GLM_PRECISION_MEDIUMP_INT))</span></div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>  <span class="keyword">typedef</span> mediump_u32vec1 <a class="code" href="a00177.html#ga913a8bd51e4ebccd30ad488de3c18da9">u32vec1</a>;</div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>  <span class="keyword">typedef</span> mediump_u32vec2 <a class="code" href="a00177.html#ga0741d40e2b0fea4f1c50cb325114f075">u32vec2</a>;</div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>  <span class="keyword">typedef</span> mediump_u32vec3 <a class="code" href="a00177.html#gad9b52e1c271cb9c8bfae6365d3e38a23">u32vec3</a>;</div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>  <span class="keyword">typedef</span> mediump_u32vec4 <a class="code" href="a00177.html#ga155ac7e9e454e2b1f73d11e1e28a0fd6">u32vec4</a>;</div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>  <span class="keyword">typedef</span> highp_u32vec1 <a class="code" href="a00177.html#ga913a8bd51e4ebccd30ad488de3c18da9">u32vec1</a>;</div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span> </div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>  <span class="keyword">typedef</span> highp_u32vec2 <a class="code" href="a00177.html#ga0741d40e2b0fea4f1c50cb325114f075">u32vec2</a>;</div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>  </div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>  <span class="keyword">typedef</span> highp_u32vec3 <a class="code" href="a00177.html#gad9b52e1c271cb9c8bfae6365d3e38a23">u32vec3</a>;</div>
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>  </div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>  <span class="keyword">typedef</span> highp_u32vec4 <a class="code" href="a00177.html#ga155ac7e9e454e2b1f73d11e1e28a0fd6">u32vec4</a>;</div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span> </div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span> </div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>  </div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>  <span class="keyword">typedef</span> tvec1<u64, lowp> lowp_u64vec1;</div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span> </div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>  <span class="keyword">typedef</span> tvec2<u64, lowp> lowp_u64vec2;</div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span> </div>
+<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>  <span class="keyword">typedef</span> tvec3<u64, lowp> lowp_u64vec3;</div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span> </div>
+<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>  <span class="keyword">typedef</span> tvec4<u64, lowp> lowp_u64vec4;</div>
+<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span> </div>
+<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span> </div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>  <span class="keyword">typedef</span> tvec1<u64, mediump> mediump_u64vec1;</div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span> </div>
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>  <span class="keyword">typedef</span> tvec2<u64, mediump> mediump_u64vec2;</div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span> </div>
+<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>  <span class="keyword">typedef</span> tvec3<u64, mediump> mediump_u64vec3;</div>
+<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span> </div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>  <span class="keyword">typedef</span> tvec4<u64, mediump> mediump_u64vec4;</div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span> </div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span> </div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>  <span class="keyword">typedef</span> tvec1<u64, highp> highp_u64vec1;</div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span> </div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>  <span class="keyword">typedef</span> tvec2<u64, highp> highp_u64vec2;</div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span> </div>
+<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>  <span class="keyword">typedef</span> tvec3<u64, highp> highp_u64vec3;</div>
+<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span> </div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>  <span class="keyword">typedef</span> tvec4<u64, highp> highp_u64vec4;</div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span> </div>
+<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span> <span class="preprocessor">#if(defined(GLM_PRECISION_LOWP_UINT))</span></div>
+<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>  <span class="keyword">typedef</span> lowp_u64vec1 <a class="code" href="a00177.html#ga793c9293cc687a0e342396a377c5df77">u64vec1</a>;</div>
+<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>  <span class="keyword">typedef</span> lowp_u64vec2 <a class="code" href="a00177.html#ga2204827de9d4ee7fa92ef497093f7d6e">u64vec2</a>;</div>
+<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>  <span class="keyword">typedef</span> lowp_u64vec3 <a class="code" href="a00177.html#ga3460933f040f59f0fedb29df1e9be71c">u64vec3</a>;</div>
+<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>  <span class="keyword">typedef</span> lowp_u64vec4 <a class="code" href="a00177.html#gafb6ca34df28889a5db9d244aed375411">u64vec4</a>;</div>
+<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span> <span class="preprocessor">#elif(defined(GLM_PRECISION_MEDIUMP_UINT))</span></div>
+<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>  <span class="keyword">typedef</span> mediump_u64vec1 <a class="code" href="a00177.html#ga793c9293cc687a0e342396a377c5df77">u64vec1</a>;</div>
+<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>  <span class="keyword">typedef</span> mediump_u64vec2 <a class="code" href="a00177.html#ga2204827de9d4ee7fa92ef497093f7d6e">u64vec2</a>;</div>
+<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>  <span class="keyword">typedef</span> mediump_u64vec3 <a class="code" href="a00177.html#ga3460933f040f59f0fedb29df1e9be71c">u64vec3</a>;</div>
+<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>  <span class="keyword">typedef</span> mediump_u64vec4 <a class="code" href="a00177.html#gafb6ca34df28889a5db9d244aed375411">u64vec4</a>;</div>
+<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>  <span class="keyword">typedef</span> highp_u64vec1 <a class="code" href="a00177.html#ga793c9293cc687a0e342396a377c5df77">u64vec1</a>;</div>
+<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span> </div>
+<div class="line"><a name="l01295"></a><span class="lineno"><a class="line" href="a00177.html#ga2204827de9d4ee7fa92ef497093f7d6e"> 1295</a></span>  <span class="keyword">typedef</span> highp_u64vec2 <a class="code" href="a00177.html#ga2204827de9d4ee7fa92ef497093f7d6e">u64vec2</a>;</div>
+<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>  </div>
+<div class="line"><a name="l01299"></a><span class="lineno"><a class="line" href="a00177.html#ga3460933f040f59f0fedb29df1e9be71c"> 1299</a></span>  <span class="keyword">typedef</span> highp_u64vec3 <a class="code" href="a00177.html#ga3460933f040f59f0fedb29df1e9be71c">u64vec3</a>;</div>
+<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>  </div>
+<div class="line"><a name="l01303"></a><span class="lineno"><a class="line" href="a00177.html#gafb6ca34df28889a5db9d244aed375411"> 1303</a></span>  <span class="keyword">typedef</span> highp_u64vec4 <a class="code" href="a00177.html#gafb6ca34df28889a5db9d244aed375411">u64vec4</a>;</div>
+<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>  </div>
+<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>  </div>
+<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>  <span class="comment">// Float vector types</span></div>
+<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span> </div>
+<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>  <span class="keyword">typedef</span> detail::float32 lowp_float32;</div>
+<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span> </div>
+<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>  <span class="keyword">typedef</span> detail::float64 lowp_float64;</div>
+<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span> </div>
+<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>  <span class="keyword">typedef</span> detail::float32 lowp_float32_t;</div>
+<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span> </div>
+<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>  <span class="keyword">typedef</span> detail::float64 lowp_float64_t;</div>
+<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span> </div>
+<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>  <span class="keyword">typedef</span> <a class="code" href="a00177.html#gad3c127f8bf8d7d4e738037c257abb5b1">float32</a> lowp_f32;</div>
+<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span> </div>
+<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>  <span class="keyword">typedef</span> <a class="code" href="a00177.html#gab5596d48586414c91ccb270962dc14d3">float64</a> lowp_f64;</div>
+<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span> </div>
+<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>  <span class="keyword">typedef</span> detail::float32 lowp_float32;</div>
+<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span> </div>
+<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>  <span class="keyword">typedef</span> detail::float64 lowp_float64;</div>
+<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span> </div>
+<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>  <span class="keyword">typedef</span> detail::float32 lowp_float32_t;</div>
+<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span> </div>
+<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>  <span class="keyword">typedef</span> detail::float64 lowp_float64_t;</div>
+<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span> </div>
+<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>  <span class="keyword">typedef</span> <a class="code" href="a00177.html#gad3c127f8bf8d7d4e738037c257abb5b1">float32</a> lowp_f32;</div>
+<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span> </div>
+<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>  <span class="keyword">typedef</span> <a class="code" href="a00177.html#gab5596d48586414c91ccb270962dc14d3">float64</a> lowp_f64;</div>
+<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span> </div>
+<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span> </div>
+<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>  <span class="keyword">typedef</span> detail::float32 lowp_float32;</div>
+<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span> </div>
+<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>  <span class="keyword">typedef</span> detail::float64 lowp_float64;</div>
+<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span> </div>
+<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>  <span class="keyword">typedef</span> detail::float32 lowp_float32_t;</div>
+<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>  </div>
+<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>  <span class="keyword">typedef</span> detail::float64 lowp_float64_t;</div>
+<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span> </div>
+<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>  <span class="keyword">typedef</span> <a class="code" href="a00177.html#gad3c127f8bf8d7d4e738037c257abb5b1">float32</a> lowp_f32;</div>
+<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span> </div>
+<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>  <span class="keyword">typedef</span> <a class="code" href="a00177.html#gab5596d48586414c91ccb270962dc14d3">float64</a> lowp_f64;</div>
+<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span> </div>
+<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span> </div>
+<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>  <span class="keyword">typedef</span> detail::float32 mediump_float32;</div>
+<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span> </div>
+<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>  <span class="keyword">typedef</span> detail::float64 mediump_float64;</div>
+<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span> </div>
+<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>  <span class="keyword">typedef</span> detail::float32 mediump_float32_t;</div>
+<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span> </div>
+<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>  <span class="keyword">typedef</span> detail::float64 mediump_float64_t;</div>
+<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span> </div>
+<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>  <span class="keyword">typedef</span> <a class="code" href="a00177.html#gad3c127f8bf8d7d4e738037c257abb5b1">float32</a> mediump_f32;</div>
+<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span> </div>
+<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>  <span class="keyword">typedef</span> <a class="code" href="a00177.html#gab5596d48586414c91ccb270962dc14d3">float64</a> mediump_f64;</div>
+<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span> </div>
+<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span> </div>
+<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>  <span class="keyword">typedef</span> detail::float32 highp_float32;</div>
+<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span> </div>
+<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>  <span class="keyword">typedef</span> detail::float64 highp_float64;</div>
+<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span> </div>
+<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>  <span class="keyword">typedef</span> detail::float32 highp_float32_t;</div>
+<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span> </div>
+<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>  <span class="keyword">typedef</span> detail::float64 highp_float64_t;</div>
+<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span> </div>
+<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>  <span class="keyword">typedef</span> <a class="code" href="a00177.html#gad3c127f8bf8d7d4e738037c257abb5b1">float32</a> highp_f32;</div>
+<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span> </div>
+<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>  <span class="keyword">typedef</span> <a class="code" href="a00177.html#gab5596d48586414c91ccb270962dc14d3">float64</a> highp_f64;</div>
+<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span> </div>
+<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span> </div>
+<div class="line"><a name="l01434"></a><span class="lineno"> 1434</span> <span class="preprocessor">#if(defined(GLM_PRECISION_LOWP_FLOAT))</span></div>
+<div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>  <span class="keyword">typedef</span> lowp_float32 <a class="code" href="a00177.html#gad3c127f8bf8d7d4e738037c257abb5b1">float32</a>;</div>
+<div class="line"><a name="l01438"></a><span class="lineno"> 1438</span> </div>
+<div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>  <span class="keyword">typedef</span> lowp_float64 <a class="code" href="a00177.html#gab5596d48586414c91ccb270962dc14d3">float64</a>;</div>
+<div class="line"><a name="l01442"></a><span class="lineno"> 1442</span> </div>
+<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>  <span class="keyword">typedef</span> lowp_float32_t <a class="code" href="a00177.html#ga41d579d81c3d98edd0532244fa02da77">float32_t</a>;</div>
+<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span> </div>
+<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>  <span class="keyword">typedef</span> lowp_float64_t <a class="code" href="a00177.html#ga6957c7b22f405683bb276554ca40dc37">float64_t</a>;</div>
+<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span> </div>
+<div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>  <span class="keyword">typedef</span> lowp_f32 <a class="code" href="a00177.html#gabe6a542dd6c1d5ffd847f1b9b4c9c9b7">f32</a>;</div>
+<div class="line"><a name="l01454"></a><span class="lineno"> 1454</span> </div>
+<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>  <span class="keyword">typedef</span> lowp_f64 <a class="code" href="a00177.html#ga1d794d240091678f602e8de225b8d8c9">f64</a>;</div>
+<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span> </div>
+<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span> <span class="preprocessor">#elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))</span></div>
+<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span> </div>
+<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>  <span class="keyword">typedef</span> mediump_float32 float32;</div>
+<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span> </div>
+<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>  <span class="keyword">typedef</span> mediump_float64 float64;</div>
+<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span> </div>
+<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>  <span class="keyword">typedef</span> mediump_float32 <a class="code" href="a00177.html#ga41d579d81c3d98edd0532244fa02da77">float32_t</a>;</div>
+<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span> </div>
+<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>  <span class="keyword">typedef</span> mediump_float64 <a class="code" href="a00177.html#ga6957c7b22f405683bb276554ca40dc37">float64_t</a>;</div>
+<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span> </div>
+<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>  <span class="keyword">typedef</span> mediump_float32 <a class="code" href="a00177.html#gabe6a542dd6c1d5ffd847f1b9b4c9c9b7">f32</a>;</div>
+<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span> </div>
+<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>  <span class="keyword">typedef</span> mediump_float64 <a class="code" href="a00177.html#ga1d794d240091678f602e8de225b8d8c9">f64</a>;</div>
+<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span> </div>
+<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span> <span class="preprocessor">#else//(defined(GLM_PRECISION_HIGHP_FLOAT))</span></div>
+<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span> </div>
+<div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>  <span class="keyword">typedef</span> highp_float32 float32;</div>
+<div class="line"><a name="l01490"></a><span class="lineno"> 1490</span> </div>
+<div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>  <span class="keyword">typedef</span> highp_float64 float64;</div>
+<div class="line"><a name="l01494"></a><span class="lineno"> 1494</span> </div>
+<div class="line"><a name="l01497"></a><span class="lineno"><a class="line" href="a00177.html#ga41d579d81c3d98edd0532244fa02da77"> 1497</a></span>  <span class="keyword">typedef</span> highp_float32_t <a class="code" href="a00177.html#ga41d579d81c3d98edd0532244fa02da77">float32_t</a>;</div>
+<div class="line"><a name="l01498"></a><span class="lineno"> 1498</span> </div>
+<div class="line"><a name="l01501"></a><span class="lineno"><a class="line" href="a00177.html#ga6957c7b22f405683bb276554ca40dc37"> 1501</a></span>  <span class="keyword">typedef</span> highp_float64_t <a class="code" href="a00177.html#ga6957c7b22f405683bb276554ca40dc37">float64_t</a>;</div>
+<div class="line"><a name="l01502"></a><span class="lineno"> 1502</span> </div>
+<div class="line"><a name="l01505"></a><span class="lineno"><a class="line" href="a00177.html#gabe6a542dd6c1d5ffd847f1b9b4c9c9b7"> 1505</a></span>  <span class="keyword">typedef</span> highp_float32_t <a class="code" href="a00177.html#gabe6a542dd6c1d5ffd847f1b9b4c9c9b7">f32</a>;</div>
+<div class="line"><a name="l01506"></a><span class="lineno"> 1506</span> </div>
+<div class="line"><a name="l01509"></a><span class="lineno"><a class="line" href="a00177.html#ga1d794d240091678f602e8de225b8d8c9"> 1509</a></span>  <span class="keyword">typedef</span> highp_float64_t <a class="code" href="a00177.html#ga1d794d240091678f602e8de225b8d8c9">f64</a>;</div>
+<div class="line"><a name="l01510"></a><span class="lineno"> 1510</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01511"></a><span class="lineno"> 1511</span> </div>
+<div class="line"><a name="l01512"></a><span class="lineno"> 1512</span> </div>
+<div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>  <span class="keyword">typedef</span> tvec1<float, lowp> lowp_vec1;</div>
+<div class="line"><a name="l01516"></a><span class="lineno"> 1516</span> </div>
+<div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>  <span class="keyword">typedef</span> tvec2<float, lowp> <a class="code" href="a00158.html#ga51e835b2aa735782f0174328acffa521">lowp_vec2</a>;</div>
+<div class="line"><a name="l01520"></a><span class="lineno"> 1520</span> </div>
+<div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>  <span class="keyword">typedef</span> tvec3<float, lowp> <a class="code" href="a00158.html#gaf89f8fb5a06848ea4ec1c3a02813454e">lowp_vec3</a>;</div>
+<div class="line"><a name="l01524"></a><span class="lineno"> 1524</span> </div>
+<div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>  <span class="keyword">typedef</span> tvec4<float, lowp> <a class="code" href="a00158.html#ga8f9002d3ab660e3171f5cdea1aab8395">lowp_vec4</a>;</div>
+<div class="line"><a name="l01528"></a><span class="lineno"> 1528</span> </div>
+<div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>  <span class="keyword">typedef</span> tvec1<float, lowp> lowp_fvec1;</div>
+<div class="line"><a name="l01532"></a><span class="lineno"> 1532</span> </div>
+<div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>  <span class="keyword">typedef</span> tvec2<float, lowp> lowp_fvec2;</div>
+<div class="line"><a name="l01536"></a><span class="lineno"> 1536</span> </div>
+<div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>  <span class="keyword">typedef</span> tvec3<float, lowp> lowp_fvec3;</div>
+<div class="line"><a name="l01540"></a><span class="lineno"> 1540</span> </div>
+<div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>  <span class="keyword">typedef</span> tvec4<float, lowp> lowp_fvec4;</div>
+<div class="line"><a name="l01544"></a><span class="lineno"> 1544</span> </div>
+<div class="line"><a name="l01545"></a><span class="lineno"> 1545</span> </div>
+<div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>  <span class="keyword">typedef</span> tvec1<float, mediump> mediump_vec1;</div>
+<div class="line"><a name="l01549"></a><span class="lineno"> 1549</span> </div>
+<div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>  <span class="keyword">typedef</span> tvec2<float, mediump> <a class="code" href="a00158.html#gac37a3fd0ecdcab044853c039409c9af7">mediump_vec2</a>;</div>
+<div class="line"><a name="l01553"></a><span class="lineno"> 1553</span> </div>
+<div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>  <span class="keyword">typedef</span> tvec3<float, mediump> <a class="code" href="a00158.html#ga591478a77e4324e0836abc17cbb13e83">mediump_vec3</a>;</div>
+<div class="line"><a name="l01557"></a><span class="lineno"> 1557</span> </div>
+<div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>  <span class="keyword">typedef</span> tvec4<float, mediump> <a class="code" href="a00158.html#gaae72e97529b8fa4e0341b425d4fe03ae">mediump_vec4</a>;</div>
+<div class="line"><a name="l01561"></a><span class="lineno"> 1561</span> </div>
+<div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>  <span class="keyword">typedef</span> tvec1<float, mediump> mediump_fvec1;</div>
+<div class="line"><a name="l01565"></a><span class="lineno"> 1565</span> </div>
+<div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>  <span class="keyword">typedef</span> tvec2<float, mediump> mediump_fvec2;</div>
+<div class="line"><a name="l01569"></a><span class="lineno"> 1569</span> </div>
+<div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>  <span class="keyword">typedef</span> tvec3<float, mediump> mediump_fvec3;</div>
+<div class="line"><a name="l01573"></a><span class="lineno"> 1573</span> </div>
+<div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>  <span class="keyword">typedef</span> tvec4<float, mediump> mediump_fvec4;</div>
+<div class="line"><a name="l01577"></a><span class="lineno"> 1577</span> </div>
+<div class="line"><a name="l01578"></a><span class="lineno"> 1578</span> </div>
+<div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>  <span class="keyword">typedef</span> tvec1<float, highp> highp_vec1;</div>
+<div class="line"><a name="l01582"></a><span class="lineno"> 1582</span> </div>
+<div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>  <span class="keyword">typedef</span> tvec2<float, highp> <a class="code" href="a00158.html#gabfc3e9f63cc3e2ee0521405277ef3997">highp_vec2</a>;</div>
+<div class="line"><a name="l01586"></a><span class="lineno"> 1586</span> </div>
+<div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>  <span class="keyword">typedef</span> tvec3<float, highp> <a class="code" href="a00158.html#ga7b31b02c5558e2f8e5d8439ae3803d3a">highp_vec3</a>;</div>
+<div class="line"><a name="l01590"></a><span class="lineno"> 1590</span> </div>
+<div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>  <span class="keyword">typedef</span> tvec4<float, highp> <a class="code" href="a00158.html#gade7cb496ed3d78b2a11f1651cce77239">highp_vec4</a>;</div>
+<div class="line"><a name="l01594"></a><span class="lineno"> 1594</span> </div>
+<div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>  <span class="keyword">typedef</span> tvec1<float, highp> highp_fvec1;</div>
+<div class="line"><a name="l01598"></a><span class="lineno"> 1598</span> </div>
+<div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>  <span class="keyword">typedef</span> tvec2<float, highp> highp_fvec2;</div>
+<div class="line"><a name="l01602"></a><span class="lineno"> 1602</span> </div>
+<div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>  <span class="keyword">typedef</span> tvec3<float, highp> highp_fvec3;</div>
+<div class="line"><a name="l01606"></a><span class="lineno"> 1606</span> </div>
+<div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>  <span class="keyword">typedef</span> tvec4<float, highp> highp_fvec4;</div>
+<div class="line"><a name="l01610"></a><span class="lineno"> 1610</span> </div>
+<div class="line"><a name="l01611"></a><span class="lineno"> 1611</span> </div>
+<div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>  <span class="keyword">typedef</span> tvec1<f32, lowp> lowp_f32vec1;</div>
+<div class="line"><a name="l01615"></a><span class="lineno"> 1615</span> </div>
+<div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>  <span class="keyword">typedef</span> tvec2<f32, lowp> lowp_f32vec2;</div>
+<div class="line"><a name="l01619"></a><span class="lineno"> 1619</span> </div>
+<div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>  <span class="keyword">typedef</span> tvec3<f32, lowp> lowp_f32vec3;</div>
+<div class="line"><a name="l01623"></a><span class="lineno"> 1623</span> </div>
+<div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>  <span class="keyword">typedef</span> tvec4<f32, lowp> lowp_f32vec4;</div>
+<div class="line"><a name="l01627"></a><span class="lineno"> 1627</span> </div>
+<div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>  <span class="keyword">typedef</span> tvec1<f32, mediump> mediump_f32vec1;</div>
+<div class="line"><a name="l01631"></a><span class="lineno"> 1631</span> </div>
+<div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>  <span class="keyword">typedef</span> tvec2<f32, mediump> mediump_f32vec2;</div>
+<div class="line"><a name="l01635"></a><span class="lineno"> 1635</span> </div>
+<div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>  <span class="keyword">typedef</span> tvec3<f32, mediump> mediump_f32vec3;</div>
+<div class="line"><a name="l01639"></a><span class="lineno"> 1639</span> </div>
+<div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>  <span class="keyword">typedef</span> tvec4<f32, mediump> mediump_f32vec4;</div>
+<div class="line"><a name="l01643"></a><span class="lineno"> 1643</span> </div>
+<div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>  <span class="keyword">typedef</span> tvec1<f32, highp> highp_f32vec1;</div>
+<div class="line"><a name="l01647"></a><span class="lineno"> 1647</span> </div>
+<div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>  <span class="keyword">typedef</span> tvec2<f32, highp> highp_f32vec2;</div>
+<div class="line"><a name="l01651"></a><span class="lineno"> 1651</span> </div>
+<div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>  <span class="keyword">typedef</span> tvec3<f32, highp> highp_f32vec3;</div>
+<div class="line"><a name="l01655"></a><span class="lineno"> 1655</span> </div>
+<div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>  <span class="keyword">typedef</span> tvec4<f32, highp> highp_f32vec4;</div>
+<div class="line"><a name="l01659"></a><span class="lineno"> 1659</span> </div>
+<div class="line"><a name="l01660"></a><span class="lineno"> 1660</span> </div>
+<div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>  <span class="keyword">typedef</span> tvec1<f64, lowp> lowp_f64vec1;</div>
+<div class="line"><a name="l01664"></a><span class="lineno"> 1664</span> </div>
+<div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>  <span class="keyword">typedef</span> tvec2<f64, lowp> lowp_f64vec2;</div>
+<div class="line"><a name="l01668"></a><span class="lineno"> 1668</span> </div>
+<div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>  <span class="keyword">typedef</span> tvec3<f64, lowp> lowp_f64vec3;</div>
+<div class="line"><a name="l01672"></a><span class="lineno"> 1672</span> </div>
+<div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>  <span class="keyword">typedef</span> tvec4<f64, lowp> lowp_f64vec4;</div>
+<div class="line"><a name="l01676"></a><span class="lineno"> 1676</span> </div>
+<div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>  <span class="keyword">typedef</span> tvec1<f64, mediump> mediump_f64vec1;</div>
+<div class="line"><a name="l01680"></a><span class="lineno"> 1680</span> </div>
+<div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>  <span class="keyword">typedef</span> tvec2<f64, mediump> mediump_f64vec2;</div>
+<div class="line"><a name="l01684"></a><span class="lineno"> 1684</span> </div>
+<div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>  <span class="keyword">typedef</span> tvec3<f64, mediump> mediump_f64vec3;</div>
+<div class="line"><a name="l01688"></a><span class="lineno"> 1688</span> </div>
+<div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>  <span class="keyword">typedef</span> tvec4<f64, mediump> mediump_f64vec4;</div>
+<div class="line"><a name="l01692"></a><span class="lineno"> 1692</span> </div>
+<div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>  <span class="keyword">typedef</span> tvec1<f64, highp> highp_f64vec1;</div>
+<div class="line"><a name="l01696"></a><span class="lineno"> 1696</span> </div>
+<div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>  <span class="keyword">typedef</span> tvec2<f64, highp> highp_f64vec2;</div>
+<div class="line"><a name="l01700"></a><span class="lineno"> 1700</span> </div>
+<div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>  <span class="keyword">typedef</span> tvec3<f64, highp> highp_f64vec3;</div>
+<div class="line"><a name="l01704"></a><span class="lineno"> 1704</span> </div>
+<div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>  <span class="keyword">typedef</span> tvec4<f64, highp> highp_f64vec4;</div>
+<div class="line"><a name="l01708"></a><span class="lineno"> 1708</span> </div>
+<div class="line"><a name="l01709"></a><span class="lineno"> 1709</span> </div>
+<div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>  <span class="comment">// Float matrix types</span></div>
+<div class="line"><a name="l01712"></a><span class="lineno"> 1712</span> </div>
+<div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>  <span class="comment">//typedef lowp_f32 lowp_fmat1x1;</span></div>
+<div class="line"><a name="l01716"></a><span class="lineno"> 1716</span> </div>
+<div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>  <span class="keyword">typedef</span> tmat2x2<f32, lowp> lowp_fmat2x2;</div>
+<div class="line"><a name="l01720"></a><span class="lineno"> 1720</span> </div>
+<div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>  <span class="keyword">typedef</span> tmat2x3<f32, lowp> lowp_fmat2x3;</div>
+<div class="line"><a name="l01724"></a><span class="lineno"> 1724</span> </div>
+<div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>  <span class="keyword">typedef</span> tmat2x4<f32, lowp> lowp_fmat2x4;</div>
+<div class="line"><a name="l01728"></a><span class="lineno"> 1728</span> </div>
+<div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>  <span class="keyword">typedef</span> tmat3x2<f32, lowp> lowp_fmat3x2;</div>
+<div class="line"><a name="l01732"></a><span class="lineno"> 1732</span> </div>
+<div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>  <span class="keyword">typedef</span> tmat3x3<f32, lowp> lowp_fmat3x3;</div>
+<div class="line"><a name="l01736"></a><span class="lineno"> 1736</span> </div>
+<div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>  <span class="keyword">typedef</span> tmat3x4<f32, lowp> lowp_fmat3x4;</div>
+<div class="line"><a name="l01740"></a><span class="lineno"> 1740</span> </div>
+<div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>  <span class="keyword">typedef</span> tmat4x2<f32, lowp> lowp_fmat4x2;</div>
+<div class="line"><a name="l01744"></a><span class="lineno"> 1744</span> </div>
+<div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>  <span class="keyword">typedef</span> tmat4x3<f32, lowp> lowp_fmat4x3;</div>
+<div class="line"><a name="l01748"></a><span class="lineno"> 1748</span> </div>
+<div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>  <span class="keyword">typedef</span> tmat4x4<f32, lowp> lowp_fmat4x4;</div>
+<div class="line"><a name="l01752"></a><span class="lineno"> 1752</span> </div>
+<div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>  <span class="comment">//typedef lowp_fmat1x1 lowp_fmat1;</span></div>
+<div class="line"><a name="l01756"></a><span class="lineno"> 1756</span> </div>
+<div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>  <span class="keyword">typedef</span> lowp_fmat2x2 lowp_fmat2;</div>
+<div class="line"><a name="l01760"></a><span class="lineno"> 1760</span> </div>
+<div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>  <span class="keyword">typedef</span> lowp_fmat3x3 lowp_fmat3;</div>
+<div class="line"><a name="l01764"></a><span class="lineno"> 1764</span> </div>
+<div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>  <span class="keyword">typedef</span> lowp_fmat4x4 lowp_fmat4;</div>
+<div class="line"><a name="l01768"></a><span class="lineno"> 1768</span> </div>
+<div class="line"><a name="l01769"></a><span class="lineno"> 1769</span> </div>
+<div class="line"><a name="l01772"></a><span class="lineno"> 1772</span>  <span class="comment">//typedef mediump_f32 mediump_fmat1x1;</span></div>
+<div class="line"><a name="l01773"></a><span class="lineno"> 1773</span> </div>
+<div class="line"><a name="l01776"></a><span class="lineno"> 1776</span>  <span class="keyword">typedef</span> tmat2x2<f32, mediump> mediump_fmat2x2;</div>
+<div class="line"><a name="l01777"></a><span class="lineno"> 1777</span> </div>
+<div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>  <span class="keyword">typedef</span> tmat2x3<f32, mediump> mediump_fmat2x3;</div>
+<div class="line"><a name="l01781"></a><span class="lineno"> 1781</span> </div>
+<div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>  <span class="keyword">typedef</span> tmat2x4<f32, mediump> mediump_fmat2x4;</div>
+<div class="line"><a name="l01785"></a><span class="lineno"> 1785</span> </div>
+<div class="line"><a name="l01788"></a><span class="lineno"> 1788</span>  <span class="keyword">typedef</span> tmat3x2<f32, mediump> mediump_fmat3x2;</div>
+<div class="line"><a name="l01789"></a><span class="lineno"> 1789</span> </div>
+<div class="line"><a name="l01792"></a><span class="lineno"> 1792</span>  <span class="keyword">typedef</span> tmat3x3<f32, mediump> mediump_fmat3x3;</div>
+<div class="line"><a name="l01793"></a><span class="lineno"> 1793</span> </div>
+<div class="line"><a name="l01796"></a><span class="lineno"> 1796</span>  <span class="keyword">typedef</span> tmat3x4<f32, mediump> mediump_fmat3x4;</div>
+<div class="line"><a name="l01797"></a><span class="lineno"> 1797</span> </div>
+<div class="line"><a name="l01800"></a><span class="lineno"> 1800</span>  <span class="keyword">typedef</span> tmat4x2<f32, mediump> mediump_fmat4x2;</div>
+<div class="line"><a name="l01801"></a><span class="lineno"> 1801</span> </div>
+<div class="line"><a name="l01804"></a><span class="lineno"> 1804</span>  <span class="keyword">typedef</span> tmat4x3<f32, mediump> mediump_fmat4x3;</div>
+<div class="line"><a name="l01805"></a><span class="lineno"> 1805</span> </div>
+<div class="line"><a name="l01808"></a><span class="lineno"> 1808</span>  <span class="keyword">typedef</span> tmat4x4<f32, mediump> mediump_fmat4x4;</div>
+<div class="line"><a name="l01809"></a><span class="lineno"> 1809</span> </div>
+<div class="line"><a name="l01812"></a><span class="lineno"> 1812</span>  <span class="comment">//typedef mediump_fmat1x1 mediump_fmat1;</span></div>
+<div class="line"><a name="l01813"></a><span class="lineno"> 1813</span> </div>
+<div class="line"><a name="l01816"></a><span class="lineno"> 1816</span>  <span class="keyword">typedef</span> mediump_fmat2x2 mediump_fmat2;</div>
+<div class="line"><a name="l01817"></a><span class="lineno"> 1817</span> </div>
+<div class="line"><a name="l01820"></a><span class="lineno"> 1820</span>  <span class="keyword">typedef</span> mediump_fmat3x3 mediump_fmat3;</div>
+<div class="line"><a name="l01821"></a><span class="lineno"> 1821</span> </div>
+<div class="line"><a name="l01824"></a><span class="lineno"> 1824</span>  <span class="keyword">typedef</span> mediump_fmat4x4 mediump_fmat4;</div>
+<div class="line"><a name="l01825"></a><span class="lineno"> 1825</span> </div>
+<div class="line"><a name="l01826"></a><span class="lineno"> 1826</span> </div>
+<div class="line"><a name="l01829"></a><span class="lineno"> 1829</span>  <span class="comment">//typedef highp_f32 highp_fmat1x1;</span></div>
+<div class="line"><a name="l01830"></a><span class="lineno"> 1830</span> </div>
+<div class="line"><a name="l01833"></a><span class="lineno"> 1833</span>  <span class="keyword">typedef</span> tmat2x2<f32, highp> highp_fmat2x2;</div>
+<div class="line"><a name="l01834"></a><span class="lineno"> 1834</span> </div>
+<div class="line"><a name="l01837"></a><span class="lineno"> 1837</span>  <span class="keyword">typedef</span> tmat2x3<f32, highp> highp_fmat2x3;</div>
+<div class="line"><a name="l01838"></a><span class="lineno"> 1838</span> </div>
+<div class="line"><a name="l01841"></a><span class="lineno"> 1841</span>  <span class="keyword">typedef</span> tmat2x4<f32, highp> highp_fmat2x4;</div>
+<div class="line"><a name="l01842"></a><span class="lineno"> 1842</span> </div>
+<div class="line"><a name="l01845"></a><span class="lineno"> 1845</span>  <span class="keyword">typedef</span> tmat3x2<f32, highp> highp_fmat3x2;</div>
+<div class="line"><a name="l01846"></a><span class="lineno"> 1846</span> </div>
+<div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>  <span class="keyword">typedef</span> tmat3x3<f32, highp> highp_fmat3x3;</div>
+<div class="line"><a name="l01850"></a><span class="lineno"> 1850</span> </div>
+<div class="line"><a name="l01853"></a><span class="lineno"> 1853</span>  <span class="keyword">typedef</span> tmat3x4<f32, highp> highp_fmat3x4;</div>
+<div class="line"><a name="l01854"></a><span class="lineno"> 1854</span> </div>
+<div class="line"><a name="l01857"></a><span class="lineno"> 1857</span>  <span class="keyword">typedef</span> tmat4x2<f32, highp> highp_fmat4x2;</div>
+<div class="line"><a name="l01858"></a><span class="lineno"> 1858</span> </div>
+<div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>  <span class="keyword">typedef</span> tmat4x3<f32, highp> highp_fmat4x3;</div>
+<div class="line"><a name="l01862"></a><span class="lineno"> 1862</span> </div>
+<div class="line"><a name="l01865"></a><span class="lineno"> 1865</span>  <span class="keyword">typedef</span> tmat4x4<f32, highp> highp_fmat4x4;</div>
+<div class="line"><a name="l01866"></a><span class="lineno"> 1866</span> </div>
+<div class="line"><a name="l01869"></a><span class="lineno"> 1869</span>  <span class="comment">//typedef highp_fmat1x1 highp_fmat1;</span></div>
+<div class="line"><a name="l01870"></a><span class="lineno"> 1870</span> </div>
+<div class="line"><a name="l01873"></a><span class="lineno"> 1873</span>  <span class="keyword">typedef</span> highp_fmat2x2 highp_fmat2;</div>
+<div class="line"><a name="l01874"></a><span class="lineno"> 1874</span> </div>
+<div class="line"><a name="l01877"></a><span class="lineno"> 1877</span>  <span class="keyword">typedef</span> highp_fmat3x3 highp_fmat3;</div>
+<div class="line"><a name="l01878"></a><span class="lineno"> 1878</span>  </div>
+<div class="line"><a name="l01881"></a><span class="lineno"> 1881</span>  <span class="keyword">typedef</span> highp_fmat4x4 highp_fmat4;</div>
+<div class="line"><a name="l01882"></a><span class="lineno"> 1882</span> </div>
+<div class="line"><a name="l01883"></a><span class="lineno"> 1883</span> </div>
+<div class="line"><a name="l01886"></a><span class="lineno"> 1886</span>  <span class="comment">//typedef f32 lowp_f32mat1x1;</span></div>
+<div class="line"><a name="l01887"></a><span class="lineno"> 1887</span> </div>
+<div class="line"><a name="l01890"></a><span class="lineno"> 1890</span>  <span class="keyword">typedef</span> tmat2x2<f32, lowp> lowp_f32mat2x2;</div>
+<div class="line"><a name="l01891"></a><span class="lineno"> 1891</span> </div>
+<div class="line"><a name="l01894"></a><span class="lineno"> 1894</span>  <span class="keyword">typedef</span> tmat2x3<f32, lowp> lowp_f32mat2x3;</div>
+<div class="line"><a name="l01895"></a><span class="lineno"> 1895</span> </div>
+<div class="line"><a name="l01898"></a><span class="lineno"> 1898</span>  <span class="keyword">typedef</span> tmat2x4<f32, lowp> lowp_f32mat2x4;</div>
+<div class="line"><a name="l01899"></a><span class="lineno"> 1899</span> </div>
+<div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>  <span class="keyword">typedef</span> tmat3x2<f32, lowp> lowp_f32mat3x2;</div>
+<div class="line"><a name="l01903"></a><span class="lineno"> 1903</span> </div>
+<div class="line"><a name="l01906"></a><span class="lineno"> 1906</span>  <span class="keyword">typedef</span> tmat3x3<f32, lowp> lowp_f32mat3x3;</div>
+<div class="line"><a name="l01907"></a><span class="lineno"> 1907</span> </div>
+<div class="line"><a name="l01910"></a><span class="lineno"> 1910</span>  <span class="keyword">typedef</span> tmat3x4<f32, lowp> lowp_f32mat3x4;</div>
+<div class="line"><a name="l01911"></a><span class="lineno"> 1911</span> </div>
+<div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>  <span class="keyword">typedef</span> tmat4x2<f32, lowp> lowp_f32mat4x2;</div>
+<div class="line"><a name="l01915"></a><span class="lineno"> 1915</span> </div>
+<div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>  <span class="keyword">typedef</span> tmat4x3<f32, lowp> lowp_f32mat4x3;</div>
+<div class="line"><a name="l01919"></a><span class="lineno"> 1919</span> </div>
+<div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>  <span class="keyword">typedef</span> tmat4x4<f32, lowp> lowp_f32mat4x4;</div>
+<div class="line"><a name="l01923"></a><span class="lineno"> 1923</span> </div>
+<div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>  <span class="comment">//typedef detail::tmat1x1<f32, lowp> lowp_f32mat1;</span></div>
+<div class="line"><a name="l01927"></a><span class="lineno"> 1927</span> </div>
+<div class="line"><a name="l01930"></a><span class="lineno"> 1930</span>  <span class="keyword">typedef</span> lowp_f32mat2x2 lowp_f32mat2;</div>
+<div class="line"><a name="l01931"></a><span class="lineno"> 1931</span> </div>
+<div class="line"><a name="l01934"></a><span class="lineno"> 1934</span>  <span class="keyword">typedef</span> lowp_f32mat3x3 lowp_f32mat3;</div>
+<div class="line"><a name="l01935"></a><span class="lineno"> 1935</span> </div>
+<div class="line"><a name="l01938"></a><span class="lineno"> 1938</span>  <span class="keyword">typedef</span> lowp_f32mat4x4 lowp_f32mat4;</div>
+<div class="line"><a name="l01939"></a><span class="lineno"> 1939</span> </div>
+<div class="line"><a name="l01940"></a><span class="lineno"> 1940</span> </div>
+<div class="line"><a name="l01943"></a><span class="lineno"> 1943</span>  <span class="comment">//typedef f32 mediump_f32mat1x1;</span></div>
+<div class="line"><a name="l01944"></a><span class="lineno"> 1944</span> </div>
+<div class="line"><a name="l01947"></a><span class="lineno"> 1947</span>  <span class="keyword">typedef</span> tmat2x2<f32, mediump> mediump_f32mat2x2;</div>
+<div class="line"><a name="l01948"></a><span class="lineno"> 1948</span> </div>
+<div class="line"><a name="l01951"></a><span class="lineno"> 1951</span>  <span class="keyword">typedef</span> tmat2x3<f32, mediump> mediump_f32mat2x3;</div>
+<div class="line"><a name="l01952"></a><span class="lineno"> 1952</span> </div>
+<div class="line"><a name="l01955"></a><span class="lineno"> 1955</span>  <span class="keyword">typedef</span> tmat2x4<f32, mediump> mediump_f32mat2x4;</div>
+<div class="line"><a name="l01956"></a><span class="lineno"> 1956</span> </div>
+<div class="line"><a name="l01959"></a><span class="lineno"> 1959</span>  <span class="keyword">typedef</span> tmat3x2<f32, mediump> mediump_f32mat3x2;</div>
+<div class="line"><a name="l01960"></a><span class="lineno"> 1960</span> </div>
+<div class="line"><a name="l01963"></a><span class="lineno"> 1963</span>  <span class="keyword">typedef</span> tmat3x3<f32, mediump> mediump_f32mat3x3;</div>
+<div class="line"><a name="l01964"></a><span class="lineno"> 1964</span> </div>
+<div class="line"><a name="l01967"></a><span class="lineno"> 1967</span>  <span class="keyword">typedef</span> tmat3x4<f32, mediump> mediump_f32mat3x4;</div>
+<div class="line"><a name="l01968"></a><span class="lineno"> 1968</span> </div>
+<div class="line"><a name="l01971"></a><span class="lineno"> 1971</span>  <span class="keyword">typedef</span> tmat4x2<f32, mediump> mediump_f32mat4x2;</div>
+<div class="line"><a name="l01972"></a><span class="lineno"> 1972</span> </div>
+<div class="line"><a name="l01975"></a><span class="lineno"> 1975</span>  <span class="keyword">typedef</span> tmat4x3<f32, mediump> mediump_f32mat4x3;</div>
+<div class="line"><a name="l01976"></a><span class="lineno"> 1976</span> </div>
+<div class="line"><a name="l01979"></a><span class="lineno"> 1979</span>  <span class="keyword">typedef</span> tmat4x4<f32, mediump> mediump_f32mat4x4;</div>
+<div class="line"><a name="l01980"></a><span class="lineno"> 1980</span> </div>
+<div class="line"><a name="l01983"></a><span class="lineno"> 1983</span>  <span class="comment">//typedef detail::tmat1x1<f32, mediump> f32mat1;</span></div>
+<div class="line"><a name="l01984"></a><span class="lineno"> 1984</span> </div>
+<div class="line"><a name="l01987"></a><span class="lineno"> 1987</span>  <span class="keyword">typedef</span> mediump_f32mat2x2 mediump_f32mat2;</div>
+<div class="line"><a name="l01988"></a><span class="lineno"> 1988</span> </div>
+<div class="line"><a name="l01991"></a><span class="lineno"> 1991</span>  <span class="keyword">typedef</span> mediump_f32mat3x3 mediump_f32mat3;</div>
+<div class="line"><a name="l01992"></a><span class="lineno"> 1992</span> </div>
+<div class="line"><a name="l01995"></a><span class="lineno"> 1995</span>  <span class="keyword">typedef</span> mediump_f32mat4x4 mediump_f32mat4;</div>
+<div class="line"><a name="l01996"></a><span class="lineno"> 1996</span> </div>
+<div class="line"><a name="l01997"></a><span class="lineno"> 1997</span> </div>
+<div class="line"><a name="l02000"></a><span class="lineno"> 2000</span>  <span class="comment">//typedef f32 highp_f32mat1x1;</span></div>
+<div class="line"><a name="l02001"></a><span class="lineno"> 2001</span> </div>
+<div class="line"><a name="l02004"></a><span class="lineno"> 2004</span>  <span class="keyword">typedef</span> tmat2x2<f32, highp> highp_f32mat2x2;</div>
+<div class="line"><a name="l02005"></a><span class="lineno"> 2005</span> </div>
+<div class="line"><a name="l02008"></a><span class="lineno"> 2008</span>  <span class="keyword">typedef</span> tmat2x3<f32, highp> highp_f32mat2x3;</div>
+<div class="line"><a name="l02009"></a><span class="lineno"> 2009</span> </div>
+<div class="line"><a name="l02012"></a><span class="lineno"> 2012</span>  <span class="keyword">typedef</span> tmat2x4<f32, highp> highp_f32mat2x4;</div>
+<div class="line"><a name="l02013"></a><span class="lineno"> 2013</span> </div>
+<div class="line"><a name="l02016"></a><span class="lineno"> 2016</span>  <span class="keyword">typedef</span> tmat3x2<f32, highp> highp_f32mat3x2;</div>
+<div class="line"><a name="l02017"></a><span class="lineno"> 2017</span> </div>
+<div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>  <span class="keyword">typedef</span> tmat3x3<f32, highp> highp_f32mat3x3;</div>
+<div class="line"><a name="l02021"></a><span class="lineno"> 2021</span> </div>
+<div class="line"><a name="l02024"></a><span class="lineno"> 2024</span>  <span class="keyword">typedef</span> tmat3x4<f32, highp> highp_f32mat3x4;</div>
+<div class="line"><a name="l02025"></a><span class="lineno"> 2025</span> </div>
+<div class="line"><a name="l02028"></a><span class="lineno"> 2028</span>  <span class="keyword">typedef</span> tmat4x2<f32, highp> highp_f32mat4x2;</div>
+<div class="line"><a name="l02029"></a><span class="lineno"> 2029</span> </div>
+<div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>  <span class="keyword">typedef</span> tmat4x3<f32, highp> highp_f32mat4x3;</div>
+<div class="line"><a name="l02033"></a><span class="lineno"> 2033</span> </div>
+<div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>  <span class="keyword">typedef</span> tmat4x4<f32, highp> highp_f32mat4x4;</div>
+<div class="line"><a name="l02037"></a><span class="lineno"> 2037</span> </div>
+<div class="line"><a name="l02040"></a><span class="lineno"> 2040</span>  <span class="comment">//typedef detail::tmat1x1<f32, highp> f32mat1;</span></div>
+<div class="line"><a name="l02041"></a><span class="lineno"> 2041</span> </div>
+<div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>  <span class="keyword">typedef</span> highp_f32mat2x2 highp_f32mat2;</div>
+<div class="line"><a name="l02045"></a><span class="lineno"> 2045</span> </div>
+<div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>  <span class="keyword">typedef</span> highp_f32mat3x3 highp_f32mat3;</div>
+<div class="line"><a name="l02049"></a><span class="lineno"> 2049</span> </div>
+<div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>  <span class="keyword">typedef</span> highp_f32mat4x4 highp_f32mat4;</div>
+<div class="line"><a name="l02053"></a><span class="lineno"> 2053</span> </div>
+<div class="line"><a name="l02054"></a><span class="lineno"> 2054</span> </div>
+<div class="line"><a name="l02057"></a><span class="lineno"> 2057</span>  <span class="comment">//typedef f64 lowp_f64mat1x1;</span></div>
+<div class="line"><a name="l02058"></a><span class="lineno"> 2058</span> </div>
+<div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>  <span class="keyword">typedef</span> tmat2x2<f64, lowp> lowp_f64mat2x2;</div>
+<div class="line"><a name="l02062"></a><span class="lineno"> 2062</span> </div>
+<div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>  <span class="keyword">typedef</span> tmat2x3<f64, lowp> lowp_f64mat2x3;</div>
+<div class="line"><a name="l02066"></a><span class="lineno"> 2066</span> </div>
+<div class="line"><a name="l02069"></a><span class="lineno"> 2069</span>  <span class="keyword">typedef</span> tmat2x4<f64, lowp> lowp_f64mat2x4;</div>
+<div class="line"><a name="l02070"></a><span class="lineno"> 2070</span> </div>
+<div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>  <span class="keyword">typedef</span> tmat3x2<f64, lowp> lowp_f64mat3x2;</div>
+<div class="line"><a name="l02074"></a><span class="lineno"> 2074</span> </div>
+<div class="line"><a name="l02077"></a><span class="lineno"> 2077</span>  <span class="keyword">typedef</span> tmat3x3<f64, lowp> lowp_f64mat3x3;</div>
+<div class="line"><a name="l02078"></a><span class="lineno"> 2078</span> </div>
+<div class="line"><a name="l02081"></a><span class="lineno"> 2081</span>  <span class="keyword">typedef</span> tmat3x4<f64, lowp> lowp_f64mat3x4;</div>
+<div class="line"><a name="l02082"></a><span class="lineno"> 2082</span> </div>
+<div class="line"><a name="l02085"></a><span class="lineno"> 2085</span>  <span class="keyword">typedef</span> tmat4x2<f64, lowp> lowp_f64mat4x2;</div>
+<div class="line"><a name="l02086"></a><span class="lineno"> 2086</span> </div>
+<div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>  <span class="keyword">typedef</span> tmat4x3<f64, lowp> lowp_f64mat4x3;</div>
+<div class="line"><a name="l02090"></a><span class="lineno"> 2090</span>  </div>
+<div class="line"><a name="l02093"></a><span class="lineno"> 2093</span>  <span class="keyword">typedef</span> tmat4x4<f64, lowp> lowp_f64mat4x4;</div>
+<div class="line"><a name="l02094"></a><span class="lineno"> 2094</span> </div>
+<div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>  <span class="comment">//typedef lowp_f64mat1x1 lowp_f64mat1;</span></div>
+<div class="line"><a name="l02098"></a><span class="lineno"> 2098</span> </div>
+<div class="line"><a name="l02101"></a><span class="lineno"> 2101</span>  <span class="keyword">typedef</span> lowp_f64mat2x2 lowp_f64mat2;</div>
+<div class="line"><a name="l02102"></a><span class="lineno"> 2102</span> </div>
+<div class="line"><a name="l02105"></a><span class="lineno"> 2105</span>  <span class="keyword">typedef</span> lowp_f64mat3x3 lowp_f64mat3;</div>
+<div class="line"><a name="l02106"></a><span class="lineno"> 2106</span> </div>
+<div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>  <span class="keyword">typedef</span> lowp_f64mat4x4 lowp_f64mat4;</div>
+<div class="line"><a name="l02110"></a><span class="lineno"> 2110</span> </div>
+<div class="line"><a name="l02111"></a><span class="lineno"> 2111</span> </div>
+<div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>  <span class="comment">//typedef f64 Highp_f64mat1x1;</span></div>
+<div class="line"><a name="l02115"></a><span class="lineno"> 2115</span> </div>
+<div class="line"><a name="l02118"></a><span class="lineno"> 2118</span>  <span class="keyword">typedef</span> tmat2x2<f64, mediump> mediump_f64mat2x2;</div>
+<div class="line"><a name="l02119"></a><span class="lineno"> 2119</span> </div>
+<div class="line"><a name="l02122"></a><span class="lineno"> 2122</span>  <span class="keyword">typedef</span> tmat2x3<f64, mediump> mediump_f64mat2x3;</div>
+<div class="line"><a name="l02123"></a><span class="lineno"> 2123</span> </div>
+<div class="line"><a name="l02126"></a><span class="lineno"> 2126</span>  <span class="keyword">typedef</span> tmat2x4<f64, mediump> mediump_f64mat2x4;</div>
+<div class="line"><a name="l02127"></a><span class="lineno"> 2127</span> </div>
+<div class="line"><a name="l02130"></a><span class="lineno"> 2130</span>  <span class="keyword">typedef</span> tmat3x2<f64, mediump> mediump_f64mat3x2;</div>
+<div class="line"><a name="l02131"></a><span class="lineno"> 2131</span> </div>
+<div class="line"><a name="l02134"></a><span class="lineno"> 2134</span>  <span class="keyword">typedef</span> tmat3x3<f64, mediump> mediump_f64mat3x3;</div>
+<div class="line"><a name="l02135"></a><span class="lineno"> 2135</span> </div>
+<div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>  <span class="keyword">typedef</span> tmat3x4<f64, mediump> mediump_f64mat3x4;</div>
+<div class="line"><a name="l02139"></a><span class="lineno"> 2139</span> </div>
+<div class="line"><a name="l02142"></a><span class="lineno"> 2142</span>  <span class="keyword">typedef</span> tmat4x2<f64, mediump> mediump_f64mat4x2;</div>
+<div class="line"><a name="l02143"></a><span class="lineno"> 2143</span> </div>
+<div class="line"><a name="l02146"></a><span class="lineno"> 2146</span>  <span class="keyword">typedef</span> tmat4x3<f64, mediump> mediump_f64mat4x3;</div>
+<div class="line"><a name="l02147"></a><span class="lineno"> 2147</span> </div>
+<div class="line"><a name="l02150"></a><span class="lineno"> 2150</span>  <span class="keyword">typedef</span> tmat4x4<f64, mediump> mediump_f64mat4x4;</div>
+<div class="line"><a name="l02151"></a><span class="lineno"> 2151</span> </div>
+<div class="line"><a name="l02154"></a><span class="lineno"> 2154</span>  <span class="comment">//typedef mediump_f64mat1x1 mediump_f64mat1;</span></div>
+<div class="line"><a name="l02155"></a><span class="lineno"> 2155</span> </div>
+<div class="line"><a name="l02158"></a><span class="lineno"> 2158</span>  <span class="keyword">typedef</span> mediump_f64mat2x2 mediump_f64mat2;</div>
+<div class="line"><a name="l02159"></a><span class="lineno"> 2159</span> </div>
+<div class="line"><a name="l02162"></a><span class="lineno"> 2162</span>  <span class="keyword">typedef</span> mediump_f64mat3x3 mediump_f64mat3;</div>
+<div class="line"><a name="l02163"></a><span class="lineno"> 2163</span> </div>
+<div class="line"><a name="l02166"></a><span class="lineno"> 2166</span>  <span class="keyword">typedef</span> mediump_f64mat4x4 mediump_f64mat4;</div>
+<div class="line"><a name="l02167"></a><span class="lineno"> 2167</span> </div>
+<div class="line"><a name="l02170"></a><span class="lineno"> 2170</span>  <span class="comment">//typedef f64 highp_f64mat1x1;</span></div>
+<div class="line"><a name="l02171"></a><span class="lineno"> 2171</span> </div>
+<div class="line"><a name="l02174"></a><span class="lineno"> 2174</span>  <span class="keyword">typedef</span> tmat2x2<f64, highp> highp_f64mat2x2;</div>
+<div class="line"><a name="l02175"></a><span class="lineno"> 2175</span> </div>
+<div class="line"><a name="l02178"></a><span class="lineno"> 2178</span>  <span class="keyword">typedef</span> tmat2x3<f64, highp> highp_f64mat2x3;</div>
+<div class="line"><a name="l02179"></a><span class="lineno"> 2179</span> </div>
+<div class="line"><a name="l02182"></a><span class="lineno"> 2182</span>  <span class="keyword">typedef</span> tmat2x4<f64, highp> highp_f64mat2x4;</div>
+<div class="line"><a name="l02183"></a><span class="lineno"> 2183</span> </div>
+<div class="line"><a name="l02186"></a><span class="lineno"> 2186</span>  <span class="keyword">typedef</span> tmat3x2<f64, highp> highp_f64mat3x2;</div>
+<div class="line"><a name="l02187"></a><span class="lineno"> 2187</span> </div>
+<div class="line"><a name="l02190"></a><span class="lineno"> 2190</span>  <span class="keyword">typedef</span> tmat3x3<f64, highp> highp_f64mat3x3;</div>
+<div class="line"><a name="l02191"></a><span class="lineno"> 2191</span> </div>
+<div class="line"><a name="l02194"></a><span class="lineno"> 2194</span>  <span class="keyword">typedef</span> tmat3x4<f64, highp> highp_f64mat3x4;</div>
+<div class="line"><a name="l02195"></a><span class="lineno"> 2195</span> </div>
+<div class="line"><a name="l02198"></a><span class="lineno"> 2198</span>  <span class="keyword">typedef</span> tmat4x2<f64, highp> highp_f64mat4x2;</div>
+<div class="line"><a name="l02199"></a><span class="lineno"> 2199</span> </div>
+<div class="line"><a name="l02202"></a><span class="lineno"> 2202</span>  <span class="keyword">typedef</span> tmat4x3<f64, highp> highp_f64mat4x3;</div>
+<div class="line"><a name="l02203"></a><span class="lineno"> 2203</span> </div>
+<div class="line"><a name="l02206"></a><span class="lineno"> 2206</span>  <span class="keyword">typedef</span> tmat4x4<f64, highp> highp_f64mat4x4;</div>
+<div class="line"><a name="l02207"></a><span class="lineno"> 2207</span> </div>
+<div class="line"><a name="l02210"></a><span class="lineno"> 2210</span>  <span class="comment">//typedef highp_f64mat1x1 highp_f64mat1;</span></div>
+<div class="line"><a name="l02211"></a><span class="lineno"> 2211</span> </div>
+<div class="line"><a name="l02214"></a><span class="lineno"> 2214</span>  <span class="keyword">typedef</span> highp_f64mat2x2 highp_f64mat2;</div>
+<div class="line"><a name="l02215"></a><span class="lineno"> 2215</span> </div>
+<div class="line"><a name="l02218"></a><span class="lineno"> 2218</span>  <span class="keyword">typedef</span> highp_f64mat3x3 highp_f64mat3;</div>
+<div class="line"><a name="l02219"></a><span class="lineno"> 2219</span> </div>
+<div class="line"><a name="l02222"></a><span class="lineno"> 2222</span>  <span class="keyword">typedef</span> highp_f64mat4x4 highp_f64mat4;</div>
+<div class="line"><a name="l02223"></a><span class="lineno"> 2223</span> </div>
+<div class="line"><a name="l02225"></a><span class="lineno"> 2225</span>  <span class="comment">// Quaternion types</span></div>
+<div class="line"><a name="l02226"></a><span class="lineno"> 2226</span> </div>
+<div class="line"><a name="l02229"></a><span class="lineno"> 2229</span>  <span class="keyword">typedef</span> tquat<f32, lowp> lowp_f32quat;</div>
+<div class="line"><a name="l02230"></a><span class="lineno"> 2230</span> </div>
+<div class="line"><a name="l02233"></a><span class="lineno"> 2233</span>  <span class="keyword">typedef</span> tquat<f64, lowp> lowp_f64quat;</div>
+<div class="line"><a name="l02234"></a><span class="lineno"> 2234</span> </div>
+<div class="line"><a name="l02237"></a><span class="lineno"> 2237</span>  <span class="keyword">typedef</span> tquat<f32, mediump> mediump_f32quat;</div>
+<div class="line"><a name="l02238"></a><span class="lineno"> 2238</span> </div>
+<div class="line"><a name="l02241"></a><span class="lineno"> 2241</span>  <span class="keyword">typedef</span> tquat<f64, mediump> mediump_f64quat;</div>
+<div class="line"><a name="l02242"></a><span class="lineno"> 2242</span> </div>
+<div class="line"><a name="l02245"></a><span class="lineno"> 2245</span>  <span class="keyword">typedef</span> tquat<f32, highp> highp_f32quat;</div>
+<div class="line"><a name="l02246"></a><span class="lineno"> 2246</span> </div>
+<div class="line"><a name="l02249"></a><span class="lineno"> 2249</span>  <span class="keyword">typedef</span> tquat<f64, highp> highp_f64quat;</div>
+<div class="line"><a name="l02250"></a><span class="lineno"> 2250</span> </div>
+<div class="line"><a name="l02251"></a><span class="lineno"> 2251</span> </div>
+<div class="line"><a name="l02252"></a><span class="lineno"> 2252</span> <span class="preprocessor">#if(defined(GLM_PRECISION_LOWP_FLOAT))</span></div>
+<div class="line"><a name="l02253"></a><span class="lineno"> 2253</span>  <span class="keyword">typedef</span> lowp_f32vec1 <a class="code" href="a00177.html#ga10d8bd3c923a5386efcf25a4117fd84f">fvec1</a>;</div>
+<div class="line"><a name="l02254"></a><span class="lineno"> 2254</span>  <span class="keyword">typedef</span> lowp_f32vec2 <a class="code" href="a00177.html#gaf9f4173dd9e8b2d0b663c6f80ed09ff6">fvec2</a>;</div>
+<div class="line"><a name="l02255"></a><span class="lineno"> 2255</span>  <span class="keyword">typedef</span> lowp_f32vec3 <a class="code" href="a00177.html#ga4ef2d77dcab241b1ef83f09edb2f1084">fvec3</a>;</div>
+<div class="line"><a name="l02256"></a><span class="lineno"> 2256</span>  <span class="keyword">typedef</span> lowp_f32vec4 <a class="code" href="a00177.html#ga981b63d5c5f7233a29364e0a968d139b">fvec4</a>;</div>
+<div class="line"><a name="l02257"></a><span class="lineno"> 2257</span>  <span class="keyword">typedef</span> lowp_f32mat2 <a class="code" href="a00177.html#gabb01d4ff646ee07241934b1a0cc0f985">fmat2</a>;</div>
+<div class="line"><a name="l02258"></a><span class="lineno"> 2258</span>  <span class="keyword">typedef</span> lowp_f32mat3 <a class="code" href="a00177.html#ga5165fbee2d78f342950265b69a07353d">fmat3</a>;</div>
+<div class="line"><a name="l02259"></a><span class="lineno"> 2259</span>  <span class="keyword">typedef</span> lowp_f32mat4 <a class="code" href="a00177.html#gab3f31d867df4874e42172ebf188a3ebd">fmat4</a>;</div>
+<div class="line"><a name="l02260"></a><span class="lineno"> 2260</span>  <span class="keyword">typedef</span> lowp_f32mat2x2 <a class="code" href="a00177.html#ga74ac2e71b650162d8f7cb2a70c2f6711">fmat2x2</a>;</div>
+<div class="line"><a name="l02261"></a><span class="lineno"> 2261</span>  <span class="keyword">typedef</span> lowp_f32mat3x2 <a class="code" href="a00177.html#ga9f20af6e8eca2abdcde08408948cc1ca">fmat3x2</a>;</div>
+<div class="line"><a name="l02262"></a><span class="lineno"> 2262</span>  <span class="keyword">typedef</span> lowp_f32mat4x2 <a class="code" href="a00177.html#gab0082a25f19f02d2d0af0fcbe5ead732">fmat4x2</a>;</div>
+<div class="line"><a name="l02263"></a><span class="lineno"> 2263</span>  <span class="keyword">typedef</span> lowp_f32mat2x3 <a class="code" href="a00177.html#gaf17b2604c0d92bffb92375d8aa588756">fmat2x3</a>;</div>
+<div class="line"><a name="l02264"></a><span class="lineno"> 2264</span>  <span class="keyword">typedef</span> lowp_f32mat3x3 <a class="code" href="a00177.html#gad339e25c32fe6665acf028f26c1b3e22">fmat3x3</a>;</div>
+<div class="line"><a name="l02265"></a><span class="lineno"> 2265</span>  <span class="keyword">typedef</span> lowp_f32mat4x3 <a class="code" href="a00177.html#ga1a11c170f030ab34ddf037714e936cba">fmat4x3</a>;</div>
+<div class="line"><a name="l02266"></a><span class="lineno"> 2266</span>  <span class="keyword">typedef</span> lowp_f32mat2x4 <a class="code" href="a00177.html#ga709c97c20efa24ff1d9e83cd437b8ed5">fmat2x4</a>;</div>
+<div class="line"><a name="l02267"></a><span class="lineno"> 2267</span>  <span class="keyword">typedef</span> lowp_f32mat3x4 <a class="code" href="a00177.html#gab04bc97371cb6b5f54b3688e0c81578b">fmat3x4</a>;</div>
+<div class="line"><a name="l02268"></a><span class="lineno"> 2268</span>  <span class="keyword">typedef</span> lowp_f32mat4x4 <a class="code" href="a00177.html#gabd79752ff357d83b49136b6299ea62d9">fmat4x4</a>;</div>
+<div class="line"><a name="l02269"></a><span class="lineno"> 2269</span>  <span class="keyword">typedef</span> lowp_f32quat fquat;</div>
+<div class="line"><a name="l02270"></a><span class="lineno"> 2270</span> </div>
+<div class="line"><a name="l02271"></a><span class="lineno"> 2271</span>  <span class="keyword">typedef</span> lowp_f32vec1 <a class="code" href="a00177.html#ga3174a49dc84a977cad7012a62f4af02f">f32vec1</a>;</div>
+<div class="line"><a name="l02272"></a><span class="lineno"> 2272</span>  <span class="keyword">typedef</span> lowp_f32vec2 <a class="code" href="a00177.html#gae0cb53ea6fe3d977fe588ce423d57cc3">f32vec2</a>;</div>
+<div class="line"><a name="l02273"></a><span class="lineno"> 2273</span>  <span class="keyword">typedef</span> lowp_f32vec3 <a class="code" href="a00177.html#ga19d5e0d4d3d6d226c9c6c0f39756f9ad">f32vec3</a>;</div>
+<div class="line"><a name="l02274"></a><span class="lineno"> 2274</span>  <span class="keyword">typedef</span> lowp_f32vec4 <a class="code" href="a00177.html#gaeb25dbb0261f82cb08da23e26d343704">f32vec4</a>;</div>
+<div class="line"><a name="l02275"></a><span class="lineno"> 2275</span>  <span class="keyword">typedef</span> lowp_f32mat2 <a class="code" href="a00177.html#ga1fedd5d29746afdaf2d3303a4442704e">f32mat2</a>;</div>
+<div class="line"><a name="l02276"></a><span class="lineno"> 2276</span>  <span class="keyword">typedef</span> lowp_f32mat3 <a class="code" href="a00177.html#gaf4377997b299a287f7ab3358c9bd3e4c">f32mat3</a>;</div>
+<div class="line"><a name="l02277"></a><span class="lineno"> 2277</span>  <span class="keyword">typedef</span> lowp_f32mat4 <a class="code" href="a00177.html#ga797fa3ab16e04456174c36238e091341">f32mat4</a>;</div>
+<div class="line"><a name="l02278"></a><span class="lineno"> 2278</span>  <span class="keyword">typedef</span> lowp_f32mat2x2 <a class="code" href="a00177.html#gaf3a5016bf360977ce114deb2e01ae10a">f32mat2x2</a>;</div>
+<div class="line"><a name="l02279"></a><span class="lineno"> 2279</span>  <span class="keyword">typedef</span> lowp_f32mat3x2 <a class="code" href="a00177.html#ga8709a1ea268fa69bdf1e11616d7fbaf1">f32mat3x2</a>;</div>
+<div class="line"><a name="l02280"></a><span class="lineno"> 2280</span>  <span class="keyword">typedef</span> lowp_f32mat4x2 <a class="code" href="a00177.html#ga27f897bdfe4bbded9481b8947553d1ff">f32mat4x2</a>;</div>
+<div class="line"><a name="l02281"></a><span class="lineno"> 2281</span>  <span class="keyword">typedef</span> lowp_f32mat2x3 <a class="code" href="a00177.html#gad5f1043adbe803928fe7bf1a90a1f767">f32mat2x3</a>;</div>
+<div class="line"><a name="l02282"></a><span class="lineno"> 2282</span>  <span class="keyword">typedef</span> lowp_f32mat3x3 <a class="code" href="a00177.html#ga1e4c52bb824ca16c6e2e5b03635669d0">f32mat3x3</a>;</div>
+<div class="line"><a name="l02283"></a><span class="lineno"> 2283</span>  <span class="keyword">typedef</span> lowp_f32mat4x3 <a class="code" href="a00177.html#gaa69e73ffb01a52499071391d395908fb">f32mat4x3</a>;</div>
+<div class="line"><a name="l02284"></a><span class="lineno"> 2284</span>  <span class="keyword">typedef</span> lowp_f32mat2x4 <a class="code" href="a00177.html#ga5ed667d0247cce477f013ea31982843d">f32mat2x4</a>;</div>
+<div class="line"><a name="l02285"></a><span class="lineno"> 2285</span>  <span class="keyword">typedef</span> lowp_f32mat3x4 <a class="code" href="a00177.html#ga0100666c90176eaba80e49357d123c7f">f32mat3x4</a>;</div>
+<div class="line"><a name="l02286"></a><span class="lineno"> 2286</span>  <span class="keyword">typedef</span> lowp_f32mat4x4 <a class="code" href="a00177.html#gafe2e08549805a7ded26da2a868bedbf5">f32mat4x4</a>;</div>
+<div class="line"><a name="l02287"></a><span class="lineno"> 2287</span>  <span class="keyword">typedef</span> lowp_f32quat <a class="code" href="a00177.html#ga6966c0cb4673928c9c9da2e91006d2c0">f32quat</a>;</div>
+<div class="line"><a name="l02288"></a><span class="lineno"> 2288</span> <span class="preprocessor">#elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))</span></div>
+<div class="line"><a name="l02289"></a><span class="lineno"> 2289</span>  <span class="keyword">typedef</span> mediump_f32vec1 <a class="code" href="a00177.html#ga10d8bd3c923a5386efcf25a4117fd84f">fvec1</a>;</div>
+<div class="line"><a name="l02290"></a><span class="lineno"> 2290</span>  <span class="keyword">typedef</span> mediump_f32vec2 <a class="code" href="a00177.html#gaf9f4173dd9e8b2d0b663c6f80ed09ff6">fvec2</a>;</div>
+<div class="line"><a name="l02291"></a><span class="lineno"> 2291</span>  <span class="keyword">typedef</span> mediump_f32vec3 <a class="code" href="a00177.html#ga4ef2d77dcab241b1ef83f09edb2f1084">fvec3</a>;</div>
+<div class="line"><a name="l02292"></a><span class="lineno"> 2292</span>  <span class="keyword">typedef</span> mediump_f32vec4 <a class="code" href="a00177.html#ga981b63d5c5f7233a29364e0a968d139b">fvec4</a>;</div>
+<div class="line"><a name="l02293"></a><span class="lineno"> 2293</span>  <span class="keyword">typedef</span> mediump_f32mat2 <a class="code" href="a00177.html#gabb01d4ff646ee07241934b1a0cc0f985">fmat2</a>;</div>
+<div class="line"><a name="l02294"></a><span class="lineno"> 2294</span>  <span class="keyword">typedef</span> mediump_f32mat3 <a class="code" href="a00177.html#ga5165fbee2d78f342950265b69a07353d">fmat3</a>;</div>
+<div class="line"><a name="l02295"></a><span class="lineno"> 2295</span>  <span class="keyword">typedef</span> mediump_f32mat4 <a class="code" href="a00177.html#gab3f31d867df4874e42172ebf188a3ebd">fmat4</a>;</div>
+<div class="line"><a name="l02296"></a><span class="lineno"> 2296</span>  <span class="keyword">typedef</span> mediump_f32mat2x2 <a class="code" href="a00177.html#ga74ac2e71b650162d8f7cb2a70c2f6711">fmat2x2</a>;</div>
+<div class="line"><a name="l02297"></a><span class="lineno"> 2297</span>  <span class="keyword">typedef</span> mediump_f32mat3x2 <a class="code" href="a00177.html#ga9f20af6e8eca2abdcde08408948cc1ca">fmat3x2</a>;</div>
+<div class="line"><a name="l02298"></a><span class="lineno"> 2298</span>  <span class="keyword">typedef</span> mediump_f32mat4x2 <a class="code" href="a00177.html#gab0082a25f19f02d2d0af0fcbe5ead732">fmat4x2</a>;</div>
+<div class="line"><a name="l02299"></a><span class="lineno"> 2299</span>  <span class="keyword">typedef</span> mediump_f32mat2x3 <a class="code" href="a00177.html#gaf17b2604c0d92bffb92375d8aa588756">fmat2x3</a>;</div>
+<div class="line"><a name="l02300"></a><span class="lineno"> 2300</span>  <span class="keyword">typedef</span> mediump_f32mat3x3 <a class="code" href="a00177.html#gad339e25c32fe6665acf028f26c1b3e22">fmat3x3</a>;</div>
+<div class="line"><a name="l02301"></a><span class="lineno"> 2301</span>  <span class="keyword">typedef</span> mediump_f32mat4x3 <a class="code" href="a00177.html#ga1a11c170f030ab34ddf037714e936cba">fmat4x3</a>;</div>
+<div class="line"><a name="l02302"></a><span class="lineno"> 2302</span>  <span class="keyword">typedef</span> mediump_f32mat2x4 <a class="code" href="a00177.html#ga709c97c20efa24ff1d9e83cd437b8ed5">fmat2x4</a>;</div>
+<div class="line"><a name="l02303"></a><span class="lineno"> 2303</span>  <span class="keyword">typedef</span> mediump_f32mat3x4 <a class="code" href="a00177.html#gab04bc97371cb6b5f54b3688e0c81578b">fmat3x4</a>;</div>
+<div class="line"><a name="l02304"></a><span class="lineno"> 2304</span>  <span class="keyword">typedef</span> mediump_f32mat4x4 <a class="code" href="a00177.html#gabd79752ff357d83b49136b6299ea62d9">fmat4x4</a>;</div>
+<div class="line"><a name="l02305"></a><span class="lineno"> 2305</span>  <span class="keyword">typedef</span> mediump_f32quat fquat;</div>
+<div class="line"><a name="l02306"></a><span class="lineno"> 2306</span> </div>
+<div class="line"><a name="l02307"></a><span class="lineno"> 2307</span>  <span class="keyword">typedef</span> mediump_f32vec1 <a class="code" href="a00177.html#ga3174a49dc84a977cad7012a62f4af02f">f32vec1</a>;</div>
+<div class="line"><a name="l02308"></a><span class="lineno"> 2308</span>  <span class="keyword">typedef</span> mediump_f32vec2 <a class="code" href="a00177.html#gae0cb53ea6fe3d977fe588ce423d57cc3">f32vec2</a>;</div>
+<div class="line"><a name="l02309"></a><span class="lineno"> 2309</span>  <span class="keyword">typedef</span> mediump_f32vec3 <a class="code" href="a00177.html#ga19d5e0d4d3d6d226c9c6c0f39756f9ad">f32vec3</a>;</div>
+<div class="line"><a name="l02310"></a><span class="lineno"> 2310</span>  <span class="keyword">typedef</span> mediump_f32vec4 <a class="code" href="a00177.html#gaeb25dbb0261f82cb08da23e26d343704">f32vec4</a>;</div>
+<div class="line"><a name="l02311"></a><span class="lineno"> 2311</span>  <span class="keyword">typedef</span> mediump_f32mat2 <a class="code" href="a00177.html#ga1fedd5d29746afdaf2d3303a4442704e">f32mat2</a>;</div>
+<div class="line"><a name="l02312"></a><span class="lineno"> 2312</span>  <span class="keyword">typedef</span> mediump_f32mat3 <a class="code" href="a00177.html#gaf4377997b299a287f7ab3358c9bd3e4c">f32mat3</a>;</div>
+<div class="line"><a name="l02313"></a><span class="lineno"> 2313</span>  <span class="keyword">typedef</span> mediump_f32mat4 <a class="code" href="a00177.html#ga797fa3ab16e04456174c36238e091341">f32mat4</a>;</div>
+<div class="line"><a name="l02314"></a><span class="lineno"> 2314</span>  <span class="keyword">typedef</span> mediump_f32mat2x2 <a class="code" href="a00177.html#gaf3a5016bf360977ce114deb2e01ae10a">f32mat2x2</a>;</div>
+<div class="line"><a name="l02315"></a><span class="lineno"> 2315</span>  <span class="keyword">typedef</span> mediump_f32mat3x2 <a class="code" href="a00177.html#ga8709a1ea268fa69bdf1e11616d7fbaf1">f32mat3x2</a>;</div>
+<div class="line"><a name="l02316"></a><span class="lineno"> 2316</span>  <span class="keyword">typedef</span> mediump_f32mat4x2 <a class="code" href="a00177.html#ga27f897bdfe4bbded9481b8947553d1ff">f32mat4x2</a>;</div>
+<div class="line"><a name="l02317"></a><span class="lineno"> 2317</span>  <span class="keyword">typedef</span> mediump_f32mat2x3 <a class="code" href="a00177.html#gad5f1043adbe803928fe7bf1a90a1f767">f32mat2x3</a>;</div>
+<div class="line"><a name="l02318"></a><span class="lineno"> 2318</span>  <span class="keyword">typedef</span> mediump_f32mat3x3 <a class="code" href="a00177.html#ga1e4c52bb824ca16c6e2e5b03635669d0">f32mat3x3</a>;</div>
+<div class="line"><a name="l02319"></a><span class="lineno"> 2319</span>  <span class="keyword">typedef</span> mediump_f32mat4x3 <a class="code" href="a00177.html#gaa69e73ffb01a52499071391d395908fb">f32mat4x3</a>;</div>
+<div class="line"><a name="l02320"></a><span class="lineno"> 2320</span>  <span class="keyword">typedef</span> mediump_f32mat2x4 <a class="code" href="a00177.html#ga5ed667d0247cce477f013ea31982843d">f32mat2x4</a>;</div>
+<div class="line"><a name="l02321"></a><span class="lineno"> 2321</span>  <span class="keyword">typedef</span> mediump_f32mat3x4 <a class="code" href="a00177.html#ga0100666c90176eaba80e49357d123c7f">f32mat3x4</a>;</div>
+<div class="line"><a name="l02322"></a><span class="lineno"> 2322</span>  <span class="keyword">typedef</span> mediump_f32mat4x4 <a class="code" href="a00177.html#gafe2e08549805a7ded26da2a868bedbf5">f32mat4x4</a>;</div>
+<div class="line"><a name="l02323"></a><span class="lineno"> 2323</span>  <span class="keyword">typedef</span> mediump_f32quat <a class="code" href="a00177.html#ga6966c0cb4673928c9c9da2e91006d2c0">f32quat</a>;</div>
+<div class="line"><a name="l02324"></a><span class="lineno"> 2324</span> <span class="preprocessor">#else//if(defined(GLM_PRECISION_HIGHP_FLOAT))</span></div>
+<div class="line"><a name="l02325"></a><span class="lineno"> 2325</span>  <span class="keyword">typedef</span> highp_f32vec1 <a class="code" href="a00177.html#ga10d8bd3c923a5386efcf25a4117fd84f">fvec1</a>;</div>
+<div class="line"><a name="l02328"></a><span class="lineno"> 2328</span> </div>
+<div class="line"><a name="l02331"></a><span class="lineno"><a class="line" href="a00177.html#gaf9f4173dd9e8b2d0b663c6f80ed09ff6"> 2331</a></span>  <span class="keyword">typedef</span> highp_f32vec2 <a class="code" href="a00177.html#gaf9f4173dd9e8b2d0b663c6f80ed09ff6">fvec2</a>;</div>
+<div class="line"><a name="l02332"></a><span class="lineno"> 2332</span> </div>
+<div class="line"><a name="l02335"></a><span class="lineno"><a class="line" href="a00177.html#ga4ef2d77dcab241b1ef83f09edb2f1084"> 2335</a></span>  <span class="keyword">typedef</span> highp_f32vec3 <a class="code" href="a00177.html#ga4ef2d77dcab241b1ef83f09edb2f1084">fvec3</a>;</div>
+<div class="line"><a name="l02336"></a><span class="lineno"> 2336</span> </div>
+<div class="line"><a name="l02339"></a><span class="lineno"><a class="line" href="a00177.html#ga981b63d5c5f7233a29364e0a968d139b"> 2339</a></span>  <span class="keyword">typedef</span> highp_f32vec4 <a class="code" href="a00177.html#ga981b63d5c5f7233a29364e0a968d139b">fvec4</a>;</div>
+<div class="line"><a name="l02340"></a><span class="lineno"> 2340</span> </div>
+<div class="line"><a name="l02343"></a><span class="lineno"><a class="line" href="a00177.html#ga74ac2e71b650162d8f7cb2a70c2f6711"> 2343</a></span>  <span class="keyword">typedef</span> highp_f32mat2x2 <a class="code" href="a00177.html#ga74ac2e71b650162d8f7cb2a70c2f6711">fmat2x2</a>;</div>
+<div class="line"><a name="l02344"></a><span class="lineno"> 2344</span> </div>
+<div class="line"><a name="l02347"></a><span class="lineno"><a class="line" href="a00177.html#gaf17b2604c0d92bffb92375d8aa588756"> 2347</a></span>  <span class="keyword">typedef</span> highp_f32mat2x3 <a class="code" href="a00177.html#gaf17b2604c0d92bffb92375d8aa588756">fmat2x3</a>;</div>
+<div class="line"><a name="l02348"></a><span class="lineno"> 2348</span> </div>
+<div class="line"><a name="l02351"></a><span class="lineno"><a class="line" href="a00177.html#ga709c97c20efa24ff1d9e83cd437b8ed5"> 2351</a></span>  <span class="keyword">typedef</span> highp_f32mat2x4 <a class="code" href="a00177.html#ga709c97c20efa24ff1d9e83cd437b8ed5">fmat2x4</a>;</div>
+<div class="line"><a name="l02352"></a><span class="lineno"> 2352</span> </div>
+<div class="line"><a name="l02355"></a><span class="lineno"><a class="line" href="a00177.html#ga9f20af6e8eca2abdcde08408948cc1ca"> 2355</a></span>  <span class="keyword">typedef</span> highp_f32mat3x2 <a class="code" href="a00177.html#ga9f20af6e8eca2abdcde08408948cc1ca">fmat3x2</a>;</div>
+<div class="line"><a name="l02356"></a><span class="lineno"> 2356</span> </div>
+<div class="line"><a name="l02359"></a><span class="lineno"><a class="line" href="a00177.html#gad339e25c32fe6665acf028f26c1b3e22"> 2359</a></span>  <span class="keyword">typedef</span> highp_f32mat3x3 <a class="code" href="a00177.html#gad339e25c32fe6665acf028f26c1b3e22">fmat3x3</a>;</div>
+<div class="line"><a name="l02360"></a><span class="lineno"> 2360</span> </div>
+<div class="line"><a name="l02363"></a><span class="lineno"><a class="line" href="a00177.html#gab04bc97371cb6b5f54b3688e0c81578b"> 2363</a></span>  <span class="keyword">typedef</span> highp_f32mat3x4 <a class="code" href="a00177.html#gab04bc97371cb6b5f54b3688e0c81578b">fmat3x4</a>;</div>
+<div class="line"><a name="l02364"></a><span class="lineno"> 2364</span> </div>
+<div class="line"><a name="l02367"></a><span class="lineno"><a class="line" href="a00177.html#gab0082a25f19f02d2d0af0fcbe5ead732"> 2367</a></span>  <span class="keyword">typedef</span> highp_f32mat4x2 <a class="code" href="a00177.html#gab0082a25f19f02d2d0af0fcbe5ead732">fmat4x2</a>;</div>
+<div class="line"><a name="l02368"></a><span class="lineno"> 2368</span> </div>
+<div class="line"><a name="l02371"></a><span class="lineno"><a class="line" href="a00177.html#ga1a11c170f030ab34ddf037714e936cba"> 2371</a></span>  <span class="keyword">typedef</span> highp_f32mat4x3 <a class="code" href="a00177.html#ga1a11c170f030ab34ddf037714e936cba">fmat4x3</a>;</div>
+<div class="line"><a name="l02372"></a><span class="lineno"> 2372</span> </div>
+<div class="line"><a name="l02375"></a><span class="lineno"><a class="line" href="a00177.html#gabd79752ff357d83b49136b6299ea62d9"> 2375</a></span>  <span class="keyword">typedef</span> highp_f32mat4x4 <a class="code" href="a00177.html#gabd79752ff357d83b49136b6299ea62d9">fmat4x4</a>;</div>
+<div class="line"><a name="l02376"></a><span class="lineno"> 2376</span>  </div>
+<div class="line"><a name="l02379"></a><span class="lineno"><a class="line" href="a00177.html#gabb01d4ff646ee07241934b1a0cc0f985"> 2379</a></span>  <span class="keyword">typedef</span> fmat2x2 <a class="code" href="a00177.html#gabb01d4ff646ee07241934b1a0cc0f985">fmat2</a>;</div>
+<div class="line"><a name="l02380"></a><span class="lineno"> 2380</span> </div>
+<div class="line"><a name="l02383"></a><span class="lineno"><a class="line" href="a00177.html#ga5165fbee2d78f342950265b69a07353d"> 2383</a></span>  <span class="keyword">typedef</span> fmat3x3 <a class="code" href="a00177.html#ga5165fbee2d78f342950265b69a07353d">fmat3</a>;</div>
+<div class="line"><a name="l02384"></a><span class="lineno"> 2384</span> </div>
+<div class="line"><a name="l02387"></a><span class="lineno"><a class="line" href="a00177.html#gab3f31d867df4874e42172ebf188a3ebd"> 2387</a></span>  <span class="keyword">typedef</span> fmat4x4 <a class="code" href="a00177.html#gab3f31d867df4874e42172ebf188a3ebd">fmat4</a>;</div>
+<div class="line"><a name="l02388"></a><span class="lineno"> 2388</span> </div>
+<div class="line"><a name="l02391"></a><span class="lineno"> 2391</span>  <span class="keyword">typedef</span> highp_fquat fquat;</div>
+<div class="line"><a name="l02392"></a><span class="lineno"> 2392</span>  </div>
+<div class="line"><a name="l02393"></a><span class="lineno"> 2393</span> </div>
+<div class="line"><a name="l02394"></a><span class="lineno"> 2394</span> </div>
+<div class="line"><a name="l02397"></a><span class="lineno"><a class="line" href="a00177.html#ga3174a49dc84a977cad7012a62f4af02f"> 2397</a></span>  <span class="keyword">typedef</span> highp_f32vec1 <a class="code" href="a00177.html#ga3174a49dc84a977cad7012a62f4af02f">f32vec1</a>;</div>
+<div class="line"><a name="l02398"></a><span class="lineno"> 2398</span> </div>
+<div class="line"><a name="l02401"></a><span class="lineno"><a class="line" href="a00177.html#gae0cb53ea6fe3d977fe588ce423d57cc3"> 2401</a></span>  <span class="keyword">typedef</span> highp_f32vec2 <a class="code" href="a00177.html#gae0cb53ea6fe3d977fe588ce423d57cc3">f32vec2</a>;</div>
+<div class="line"><a name="l02402"></a><span class="lineno"> 2402</span> </div>
+<div class="line"><a name="l02405"></a><span class="lineno"><a class="line" href="a00177.html#ga19d5e0d4d3d6d226c9c6c0f39756f9ad"> 2405</a></span>  <span class="keyword">typedef</span> highp_f32vec3 <a class="code" href="a00177.html#ga19d5e0d4d3d6d226c9c6c0f39756f9ad">f32vec3</a>;</div>
+<div class="line"><a name="l02406"></a><span class="lineno"> 2406</span> </div>
+<div class="line"><a name="l02409"></a><span class="lineno"><a class="line" href="a00177.html#gaeb25dbb0261f82cb08da23e26d343704"> 2409</a></span>  <span class="keyword">typedef</span> highp_f32vec4 <a class="code" href="a00177.html#gaeb25dbb0261f82cb08da23e26d343704">f32vec4</a>;</div>
+<div class="line"><a name="l02410"></a><span class="lineno"> 2410</span> </div>
+<div class="line"><a name="l02413"></a><span class="lineno"><a class="line" href="a00177.html#gaf3a5016bf360977ce114deb2e01ae10a"> 2413</a></span>  <span class="keyword">typedef</span> highp_f32mat2x2 <a class="code" href="a00177.html#gaf3a5016bf360977ce114deb2e01ae10a">f32mat2x2</a>;</div>
+<div class="line"><a name="l02414"></a><span class="lineno"> 2414</span> </div>
+<div class="line"><a name="l02417"></a><span class="lineno"><a class="line" href="a00177.html#gad5f1043adbe803928fe7bf1a90a1f767"> 2417</a></span>  <span class="keyword">typedef</span> highp_f32mat2x3 <a class="code" href="a00177.html#gad5f1043adbe803928fe7bf1a90a1f767">f32mat2x3</a>;</div>
+<div class="line"><a name="l02418"></a><span class="lineno"> 2418</span> </div>
+<div class="line"><a name="l02421"></a><span class="lineno"><a class="line" href="a00177.html#ga5ed667d0247cce477f013ea31982843d"> 2421</a></span>  <span class="keyword">typedef</span> highp_f32mat2x4 <a class="code" href="a00177.html#ga5ed667d0247cce477f013ea31982843d">f32mat2x4</a>;</div>
+<div class="line"><a name="l02422"></a><span class="lineno"> 2422</span> </div>
+<div class="line"><a name="l02425"></a><span class="lineno"><a class="line" href="a00177.html#ga8709a1ea268fa69bdf1e11616d7fbaf1"> 2425</a></span>  <span class="keyword">typedef</span> highp_f32mat3x2 <a class="code" href="a00177.html#ga8709a1ea268fa69bdf1e11616d7fbaf1">f32mat3x2</a>;</div>
+<div class="line"><a name="l02426"></a><span class="lineno"> 2426</span> </div>
+<div class="line"><a name="l02429"></a><span class="lineno"><a class="line" href="a00177.html#ga1e4c52bb824ca16c6e2e5b03635669d0"> 2429</a></span>  <span class="keyword">typedef</span> highp_f32mat3x3 <a class="code" href="a00177.html#ga1e4c52bb824ca16c6e2e5b03635669d0">f32mat3x3</a>;</div>
+<div class="line"><a name="l02430"></a><span class="lineno"> 2430</span> </div>
+<div class="line"><a name="l02433"></a><span class="lineno"><a class="line" href="a00177.html#ga0100666c90176eaba80e49357d123c7f"> 2433</a></span>  <span class="keyword">typedef</span> highp_f32mat3x4 <a class="code" href="a00177.html#ga0100666c90176eaba80e49357d123c7f">f32mat3x4</a>;</div>
+<div class="line"><a name="l02434"></a><span class="lineno"> 2434</span> </div>
+<div class="line"><a name="l02437"></a><span class="lineno"><a class="line" href="a00177.html#ga27f897bdfe4bbded9481b8947553d1ff"> 2437</a></span>  <span class="keyword">typedef</span> highp_f32mat4x2 <a class="code" href="a00177.html#ga27f897bdfe4bbded9481b8947553d1ff">f32mat4x2</a>;</div>
+<div class="line"><a name="l02438"></a><span class="lineno"> 2438</span> </div>
+<div class="line"><a name="l02441"></a><span class="lineno"><a class="line" href="a00177.html#gaa69e73ffb01a52499071391d395908fb"> 2441</a></span>  <span class="keyword">typedef</span> highp_f32mat4x3 <a class="code" href="a00177.html#gaa69e73ffb01a52499071391d395908fb">f32mat4x3</a>;</div>
+<div class="line"><a name="l02442"></a><span class="lineno"> 2442</span> </div>
+<div class="line"><a name="l02445"></a><span class="lineno"><a class="line" href="a00177.html#gafe2e08549805a7ded26da2a868bedbf5"> 2445</a></span>  <span class="keyword">typedef</span> highp_f32mat4x4 <a class="code" href="a00177.html#gafe2e08549805a7ded26da2a868bedbf5">f32mat4x4</a>;</div>
+<div class="line"><a name="l02446"></a><span class="lineno"> 2446</span> </div>
+<div class="line"><a name="l02449"></a><span class="lineno"><a class="line" href="a00177.html#ga1fedd5d29746afdaf2d3303a4442704e"> 2449</a></span>  <span class="keyword">typedef</span> f32mat2x2 <a class="code" href="a00177.html#ga1fedd5d29746afdaf2d3303a4442704e">f32mat2</a>;</div>
+<div class="line"><a name="l02450"></a><span class="lineno"> 2450</span> </div>
+<div class="line"><a name="l02453"></a><span class="lineno"><a class="line" href="a00177.html#gaf4377997b299a287f7ab3358c9bd3e4c"> 2453</a></span>  <span class="keyword">typedef</span> f32mat3x3 <a class="code" href="a00177.html#gaf4377997b299a287f7ab3358c9bd3e4c">f32mat3</a>;</div>
+<div class="line"><a name="l02454"></a><span class="lineno"> 2454</span> </div>
+<div class="line"><a name="l02457"></a><span class="lineno"><a class="line" href="a00177.html#ga797fa3ab16e04456174c36238e091341"> 2457</a></span>  <span class="keyword">typedef</span> f32mat4x4 <a class="code" href="a00177.html#ga797fa3ab16e04456174c36238e091341">f32mat4</a>;</div>
+<div class="line"><a name="l02458"></a><span class="lineno"> 2458</span> </div>
+<div class="line"><a name="l02461"></a><span class="lineno"><a class="line" href="a00177.html#ga6966c0cb4673928c9c9da2e91006d2c0"> 2461</a></span>  <span class="keyword">typedef</span> highp_f32quat <a class="code" href="a00177.html#ga6966c0cb4673928c9c9da2e91006d2c0">f32quat</a>;</div>
+<div class="line"><a name="l02462"></a><span class="lineno"> 2462</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02463"></a><span class="lineno"> 2463</span> </div>
+<div class="line"><a name="l02464"></a><span class="lineno"> 2464</span> <span class="preprocessor">#if(defined(GLM_PRECISION_LOWP_DOUBLE))</span></div>
+<div class="line"><a name="l02465"></a><span class="lineno"> 2465</span>  <span class="keyword">typedef</span> lowp_f64vec1 <a class="code" href="a00177.html#gac5b04f32ae3084a9131a0851e7f4cfae">f64vec1</a>;</div>
+<div class="line"><a name="l02466"></a><span class="lineno"> 2466</span>  <span class="keyword">typedef</span> lowp_f64vec2 <a class="code" href="a00177.html#gafaad77b464b5a35626c31205ac6780e3">f64vec2</a>;</div>
+<div class="line"><a name="l02467"></a><span class="lineno"> 2467</span>  <span class="keyword">typedef</span> lowp_f64vec3 <a class="code" href="a00177.html#gafacc3614bb1136a7756293e67d34de22">f64vec3</a>;</div>
+<div class="line"><a name="l02468"></a><span class="lineno"> 2468</span>  <span class="keyword">typedef</span> lowp_f64vec4 <a class="code" href="a00177.html#ga8723186104dc02eb85da386105fba75f">f64vec4</a>;</div>
+<div class="line"><a name="l02469"></a><span class="lineno"> 2469</span>  <span class="keyword">typedef</span> lowp_f64mat2 <a class="code" href="a00177.html#ga74b9918c90ea60ce58b3979cde963a38">f64mat2</a>;</div>
+<div class="line"><a name="l02470"></a><span class="lineno"> 2470</span>  <span class="keyword">typedef</span> lowp_f64mat3 <a class="code" href="a00177.html#ga68894201dd511792a7af6cff7b5adf71">f64mat3</a>;</div>
+<div class="line"><a name="l02471"></a><span class="lineno"> 2471</span>  <span class="keyword">typedef</span> lowp_f64mat4 <a class="code" href="a00177.html#ga219c683b0aa29f4f482f76d77d5c9e95">f64mat4</a>;</div>
+<div class="line"><a name="l02472"></a><span class="lineno"> 2472</span>  <span class="keyword">typedef</span> lowp_f64mat2x2 <a class="code" href="a00177.html#gaeb817419c76a0766c88713d2754e6cb3">f64mat2x2</a>;</div>
+<div class="line"><a name="l02473"></a><span class="lineno"> 2473</span>  <span class="keyword">typedef</span> lowp_f64mat3x2 <a class="code" href="a00177.html#ga11e5684b10e098f573ff484c1a569ae2">f64mat3x2</a>;</div>
+<div class="line"><a name="l02474"></a><span class="lineno"> 2474</span>  <span class="keyword">typedef</span> lowp_f64mat4x2 <a class="code" href="a00177.html#gaa669dfb59031a441de19b34a92704d57">f64mat4x2</a>;</div>
+<div class="line"><a name="l02475"></a><span class="lineno"> 2475</span>  <span class="keyword">typedef</span> lowp_f64mat2x3 <a class="code" href="a00177.html#ga87d256f4719417e311cd0ea14264678d">f64mat2x3</a>;</div>
+<div class="line"><a name="l02476"></a><span class="lineno"> 2476</span>  <span class="keyword">typedef</span> lowp_f64mat3x3 <a class="code" href="a00177.html#gae1a5081181c96cc37ce9418f6e856cb6">f64mat3x3</a>;</div>
+<div class="line"><a name="l02477"></a><span class="lineno"> 2477</span>  <span class="keyword">typedef</span> lowp_f64mat4x3 <a class="code" href="a00177.html#gaba137814a509704937746cc1e82edc32">f64mat4x3</a>;</div>
+<div class="line"><a name="l02478"></a><span class="lineno"> 2478</span>  <span class="keyword">typedef</span> lowp_f64mat2x4 <a class="code" href="a00177.html#gafb18822e2eac88fa861a76cefd25d550">f64mat2x4</a>;</div>
+<div class="line"><a name="l02479"></a><span class="lineno"> 2479</span>  <span class="keyword">typedef</span> lowp_f64mat3x4 <a class="code" href="a00177.html#gad37a55a8ce1154083a721b4ecfd55293">f64mat3x4</a>;</div>
+<div class="line"><a name="l02480"></a><span class="lineno"> 2480</span>  <span class="keyword">typedef</span> lowp_f64mat4x4 <a class="code" href="a00177.html#ga489163773b021f1800a33cc2fa730c3b">f64mat4x4</a>;</div>
+<div class="line"><a name="l02481"></a><span class="lineno"> 2481</span>  <span class="keyword">typedef</span> lowp_f64quat <a class="code" href="a00177.html#ga14c583bd625eda8cf4935a14d5dd544d">f64quat</a>;</div>
+<div class="line"><a name="l02482"></a><span class="lineno"> 2482</span> <span class="preprocessor">#elif(defined(GLM_PRECISION_MEDIUMP_DOUBLE))</span></div>
+<div class="line"><a name="l02483"></a><span class="lineno"> 2483</span>  <span class="keyword">typedef</span> mediump_f64vec1 <a class="code" href="a00177.html#gac5b04f32ae3084a9131a0851e7f4cfae">f64vec1</a>;</div>
+<div class="line"><a name="l02484"></a><span class="lineno"> 2484</span>  <span class="keyword">typedef</span> mediump_f64vec2 <a class="code" href="a00177.html#gafaad77b464b5a35626c31205ac6780e3">f64vec2</a>;</div>
+<div class="line"><a name="l02485"></a><span class="lineno"> 2485</span>  <span class="keyword">typedef</span> mediump_f64vec3 <a class="code" href="a00177.html#gafacc3614bb1136a7756293e67d34de22">f64vec3</a>;</div>
+<div class="line"><a name="l02486"></a><span class="lineno"> 2486</span>  <span class="keyword">typedef</span> mediump_f64vec4 <a class="code" href="a00177.html#ga8723186104dc02eb85da386105fba75f">f64vec4</a>;</div>
+<div class="line"><a name="l02487"></a><span class="lineno"> 2487</span>  <span class="keyword">typedef</span> mediump_f64mat2 <a class="code" href="a00177.html#ga74b9918c90ea60ce58b3979cde963a38">f64mat2</a>;</div>
+<div class="line"><a name="l02488"></a><span class="lineno"> 2488</span>  <span class="keyword">typedef</span> mediump_f64mat3 <a class="code" href="a00177.html#ga68894201dd511792a7af6cff7b5adf71">f64mat3</a>;</div>
+<div class="line"><a name="l02489"></a><span class="lineno"> 2489</span>  <span class="keyword">typedef</span> mediump_f64mat4 <a class="code" href="a00177.html#ga219c683b0aa29f4f482f76d77d5c9e95">f64mat4</a>;</div>
+<div class="line"><a name="l02490"></a><span class="lineno"> 2490</span>  <span class="keyword">typedef</span> mediump_f64mat2x2 <a class="code" href="a00177.html#gaeb817419c76a0766c88713d2754e6cb3">f64mat2x2</a>;</div>
+<div class="line"><a name="l02491"></a><span class="lineno"> 2491</span>  <span class="keyword">typedef</span> mediump_f64mat3x2 <a class="code" href="a00177.html#ga11e5684b10e098f573ff484c1a569ae2">f64mat3x2</a>;</div>
+<div class="line"><a name="l02492"></a><span class="lineno"> 2492</span>  <span class="keyword">typedef</span> mediump_f64mat4x2 <a class="code" href="a00177.html#gaa669dfb59031a441de19b34a92704d57">f64mat4x2</a>;</div>
+<div class="line"><a name="l02493"></a><span class="lineno"> 2493</span>  <span class="keyword">typedef</span> mediump_f64mat2x3 <a class="code" href="a00177.html#ga87d256f4719417e311cd0ea14264678d">f64mat2x3</a>;</div>
+<div class="line"><a name="l02494"></a><span class="lineno"> 2494</span>  <span class="keyword">typedef</span> mediump_f64mat3x3 <a class="code" href="a00177.html#gae1a5081181c96cc37ce9418f6e856cb6">f64mat3x3</a>;</div>
+<div class="line"><a name="l02495"></a><span class="lineno"> 2495</span>  <span class="keyword">typedef</span> mediump_f64mat4x3 <a class="code" href="a00177.html#gaba137814a509704937746cc1e82edc32">f64mat4x3</a>;</div>
+<div class="line"><a name="l02496"></a><span class="lineno"> 2496</span>  <span class="keyword">typedef</span> mediump_f64mat2x4 <a class="code" href="a00177.html#gafb18822e2eac88fa861a76cefd25d550">f64mat2x4</a>;</div>
+<div class="line"><a name="l02497"></a><span class="lineno"> 2497</span>  <span class="keyword">typedef</span> mediump_f64mat3x4 <a class="code" href="a00177.html#gad37a55a8ce1154083a721b4ecfd55293">f64mat3x4</a>;</div>
+<div class="line"><a name="l02498"></a><span class="lineno"> 2498</span>  <span class="keyword">typedef</span> mediump_f64mat4x4 <a class="code" href="a00177.html#ga489163773b021f1800a33cc2fa730c3b">f64mat4x4</a>;</div>
+<div class="line"><a name="l02499"></a><span class="lineno"> 2499</span>  <span class="keyword">typedef</span> mediump_f64quat <a class="code" href="a00177.html#ga14c583bd625eda8cf4935a14d5dd544d">f64quat</a>;</div>
+<div class="line"><a name="l02500"></a><span class="lineno"> 2500</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l02501"></a><span class="lineno"> 2501</span>  <span class="keyword">typedef</span> highp_f64vec1 <a class="code" href="a00177.html#gac5b04f32ae3084a9131a0851e7f4cfae">f64vec1</a>;</div>
+<div class="line"><a name="l02504"></a><span class="lineno"> 2504</span> </div>
+<div class="line"><a name="l02507"></a><span class="lineno"><a class="line" href="a00177.html#gafaad77b464b5a35626c31205ac6780e3"> 2507</a></span>  <span class="keyword">typedef</span> highp_f64vec2 <a class="code" href="a00177.html#gafaad77b464b5a35626c31205ac6780e3">f64vec2</a>;</div>
+<div class="line"><a name="l02508"></a><span class="lineno"> 2508</span> </div>
+<div class="line"><a name="l02511"></a><span class="lineno"><a class="line" href="a00177.html#gafacc3614bb1136a7756293e67d34de22"> 2511</a></span>  <span class="keyword">typedef</span> highp_f64vec3 <a class="code" href="a00177.html#gafacc3614bb1136a7756293e67d34de22">f64vec3</a>;</div>
+<div class="line"><a name="l02512"></a><span class="lineno"> 2512</span> </div>
+<div class="line"><a name="l02515"></a><span class="lineno"><a class="line" href="a00177.html#ga8723186104dc02eb85da386105fba75f"> 2515</a></span>  <span class="keyword">typedef</span> highp_f64vec4 <a class="code" href="a00177.html#ga8723186104dc02eb85da386105fba75f">f64vec4</a>;</div>
+<div class="line"><a name="l02516"></a><span class="lineno"> 2516</span> </div>
+<div class="line"><a name="l02519"></a><span class="lineno"><a class="line" href="a00177.html#gaeb817419c76a0766c88713d2754e6cb3"> 2519</a></span>  <span class="keyword">typedef</span> highp_f64mat2x2 <a class="code" href="a00177.html#gaeb817419c76a0766c88713d2754e6cb3">f64mat2x2</a>;</div>
+<div class="line"><a name="l02520"></a><span class="lineno"> 2520</span> </div>
+<div class="line"><a name="l02523"></a><span class="lineno"><a class="line" href="a00177.html#ga87d256f4719417e311cd0ea14264678d"> 2523</a></span>  <span class="keyword">typedef</span> highp_f64mat2x3 <a class="code" href="a00177.html#ga87d256f4719417e311cd0ea14264678d">f64mat2x3</a>;</div>
+<div class="line"><a name="l02524"></a><span class="lineno"> 2524</span> </div>
+<div class="line"><a name="l02527"></a><span class="lineno"><a class="line" href="a00177.html#gafb18822e2eac88fa861a76cefd25d550"> 2527</a></span>  <span class="keyword">typedef</span> highp_f64mat2x4 <a class="code" href="a00177.html#gafb18822e2eac88fa861a76cefd25d550">f64mat2x4</a>;</div>
+<div class="line"><a name="l02528"></a><span class="lineno"> 2528</span> </div>
+<div class="line"><a name="l02531"></a><span class="lineno"><a class="line" href="a00177.html#ga11e5684b10e098f573ff484c1a569ae2"> 2531</a></span>  <span class="keyword">typedef</span> highp_f64mat3x2 <a class="code" href="a00177.html#ga11e5684b10e098f573ff484c1a569ae2">f64mat3x2</a>;</div>
+<div class="line"><a name="l02532"></a><span class="lineno"> 2532</span> </div>
+<div class="line"><a name="l02535"></a><span class="lineno"><a class="line" href="a00177.html#gae1a5081181c96cc37ce9418f6e856cb6"> 2535</a></span>  <span class="keyword">typedef</span> highp_f64mat3x3 <a class="code" href="a00177.html#gae1a5081181c96cc37ce9418f6e856cb6">f64mat3x3</a>;</div>
+<div class="line"><a name="l02536"></a><span class="lineno"> 2536</span> </div>
+<div class="line"><a name="l02539"></a><span class="lineno"><a class="line" href="a00177.html#gad37a55a8ce1154083a721b4ecfd55293"> 2539</a></span>  <span class="keyword">typedef</span> highp_f64mat3x4 <a class="code" href="a00177.html#gad37a55a8ce1154083a721b4ecfd55293">f64mat3x4</a>;</div>
+<div class="line"><a name="l02540"></a><span class="lineno"> 2540</span> </div>
+<div class="line"><a name="l02543"></a><span class="lineno"><a class="line" href="a00177.html#gaa669dfb59031a441de19b34a92704d57"> 2543</a></span>  <span class="keyword">typedef</span> highp_f64mat4x2 <a class="code" href="a00177.html#gaa669dfb59031a441de19b34a92704d57">f64mat4x2</a>;</div>
+<div class="line"><a name="l02544"></a><span class="lineno"> 2544</span> </div>
+<div class="line"><a name="l02547"></a><span class="lineno"><a class="line" href="a00177.html#gaba137814a509704937746cc1e82edc32"> 2547</a></span>  <span class="keyword">typedef</span> highp_f64mat4x3 <a class="code" href="a00177.html#gaba137814a509704937746cc1e82edc32">f64mat4x3</a>;</div>
+<div class="line"><a name="l02548"></a><span class="lineno"> 2548</span> </div>
+<div class="line"><a name="l02551"></a><span class="lineno"><a class="line" href="a00177.html#ga489163773b021f1800a33cc2fa730c3b"> 2551</a></span>  <span class="keyword">typedef</span> highp_f64mat4x4 <a class="code" href="a00177.html#ga489163773b021f1800a33cc2fa730c3b">f64mat4x4</a>;</div>
+<div class="line"><a name="l02552"></a><span class="lineno"> 2552</span> </div>
+<div class="line"><a name="l02555"></a><span class="lineno"><a class="line" href="a00177.html#ga74b9918c90ea60ce58b3979cde963a38"> 2555</a></span>  <span class="keyword">typedef</span> f64mat2x2 <a class="code" href="a00177.html#ga74b9918c90ea60ce58b3979cde963a38">f64mat2</a>;</div>
+<div class="line"><a name="l02556"></a><span class="lineno"> 2556</span> </div>
+<div class="line"><a name="l02559"></a><span class="lineno"><a class="line" href="a00177.html#ga68894201dd511792a7af6cff7b5adf71"> 2559</a></span>  <span class="keyword">typedef</span> f64mat3x3 <a class="code" href="a00177.html#ga68894201dd511792a7af6cff7b5adf71">f64mat3</a>;</div>
+<div class="line"><a name="l02560"></a><span class="lineno"> 2560</span> </div>
+<div class="line"><a name="l02563"></a><span class="lineno"><a class="line" href="a00177.html#ga219c683b0aa29f4f482f76d77d5c9e95"> 2563</a></span>  <span class="keyword">typedef</span> f64mat4x4 <a class="code" href="a00177.html#ga219c683b0aa29f4f482f76d77d5c9e95">f64mat4</a>;</div>
+<div class="line"><a name="l02564"></a><span class="lineno"> 2564</span> </div>
+<div class="line"><a name="l02567"></a><span class="lineno"><a class="line" href="a00177.html#ga14c583bd625eda8cf4935a14d5dd544d"> 2567</a></span>  <span class="keyword">typedef</span> highp_f64quat <a class="code" href="a00177.html#ga14c583bd625eda8cf4935a14d5dd544d">f64quat</a>;</div>
+<div class="line"><a name="l02568"></a><span class="lineno"> 2568</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02569"></a><span class="lineno"> 2569</span> </div>
+<div class="line"><a name="l02570"></a><span class="lineno"> 2570</span> }<span class="comment">//namespace glm</span></div>
+<div class="ttc" id="a00177_html_ga119c41d73fe9977358174eb3ac1035a3"><div class="ttname"><a href="a00177.html#ga119c41d73fe9977358174eb3ac1035a3">glm::lowp_int8_t</a></div><div class="ttdeci">detail::int8 lowp_int8_t</div><div class="ttdoc">Low precision 8 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00116">fwd.hpp:116</a></div></div>
+<div class="ttc" id="a00177_html_ga797fa3ab16e04456174c36238e091341"><div class="ttname"><a href="a00177.html#ga797fa3ab16e04456174c36238e091341">glm::f32mat4</a></div><div class="ttdeci">f32mat4x4 f32mat4</div><div class="ttdoc">Default single-precision floating-point 4x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02457">fwd.hpp:2457</a></div></div>
+<div class="ttc" id="a00177_html_ga28f03a39ac56c70f9bf3ada11cb60e3b"><div class="ttname"><a href="a00177.html#ga28f03a39ac56c70f9bf3ada11cb60e3b">glm::i16vec1</a></div><div class="ttdeci">highp_i16vec1 i16vec1</div><div class="ttdoc">Default precision 16 bit signed integer scalar type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00444">fwd.hpp:444</a></div></div>
+<div class="ttc" id="a00177_html_gad3c127f8bf8d7d4e738037c257abb5b1"><div class="ttname"><a href="a00177.html#gad3c127f8bf8d7d4e738037c257abb5b1">glm::float32</a></div><div class="ttdeci">float float32</div><div class="ttdoc">Default 32 bit single-precision floating-point scalar. </div><div class="ttdef"><b>Definition:</b> <a href="a00110_source.html#l00055">type_float.hpp:55</a></div></div>
+<div class="ttc" id="a00177_html_ga3174a49dc84a977cad7012a62f4af02f"><div class="ttname"><a href="a00177.html#ga3174a49dc84a977cad7012a62f4af02f">glm::f32vec1</a></div><div class="ttdeci">highp_f32vec1 f32vec1</div><div class="ttdoc">Default single-precision floating-point vector of 1 components. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02397">fwd.hpp:2397</a></div></div>
+<div class="ttc" id="a00177_html_ga5ed667d0247cce477f013ea31982843d"><div class="ttname"><a href="a00177.html#ga5ed667d0247cce477f013ea31982843d">glm::f32mat2x4</a></div><div class="ttdeci">highp_f32mat2x4 f32mat2x4</div><div class="ttdoc">Default single-precision floating-point 2x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02421">fwd.hpp:2421</a></div></div>
+<div class="ttc" id="a00177_html_gaf49470869e9be2c059629b250619804e"><div class="ttname"><a href="a00177.html#gaf49470869e9be2c059629b250619804e">glm::lowp_uint8</a></div><div class="ttdeci">detail::uint8 lowp_uint8</div><div class="ttdoc">Low precision 8 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00703">fwd.hpp:703</a></div></div>
+<div class="ttc" id="a00177_html_ga8723186104dc02eb85da386105fba75f"><div class="ttname"><a href="a00177.html#ga8723186104dc02eb85da386105fba75f">glm::f64vec4</a></div><div class="ttdeci">highp_f64vec4 f64vec4</div><div class="ttdoc">Default double-precision floating-point vector of 4 components. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02515">fwd.hpp:2515</a></div></div>
+<div class="ttc" id="a00177_html_ga913a8bd51e4ebccd30ad488de3c18da9"><div class="ttname"><a href="a00177.html#ga913a8bd51e4ebccd30ad488de3c18da9">glm::u32vec1</a></div><div class="ttdeci">highp_u32vec1 u32vec1</div><div class="ttdoc">Default precision 32 bit unsigned integer scalar type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l01132">fwd.hpp:1132</a></div></div>
+<div class="ttc" id="a00110_html"><div class="ttname"><a href="a00110.html">type_float.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00158_html_ga8f9002d3ab660e3171f5cdea1aab8395"><div class="ttname"><a href="a00158.html#ga8f9002d3ab660e3171f5cdea1aab8395">glm::lowp_vec4</a></div><div class="ttdeci">tvec4< float, lowp > lowp_vec4</div><div class="ttdoc">4 components vector of low single-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00363">type_vec.hpp:363</a></div></div>
+<div class="ttc" id="a00177_html_ga6fbd69cbdaa44345bff923a2cf63de7e"><div class="ttname"><a href="a00177.html#ga6fbd69cbdaa44345bff923a2cf63de7e">glm::mediump_int8</a></div><div class="ttdeci">detail::int8 mediump_int8</div><div class="ttdoc">Medium precision 8 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00148">fwd.hpp:148</a></div></div>
+<div class="ttc" id="a00177_html_gacf1ded173e1e2d049c511d095b259e21"><div class="ttname"><a href="a00177.html#gacf1ded173e1e2d049c511d095b259e21">glm::mediump_i8</a></div><div class="ttdeci">detail::int8 mediump_i8</div><div class="ttdoc">Medium precision 8 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00180">fwd.hpp:180</a></div></div>
+<div class="ttc" id="a00177_html_gacd1259f3a9e8d2a9df5be2d74322ef9c"><div class="ttname"><a href="a00177.html#gacd1259f3a9e8d2a9df5be2d74322ef9c">glm::highp_u8</a></div><div class="ttdeci">detail::uint8 highp_u8</div><div class="ttdoc">Medium precision 8 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00837">fwd.hpp:837</a></div></div>
+<div class="ttc" id="a00158_html_ga51e835b2aa735782f0174328acffa521"><div class="ttname"><a href="a00158.html#ga51e835b2aa735782f0174328acffa521">glm::lowp_vec2</a></div><div class="ttdeci">tvec2< float, lowp > lowp_vec2</div><div class="ttdoc">2 components vector of low single-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00149">type_vec.hpp:149</a></div></div>
+<div class="ttc" id="a00177_html_ga6d7b3789ecb932c26430009478cac7ae"><div class="ttname"><a href="a00177.html#ga6d7b3789ecb932c26430009478cac7ae">glm::mediump_int8_t</a></div><div class="ttdeci">detail::int8 mediump_int8_t</div><div class="ttdoc">Medium precision 8 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00164">fwd.hpp:164</a></div></div>
+<div class="ttc" id="a00177_html_gaa46172d7dc1c7ffe3e78107ff88adf08"><div class="ttname"><a href="a00177.html#gaa46172d7dc1c7ffe3e78107ff88adf08">glm::highp_uint64_t</a></div><div class="ttdeci">detail::uint64 highp_uint64_t</div><div class="ttdoc">Medium precision 64 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00833">fwd.hpp:833</a></div></div>
+<div class="ttc" id="a00177_html_ga746dc6da204f5622e395f492997dbf57"><div class="ttname"><a href="a00177.html#ga746dc6da204f5622e395f492997dbf57">glm::highp_uint16</a></div><div class="ttdeci">detail::uint16 highp_uint16</div><div class="ttdoc">Medium precision 16 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00809">fwd.hpp:809</a></div></div>
+<div class="ttc" id="a00177_html_gae978599c9711ac263ba732d4ac225b0e"><div class="ttname"><a href="a00177.html#gae978599c9711ac263ba732d4ac225b0e">glm::highp_uint32_t</a></div><div class="ttdeci">detail::uint32 highp_uint32_t</div><div class="ttdoc">Medium precision 32 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00829">fwd.hpp:829</a></div></div>
+<div class="ttc" id="a00177_html_gaf5e94bf2a20af7601787c154751dc2e1"><div class="ttname"><a href="a00177.html#gaf5e94bf2a20af7601787c154751dc2e1">glm::mediump_i32</a></div><div class="ttdeci">detail::int32 mediump_i32</div><div class="ttdoc">Medium precision 32 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00188">fwd.hpp:188</a></div></div>
+<div class="ttc" id="a00158_html_ga7b31b02c5558e2f8e5d8439ae3803d3a"><div class="ttname"><a href="a00158.html#ga7b31b02c5558e2f8e5d8439ae3803d3a">glm::highp_vec3</a></div><div class="ttdeci">tvec3< float, highp > highp_vec3</div><div class="ttdoc">3 components vector of high single-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00245">type_vec.hpp:245</a></div></div>
+<div class="ttc" id="a00127_html"><div class="ttname"><a href="a00127.html">type_vec.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00177_html_gacb88796f2d08ef253d0345aff20c3aee"><div class="ttname"><a href="a00177.html#gacb88796f2d08ef253d0345aff20c3aee">glm::highp_i8</a></div><div class="ttdeci">detail::int8 highp_i8</div><div class="ttdoc">High precision 8 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00228">fwd.hpp:228</a></div></div>
+<div class="ttc" id="a00177_html_gade69872a31f066e5ae212f1af6008edb"><div class="ttname"><a href="a00177.html#gade69872a31f066e5ae212f1af6008edb">glm::i64vec2</a></div><div class="ttdeci">highp_i64vec2 i64vec2</div><div class="ttdoc">Default precision 64 bit signed integer vector of 2 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00686">fwd.hpp:686</a></div></div>
+<div class="ttc" id="a00177_html_gad9b52e1c271cb9c8bfae6365d3e38a23"><div class="ttname"><a href="a00177.html#gad9b52e1c271cb9c8bfae6365d3e38a23">glm::u32vec3</a></div><div class="ttdeci">highp_u32vec3 u32vec3</div><div class="ttdoc">Default precision 32 bit unsigned integer vector of 3 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l01140">fwd.hpp:1140</a></div></div>
+<div class="ttc" id="a00177_html_gad68bfd9f881856fc863a6ebca0b67f78"><div class="ttname"><a href="a00177.html#gad68bfd9f881856fc863a6ebca0b67f78">glm::lowp_uint16</a></div><div class="ttdeci">detail::uint16 lowp_uint16</div><div class="ttdoc">Low precision 16 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00707">fwd.hpp:707</a></div></div>
+<div class="ttc" id="a00177_html_ga8ca60d0ba6d438892be6017f43747661"><div class="ttname"><a href="a00177.html#ga8ca60d0ba6d438892be6017f43747661">glm::u8vec3</a></div><div class="ttdeci">highp_u8vec3 u8vec3</div><div class="ttdoc">Default precision 8 bit unsigned integer vector of 3 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00981">fwd.hpp:981</a></div></div>
+<div class="ttc" id="a00177_html_ga1e4c52bb824ca16c6e2e5b03635669d0"><div class="ttname"><a href="a00177.html#ga1e4c52bb824ca16c6e2e5b03635669d0">glm::f32mat3x3</a></div><div class="ttdeci">highp_f32mat3x3 f32mat3x3</div><div class="ttdoc">Default single-precision floating-point 3x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02429">fwd.hpp:2429</a></div></div>
+<div class="ttc" id="a00177_html_ga3ebcb1f6d8d8387253de8bccb058d77f"><div class="ttname"><a href="a00177.html#ga3ebcb1f6d8d8387253de8bccb058d77f">glm::mediump_i64</a></div><div class="ttdeci">detail::int64 mediump_i64</div><div class="ttdoc">Medium precision 64 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00192">fwd.hpp:192</a></div></div>
+<div class="ttc" id="a00177_html_gaf524c9059f0342668d8eea359bcceaae"><div class="ttname"><a href="a00177.html#gaf524c9059f0342668d8eea359bcceaae">glm::u16vec4</a></div><div class="ttdeci">highp_u16vec4 u16vec4</div><div class="ttdoc">Default precision 16 bit unsigned integer vector of 4 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l01065">fwd.hpp:1065</a></div></div>
+<div class="ttc" id="a00177_html_ga0c181fdf06a309691999926b6690c969"><div class="ttname"><a href="a00177.html#ga0c181fdf06a309691999926b6690c969">glm::highp_u64</a></div><div class="ttdeci">detail::uint64 highp_u64</div><div class="ttdoc">Medium precision 64 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00849">fwd.hpp:849</a></div></div>
+<div class="ttc" id="a00177_html_ga1d794d240091678f602e8de225b8d8c9"><div class="ttname"><a href="a00177.html#ga1d794d240091678f602e8de225b8d8c9">glm::f64</a></div><div class="ttdeci">highp_float64_t f64</div><div class="ttdoc">Default 64 bit double-precision floating-point scalar. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l01509">fwd.hpp:1509</a></div></div>
+<div class="ttc" id="a00177_html_gac5b04f32ae3084a9131a0851e7f4cfae"><div class="ttname"><a href="a00177.html#gac5b04f32ae3084a9131a0851e7f4cfae">glm::f64vec1</a></div><div class="ttdeci">highp_f64vec1 f64vec1</div><div class="ttdoc">Default double-precision floating-point vector of 1 components. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02503">fwd.hpp:2503</a></div></div>
+<div class="ttc" id="a00177_html_gafb6ca34df28889a5db9d244aed375411"><div class="ttname"><a href="a00177.html#gafb6ca34df28889a5db9d244aed375411">glm::u64vec4</a></div><div class="ttdeci">highp_u64vec4 u64vec4</div><div class="ttdoc">Default precision 64 bit unsigned integer vector of 4 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l01303">fwd.hpp:1303</a></div></div>
+<div class="ttc" id="a00177_html_ga760bcf26fdb23a2c3ecad3c928a19ae6"><div class="ttname"><a href="a00177.html#ga760bcf26fdb23a2c3ecad3c928a19ae6">glm::lowp_int8</a></div><div class="ttdeci">detail::int8 lowp_int8</div><div class="ttdoc">Low precision 8 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00100">fwd.hpp:100</a></div></div>
+<div class="ttc" id="a00177_html_ga698e36b01167fc0f037889334dce8def"><div class="ttname"><a href="a00177.html#ga698e36b01167fc0f037889334dce8def">glm::lowp_int16</a></div><div class="ttdeci">detail::int16 lowp_int16</div><div class="ttdoc">Low precision 16 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00104">fwd.hpp:104</a></div></div>
+<div class="ttc" id="a00177_html_gad73e5e905dcf2d8cab002b4ab46e9426"><div class="ttname"><a href="a00177.html#gad73e5e905dcf2d8cab002b4ab46e9426">glm::i16vec4</a></div><div class="ttdeci">highp_i16vec4 i16vec4</div><div class="ttdoc">Default precision 16 bit signed integer vector of 4 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00456">fwd.hpp:456</a></div></div>
+<div class="ttc" id="a00177_html_ga3ab5fe184343d394fb6c2723c3ee3699"><div class="ttname"><a href="a00177.html#ga3ab5fe184343d394fb6c2723c3ee3699">glm::i16</a></div><div class="ttdeci">detail::int16 i16</div><div class="ttdoc">16 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00289">fwd.hpp:289</a></div></div>
+<div class="ttc" id="a00177_html_ga11e5684b10e098f573ff484c1a569ae2"><div class="ttname"><a href="a00177.html#ga11e5684b10e098f573ff484c1a569ae2">glm::f64mat3x2</a></div><div class="ttdeci">highp_f64mat3x2 f64mat3x2</div><div class="ttdoc">Default double-precision floating-point 3x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02531">fwd.hpp:2531</a></div></div>
+<div class="ttc" id="a00177_html_ga5165fbee2d78f342950265b69a07353d"><div class="ttname"><a href="a00177.html#ga5165fbee2d78f342950265b69a07353d">glm::fmat3</a></div><div class="ttdeci">fmat3x3 fmat3</div><div class="ttdoc">Default single-precision floating-point 3x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02383">fwd.hpp:2383</a></div></div>
+<div class="ttc" id="a00177_html_ga41c6189f6485c2825d60fdc835b3a2b0"><div class="ttname"><a href="a00177.html#ga41c6189f6485c2825d60fdc835b3a2b0">glm::int8</a></div><div class="ttdeci">detail::int8 int8</div><div class="ttdoc">8 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00113_source.html#l00206">type_int.hpp:206</a></div></div>
+<div class="ttc" id="a00177_html_ga7ff73a45cea9613ebf1a9fad0b9f82ac"><div class="ttname"><a href="a00177.html#ga7ff73a45cea9613ebf1a9fad0b9f82ac">glm::lowp_i32</a></div><div class="ttdeci">detail::int32 lowp_i32</div><div class="ttdoc">Low precision 32 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00140">fwd.hpp:140</a></div></div>
+<div class="ttc" id="a00177_html_ga28d97808322d3c92186e4a0c067d7e8e"><div class="ttname"><a href="a00177.html#ga28d97808322d3c92186e4a0c067d7e8e">glm::uint8_t</a></div><div class="ttdeci">detail::uint8 uint8_t</div><div class="ttdoc">8 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00877">fwd.hpp:877</a></div></div>
+<div class="ttc" id="a00177_html_ga0350631d35ff800e6133ac6243b13cbc"><div class="ttname"><a href="a00177.html#ga0350631d35ff800e6133ac6243b13cbc">glm::lowp_int32_t</a></div><div class="ttdeci">detail::int32 lowp_int32_t</div><div class="ttdoc">Low precision 32 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00124">fwd.hpp:124</a></div></div>
+<div class="ttc" id="a00158_html_gaae72e97529b8fa4e0341b425d4fe03ae"><div class="ttname"><a href="a00158.html#gaae72e97529b8fa4e0341b425d4fe03ae">glm::mediump_vec4</a></div><div class="ttdeci">tvec4< float, mediump > mediump_vec4</div><div class="ttdoc">4 components vector of medium single-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00357">type_vec.hpp:357</a></div></div>
+<div class="ttc" id="a00177_html_ga97432f9979e73e66567361fd01e4cffb"><div class="ttname"><a href="a00177.html#ga97432f9979e73e66567361fd01e4cffb">glm::highp_uint8</a></div><div class="ttdeci">detail::uint8 highp_uint8</div><div class="ttdoc">Medium precision 8 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00805">fwd.hpp:805</a></div></div>
+<div class="ttc" id="a00177_html_ga727675ac6b5d2fc699520e0059735e25"><div class="ttname"><a href="a00177.html#ga727675ac6b5d2fc699520e0059735e25">glm::highp_i32</a></div><div class="ttdeci">detail::int32 highp_i32</div><div class="ttdoc">High precision 32 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00236">fwd.hpp:236</a></div></div>
+<div class="ttc" id="a00177_html_ga1fa92a233b9110861cdbc8c2ccf0b5a3"><div class="ttname"><a href="a00177.html#ga1fa92a233b9110861cdbc8c2ccf0b5a3">glm::mediump_uint8</a></div><div class="ttdeci">detail::uint8 mediump_uint8</div><div class="ttdoc">Medium precision 8 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00755">fwd.hpp:755</a></div></div>
+<div class="ttc" id="a00177_html_gad1213a22bbb9e4107f07eaa4956f8281"><div class="ttname"><a href="a00177.html#gad1213a22bbb9e4107f07eaa4956f8281">glm::mediump_u8</a></div><div class="ttdeci">detail::uint8 mediump_u8</div><div class="ttdoc">Medium precision 8 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00787">fwd.hpp:787</a></div></div>
+<div class="ttc" id="a00177_html_gaf17b2604c0d92bffb92375d8aa588756"><div class="ttname"><a href="a00177.html#gaf17b2604c0d92bffb92375d8aa588756">glm::fmat2x3</a></div><div class="ttdeci">highp_f32mat2x3 fmat2x3</div><div class="ttdoc">Default single-precision floating-point 2x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02347">fwd.hpp:2347</a></div></div>
+<div class="ttc" id="a00177_html_ga27f897bdfe4bbded9481b8947553d1ff"><div class="ttname"><a href="a00177.html#ga27f897bdfe4bbded9481b8947553d1ff">glm::f32mat4x2</a></div><div class="ttdeci">highp_f32mat4x2 f32mat4x2</div><div class="ttdoc">Default single-precision floating-point 4x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02437">fwd.hpp:2437</a></div></div>
+<div class="ttc" id="a00177_html_ga8e62c883d13f47015f3b70ed88751369"><div class="ttname"><a href="a00177.html#ga8e62c883d13f47015f3b70ed88751369">glm::highp_u16</a></div><div class="ttdeci">detail::uint16 highp_u16</div><div class="ttdoc">Medium precision 16 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00841">fwd.hpp:841</a></div></div>
+<div class="ttc" id="a00177_html_ga7a6f1929464dcc680b16381a4ee5f2cf"><div class="ttname"><a href="a00177.html#ga7a6f1929464dcc680b16381a4ee5f2cf">glm::highp_u32</a></div><div class="ttdeci">detail::uint32 highp_u32</div><div class="ttdoc">Medium precision 32 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00845">fwd.hpp:845</a></div></div>
+<div class="ttc" id="a00177_html_gaff5189f97f9e842d9636a0f240001b2e"><div class="ttname"><a href="a00177.html#gaff5189f97f9e842d9636a0f240001b2e">glm::int64</a></div><div class="ttdeci">detail::int64 int64</div><div class="ttdoc">64 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00113_source.html#l00209">type_int.hpp:209</a></div></div>
+<div class="ttc" id="a00177_html_ga8165913e068444f7842302d40ba897b9"><div class="ttname"><a href="a00177.html#ga8165913e068444f7842302d40ba897b9">glm::u32</a></div><div class="ttdeci">detail::uint32 u32</div><div class="ttdoc">32 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00902">fwd.hpp:902</a></div></div>
+<div class="ttc" id="a00177_html_ga489163773b021f1800a33cc2fa730c3b"><div class="ttname"><a href="a00177.html#ga489163773b021f1800a33cc2fa730c3b">glm::f64mat4x4</a></div><div class="ttdeci">highp_f64mat4x4 f64mat4x4</div><div class="ttdoc">Default double-precision floating-point 4x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02551">fwd.hpp:2551</a></div></div>
+<div class="ttc" id="a00177_html_gab5596d48586414c91ccb270962dc14d3"><div class="ttname"><a href="a00177.html#gab5596d48586414c91ccb270962dc14d3">glm::float64</a></div><div class="ttdeci">double float64</div><div class="ttdoc">Default 64 bit double-precision floating-point scalar. </div><div class="ttdef"><b>Definition:</b> <a href="a00110_source.html#l00056">type_float.hpp:56</a></div></div>
+<div class="ttc" id="a00177_html_gad0549c902a96a7164e4ac858d5f39dbf"><div class="ttname"><a href="a00177.html#gad0549c902a96a7164e4ac858d5f39dbf">glm::highp_int8</a></div><div class="ttdeci">detail::int8 highp_int8</div><div class="ttdoc">High precision 8 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00196">fwd.hpp:196</a></div></div>
+<div class="ttc" id="a00177_html_ga87d256f4719417e311cd0ea14264678d"><div class="ttname"><a href="a00177.html#ga87d256f4719417e311cd0ea14264678d">glm::f64mat2x3</a></div><div class="ttdeci">highp_f64mat2x3 f64mat2x3</div><div class="ttdoc">Default double-precision floating-point 2x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02523">fwd.hpp:2523</a></div></div>
+<div class="ttc" id="a00177_html_ga7f5dbe417199277e449b8db0210acb71"><div class="ttname"><a href="a00177.html#ga7f5dbe417199277e449b8db0210acb71">glm::u16vec3</a></div><div class="ttdeci">highp_u16vec3 u16vec3</div><div class="ttdoc">Default precision 16 bit unsigned integer vector of 3 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l01061">fwd.hpp:1061</a></div></div>
+<div class="ttc" id="a00177_html_ga110bec18ca44c41c76c3c9e4d7b5bd79"><div class="ttname"><a href="a00177.html#ga110bec18ca44c41c76c3c9e4d7b5bd79">glm::i16vec2</a></div><div class="ttdeci">highp_i16vec2 i16vec2</div><div class="ttdoc">Default precision 16 bit signed integer vector of 2 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00448">fwd.hpp:448</a></div></div>
+<div class="ttc" id="a00177_html_ga1fedd5d29746afdaf2d3303a4442704e"><div class="ttname"><a href="a00177.html#ga1fedd5d29746afdaf2d3303a4442704e">glm::f32mat2</a></div><div class="ttdeci">f32mat2x2 f32mat2</div><div class="ttdoc">Default single-precision floating-point 2x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02449">fwd.hpp:2449</a></div></div>
+<div class="ttc" id="a00177_html_gaa6a5b461bbf5fe20982472aa51896d4b"><div class="ttname"><a href="a00177.html#gaa6a5b461bbf5fe20982472aa51896d4b">glm::lowp_uint32</a></div><div class="ttdeci">detail::uint32 lowp_uint32</div><div class="ttdoc">Low precision 32 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00711">fwd.hpp:711</a></div></div>
+<div class="ttc" id="a00158_html_gaf89f8fb5a06848ea4ec1c3a02813454e"><div class="ttname"><a href="a00158.html#gaf89f8fb5a06848ea4ec1c3a02813454e">glm::lowp_vec3</a></div><div class="ttdeci">tvec3< float, lowp > lowp_vec3</div><div class="ttdoc">3 components vector of low single-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00259">type_vec.hpp:259</a></div></div>
+<div class="ttc" id="a00177_html_ga80e72fe94c88498537e8158ba7591c54"><div class="ttname"><a href="a00177.html#ga80e72fe94c88498537e8158ba7591c54">glm::mediump_int16_t</a></div><div class="ttdeci">detail::int16 mediump_int16_t</div><div class="ttdoc">Medium precision 16 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00168">fwd.hpp:168</a></div></div>
+<div class="ttc" id="a00177_html_ga4bf09d8838a86866b39ee6e109341645"><div class="ttname"><a href="a00177.html#ga4bf09d8838a86866b39ee6e109341645">glm::int8_t</a></div><div class="ttdeci">detail::int8 int8_t</div><div class="ttdoc">8 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00268">fwd.hpp:268</a></div></div>
+<div class="ttc" id="a00177_html_ga30652709815ad9404272a31957daa59e"><div class="ttname"><a href="a00177.html#ga30652709815ad9404272a31957daa59e">glm::mediump_uint64</a></div><div class="ttdeci">detail::uint64 mediump_uint64</div><div class="ttdoc">Medium precision 64 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00767">fwd.hpp:767</a></div></div>
+<div class="ttc" id="a00177_html_ga13471cbbe74e4303a57f3743d007b74d"><div class="ttname"><a href="a00177.html#ga13471cbbe74e4303a57f3743d007b74d">glm::uint16</a></div><div class="ttdeci">detail::uint16 uint16</div><div class="ttdoc">16 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00113_source.html#l00212">type_int.hpp:212</a></div></div>
+<div class="ttc" id="a00177_html_ga1a11c170f030ab34ddf037714e936cba"><div class="ttname"><a href="a00177.html#ga1a11c170f030ab34ddf037714e936cba">glm::fmat4x3</a></div><div class="ttdeci">highp_f32mat4x3 fmat4x3</div><div class="ttdoc">Default single-precision floating-point 4x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02371">fwd.hpp:2371</a></div></div>
+<div class="ttc" id="a00177_html_gaa2d7acc0adb536fab71fe261232a40ff"><div class="ttname"><a href="a00177.html#gaa2d7acc0adb536fab71fe261232a40ff">glm::u16</a></div><div class="ttdeci">detail::uint16 u16</div><div class="ttdoc">16 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00898">fwd.hpp:898</a></div></div>
+<div class="ttc" id="a00177_html_ga981b63d5c5f7233a29364e0a968d139b"><div class="ttname"><a href="a00177.html#ga981b63d5c5f7233a29364e0a968d139b">glm::fvec4</a></div><div class="ttdeci">highp_f32vec4 fvec4</div><div class="ttdoc">Default single-precision floating-point vector of 4 components. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02339">fwd.hpp:2339</a></div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00177_html_ga0741d40e2b0fea4f1c50cb325114f075"><div class="ttname"><a href="a00177.html#ga0741d40e2b0fea4f1c50cb325114f075">glm::u32vec2</a></div><div class="ttdeci">highp_u32vec2 u32vec2</div><div class="ttdoc">Default precision 32 bit unsigned integer vector of 2 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l01136">fwd.hpp:1136</a></div></div>
+<div class="ttc" id="a00177_html_gaf3a5016bf360977ce114deb2e01ae10a"><div class="ttname"><a href="a00177.html#gaf3a5016bf360977ce114deb2e01ae10a">glm::f32mat2x2</a></div><div class="ttdeci">highp_f32mat2x2 f32mat2x2</div><div class="ttdoc">Default single-precision floating-point 2x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02413">fwd.hpp:2413</a></div></div>
+<div class="ttc" id="a00177_html_ga219c683b0aa29f4f482f76d77d5c9e95"><div class="ttname"><a href="a00177.html#ga219c683b0aa29f4f482f76d77d5c9e95">glm::f64mat4</a></div><div class="ttdeci">f64mat4x4 f64mat4</div><div class="ttdoc">Default double-precision floating-point 4x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02563">fwd.hpp:2563</a></div></div>
+<div class="ttc" id="a00177_html_ga5244cef85d6e870e240c76428a262ae8"><div class="ttname"><a href="a00177.html#ga5244cef85d6e870e240c76428a262ae8">glm::mediump_int32</a></div><div class="ttdeci">detail::int32 mediump_int32</div><div class="ttdoc">Medium precision 32 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00156">fwd.hpp:156</a></div></div>
+<div class="ttc" id="a00177_html_ga0336abc2604dd2c20c30e036454b64f8"><div class="ttname"><a href="a00177.html#ga0336abc2604dd2c20c30e036454b64f8">glm::highp_i16</a></div><div class="ttdeci">detail::int16 highp_i16</div><div class="ttdoc">High precision 16 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00232">fwd.hpp:232</a></div></div>
+<div class="ttc" id="a00177_html_ga8709a1ea268fa69bdf1e11616d7fbaf1"><div class="ttname"><a href="a00177.html#ga8709a1ea268fa69bdf1e11616d7fbaf1">glm::f32mat3x2</a></div><div class="ttdeci">highp_f32mat3x2 f32mat3x2</div><div class="ttdoc">Default single-precision floating-point 3x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02425">fwd.hpp:2425</a></div></div>
+<div class="ttc" id="a00177_html_gac4e00a26a2adb5f2c0a7096810df29e5"><div class="ttname"><a href="a00177.html#gac4e00a26a2adb5f2c0a7096810df29e5">glm::highp_uint8_t</a></div><div class="ttdeci">detail::uint8 highp_uint8_t</div><div class="ttdoc">Medium precision 8 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00821">fwd.hpp:821</a></div></div>
+<div class="ttc" id="a00177_html_gaa669dfb59031a441de19b34a92704d57"><div class="ttname"><a href="a00177.html#gaa669dfb59031a441de19b34a92704d57">glm::f64mat4x2</a></div><div class="ttdeci">highp_f64mat4x2 f64mat4x2</div><div class="ttdoc">Default double-precision floating-point 4x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02543">fwd.hpp:2543</a></div></div>
+<div class="ttc" id="a00177_html_gad37a55a8ce1154083a721b4ecfd55293"><div class="ttname"><a href="a00177.html#gad37a55a8ce1154083a721b4ecfd55293">glm::f64mat3x4</a></div><div class="ttdeci">highp_f64mat3x4 f64mat3x4</div><div class="ttdoc">Default double-precision floating-point 3x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02539">fwd.hpp:2539</a></div></div>
+<div class="ttc" id="a00177_html_gabd79752ff357d83b49136b6299ea62d9"><div class="ttname"><a href="a00177.html#gabd79752ff357d83b49136b6299ea62d9">glm::fmat4x4</a></div><div class="ttdeci">highp_f32mat4x4 fmat4x4</div><div class="ttdoc">Default single-precision floating-point 4x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02375">fwd.hpp:2375</a></div></div>
+<div class="ttc" id="a00177_html_ga41d579d81c3d98edd0532244fa02da77"><div class="ttname"><a href="a00177.html#ga41d579d81c3d98edd0532244fa02da77">glm::float32_t</a></div><div class="ttdeci">highp_float32_t float32_t</div><div class="ttdoc">Default 32 bit single-precision floating-point scalar. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l01497">fwd.hpp:1497</a></div></div>
+<div class="ttc" id="a00177_html_gaa38d732f5d4a7bc42a1b43b9d3c141ce"><div class="ttname"><a href="a00177.html#gaa38d732f5d4a7bc42a1b43b9d3c141ce">glm::highp_uint64</a></div><div class="ttdeci">detail::uint64 highp_uint64</div><div class="ttdoc">Medium precision 64 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00817">fwd.hpp:817</a></div></div>
+<div class="ttc" id="a00158_html_gade7cb496ed3d78b2a11f1651cce77239"><div class="ttname"><a href="a00158.html#gade7cb496ed3d78b2a11f1651cce77239">glm::highp_vec4</a></div><div class="ttdeci">tvec4< float, highp > highp_vec4</div><div class="ttdoc">4 components vector of high single-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00351">type_vec.hpp:351</a></div></div>
+<div class="ttc" id="a00177_html_ga793c9293cc687a0e342396a377c5df77"><div class="ttname"><a href="a00177.html#ga793c9293cc687a0e342396a377c5df77">glm::u64vec1</a></div><div class="ttdeci">highp_u64vec1 u64vec1</div><div class="ttdoc">Default precision 64 bit unsigned integer scalar type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l01291">fwd.hpp:1291</a></div></div>
+<div class="ttc" id="a00177_html_ga354736e0c645099cd44c42fb2f87c2b8"><div class="ttname"><a href="a00177.html#ga354736e0c645099cd44c42fb2f87c2b8">glm::lowp_i64</a></div><div class="ttdeci">detail::int64 lowp_i64</div><div class="ttdoc">Low precision 64 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00144">fwd.hpp:144</a></div></div>
+<div class="ttc" id="a00177_html_gafacc3614bb1136a7756293e67d34de22"><div class="ttname"><a href="a00177.html#gafacc3614bb1136a7756293e67d34de22">glm::f64vec3</a></div><div class="ttdeci">highp_f64vec3 f64vec3</div><div class="ttdoc">Default double-precision floating-point vector of 3 components. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02511">fwd.hpp:2511</a></div></div>
+<div class="ttc" id="a00177_html_ga302041c186d0d028bea31b711fe16759"><div class="ttname"><a href="a00177.html#ga302041c186d0d028bea31b711fe16759">glm::int16</a></div><div class="ttdeci">detail::int16 int16</div><div class="ttdoc">16 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00113_source.html#l00207">type_int.hpp:207</a></div></div>
+<div class="ttc" id="a00177_html_ga864aabca5f3296e176e0c3ed9cc16b02"><div class="ttname"><a href="a00177.html#ga864aabca5f3296e176e0c3ed9cc16b02">glm::lowp_int32</a></div><div class="ttdeci">detail::int32 lowp_int32</div><div class="ttdoc">Low precision 32 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00108">fwd.hpp:108</a></div></div>
+<div class="ttc" id="a00177_html_ga8dd3a3281ae5c970ffe0c41d538aa153"><div class="ttname"><a href="a00177.html#ga8dd3a3281ae5c970ffe0c41d538aa153">glm::lowp_uint64_t</a></div><div class="ttdeci">detail::uint64 lowp_uint64_t</div><div class="ttdoc">Low precision 64 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00732">fwd.hpp:732</a></div></div>
+<div class="ttc" id="a00177_html_ga4cca6bbd117c45f046291fc8e9d03765"><div class="ttname"><a href="a00177.html#ga4cca6bbd117c45f046291fc8e9d03765">glm::i32vec1</a></div><div class="ttdeci">highp_i32vec1 i32vec1</div><div class="ttdoc">Default precision 32 bit signed integer scalar type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00523">fwd.hpp:523</a></div></div>
+<div class="ttc" id="a00177_html_ga4f072ada9552e1e480bbb3b1acde5250"><div class="ttname"><a href="a00177.html#ga4f072ada9552e1e480bbb3b1acde5250">glm::lowp_u32</a></div><div class="ttdeci">detail::uint32 lowp_u32</div><div class="ttdoc">Low precision 32 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00745">fwd.hpp:745</a></div></div>
+<div class="ttc" id="a00177_html_ga61667c99caf60ce6c48ebbbac72bd91d"><div class="ttname"><a href="a00177.html#ga61667c99caf60ce6c48ebbbac72bd91d">glm::u8vec2</a></div><div class="ttdeci">highp_u8vec2 u8vec2</div><div class="ttdoc">Default precision 8 bit unsigned integer vector of 2 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00977">fwd.hpp:977</a></div></div>
+<div class="ttc" id="a00177_html_ga973b226a9914db682c9372fc761fb535"><div class="ttname"><a href="a00177.html#ga973b226a9914db682c9372fc761fb535">glm::i16vec3</a></div><div class="ttdeci">highp_i16vec3 i16vec3</div><div class="ttdoc">Default precision 16 bit signed integer vector of 3 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00452">fwd.hpp:452</a></div></div>
+<div class="ttc" id="a00177_html_gae0cb53ea6fe3d977fe588ce423d57cc3"><div class="ttname"><a href="a00177.html#gae0cb53ea6fe3d977fe588ce423d57cc3">glm::f32vec2</a></div><div class="ttdeci">highp_f32vec2 f32vec2</div><div class="ttdoc">Default single-precision floating-point vector of 2 components. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02401">fwd.hpp:2401</a></div></div>
+<div class="ttc" id="a00177_html_ga667b2ece2b258be898812dc2177995d1"><div class="ttname"><a href="a00177.html#ga667b2ece2b258be898812dc2177995d1">glm::lowp_uint8_t</a></div><div class="ttdeci">detail::uint8 lowp_uint8_t</div><div class="ttdoc">Low precision 8 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00720">fwd.hpp:720</a></div></div>
+<div class="ttc" id="a00114_html"><div class="ttname"><a href="a00114.html">type_mat.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00177_html_ga9756e45c8f80329257f3cbdabc3bd73c"><div class="ttname"><a href="a00177.html#ga9756e45c8f80329257f3cbdabc3bd73c">glm::i64vec4</a></div><div class="ttdeci">highp_i64vec4 i64vec4</div><div class="ttdoc">Default precision 64 bit signed integer vector of 4 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00694">fwd.hpp:694</a></div></div>
+<div class="ttc" id="a00177_html_gaf9f4173dd9e8b2d0b663c6f80ed09ff6"><div class="ttname"><a href="a00177.html#gaf9f4173dd9e8b2d0b663c6f80ed09ff6">glm::fvec2</a></div><div class="ttdeci">highp_f32vec2 fvec2</div><div class="ttdoc">Default single-precision floating-point vector of 2 components. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02331">fwd.hpp:2331</a></div></div>
+<div class="ttc" id="a00177_html_gab3f31d867df4874e42172ebf188a3ebd"><div class="ttname"><a href="a00177.html#gab3f31d867df4874e42172ebf188a3ebd">glm::fmat4</a></div><div class="ttdeci">fmat4x4 fmat4</div><div class="ttdoc">Default single-precision floating-point 4x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02387">fwd.hpp:2387</a></div></div>
+<div class="ttc" id="a00177_html_gaeb25dbb0261f82cb08da23e26d343704"><div class="ttname"><a href="a00177.html#gaeb25dbb0261f82cb08da23e26d343704">glm::f32vec4</a></div><div class="ttdeci">highp_f32vec4 f32vec4</div><div class="ttdoc">Default single-precision floating-point vector of 4 components. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02409">fwd.hpp:2409</a></div></div>
+<div class="ttc" id="a00177_html_ga30069d1f02b19599cbfadf98c23ac6ed"><div class="ttname"><a href="a00177.html#ga30069d1f02b19599cbfadf98c23ac6ed">glm::lowp_u64</a></div><div class="ttdeci">detail::uint64 lowp_u64</div><div class="ttdoc">Low precision 64 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00749">fwd.hpp:749</a></div></div>
+<div class="ttc" id="a00177_html_ga302ec977b0c0c3ea245b6c9275495355"><div class="ttname"><a href="a00177.html#ga302ec977b0c0c3ea245b6c9275495355">glm::i8</a></div><div class="ttdeci">detail::int8 i8</div><div class="ttdoc">8 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00285">fwd.hpp:285</a></div></div>
+<div class="ttc" id="a00177_html_ga74ac2e71b650162d8f7cb2a70c2f6711"><div class="ttname"><a href="a00177.html#ga74ac2e71b650162d8f7cb2a70c2f6711">glm::fmat2x2</a></div><div class="ttdeci">highp_f32mat2x2 fmat2x2</div><div class="ttdoc">Default single-precision floating-point 2x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02343">fwd.hpp:2343</a></div></div>
+<div class="ttc" id="a00177_html_ga9ece7c77c7bca7a6b824ef9c600f5e5e"><div class="ttname"><a href="a00177.html#ga9ece7c77c7bca7a6b824ef9c600f5e5e">glm::i64vec3</a></div><div class="ttdeci">highp_i64vec3 i64vec3</div><div class="ttdoc">Default precision 64 bit signed integer vector of 3 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00690">fwd.hpp:690</a></div></div>
+<div class="ttc" id="a00158_html_ga591478a77e4324e0836abc17cbb13e83"><div class="ttname"><a href="a00158.html#ga591478a77e4324e0836abc17cbb13e83">glm::mediump_vec3</a></div><div class="ttdeci">tvec3< float, mediump > mediump_vec3</div><div class="ttdoc">3 components vector of medium single-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00252">type_vec.hpp:252</a></div></div>
+<div class="ttc" id="a00177_html_ga392b673fd10847bfb78fb808c6cf8ff7"><div class="ttname"><a href="a00177.html#ga392b673fd10847bfb78fb808c6cf8ff7">glm::lowp_i16</a></div><div class="ttdeci">detail::int16 lowp_i16</div><div class="ttdoc">Low precision 16 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00136">fwd.hpp:136</a></div></div>
+<div class="ttc" id="a00177_html_gaa212b805736a759998e312cbdd550fae"><div class="ttname"><a href="a00177.html#gaa212b805736a759998e312cbdd550fae">glm::lowp_uint64</a></div><div class="ttdeci">detail::uint64 lowp_uint64</div><div class="ttdoc">Low precision 64 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00715">fwd.hpp:715</a></div></div>
+<div class="ttc" id="a00177_html_ga226a8d52b4e3f77aaa6231135e886aac"><div class="ttname"><a href="a00177.html#ga226a8d52b4e3f77aaa6231135e886aac">glm::highp_int64</a></div><div class="ttdeci">detail::int64 highp_int64</div><div class="ttdoc">High precision 64 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00208">fwd.hpp:208</a></div></div>
+<div class="ttc" id="a00177_html_gaecc7082561fc9028b844b6cf3d305d36"><div class="ttname"><a href="a00177.html#gaecc7082561fc9028b844b6cf3d305d36">glm::u8</a></div><div class="ttdeci">detail::uint8 u8</div><div class="ttdoc">8 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00894">fwd.hpp:894</a></div></div>
+<div class="ttc" id="a00177_html_ga1bd0e914158bf03135f8a317de6debe9"><div class="ttname"><a href="a00177.html#ga1bd0e914158bf03135f8a317de6debe9">glm::mediump_u32</a></div><div class="ttdeci">detail::uint32 mediump_u32</div><div class="ttdoc">Medium precision 32 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00795">fwd.hpp:795</a></div></div>
+<div class="ttc" id="a00177_html_ga74b9918c90ea60ce58b3979cde963a38"><div class="ttname"><a href="a00177.html#ga74b9918c90ea60ce58b3979cde963a38">glm::f64mat2</a></div><div class="ttdeci">f64mat2x2 f64mat2</div><div class="ttdoc">Default double-precision floating-point 2x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02555">fwd.hpp:2555</a></div></div>
+<div class="ttc" id="a00177_html_gaeb817419c76a0766c88713d2754e6cb3"><div class="ttname"><a href="a00177.html#gaeb817419c76a0766c88713d2754e6cb3">glm::f64mat2x2</a></div><div class="ttdeci">highp_f64mat2x2 f64mat2x2</div><div class="ttdoc">Default double-precision floating-point 2x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02519">fwd.hpp:2519</a></div></div>
+<div class="ttc" id="a00177_html_gaebf341fc4a5be233f7dde962c2e33847"><div class="ttname"><a href="a00177.html#gaebf341fc4a5be233f7dde962c2e33847">glm::lowp_int64_t</a></div><div class="ttdeci">detail::int64 lowp_int64_t</div><div class="ttdoc">Low precision 64 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00128">fwd.hpp:128</a></div></div>
+<div class="ttc" id="a00177_html_ga504ce1631cb2ac02fcf1d44d8c2aa126"><div class="ttname"><a href="a00177.html#ga504ce1631cb2ac02fcf1d44d8c2aa126">glm::lowp_u16</a></div><div class="ttdeci">detail::uint16 lowp_u16</div><div class="ttdoc">Low precision 16 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00741">fwd.hpp:741</a></div></div>
+<div class="ttc" id="a00177_html_ga426030555085ed6c39a54e73afbef962"><div class="ttname"><a href="a00177.html#ga426030555085ed6c39a54e73afbef962">glm::u16vec2</a></div><div class="ttdeci">highp_u16vec2 u16vec2</div><div class="ttdoc">Default precision 16 bit unsigned integer vector of 2 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l01057">fwd.hpp:1057</a></div></div>
+<div class="ttc" id="a00177_html_gaf4dae276fd29623950de14a6ca2586b5"><div class="ttname"><a href="a00177.html#gaf4dae276fd29623950de14a6ca2586b5">glm::mediump_uint32_t</a></div><div class="ttdeci">detail::uint32 mediump_uint32_t</div><div class="ttdoc">Medium precision 32 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00779">fwd.hpp:779</a></div></div>
+<div class="ttc" id="a00177_html_gaefa2ce8fbdbe89baffd262f46f2d5907"><div class="ttname"><a href="a00177.html#gaefa2ce8fbdbe89baffd262f46f2d5907">glm::u16vec1</a></div><div class="ttdeci">highp_u16vec1 u16vec1</div><div class="ttdoc">Default precision 16 bit unsigned integer scalar type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l01053">fwd.hpp:1053</a></div></div>
+<div class="ttc" id="a00158_html_gac37a3fd0ecdcab044853c039409c9af7"><div class="ttname"><a href="a00158.html#gac37a3fd0ecdcab044853c039409c9af7">glm::mediump_vec2</a></div><div class="ttdeci">tvec2< float, mediump > mediump_vec2</div><div class="ttdoc">2 components vector of medium single-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00142">type_vec.hpp:142</a></div></div>
+<div class="ttc" id="a00158_html_gabfc3e9f63cc3e2ee0521405277ef3997"><div class="ttname"><a href="a00158.html#gabfc3e9f63cc3e2ee0521405277ef3997">glm::highp_vec2</a></div><div class="ttdeci">tvec2< float, highp > highp_vec2</div><div class="ttdoc">2 components vector of high single-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00135">type_vec.hpp:135</a></div></div>
+<div class="ttc" id="a00177_html_ga14c583bd625eda8cf4935a14d5dd544d"><div class="ttname"><a href="a00177.html#ga14c583bd625eda8cf4935a14d5dd544d">glm::f64quat</a></div><div class="ttdeci">highp_f64quat f64quat</div><div class="ttdoc">Default double-precision floating-point quaternion. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02567">fwd.hpp:2567</a></div></div>
+<div class="ttc" id="a00177_html_ga91c4815f93177eb423362fd296a87e9f"><div class="ttname"><a href="a00177.html#ga91c4815f93177eb423362fd296a87e9f">glm::lowp_uint16_t</a></div><div class="ttdeci">detail::uint16 lowp_uint16_t</div><div class="ttdoc">Low precision 16 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00724">fwd.hpp:724</a></div></div>
+<div class="ttc" id="a00177_html_gac25db6d2b1e2a0f351b77ba3409ac4cd"><div class="ttname"><a href="a00177.html#gac25db6d2b1e2a0f351b77ba3409ac4cd">glm::highp_i64</a></div><div class="ttdeci">detail::int64 highp_i64</div><div class="ttdoc">High precision 64 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00240">fwd.hpp:240</a></div></div>
+<div class="ttc" id="a00177_html_ga62a17cddeb4dffb4e18fe3aea23f051a"><div class="ttname"><a href="a00177.html#ga62a17cddeb4dffb4e18fe3aea23f051a">glm::mediump_i16</a></div><div class="ttdeci">detail::int16 mediump_i16</div><div class="ttdoc">Medium precision 16 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00184">fwd.hpp:184</a></div></div>
+<div class="ttc" id="a00177_html_ga2204827de9d4ee7fa92ef497093f7d6e"><div class="ttname"><a href="a00177.html#ga2204827de9d4ee7fa92ef497093f7d6e">glm::u64vec2</a></div><div class="ttdeci">highp_u64vec2 u64vec2</div><div class="ttdoc">Default precision 64 bit unsigned integer vector of 2 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l01295">fwd.hpp:1295</a></div></div>
+<div class="ttc" id="a00177_html_ga84ed04b4e0de18c977e932d617e7c223"><div class="ttname"><a href="a00177.html#ga84ed04b4e0de18c977e932d617e7c223">glm::highp_int32</a></div><div class="ttdeci">detail::int32 highp_int32</div><div class="ttdoc">High precision 32 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00204">fwd.hpp:204</a></div></div>
+<div class="ttc" id="a00177_html_gad5f1043adbe803928fe7bf1a90a1f767"><div class="ttname"><a href="a00177.html#gad5f1043adbe803928fe7bf1a90a1f767">glm::f32mat2x3</a></div><div class="ttdeci">highp_f32mat2x3 f32mat2x3</div><div class="ttdoc">Default single-precision floating-point 2x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02417">fwd.hpp:2417</a></div></div>
+<div class="ttc" id="a00177_html_ga155ac7e9e454e2b1f73d11e1e28a0fd6"><div class="ttname"><a href="a00177.html#ga155ac7e9e454e2b1f73d11e1e28a0fd6">glm::u32vec4</a></div><div class="ttdeci">highp_u32vec4 u32vec4</div><div class="ttdoc">Default precision 32 bit unsigned integer vector of 4 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l01144">fwd.hpp:1144</a></div></div>
+<div class="ttc" id="a00177_html_ga36475e31b1992cfde54c1a6f5a148865"><div class="ttname"><a href="a00177.html#ga36475e31b1992cfde54c1a6f5a148865">glm::uint8</a></div><div class="ttdeci">detail::uint8 uint8</div><div class="ttdoc">8 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00113_source.html#l00211">type_int.hpp:211</a></div></div>
+<div class="ttc" id="a00177_html_ga26fc7ced1ad7ca5024f1c973c8dc9180"><div class="ttname"><a href="a00177.html#ga26fc7ced1ad7ca5024f1c973c8dc9180">glm::mediump_int32_t</a></div><div class="ttdeci">detail::int32 mediump_int32_t</div><div class="ttdoc">Medium precision 32 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00172">fwd.hpp:172</a></div></div>
+<div class="ttc" id="a00177_html_ga5fa3ddcab56c789bc272ff5651faa12d"><div class="ttname"><a href="a00177.html#ga5fa3ddcab56c789bc272ff5651faa12d">glm::uint32</a></div><div class="ttdeci">detail::uint32 uint32</div><div class="ttdoc">32 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00113_source.html#l00213">type_int.hpp:213</a></div></div>
+<div class="ttc" id="a00177_html_ga042ef09ff2f0cb24a36f541bcb3a3710"><div class="ttname"><a href="a00177.html#ga042ef09ff2f0cb24a36f541bcb3a3710">glm::int32_t</a></div><div class="ttdeci">detail::int32 int32_t</div><div class="ttdoc">32 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00276">fwd.hpp:276</a></div></div>
+<div class="ttc" id="a00177_html_gabb01d4ff646ee07241934b1a0cc0f985"><div class="ttname"><a href="a00177.html#gabb01d4ff646ee07241934b1a0cc0f985">glm::fmat2</a></div><div class="ttdeci">fmat2x2 fmat2</div><div class="ttdoc">Default single-precision floating-point 2x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02379">fwd.hpp:2379</a></div></div>
+<div class="ttc" id="a00177_html_ga9df98857be695d5a30cb30f5bfa38a80"><div class="ttname"><a href="a00177.html#ga9df98857be695d5a30cb30f5bfa38a80">glm::mediump_u16</a></div><div class="ttdeci">detail::uint16 mediump_u16</div><div class="ttdoc">Medium precision 16 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00791">fwd.hpp:791</a></div></div>
+<div class="ttc" id="a00113_html"><div class="ttname"><a href="a00113.html">type_int.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00177_html_gacf54c3330ef60aa3d16cb676c7bcb8c7"><div class="ttname"><a href="a00177.html#gacf54c3330ef60aa3d16cb676c7bcb8c7">glm::highp_uint16_t</a></div><div class="ttdeci">detail::uint16 highp_uint16_t</div><div class="ttdoc">Medium precision 16 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00825">fwd.hpp:825</a></div></div>
+<div class="ttc" id="a00177_html_ga34dd5ec1988c443bae80f1b20a8ade5f"><div class="ttname"><a href="a00177.html#ga34dd5ec1988c443bae80f1b20a8ade5f">glm::mediump_uint32</a></div><div class="ttdeci">detail::uint32 mediump_uint32</div><div class="ttdoc">Medium precision 32 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00763">fwd.hpp:763</a></div></div>
+<div class="ttc" id="a00177_html_ga3999d3e7ff22025c16ddb601e14dfdee"><div class="ttname"><a href="a00177.html#ga3999d3e7ff22025c16ddb601e14dfdee">glm::uint64_t</a></div><div class="ttdeci">detail::uint64 uint64_t</div><div class="ttdoc">64 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00889">fwd.hpp:889</a></div></div>
+<div class="ttc" id="a00177_html_ga6414484477e4c1b4863cf91af8fd4185"><div class="ttname"><a href="a00177.html#ga6414484477e4c1b4863cf91af8fd4185">glm::i8vec2</a></div><div class="ttdeci">highp_i8vec2 i8vec2</div><div class="ttdoc">Default precision 8 bit signed integer vector of 2 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00368">fwd.hpp:368</a></div></div>
+<div class="ttc" id="a00177_html_gaa69e73ffb01a52499071391d395908fb"><div class="ttname"><a href="a00177.html#gaa69e73ffb01a52499071391d395908fb">glm::f32mat4x3</a></div><div class="ttdeci">highp_f32mat4x3 f32mat4x3</div><div class="ttdoc">Default single-precision floating-point 4x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02441">fwd.hpp:2441</a></div></div>
+<div class="ttc" id="a00177_html_gaba137814a509704937746cc1e82edc32"><div class="ttname"><a href="a00177.html#gaba137814a509704937746cc1e82edc32">glm::f64mat4x3</a></div><div class="ttdeci">highp_f64mat4x3 f64mat4x3</div><div class="ttdoc">Default double-precision floating-point 4x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02547">fwd.hpp:2547</a></div></div>
+<div class="ttc" id="a00177_html_gab630f76c26b50298187f7889104d4b9c"><div class="ttname"><a href="a00177.html#gab630f76c26b50298187f7889104d4b9c">glm::uint64</a></div><div class="ttdeci">detail::uint64 uint64</div><div class="ttdoc">64 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00113_source.html#l00214">type_int.hpp:214</a></div></div>
+<div class="ttc" id="a00177_html_ga709c97c20efa24ff1d9e83cd437b8ed5"><div class="ttname"><a href="a00177.html#ga709c97c20efa24ff1d9e83cd437b8ed5">glm::fmat2x4</a></div><div class="ttdeci">highp_f32mat2x4 fmat2x4</div><div class="ttdoc">Default single-precision floating-point 2x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02351">fwd.hpp:2351</a></div></div>
+<div class="ttc" id="a00177_html_gadfe65c78231039e90507770db50c98c7"><div class="ttname"><a href="a00177.html#gadfe65c78231039e90507770db50c98c7">glm::mediump_uint8_t</a></div><div class="ttdeci">detail::uint8 mediump_uint8_t</div><div class="ttdoc">Medium precision 8 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00771">fwd.hpp:771</a></div></div>
+<div class="ttc" id="a00177_html_gab04bc97371cb6b5f54b3688e0c81578b"><div class="ttname"><a href="a00177.html#gab04bc97371cb6b5f54b3688e0c81578b">glm::fmat3x4</a></div><div class="ttdeci">highp_f32mat3x4 fmat3x4</div><div class="ttdoc">Default single-precision floating-point 3x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02363">fwd.hpp:2363</a></div></div>
+<div class="ttc" id="a00177_html_ga3c12cef4135603fd77d8fda85808730c"><div class="ttname"><a href="a00177.html#ga3c12cef4135603fd77d8fda85808730c">glm::i32vec2</a></div><div class="ttdeci">highp_i32vec2 i32vec2</div><div class="ttdoc">Default precision 32 bit signed integer vector of 2 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00527">fwd.hpp:527</a></div></div>
+<div class="ttc" id="a00177_html_ga6957c7b22f405683bb276554ca40dc37"><div class="ttname"><a href="a00177.html#ga6957c7b22f405683bb276554ca40dc37">glm::float64_t</a></div><div class="ttdeci">highp_float64_t float64_t</div><div class="ttdoc">Default 64 bit double-precision floating-point scalar. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l01501">fwd.hpp:1501</a></div></div>
+<div class="ttc" id="a00177_html_gaf4b5993e794e252607f91535b62a7e0c"><div class="ttname"><a href="a00177.html#gaf4b5993e794e252607f91535b62a7e0c">glm::i8vec3</a></div><div class="ttdeci">highp_i8vec3 i8vec3</div><div class="ttdoc">Default precision 8 bit signed integer vector of 3 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00372">fwd.hpp:372</a></div></div>
+<div class="ttc" id="a00177_html_gac3bc41bcac61d1ba8f02a6f68ce23f64"><div class="ttname"><a href="a00177.html#gac3bc41bcac61d1ba8f02a6f68ce23f64">glm::mediump_int64_t</a></div><div class="ttdeci">detail::int64 mediump_int64_t</div><div class="ttdoc">Medium precision 64 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00176">fwd.hpp:176</a></div></div>
+<div class="ttc" id="a00177_html_gafe2e08549805a7ded26da2a868bedbf5"><div class="ttname"><a href="a00177.html#gafe2e08549805a7ded26da2a868bedbf5">glm::f32mat4x4</a></div><div class="ttdeci">highp_f32mat4x4 f32mat4x4</div><div class="ttdoc">Default single-precision floating-point 4x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02445">fwd.hpp:2445</a></div></div>
+<div class="ttc" id="a00177_html_gab2329c5c14ff5a03b1ddec039e2c7409"><div class="ttname"><a href="a00177.html#gab2329c5c14ff5a03b1ddec039e2c7409">glm::i8vec1</a></div><div class="ttdeci">highp_i8vec1 i8vec1</div><div class="ttdoc">Default precision 8 bit signed integer scalar type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00364">fwd.hpp:364</a></div></div>
+<div class="ttc" id="a00177_html_gae3364a8090e7e1408056e00403dfecab"><div class="ttname"><a href="a00177.html#gae3364a8090e7e1408056e00403dfecab">glm::i32vec4</a></div><div class="ttdeci">highp_i32vec4 i32vec4</div><div class="ttdoc">Default precision 32 bit signed integer vector of 4 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00535">fwd.hpp:535</a></div></div>
+<div class="ttc" id="a00177_html_ga552a6bde5e75984efb0f863278da2e54"><div class="ttname"><a href="a00177.html#ga552a6bde5e75984efb0f863278da2e54">glm::lowp_i8</a></div><div class="ttdeci">detail::int8 lowp_i8</div><div class="ttdoc">Low precision 8 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00132">fwd.hpp:132</a></div></div>
+<div class="ttc" id="a00177_html_ga19d5e0d4d3d6d226c9c6c0f39756f9ad"><div class="ttname"><a href="a00177.html#ga19d5e0d4d3d6d226c9c6c0f39756f9ad">glm::f32vec3</a></div><div class="ttdeci">highp_f32vec3 f32vec3</div><div class="ttdoc">Default single-precision floating-point vector of 3 components. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02405">fwd.hpp:2405</a></div></div>
+<div class="ttc" id="a00177_html_ga10d8bd3c923a5386efcf25a4117fd84f"><div class="ttname"><a href="a00177.html#ga10d8bd3c923a5386efcf25a4117fd84f">glm::fvec1</a></div><div class="ttdeci">highp_f32vec1 fvec1</div><div class="ttdoc">Default single-precision floating-point vector of 1 components. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02327">fwd.hpp:2327</a></div></div>
+<div class="ttc" id="a00177_html_ga2c71c8bd9e2fe7d2e93ca250d8b6157f"><div class="ttname"><a href="a00177.html#ga2c71c8bd9e2fe7d2e93ca250d8b6157f">glm::highp_int32_t</a></div><div class="ttdeci">detail::int32 highp_int32_t</div><div class="ttdoc">32 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00220">fwd.hpp:220</a></div></div>
+<div class="ttc" id="a00177_html_ga7b968f2b86a0442a89c7359171e1d866"><div class="ttname"><a href="a00177.html#ga7b968f2b86a0442a89c7359171e1d866">glm::mediump_int64</a></div><div class="ttdeci">detail::int64 mediump_int64</div><div class="ttdoc">Medium precision 64 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00160">fwd.hpp:160</a></div></div>
+<div class="ttc" id="a00177_html_ga2af9490085ae3bdf36a544e9dd073610"><div class="ttname"><a href="a00177.html#ga2af9490085ae3bdf36a544e9dd073610">glm::mediump_u64</a></div><div class="ttdeci">detail::uint64 mediump_u64</div><div class="ttdoc">Medium precision 64 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00799">fwd.hpp:799</a></div></div>
+<div class="ttc" id="a00177_html_ga3460933f040f59f0fedb29df1e9be71c"><div class="ttname"><a href="a00177.html#ga3460933f040f59f0fedb29df1e9be71c">glm::u64vec3</a></div><div class="ttdeci">highp_u64vec3 u64vec3</div><div class="ttdoc">Default precision 64 bit unsigned integer vector of 3 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l01299">fwd.hpp:1299</a></div></div>
+<div class="ttc" id="a00177_html_gad339e25c32fe6665acf028f26c1b3e22"><div class="ttname"><a href="a00177.html#gad339e25c32fe6665acf028f26c1b3e22">glm::fmat3x3</a></div><div class="ttdeci">highp_f32mat3x3 fmat3x3</div><div class="ttdoc">Default single-precision floating-point 3x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02359">fwd.hpp:2359</a></div></div>
+<div class="ttc" id="a00177_html_ga50e58885aee2cf01bb3ba472c5b1697e"><div class="ttname"><a href="a00177.html#ga50e58885aee2cf01bb3ba472c5b1697e">glm::i8vec4</a></div><div class="ttdeci">highp_i8vec4 i8vec4</div><div class="ttdoc">Default precision 8 bit signed integer vector of 4 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00376">fwd.hpp:376</a></div></div>
+<div class="ttc" id="a00177_html_ga4ef2d77dcab241b1ef83f09edb2f1084"><div class="ttname"><a href="a00177.html#ga4ef2d77dcab241b1ef83f09edb2f1084">glm::fvec3</a></div><div class="ttdeci">highp_f32vec3 fvec3</div><div class="ttdoc">Default single-precision floating-point vector of 3 components. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02335">fwd.hpp:2335</a></div></div>
+<div class="ttc" id="a00177_html_ga1b09f03da7ac43055c68a349d5445083"><div class="ttname"><a href="a00177.html#ga1b09f03da7ac43055c68a349d5445083">glm::lowp_u8</a></div><div class="ttdeci">detail::uint8 lowp_u8</div><div class="ttdoc">Low precision 8 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00737">fwd.hpp:737</a></div></div>
+<div class="ttc" id="a00177_html_ga256b12b650c3f2fb86878fd1c5db8bc3"><div class="ttname"><a href="a00177.html#ga256b12b650c3f2fb86878fd1c5db8bc3">glm::highp_uint32</a></div><div class="ttdeci">detail::uint32 highp_uint32</div><div class="ttdoc">Medium precision 32 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00813">fwd.hpp:813</a></div></div>
+<div class="ttc" id="a00177_html_gab0082a25f19f02d2d0af0fcbe5ead732"><div class="ttname"><a href="a00177.html#gab0082a25f19f02d2d0af0fcbe5ead732">glm::fmat4x2</a></div><div class="ttdeci">highp_f32mat4x2 fmat4x2</div><div class="ttdoc">Default single-precision floating-point 4x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02367">fwd.hpp:2367</a></div></div>
+<div class="ttc" id="a00177_html_ga3963b1050fc65a383ee28e3f827b6e3e"><div class="ttname"><a href="a00177.html#ga3963b1050fc65a383ee28e3f827b6e3e">glm::mediump_uint16_t</a></div><div class="ttdeci">detail::uint16 mediump_uint16_t</div><div class="ttdoc">Medium precision 16 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00775">fwd.hpp:775</a></div></div>
+<div class="ttc" id="a00177_html_ga2171d9dc1fefb1c82e2817f45b622eac"><div class="ttname"><a href="a00177.html#ga2171d9dc1fefb1c82e2817f45b622eac">glm::uint32_t</a></div><div class="ttdeci">detail::uint32 uint32_t</div><div class="ttdoc">32 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00885">fwd.hpp:885</a></div></div>
+<div class="ttc" id="a00177_html_ga9b170dd4a8f38448a2dc93987c7875e9"><div class="ttname"><a href="a00177.html#ga9b170dd4a8f38448a2dc93987c7875e9">glm::mediump_uint64_t</a></div><div class="ttdeci">detail::uint64 mediump_uint64_t</div><div class="ttdoc">Medium precision 64 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00783">fwd.hpp:783</a></div></div>
+<div class="ttc" id="a00177_html_ga40cd3f391c03512f158d10a70062264e"><div class="ttname"><a href="a00177.html#ga40cd3f391c03512f158d10a70062264e">glm::i32vec3</a></div><div class="ttdeci">highp_i32vec3 i32vec3</div><div class="ttdoc">Default precision 32 bit signed integer vector of 3 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00531">fwd.hpp:531</a></div></div>
+<div class="ttc" id="a00177_html_ga0100666c90176eaba80e49357d123c7f"><div class="ttname"><a href="a00177.html#ga0100666c90176eaba80e49357d123c7f">glm::f32mat3x4</a></div><div class="ttdeci">highp_f32mat3x4 f32mat3x4</div><div class="ttdoc">Default single-precision floating-point 3x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02433">fwd.hpp:2433</a></div></div>
+<div class="ttc" id="a00177_html_ga8df669f4e7698dfe0c0354d92578d74f"><div class="ttname"><a href="a00177.html#ga8df669f4e7698dfe0c0354d92578d74f">glm::int32</a></div><div class="ttdeci">detail::int32 int32</div><div class="ttdoc">32 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00113_source.html#l00208">type_int.hpp:208</a></div></div>
+<div class="ttc" id="a00177_html_ga114e005014d910bea07954eee24b7efb"><div class="ttname"><a href="a00177.html#ga114e005014d910bea07954eee24b7efb">glm::u8vec4</a></div><div class="ttdeci">highp_u8vec4 u8vec4</div><div class="ttdoc">Default precision 8 bit unsigned integer vector of 4 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00985">fwd.hpp:985</a></div></div>
+<div class="ttc" id="a00177_html_ga73c6abb280a45feeff60f9accaee91f3"><div class="ttname"><a href="a00177.html#ga73c6abb280a45feeff60f9accaee91f3">glm::highp_int64_t</a></div><div class="ttdeci">detail::int64 highp_int64_t</div><div class="ttdoc">High precision 64 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00224">fwd.hpp:224</a></div></div>
+<div class="ttc" id="a00177_html_ga5b4a3e499ee165efc0dc05add9c48235"><div class="ttname"><a href="a00177.html#ga5b4a3e499ee165efc0dc05add9c48235">glm::i64vec1</a></div><div class="ttdeci">highp_i64vec1 i64vec1</div><div class="ttdoc">Default precision 64 bit signed integer scalar type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00682">fwd.hpp:682</a></div></div>
+<div class="ttc" id="a00177_html_ga2885a6c89916911e418c06bb76b9bdbb"><div class="ttname"><a href="a00177.html#ga2885a6c89916911e418c06bb76b9bdbb">glm::mediump_uint16</a></div><div class="ttdeci">detail::uint16 mediump_uint16</div><div class="ttdoc">Medium precision 16 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00759">fwd.hpp:759</a></div></div>
+<div class="ttc" id="a00177_html_gaf3f312156984c365e9f65620354da70b"><div class="ttname"><a href="a00177.html#gaf3f312156984c365e9f65620354da70b">glm::u64</a></div><div class="ttdeci">detail::uint64 u64</div><div class="ttdoc">64 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00906">fwd.hpp:906</a></div></div>
+<div class="ttc" id="a00177_html_gaf645b1a60203b39c0207baff5e3d8c3c"><div class="ttname"><a href="a00177.html#gaf645b1a60203b39c0207baff5e3d8c3c">glm::lowp_int64</a></div><div class="ttdeci">detail::int64 lowp_int64</div><div class="ttdoc">Low precision 64 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00112">fwd.hpp:112</a></div></div>
+<div class="ttc" id="a00177_html_ga8b2cd8d31eb345b2d641d9261c38db1a"><div class="ttname"><a href="a00177.html#ga8b2cd8d31eb345b2d641d9261c38db1a">glm::lowp_int16_t</a></div><div class="ttdeci">detail::int16 lowp_int16_t</div><div class="ttdoc">Low precision 16 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00120">fwd.hpp:120</a></div></div>
+<div class="ttc" id="a00177_html_gadff3608baa4b5bd3ed28f95c1c2c345d"><div class="ttname"><a href="a00177.html#gadff3608baa4b5bd3ed28f95c1c2c345d">glm::mediump_int16</a></div><div class="ttdeci">detail::int16 mediump_int16</div><div class="ttdoc">Medium precision 16 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00152">fwd.hpp:152</a></div></div>
+<div class="ttc" id="a00177_html_gae8f5e3e964ca2ae240adc2c0d74adede"><div class="ttname"><a href="a00177.html#gae8f5e3e964ca2ae240adc2c0d74adede">glm::int16_t</a></div><div class="ttdeci">detail::int16 int16_t</div><div class="ttdoc">16 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00272">fwd.hpp:272</a></div></div>
+<div class="ttc" id="a00177_html_ga322a7d7d2c2c68994dc872a33de63c61"><div class="ttname"><a href="a00177.html#ga322a7d7d2c2c68994dc872a33de63c61">glm::int64_t</a></div><div class="ttdeci">detail::int64 int64_t</div><div class="ttdoc">64 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00280">fwd.hpp:280</a></div></div>
+<div class="ttc" id="a00177_html_ga96faea43ac5f875d2d3ffbf8d213e3eb"><div class="ttname"><a href="a00177.html#ga96faea43ac5f875d2d3ffbf8d213e3eb">glm::i32</a></div><div class="ttdeci">detail::int32 i32</div><div class="ttdoc">32 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00293">fwd.hpp:293</a></div></div>
+<div class="ttc" id="a00177_html_gaf1b735b4b1145174f4e4167d13778f9b"><div class="ttname"><a href="a00177.html#gaf1b735b4b1145174f4e4167d13778f9b">glm::lowp_uint32_t</a></div><div class="ttdeci">detail::uint32 lowp_uint32_t</div><div class="ttdoc">Low precision 32 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00728">fwd.hpp:728</a></div></div>
+<div class="ttc" id="a00177_html_ga5fde0fa4a3852a9dd5d637a92ee74718"><div class="ttname"><a href="a00177.html#ga5fde0fa4a3852a9dd5d637a92ee74718">glm::highp_int16</a></div><div class="ttdeci">detail::int16 highp_int16</div><div class="ttdoc">High precision 16 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00200">fwd.hpp:200</a></div></div>
+<div class="ttc" id="a00177_html_ga91f91f411080c37730856ff5887f5bcf"><div class="ttname"><a href="a00177.html#ga91f91f411080c37730856ff5887f5bcf">glm::uint16_t</a></div><div class="ttdeci">detail::uint16 uint16_t</div><div class="ttdoc">16 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00881">fwd.hpp:881</a></div></div>
+<div class="ttc" id="a00177_html_ga6966c0cb4673928c9c9da2e91006d2c0"><div class="ttname"><a href="a00177.html#ga6966c0cb4673928c9c9da2e91006d2c0">glm::f32quat</a></div><div class="ttdeci">highp_f32quat f32quat</div><div class="ttdoc">Default single-precision floating-point quaternion. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02461">fwd.hpp:2461</a></div></div>
+<div class="ttc" id="a00177_html_ga68894201dd511792a7af6cff7b5adf71"><div class="ttname"><a href="a00177.html#ga68894201dd511792a7af6cff7b5adf71">glm::f64mat3</a></div><div class="ttdeci">f64mat3x3 f64mat3</div><div class="ttdoc">Default double-precision floating-point 3x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02559">fwd.hpp:2559</a></div></div>
+<div class="ttc" id="a00177_html_gafaad77b464b5a35626c31205ac6780e3"><div class="ttname"><a href="a00177.html#gafaad77b464b5a35626c31205ac6780e3">glm::f64vec2</a></div><div class="ttdeci">highp_f64vec2 f64vec2</div><div class="ttdoc">Default double-precision floating-point vector of 2 components. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02507">fwd.hpp:2507</a></div></div>
+<div class="ttc" id="a00177_html_gadb997e409103d4da18abd837e636a496"><div class="ttname"><a href="a00177.html#gadb997e409103d4da18abd837e636a496">glm::i64</a></div><div class="ttdeci">detail::int64 i64</div><div class="ttdoc">64 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00297">fwd.hpp:297</a></div></div>
+<div class="ttc" id="a00177_html_gafb18822e2eac88fa861a76cefd25d550"><div class="ttname"><a href="a00177.html#gafb18822e2eac88fa861a76cefd25d550">glm::f64mat2x4</a></div><div class="ttdeci">highp_f64mat2x4 f64mat2x4</div><div class="ttdoc">Default double-precision floating-point 2x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02527">fwd.hpp:2527</a></div></div>
+<div class="ttc" id="a00177_html_gae1a5081181c96cc37ce9418f6e856cb6"><div class="ttname"><a href="a00177.html#gae1a5081181c96cc37ce9418f6e856cb6">glm::f64mat3x3</a></div><div class="ttdeci">highp_f64mat3x3 f64mat3x3</div><div class="ttdoc">Default double-precision floating-point 3x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02535">fwd.hpp:2535</a></div></div>
+<div class="ttc" id="a00177_html_gacaea06d0a79ef3172e887a7a6ba434ff"><div class="ttname"><a href="a00177.html#gacaea06d0a79ef3172e887a7a6ba434ff">glm::highp_int16_t</a></div><div class="ttdeci">detail::int16 highp_int16_t</div><div class="ttdoc">High precision 16 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00216">fwd.hpp:216</a></div></div>
+<div class="ttc" id="a00177_html_ga9f20af6e8eca2abdcde08408948cc1ca"><div class="ttname"><a href="a00177.html#ga9f20af6e8eca2abdcde08408948cc1ca">glm::fmat3x2</a></div><div class="ttdeci">highp_f32mat3x2 fmat3x2</div><div class="ttdoc">Default single-precision floating-point 3x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02355">fwd.hpp:2355</a></div></div>
+<div class="ttc" id="a00177_html_ga92e0c191e5cc326255284d08be3af7c5"><div class="ttname"><a href="a00177.html#ga92e0c191e5cc326255284d08be3af7c5">glm::u8vec1</a></div><div class="ttdeci">highp_u8vec1 u8vec1</div><div class="ttdoc">Default precision 8 bit unsigned integer scalar type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00973">fwd.hpp:973</a></div></div>
+<div class="ttc" id="a00177_html_gabe6a542dd6c1d5ffd847f1b9b4c9c9b7"><div class="ttname"><a href="a00177.html#gabe6a542dd6c1d5ffd847f1b9b4c9c9b7">glm::f32</a></div><div class="ttdeci">highp_float32_t f32</div><div class="ttdoc">Default 32 bit single-precision floating-point scalar. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l01505">fwd.hpp:1505</a></div></div>
+<div class="ttc" id="a00177_html_ga1085c50dd8fbeb5e7e609b1c127492a5"><div class="ttname"><a href="a00177.html#ga1085c50dd8fbeb5e7e609b1c127492a5">glm::highp_int8_t</a></div><div class="ttdeci">detail::int8 highp_int8_t</div><div class="ttdoc">High precision 8 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00212">fwd.hpp:212</a></div></div>
+<div class="ttc" id="a00177_html_gaf4377997b299a287f7ab3358c9bd3e4c"><div class="ttname"><a href="a00177.html#gaf4377997b299a287f7ab3358c9bd3e4c">glm::f32mat3</a></div><div class="ttdeci">f32mat3x3 f32mat3</div><div class="ttdoc">Default single-precision floating-point 3x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02453">fwd.hpp:2453</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00039.html b/src/third_party/glm/doc/api/a00039.html
new file mode 100644
index 0000000..35a7e38
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00039.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: geometric.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">geometric.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00039_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+
+<p>Definition in file <a class="el" href="a00039_source.html">geometric.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00039_source.html b/src/third_party/glm/doc/api/a00039_source.html
new file mode 100644
index 0000000..b52d634
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00039_source.html
@@ -0,0 +1,65 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: geometric.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">geometric.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00039.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include "<a class="code" href="a00031.html">detail/func_geometric.hpp</a>"</span></div>
+<div class="ttc" id="a00031_html"><div class="ttname"><a href="a00031.html">func_geometric.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00040.html b/src/third_party/glm/doc/api/a00040.html
new file mode 100644
index 0000000..af523f1
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00040.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: glm.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">glm.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00040_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+
+<p>Definition in file <a class="el" href="a00040_source.html">glm.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00040_source.html b/src/third_party/glm/doc/api/a00040_source.html
new file mode 100644
index 0000000..ce7af3f
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00040_source.html
@@ -0,0 +1,119 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: glm.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">glm.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00040.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="preprocessor">#include "<a class="code" href="a00002.html">detail/_fixes.hpp</a>"</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="preprocessor">#include <cmath></span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="preprocessor">#include <climits></span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="preprocessor">#include <cfloat></span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="preprocessor">#include <limits></span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="preprocessor">#include <cassert></span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="preprocessor">#include "<a class="code" href="a00038.html">fwd.hpp</a>"</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_MESSAGE_CORE_INCLUDED_DISPLAYED)</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="preprocessor"># define GLM_MESSAGE_CORE_INCLUDED_DISPLAYED</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="preprocessor"># pragma message("GLM: Core library included")</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="preprocessor">#endif//GLM_MESSAGES</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="preprocessor">#include "<a class="code" href="a00134.html">vec2.hpp</a>"</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="preprocessor">#include "<a class="code" href="a00135.html">vec3.hpp</a>"</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="preprocessor">#include "<a class="code" href="a00136.html">vec4.hpp</a>"</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="preprocessor">#include "<a class="code" href="a00051.html">mat2x2.hpp</a>"</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="preprocessor">#include "<a class="code" href="a00052.html">mat2x3.hpp</a>"</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="preprocessor">#include "<a class="code" href="a00053.html">mat2x4.hpp</a>"</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="preprocessor">#include "<a class="code" href="a00054.html">mat3x2.hpp</a>"</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="preprocessor">#include "<a class="code" href="a00055.html">mat3x3.hpp</a>"</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="preprocessor">#include "<a class="code" href="a00056.html">mat3x4.hpp</a>"</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="preprocessor">#include "<a class="code" href="a00057.html">mat4x2.hpp</a>"</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="preprocessor">#include "mat4x3.hpp"</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="preprocessor">#include "<a class="code" href="a00059.html">mat4x4.hpp</a>"</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="preprocessor">#include "<a class="code" href="a00107.html">trigonometric.hpp</a>"</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="preprocessor">#include "<a class="code" href="a00022.html">exponential.hpp</a>"</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="preprocessor">#include "<a class="code" href="a00014.html">common.hpp</a>"</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="preprocessor">#include "<a class="code" href="a00081.html">packing.hpp</a>"</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="preprocessor">#include "<a class="code" href="a00039.html">geometric.hpp</a>"</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="preprocessor">#include "<a class="code" href="a00060.html">matrix.hpp</a>"</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="preprocessor">#include "<a class="code" href="a00139.html">vector_relational.hpp</a>"</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="preprocessor">#include "<a class="code" href="a00046.html">integer.hpp</a>"</span></div>
+<div class="ttc" id="a00022_html"><div class="ttname"><a href="a00022.html">exponential.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00039_html"><div class="ttname"><a href="a00039.html">geometric.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00139_html"><div class="ttname"><a href="a00139.html">vector_relational.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00056_html"><div class="ttname"><a href="a00056.html">mat3x4.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00059_html"><div class="ttname"><a href="a00059.html">mat4x4.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00135_html"><div class="ttname"><a href="a00135.html">vec3.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00055_html"><div class="ttname"><a href="a00055.html">mat3x3.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00038_html"><div class="ttname"><a href="a00038.html">fwd.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00014_html"><div class="ttname"><a href="a00014.html">common.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00081_html"><div class="ttname"><a href="a00081.html">packing.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00046_html"><div class="ttname"><a href="a00046.html">integer.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00134_html"><div class="ttname"><a href="a00134.html">vec2.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00054_html"><div class="ttname"><a href="a00054.html">mat3x2.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00052_html"><div class="ttname"><a href="a00052.html">mat2x3.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00057_html"><div class="ttname"><a href="a00057.html">mat4x2.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00060_html"><div class="ttname"><a href="a00060.html">matrix.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00053_html"><div class="ttname"><a href="a00053.html">mat2x4.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00051_html"><div class="ttname"><a href="a00051.html">mat2x2.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00002_html"><div class="ttname"><a href="a00002.html">_fixes.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00136_html"><div class="ttname"><a href="a00136.html">vec4.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00107_html"><div class="ttname"><a href="a00107.html">trigonometric.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00041.html b/src/third_party/glm/doc/api/a00041.html
new file mode 100644
index 0000000..c0c311b
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00041.html
@@ -0,0 +1,81 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: gradient_paint.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">gradient_paint.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00041_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gacde26d5e0c4a1856467bded9dfad9040"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gacde26d5e0c4a1856467bded9dfad9040"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00196.html#gacde26d5e0c4a1856467bded9dfad9040">linearGradient</a> (tvec2< T, P > const &Point0, tvec2< T, P > const &Point1, tvec2< T, P > const &Position)</td></tr>
+<tr class="separator:gacde26d5e0c4a1856467bded9dfad9040"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga166d43d567a4cf150579a92f69b0dc9f"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga166d43d567a4cf150579a92f69b0dc9f"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00196.html#ga166d43d567a4cf150579a92f69b0dc9f">radialGradient</a> (tvec2< T, P > const &Center, T const &Radius, tvec2< T, P > const &Focal, tvec2< T, P > const &Position)</td></tr>
+<tr class="separator:ga166d43d567a4cf150579a92f69b0dc9f"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00196.html">GLM_GTX_gradient_paint</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd>
+<dd>
+<a class="el" href="a00215.html" title="Integer exponentiation of power functions. ">GLM_GTX_optimum_pow</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00041_source.html">gradient_paint.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00041_source.html b/src/third_party/glm/doc/api/a00041_source.html
new file mode 100644
index 0000000..9f26eda
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00041_source.html
@@ -0,0 +1,93 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: gradient_paint.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">gradient_paint.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00041.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include "../glm.hpp"</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "../gtx/optimum_pow.hpp"</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_gradient_paint extension included")</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> {</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  GLM_FUNC_DECL T <a class="code" href="a00196.html#ga166d43d567a4cf150579a92f69b0dc9f">radialGradient</a>(</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  tvec2<T, P> <span class="keyword">const</span> & Center,</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  T <span class="keyword">const</span> & Radius,</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  tvec2<T, P> <span class="keyword">const</span> & Focal,</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  tvec2<T, P> <span class="keyword">const</span> & Position);</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  GLM_FUNC_DECL T <a class="code" href="a00196.html#gacde26d5e0c4a1856467bded9dfad9040">linearGradient</a>(</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  tvec2<T, P> <span class="keyword">const</span> & Point0,</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  tvec2<T, P> <span class="keyword">const</span> & Point1,</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  tvec2<T, P> <span class="keyword">const</span> & Position);</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> }<span class="comment">// namespace glm</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor">#include "gradient_paint.inl"</span></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00196_html_gacde26d5e0c4a1856467bded9dfad9040"><div class="ttname"><a href="a00196.html#gacde26d5e0c4a1856467bded9dfad9040">glm::linearGradient</a></div><div class="ttdeci">GLM_FUNC_DECL T linearGradient(tvec2< T, P > const &Point0, tvec2< T, P > const &Point1, tvec2< T, P > const &Position)</div><div class="ttdoc">Return a color from a linear gradient. </div></div>
+<div class="ttc" id="a00196_html_ga166d43d567a4cf150579a92f69b0dc9f"><div class="ttname"><a href="a00196.html#ga166d43d567a4cf150579a92f69b0dc9f">glm::radialGradient</a></div><div class="ttdeci">GLM_FUNC_DECL T radialGradient(tvec2< T, P > const &Center, T const &Radius, tvec2< T, P > const &Focal, tvec2< T, P > const &Position)</div><div class="ttdoc">Return a color from a radial gradient. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00042.html b/src/third_party/glm/doc/api/a00042.html
new file mode 100644
index 0000000..91e863d
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00042.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: handed_coordinate_space.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">handed_coordinate_space.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00042_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga7425e0ebfe6a56919900a072ae1f8017"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga7425e0ebfe6a56919900a072ae1f8017"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00197.html#ga7425e0ebfe6a56919900a072ae1f8017">leftHanded</a> (tvec3< T, P > const &tangent, tvec3< T, P > const &binormal, tvec3< T, P > const &normal)</td></tr>
+<tr class="separator:ga7425e0ebfe6a56919900a072ae1f8017"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga17cd83888de8755c0435c589fafd3603"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga17cd83888de8755c0435c589fafd3603"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00197.html#ga17cd83888de8755c0435c589fafd3603">rightHanded</a> (tvec3< T, P > const &tangent, tvec3< T, P > const &binormal, tvec3< T, P > const &normal)</td></tr>
+<tr class="separator:ga17cd83888de8755c0435c589fafd3603"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00197.html">GLM_GTX_handed_coordinate_space</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00042_source.html">handed_coordinate_space.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00042_source.html b/src/third_party/glm/doc/api/a00042_source.html
new file mode 100644
index 0000000..8ec3771
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00042_source.html
@@ -0,0 +1,91 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: handed_coordinate_space.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">handed_coordinate_space.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00042.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include "../glm.hpp"</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_handed_coordinate_space extension included")</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> {</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> <a class="code" href="a00197.html#ga17cd83888de8755c0435c589fafd3603">rightHanded</a>(</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  tvec3<T, P> <span class="keyword">const</span> & tangent,</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  tvec3<T, P> <span class="keyword">const</span> & binormal,</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  tvec3<T, P> <span class="keyword">const</span> & normal);</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> <a class="code" href="a00197.html#ga7425e0ebfe6a56919900a072ae1f8017">leftHanded</a>(</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  tvec3<T, P> <span class="keyword">const</span> & tangent,</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  tvec3<T, P> <span class="keyword">const</span> & binormal,</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  tvec3<T, P> <span class="keyword">const</span> & normal);</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> }<span class="comment">// namespace glm</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="preprocessor">#include "handed_coordinate_space.inl"</span></div>
+<div class="ttc" id="a00197_html_ga7425e0ebfe6a56919900a072ae1f8017"><div class="ttname"><a href="a00197.html#ga7425e0ebfe6a56919900a072ae1f8017">glm::leftHanded</a></div><div class="ttdeci">GLM_FUNC_DECL bool leftHanded(tvec3< T, P > const &tangent, tvec3< T, P > const &binormal, tvec3< T, P > const &normal)</div><div class="ttdoc">Return if a trihedron left handed or not. </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00197_html_ga17cd83888de8755c0435c589fafd3603"><div class="ttname"><a href="a00197.html#ga17cd83888de8755c0435c589fafd3603">glm::rightHanded</a></div><div class="ttdeci">GLM_FUNC_DECL bool rightHanded(tvec3< T, P > const &tangent, tvec3< T, P > const &binormal, tvec3< T, P > const &normal)</div><div class="ttdoc">Return if a trihedron right handed or not. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00043.html b/src/third_party/glm/doc/api/a00043.html
new file mode 100644
index 0000000..a085f1b
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00043.html
@@ -0,0 +1,67 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: hash.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">hash.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00043_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00198.html">GLM_GTX_hash</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00043_source.html">hash.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00043_source.html b/src/third_party/glm/doc/api/a00043_source.html
new file mode 100644
index 0000000..740f658
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00043_source.html
@@ -0,0 +1,185 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: hash.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">hash.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00043.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#include <functional></span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "../vec2.hpp"</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "../vec3.hpp"</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include "../vec4.hpp"</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "../gtc/vec1.hpp"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "../gtc/quaternion.hpp"</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "../gtx/dual_quaternion.hpp"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "../mat2x2.hpp"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "../mat2x3.hpp"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "../mat2x4.hpp"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "../mat3x2.hpp"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "../mat3x3.hpp"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include "../mat3x4.hpp"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include "../mat4x2.hpp"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include "../mat4x3.hpp"</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#include "../mat4x4.hpp"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#if !GLM_HAS_CXX11_STL</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor"># error "GLM_GTX_hash requires C++11 standard library support"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keyword">namespace </span><a class="code" href="a00145.html">std</a></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> {</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, glm::precision P></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keyword">struct </span>hash<<a class="code" href="a00141.html">glm</a>::tvec1<T,P> ></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  {</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  GLM_FUNC_DECL <span class="keywordtype">size_t</span> operator()(glm::tvec1<T, P> <span class="keyword">const</span> & v) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  };</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, glm::precision P></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keyword">struct </span>hash<<a class="code" href="a00141.html">glm</a>::tvec2<T,P> ></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  {</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  GLM_FUNC_DECL <span class="keywordtype">size_t</span> operator()(glm::tvec2<T, P> <span class="keyword">const</span> & v) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  };</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, glm::precision P></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keyword">struct </span>hash<<a class="code" href="a00141.html">glm</a>::tvec3<T,P> ></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  {</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  GLM_FUNC_DECL <span class="keywordtype">size_t</span> operator()(glm::tvec3<T, P> <span class="keyword">const</span> & v) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  };</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, glm::precision P></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keyword">struct </span>hash<<a class="code" href="a00141.html">glm</a>::tvec4<T,P> ></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  {</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  GLM_FUNC_DECL <span class="keywordtype">size_t</span> operator()(glm::tvec4<T, P> <span class="keyword">const</span> & v) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  };</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, glm::precision P></div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keyword">struct </span>hash<<a class="code" href="a00141.html">glm</a>::tquat<T,P>></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  {</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  GLM_FUNC_DECL <span class="keywordtype">size_t</span> operator()(glm::tquat<T, P> <span class="keyword">const</span> & q) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  };</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, glm::precision P></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keyword">struct </span>hash<<a class="code" href="a00141.html">glm</a>::tdualquat<T,P> ></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  {</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  GLM_FUNC_DECL <span class="keywordtype">size_t</span> operator()(glm::tdualquat<T,P> <span class="keyword">const</span> & q) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  };</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, glm::precision P></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keyword">struct </span>hash<<a class="code" href="a00141.html">glm</a>::tmat2x2<T,P> ></div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  {</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  GLM_FUNC_DECL <span class="keywordtype">size_t</span> operator()(glm::tmat2x2<T,P> <span class="keyword">const</span> & m) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  };</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, glm::precision P></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="keyword">struct </span>hash<<a class="code" href="a00141.html">glm</a>::tmat2x3<T,P> ></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  {</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  GLM_FUNC_DECL <span class="keywordtype">size_t</span> operator()(glm::tmat2x3<T,P> <span class="keyword">const</span> & m) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  };</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, glm::precision P></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keyword">struct </span>hash<<a class="code" href="a00141.html">glm</a>::tmat2x4<T,P> ></div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  {</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  GLM_FUNC_DECL <span class="keywordtype">size_t</span> operator()(glm::tmat2x4<T,P> <span class="keyword">const</span> & m) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  };</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, glm::precision P></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="keyword">struct </span>hash<<a class="code" href="a00141.html">glm</a>::tmat3x2<T,P> ></div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  {</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  GLM_FUNC_DECL <span class="keywordtype">size_t</span> operator()(glm::tmat3x2<T,P> <span class="keyword">const</span> & m) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  };</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, glm::precision P></div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keyword">struct </span>hash<<a class="code" href="a00141.html">glm</a>::tmat3x3<T,P> ></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  {</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  GLM_FUNC_DECL <span class="keywordtype">size_t</span> operator()(glm::tmat3x3<T,P> <span class="keyword">const</span> & m) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  };</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, glm::precision P></div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keyword">struct </span>hash<<a class="code" href="a00141.html">glm</a>::tmat3x4<T,P> ></div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  {</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  GLM_FUNC_DECL <span class="keywordtype">size_t</span> operator()(glm::tmat3x4<T,P> <span class="keyword">const</span> & m) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  };</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, glm::precision P></div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="keyword">struct </span>hash<<a class="code" href="a00141.html">glm</a>::tmat4x2<T,P> ></div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  {</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  GLM_FUNC_DECL <span class="keywordtype">size_t</span> operator()(glm::tmat4x2<T,P> <span class="keyword">const</span> & m) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  };</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  </div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, glm::precision P></div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keyword">struct </span>hash<<a class="code" href="a00141.html">glm</a>::tmat4x3<T,P> ></div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  {</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  GLM_FUNC_DECL <span class="keywordtype">size_t</span> operator()(glm::tmat4x3<T,P> <span class="keyword">const</span> & m) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  };</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, glm::precision P></div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keyword">struct </span>hash<<a class="code" href="a00141.html">glm</a>::tmat4x4<T,P> ></div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  {</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  GLM_FUNC_DECL <span class="keywordtype">size_t</span> operator()(glm::tmat4x4<T,P> <span class="keyword">const</span> & m) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  };</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> } <span class="comment">// namespace std</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="preprocessor">#include "hash.inl"</span></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00145_html"><div class="ttname"><a href="a00145.html">std</a></div><div class="ttdef"><b>Definition:</b> <a href="a00043_source.html#l00041">hash.hpp:41</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00044.html b/src/third_party/glm/doc/api/a00044.html
new file mode 100644
index 0000000..c336ff6
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00044.html
@@ -0,0 +1,93 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: integer.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_9440d7c11b99dcd7e5d369c7cf9802fe.html">gtc</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">gtc/integer.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00044_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga0a42ffb863cc980e91f98d2f5766de20"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga0a42ffb863cc980e91f98d2f5766de20"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< int, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00165.html#ga0a42ffb863cc980e91f98d2f5766de20">iround</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:ga0a42ffb863cc980e91f98d2f5766de20"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9bd682e74bfacb005c735305207ec417"><td class="memTemplParams" colspan="2">template<typename genIUType > </td></tr>
+<tr class="memitem:ga9bd682e74bfacb005c735305207ec417"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genIUType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00165.html#ga9bd682e74bfacb005c735305207ec417">log2</a> (genIUType x)</td></tr>
+<tr class="separator:ga9bd682e74bfacb005c735305207ec417"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga75c6fd2a143fc44e5f7b871abad539e0"><td class="memTemplParams" colspan="2">template<typename genIUType > </td></tr>
+<tr class="memitem:ga75c6fd2a143fc44e5f7b871abad539e0"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genIUType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00165.html#ga75c6fd2a143fc44e5f7b871abad539e0">mod</a> (genIUType x, genIUType y)</td></tr>
+<tr class="separator:ga75c6fd2a143fc44e5f7b871abad539e0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac76ae7d82ff22526bcf6d6a1b51af6c3"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gac76ae7d82ff22526bcf6d6a1b51af6c3"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00165.html#gac76ae7d82ff22526bcf6d6a1b51af6c3">mod</a> (vecType< T, P > const &x, T y)</td></tr>
+<tr class="separator:gac76ae7d82ff22526bcf6d6a1b51af6c3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf5ae5330f6b30b4a35fb95f9a73d6134"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gaf5ae5330f6b30b4a35fb95f9a73d6134"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00165.html#gaf5ae5330f6b30b4a35fb95f9a73d6134">mod</a> (vecType< T, P > const &x, vecType< T, P > const &y)</td></tr>
+<tr class="separator:gaf5ae5330f6b30b4a35fb95f9a73d6134"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab61b8546aafdf58f119eb892b212607c"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gab61b8546aafdf58f119eb892b212607c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< uint, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00165.html#gab61b8546aafdf58f119eb892b212607c">uround</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:gab61b8546aafdf58f119eb892b212607c"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00165.html">GLM_GTC_integer</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd>
+<dd>
+<a class="el" href="a00165.html" title="Allow to perform bit operations on integer values. ">GLM_GTC_integer</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00044_source.html">gtc/integer.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00044_source.html b/src/third_party/glm/doc/api/a00044_source.html
new file mode 100644
index 0000000..7b6e173
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00044_source.html
@@ -0,0 +1,104 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: integer.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_9440d7c11b99dcd7e5d369c7cf9802fe.html">gtc</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">gtc/integer.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00044.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// Dependencies</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "../detail/setup.hpp"</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "../detail/precision.hpp"</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include "../detail/func_common.hpp"</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "../detail/func_integer.hpp"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "../detail/func_exponential.hpp"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <limits></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor"># pragma message("GLM: GLM_GTC_integer extension included")</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> {</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genIUType></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  GLM_FUNC_DECL genIUType <a class="code" href="a00165.html#ga9bd682e74bfacb005c735305207ec417">log2</a>(genIUType x);</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genIUType></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  GLM_FUNC_DECL genIUType <a class="code" href="a00165.html#ga75c6fd2a143fc44e5f7b871abad539e0">mod</a>(genIUType x, genIUType y);</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00165.html#ga75c6fd2a143fc44e5f7b871abad539e0">mod</a>(vecType<T, P> <span class="keyword">const</span> & x, T y);</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00165.html#ga75c6fd2a143fc44e5f7b871abad539e0">mod</a>(vecType<T, P> <span class="keyword">const</span> & x, vecType<T, P> <span class="keyword">const</span> & y);</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  GLM_FUNC_DECL vecType<int, P> <a class="code" href="a00165.html#ga0a42ffb863cc980e91f98d2f5766de20">iround</a>(vecType<T, P> <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  GLM_FUNC_DECL vecType<uint, P> <a class="code" href="a00165.html#gab61b8546aafdf58f119eb892b212607c">uround</a>(vecType<T, P> <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> } <span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="preprocessor">#include "integer.inl"</span></div>
+<div class="ttc" id="a00165_html_gab61b8546aafdf58f119eb892b212607c"><div class="ttname"><a href="a00165.html#gab61b8546aafdf58f119eb892b212607c">glm::uround</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< uint, P > uround(vecType< T, P > const &x)</div><div class="ttdoc">Returns a value equal to the nearest integer to x. </div></div>
+<div class="ttc" id="a00165_html_ga9bd682e74bfacb005c735305207ec417"><div class="ttname"><a href="a00165.html#ga9bd682e74bfacb005c735305207ec417">glm::log2</a></div><div class="ttdeci">GLM_FUNC_DECL genIUType log2(genIUType x)</div><div class="ttdoc">Returns the log2 of x for integer values. </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00165_html_ga75c6fd2a143fc44e5f7b871abad539e0"><div class="ttname"><a href="a00165.html#ga75c6fd2a143fc44e5f7b871abad539e0">glm::mod</a></div><div class="ttdeci">GLM_FUNC_DECL genIUType mod(genIUType x, genIUType y)</div><div class="ttdoc">Modulus. </div></div>
+<div class="ttc" id="a00165_html_ga0a42ffb863cc980e91f98d2f5766de20"><div class="ttname"><a href="a00165.html#ga0a42ffb863cc980e91f98d2f5766de20">glm::iround</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< int, P > iround(vecType< T, P > const &x)</div><div class="ttdoc">Returns a value equal to the nearest integer to x. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00045.html b/src/third_party/glm/doc/api/a00045.html
new file mode 100644
index 0000000..6e62188
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00045.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: integer.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#typedef-members">Typedefs</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">gtx/integer.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00045_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:gada7e83fdfe943aba4f1d5bf80cb66f40"><td class="memItemLeft" align="right" valign="top">typedef signed int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#gada7e83fdfe943aba4f1d5bf80cb66f40">sint</a></td></tr>
+<tr class="separator:gada7e83fdfe943aba4f1d5bf80cb66f40"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga8cbd3120905f398ec321b5d1836e08fb"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga8cbd3120905f398ec321b5d1836e08fb"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00199.html#ga8cbd3120905f398ec321b5d1836e08fb">factorial</a> (genType const &x)</td></tr>
+<tr class="separator:ga8cbd3120905f398ec321b5d1836e08fb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7011b4e1c1e1ed492149b028feacc00e"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#ga7011b4e1c1e1ed492149b028feacc00e">floor_log2</a> (unsigned int x)</td></tr>
+<tr class="separator:ga7011b4e1c1e1ed492149b028feacc00e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaabfbb41531ab7ad8d06fc176edfba785"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#gaabfbb41531ab7ad8d06fc176edfba785">mod</a> (int x, int y)</td></tr>
+<tr class="separator:gaabfbb41531ab7ad8d06fc176edfba785"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga63fc8d63e7da1706439233b386ba8b6f"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint </td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#ga63fc8d63e7da1706439233b386ba8b6f">mod</a> (uint x, uint y)</td></tr>
+<tr class="separator:ga63fc8d63e7da1706439233b386ba8b6f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga78dff8bdb361bf0061194c93e003d189"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint </td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#ga78dff8bdb361bf0061194c93e003d189">nlz</a> (uint x)</td></tr>
+<tr class="separator:ga78dff8bdb361bf0061194c93e003d189"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga89c591b970882714bd1e89a4e2f249f1"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#ga89c591b970882714bd1e89a4e2f249f1">pow</a> (int x, int y)</td></tr>
+<tr class="separator:ga89c591b970882714bd1e89a4e2f249f1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga998e5ee915d3769255519e2fbaa2bbf0"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint </td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#ga998e5ee915d3769255519e2fbaa2bbf0">pow</a> (uint x, uint y)</td></tr>
+<tr class="separator:ga998e5ee915d3769255519e2fbaa2bbf0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7ce36693a75879ccd9bb10167cfa722d"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#ga7ce36693a75879ccd9bb10167cfa722d">sqrt</a> (int x)</td></tr>
+<tr class="separator:ga7ce36693a75879ccd9bb10167cfa722d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1975d318978d6dacf78b6444fa5ed7bc"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint </td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#ga1975d318978d6dacf78b6444fa5ed7bc">sqrt</a> (uint x)</td></tr>
+<tr class="separator:ga1975d318978d6dacf78b6444fa5ed7bc"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00199.html">GLM_GTX_integer</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00045_source.html">gtx/integer.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00045_source.html b/src/third_party/glm/doc/api/a00045_source.html
new file mode 100644
index 0000000..4c7c4b4
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00045_source.html
@@ -0,0 +1,107 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: integer.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">gtx/integer.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00045.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include "../glm.hpp"</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "../gtc/integer.hpp"</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_integer extension included")</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> {</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  GLM_FUNC_DECL <span class="keywordtype">int</span> <a class="code" href="a00199.html#ga998e5ee915d3769255519e2fbaa2bbf0">pow</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y);</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  GLM_FUNC_DECL <span class="keywordtype">int</span> <a class="code" href="a00199.html#ga1975d318978d6dacf78b6444fa5ed7bc">sqrt</a>(<span class="keywordtype">int</span> x);</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  GLM_FUNC_DECL <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="a00199.html#ga7011b4e1c1e1ed492149b028feacc00e">floor_log2</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> x);</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  GLM_FUNC_DECL <span class="keywordtype">int</span> <a class="code" href="a00199.html#ga63fc8d63e7da1706439233b386ba8b6f">mod</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y);</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType> </div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  GLM_FUNC_DECL genType <a class="code" href="a00199.html#ga8cbd3120905f398ec321b5d1836e08fb">factorial</a>(genType <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="a00199.html#gada7e83fdfe943aba4f1d5bf80cb66f40"> 51</a></span>  <span class="keyword">typedef</span> <span class="keywordtype">signed</span> <span class="keywordtype">int</span> <a class="code" href="a00199.html#gada7e83fdfe943aba4f1d5bf80cb66f40">sint</a>;</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  GLM_FUNC_DECL <a class="code" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a> <a class="code" href="a00199.html#ga998e5ee915d3769255519e2fbaa2bbf0">pow</a>(<a class="code" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a> x, <a class="code" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a> y);</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  GLM_FUNC_DECL <a class="code" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a> <a class="code" href="a00199.html#ga1975d318978d6dacf78b6444fa5ed7bc">sqrt</a>(<a class="code" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a> x);</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  GLM_FUNC_DECL <a class="code" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a> <a class="code" href="a00199.html#ga63fc8d63e7da1706439233b386ba8b6f">mod</a>(<a class="code" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a> x, <a class="code" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a> y);</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  GLM_FUNC_DECL <a class="code" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a> <a class="code" href="a00199.html#ga78dff8bdb361bf0061194c93e003d189">nlz</a>(<a class="code" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a> x);</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="preprocessor">#include "integer.inl"</span></div>
+<div class="ttc" id="a00199_html_ga63fc8d63e7da1706439233b386ba8b6f"><div class="ttname"><a href="a00199.html#ga63fc8d63e7da1706439233b386ba8b6f">glm::mod</a></div><div class="ttdeci">GLM_FUNC_DECL uint mod(uint x, uint y)</div><div class="ttdoc">Modulus. </div></div>
+<div class="ttc" id="a00199_html_gada7e83fdfe943aba4f1d5bf80cb66f40"><div class="ttname"><a href="a00199.html#gada7e83fdfe943aba4f1d5bf80cb66f40">glm::sint</a></div><div class="ttdeci">signed int sint</div><div class="ttdoc">32bit signed integer. </div><div class="ttdef"><b>Definition:</b> <a href="a00045_source.html#l00051">gtx/integer.hpp:51</a></div></div>
+<div class="ttc" id="a00158_html_ga91ad9478d81a7aaf2593e8d9c3d06a14"><div class="ttname"><a href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">glm::uint</a></div><div class="ttdeci">unsigned int uint</div><div class="ttdoc">Unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00113_source.html#l00288">type_int.hpp:288</a></div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00199_html_ga998e5ee915d3769255519e2fbaa2bbf0"><div class="ttname"><a href="a00199.html#ga998e5ee915d3769255519e2fbaa2bbf0">glm::pow</a></div><div class="ttdeci">GLM_FUNC_DECL uint pow(uint x, uint y)</div><div class="ttdoc">Returns x raised to the y power. </div></div>
+<div class="ttc" id="a00199_html_ga78dff8bdb361bf0061194c93e003d189"><div class="ttname"><a href="a00199.html#ga78dff8bdb361bf0061194c93e003d189">glm::nlz</a></div><div class="ttdeci">GLM_FUNC_DECL uint nlz(uint x)</div><div class="ttdoc">Returns the number of leading zeros. </div></div>
+<div class="ttc" id="a00199_html_ga1975d318978d6dacf78b6444fa5ed7bc"><div class="ttname"><a href="a00199.html#ga1975d318978d6dacf78b6444fa5ed7bc">glm::sqrt</a></div><div class="ttdeci">GLM_FUNC_DECL uint sqrt(uint x)</div><div class="ttdoc">Returns the positive square root of x. </div></div>
+<div class="ttc" id="a00199_html_ga8cbd3120905f398ec321b5d1836e08fb"><div class="ttname"><a href="a00199.html#ga8cbd3120905f398ec321b5d1836e08fb">glm::factorial</a></div><div class="ttdeci">GLM_FUNC_DECL genType factorial(genType const &x)</div><div class="ttdoc">Return the factorial value of a number (!12 max, integer only) From GLM_GTX_integer extension...</div></div>
+<div class="ttc" id="a00199_html_ga7011b4e1c1e1ed492149b028feacc00e"><div class="ttname"><a href="a00199.html#ga7011b4e1c1e1ed492149b028feacc00e">glm::floor_log2</a></div><div class="ttdeci">GLM_FUNC_DECL unsigned int floor_log2(unsigned int x)</div><div class="ttdoc">Returns the floor log2 of x. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00046.html b/src/third_party/glm/doc/api/a00046.html
new file mode 100644
index 0000000..fa9127c
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00046.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: integer.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">integer.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00046_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+
+<p>Definition in file <a class="el" href="a00046_source.html">integer.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00046_source.html b/src/third_party/glm/doc/api/a00046_source.html
new file mode 100644
index 0000000..3fecbe4
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00046_source.html
@@ -0,0 +1,65 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: integer.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">integer.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00046.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include "<a class="code" href="a00032.html">detail/func_integer.hpp</a>"</span></div>
+<div class="ttc" id="a00032_html"><div class="ttname"><a href="a00032.html">func_integer.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00047.html b/src/third_party/glm/doc/api/a00047.html
new file mode 100644
index 0000000..b78868f
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00047.html
@@ -0,0 +1,93 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: intersect.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">intersect.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00047_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga9c68139f3d8a4f3d7fe45f9dbc0de5b7"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga9c68139f3d8a4f3d7fe45f9dbc0de5b7"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00200.html#ga9c68139f3d8a4f3d7fe45f9dbc0de5b7">intersectLineSphere</a> (genType const &point0, genType const &point1, genType const &sphereCenter, typename genType::value_type sphereRadius, genType &intersectionPosition1, genType &intersectionNormal1, genType &intersectionPosition2=genType(), genType &intersectionNormal2=genType())</td></tr>
+<tr class="separator:ga9c68139f3d8a4f3d7fe45f9dbc0de5b7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9d29b9b3acb504d43986502f42740df4"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga9d29b9b3acb504d43986502f42740df4"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00200.html#ga9d29b9b3acb504d43986502f42740df4">intersectLineTriangle</a> (genType const &orig, genType const &dir, genType const &vert0, genType const &vert1, genType const &vert2, genType &position)</td></tr>
+<tr class="separator:ga9d29b9b3acb504d43986502f42740df4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad3697a9700ea379739a667ea02573488"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gad3697a9700ea379739a667ea02573488"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00200.html#gad3697a9700ea379739a667ea02573488">intersectRayPlane</a> (genType const &orig, genType const &dir, genType const &planeOrig, genType const &planeNormal, typename genType::value_type &intersectionDistance)</td></tr>
+<tr class="separator:gad3697a9700ea379739a667ea02573488"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac88f8cd84c4bcb5b947d56acbbcfa56e"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gac88f8cd84c4bcb5b947d56acbbcfa56e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00200.html#gac88f8cd84c4bcb5b947d56acbbcfa56e">intersectRaySphere</a> (genType const &rayStarting, genType const &rayNormalizedDirection, genType const &sphereCenter, typename genType::value_type const sphereRadiusSquered, typename genType::value_type &intersectionDistance)</td></tr>
+<tr class="separator:gac88f8cd84c4bcb5b947d56acbbcfa56e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad28c00515b823b579c608aafa1100c1d"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gad28c00515b823b579c608aafa1100c1d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00200.html#gad28c00515b823b579c608aafa1100c1d">intersectRaySphere</a> (genType const &rayStarting, genType const &rayNormalizedDirection, genType const &sphereCenter, const typename genType::value_type sphereRadius, genType &intersectionPosition, genType &intersectionNormal)</td></tr>
+<tr class="separator:gad28c00515b823b579c608aafa1100c1d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab16c1b47c10451e7604b51b39a7ef21d"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gab16c1b47c10451e7604b51b39a7ef21d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00200.html#gab16c1b47c10451e7604b51b39a7ef21d">intersectRayTriangle</a> (genType const &orig, genType const &dir, genType const &vert0, genType const &vert1, genType const &vert2, genType &baryPosition)</td></tr>
+<tr class="separator:gab16c1b47c10451e7604b51b39a7ef21d"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00200.html">GLM_GTX_intersect</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd>
+<dd>
+<a class="el" href="a00183.html" title="Find the point on a straight line which is the closet of a point. ">GLM_GTX_closest_point</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00047_source.html">intersect.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00047_source.html b/src/third_party/glm/doc/api/a00047_source.html
new file mode 100644
index 0000000..4b4b2fb
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00047_source.html
@@ -0,0 +1,124 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: intersect.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">intersect.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00047.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include <cfloat></span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include <limits></span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include "../glm.hpp"</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "../geometric.hpp"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "../gtx/closest_point.hpp"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "../gtx/vector_query.hpp"</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_closest_point extension included")</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> {</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> <a class="code" href="a00200.html#gad3697a9700ea379739a667ea02573488">intersectRayPlane</a>(</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  genType <span class="keyword">const</span> & orig, genType <span class="keyword">const</span> & dir,</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  genType <span class="keyword">const</span> & planeOrig, genType <span class="keyword">const</span> & planeNormal,</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keyword">typename</span> genType::value_type & intersectionDistance);</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> <a class="code" href="a00200.html#gab16c1b47c10451e7604b51b39a7ef21d">intersectRayTriangle</a>(</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  genType <span class="keyword">const</span> & orig, genType <span class="keyword">const</span> & dir,</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  genType <span class="keyword">const</span> & vert0, genType <span class="keyword">const</span> & vert1, genType <span class="keyword">const</span> & vert2,</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  genType & baryPosition);</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> <a class="code" href="a00200.html#ga9d29b9b3acb504d43986502f42740df4">intersectLineTriangle</a>(</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  genType <span class="keyword">const</span> & orig, genType <span class="keyword">const</span> & dir,</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  genType <span class="keyword">const</span> & vert0, genType <span class="keyword">const</span> & vert1, genType <span class="keyword">const</span> & vert2,</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  genType & position);</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> <a class="code" href="a00200.html#gad28c00515b823b579c608aafa1100c1d">intersectRaySphere</a>(</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  genType <span class="keyword">const</span> & rayStarting, genType <span class="keyword">const</span> & rayNormalizedDirection,</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  genType <span class="keyword">const</span> & sphereCenter, <span class="keyword">typename</span> genType::value_type <span class="keyword">const</span> sphereRadiusSquered,</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keyword">typename</span> genType::value_type & intersectionDistance);</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> <a class="code" href="a00200.html#gad28c00515b823b579c608aafa1100c1d">intersectRaySphere</a>(</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  genType <span class="keyword">const</span> & rayStarting, genType <span class="keyword">const</span> & rayNormalizedDirection,</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  genType <span class="keyword">const</span> & sphereCenter, <span class="keyword">const</span> <span class="keyword">typename</span> genType::value_type sphereRadius,</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  genType & intersectionPosition, genType & intersectionNormal);</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> <a class="code" href="a00200.html#ga9c68139f3d8a4f3d7fe45f9dbc0de5b7">intersectLineSphere</a>(</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  genType <span class="keyword">const</span> & point0, genType <span class="keyword">const</span> & point1,</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  genType <span class="keyword">const</span> & sphereCenter, <span class="keyword">typename</span> genType::value_type sphereRadius,</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  genType & intersectionPosition1, genType & intersectionNormal1, </div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  genType & intersectionPosition2 = genType(), genType & intersectionNormal2 = genType());</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="preprocessor">#include "intersect.inl"</span></div>
+<div class="ttc" id="a00200_html_gad28c00515b823b579c608aafa1100c1d"><div class="ttname"><a href="a00200.html#gad28c00515b823b579c608aafa1100c1d">glm::intersectRaySphere</a></div><div class="ttdeci">GLM_FUNC_DECL bool intersectRaySphere(genType const &rayStarting, genType const &rayNormalizedDirection, genType const &sphereCenter, const typename genType::value_type sphereRadius, genType &intersectionPosition, genType &intersectionNormal)</div><div class="ttdoc">Compute the intersection of a ray and a sphere. </div></div>
+<div class="ttc" id="a00200_html_gad3697a9700ea379739a667ea02573488"><div class="ttname"><a href="a00200.html#gad3697a9700ea379739a667ea02573488">glm::intersectRayPlane</a></div><div class="ttdeci">GLM_FUNC_DECL bool intersectRayPlane(genType const &orig, genType const &dir, genType const &planeOrig, genType const &planeNormal, typename genType::value_type &intersectionDistance)</div><div class="ttdoc">Compute the intersection of a ray and a plane. </div></div>
+<div class="ttc" id="a00200_html_ga9d29b9b3acb504d43986502f42740df4"><div class="ttname"><a href="a00200.html#ga9d29b9b3acb504d43986502f42740df4">glm::intersectLineTriangle</a></div><div class="ttdeci">GLM_FUNC_DECL bool intersectLineTriangle(genType const &orig, genType const &dir, genType const &vert0, genType const &vert1, genType const &vert2, genType &position)</div><div class="ttdoc">Compute the intersection of a line and a triangle. </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00200_html_ga9c68139f3d8a4f3d7fe45f9dbc0de5b7"><div class="ttname"><a href="a00200.html#ga9c68139f3d8a4f3d7fe45f9dbc0de5b7">glm::intersectLineSphere</a></div><div class="ttdeci">GLM_FUNC_DECL bool intersectLineSphere(genType const &point0, genType const &point1, genType const &sphereCenter, typename genType::value_type sphereRadius, genType &intersectionPosition1, genType &intersectionNormal1, genType &intersectionPosition2=genType(), genType &intersectionNormal2=genType())</div><div class="ttdoc">Compute the intersection of a line and a sphere. </div></div>
+<div class="ttc" id="a00200_html_gab16c1b47c10451e7604b51b39a7ef21d"><div class="ttname"><a href="a00200.html#gab16c1b47c10451e7604b51b39a7ef21d">glm::intersectRayTriangle</a></div><div class="ttdeci">GLM_FUNC_DECL bool intersectRayTriangle(genType const &orig, genType const &dir, genType const &vert0, genType const &vert1, genType const &vert2, genType &baryPosition)</div><div class="ttdoc">Compute the intersection of a ray and a triangle. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00048.html b/src/third_party/glm/doc/api/a00048.html
new file mode 100644
index 0000000..3e91e93
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00048.html
@@ -0,0 +1,72 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: io.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">io.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00048_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00201.html">GLM_GTX_io</a> </p>
+<dl class="section author"><dt>Author</dt><dd>Jan P Springer (<a href="#" onclick="location.href='mai'+'lto:'+'reg'+'ni'+'rps'+'j@'+'gma'+'il'+'.co'+'m'; return false;">regni<span style="display: none;">.nosp@m.</span>rpsj<span style="display: none;">.nosp@m.</span>@gmai<span style="display: none;">.nosp@m.</span>l.co<span style="display: none;">.nosp@m.</span>m</a>)</dd></dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd>
+<dd>
+<a class="el" href="a00166.html" title="Defines functions to access rows or columns of a matrix easily. ">GLM_GTC_matrix_access</a> (dependence) </dd>
+<dd>
+<a class="el" href="a00172.html" title="Defines a templated quaternion type and several quaternion operations. ">GLM_GTC_quaternion</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00048_source.html">io.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00048_source.html b/src/third_party/glm/doc/api/a00048_source.html
new file mode 100644
index 0000000..0d32417
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00048_source.html
@@ -0,0 +1,237 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: io.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">io.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00048.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "../glm.hpp"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "../gtx/quaternion.hpp"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_io extension included")</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include <iosfwd></span> <span class="comment">// std::basic_ostream<> (fwd)</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include <locale></span> <span class="comment">// std::locale, std::locale::facet, std::locale::id</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include <utility></span> <span class="comment">// std::pair<></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> {</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keyword">namespace </span>io</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  {</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keyword">enum</span> order_type { column_major, row_major};</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> CTy></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keyword">class </span>format_punct : <span class="keyword">public</span> std::locale::facet</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  {</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keyword">typedef</span> CTy char_type;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keyword">static</span> std::locale::id id;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keywordtype">bool</span> formatted;</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keywordtype">unsigned</span> precision;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keywordtype">unsigned</span> width;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  char_type separator;</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  char_type delim_left;</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  char_type delim_right;</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  char_type space;</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  char_type newline;</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  order_type order;</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  GLM_FUNC_DECL <span class="keyword">explicit</span> format_punct(<span class="keywordtype">size_t</span> a = 0);</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  GLM_FUNC_DECL <span class="keyword">explicit</span> format_punct(format_punct <span class="keyword">const</span>&);</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  };</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> CTy, <span class="keyword">typename</span> CTr = std::<span class="keywordtype">char</span>_traits<CTy> ></div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keyword">class </span>basic_state_saver {</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  GLM_FUNC_DECL <span class="keyword">explicit</span> basic_state_saver(std::basic_ios<CTy,CTr>&);</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  GLM_FUNC_DECL ~basic_state_saver();</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  typedef ::std::basic_ios<CTy,CTr> state_type;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> state_type::char_type char_type;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  typedef ::std::ios_base::fmtflags flags_type;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  typedef ::std::streamsize streamsize_type;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  typedef ::std::locale <span class="keyword">const</span> locale_type;</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  state_type& state_;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  flags_type flags_;</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  streamsize_type precision_;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  streamsize_type width_;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  char_type fill_;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  locale_type locale_;</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  GLM_FUNC_DECL basic_state_saver& operator=(basic_state_saver <span class="keyword">const</span>&);</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  };</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keyword">typedef</span> basic_state_saver<char> state_saver;</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="keyword">typedef</span> basic_state_saver<wchar_t> wstate_saver;</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> CTy, <span class="keyword">typename</span> CTr = std::<span class="keywordtype">char</span>_traits<CTy> ></div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keyword">class </span>basic_format_saver</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  {</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  GLM_FUNC_DECL <span class="keyword">explicit</span> basic_format_saver(std::basic_ios<CTy,CTr>&);</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  GLM_FUNC_DECL ~basic_format_saver();</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  basic_state_saver<CTy> <span class="keyword">const</span> bss_;</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  GLM_FUNC_DECL basic_format_saver& operator=(basic_format_saver <span class="keyword">const</span>&);</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  };</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keyword">typedef</span> basic_format_saver<char> format_saver;</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="keyword">typedef</span> basic_format_saver<wchar_t> wformat_saver;</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="keyword">struct </span>precision</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  {</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keywordtype">unsigned</span> value;</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  GLM_FUNC_DECL <span class="keyword">explicit</span> precision(<span class="keywordtype">unsigned</span>);</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  };</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="keyword">struct </span>width</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  {</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordtype">unsigned</span> value;</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  GLM_FUNC_DECL <span class="keyword">explicit</span> width(<span class="keywordtype">unsigned</span>);</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  };</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> CTy></div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keyword">struct </span>delimeter</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  {</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  CTy value[3];</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  GLM_FUNC_DECL <span class="keyword">explicit</span> delimeter(CTy <span class="comment">/* left */</span>, CTy <span class="comment">/* right */</span>, CTy <span class="comment">/* separator */</span> = <span class="charliteral">','</span>);</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  };</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keyword">struct </span>order</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  {</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  order_type value;</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  GLM_FUNC_DECL <span class="keyword">explicit</span> order(order_type);</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  };</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="comment">// functions, inlined (inline)</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> FTy, <span class="keyword">typename</span> CTy, <span class="keyword">typename</span> CTr></div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  FTy <span class="keyword">const</span>& get_facet(std::basic_ios<CTy,CTr>&);</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> FTy, <span class="keyword">typename</span> CTy, <span class="keyword">typename</span> CTr></div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  std::basic_ios<CTy,CTr>& formatted(std::basic_ios<CTy,CTr>&);</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> FTy, <span class="keyword">typename</span> CTy, <span class="keyword">typename</span> CTr></div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  std::basic_ios<CTy,CTr>& unformattet(std::basic_ios<CTy,CTr>&);</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> CTy, <span class="keyword">typename</span> CTr></div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  std::basic_ostream<CTy, CTr>& operator<<(std::basic_ostream<CTy, CTr>&, precision <span class="keyword">const</span>&);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> CTy, <span class="keyword">typename</span> CTr></div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  std::basic_ostream<CTy, CTr>& operator<<(std::basic_ostream<CTy, CTr>&, width <span class="keyword">const</span>&);</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> CTy, <span class="keyword">typename</span> CTr></div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  std::basic_ostream<CTy, CTr>& operator<<(std::basic_ostream<CTy, CTr>&, delimeter<CTy> <span class="keyword">const</span>&);</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> CTy, <span class="keyword">typename</span> CTr></div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  std::basic_ostream<CTy, CTr>& operator<<(std::basic_ostream<CTy, CTr>&, order <span class="keyword">const</span>&);</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  }<span class="comment">//namespace io</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> </div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> CTy, <span class="keyword">typename</span> CTr, <span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tquat<T,P> <span class="keyword">const</span>&);</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> CTy, <span class="keyword">typename</span> CTr, <span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tvec1<T,P> <span class="keyword">const</span>&);</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> CTy, <span class="keyword">typename</span> CTr, <span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tvec2<T,P> <span class="keyword">const</span>&);</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> CTy, <span class="keyword">typename</span> CTr, <span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tvec3<T,P> <span class="keyword">const</span>&);</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> CTy, <span class="keyword">typename</span> CTr, <span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tvec4<T,P> <span class="keyword">const</span>&);</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> CTy, <span class="keyword">typename</span> CTr, <span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tmat2x2<T,P> <span class="keyword">const</span>&);</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> CTy, <span class="keyword">typename</span> CTr, <span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tmat2x3<T,P> <span class="keyword">const</span>&);</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> CTy, <span class="keyword">typename</span> CTr, <span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tmat2x4<T,P> <span class="keyword">const</span>&);</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> CTy, <span class="keyword">typename</span> CTr, <span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tmat3x2<T,P> <span class="keyword">const</span>&);</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> CTy, <span class="keyword">typename</span> CTr, <span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tmat3x3<T,P> <span class="keyword">const</span>&);</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> CTy, <span class="keyword">typename</span> CTr, <span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tmat3x4<T,P> <span class="keyword">const</span>&);</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> CTy, <span class="keyword">typename</span> CTr, <span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tmat4x2<T,P> <span class="keyword">const</span>&);</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> CTy, <span class="keyword">typename</span> CTr, <span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tmat4x3<T,P> <span class="keyword">const</span>&);</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> CTy, <span class="keyword">typename</span> CTr, <span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tmat4x4<T,P> <span class="keyword">const</span>&);</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> CTy, <span class="keyword">typename</span> CTr, <span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  GLM_FUNC_DECL std::basic_ostream<CTy,CTr> & operator<<(std::basic_ostream<CTy,CTr> &,</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  std::pair<tmat4x4<T,P> <span class="keyword">const</span>, tmat4x4<T,P> <span class="keyword">const</span>> <span class="keyword">const</span> &);</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="preprocessor">#include "io.inl"</span></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00049.html b/src/third_party/glm/doc/api/a00049.html
new file mode 100644
index 0000000..24d373f
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00049.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: log_base.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">log_base.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00049_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga60a7b0a401da660869946b2b77c710c9"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga60a7b0a401da660869946b2b77c710c9"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00202.html#ga60a7b0a401da660869946b2b77c710c9">log</a> (genType const &x, genType const &base)</td></tr>
+<tr class="separator:ga60a7b0a401da660869946b2b77c710c9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1842004a127a9f3573764362ff639191"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga1842004a127a9f3573764362ff639191"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00202.html#ga1842004a127a9f3573764362ff639191">sign</a> (vecType< T, P > const &x, vecType< T, P > const &base)</td></tr>
+<tr class="separator:ga1842004a127a9f3573764362ff639191"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00202.html">GLM_GTX_log_base</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00049_source.html">log_base.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00049_source.html b/src/third_party/glm/doc/api/a00049_source.html
new file mode 100644
index 0000000..7fc658b
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00049_source.html
@@ -0,0 +1,89 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: log_base.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">log_base.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00049.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include "../glm.hpp"</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_log_base extension included")</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> {</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  GLM_FUNC_DECL genType <a class="code" href="a00202.html#ga60a7b0a401da660869946b2b77c710c9">log</a>(</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  genType <span class="keyword">const</span> & x,</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  genType <span class="keyword">const</span> & base);</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00202.html#ga1842004a127a9f3573764362ff639191">sign</a>(</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  vecType<T, P> <span class="keyword">const</span> & x,</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  vecType<T, P> <span class="keyword">const</span> & base);</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor">#include "log_base.inl"</span></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00202_html_ga60a7b0a401da660869946b2b77c710c9"><div class="ttname"><a href="a00202.html#ga60a7b0a401da660869946b2b77c710c9">glm::log</a></div><div class="ttdeci">GLM_FUNC_DECL genType log(genType const &x, genType const &base)</div><div class="ttdoc">Logarithm for any base. </div></div>
+<div class="ttc" id="a00202_html_ga1842004a127a9f3573764362ff639191"><div class="ttname"><a href="a00202.html#ga1842004a127a9f3573764362ff639191">glm::sign</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > sign(vecType< T, P > const &x, vecType< T, P > const &base)</div><div class="ttdoc">Logarithm for any base. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00050_source.html b/src/third_party/glm/doc/api/a00050_source.html
new file mode 100644
index 0000000..45269db
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00050_source.html
@@ -0,0 +1,2457 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: man.doxy Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_577c788b67d63fb3b3b5752bd495d0f2.html">doc</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">man.doxy</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="preprocessor"># Doxyfile 1.8.10</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> </div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="preprocessor"># This file describes the settings to be used by the documentation system</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor"># doxygen (www.doxygen.org) for a project.</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="preprocessor">#</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor"># All text after a double hash (##) is considered a comment and is placed in</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor"># front of the TAG it is preceding.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor">#</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor"># All text after a single hash (#) is considered a comment and will be ignored.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor"># The format is:</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor"># TAG = value [value, ...]</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor"># For lists, items can also be appended using:</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor"># TAG += value [value, ...]</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor"># Values that contain spaces should be placed between quotes (\" \").</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor"># Project related configuration options</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor"># This tag specifies the encoding used for all characters in the config file</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor"># that follow. The default is UTF-8 which is also the encoding used for all text</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"># before the first occurrence of this tag. Doxygen uses libiconv (or the iconv</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor"># built into libc) for the transcoding. See http://www.gnu.org/software/libiconv</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor"># for the list of possible encodings.</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor"># The default value is: UTF-8.</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> DOXYFILE_ENCODING = UTF-8</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor"># The PROJECT_NAME tag is a single word (or a sequence of words surrounded by</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor"># double-quotes, unless you are using Doxywizard) that should identify the</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor"># project for which the documentation is generated. This name is used in the</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor"># title of most generated pages and in a few other places.</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor"># The default value is: My Project.</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> PROJECT_NAME = 0.9.7</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor"># The PROJECT_NUMBER tag can be used to enter a project or revision number. This</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor"># could be handy for archiving the generated documentation or if some version</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor"># control system is used.</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> PROJECT_NUMBER = </div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor"># Using the PROJECT_BRIEF tag one can provide an optional one line description</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor"># for a project that appears at the top of each page and should give viewer a</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor"># quick idea about the purpose of the project. Keep the description short.</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> PROJECT_BRIEF = </div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="preprocessor"># With the PROJECT_LOGO tag one can specify a logo or an icon that is included</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="preprocessor"># in the documentation. The maximum height of the logo should not exceed 55</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="preprocessor"># pixels and the maximum width should not exceed 200 pixels. Doxygen will copy</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="preprocessor"># the logo to the output directory.</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> PROJECT_LOGO = D:/Source/G-Truc/<a class="code" href="a00141.html">glm</a>/doc/logo.png</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="preprocessor"># The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="preprocessor"># into which the generated documentation will be written. If a relative path is</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="preprocessor"># entered, it will be relative to the location where doxygen was started. If</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="preprocessor"># left blank the current directory will be used.</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> OUTPUT_DIRECTORY = .</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> # If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="preprocessor"># directories (in 2 levels) under the output directory of each output format and</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="preprocessor"># will distribute the generated files over these directories. Enabling this</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="preprocessor"># option can be useful when feeding doxygen a huge amount of source files, where</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="preprocessor"># putting all generated files in the same directory would otherwise causes</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="preprocessor"># performance problems for the file system.</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="preprocessor"># The default value is: NO.</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> CREATE_SUBDIRS = NO</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="preprocessor"># If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="preprocessor"># characters to appear in the names of generated files. If set to NO, non-ASCII</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="preprocessor"># characters will be escaped, for example _xE3_x81_x84 will be used for Unicode</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="preprocessor"># U+3044.</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="preprocessor"># The default value is: NO.</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> ALLOW_UNICODE_NAMES = NO</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="preprocessor"># The OUTPUT_LANGUAGE tag is used to specify the language in which all</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="preprocessor"># documentation generated by doxygen is written. Doxygen will use this</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="preprocessor"># information to generate all constant output in the proper language.</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="preprocessor"># Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="preprocessor"># Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="preprocessor"># Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="preprocessor"># Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="preprocessor"># Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="preprocessor"># Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="preprocessor"># Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="preprocessor"># Ukrainian and Vietnamese.</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="preprocessor"># The default value is: English.</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> OUTPUT_LANGUAGE = English</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="preprocessor"># If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="preprocessor"># descriptions after the members that are listed in the file and class</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="preprocessor"># documentation (similar to Javadoc). Set to NO to disable this.</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="preprocessor"># The default value is: YES.</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> BRIEF_MEMBER_DESC = NO</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="preprocessor"># If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="preprocessor"># description of a member or function before the detailed description</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="preprocessor">#</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="preprocessor"># Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="preprocessor"># brief descriptions will be completely suppressed.</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="preprocessor"># The default value is: YES.</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> REPEAT_BRIEF = YES</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="preprocessor"># This tag implements a quasi-intelligent brief description abbreviator that is</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="preprocessor"># used to form the text in various listings. Each string in this list, if found</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="preprocessor"># as the leading text of the brief description, will be stripped from the text</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="preprocessor"># and the result, after processing the whole list, is used as the annotated</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="preprocessor"># text. Otherwise, the brief description is used as-is. If left blank, the</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="preprocessor"># following values are used ($name is automatically replaced with the name of</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="preprocessor"># the entity):The $name class, The $name widget, The $name file, is, provides,</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="preprocessor"># specifies, contains, represents, a, an and the.</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> ABBREVIATE_BRIEF = <span class="stringliteral">"The $name class "</span> \</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="stringliteral">"The $name widget "</span> \</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="stringliteral">"The $name file "</span> \</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  is \</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  provides \</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  specifies \</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  contains \</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  represents \</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  a \</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  an \</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  the</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="preprocessor"># If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="preprocessor"># doxygen will generate a detailed section even if there is only a brief</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="preprocessor"># description.</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="preprocessor"># The default value is: NO.</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> ALWAYS_DETAILED_SEC = NO</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="preprocessor"># If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="preprocessor"># inherited members of a class in the documentation of that class as if those</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="preprocessor"># members were ordinary class members. Constructors, destructors and assignment</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="preprocessor"># operators of the base classes will not be shown.</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="preprocessor"># The default value is: NO.</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> INLINE_INHERITED_MEMB = NO</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="preprocessor"># If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="preprocessor"># before files name in the file list and in the header files. If set to NO the</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="preprocessor"># shortest path that makes the file name unique will be used</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="preprocessor"># The default value is: YES.</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> FULL_PATH_NAMES = NO</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="preprocessor"># The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="preprocessor"># Stripping is only done if one of the specified strings matches the left-hand</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="preprocessor"># part of the path. The tag can be used to show relative paths in the file list.</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="preprocessor"># If left blank the directory from which doxygen is run is used as the path to</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="preprocessor"># strip.</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="preprocessor">#</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="preprocessor"># Note that you can specify absolute paths here, but also relative paths, which</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="preprocessor"># will be relative from the directory where doxygen is started.</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="preprocessor"># This tag requires that the tag FULL_PATH_NAMES is set to YES.</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> STRIP_FROM_PATH = <span class="stringliteral">"C:/Documents and Settings/Groove/ "</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="preprocessor"># The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="preprocessor"># path mentioned in the documentation of a class, which tells the reader which</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="preprocessor"># header file to include in order to use a class. If left blank only the name of</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="preprocessor"># the header file containing the class definition is used. Otherwise one should</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="preprocessor"># specify the list of include paths that are normally passed to the compiler</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="preprocessor"># using the -I flag.</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> STRIP_FROM_INC_PATH = </div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="preprocessor"># If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="preprocessor"># less readable) file names. This can be useful is your file systems doesn't</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="preprocessor"># support long names like on DOS, Mac, or CD-ROM.</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="preprocessor"># The default value is: NO.</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> SHORT_NAMES = YES</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="preprocessor"># If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="preprocessor"># first line (until the first dot) of a Javadoc-style comment as the brief</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="preprocessor"># description. If set to NO, the Javadoc-style will behave just like regular Qt-</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="preprocessor"># style comments (thus requiring an explicit @brief command for a brief</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="preprocessor"># description.)</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="preprocessor"># The default value is: NO.</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> JAVADOC_AUTOBRIEF = YES</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> </div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="preprocessor"># If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="preprocessor"># line (until the first dot) of a Qt-style comment as the brief description. If</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="preprocessor"># set to NO, the Qt-style will behave just like regular Qt-style comments (thus</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="preprocessor"># requiring an explicit \brief command for a brief description.)</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="preprocessor"># The default value is: NO.</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> </div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> QT_AUTOBRIEF = NO</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> </div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="preprocessor"># The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="preprocessor"># multi-line C++ special comment block (i.e. a block of </span></div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="preprocessor"># a brief description. This used to be the default behavior. The new default is</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="preprocessor"># to treat a multi-line C++ comment block as a detailed description. Set this</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="preprocessor"># tag to YES if you prefer the old behavior instead.</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="preprocessor">#</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="preprocessor"># Note that setting this tag to YES also means that rational rose comments are</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="preprocessor"># not recognized any more.</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="preprocessor"># The default value is: NO.</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> MULTILINE_CPP_IS_BRIEF = NO</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="preprocessor"># If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="preprocessor"># documentation from any documented member that it re-implements.</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="preprocessor"># The default value is: YES.</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> </div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> INHERIT_DOCS = YES</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> </div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="preprocessor"># If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="preprocessor"># page for each member. If set to NO, the documentation of a member will be part</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="preprocessor"># of the file/class/namespace that contains it.</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="preprocessor"># The default value is: NO.</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> </div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> SEPARATE_MEMBER_PAGES = NO</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> </div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="preprocessor"># The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="preprocessor"># uses this value to replace tabs by spaces in code fragments.</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="preprocessor"># Minimum value: 1, maximum value: 16, default value: 4.</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> </div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> TAB_SIZE = 8</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> </div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <span class="preprocessor"># This tag can be used to specify a number of aliases that act as commands in</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> <span class="preprocessor"># the documentation. An alias has the form:</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <span class="preprocessor"># name=value</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="preprocessor"># For example adding</span></div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="preprocessor"># "sideeffect=@par Side Effects:\n"</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="preprocessor"># will allow you to put the command \sideeffect (or @sideeffect) in the</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="preprocessor"># documentation, which will result in a user-defined paragraph with heading</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="preprocessor"># "Side Effects:". You can put \n's in the value part of an alias to insert</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="preprocessor"># newlines.</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> </div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> ALIASES = </div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> </div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <span class="preprocessor"># This tag can be used to specify a number of word-keyword mappings (TCL only).</span></div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="preprocessor"># A mapping has the form "name=value". For example adding "class=itcl::class"</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="preprocessor"># will allow you to use the command class in the itcl::class meaning.</span></div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> </div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> TCL_SUBST = </div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> </div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="preprocessor"># Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> <span class="preprocessor"># only. Doxygen will then generate output that is more tailored for C. For</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="preprocessor"># instance, some of the names that are used will be different. The list of all</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <span class="preprocessor"># members will be omitted, etc.</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="preprocessor"># The default value is: NO.</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> </div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> OPTIMIZE_OUTPUT_FOR_C = NO</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> </div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="preprocessor"># Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="preprocessor"># Python sources only. Doxygen will then generate output that is more tailored</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <span class="preprocessor"># for that language. For instance, namespaces will be presented as packages,</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> <span class="preprocessor"># qualified scopes will look different, etc.</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="preprocessor"># The default value is: NO.</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> </div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> OPTIMIZE_OUTPUT_JAVA = NO</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> </div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <span class="preprocessor"># Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> <span class="preprocessor"># sources. Doxygen will then generate output that is tailored for Fortran.</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <span class="preprocessor"># The default value is: NO.</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> </div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> OPTIMIZE_FOR_FORTRAN = NO</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="preprocessor"># Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <span class="preprocessor"># sources. Doxygen will then generate output that is tailored for VHDL.</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <span class="preprocessor"># The default value is: NO.</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> </div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> OPTIMIZE_OUTPUT_VHDL = NO</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> </div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <span class="preprocessor"># Doxygen selects the parser to use depending on the extension of the files it</span></div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> <span class="preprocessor"># parses. With this tag you can assign which parser to use for a given</span></div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> <span class="preprocessor"># extension. Doxygen has a built-in mapping, but you can override or extend it</span></div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="preprocessor"># using this tag. The format is ext=language, where ext is a file extension, and</span></div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> <span class="preprocessor"># language is one of the parsers supported by doxygen: IDL, Java, Javascript,</span></div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> <span class="preprocessor"># C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran:</span></div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <span class="preprocessor"># FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran:</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="preprocessor"># Fortran. In the later case the parser tries to guess whether the code is fixed</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="preprocessor"># or free formatted code, this is the default for Fortran type files), VHDL. For</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> <span class="preprocessor"># instance to make doxygen treat .inc files as Fortran files (default is PHP),</span></div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> <span class="preprocessor"># and .f files as C (default is Fortran), use: inc=Fortran f=C.</span></div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> <span class="preprocessor">#</span></div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> <span class="preprocessor"># Note: For files without extension you can use no_extension as a placeholder.</span></div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> <span class="preprocessor">#</span></div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <span class="preprocessor"># Note that for custom extensions you also need to set FILE_PATTERNS otherwise</span></div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="preprocessor"># the files are not read by doxygen.</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> </div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> EXTENSION_MAPPING = </div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> </div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="preprocessor"># If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> <span class="preprocessor"># according to the Markdown format, which allows for more readable</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> <span class="preprocessor"># documentation. See http://daringfireball.net/projects/markdown/ for details.</span></div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> <span class="preprocessor"># The output of markdown processing is further processed by doxygen, so you can</span></div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> <span class="preprocessor"># mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in</span></div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <span class="preprocessor"># case of backward compatibilities issues.</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="preprocessor"># The default value is: YES.</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> </div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> MARKDOWN_SUPPORT = YES</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> </div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <span class="preprocessor"># When enabled doxygen tries to link words that correspond to documented</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> <span class="preprocessor"># classes, or namespaces to their corresponding documentation. Such a link can</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <span class="preprocessor"># be prevented in individual cases by putting a % sign in front of the word or</span></div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <span class="preprocessor"># globally by setting AUTOLINK_SUPPORT to NO.</span></div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="preprocessor"># The default value is: YES.</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> </div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> AUTOLINK_SUPPORT = YES</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> </div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> <span class="preprocessor"># If you use STL classes (i.e. std::string, std::vector, etc.) but do not want</span></div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="preprocessor"># to include (a tag file for) the STL sources as input, then you should set this</span></div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> <span class="preprocessor"># tag to YES in order to let doxygen match functions declarations and</span></div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <span class="preprocessor"># definitions whose arguments contain STL classes (e.g. func(std::string);</span></div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> <span class="preprocessor"># versus func(std::string) {}). This also make the inheritance and collaboration</span></div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> <span class="preprocessor"># diagrams that involve STL classes more complete and accurate.</span></div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="preprocessor"># The default value is: NO.</span></div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> </div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> BUILTIN_STL_SUPPORT = NO</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> </div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> <span class="preprocessor"># If you use Microsoft's C++/CLI language, you should set this option to YES to</span></div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <span class="preprocessor"># enable parsing support.</span></div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> <span class="preprocessor"># The default value is: NO.</span></div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> </div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> CPP_CLI_SUPPORT = NO</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> </div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> <span class="preprocessor"># Set the SIP_SUPPORT tag to YES if your project consists of sip (see:</span></div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> <span class="preprocessor"># http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen</span></div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> <span class="preprocessor"># will parse them like normal C++ but will assume all classes use public instead</span></div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <span class="preprocessor"># of private inheritance when no explicit protection keyword is present.</span></div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> <span class="preprocessor"># The default value is: NO.</span></div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> </div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> SIP_SUPPORT = NO</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> </div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> <span class="preprocessor"># For Microsoft's IDL there are propget and propput attributes to indicate</span></div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> <span class="preprocessor"># getter and setter methods for a property. Setting this option to YES will make</span></div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> <span class="preprocessor"># doxygen to replace the get and set methods by a property in the documentation.</span></div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> <span class="preprocessor"># This will only work if the methods are indeed getting or setting a simple</span></div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> <span class="preprocessor"># type. If this is not the case, or you want to show the methods anyway, you</span></div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> <span class="preprocessor"># should set this option to NO.</span></div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> <span class="preprocessor"># The default value is: YES.</span></div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> </div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> IDL_PROPERTY_SUPPORT = YES</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> </div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <span class="preprocessor"># If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC</span></div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> <span class="preprocessor"># tag is set to YES then doxygen will reuse the documentation of the first</span></div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> <span class="preprocessor"># member in the group (if any) for the other members of the group. By default</span></div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <span class="preprocessor"># all members of a group must be documented explicitly.</span></div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="preprocessor"># The default value is: NO.</span></div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> </div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> DISTRIBUTE_GROUP_DOC = NO</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> </div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> <span class="preprocessor"># If one adds a struct or class to a group and this option is enabled, then also</span></div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="preprocessor"># any nested class or struct is added to the same group. By default this option</span></div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> <span class="preprocessor"># is disabled and one has to add nested compounds explicitly via \ingroup.</span></div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="preprocessor"># The default value is: NO.</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> </div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> GROUP_NESTED_COMPOUNDS = NO</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> </div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> <span class="preprocessor"># Set the SUBGROUPING tag to YES to allow class member groups of the same type</span></div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <span class="preprocessor"># (for instance a group of public functions) to be put as a subgroup of that</span></div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> <span class="preprocessor"># type (e.g. under the Public Functions section). Set it to NO to prevent</span></div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> <span class="preprocessor"># subgrouping. Alternatively, this can be done per class using the</span></div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> <span class="preprocessor"># \nosubgrouping command.</span></div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <span class="preprocessor"># The default value is: YES.</span></div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> </div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> SUBGROUPING = NO</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> </div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> <span class="preprocessor"># When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions</span></div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> <span class="preprocessor"># are shown inside the group in which they are included (e.g. using \ingroup)</span></div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> <span class="preprocessor"># instead of on a separate page (for HTML and Man pages) or section (for LaTeX</span></div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> <span class="preprocessor"># and RTF).</span></div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> <span class="preprocessor">#</span></div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> <span class="preprocessor"># Note that this feature does not work in combination with</span></div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> <span class="preprocessor"># SEPARATE_MEMBER_PAGES.</span></div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> <span class="preprocessor"># The default value is: NO.</span></div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> </div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> INLINE_GROUPED_CLASSES = NO</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> </div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> <span class="preprocessor"># When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions</span></div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> <span class="preprocessor"># with only public data fields or simple typedef fields will be shown inline in</span></div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> <span class="preprocessor"># the documentation of the scope in which they are defined (i.e. file,</span></div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> <span class="preprocessor"># namespace, or group documentation), provided this scope is documented. If set</span></div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="preprocessor"># to NO, structs, classes, and unions are shown on a separate page (for HTML and</span></div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <span class="preprocessor"># Man pages) or section (for LaTeX and RTF).</span></div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> <span class="preprocessor"># The default value is: NO.</span></div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> </div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> INLINE_SIMPLE_STRUCTS = NO</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> </div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <span class="preprocessor"># When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or</span></div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> <span class="preprocessor"># enum is documented as struct, union, or enum with the name of the typedef. So</span></div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> <span class="preprocessor"># typedef struct TypeS {} TypeT, will appear in the documentation as a struct</span></div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> <span class="preprocessor"># with name TypeT. When disabled the typedef will appear as a member of a file,</span></div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <span class="preprocessor"># namespace, or class. And the struct will be named TypeS. This can typically be</span></div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> <span class="preprocessor"># useful for C code in case the coding convention dictates that all compound</span></div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> <span class="preprocessor"># types are typedef'ed and only the typedef is referenced, never the tag name.</span></div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> <span class="preprocessor"># The default value is: NO.</span></div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> </div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> TYPEDEF_HIDES_STRUCT = NO</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> </div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> <span class="preprocessor"># The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This</span></div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="preprocessor"># cache is used to resolve symbols given their name and scope. Since this can be</span></div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> <span class="preprocessor"># an expensive process and often the same symbol appears multiple times in the</span></div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> <span class="preprocessor"># code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small</span></div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> <span class="preprocessor"># doxygen will become slower. If the cache is too large, memory is wasted. The</span></div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="preprocessor"># cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range</span></div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> <span class="preprocessor"># is 0..9, the default is 0, corresponding to a cache size of 2^16=65536</span></div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> <span class="preprocessor"># symbols. At the end of a run doxygen will report the cache usage and suggest</span></div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> <span class="preprocessor"># the optimal cache size from a speed point of view.</span></div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> <span class="preprocessor"># Minimum value: 0, maximum value: 9, default value: 0.</span></div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> </div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> LOOKUP_CACHE_SIZE = 0</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> </div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> <span class="preprocessor">#---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> <span class="preprocessor"># Build related configuration options</span></div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> <span class="preprocessor">#---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> </div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> <span class="preprocessor"># If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in</span></div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> <span class="preprocessor"># documentation are documented, even if no documentation was available. Private</span></div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> <span class="preprocessor"># class members and static file members will be hidden unless the</span></div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> <span class="preprocessor"># EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.</span></div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> <span class="preprocessor"># Note: This will also disable the warnings about undocumented members that are</span></div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> <span class="preprocessor"># normally produced when WARNINGS is set to YES.</span></div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> <span class="preprocessor"># The default value is: NO.</span></div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> </div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> EXTRACT_ALL = NO</div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> </div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> <span class="preprocessor"># If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will</span></div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> <span class="preprocessor"># be included in the documentation.</span></div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> <span class="preprocessor"># The default value is: NO.</span></div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> </div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> EXTRACT_PRIVATE = NO</div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> </div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> <span class="preprocessor"># If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal</span></div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> <span class="preprocessor"># scope will be included in the documentation.</span></div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> <span class="preprocessor"># The default value is: NO.</span></div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> </div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> EXTRACT_PACKAGE = NO</div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> </div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> <span class="preprocessor"># If the EXTRACT_STATIC tag is set to YES, all static members of a file will be</span></div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> <span class="preprocessor"># included in the documentation.</span></div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> <span class="preprocessor"># The default value is: NO.</span></div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> </div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> EXTRACT_STATIC = YES</div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> </div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> <span class="preprocessor"># If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined</span></div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> <span class="preprocessor"># locally in source files will be included in the documentation. If set to NO,</span></div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> <span class="preprocessor"># only classes defined in header files are included. Does not have any effect</span></div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> <span class="preprocessor"># for Java sources.</span></div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> <span class="preprocessor"># The default value is: YES.</span></div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> </div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> EXTRACT_LOCAL_CLASSES = NO</div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> </div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> <span class="preprocessor"># This flag is only useful for Objective-C code. If set to YES, local methods,</span></div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> <span class="preprocessor"># which are defined in the implementation section but not in the interface are</span></div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> <span class="preprocessor"># included in the documentation. If set to NO, only methods in the interface are</span></div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> <span class="preprocessor"># included.</span></div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> <span class="preprocessor"># The default value is: NO.</span></div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> </div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> EXTRACT_LOCAL_METHODS = NO</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> </div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> <span class="preprocessor"># If this flag is set to YES, the members of anonymous namespaces will be</span></div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> <span class="preprocessor"># extracted and appear in the documentation as a namespace called</span></div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> <span class="preprocessor"># 'anonymous_namespace{file}', where file will be replaced with the base name of</span></div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> <span class="preprocessor"># the file that contains the anonymous namespace. By default anonymous namespace</span></div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> <span class="preprocessor"># are hidden.</span></div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> <span class="preprocessor"># The default value is: NO.</span></div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> </div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> EXTRACT_ANON_NSPACES = NO</div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> </div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> <span class="preprocessor"># If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all</span></div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> <span class="preprocessor"># undocumented members inside documented classes or files. If set to NO these</span></div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> <span class="preprocessor"># members will be included in the various overviews, but no documentation</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> <span class="preprocessor"># section is generated. This option has no effect if EXTRACT_ALL is enabled.</span></div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> <span class="preprocessor"># The default value is: NO.</span></div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> </div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> HIDE_UNDOC_MEMBERS = YES</div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> </div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> <span class="preprocessor"># If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all</span></div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> <span class="preprocessor"># undocumented classes that are normally visible in the class hierarchy. If set</span></div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> <span class="preprocessor"># to NO, these classes will be included in the various overviews. This option</span></div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> <span class="preprocessor"># has no effect if EXTRACT_ALL is enabled.</span></div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> <span class="preprocessor"># The default value is: NO.</span></div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> </div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> HIDE_UNDOC_CLASSES = YES</div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> </div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> <span class="preprocessor"># If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend</span></div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> <span class="preprocessor"># (class|struct|union) declarations. If set to NO, these declarations will be</span></div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> <span class="preprocessor"># included in the documentation.</span></div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> <span class="preprocessor"># The default value is: NO.</span></div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> </div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> HIDE_FRIEND_COMPOUNDS = YES</div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> </div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> <span class="preprocessor"># If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any</span></div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> <span class="preprocessor"># documentation blocks found inside the body of a function. If set to NO, these</span></div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> <span class="preprocessor"># blocks will be appended to the function's detailed documentation block.</span></div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> <span class="preprocessor"># The default value is: NO.</span></div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> </div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> HIDE_IN_BODY_DOCS = YES</div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> </div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> <span class="preprocessor"># The INTERNAL_DOCS tag determines if documentation that is typed after a</span></div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> <span class="preprocessor"># \internal command is included. If the tag is set to NO then the documentation</span></div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> <span class="preprocessor"># will be excluded. Set it to YES to include the internal documentation.</span></div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> <span class="preprocessor"># The default value is: NO.</span></div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> </div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> INTERNAL_DOCS = NO</div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> </div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> <span class="preprocessor"># If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file</span></div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> <span class="preprocessor"># names in lower-case letters. If set to YES, upper-case letters are also</span></div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> <span class="preprocessor"># allowed. This is useful if you have classes or files whose names only differ</span></div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> <span class="preprocessor"># in case and if your file system supports case sensitive file names. Windows</span></div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> <span class="preprocessor"># and Mac users are advised to set this option to NO.</span></div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> <span class="preprocessor"># The default value is: system dependent.</span></div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> </div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> CASE_SENSE_NAMES = YES</div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> </div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> <span class="preprocessor"># If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with</span></div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> <span class="preprocessor"># their full class and namespace scopes in the documentation. If set to YES, the</span></div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> <span class="preprocessor"># scope will be hidden.</span></div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> <span class="preprocessor"># The default value is: NO.</span></div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> </div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> HIDE_SCOPE_NAMES = YES</div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> </div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> <span class="preprocessor"># If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will</span></div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> <span class="preprocessor"># append additional text to a page's title, such as Class Reference. If set to</span></div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> <span class="preprocessor"># YES the compound reference will be hidden.</span></div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> <span class="preprocessor"># The default value is: NO.</span></div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> </div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> HIDE_COMPOUND_REFERENCE= NO</div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> </div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> <span class="preprocessor"># If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of</span></div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> <span class="preprocessor"># the files that are included by a file in the documentation of that file.</span></div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> <span class="preprocessor"># The default value is: YES.</span></div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> </div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> SHOW_INCLUDE_FILES = NO</div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> </div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> <span class="preprocessor"># If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each</span></div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> <span class="preprocessor"># grouped member an include statement to the documentation, telling the reader</span></div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> <span class="preprocessor"># which file to include in order to use the member.</span></div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> <span class="preprocessor"># The default value is: NO.</span></div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> </div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> SHOW_GROUPED_MEMB_INC = NO</div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> </div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> <span class="preprocessor"># If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include</span></div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> <span class="preprocessor"># files with double quotes in the documentation rather than with sharp brackets.</span></div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> <span class="preprocessor"># The default value is: NO.</span></div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> </div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> FORCE_LOCAL_INCLUDES = NO</div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> </div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> <span class="preprocessor"># If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the</span></div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> <span class="preprocessor"># documentation for inline members.</span></div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> <span class="preprocessor"># The default value is: YES.</span></div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> </div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> INLINE_INFO = NO</div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> </div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> <span class="preprocessor"># If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the</span></div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> <span class="preprocessor"># (detailed) documentation of file and class members alphabetically by member</span></div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> <span class="preprocessor"># name. If set to NO, the members will appear in declaration order.</span></div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> <span class="preprocessor"># The default value is: YES.</span></div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> </div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> SORT_MEMBER_DOCS = YES</div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> </div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> <span class="preprocessor"># If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief</span></div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> <span class="preprocessor"># descriptions of file, namespace and class members alphabetically by member</span></div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> <span class="preprocessor"># name. If set to NO, the members will appear in declaration order. Note that</span></div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> <span class="preprocessor"># this will also influence the order of the classes in the class list.</span></div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> <span class="preprocessor"># The default value is: NO.</span></div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> </div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> SORT_BRIEF_DOCS = YES</div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> </div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> <span class="preprocessor"># If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the</span></div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> <span class="preprocessor"># (brief and detailed) documentation of class members so that constructors and</span></div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> <span class="preprocessor"># destructors are listed first. If set to NO the constructors will appear in the</span></div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> <span class="preprocessor"># respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.</span></div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> <span class="preprocessor"># Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief</span></div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> <span class="preprocessor"># member documentation.</span></div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> <span class="preprocessor"># Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting</span></div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> <span class="preprocessor"># detailed member documentation.</span></div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> <span class="preprocessor"># The default value is: NO.</span></div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> </div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> SORT_MEMBERS_CTORS_1ST = NO</div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> </div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> <span class="preprocessor"># If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy</span></div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> <span class="preprocessor"># of group names into alphabetical order. If set to NO the group names will</span></div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> <span class="preprocessor"># appear in their defined order.</span></div>
+<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> <span class="preprocessor"># The default value is: NO.</span></div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> </div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> SORT_GROUP_NAMES = NO</div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> </div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> <span class="preprocessor"># If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by</span></div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> <span class="preprocessor"># fully-qualified names, including namespaces. If set to NO, the class list will</span></div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> <span class="preprocessor"># be sorted only by class name, not including the namespace part.</span></div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> <span class="preprocessor"># Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.</span></div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> <span class="preprocessor"># Note: This option applies only to the class list, not to the alphabetical</span></div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> <span class="preprocessor"># list.</span></div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> <span class="preprocessor"># The default value is: NO.</span></div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> </div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> SORT_BY_SCOPE_NAME = YES</div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> </div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> <span class="preprocessor"># If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper</span></div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> <span class="preprocessor"># type resolution of all parameters of a function it will reject a match between</span></div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> <span class="preprocessor"># the prototype and the implementation of a member function even if there is</span></div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> <span class="preprocessor"># only one candidate or it is obvious which candidate to choose by doing a</span></div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> <span class="preprocessor"># simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still</span></div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> <span class="preprocessor"># accept a match between prototype and implementation in such cases.</span></div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> <span class="preprocessor"># The default value is: NO.</span></div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> </div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> STRICT_PROTO_MATCHING = NO</div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> </div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> <span class="preprocessor"># The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo</span></div>
+<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> <span class="preprocessor"># list. This list is created by putting \todo commands in the documentation.</span></div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> <span class="preprocessor"># The default value is: YES.</span></div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> </div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> GENERATE_TODOLIST = YES</div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> </div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> <span class="preprocessor"># The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test</span></div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> <span class="preprocessor"># list. This list is created by putting \test commands in the documentation.</span></div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> <span class="preprocessor"># The default value is: YES.</span></div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> </div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> GENERATE_TESTLIST = YES</div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> </div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> <span class="preprocessor"># The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug</span></div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> <span class="preprocessor"># list. This list is created by putting \bug commands in the documentation.</span></div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> <span class="preprocessor"># The default value is: YES.</span></div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> </div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> GENERATE_BUGLIST = YES</div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> </div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> <span class="preprocessor"># The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)</span></div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> <span class="preprocessor"># the deprecated list. This list is created by putting \deprecated commands in</span></div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> <span class="preprocessor"># the documentation.</span></div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> <span class="preprocessor"># The default value is: YES.</span></div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> </div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> GENERATE_DEPRECATEDLIST= YES</div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> </div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> <span class="preprocessor"># The ENABLED_SECTIONS tag can be used to enable conditional documentation</span></div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> <span class="preprocessor"># sections, marked by \if <section_label> ... \endif and \cond <section_label></span></div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> <span class="preprocessor"># ... \endcond blocks.</span></div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> </div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> ENABLED_SECTIONS = </div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> </div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> <span class="preprocessor"># The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the</span></div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> <span class="preprocessor"># initial value of a variable or macro / define can have for it to appear in the</span></div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> <span class="preprocessor"># documentation. If the initializer consists of more lines than specified here</span></div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> <span class="preprocessor"># it will be hidden. Use a value of 0 to hide initializers completely. The</span></div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> <span class="preprocessor"># appearance of the value of individual variables and macros / defines can be</span></div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> <span class="preprocessor"># controlled using \showinitializer or \hideinitializer command in the</span></div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> <span class="preprocessor"># documentation regardless of this setting.</span></div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> <span class="preprocessor"># Minimum value: 0, maximum value: 10000, default value: 30.</span></div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> </div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> MAX_INITIALIZER_LINES = 30</div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> </div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> <span class="preprocessor"># Set the SHOW_USED_FILES tag to NO to disable the list of files generated at</span></div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> <span class="preprocessor"># the bottom of the documentation of classes and structs. If set to YES, the</span></div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> <span class="preprocessor"># list will mention the files that were used to generate the documentation.</span></div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> <span class="preprocessor"># The default value is: YES.</span></div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> </div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> SHOW_USED_FILES = NO</div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> </div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> <span class="preprocessor"># Set the SHOW_FILES tag to NO to disable the generation of the Files page. This</span></div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> <span class="preprocessor"># will remove the Files entry from the Quick Index and from the Folder Tree View</span></div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> <span class="preprocessor"># (if specified).</span></div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> <span class="preprocessor"># The default value is: YES.</span></div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> </div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> SHOW_FILES = YES</div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> </div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> <span class="preprocessor"># Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces</span></div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span> <span class="preprocessor"># page. This will remove the Namespaces entry from the Quick Index and from the</span></div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span> <span class="preprocessor"># Folder Tree View (if specified).</span></div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span> <span class="preprocessor"># The default value is: YES.</span></div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> </div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span> SHOW_NAMESPACES = YES</div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> </div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span> <span class="preprocessor"># The FILE_VERSION_FILTER tag can be used to specify a program or script that</span></div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span> <span class="preprocessor"># doxygen should invoke to get the current version for each file (typically from</span></div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span> <span class="preprocessor"># the version control system). Doxygen will invoke the program by executing (via</span></div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span> <span class="preprocessor"># popen()) the command command input-file, where command is the value of the</span></div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span> <span class="preprocessor"># FILE_VERSION_FILTER tag, and input-file is the name of an input file provided</span></div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span> <span class="preprocessor"># by doxygen. Whatever the program writes to standard output is used as the file</span></div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span> <span class="preprocessor"># version. For an example see the documentation.</span></div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span> </div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span> FILE_VERSION_FILTER = </div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span> </div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span> <span class="preprocessor"># The LAYOUT_FILE tag can be used to specify a layout file which will be parsed</span></div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span> <span class="preprocessor"># by doxygen. The layout file controls the global structure of the generated</span></div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span> <span class="preprocessor"># output files in an output format independent way. To create the layout file</span></div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span> <span class="preprocessor"># that represents doxygen's defaults, run doxygen with the -l option. You can</span></div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span> <span class="preprocessor"># optionally specify a file name after the option, if omitted DoxygenLayout.xml</span></div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span> <span class="preprocessor"># will be used as the name of the layout file.</span></div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span> <span class="preprocessor">#</span></div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span> <span class="preprocessor"># Note that if you run doxygen from a directory containing a file called</span></div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span> <span class="preprocessor"># DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE</span></div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span> <span class="preprocessor"># tag is left empty.</span></div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span> </div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span> LAYOUT_FILE = </div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span> </div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span> <span class="preprocessor"># The CITE_BIB_FILES tag can be used to specify one or more bib files containing</span></div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span> <span class="preprocessor"># the reference definitions. This must be a list of .bib files. The .bib</span></div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span> <span class="preprocessor"># extension is automatically appended if omitted. This requires the bibtex tool</span></div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span> <span class="preprocessor"># to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.</span></div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span> <span class="preprocessor"># For LaTeX the style of the bibliography can be controlled using</span></div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span> <span class="preprocessor"># LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the</span></div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span> <span class="preprocessor"># search path. See also \cite for info how to create references.</span></div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span> </div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span> CITE_BIB_FILES = </div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span> </div>
+<div class="line"><a name="l00709"></a><span class="lineno"> 709</span> <span class="preprocessor">#---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00710"></a><span class="lineno"> 710</span> <span class="preprocessor"># Configuration options related to warning and progress messages</span></div>
+<div class="line"><a name="l00711"></a><span class="lineno"> 711</span> <span class="preprocessor">#---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00712"></a><span class="lineno"> 712</span> </div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span> <span class="preprocessor"># The QUIET tag can be used to turn on/off the messages that are generated to</span></div>
+<div class="line"><a name="l00714"></a><span class="lineno"> 714</span> <span class="preprocessor"># standard output by doxygen. If QUIET is set to YES this implies that the</span></div>
+<div class="line"><a name="l00715"></a><span class="lineno"> 715</span> <span class="preprocessor"># messages are off.</span></div>
+<div class="line"><a name="l00716"></a><span class="lineno"> 716</span> <span class="preprocessor"># The default value is: NO.</span></div>
+<div class="line"><a name="l00717"></a><span class="lineno"> 717</span> </div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span> QUIET = NO</div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span> </div>
+<div class="line"><a name="l00720"></a><span class="lineno"> 720</span> <span class="preprocessor"># The WARNINGS tag can be used to turn on/off the warning messages that are</span></div>
+<div class="line"><a name="l00721"></a><span class="lineno"> 721</span> <span class="preprocessor"># generated to standard error (stderr) by doxygen. If WARNINGS is set to YES</span></div>
+<div class="line"><a name="l00722"></a><span class="lineno"> 722</span> <span class="preprocessor"># this implies that the warnings are on.</span></div>
+<div class="line"><a name="l00723"></a><span class="lineno"> 723</span> <span class="preprocessor">#</span></div>
+<div class="line"><a name="l00724"></a><span class="lineno"> 724</span> <span class="preprocessor"># Tip: Turn warnings on while writing the documentation.</span></div>
+<div class="line"><a name="l00725"></a><span class="lineno"> 725</span> <span class="preprocessor"># The default value is: YES.</span></div>
+<div class="line"><a name="l00726"></a><span class="lineno"> 726</span> </div>
+<div class="line"><a name="l00727"></a><span class="lineno"> 727</span> WARNINGS = YES</div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span> </div>
+<div class="line"><a name="l00729"></a><span class="lineno"> 729</span> <span class="preprocessor"># If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate</span></div>
+<div class="line"><a name="l00730"></a><span class="lineno"> 730</span> <span class="preprocessor"># warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag</span></div>
+<div class="line"><a name="l00731"></a><span class="lineno"> 731</span> <span class="preprocessor"># will automatically be disabled.</span></div>
+<div class="line"><a name="l00732"></a><span class="lineno"> 732</span> <span class="preprocessor"># The default value is: YES.</span></div>
+<div class="line"><a name="l00733"></a><span class="lineno"> 733</span> </div>
+<div class="line"><a name="l00734"></a><span class="lineno"> 734</span> WARN_IF_UNDOCUMENTED = YES</div>
+<div class="line"><a name="l00735"></a><span class="lineno"> 735</span> </div>
+<div class="line"><a name="l00736"></a><span class="lineno"> 736</span> <span class="preprocessor"># If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for</span></div>
+<div class="line"><a name="l00737"></a><span class="lineno"> 737</span> <span class="preprocessor"># potential errors in the documentation, such as not documenting some parameters</span></div>
+<div class="line"><a name="l00738"></a><span class="lineno"> 738</span> <span class="preprocessor"># in a documented function, or documenting parameters that don't exist or using</span></div>
+<div class="line"><a name="l00739"></a><span class="lineno"> 739</span> <span class="preprocessor"># markup commands wrongly.</span></div>
+<div class="line"><a name="l00740"></a><span class="lineno"> 740</span> <span class="preprocessor"># The default value is: YES.</span></div>
+<div class="line"><a name="l00741"></a><span class="lineno"> 741</span> </div>
+<div class="line"><a name="l00742"></a><span class="lineno"> 742</span> WARN_IF_DOC_ERROR = YES</div>
+<div class="line"><a name="l00743"></a><span class="lineno"> 743</span> </div>
+<div class="line"><a name="l00744"></a><span class="lineno"> 744</span> <span class="preprocessor"># This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that</span></div>
+<div class="line"><a name="l00745"></a><span class="lineno"> 745</span> <span class="preprocessor"># are documented, but have no documentation for their parameters or return</span></div>
+<div class="line"><a name="l00746"></a><span class="lineno"> 746</span> <span class="preprocessor"># value. If set to NO, doxygen will only warn about wrong or incomplete</span></div>
+<div class="line"><a name="l00747"></a><span class="lineno"> 747</span> <span class="preprocessor"># parameter documentation, but not about the absence of documentation.</span></div>
+<div class="line"><a name="l00748"></a><span class="lineno"> 748</span> <span class="preprocessor"># The default value is: NO.</span></div>
+<div class="line"><a name="l00749"></a><span class="lineno"> 749</span> </div>
+<div class="line"><a name="l00750"></a><span class="lineno"> 750</span> WARN_NO_PARAMDOC = NO</div>
+<div class="line"><a name="l00751"></a><span class="lineno"> 751</span> </div>
+<div class="line"><a name="l00752"></a><span class="lineno"> 752</span> <span class="preprocessor"># The WARN_FORMAT tag determines the format of the warning messages that doxygen</span></div>
+<div class="line"><a name="l00753"></a><span class="lineno"> 753</span> <span class="preprocessor"># can produce. The string should contain the $file, $line, and $text tags, which</span></div>
+<div class="line"><a name="l00754"></a><span class="lineno"> 754</span> <span class="preprocessor"># will be replaced by the file and line number from which the warning originated</span></div>
+<div class="line"><a name="l00755"></a><span class="lineno"> 755</span> <span class="preprocessor"># and the warning text. Optionally the format may contain $version, which will</span></div>
+<div class="line"><a name="l00756"></a><span class="lineno"> 756</span> <span class="preprocessor"># be replaced by the version of the file (if it could be obtained via</span></div>
+<div class="line"><a name="l00757"></a><span class="lineno"> 757</span> <span class="preprocessor"># FILE_VERSION_FILTER)</span></div>
+<div class="line"><a name="l00758"></a><span class="lineno"> 758</span> <span class="preprocessor"># The default value is: $file:$line: $text.</span></div>
+<div class="line"><a name="l00759"></a><span class="lineno"> 759</span> </div>
+<div class="line"><a name="l00760"></a><span class="lineno"> 760</span> WARN_FORMAT = <span class="stringliteral">"$file:$line: $text"</span></div>
+<div class="line"><a name="l00761"></a><span class="lineno"> 761</span> </div>
+<div class="line"><a name="l00762"></a><span class="lineno"> 762</span> <span class="preprocessor"># The WARN_LOGFILE tag can be used to specify a file to which warning and error</span></div>
+<div class="line"><a name="l00763"></a><span class="lineno"> 763</span> <span class="preprocessor"># messages should be written. If left blank the output is written to standard</span></div>
+<div class="line"><a name="l00764"></a><span class="lineno"> 764</span> <span class="preprocessor"># error (stderr).</span></div>
+<div class="line"><a name="l00765"></a><span class="lineno"> 765</span> </div>
+<div class="line"><a name="l00766"></a><span class="lineno"> 766</span> WARN_LOGFILE = </div>
+<div class="line"><a name="l00767"></a><span class="lineno"> 767</span> </div>
+<div class="line"><a name="l00768"></a><span class="lineno"> 768</span> <span class="preprocessor">#---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00769"></a><span class="lineno"> 769</span> <span class="preprocessor"># Configuration options related to the input files</span></div>
+<div class="line"><a name="l00770"></a><span class="lineno"> 770</span> <span class="preprocessor">#---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00771"></a><span class="lineno"> 771</span> </div>
+<div class="line"><a name="l00772"></a><span class="lineno"> 772</span> <span class="preprocessor"># The INPUT tag is used to specify the files and/or directories that contain</span></div>
+<div class="line"><a name="l00773"></a><span class="lineno"> 773</span> <span class="preprocessor"># documented source files. You may enter file names like myfile.cpp or</span></div>
+<div class="line"><a name="l00774"></a><span class="lineno"> 774</span> <span class="preprocessor"># directories like /usr/src/myproject. Separate the files or directories with</span></div>
+<div class="line"><a name="l00775"></a><span class="lineno"> 775</span> <span class="preprocessor"># spaces. See also FILE_PATTERNS and EXTENSION_MAPPING</span></div>
+<div class="line"><a name="l00776"></a><span class="lineno"> 776</span> <span class="preprocessor"># Note: If this tag is empty the current directory is searched.</span></div>
+<div class="line"><a name="l00777"></a><span class="lineno"> 777</span> </div>
+<div class="line"><a name="l00778"></a><span class="lineno"> 778</span> INPUT = ../<a class="code" href="a00141.html">glm</a> \</div>
+<div class="line"><a name="l00779"></a><span class="lineno"> 779</span>  .</div>
+<div class="line"><a name="l00780"></a><span class="lineno"> 780</span> </div>
+<div class="line"><a name="l00781"></a><span class="lineno"> 781</span> # This tag can be used to specify the character encoding of the source files</div>
+<div class="line"><a name="l00782"></a><span class="lineno"> 782</span> <span class="preprocessor"># that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses</span></div>
+<div class="line"><a name="l00783"></a><span class="lineno"> 783</span> <span class="preprocessor"># libiconv (or the iconv built into libc) for the transcoding. See the libiconv</span></div>
+<div class="line"><a name="l00784"></a><span class="lineno"> 784</span> <span class="preprocessor"># documentation (see: http://www.gnu.org/software/libiconv) for the list of</span></div>
+<div class="line"><a name="l00785"></a><span class="lineno"> 785</span> <span class="preprocessor"># possible encodings.</span></div>
+<div class="line"><a name="l00786"></a><span class="lineno"> 786</span> <span class="preprocessor"># The default value is: UTF-8.</span></div>
+<div class="line"><a name="l00787"></a><span class="lineno"> 787</span> </div>
+<div class="line"><a name="l00788"></a><span class="lineno"> 788</span> INPUT_ENCODING = UTF-8</div>
+<div class="line"><a name="l00789"></a><span class="lineno"> 789</span> </div>
+<div class="line"><a name="l00790"></a><span class="lineno"> 790</span> <span class="preprocessor"># If the value of the INPUT tag contains directories, you can use the</span></div>
+<div class="line"><a name="l00791"></a><span class="lineno"> 791</span> <span class="preprocessor"># FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and</span></div>
+<div class="line"><a name="l00792"></a><span class="lineno"> 792</span> <span class="preprocessor"># *.h) to filter out the source-files in the directories.</span></div>
+<div class="line"><a name="l00793"></a><span class="lineno"> 793</span> <span class="preprocessor">#</span></div>
+<div class="line"><a name="l00794"></a><span class="lineno"> 794</span> <span class="preprocessor"># Note that for custom extensions or not directly supported extensions you also</span></div>
+<div class="line"><a name="l00795"></a><span class="lineno"> 795</span> <span class="preprocessor"># need to set EXTENSION_MAPPING for the extension otherwise the files are not</span></div>
+<div class="line"><a name="l00796"></a><span class="lineno"> 796</span> <span class="preprocessor"># read by doxygen.</span></div>
+<div class="line"><a name="l00797"></a><span class="lineno"> 797</span> <span class="preprocessor">#</span></div>
+<div class="line"><a name="l00798"></a><span class="lineno"> 798</span> <span class="preprocessor"># If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,</span></div>
+<div class="line"><a name="l00799"></a><span class="lineno"> 799</span> <span class="preprocessor"># *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,</span></div>
+<div class="line"><a name="l00800"></a><span class="lineno"> 800</span> <span class="preprocessor"># *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc,</span></div>
+<div class="line"><a name="l00801"></a><span class="lineno"> 801</span> <span class="preprocessor"># *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd,</span></div>
+<div class="line"><a name="l00802"></a><span class="lineno"> 802</span> <span class="preprocessor"># *.vhdl, *.ucf, *.qsf, *.as and *.js.</span></div>
+<div class="line"><a name="l00803"></a><span class="lineno"> 803</span> </div>
+<div class="line"><a name="l00804"></a><span class="lineno"> 804</span> FILE_PATTERNS = *.hpp \</div>
+<div class="line"><a name="l00805"></a><span class="lineno"> 805</span>  *.doxy</div>
+<div class="line"><a name="l00806"></a><span class="lineno"> 806</span> </div>
+<div class="line"><a name="l00807"></a><span class="lineno"> 807</span> <span class="preprocessor"># The RECURSIVE tag can be used to specify whether or not subdirectories should</span></div>
+<div class="line"><a name="l00808"></a><span class="lineno"> 808</span> <span class="preprocessor"># be searched for input files as well.</span></div>
+<div class="line"><a name="l00809"></a><span class="lineno"> 809</span> <span class="preprocessor"># The default value is: NO.</span></div>
+<div class="line"><a name="l00810"></a><span class="lineno"> 810</span> </div>
+<div class="line"><a name="l00811"></a><span class="lineno"> 811</span> RECURSIVE = YES</div>
+<div class="line"><a name="l00812"></a><span class="lineno"> 812</span> </div>
+<div class="line"><a name="l00813"></a><span class="lineno"> 813</span> <span class="preprocessor"># The EXCLUDE tag can be used to specify files and/or directories that should be</span></div>
+<div class="line"><a name="l00814"></a><span class="lineno"> 814</span> <span class="preprocessor"># excluded from the INPUT source files. This way you can easily exclude a</span></div>
+<div class="line"><a name="l00815"></a><span class="lineno"> 815</span> <span class="preprocessor"># subdirectory from a directory tree whose root is specified with the INPUT tag.</span></div>
+<div class="line"><a name="l00816"></a><span class="lineno"> 816</span> <span class="preprocessor">#</span></div>
+<div class="line"><a name="l00817"></a><span class="lineno"> 817</span> <span class="preprocessor"># Note that relative paths are relative to the directory from which doxygen is</span></div>
+<div class="line"><a name="l00818"></a><span class="lineno"> 818</span> <span class="preprocessor"># run.</span></div>
+<div class="line"><a name="l00819"></a><span class="lineno"> 819</span> </div>
+<div class="line"><a name="l00820"></a><span class="lineno"> 820</span> EXCLUDE = </div>
+<div class="line"><a name="l00821"></a><span class="lineno"> 821</span> </div>
+<div class="line"><a name="l00822"></a><span class="lineno"> 822</span> <span class="preprocessor"># The EXCLUDE_SYMLINKS tag can be used to select whether or not files or</span></div>
+<div class="line"><a name="l00823"></a><span class="lineno"> 823</span> <span class="preprocessor"># directories that are symbolic links (a Unix file system feature) are excluded</span></div>
+<div class="line"><a name="l00824"></a><span class="lineno"> 824</span> <span class="preprocessor"># from the input.</span></div>
+<div class="line"><a name="l00825"></a><span class="lineno"> 825</span> <span class="preprocessor"># The default value is: NO.</span></div>
+<div class="line"><a name="l00826"></a><span class="lineno"> 826</span> </div>
+<div class="line"><a name="l00827"></a><span class="lineno"> 827</span> EXCLUDE_SYMLINKS = NO</div>
+<div class="line"><a name="l00828"></a><span class="lineno"> 828</span> </div>
+<div class="line"><a name="l00829"></a><span class="lineno"> 829</span> <span class="preprocessor"># If the value of the INPUT tag contains directories, you can use the</span></div>
+<div class="line"><a name="l00830"></a><span class="lineno"> 830</span> <span class="preprocessor"># EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude</span></div>
+<div class="line"><a name="l00831"></a><span class="lineno"> 831</span> <span class="preprocessor"># certain files from those directories.</span></div>
+<div class="line"><a name="l00832"></a><span class="lineno"> 832</span> <span class="preprocessor">#</span></div>
+<div class="line"><a name="l00833"></a><span class="lineno"> 833</span> <span class="preprocessor"># Note that the wildcards are matched against the file with absolute path, so to</span></div>
+<div class="line"><a name="l00834"></a><span class="lineno"> 834</span> <span class="preprocessor"># exclude all test directories for example use the pattern */test</span><span class="comment">/*</span></div>
+<div class="line"><a name="l00835"></a><span class="lineno"> 835</span> <span class="comment"></span></div>
+<div class="line"><a name="l00836"></a><span class="lineno"> 836</span> <span class="comment">EXCLUDE_PATTERNS = </span></div>
+<div class="line"><a name="l00837"></a><span class="lineno"> 837</span> <span class="comment"></span></div>
+<div class="line"><a name="l00838"></a><span class="lineno"> 838</span> <span class="comment"># The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names</span></div>
+<div class="line"><a name="l00839"></a><span class="lineno"> 839</span> <span class="comment"># (namespaces, classes, functions, etc.) that should be excluded from the</span></div>
+<div class="line"><a name="l00840"></a><span class="lineno"> 840</span> <span class="comment"># output. The symbol name can be a fully qualified name, a word, or if the</span></div>
+<div class="line"><a name="l00841"></a><span class="lineno"> 841</span> <span class="comment"># wildcard * is used, a substring. Examples: ANamespace, AClass,</span></div>
+<div class="line"><a name="l00842"></a><span class="lineno"> 842</span> <span class="comment"># AClass::ANamespace, ANamespace::*Test</span></div>
+<div class="line"><a name="l00843"></a><span class="lineno"> 843</span> <span class="comment">#</span></div>
+<div class="line"><a name="l00844"></a><span class="lineno"> 844</span> <span class="comment"># Note that the wildcards are matched against the file with absolute path, so to</span></div>
+<div class="line"><a name="l00845"></a><span class="lineno"> 845</span> <span class="comment"># exclude all test directories use the pattern */</span><span class="preprocessor">test</span><span class="comment">/*</span></div>
+<div class="line"><a name="l00846"></a><span class="lineno"> 846</span> <span class="comment"></span></div>
+<div class="line"><a name="l00847"></a><span class="lineno"> 847</span> <span class="comment">EXCLUDE_SYMBOLS = </span></div>
+<div class="line"><a name="l00848"></a><span class="lineno"> 848</span> <span class="comment"></span></div>
+<div class="line"><a name="l00849"></a><span class="lineno"> 849</span> <span class="comment"># The EXAMPLE_PATH tag can be used to specify one or more files or directories</span></div>
+<div class="line"><a name="l00850"></a><span class="lineno"> 850</span> <span class="comment"># that contain example code fragments that are included (see the \include</span></div>
+<div class="line"><a name="l00851"></a><span class="lineno"> 851</span> <span class="comment"># command).</span></div>
+<div class="line"><a name="l00852"></a><span class="lineno"> 852</span> <span class="comment"></span></div>
+<div class="line"><a name="l00853"></a><span class="lineno"> 853</span> <span class="comment">EXAMPLE_PATH = </span></div>
+<div class="line"><a name="l00854"></a><span class="lineno"> 854</span> <span class="comment"></span></div>
+<div class="line"><a name="l00855"></a><span class="lineno"> 855</span> <span class="comment"># If the value of the EXAMPLE_PATH tag contains directories, you can use the</span></div>
+<div class="line"><a name="l00856"></a><span class="lineno"> 856</span> <span class="comment"># EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and</span></div>
+<div class="line"><a name="l00857"></a><span class="lineno"> 857</span> <span class="comment"># *.h) to filter out the source-files in the directories. If left blank all</span></div>
+<div class="line"><a name="l00858"></a><span class="lineno"> 858</span> <span class="comment"># files are included.</span></div>
+<div class="line"><a name="l00859"></a><span class="lineno"> 859</span> <span class="comment"></span></div>
+<div class="line"><a name="l00860"></a><span class="lineno"> 860</span> <span class="comment">EXAMPLE_PATTERNS = *</span></div>
+<div class="line"><a name="l00861"></a><span class="lineno"> 861</span> <span class="comment"></span></div>
+<div class="line"><a name="l00862"></a><span class="lineno"> 862</span> <span class="comment"># If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be</span></div>
+<div class="line"><a name="l00863"></a><span class="lineno"> 863</span> <span class="comment"># searched for input files to be used with the \include or \dontinclude commands</span></div>
+<div class="line"><a name="l00864"></a><span class="lineno"> 864</span> <span class="comment"># irrespective of the value of the RECURSIVE tag.</span></div>
+<div class="line"><a name="l00865"></a><span class="lineno"> 865</span> <span class="comment"># The default value is: NO.</span></div>
+<div class="line"><a name="l00866"></a><span class="lineno"> 866</span> <span class="comment"></span></div>
+<div class="line"><a name="l00867"></a><span class="lineno"> 867</span> <span class="comment">EXAMPLE_RECURSIVE = NO</span></div>
+<div class="line"><a name="l00868"></a><span class="lineno"> 868</span> <span class="comment"></span></div>
+<div class="line"><a name="l00869"></a><span class="lineno"> 869</span> <span class="comment"># The IMAGE_PATH tag can be used to specify one or more files or directories</span></div>
+<div class="line"><a name="l00870"></a><span class="lineno"> 870</span> <span class="comment"># that contain images that are to be included in the documentation (see the</span></div>
+<div class="line"><a name="l00871"></a><span class="lineno"> 871</span> <span class="comment"># \image command).</span></div>
+<div class="line"><a name="l00872"></a><span class="lineno"> 872</span> <span class="comment"></span></div>
+<div class="line"><a name="l00873"></a><span class="lineno"> 873</span> <span class="comment">IMAGE_PATH = </span></div>
+<div class="line"><a name="l00874"></a><span class="lineno"> 874</span> <span class="comment"></span></div>
+<div class="line"><a name="l00875"></a><span class="lineno"> 875</span> <span class="comment"># The INPUT_FILTER tag can be used to specify a program that doxygen should</span></div>
+<div class="line"><a name="l00876"></a><span class="lineno"> 876</span> <span class="comment"># invoke to filter for each input file. Doxygen will invoke the filter program</span></div>
+<div class="line"><a name="l00877"></a><span class="lineno"> 877</span> <span class="comment"># by executing (via popen()) the command:</span></div>
+<div class="line"><a name="l00878"></a><span class="lineno"> 878</span> <span class="comment">#</span></div>
+<div class="line"><a name="l00879"></a><span class="lineno"> 879</span> <span class="comment"># <filter> <input-file></span></div>
+<div class="line"><a name="l00880"></a><span class="lineno"> 880</span> <span class="comment">#</span></div>
+<div class="line"><a name="l00881"></a><span class="lineno"> 881</span> <span class="comment"># where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the</span></div>
+<div class="line"><a name="l00882"></a><span class="lineno"> 882</span> <span class="comment"># name of an input file. Doxygen will then use the output that the filter</span></div>
+<div class="line"><a name="l00883"></a><span class="lineno"> 883</span> <span class="comment"># program writes to standard output. If FILTER_PATTERNS is specified, this tag</span></div>
+<div class="line"><a name="l00884"></a><span class="lineno"> 884</span> <span class="comment"># will be ignored.</span></div>
+<div class="line"><a name="l00885"></a><span class="lineno"> 885</span> <span class="comment">#</span></div>
+<div class="line"><a name="l00886"></a><span class="lineno"> 886</span> <span class="comment"># Note that the filter must not add or remove lines; it is applied before the</span></div>
+<div class="line"><a name="l00887"></a><span class="lineno"> 887</span> <span class="comment"># code is scanned, but not when the output code is generated. If lines are added</span></div>
+<div class="line"><a name="l00888"></a><span class="lineno"> 888</span> <span class="comment"># or removed, the anchors will not be placed correctly.</span></div>
+<div class="line"><a name="l00889"></a><span class="lineno"> 889</span> <span class="comment"></span></div>
+<div class="line"><a name="l00890"></a><span class="lineno"> 890</span> <span class="comment">INPUT_FILTER = </span></div>
+<div class="line"><a name="l00891"></a><span class="lineno"> 891</span> <span class="comment"></span></div>
+<div class="line"><a name="l00892"></a><span class="lineno"> 892</span> <span class="comment"># The FILTER_PATTERNS tag can be used to specify filters on a per file pattern</span></div>
+<div class="line"><a name="l00893"></a><span class="lineno"> 893</span> <span class="comment"># basis. Doxygen will compare the file name with each pattern and apply the</span></div>
+<div class="line"><a name="l00894"></a><span class="lineno"> 894</span> <span class="comment"># filter if there is a match. The filters are a list of the form: pattern=filter</span></div>
+<div class="line"><a name="l00895"></a><span class="lineno"> 895</span> <span class="comment"># (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how</span></div>
+<div class="line"><a name="l00896"></a><span class="lineno"> 896</span> <span class="comment"># filters are used. If the FILTER_PATTERNS tag is empty or if none of the</span></div>
+<div class="line"><a name="l00897"></a><span class="lineno"> 897</span> <span class="comment"># patterns match the file name, INPUT_FILTER is applied.</span></div>
+<div class="line"><a name="l00898"></a><span class="lineno"> 898</span> <span class="comment"></span></div>
+<div class="line"><a name="l00899"></a><span class="lineno"> 899</span> <span class="comment">FILTER_PATTERNS = </span></div>
+<div class="line"><a name="l00900"></a><span class="lineno"> 900</span> <span class="comment"></span></div>
+<div class="line"><a name="l00901"></a><span class="lineno"> 901</span> <span class="comment"># If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using</span></div>
+<div class="line"><a name="l00902"></a><span class="lineno"> 902</span> <span class="comment"># INPUT_FILTER) will also be used to filter the input files that are used for</span></div>
+<div class="line"><a name="l00903"></a><span class="lineno"> 903</span> <span class="comment"># producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).</span></div>
+<div class="line"><a name="l00904"></a><span class="lineno"> 904</span> <span class="comment"># The default value is: NO.</span></div>
+<div class="line"><a name="l00905"></a><span class="lineno"> 905</span> <span class="comment"></span></div>
+<div class="line"><a name="l00906"></a><span class="lineno"> 906</span> <span class="comment">FILTER_SOURCE_FILES = NO</span></div>
+<div class="line"><a name="l00907"></a><span class="lineno"> 907</span> <span class="comment"></span></div>
+<div class="line"><a name="l00908"></a><span class="lineno"> 908</span> <span class="comment"># The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file</span></div>
+<div class="line"><a name="l00909"></a><span class="lineno"> 909</span> <span class="comment"># pattern. A pattern will override the setting for FILTER_PATTERN (if any) and</span></div>
+<div class="line"><a name="l00910"></a><span class="lineno"> 910</span> <span class="comment"># it is also possible to disable source filtering for a specific pattern using</span></div>
+<div class="line"><a name="l00911"></a><span class="lineno"> 911</span> <span class="comment"># *.ext= (so without naming a filter).</span></div>
+<div class="line"><a name="l00912"></a><span class="lineno"> 912</span> <span class="comment"># This tag requires that the tag FILTER_SOURCE_FILES is set to YES.</span></div>
+<div class="line"><a name="l00913"></a><span class="lineno"> 913</span> <span class="comment"></span></div>
+<div class="line"><a name="l00914"></a><span class="lineno"> 914</span> <span class="comment">FILTER_SOURCE_PATTERNS = </span></div>
+<div class="line"><a name="l00915"></a><span class="lineno"> 915</span> <span class="comment"></span></div>
+<div class="line"><a name="l00916"></a><span class="lineno"> 916</span> <span class="comment"># If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that</span></div>
+<div class="line"><a name="l00917"></a><span class="lineno"> 917</span> <span class="comment"># is part of the input, its contents will be placed on the main page</span></div>
+<div class="line"><a name="l00918"></a><span class="lineno"> 918</span> <span class="comment"># (index.html). This can be useful if you have a project on for instance GitHub</span></div>
+<div class="line"><a name="l00919"></a><span class="lineno"> 919</span> <span class="comment"># and want to reuse the introduction page also for the doxygen output.</span></div>
+<div class="line"><a name="l00920"></a><span class="lineno"> 920</span> <span class="comment"></span></div>
+<div class="line"><a name="l00921"></a><span class="lineno"> 921</span> <span class="comment">USE_MDFILE_AS_MAINPAGE = </span></div>
+<div class="line"><a name="l00922"></a><span class="lineno"> 922</span> <span class="comment"></span></div>
+<div class="line"><a name="l00923"></a><span class="lineno"> 923</span> <span class="comment">#---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00924"></a><span class="lineno"> 924</span> <span class="comment"># Configuration options related to source browsing</span></div>
+<div class="line"><a name="l00925"></a><span class="lineno"> 925</span> <span class="comment">#---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00926"></a><span class="lineno"> 926</span> <span class="comment"></span></div>
+<div class="line"><a name="l00927"></a><span class="lineno"> 927</span> <span class="comment"># If the SOURCE_BROWSER tag is set to YES then a list of source files will be</span></div>
+<div class="line"><a name="l00928"></a><span class="lineno"> 928</span> <span class="comment"># generated. Documented entities will be cross-referenced with these sources.</span></div>
+<div class="line"><a name="l00929"></a><span class="lineno"> 929</span> <span class="comment">#</span></div>
+<div class="line"><a name="l00930"></a><span class="lineno"> 930</span> <span class="comment"># Note: To get rid of all source code in the generated output, make sure that</span></div>
+<div class="line"><a name="l00931"></a><span class="lineno"> 931</span> <span class="comment"># also VERBATIM_HEADERS is set to NO.</span></div>
+<div class="line"><a name="l00932"></a><span class="lineno"> 932</span> <span class="comment"># The default value is: NO.</span></div>
+<div class="line"><a name="l00933"></a><span class="lineno"> 933</span> <span class="comment"></span></div>
+<div class="line"><a name="l00934"></a><span class="lineno"> 934</span> <span class="comment">SOURCE_BROWSER = YES</span></div>
+<div class="line"><a name="l00935"></a><span class="lineno"> 935</span> <span class="comment"></span></div>
+<div class="line"><a name="l00936"></a><span class="lineno"> 936</span> <span class="comment"># Setting the INLINE_SOURCES tag to YES will include the body of functions,</span></div>
+<div class="line"><a name="l00937"></a><span class="lineno"> 937</span> <span class="comment"># classes and enums directly into the documentation.</span></div>
+<div class="line"><a name="l00938"></a><span class="lineno"> 938</span> <span class="comment"># The default value is: NO.</span></div>
+<div class="line"><a name="l00939"></a><span class="lineno"> 939</span> <span class="comment"></span></div>
+<div class="line"><a name="l00940"></a><span class="lineno"> 940</span> <span class="comment">INLINE_SOURCES = NO</span></div>
+<div class="line"><a name="l00941"></a><span class="lineno"> 941</span> <span class="comment"></span></div>
+<div class="line"><a name="l00942"></a><span class="lineno"> 942</span> <span class="comment"># Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any</span></div>
+<div class="line"><a name="l00943"></a><span class="lineno"> 943</span> <span class="comment"># special comment blocks from generated source code fragments. Normal C, C++ and</span></div>
+<div class="line"><a name="l00944"></a><span class="lineno"> 944</span> <span class="comment"># Fortran comments will always remain visible.</span></div>
+<div class="line"><a name="l00945"></a><span class="lineno"> 945</span> <span class="comment"># The default value is: YES.</span></div>
+<div class="line"><a name="l00946"></a><span class="lineno"> 946</span> <span class="comment"></span></div>
+<div class="line"><a name="l00947"></a><span class="lineno"> 947</span> <span class="comment">STRIP_CODE_COMMENTS = YES</span></div>
+<div class="line"><a name="l00948"></a><span class="lineno"> 948</span> <span class="comment"></span></div>
+<div class="line"><a name="l00949"></a><span class="lineno"> 949</span> <span class="comment"># If the REFERENCED_BY_RELATION tag is set to YES then for each documented</span></div>
+<div class="line"><a name="l00950"></a><span class="lineno"> 950</span> <span class="comment"># function all documented functions referencing it will be listed.</span></div>
+<div class="line"><a name="l00951"></a><span class="lineno"> 951</span> <span class="comment"># The default value is: NO.</span></div>
+<div class="line"><a name="l00952"></a><span class="lineno"> 952</span> <span class="comment"></span></div>
+<div class="line"><a name="l00953"></a><span class="lineno"> 953</span> <span class="comment">REFERENCED_BY_RELATION = YES</span></div>
+<div class="line"><a name="l00954"></a><span class="lineno"> 954</span> <span class="comment"></span></div>
+<div class="line"><a name="l00955"></a><span class="lineno"> 955</span> <span class="comment"># If the REFERENCES_RELATION tag is set to YES then for each documented function</span></div>
+<div class="line"><a name="l00956"></a><span class="lineno"> 956</span> <span class="comment"># all documented entities called/used by that function will be listed.</span></div>
+<div class="line"><a name="l00957"></a><span class="lineno"> 957</span> <span class="comment"># The default value is: NO.</span></div>
+<div class="line"><a name="l00958"></a><span class="lineno"> 958</span> <span class="comment"></span></div>
+<div class="line"><a name="l00959"></a><span class="lineno"> 959</span> <span class="comment">REFERENCES_RELATION = YES</span></div>
+<div class="line"><a name="l00960"></a><span class="lineno"> 960</span> <span class="comment"></span></div>
+<div class="line"><a name="l00961"></a><span class="lineno"> 961</span> <span class="comment"># If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set</span></div>
+<div class="line"><a name="l00962"></a><span class="lineno"> 962</span> <span class="comment"># to YES then the hyperlinks from functions in REFERENCES_RELATION and</span></div>
+<div class="line"><a name="l00963"></a><span class="lineno"> 963</span> <span class="comment"># REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will</span></div>
+<div class="line"><a name="l00964"></a><span class="lineno"> 964</span> <span class="comment"># link to the documentation.</span></div>
+<div class="line"><a name="l00965"></a><span class="lineno"> 965</span> <span class="comment"># The default value is: YES.</span></div>
+<div class="line"><a name="l00966"></a><span class="lineno"> 966</span> <span class="comment"></span></div>
+<div class="line"><a name="l00967"></a><span class="lineno"> 967</span> <span class="comment">REFERENCES_LINK_SOURCE = YES</span></div>
+<div class="line"><a name="l00968"></a><span class="lineno"> 968</span> <span class="comment"></span></div>
+<div class="line"><a name="l00969"></a><span class="lineno"> 969</span> <span class="comment"># If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the</span></div>
+<div class="line"><a name="l00970"></a><span class="lineno"> 970</span> <span class="comment"># source code will show a tooltip with additional information such as prototype,</span></div>
+<div class="line"><a name="l00971"></a><span class="lineno"> 971</span> <span class="comment"># brief description and links to the definition and documentation. Since this</span></div>
+<div class="line"><a name="l00972"></a><span class="lineno"> 972</span> <span class="comment"># will make the HTML file larger and loading of large files a bit slower, you</span></div>
+<div class="line"><a name="l00973"></a><span class="lineno"> 973</span> <span class="comment"># can opt to disable this feature.</span></div>
+<div class="line"><a name="l00974"></a><span class="lineno"> 974</span> <span class="comment"># The default value is: YES.</span></div>
+<div class="line"><a name="l00975"></a><span class="lineno"> 975</span> <span class="comment"># This tag requires that the tag SOURCE_BROWSER is set to YES.</span></div>
+<div class="line"><a name="l00976"></a><span class="lineno"> 976</span> <span class="comment"></span></div>
+<div class="line"><a name="l00977"></a><span class="lineno"> 977</span> <span class="comment">SOURCE_TOOLTIPS = YES</span></div>
+<div class="line"><a name="l00978"></a><span class="lineno"> 978</span> <span class="comment"></span></div>
+<div class="line"><a name="l00979"></a><span class="lineno"> 979</span> <span class="comment"># If the USE_HTAGS tag is set to YES then the references to source code will</span></div>
+<div class="line"><a name="l00980"></a><span class="lineno"> 980</span> <span class="comment"># point to the HTML generated by the htags(1) tool instead of doxygen built-in</span></div>
+<div class="line"><a name="l00981"></a><span class="lineno"> 981</span> <span class="comment"># source browser. The htags tool is part of GNU's global source tagging system</span></div>
+<div class="line"><a name="l00982"></a><span class="lineno"> 982</span> <span class="comment"># (see http://www.gnu.org/software/global/global.html). You will need version</span></div>
+<div class="line"><a name="l00983"></a><span class="lineno"> 983</span> <span class="comment"># 4.8.6 or higher.</span></div>
+<div class="line"><a name="l00984"></a><span class="lineno"> 984</span> <span class="comment">#</span></div>
+<div class="line"><a name="l00985"></a><span class="lineno"> 985</span> <span class="comment"># To use it do the following:</span></div>
+<div class="line"><a name="l00986"></a><span class="lineno"> 986</span> <span class="comment"># - Install the latest version of global</span></div>
+<div class="line"><a name="l00987"></a><span class="lineno"> 987</span> <span class="comment"># - Enable SOURCE_BROWSER and USE_HTAGS in the config file</span></div>
+<div class="line"><a name="l00988"></a><span class="lineno"> 988</span> <span class="comment"># - Make sure the INPUT points to the root of the source tree</span></div>
+<div class="line"><a name="l00989"></a><span class="lineno"> 989</span> <span class="comment"># - Run doxygen as normal</span></div>
+<div class="line"><a name="l00990"></a><span class="lineno"> 990</span> <span class="comment">#</span></div>
+<div class="line"><a name="l00991"></a><span class="lineno"> 991</span> <span class="comment"># Doxygen will invoke htags (and that will in turn invoke gtags), so these</span></div>
+<div class="line"><a name="l00992"></a><span class="lineno"> 992</span> <span class="comment"># tools must be available from the command line (i.e. in the search path).</span></div>
+<div class="line"><a name="l00993"></a><span class="lineno"> 993</span> <span class="comment">#</span></div>
+<div class="line"><a name="l00994"></a><span class="lineno"> 994</span> <span class="comment"># The result: instead of the source browser generated by doxygen, the links to</span></div>
+<div class="line"><a name="l00995"></a><span class="lineno"> 995</span> <span class="comment"># source code will now point to the output of htags.</span></div>
+<div class="line"><a name="l00996"></a><span class="lineno"> 996</span> <span class="comment"># The default value is: NO.</span></div>
+<div class="line"><a name="l00997"></a><span class="lineno"> 997</span> <span class="comment"># This tag requires that the tag SOURCE_BROWSER is set to YES.</span></div>
+<div class="line"><a name="l00998"></a><span class="lineno"> 998</span> <span class="comment"></span></div>
+<div class="line"><a name="l00999"></a><span class="lineno"> 999</span> <span class="comment">USE_HTAGS = NO</span></div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> <span class="comment"></span></div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span> <span class="comment"># If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a</span></div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span> <span class="comment"># verbatim copy of the header file for each class for which an include is</span></div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span> <span class="comment"># specified. Set to NO to disable this.</span></div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span> <span class="comment"># See also: Section \class.</span></div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span> <span class="comment"># The default value is: YES.</span></div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span> <span class="comment"></span></div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span> <span class="comment">VERBATIM_HEADERS = YES</span></div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span> <span class="comment"></span></div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span> <span class="comment">#---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span> <span class="comment"># Configuration options related to the alphabetical class index</span></div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span> <span class="comment">#---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span> <span class="comment"></span></div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span> <span class="comment"># If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all</span></div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span> <span class="comment"># compounds will be generated. Enable this if the project contains a lot of</span></div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span> <span class="comment"># classes, structs, unions or interfaces.</span></div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span> <span class="comment"># The default value is: YES.</span></div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span> <span class="comment"></span></div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span> <span class="comment">ALPHABETICAL_INDEX = NO</span></div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span> <span class="comment"></span></div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span> <span class="comment"># The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in</span></div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span> <span class="comment"># which the alphabetical index list will be split.</span></div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span> <span class="comment"># Minimum value: 1, maximum value: 20, default value: 5.</span></div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span> <span class="comment"># This tag requires that the tag ALPHABETICAL_INDEX is set to YES.</span></div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span> <span class="comment"></span></div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span> <span class="comment">COLS_IN_ALPHA_INDEX = 5</span></div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span> <span class="comment"></span></div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span> <span class="comment"># In case all classes in a project start with a common prefix, all classes will</span></div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span> <span class="comment"># be put under the same header in the alphabetical index. The IGNORE_PREFIX tag</span></div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span> <span class="comment"># can be used to specify a prefix (or a list of prefixes) that should be ignored</span></div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span> <span class="comment"># while generating the index headers.</span></div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span> <span class="comment"># This tag requires that the tag ALPHABETICAL_INDEX is set to YES.</span></div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span> <span class="comment"></span></div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span> <span class="comment">IGNORE_PREFIX = </span></div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span> <span class="comment"></span></div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span> <span class="comment">#---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span> <span class="comment"># Configuration options related to the HTML output</span></div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span> <span class="comment">#---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span> <span class="comment"></span></div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span> <span class="comment"># If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output</span></div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span> <span class="comment"># The default value is: YES.</span></div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span> <span class="comment"></span></div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span> <span class="comment">GENERATE_HTML = YES</span></div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span> <span class="comment"></span></div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span> <span class="comment"># The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a</span></div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span> <span class="comment"># relative path is entered the value of OUTPUT_DIRECTORY will be put in front of</span></div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span> <span class="comment"># it.</span></div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span> <span class="comment"># The default directory is: html.</span></div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span> <span class="comment"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span> <span class="comment"></span></div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span> <span class="comment">HTML_OUTPUT = html</span></div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span> <span class="comment"></span></div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span> <span class="comment"># The HTML_FILE_EXTENSION tag can be used to specify the file extension for each</span></div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span> <span class="comment"># generated HTML page (for example: .htm, .php, .asp).</span></div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span> <span class="comment"># The default value is: .html.</span></div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span> <span class="comment"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span> <span class="comment"></span></div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span> <span class="comment">HTML_FILE_EXTENSION = .html</span></div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span> <span class="comment"></span></div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span> <span class="comment"># The HTML_HEADER tag can be used to specify a user-defined HTML header file for</span></div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span> <span class="comment"># each generated HTML page. If the tag is left blank doxygen will generate a</span></div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span> <span class="comment"># standard header.</span></div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span> <span class="comment">#</span></div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span> <span class="comment"># To get valid HTML the header file that includes any scripts and style sheets</span></div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span> <span class="comment"># that doxygen needs, which is dependent on the configuration options used (e.g.</span></div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span> <span class="comment"># the setting GENERATE_TREEVIEW). It is highly recommended to start with a</span></div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span> <span class="comment"># default header using</span></div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span> <span class="comment"># doxygen -w html new_header.html new_footer.html new_stylesheet.css</span></div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span> <span class="comment"># YourConfigFile</span></div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span> <span class="comment"># and then modify the file new_header.html. See also section "Doxygen usage"</span></div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span> <span class="comment"># for information on how to generate the default header that doxygen normally</span></div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span> <span class="comment"># uses.</span></div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span> <span class="comment"># Note: The header is subject to change so you typically have to regenerate the</span></div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span> <span class="comment"># default header when upgrading to a newer version of doxygen. For a description</span></div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span> <span class="comment"># of the possible markers and block names see the documentation.</span></div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span> <span class="comment"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span> <span class="comment"></span></div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span> <span class="comment">HTML_HEADER = </span></div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span> <span class="comment"></span></div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span> <span class="comment"># The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each</span></div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span> <span class="comment"># generated HTML page. If the tag is left blank doxygen will generate a standard</span></div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span> <span class="comment"># footer. See HTML_HEADER for more information on how to generate a default</span></div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span> <span class="comment"># footer and what special commands can be used inside the footer. See also</span></div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span> <span class="comment"># section "Doxygen usage" for information on how to generate the default footer</span></div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span> <span class="comment"># that doxygen normally uses.</span></div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span> <span class="comment"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span> <span class="comment"></span></div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span> <span class="comment">HTML_FOOTER = </span></div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span> <span class="comment"></span></div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span> <span class="comment"># The HTML_STYLESHEET tag can be used to specify a user-defined cascading style</span></div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span> <span class="comment"># sheet that is used by each HTML page. It can be used to fine-tune the look of</span></div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span> <span class="comment"># the HTML output. If left blank doxygen will generate a default style sheet.</span></div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span> <span class="comment"># See also section "Doxygen usage" for information on how to generate the style</span></div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span> <span class="comment"># sheet that doxygen normally uses.</span></div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span> <span class="comment"># Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as</span></div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span> <span class="comment"># it is more robust and this tag (HTML_STYLESHEET) will in the future become</span></div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span> <span class="comment"># obsolete.</span></div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span> <span class="comment"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span> <span class="comment"></span></div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span> <span class="comment">HTML_STYLESHEET = </span></div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span> <span class="comment"></span></div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span> <span class="comment"># The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined</span></div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span> <span class="comment"># cascading style sheets that are included after the standard style sheets</span></div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span> <span class="comment"># created by doxygen. Using this option one can overrule certain style aspects.</span></div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span> <span class="comment"># This is preferred over using HTML_STYLESHEET since it does not replace the</span></div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span> <span class="comment"># standard style sheet and is therefore more robust against future updates.</span></div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span> <span class="comment"># Doxygen will copy the style sheet files to the output directory.</span></div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span> <span class="comment"># Note: The order of the extra style sheet files is of importance (e.g. the last</span></div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span> <span class="comment"># style sheet in the list overrules the setting of the previous ones in the</span></div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span> <span class="comment"># list). For an example see the documentation.</span></div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span> <span class="comment"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span> <span class="comment"></span></div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span> <span class="comment">HTML_EXTRA_STYLESHEET = </span></div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span> <span class="comment"></span></div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span> <span class="comment"># The HTML_EXTRA_FILES tag can be used to specify one or more extra images or</span></div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span> <span class="comment"># other source files which should be copied to the HTML output directory. Note</span></div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span> <span class="comment"># that these files will be copied to the base HTML output directory. Use the</span></div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span> <span class="comment"># $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these</span></div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span> <span class="comment"># files. In the HTML_STYLESHEET file, use the file name only. Also note that the</span></div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span> <span class="comment"># files will be copied as-is; there are no commands or markers available.</span></div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span> <span class="comment"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span> <span class="comment"></span></div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span> <span class="comment">HTML_EXTRA_FILES = </span></div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span> <span class="comment"></span></div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span> <span class="comment"># The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen</span></div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span> <span class="comment"># will adjust the colors in the style sheet and background images according to</span></div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span> <span class="comment"># this color. Hue is specified as an angle on a colorwheel, see</span></div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span> <span class="comment"># http://en.wikipedia.org/wiki/Hue for more information. For instance the value</span></div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span> <span class="comment"># 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300</span></div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span> <span class="comment"># purple, and 360 is red again.</span></div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span> <span class="comment"># Minimum value: 0, maximum value: 359, default value: 220.</span></div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span> <span class="comment"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span> <span class="comment"></span></div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span> <span class="comment">HTML_COLORSTYLE_HUE = 220</span></div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span> <span class="comment"></span></div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span> <span class="comment"># The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors</span></div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span> <span class="comment"># in the HTML output. For a value of 0 the output will use grayscales only. A</span></div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span> <span class="comment"># value of 255 will produce the most vivid colors.</span></div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span> <span class="comment"># Minimum value: 0, maximum value: 255, default value: 100.</span></div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span> <span class="comment"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span> <span class="comment"></span></div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span> <span class="comment">HTML_COLORSTYLE_SAT = 100</span></div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span> <span class="comment"></span></div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span> <span class="comment"># The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the</span></div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span> <span class="comment"># luminance component of the colors in the HTML output. Values below 100</span></div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span> <span class="comment"># gradually make the output lighter, whereas values above 100 make the output</span></div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span> <span class="comment"># darker. The value divided by 100 is the actual gamma applied, so 80 represents</span></div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span> <span class="comment"># a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not</span></div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span> <span class="comment"># change the gamma.</span></div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span> <span class="comment"># Minimum value: 40, maximum value: 240, default value: 80.</span></div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span> <span class="comment"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span> <span class="comment"></span></div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span> <span class="comment">HTML_COLORSTYLE_GAMMA = 80</span></div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span> <span class="comment"></span></div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span> <span class="comment"># If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML</span></div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span> <span class="comment"># page will contain the date and time when the page was generated. Setting this</span></div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span> <span class="comment"># to YES can help to show when doxygen was last run and thus if the</span></div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span> <span class="comment"># documentation is up to date.</span></div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span> <span class="comment"># The default value is: NO.</span></div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span> <span class="comment"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span> <span class="comment"></span></div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span> <span class="comment">HTML_TIMESTAMP = NO</span></div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span> <span class="comment"></span></div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span> <span class="comment"># If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML</span></div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span> <span class="comment"># documentation will contain sections that can be hidden and shown after the</span></div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span> <span class="comment"># page has loaded.</span></div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span> <span class="comment"># The default value is: NO.</span></div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span> <span class="comment"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span> <span class="comment"></span></div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span> <span class="comment">HTML_DYNAMIC_SECTIONS = NO</span></div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span> <span class="comment"></span></div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span> <span class="comment"># With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries</span></div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span> <span class="comment"># shown in the various tree structured indices initially; the user can expand</span></div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span> <span class="comment"># and collapse entries dynamically later on. Doxygen will expand the tree to</span></div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span> <span class="comment"># such a level that at most the specified number of entries are visible (unless</span></div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span> <span class="comment"># a fully collapsed tree already exceeds this amount). So setting the number of</span></div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span> <span class="comment"># entries 1 will produce a full collapsed tree by default. 0 is a special value</span></div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span> <span class="comment"># representing an infinite number of entries and will result in a full expanded</span></div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span> <span class="comment"># tree by default.</span></div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span> <span class="comment"># Minimum value: 0, maximum value: 9999, default value: 100.</span></div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span> <span class="comment"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span> <span class="comment"></span></div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span> <span class="comment">HTML_INDEX_NUM_ENTRIES = 100</span></div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span> <span class="comment"></span></div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span> <span class="comment"># If the GENERATE_DOCSET tag is set to YES, additional index files will be</span></div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span> <span class="comment"># generated that can be used as input for Apple's Xcode 3 integrated development</span></div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span> <span class="comment"># environment (see: http://developer.apple.com/tools/xcode/), introduced with</span></div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span> <span class="comment"># OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a</span></div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span> <span class="comment"># Makefile in the HTML output directory. Running make will produce the docset in</span></div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span> <span class="comment"># that directory and running make install will install the docset in</span></div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span> <span class="comment"># ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at</span></div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span> <span class="comment"># startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html</span></div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span> <span class="comment"># for more information.</span></div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span> <span class="comment"># The default value is: NO.</span></div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span> <span class="comment"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span> <span class="comment"></span></div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span> <span class="comment">GENERATE_DOCSET = NO</span></div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span> <span class="comment"></span></div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span> <span class="comment"># This tag determines the name of the docset feed. A documentation feed provides</span></div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span> <span class="comment"># an umbrella under which multiple documentation sets from a single provider</span></div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span> <span class="comment"># (such as a company or product suite) can be grouped.</span></div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span> <span class="comment"># The default value is: Doxygen generated docs.</span></div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span> <span class="comment"># This tag requires that the tag GENERATE_DOCSET is set to YES.</span></div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span> <span class="comment"></span></div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span> <span class="comment">DOCSET_FEEDNAME = "Doxygen generated docs"</span></div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span> <span class="comment"></span></div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span> <span class="comment"># This tag specifies a string that should uniquely identify the documentation</span></div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span> <span class="comment"># set bundle. This should be a reverse domain-name style string, e.g.</span></div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span> <span class="comment"># com.mycompany.MyDocSet. Doxygen will append .docset to the name.</span></div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span> <span class="comment"># The default value is: org.doxygen.Project.</span></div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span> <span class="comment"># This tag requires that the tag GENERATE_DOCSET is set to YES.</span></div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span> <span class="comment"></span></div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span> <span class="comment">DOCSET_BUNDLE_ID = org.doxygen.Project</span></div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span> <span class="comment"></span></div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span> <span class="comment"># The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify</span></div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span> <span class="comment"># the documentation publisher. This should be a reverse domain-name style</span></div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span> <span class="comment"># string, e.g. com.mycompany.MyDocSet.documentation.</span></div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span> <span class="comment"># The default value is: org.doxygen.Publisher.</span></div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span> <span class="comment"># This tag requires that the tag GENERATE_DOCSET is set to YES.</span></div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span> <span class="comment"></span></div>
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span> <span class="comment">DOCSET_PUBLISHER_ID = org.doxygen.Publisher</span></div>
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span> <span class="comment"></span></div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span> <span class="comment"># The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.</span></div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span> <span class="comment"># The default value is: Publisher.</span></div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span> <span class="comment"># This tag requires that the tag GENERATE_DOCSET is set to YES.</span></div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span> <span class="comment"></span></div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span> <span class="comment">DOCSET_PUBLISHER_NAME = Publisher</span></div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span> <span class="comment"></span></div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span> <span class="comment"># If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three</span></div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span> <span class="comment"># additional HTML index files: index.hhp, index.hhc, and index.hhk. The</span></div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span> <span class="comment"># index.hhp is a project file that can be read by Microsoft's HTML Help Workshop</span></div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span> <span class="comment"># (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on</span></div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span> <span class="comment"># Windows.</span></div>
+<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span> <span class="comment">#</span></div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span> <span class="comment"># The HTML Help Workshop contains a compiler that can convert all HTML output</span></div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span> <span class="comment"># generated by doxygen into a single compiled HTML file (.chm). Compiled HTML</span></div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span> <span class="comment"># files are now used as the Windows 98 help format, and will replace the old</span></div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span> <span class="comment"># Windows help format (.hlp) on all Windows platforms in the future. Compressed</span></div>
+<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span> <span class="comment"># HTML files also contain an index, a table of contents, and you can search for</span></div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span> <span class="comment"># words in the documentation. The HTML workshop also contains a viewer for</span></div>
+<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span> <span class="comment"># compressed HTML files.</span></div>
+<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span> <span class="comment"># The default value is: NO.</span></div>
+<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span> <span class="comment"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>
+<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span> <span class="comment"></span></div>
+<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span> <span class="comment">GENERATE_HTMLHELP = NO</span></div>
+<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span> <span class="comment"></span></div>
+<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span> <span class="comment"># The CHM_FILE tag can be used to specify the file name of the resulting .chm</span></div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span> <span class="comment"># file. You can add a path in front of the file if the result should not be</span></div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span> <span class="comment"># written to the html output directory.</span></div>
+<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span> <span class="comment"># This tag requires that the tag GENERATE_HTMLHELP is set to YES.</span></div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span> <span class="comment"></span></div>
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span> <span class="comment">CHM_FILE = </span></div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span> <span class="comment"></span></div>
+<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span> <span class="comment"># The HHC_LOCATION tag can be used to specify the location (absolute path</span></div>
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span> <span class="comment"># including file name) of the HTML help compiler (hhc.exe). If non-empty,</span></div>
+<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span> <span class="comment"># doxygen will try to run the HTML help compiler on the generated index.hhp.</span></div>
+<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span> <span class="comment"># The file has to be specified with full path.</span></div>
+<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span> <span class="comment"># This tag requires that the tag GENERATE_HTMLHELP is set to YES.</span></div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span> <span class="comment"></span></div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span> <span class="comment">HHC_LOCATION = </span></div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span> <span class="comment"></span></div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span> <span class="comment"># The GENERATE_CHI flag controls if a separate .chi index file is generated</span></div>
+<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span> <span class="comment"># (YES) or that it should be included in the master .chm file (NO).</span></div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span> <span class="comment"># The default value is: NO.</span></div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span> <span class="comment"># This tag requires that the tag GENERATE_HTMLHELP is set to YES.</span></div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span> <span class="comment"></span></div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span> <span class="comment">GENERATE_CHI = NO</span></div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span> <span class="comment"></span></div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span> <span class="comment"># The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)</span></div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span> <span class="comment"># and project file content.</span></div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span> <span class="comment"># This tag requires that the tag GENERATE_HTMLHELP is set to YES.</span></div>
+<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span> <span class="comment"></span></div>
+<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span> <span class="comment">CHM_INDEX_ENCODING = </span></div>
+<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span> <span class="comment"></span></div>
+<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span> <span class="comment"># The BINARY_TOC flag controls whether a binary table of contents is generated</span></div>
+<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span> <span class="comment"># (YES) or a normal table of contents (NO) in the .chm file. Furthermore it</span></div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span> <span class="comment"># enables the Previous and Next buttons.</span></div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span> <span class="comment"># The default value is: NO.</span></div>
+<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span> <span class="comment"># This tag requires that the tag GENERATE_HTMLHELP is set to YES.</span></div>
+<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span> <span class="comment"></span></div>
+<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span> <span class="comment">BINARY_TOC = NO</span></div>
+<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span> <span class="comment"></span></div>
+<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span> <span class="comment"># The TOC_EXPAND flag can be set to YES to add extra items for group members to</span></div>
+<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span> <span class="comment"># the table of contents of the HTML help documentation and to the tree view.</span></div>
+<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span> <span class="comment"># The default value is: NO.</span></div>
+<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span> <span class="comment"># This tag requires that the tag GENERATE_HTMLHELP is set to YES.</span></div>
+<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span> <span class="comment"></span></div>
+<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span> <span class="comment">TOC_EXPAND = NO</span></div>
+<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span> <span class="comment"></span></div>
+<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span> <span class="comment"># If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and</span></div>
+<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span> <span class="comment"># QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that</span></div>
+<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span> <span class="comment"># can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help</span></div>
+<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span> <span class="comment"># (.qch) of the generated HTML documentation.</span></div>
+<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span> <span class="comment"># The default value is: NO.</span></div>
+<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span> <span class="comment"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>
+<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span> <span class="comment"></span></div>
+<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span> <span class="comment">GENERATE_QHP = NO</span></div>
+<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span> <span class="comment"></span></div>
+<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span> <span class="comment"># If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify</span></div>
+<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span> <span class="comment"># the file name of the resulting .qch file. The path specified is relative to</span></div>
+<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span> <span class="comment"># the HTML output folder.</span></div>
+<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span> <span class="comment"># This tag requires that the tag GENERATE_QHP is set to YES.</span></div>
+<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span> <span class="comment"></span></div>
+<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span> <span class="comment">QCH_FILE = </span></div>
+<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span> <span class="comment"></span></div>
+<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span> <span class="comment"># The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help</span></div>
+<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span> <span class="comment"># Project output. For more information please see Qt Help Project / Namespace</span></div>
+<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span> <span class="comment"># (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).</span></div>
+<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span> <span class="comment"># The default value is: org.doxygen.Project.</span></div>
+<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span> <span class="comment"># This tag requires that the tag GENERATE_QHP is set to YES.</span></div>
+<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span> <span class="comment"></span></div>
+<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span> <span class="comment">QHP_NAMESPACE = org.doxygen.Project</span></div>
+<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span> <span class="comment"></span></div>
+<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span> <span class="comment"># The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt</span></div>
+<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span> <span class="comment"># Help Project output. For more information please see Qt Help Project / Virtual</span></div>
+<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span> <span class="comment"># Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-</span></div>
+<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span> <span class="comment"># folders).</span></div>
+<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span> <span class="comment"># The default value is: doc.</span></div>
+<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span> <span class="comment"># This tag requires that the tag GENERATE_QHP is set to YES.</span></div>
+<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span> <span class="comment"></span></div>
+<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span> <span class="comment">QHP_VIRTUAL_FOLDER = doc</span></div>
+<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span> <span class="comment"></span></div>
+<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span> <span class="comment"># If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom</span></div>
+<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span> <span class="comment"># filter to add. For more information please see Qt Help Project / Custom</span></div>
+<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span> <span class="comment"># Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-</span></div>
+<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span> <span class="comment"># filters).</span></div>
+<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span> <span class="comment"># This tag requires that the tag GENERATE_QHP is set to YES.</span></div>
+<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span> <span class="comment"></span></div>
+<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span> <span class="comment">QHP_CUST_FILTER_NAME = </span></div>
+<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span> <span class="comment"></span></div>
+<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span> <span class="comment"># The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the</span></div>
+<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span> <span class="comment"># custom filter to add. For more information please see Qt Help Project / Custom</span></div>
+<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span> <span class="comment"># Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-</span></div>
+<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span> <span class="comment"># filters).</span></div>
+<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span> <span class="comment"># This tag requires that the tag GENERATE_QHP is set to YES.</span></div>
+<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span> <span class="comment"></span></div>
+<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span> <span class="comment">QHP_CUST_FILTER_ATTRS = </span></div>
+<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span> <span class="comment"></span></div>
+<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span> <span class="comment"># The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this</span></div>
+<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span> <span class="comment"># project's filter section matches. Qt Help Project / Filter Attributes (see:</span></div>
+<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span> <span class="comment"># http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).</span></div>
+<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span> <span class="comment"># This tag requires that the tag GENERATE_QHP is set to YES.</span></div>
+<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span> <span class="comment"></span></div>
+<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span> <span class="comment">QHP_SECT_FILTER_ATTRS = </span></div>
+<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span> <span class="comment"></span></div>
+<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span> <span class="comment"># The QHG_LOCATION tag can be used to specify the location of Qt's</span></div>
+<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span> <span class="comment"># qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the</span></div>
+<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span> <span class="comment"># generated .qhp file.</span></div>
+<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span> <span class="comment"># This tag requires that the tag GENERATE_QHP is set to YES.</span></div>
+<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span> <span class="comment"></span></div>
+<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span> <span class="comment">QHG_LOCATION = </span></div>
+<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span> <span class="comment"></span></div>
+<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span> <span class="comment"># If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be</span></div>
+<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span> <span class="comment"># generated, together with the HTML files, they form an Eclipse help plugin. To</span></div>
+<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span> <span class="comment"># install this plugin and make it available under the help contents menu in</span></div>
+<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span> <span class="comment"># Eclipse, the contents of the directory containing the HTML and XML files needs</span></div>
+<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span> <span class="comment"># to be copied into the plugins directory of eclipse. The name of the directory</span></div>
+<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span> <span class="comment"># within the plugins directory should be the same as the ECLIPSE_DOC_ID value.</span></div>
+<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span> <span class="comment"># After copying Eclipse needs to be restarted before the help appears.</span></div>
+<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span> <span class="comment"># The default value is: NO.</span></div>
+<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span> <span class="comment"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>
+<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span> <span class="comment"></span></div>
+<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span> <span class="comment">GENERATE_ECLIPSEHELP = NO</span></div>
+<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span> <span class="comment"></span></div>
+<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span> <span class="comment"># A unique identifier for the Eclipse help plugin. When installing the plugin</span></div>
+<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span> <span class="comment"># the directory name containing the HTML and XML files should also have this</span></div>
+<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span> <span class="comment"># name. Each documentation set should have its own identifier.</span></div>
+<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span> <span class="comment"># The default value is: org.doxygen.Project.</span></div>
+<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span> <span class="comment"># This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.</span></div>
+<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span> <span class="comment"></span></div>
+<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span> <span class="comment">ECLIPSE_DOC_ID = org.doxygen.Project</span></div>
+<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span> <span class="comment"></span></div>
+<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span> <span class="comment"># If you want full control over the layout of the generated HTML pages it might</span></div>
+<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span> <span class="comment"># be necessary to disable the index and replace it with your own. The</span></div>
+<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span> <span class="comment"># DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top</span></div>
+<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span> <span class="comment"># of each HTML page. A value of NO enables the index and the value YES disables</span></div>
+<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span> <span class="comment"># it. Since the tabs in the index contain the same information as the navigation</span></div>
+<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span> <span class="comment"># tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.</span></div>
+<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span> <span class="comment"># The default value is: NO.</span></div>
+<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span> <span class="comment"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>
+<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span> <span class="comment"></span></div>
+<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span> <span class="comment">DISABLE_INDEX = NO</span></div>
+<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span> <span class="comment"></span></div>
+<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span> <span class="comment"># The GENERATE_TREEVIEW tag is used to specify whether a tree-like index</span></div>
+<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span> <span class="comment"># structure should be generated to display hierarchical information. If the tag</span></div>
+<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span> <span class="comment"># value is set to YES, a side panel will be generated containing a tree-like</span></div>
+<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span> <span class="comment"># index structure (just like the one that is generated for HTML Help). For this</span></div>
+<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span> <span class="comment"># to work a browser that supports JavaScript, DHTML, CSS and frames is required</span></div>
+<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span> <span class="comment"># (i.e. any modern browser). Windows users are probably better off using the</span></div>
+<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span> <span class="comment"># HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can</span></div>
+<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span> <span class="comment"># further fine-tune the look of the index. As an example, the default style</span></div>
+<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span> <span class="comment"># sheet generated by doxygen has an example that shows how to put an image at</span></div>
+<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span> <span class="comment"># the root of the tree instead of the PROJECT_NAME. Since the tree basically has</span></div>
+<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span> <span class="comment"># the same information as the tab index, you could consider setting</span></div>
+<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span> <span class="comment"># DISABLE_INDEX to YES when enabling this option.</span></div>
+<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span> <span class="comment"># The default value is: NO.</span></div>
+<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span> <span class="comment"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>
+<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span> <span class="comment"></span></div>
+<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span> <span class="comment">GENERATE_TREEVIEW = NO</span></div>
+<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span> <span class="comment"></span></div>
+<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span> <span class="comment"># The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that</span></div>
+<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span> <span class="comment"># doxygen will group on one line in the generated HTML documentation.</span></div>
+<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span> <span class="comment">#</span></div>
+<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span> <span class="comment"># Note that a value of 0 will completely suppress the enum values from appearing</span></div>
+<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span> <span class="comment"># in the overview section.</span></div>
+<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span> <span class="comment"># Minimum value: 0, maximum value: 20, default value: 4.</span></div>
+<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span> <span class="comment"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>
+<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span> <span class="comment"></span></div>
+<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span> <span class="comment">ENUM_VALUES_PER_LINE = 4</span></div>
+<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span> <span class="comment"></span></div>
+<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span> <span class="comment"># If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used</span></div>
+<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span> <span class="comment"># to set the initial width (in pixels) of the frame in which the tree is shown.</span></div>
+<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span> <span class="comment"># Minimum value: 0, maximum value: 1500, default value: 250.</span></div>
+<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span> <span class="comment"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>
+<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span> <span class="comment"></span></div>
+<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span> <span class="comment">TREEVIEW_WIDTH = 250</span></div>
+<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span> <span class="comment"></span></div>
+<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span> <span class="comment"># If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to</span></div>
+<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span> <span class="comment"># external symbols imported via tag files in a separate window.</span></div>
+<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span> <span class="comment"># The default value is: NO.</span></div>
+<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span> <span class="comment"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>
+<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span> <span class="comment"></span></div>
+<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span> <span class="comment">EXT_LINKS_IN_WINDOW = NO</span></div>
+<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span> <span class="comment"></span></div>
+<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span> <span class="comment"># Use this tag to change the font size of LaTeX formulas included as images in</span></div>
+<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span> <span class="comment"># the HTML documentation. When you change the font size after a successful</span></div>
+<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span> <span class="comment"># doxygen run you need to manually remove any form_*.png images from the HTML</span></div>
+<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span> <span class="comment"># output directory to force them to be regenerated.</span></div>
+<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span> <span class="comment"># Minimum value: 8, maximum value: 50, default value: 10.</span></div>
+<div class="line"><a name="l01429"></a><span class="lineno"> 1429</span> <span class="comment"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>
+<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span> <span class="comment"></span></div>
+<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span> <span class="comment">FORMULA_FONTSIZE = 10</span></div>
+<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span> <span class="comment"></span></div>
+<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span> <span class="comment"># Use the FORMULA_TRANPARENT tag to determine whether or not the images</span></div>
+<div class="line"><a name="l01434"></a><span class="lineno"> 1434</span> <span class="comment"># generated for formulas are transparent PNGs. Transparent PNGs are not</span></div>
+<div class="line"><a name="l01435"></a><span class="lineno"> 1435</span> <span class="comment"># supported properly for IE 6.0, but are supported on all modern browsers.</span></div>
+<div class="line"><a name="l01436"></a><span class="lineno"> 1436</span> <span class="comment">#</span></div>
+<div class="line"><a name="l01437"></a><span class="lineno"> 1437</span> <span class="comment"># Note that when changing this option you need to delete any form_*.png files in</span></div>
+<div class="line"><a name="l01438"></a><span class="lineno"> 1438</span> <span class="comment"># the HTML output directory before the changes have effect.</span></div>
+<div class="line"><a name="l01439"></a><span class="lineno"> 1439</span> <span class="comment"># The default value is: YES.</span></div>
+<div class="line"><a name="l01440"></a><span class="lineno"> 1440</span> <span class="comment"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>
+<div class="line"><a name="l01441"></a><span class="lineno"> 1441</span> <span class="comment"></span></div>
+<div class="line"><a name="l01442"></a><span class="lineno"> 1442</span> <span class="comment">FORMULA_TRANSPARENT = YES</span></div>
+<div class="line"><a name="l01443"></a><span class="lineno"> 1443</span> <span class="comment"></span></div>
+<div class="line"><a name="l01444"></a><span class="lineno"> 1444</span> <span class="comment"># Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see</span></div>
+<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span> <span class="comment"># http://www.mathjax.org) which uses client side Javascript for the rendering</span></div>
+<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span> <span class="comment"># instead of using pre-rendered bitmaps. Use this if you do not have LaTeX</span></div>
+<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span> <span class="comment"># installed or if you want to formulas look prettier in the HTML output. When</span></div>
+<div class="line"><a name="l01448"></a><span class="lineno"> 1448</span> <span class="comment"># enabled you may also need to install MathJax separately and configure the path</span></div>
+<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span> <span class="comment"># to it using the MATHJAX_RELPATH option.</span></div>
+<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span> <span class="comment"># The default value is: NO.</span></div>
+<div class="line"><a name="l01451"></a><span class="lineno"> 1451</span> <span class="comment"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>
+<div class="line"><a name="l01452"></a><span class="lineno"> 1452</span> <span class="comment"></span></div>
+<div class="line"><a name="l01453"></a><span class="lineno"> 1453</span> <span class="comment">USE_MATHJAX = NO</span></div>
+<div class="line"><a name="l01454"></a><span class="lineno"> 1454</span> <span class="comment"></span></div>
+<div class="line"><a name="l01455"></a><span class="lineno"> 1455</span> <span class="comment"># When MathJax is enabled you can set the default output format to be used for</span></div>
+<div class="line"><a name="l01456"></a><span class="lineno"> 1456</span> <span class="comment"># the MathJax output. See the MathJax site (see:</span></div>
+<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span> <span class="comment"># http://docs.mathjax.org/en/latest/output.html) for more details.</span></div>
+<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span> <span class="comment"># Possible values are: HTML-CSS (which is slower, but has the best</span></div>
+<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span> <span class="comment"># compatibility), NativeMML (i.e. MathML) and SVG.</span></div>
+<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span> <span class="comment"># The default value is: HTML-CSS.</span></div>
+<div class="line"><a name="l01461"></a><span class="lineno"> 1461</span> <span class="comment"># This tag requires that the tag USE_MATHJAX is set to YES.</span></div>
+<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span> <span class="comment"></span></div>
+<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span> <span class="comment">MATHJAX_FORMAT = HTML-CSS</span></div>
+<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span> <span class="comment"></span></div>
+<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span> <span class="comment"># When MathJax is enabled you need to specify the location relative to the HTML</span></div>
+<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span> <span class="comment"># output directory using the MATHJAX_RELPATH option. The destination directory</span></div>
+<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span> <span class="comment"># should contain the MathJax.js script. For instance, if the mathjax directory</span></div>
+<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span> <span class="comment"># is located at the same level as the HTML output directory, then</span></div>
+<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span> <span class="comment"># MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax</span></div>
+<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span> <span class="comment"># Content Delivery Network so you can quickly see the result without installing</span></div>
+<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span> <span class="comment"># MathJax. However, it is strongly recommended to install a local copy of</span></div>
+<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span> <span class="comment"># MathJax from http://www.mathjax.org before deployment.</span></div>
+<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span> <span class="comment"># The default value is: http://cdn.mathjax.org/mathjax/latest.</span></div>
+<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span> <span class="comment"># This tag requires that the tag USE_MATHJAX is set to YES.</span></div>
+<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span> <span class="comment"></span></div>
+<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span> <span class="comment">MATHJAX_RELPATH = http://www.mathjax.org/mathjax</span></div>
+<div class="line"><a name="l01477"></a><span class="lineno"> 1477</span> <span class="comment"></span></div>
+<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span> <span class="comment"># The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax</span></div>
+<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span> <span class="comment"># extension names that should be enabled during MathJax rendering. For example</span></div>
+<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span> <span class="comment"># MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols</span></div>
+<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span> <span class="comment"># This tag requires that the tag USE_MATHJAX is set to YES.</span></div>
+<div class="line"><a name="l01482"></a><span class="lineno"> 1482</span> <span class="comment"></span></div>
+<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span> <span class="comment">MATHJAX_EXTENSIONS = </span></div>
+<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span> <span class="comment"></span></div>
+<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span> <span class="comment"># The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces</span></div>
+<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span> <span class="comment"># of code that will be used on startup of the MathJax code. See the MathJax site</span></div>
+<div class="line"><a name="l01487"></a><span class="lineno"> 1487</span> <span class="comment"># (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an</span></div>
+<div class="line"><a name="l01488"></a><span class="lineno"> 1488</span> <span class="comment"># example see the documentation.</span></div>
+<div class="line"><a name="l01489"></a><span class="lineno"> 1489</span> <span class="comment"># This tag requires that the tag USE_MATHJAX is set to YES.</span></div>
+<div class="line"><a name="l01490"></a><span class="lineno"> 1490</span> <span class="comment"></span></div>
+<div class="line"><a name="l01491"></a><span class="lineno"> 1491</span> <span class="comment">MATHJAX_CODEFILE = </span></div>
+<div class="line"><a name="l01492"></a><span class="lineno"> 1492</span> <span class="comment"></span></div>
+<div class="line"><a name="l01493"></a><span class="lineno"> 1493</span> <span class="comment"># When the SEARCHENGINE tag is enabled doxygen will generate a search box for</span></div>
+<div class="line"><a name="l01494"></a><span class="lineno"> 1494</span> <span class="comment"># the HTML output. The underlying search engine uses javascript and DHTML and</span></div>
+<div class="line"><a name="l01495"></a><span class="lineno"> 1495</span> <span class="comment"># should work on any modern browser. Note that when using HTML help</span></div>
+<div class="line"><a name="l01496"></a><span class="lineno"> 1496</span> <span class="comment"># (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)</span></div>
+<div class="line"><a name="l01497"></a><span class="lineno"> 1497</span> <span class="comment"># there is already a search function so this one should typically be disabled.</span></div>
+<div class="line"><a name="l01498"></a><span class="lineno"> 1498</span> <span class="comment"># For large projects the javascript based search engine can be slow, then</span></div>
+<div class="line"><a name="l01499"></a><span class="lineno"> 1499</span> <span class="comment"># enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to</span></div>
+<div class="line"><a name="l01500"></a><span class="lineno"> 1500</span> <span class="comment"># search using the keyboard; to jump to the search box use <access key> + S</span></div>
+<div class="line"><a name="l01501"></a><span class="lineno"> 1501</span> <span class="comment"># (what the <access key> is depends on the OS and browser, but it is typically</span></div>
+<div class="line"><a name="l01502"></a><span class="lineno"> 1502</span> <span class="comment"># <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down</span></div>
+<div class="line"><a name="l01503"></a><span class="lineno"> 1503</span> <span class="comment"># key> to jump into the search results window, the results can be navigated</span></div>
+<div class="line"><a name="l01504"></a><span class="lineno"> 1504</span> <span class="comment"># using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel</span></div>
+<div class="line"><a name="l01505"></a><span class="lineno"> 1505</span> <span class="comment"># the search. The filter options can be selected when the cursor is inside the</span></div>
+<div class="line"><a name="l01506"></a><span class="lineno"> 1506</span> <span class="comment"># search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys></span></div>
+<div class="line"><a name="l01507"></a><span class="lineno"> 1507</span> <span class="comment"># to select a filter and <Enter> or <escape> to activate or cancel the filter</span></div>
+<div class="line"><a name="l01508"></a><span class="lineno"> 1508</span> <span class="comment"># option.</span></div>
+<div class="line"><a name="l01509"></a><span class="lineno"> 1509</span> <span class="comment"># The default value is: YES.</span></div>
+<div class="line"><a name="l01510"></a><span class="lineno"> 1510</span> <span class="comment"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>
+<div class="line"><a name="l01511"></a><span class="lineno"> 1511</span> <span class="comment"></span></div>
+<div class="line"><a name="l01512"></a><span class="lineno"> 1512</span> <span class="comment">SEARCHENGINE = NO</span></div>
+<div class="line"><a name="l01513"></a><span class="lineno"> 1513</span> <span class="comment"></span></div>
+<div class="line"><a name="l01514"></a><span class="lineno"> 1514</span> <span class="comment"># When the SERVER_BASED_SEARCH tag is enabled the search engine will be</span></div>
+<div class="line"><a name="l01515"></a><span class="lineno"> 1515</span> <span class="comment"># implemented using a web server instead of a web client using Javascript. There</span></div>
+<div class="line"><a name="l01516"></a><span class="lineno"> 1516</span> <span class="comment"># are two flavors of web server based searching depending on the EXTERNAL_SEARCH</span></div>
+<div class="line"><a name="l01517"></a><span class="lineno"> 1517</span> <span class="comment"># setting. When disabled, doxygen will generate a PHP script for searching and</span></div>
+<div class="line"><a name="l01518"></a><span class="lineno"> 1518</span> <span class="comment"># an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing</span></div>
+<div class="line"><a name="l01519"></a><span class="lineno"> 1519</span> <span class="comment"># and searching needs to be provided by external tools. See the section</span></div>
+<div class="line"><a name="l01520"></a><span class="lineno"> 1520</span> <span class="comment"># "External Indexing and Searching" for details.</span></div>
+<div class="line"><a name="l01521"></a><span class="lineno"> 1521</span> <span class="comment"># The default value is: NO.</span></div>
+<div class="line"><a name="l01522"></a><span class="lineno"> 1522</span> <span class="comment"># This tag requires that the tag SEARCHENGINE is set to YES.</span></div>
+<div class="line"><a name="l01523"></a><span class="lineno"> 1523</span> <span class="comment"></span></div>
+<div class="line"><a name="l01524"></a><span class="lineno"> 1524</span> <span class="comment">SERVER_BASED_SEARCH = NO</span></div>
+<div class="line"><a name="l01525"></a><span class="lineno"> 1525</span> <span class="comment"></span></div>
+<div class="line"><a name="l01526"></a><span class="lineno"> 1526</span> <span class="comment"># When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP</span></div>
+<div class="line"><a name="l01527"></a><span class="lineno"> 1527</span> <span class="comment"># script for searching. Instead the search results are written to an XML file</span></div>
+<div class="line"><a name="l01528"></a><span class="lineno"> 1528</span> <span class="comment"># which needs to be processed by an external indexer. Doxygen will invoke an</span></div>
+<div class="line"><a name="l01529"></a><span class="lineno"> 1529</span> <span class="comment"># external search engine pointed to by the SEARCHENGINE_URL option to obtain the</span></div>
+<div class="line"><a name="l01530"></a><span class="lineno"> 1530</span> <span class="comment"># search results.</span></div>
+<div class="line"><a name="l01531"></a><span class="lineno"> 1531</span> <span class="comment">#</span></div>
+<div class="line"><a name="l01532"></a><span class="lineno"> 1532</span> <span class="comment"># Doxygen ships with an example indexer (doxyindexer) and search engine</span></div>
+<div class="line"><a name="l01533"></a><span class="lineno"> 1533</span> <span class="comment"># (doxysearch.cgi) which are based on the open source search engine library</span></div>
+<div class="line"><a name="l01534"></a><span class="lineno"> 1534</span> <span class="comment"># Xapian (see: http://xapian.org/).</span></div>
+<div class="line"><a name="l01535"></a><span class="lineno"> 1535</span> <span class="comment">#</span></div>
+<div class="line"><a name="l01536"></a><span class="lineno"> 1536</span> <span class="comment"># See the section "External Indexing and Searching" for details.</span></div>
+<div class="line"><a name="l01537"></a><span class="lineno"> 1537</span> <span class="comment"># The default value is: NO.</span></div>
+<div class="line"><a name="l01538"></a><span class="lineno"> 1538</span> <span class="comment"># This tag requires that the tag SEARCHENGINE is set to YES.</span></div>
+<div class="line"><a name="l01539"></a><span class="lineno"> 1539</span> <span class="comment"></span></div>
+<div class="line"><a name="l01540"></a><span class="lineno"> 1540</span> <span class="comment">EXTERNAL_SEARCH = NO</span></div>
+<div class="line"><a name="l01541"></a><span class="lineno"> 1541</span> <span class="comment"></span></div>
+<div class="line"><a name="l01542"></a><span class="lineno"> 1542</span> <span class="comment"># The SEARCHENGINE_URL should point to a search engine hosted by a web server</span></div>
+<div class="line"><a name="l01543"></a><span class="lineno"> 1543</span> <span class="comment"># which will return the search results when EXTERNAL_SEARCH is enabled.</span></div>
+<div class="line"><a name="l01544"></a><span class="lineno"> 1544</span> <span class="comment">#</span></div>
+<div class="line"><a name="l01545"></a><span class="lineno"> 1545</span> <span class="comment"># Doxygen ships with an example indexer (doxyindexer) and search engine</span></div>
+<div class="line"><a name="l01546"></a><span class="lineno"> 1546</span> <span class="comment"># (doxysearch.cgi) which are based on the open source search engine library</span></div>
+<div class="line"><a name="l01547"></a><span class="lineno"> 1547</span> <span class="comment"># Xapian (see: http://xapian.org/). See the section "External Indexing and</span></div>
+<div class="line"><a name="l01548"></a><span class="lineno"> 1548</span> <span class="comment"># Searching" for details.</span></div>
+<div class="line"><a name="l01549"></a><span class="lineno"> 1549</span> <span class="comment"># This tag requires that the tag SEARCHENGINE is set to YES.</span></div>
+<div class="line"><a name="l01550"></a><span class="lineno"> 1550</span> <span class="comment"></span></div>
+<div class="line"><a name="l01551"></a><span class="lineno"> 1551</span> <span class="comment">SEARCHENGINE_URL = </span></div>
+<div class="line"><a name="l01552"></a><span class="lineno"> 1552</span> <span class="comment"></span></div>
+<div class="line"><a name="l01553"></a><span class="lineno"> 1553</span> <span class="comment"># When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed</span></div>
+<div class="line"><a name="l01554"></a><span class="lineno"> 1554</span> <span class="comment"># search data is written to a file for indexing by an external tool. With the</span></div>
+<div class="line"><a name="l01555"></a><span class="lineno"> 1555</span> <span class="comment"># SEARCHDATA_FILE tag the name of this file can be specified.</span></div>
+<div class="line"><a name="l01556"></a><span class="lineno"> 1556</span> <span class="comment"># The default file is: searchdata.xml.</span></div>
+<div class="line"><a name="l01557"></a><span class="lineno"> 1557</span> <span class="comment"># This tag requires that the tag SEARCHENGINE is set to YES.</span></div>
+<div class="line"><a name="l01558"></a><span class="lineno"> 1558</span> <span class="comment"></span></div>
+<div class="line"><a name="l01559"></a><span class="lineno"> 1559</span> <span class="comment">SEARCHDATA_FILE = searchdata.xml</span></div>
+<div class="line"><a name="l01560"></a><span class="lineno"> 1560</span> <span class="comment"></span></div>
+<div class="line"><a name="l01561"></a><span class="lineno"> 1561</span> <span class="comment"># When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the</span></div>
+<div class="line"><a name="l01562"></a><span class="lineno"> 1562</span> <span class="comment"># EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is</span></div>
+<div class="line"><a name="l01563"></a><span class="lineno"> 1563</span> <span class="comment"># useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple</span></div>
+<div class="line"><a name="l01564"></a><span class="lineno"> 1564</span> <span class="comment"># projects and redirect the results back to the right project.</span></div>
+<div class="line"><a name="l01565"></a><span class="lineno"> 1565</span> <span class="comment"># This tag requires that the tag SEARCHENGINE is set to YES.</span></div>
+<div class="line"><a name="l01566"></a><span class="lineno"> 1566</span> <span class="comment"></span></div>
+<div class="line"><a name="l01567"></a><span class="lineno"> 1567</span> <span class="comment">EXTERNAL_SEARCH_ID = </span></div>
+<div class="line"><a name="l01568"></a><span class="lineno"> 1568</span> <span class="comment"></span></div>
+<div class="line"><a name="l01569"></a><span class="lineno"> 1569</span> <span class="comment"># The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen</span></div>
+<div class="line"><a name="l01570"></a><span class="lineno"> 1570</span> <span class="comment"># projects other than the one defined by this configuration file, but that are</span></div>
+<div class="line"><a name="l01571"></a><span class="lineno"> 1571</span> <span class="comment"># all added to the same external search index. Each project needs to have a</span></div>
+<div class="line"><a name="l01572"></a><span class="lineno"> 1572</span> <span class="comment"># unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of</span></div>
+<div class="line"><a name="l01573"></a><span class="lineno"> 1573</span> <span class="comment"># to a relative location where the documentation can be found. The format is:</span></div>
+<div class="line"><a name="l01574"></a><span class="lineno"> 1574</span> <span class="comment"># EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...</span></div>
+<div class="line"><a name="l01575"></a><span class="lineno"> 1575</span> <span class="comment"># This tag requires that the tag SEARCHENGINE is set to YES.</span></div>
+<div class="line"><a name="l01576"></a><span class="lineno"> 1576</span> <span class="comment"></span></div>
+<div class="line"><a name="l01577"></a><span class="lineno"> 1577</span> <span class="comment">EXTRA_SEARCH_MAPPINGS = </span></div>
+<div class="line"><a name="l01578"></a><span class="lineno"> 1578</span> <span class="comment"></span></div>
+<div class="line"><a name="l01579"></a><span class="lineno"> 1579</span> <span class="comment">#---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01580"></a><span class="lineno"> 1580</span> <span class="comment"># Configuration options related to the LaTeX output</span></div>
+<div class="line"><a name="l01581"></a><span class="lineno"> 1581</span> <span class="comment">#---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01582"></a><span class="lineno"> 1582</span> <span class="comment"></span></div>
+<div class="line"><a name="l01583"></a><span class="lineno"> 1583</span> <span class="comment"># If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.</span></div>
+<div class="line"><a name="l01584"></a><span class="lineno"> 1584</span> <span class="comment"># The default value is: YES.</span></div>
+<div class="line"><a name="l01585"></a><span class="lineno"> 1585</span> <span class="comment"></span></div>
+<div class="line"><a name="l01586"></a><span class="lineno"> 1586</span> <span class="comment">GENERATE_LATEX = NO</span></div>
+<div class="line"><a name="l01587"></a><span class="lineno"> 1587</span> <span class="comment"></span></div>
+<div class="line"><a name="l01588"></a><span class="lineno"> 1588</span> <span class="comment"># The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a</span></div>
+<div class="line"><a name="l01589"></a><span class="lineno"> 1589</span> <span class="comment"># relative path is entered the value of OUTPUT_DIRECTORY will be put in front of</span></div>
+<div class="line"><a name="l01590"></a><span class="lineno"> 1590</span> <span class="comment"># it.</span></div>
+<div class="line"><a name="l01591"></a><span class="lineno"> 1591</span> <span class="comment"># The default directory is: latex.</span></div>
+<div class="line"><a name="l01592"></a><span class="lineno"> 1592</span> <span class="comment"># This tag requires that the tag GENERATE_LATEX is set to YES.</span></div>
+<div class="line"><a name="l01593"></a><span class="lineno"> 1593</span> <span class="comment"></span></div>
+<div class="line"><a name="l01594"></a><span class="lineno"> 1594</span> <span class="comment">LATEX_OUTPUT = latex</span></div>
+<div class="line"><a name="l01595"></a><span class="lineno"> 1595</span> <span class="comment"></span></div>
+<div class="line"><a name="l01596"></a><span class="lineno"> 1596</span> <span class="comment"># The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be</span></div>
+<div class="line"><a name="l01597"></a><span class="lineno"> 1597</span> <span class="comment"># invoked.</span></div>
+<div class="line"><a name="l01598"></a><span class="lineno"> 1598</span> <span class="comment">#</span></div>
+<div class="line"><a name="l01599"></a><span class="lineno"> 1599</span> <span class="comment"># Note that when enabling USE_PDFLATEX this option is only used for generating</span></div>
+<div class="line"><a name="l01600"></a><span class="lineno"> 1600</span> <span class="comment"># bitmaps for formulas in the HTML output, but not in the Makefile that is</span></div>
+<div class="line"><a name="l01601"></a><span class="lineno"> 1601</span> <span class="comment"># written to the output directory.</span></div>
+<div class="line"><a name="l01602"></a><span class="lineno"> 1602</span> <span class="comment"># The default file is: latex.</span></div>
+<div class="line"><a name="l01603"></a><span class="lineno"> 1603</span> <span class="comment"># This tag requires that the tag GENERATE_LATEX is set to YES.</span></div>
+<div class="line"><a name="l01604"></a><span class="lineno"> 1604</span> <span class="comment"></span></div>
+<div class="line"><a name="l01605"></a><span class="lineno"> 1605</span> <span class="comment">LATEX_CMD_NAME = latex</span></div>
+<div class="line"><a name="l01606"></a><span class="lineno"> 1606</span> <span class="comment"></span></div>
+<div class="line"><a name="l01607"></a><span class="lineno"> 1607</span> <span class="comment"># The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate</span></div>
+<div class="line"><a name="l01608"></a><span class="lineno"> 1608</span> <span class="comment"># index for LaTeX.</span></div>
+<div class="line"><a name="l01609"></a><span class="lineno"> 1609</span> <span class="comment"># The default file is: makeindex.</span></div>
+<div class="line"><a name="l01610"></a><span class="lineno"> 1610</span> <span class="comment"># This tag requires that the tag GENERATE_LATEX is set to YES.</span></div>
+<div class="line"><a name="l01611"></a><span class="lineno"> 1611</span> <span class="comment"></span></div>
+<div class="line"><a name="l01612"></a><span class="lineno"> 1612</span> <span class="comment">MAKEINDEX_CMD_NAME = makeindex</span></div>
+<div class="line"><a name="l01613"></a><span class="lineno"> 1613</span> <span class="comment"></span></div>
+<div class="line"><a name="l01614"></a><span class="lineno"> 1614</span> <span class="comment"># If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX</span></div>
+<div class="line"><a name="l01615"></a><span class="lineno"> 1615</span> <span class="comment"># documents. This may be useful for small projects and may help to save some</span></div>
+<div class="line"><a name="l01616"></a><span class="lineno"> 1616</span> <span class="comment"># trees in general.</span></div>
+<div class="line"><a name="l01617"></a><span class="lineno"> 1617</span> <span class="comment"># The default value is: NO.</span></div>
+<div class="line"><a name="l01618"></a><span class="lineno"> 1618</span> <span class="comment"># This tag requires that the tag GENERATE_LATEX is set to YES.</span></div>
+<div class="line"><a name="l01619"></a><span class="lineno"> 1619</span> <span class="comment"></span></div>
+<div class="line"><a name="l01620"></a><span class="lineno"> 1620</span> <span class="comment">COMPACT_LATEX = NO</span></div>
+<div class="line"><a name="l01621"></a><span class="lineno"> 1621</span> <span class="comment"></span></div>
+<div class="line"><a name="l01622"></a><span class="lineno"> 1622</span> <span class="comment"># The PAPER_TYPE tag can be used to set the paper type that is used by the</span></div>
+<div class="line"><a name="l01623"></a><span class="lineno"> 1623</span> <span class="comment"># printer.</span></div>
+<div class="line"><a name="l01624"></a><span class="lineno"> 1624</span> <span class="comment"># Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x</span></div>
+<div class="line"><a name="l01625"></a><span class="lineno"> 1625</span> <span class="comment"># 14 inches) and executive (7.25 x 10.5 inches).</span></div>
+<div class="line"><a name="l01626"></a><span class="lineno"> 1626</span> <span class="comment"># The default value is: a4.</span></div>
+<div class="line"><a name="l01627"></a><span class="lineno"> 1627</span> <span class="comment"># This tag requires that the tag GENERATE_LATEX is set to YES.</span></div>
+<div class="line"><a name="l01628"></a><span class="lineno"> 1628</span> <span class="comment"></span></div>
+<div class="line"><a name="l01629"></a><span class="lineno"> 1629</span> <span class="comment">PAPER_TYPE = a4wide</span></div>
+<div class="line"><a name="l01630"></a><span class="lineno"> 1630</span> <span class="comment"></span></div>
+<div class="line"><a name="l01631"></a><span class="lineno"> 1631</span> <span class="comment"># The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names</span></div>
+<div class="line"><a name="l01632"></a><span class="lineno"> 1632</span> <span class="comment"># that should be included in the LaTeX output. The package can be specified just</span></div>
+<div class="line"><a name="l01633"></a><span class="lineno"> 1633</span> <span class="comment"># by its name or with the correct syntax as to be used with the LaTeX</span></div>
+<div class="line"><a name="l01634"></a><span class="lineno"> 1634</span> <span class="comment"># \usepackage command. To get the times font for instance you can specify :</span></div>
+<div class="line"><a name="l01635"></a><span class="lineno"> 1635</span> <span class="comment"># EXTRA_PACKAGES=times or EXTRA_PACKAGES={times}</span></div>
+<div class="line"><a name="l01636"></a><span class="lineno"> 1636</span> <span class="comment"># To use the option intlimits with the amsmath package you can specify:</span></div>
+<div class="line"><a name="l01637"></a><span class="lineno"> 1637</span> <span class="comment"># EXTRA_PACKAGES=[intlimits]{amsmath}</span></div>
+<div class="line"><a name="l01638"></a><span class="lineno"> 1638</span> <span class="comment"># If left blank no extra packages will be included.</span></div>
+<div class="line"><a name="l01639"></a><span class="lineno"> 1639</span> <span class="comment"># This tag requires that the tag GENERATE_LATEX is set to YES.</span></div>
+<div class="line"><a name="l01640"></a><span class="lineno"> 1640</span> <span class="comment"></span></div>
+<div class="line"><a name="l01641"></a><span class="lineno"> 1641</span> <span class="comment">EXTRA_PACKAGES = </span></div>
+<div class="line"><a name="l01642"></a><span class="lineno"> 1642</span> <span class="comment"></span></div>
+<div class="line"><a name="l01643"></a><span class="lineno"> 1643</span> <span class="comment"># The LATEX_HEADER tag can be used to specify a personal LaTeX header for the</span></div>
+<div class="line"><a name="l01644"></a><span class="lineno"> 1644</span> <span class="comment"># generated LaTeX document. The header should contain everything until the first</span></div>
+<div class="line"><a name="l01645"></a><span class="lineno"> 1645</span> <span class="comment"># chapter. If it is left blank doxygen will generate a standard header. See</span></div>
+<div class="line"><a name="l01646"></a><span class="lineno"> 1646</span> <span class="comment"># section "Doxygen usage" for information on how to let doxygen write the</span></div>
+<div class="line"><a name="l01647"></a><span class="lineno"> 1647</span> <span class="comment"># default header to a separate file.</span></div>
+<div class="line"><a name="l01648"></a><span class="lineno"> 1648</span> <span class="comment">#</span></div>
+<div class="line"><a name="l01649"></a><span class="lineno"> 1649</span> <span class="comment"># Note: Only use a user-defined header if you know what you are doing! The</span></div>
+<div class="line"><a name="l01650"></a><span class="lineno"> 1650</span> <span class="comment"># following commands have a special meaning inside the header: $title,</span></div>
+<div class="line"><a name="l01651"></a><span class="lineno"> 1651</span> <span class="comment"># $datetime, $date, $doxygenversion, $projectname, $projectnumber,</span></div>
+<div class="line"><a name="l01652"></a><span class="lineno"> 1652</span> <span class="comment"># $projectbrief, $projectlogo. Doxygen will replace $title with the empty</span></div>
+<div class="line"><a name="l01653"></a><span class="lineno"> 1653</span> <span class="comment"># string, for the replacement values of the other commands the user is referred</span></div>
+<div class="line"><a name="l01654"></a><span class="lineno"> 1654</span> <span class="comment"># to HTML_HEADER.</span></div>
+<div class="line"><a name="l01655"></a><span class="lineno"> 1655</span> <span class="comment"># This tag requires that the tag GENERATE_LATEX is set to YES.</span></div>
+<div class="line"><a name="l01656"></a><span class="lineno"> 1656</span> <span class="comment"></span></div>
+<div class="line"><a name="l01657"></a><span class="lineno"> 1657</span> <span class="comment">LATEX_HEADER = </span></div>
+<div class="line"><a name="l01658"></a><span class="lineno"> 1658</span> <span class="comment"></span></div>
+<div class="line"><a name="l01659"></a><span class="lineno"> 1659</span> <span class="comment"># The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the</span></div>
+<div class="line"><a name="l01660"></a><span class="lineno"> 1660</span> <span class="comment"># generated LaTeX document. The footer should contain everything after the last</span></div>
+<div class="line"><a name="l01661"></a><span class="lineno"> 1661</span> <span class="comment"># chapter. If it is left blank doxygen will generate a standard footer. See</span></div>
+<div class="line"><a name="l01662"></a><span class="lineno"> 1662</span> <span class="comment"># LATEX_HEADER for more information on how to generate a default footer and what</span></div>
+<div class="line"><a name="l01663"></a><span class="lineno"> 1663</span> <span class="comment"># special commands can be used inside the footer.</span></div>
+<div class="line"><a name="l01664"></a><span class="lineno"> 1664</span> <span class="comment">#</span></div>
+<div class="line"><a name="l01665"></a><span class="lineno"> 1665</span> <span class="comment"># Note: Only use a user-defined footer if you know what you are doing!</span></div>
+<div class="line"><a name="l01666"></a><span class="lineno"> 1666</span> <span class="comment"># This tag requires that the tag GENERATE_LATEX is set to YES.</span></div>
+<div class="line"><a name="l01667"></a><span class="lineno"> 1667</span> <span class="comment"></span></div>
+<div class="line"><a name="l01668"></a><span class="lineno"> 1668</span> <span class="comment">LATEX_FOOTER = </span></div>
+<div class="line"><a name="l01669"></a><span class="lineno"> 1669</span> <span class="comment"></span></div>
+<div class="line"><a name="l01670"></a><span class="lineno"> 1670</span> <span class="comment"># The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined</span></div>
+<div class="line"><a name="l01671"></a><span class="lineno"> 1671</span> <span class="comment"># LaTeX style sheets that are included after the standard style sheets created</span></div>
+<div class="line"><a name="l01672"></a><span class="lineno"> 1672</span> <span class="comment"># by doxygen. Using this option one can overrule certain style aspects. Doxygen</span></div>
+<div class="line"><a name="l01673"></a><span class="lineno"> 1673</span> <span class="comment"># will copy the style sheet files to the output directory.</span></div>
+<div class="line"><a name="l01674"></a><span class="lineno"> 1674</span> <span class="comment"># Note: The order of the extra style sheet files is of importance (e.g. the last</span></div>
+<div class="line"><a name="l01675"></a><span class="lineno"> 1675</span> <span class="comment"># style sheet in the list overrules the setting of the previous ones in the</span></div>
+<div class="line"><a name="l01676"></a><span class="lineno"> 1676</span> <span class="comment"># list).</span></div>
+<div class="line"><a name="l01677"></a><span class="lineno"> 1677</span> <span class="comment"># This tag requires that the tag GENERATE_LATEX is set to YES.</span></div>
+<div class="line"><a name="l01678"></a><span class="lineno"> 1678</span> <span class="comment"></span></div>
+<div class="line"><a name="l01679"></a><span class="lineno"> 1679</span> <span class="comment">LATEX_EXTRA_STYLESHEET = </span></div>
+<div class="line"><a name="l01680"></a><span class="lineno"> 1680</span> <span class="comment"></span></div>
+<div class="line"><a name="l01681"></a><span class="lineno"> 1681</span> <span class="comment"># The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or</span></div>
+<div class="line"><a name="l01682"></a><span class="lineno"> 1682</span> <span class="comment"># other source files which should be copied to the LATEX_OUTPUT output</span></div>
+<div class="line"><a name="l01683"></a><span class="lineno"> 1683</span> <span class="comment"># directory. Note that the files will be copied as-is; there are no commands or</span></div>
+<div class="line"><a name="l01684"></a><span class="lineno"> 1684</span> <span class="comment"># markers available.</span></div>
+<div class="line"><a name="l01685"></a><span class="lineno"> 1685</span> <span class="comment"># This tag requires that the tag GENERATE_LATEX is set to YES.</span></div>
+<div class="line"><a name="l01686"></a><span class="lineno"> 1686</span> <span class="comment"></span></div>
+<div class="line"><a name="l01687"></a><span class="lineno"> 1687</span> <span class="comment">LATEX_EXTRA_FILES = </span></div>
+<div class="line"><a name="l01688"></a><span class="lineno"> 1688</span> <span class="comment"></span></div>
+<div class="line"><a name="l01689"></a><span class="lineno"> 1689</span> <span class="comment"># If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is</span></div>
+<div class="line"><a name="l01690"></a><span class="lineno"> 1690</span> <span class="comment"># prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will</span></div>
+<div class="line"><a name="l01691"></a><span class="lineno"> 1691</span> <span class="comment"># contain links (just like the HTML output) instead of page references. This</span></div>
+<div class="line"><a name="l01692"></a><span class="lineno"> 1692</span> <span class="comment"># makes the output suitable for online browsing using a PDF viewer.</span></div>
+<div class="line"><a name="l01693"></a><span class="lineno"> 1693</span> <span class="comment"># The default value is: YES.</span></div>
+<div class="line"><a name="l01694"></a><span class="lineno"> 1694</span> <span class="comment"># This tag requires that the tag GENERATE_LATEX is set to YES.</span></div>
+<div class="line"><a name="l01695"></a><span class="lineno"> 1695</span> <span class="comment"></span></div>
+<div class="line"><a name="l01696"></a><span class="lineno"> 1696</span> <span class="comment">PDF_HYPERLINKS = NO</span></div>
+<div class="line"><a name="l01697"></a><span class="lineno"> 1697</span> <span class="comment"></span></div>
+<div class="line"><a name="l01698"></a><span class="lineno"> 1698</span> <span class="comment"># If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate</span></div>
+<div class="line"><a name="l01699"></a><span class="lineno"> 1699</span> <span class="comment"># the PDF file directly from the LaTeX files. Set this option to YES, to get a</span></div>
+<div class="line"><a name="l01700"></a><span class="lineno"> 1700</span> <span class="comment"># higher quality PDF documentation.</span></div>
+<div class="line"><a name="l01701"></a><span class="lineno"> 1701</span> <span class="comment"># The default value is: YES.</span></div>
+<div class="line"><a name="l01702"></a><span class="lineno"> 1702</span> <span class="comment"># This tag requires that the tag GENERATE_LATEX is set to YES.</span></div>
+<div class="line"><a name="l01703"></a><span class="lineno"> 1703</span> <span class="comment"></span></div>
+<div class="line"><a name="l01704"></a><span class="lineno"> 1704</span> <span class="comment">USE_PDFLATEX = YES</span></div>
+<div class="line"><a name="l01705"></a><span class="lineno"> 1705</span> <span class="comment"></span></div>
+<div class="line"><a name="l01706"></a><span class="lineno"> 1706</span> <span class="comment"># If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode</span></div>
+<div class="line"><a name="l01707"></a><span class="lineno"> 1707</span> <span class="comment"># command to the generated LaTeX files. This will instruct LaTeX to keep running</span></div>
+<div class="line"><a name="l01708"></a><span class="lineno"> 1708</span> <span class="comment"># if errors occur, instead of asking the user for help. This option is also used</span></div>
+<div class="line"><a name="l01709"></a><span class="lineno"> 1709</span> <span class="comment"># when generating formulas in HTML.</span></div>
+<div class="line"><a name="l01710"></a><span class="lineno"> 1710</span> <span class="comment"># The default value is: NO.</span></div>
+<div class="line"><a name="l01711"></a><span class="lineno"> 1711</span> <span class="comment"># This tag requires that the tag GENERATE_LATEX is set to YES.</span></div>
+<div class="line"><a name="l01712"></a><span class="lineno"> 1712</span> <span class="comment"></span></div>
+<div class="line"><a name="l01713"></a><span class="lineno"> 1713</span> <span class="comment">LATEX_BATCHMODE = NO</span></div>
+<div class="line"><a name="l01714"></a><span class="lineno"> 1714</span> <span class="comment"></span></div>
+<div class="line"><a name="l01715"></a><span class="lineno"> 1715</span> <span class="comment"># If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the</span></div>
+<div class="line"><a name="l01716"></a><span class="lineno"> 1716</span> <span class="comment"># index chapters (such as File Index, Compound Index, etc.) in the output.</span></div>
+<div class="line"><a name="l01717"></a><span class="lineno"> 1717</span> <span class="comment"># The default value is: NO.</span></div>
+<div class="line"><a name="l01718"></a><span class="lineno"> 1718</span> <span class="comment"># This tag requires that the tag GENERATE_LATEX is set to YES.</span></div>
+<div class="line"><a name="l01719"></a><span class="lineno"> 1719</span> <span class="comment"></span></div>
+<div class="line"><a name="l01720"></a><span class="lineno"> 1720</span> <span class="comment">LATEX_HIDE_INDICES = NO</span></div>
+<div class="line"><a name="l01721"></a><span class="lineno"> 1721</span> <span class="comment"></span></div>
+<div class="line"><a name="l01722"></a><span class="lineno"> 1722</span> <span class="comment"># If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source</span></div>
+<div class="line"><a name="l01723"></a><span class="lineno"> 1723</span> <span class="comment"># code with syntax highlighting in the LaTeX output.</span></div>
+<div class="line"><a name="l01724"></a><span class="lineno"> 1724</span> <span class="comment">#</span></div>
+<div class="line"><a name="l01725"></a><span class="lineno"> 1725</span> <span class="comment"># Note that which sources are shown also depends on other settings such as</span></div>
+<div class="line"><a name="l01726"></a><span class="lineno"> 1726</span> <span class="comment"># SOURCE_BROWSER.</span></div>
+<div class="line"><a name="l01727"></a><span class="lineno"> 1727</span> <span class="comment"># The default value is: NO.</span></div>
+<div class="line"><a name="l01728"></a><span class="lineno"> 1728</span> <span class="comment"># This tag requires that the tag GENERATE_LATEX is set to YES.</span></div>
+<div class="line"><a name="l01729"></a><span class="lineno"> 1729</span> <span class="comment"></span></div>
+<div class="line"><a name="l01730"></a><span class="lineno"> 1730</span> <span class="comment">LATEX_SOURCE_CODE = NO</span></div>
+<div class="line"><a name="l01731"></a><span class="lineno"> 1731</span> <span class="comment"></span></div>
+<div class="line"><a name="l01732"></a><span class="lineno"> 1732</span> <span class="comment"># The LATEX_BIB_STYLE tag can be used to specify the style to use for the</span></div>
+<div class="line"><a name="l01733"></a><span class="lineno"> 1733</span> <span class="comment"># bibliography, e.g. plainnat, or ieeetr. See</span></div>
+<div class="line"><a name="l01734"></a><span class="lineno"> 1734</span> <span class="comment"># http://en.wikipedia.org/wiki/BibTeX and \cite for more info.</span></div>
+<div class="line"><a name="l01735"></a><span class="lineno"> 1735</span> <span class="comment"># The default value is: plain.</span></div>
+<div class="line"><a name="l01736"></a><span class="lineno"> 1736</span> <span class="comment"># This tag requires that the tag GENERATE_LATEX is set to YES.</span></div>
+<div class="line"><a name="l01737"></a><span class="lineno"> 1737</span> <span class="comment"></span></div>
+<div class="line"><a name="l01738"></a><span class="lineno"> 1738</span> <span class="comment">LATEX_BIB_STYLE = plain</span></div>
+<div class="line"><a name="l01739"></a><span class="lineno"> 1739</span> <span class="comment"></span></div>
+<div class="line"><a name="l01740"></a><span class="lineno"> 1740</span> <span class="comment">#---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01741"></a><span class="lineno"> 1741</span> <span class="comment"># Configuration options related to the RTF output</span></div>
+<div class="line"><a name="l01742"></a><span class="lineno"> 1742</span> <span class="comment">#---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01743"></a><span class="lineno"> 1743</span> <span class="comment"></span></div>
+<div class="line"><a name="l01744"></a><span class="lineno"> 1744</span> <span class="comment"># If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The</span></div>
+<div class="line"><a name="l01745"></a><span class="lineno"> 1745</span> <span class="comment"># RTF output is optimized for Word 97 and may not look too pretty with other RTF</span></div>
+<div class="line"><a name="l01746"></a><span class="lineno"> 1746</span> <span class="comment"># readers/editors.</span></div>
+<div class="line"><a name="l01747"></a><span class="lineno"> 1747</span> <span class="comment"># The default value is: NO.</span></div>
+<div class="line"><a name="l01748"></a><span class="lineno"> 1748</span> <span class="comment"></span></div>
+<div class="line"><a name="l01749"></a><span class="lineno"> 1749</span> <span class="comment">GENERATE_RTF = NO</span></div>
+<div class="line"><a name="l01750"></a><span class="lineno"> 1750</span> <span class="comment"></span></div>
+<div class="line"><a name="l01751"></a><span class="lineno"> 1751</span> <span class="comment"># The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a</span></div>
+<div class="line"><a name="l01752"></a><span class="lineno"> 1752</span> <span class="comment"># relative path is entered the value of OUTPUT_DIRECTORY will be put in front of</span></div>
+<div class="line"><a name="l01753"></a><span class="lineno"> 1753</span> <span class="comment"># it.</span></div>
+<div class="line"><a name="l01754"></a><span class="lineno"> 1754</span> <span class="comment"># The default directory is: rtf.</span></div>
+<div class="line"><a name="l01755"></a><span class="lineno"> 1755</span> <span class="comment"># This tag requires that the tag GENERATE_RTF is set to YES.</span></div>
+<div class="line"><a name="l01756"></a><span class="lineno"> 1756</span> <span class="comment"></span></div>
+<div class="line"><a name="l01757"></a><span class="lineno"> 1757</span> <span class="comment">RTF_OUTPUT = glm.rtf</span></div>
+<div class="line"><a name="l01758"></a><span class="lineno"> 1758</span> <span class="comment"></span></div>
+<div class="line"><a name="l01759"></a><span class="lineno"> 1759</span> <span class="comment"># If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF</span></div>
+<div class="line"><a name="l01760"></a><span class="lineno"> 1760</span> <span class="comment"># documents. This may be useful for small projects and may help to save some</span></div>
+<div class="line"><a name="l01761"></a><span class="lineno"> 1761</span> <span class="comment"># trees in general.</span></div>
+<div class="line"><a name="l01762"></a><span class="lineno"> 1762</span> <span class="comment"># The default value is: NO.</span></div>
+<div class="line"><a name="l01763"></a><span class="lineno"> 1763</span> <span class="comment"># This tag requires that the tag GENERATE_RTF is set to YES.</span></div>
+<div class="line"><a name="l01764"></a><span class="lineno"> 1764</span> <span class="comment"></span></div>
+<div class="line"><a name="l01765"></a><span class="lineno"> 1765</span> <span class="comment">COMPACT_RTF = NO</span></div>
+<div class="line"><a name="l01766"></a><span class="lineno"> 1766</span> <span class="comment"></span></div>
+<div class="line"><a name="l01767"></a><span class="lineno"> 1767</span> <span class="comment"># If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will</span></div>
+<div class="line"><a name="l01768"></a><span class="lineno"> 1768</span> <span class="comment"># contain hyperlink fields. The RTF file will contain links (just like the HTML</span></div>
+<div class="line"><a name="l01769"></a><span class="lineno"> 1769</span> <span class="comment"># output) instead of page references. This makes the output suitable for online</span></div>
+<div class="line"><a name="l01770"></a><span class="lineno"> 1770</span> <span class="comment"># browsing using Word or some other Word compatible readers that support those</span></div>
+<div class="line"><a name="l01771"></a><span class="lineno"> 1771</span> <span class="comment"># fields.</span></div>
+<div class="line"><a name="l01772"></a><span class="lineno"> 1772</span> <span class="comment">#</span></div>
+<div class="line"><a name="l01773"></a><span class="lineno"> 1773</span> <span class="comment"># Note: WordPad (write) and others do not support links.</span></div>
+<div class="line"><a name="l01774"></a><span class="lineno"> 1774</span> <span class="comment"># The default value is: NO.</span></div>
+<div class="line"><a name="l01775"></a><span class="lineno"> 1775</span> <span class="comment"># This tag requires that the tag GENERATE_RTF is set to YES.</span></div>
+<div class="line"><a name="l01776"></a><span class="lineno"> 1776</span> <span class="comment"></span></div>
+<div class="line"><a name="l01777"></a><span class="lineno"> 1777</span> <span class="comment">RTF_HYPERLINKS = YES</span></div>
+<div class="line"><a name="l01778"></a><span class="lineno"> 1778</span> <span class="comment"></span></div>
+<div class="line"><a name="l01779"></a><span class="lineno"> 1779</span> <span class="comment"># Load stylesheet definitions from file. Syntax is similar to doxygen's config</span></div>
+<div class="line"><a name="l01780"></a><span class="lineno"> 1780</span> <span class="comment"># file, i.e. a series of assignments. You only have to provide replacements,</span></div>
+<div class="line"><a name="l01781"></a><span class="lineno"> 1781</span> <span class="comment"># missing definitions are set to their default value.</span></div>
+<div class="line"><a name="l01782"></a><span class="lineno"> 1782</span> <span class="comment">#</span></div>
+<div class="line"><a name="l01783"></a><span class="lineno"> 1783</span> <span class="comment"># See also section "Doxygen usage" for information on how to generate the</span></div>
+<div class="line"><a name="l01784"></a><span class="lineno"> 1784</span> <span class="comment"># default style sheet that doxygen normally uses.</span></div>
+<div class="line"><a name="l01785"></a><span class="lineno"> 1785</span> <span class="comment"># This tag requires that the tag GENERATE_RTF is set to YES.</span></div>
+<div class="line"><a name="l01786"></a><span class="lineno"> 1786</span> <span class="comment"></span></div>
+<div class="line"><a name="l01787"></a><span class="lineno"> 1787</span> <span class="comment">RTF_STYLESHEET_FILE = </span></div>
+<div class="line"><a name="l01788"></a><span class="lineno"> 1788</span> <span class="comment"></span></div>
+<div class="line"><a name="l01789"></a><span class="lineno"> 1789</span> <span class="comment"># Set optional variables used in the generation of an RTF document. Syntax is</span></div>
+<div class="line"><a name="l01790"></a><span class="lineno"> 1790</span> <span class="comment"># similar to doxygen's config file. A template extensions file can be generated</span></div>
+<div class="line"><a name="l01791"></a><span class="lineno"> 1791</span> <span class="comment"># using doxygen -e rtf extensionFile.</span></div>
+<div class="line"><a name="l01792"></a><span class="lineno"> 1792</span> <span class="comment"># This tag requires that the tag GENERATE_RTF is set to YES.</span></div>
+<div class="line"><a name="l01793"></a><span class="lineno"> 1793</span> <span class="comment"></span></div>
+<div class="line"><a name="l01794"></a><span class="lineno"> 1794</span> <span class="comment">RTF_EXTENSIONS_FILE = </span></div>
+<div class="line"><a name="l01795"></a><span class="lineno"> 1795</span> <span class="comment"></span></div>
+<div class="line"><a name="l01796"></a><span class="lineno"> 1796</span> <span class="comment"># If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code</span></div>
+<div class="line"><a name="l01797"></a><span class="lineno"> 1797</span> <span class="comment"># with syntax highlighting in the RTF output.</span></div>
+<div class="line"><a name="l01798"></a><span class="lineno"> 1798</span> <span class="comment">#</span></div>
+<div class="line"><a name="l01799"></a><span class="lineno"> 1799</span> <span class="comment"># Note that which sources are shown also depends on other settings such as</span></div>
+<div class="line"><a name="l01800"></a><span class="lineno"> 1800</span> <span class="comment"># SOURCE_BROWSER.</span></div>
+<div class="line"><a name="l01801"></a><span class="lineno"> 1801</span> <span class="comment"># The default value is: NO.</span></div>
+<div class="line"><a name="l01802"></a><span class="lineno"> 1802</span> <span class="comment"># This tag requires that the tag GENERATE_RTF is set to YES.</span></div>
+<div class="line"><a name="l01803"></a><span class="lineno"> 1803</span> <span class="comment"></span></div>
+<div class="line"><a name="l01804"></a><span class="lineno"> 1804</span> <span class="comment">RTF_SOURCE_CODE = NO</span></div>
+<div class="line"><a name="l01805"></a><span class="lineno"> 1805</span> <span class="comment"></span></div>
+<div class="line"><a name="l01806"></a><span class="lineno"> 1806</span> <span class="comment">#---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01807"></a><span class="lineno"> 1807</span> <span class="comment"># Configuration options related to the man page output</span></div>
+<div class="line"><a name="l01808"></a><span class="lineno"> 1808</span> <span class="comment">#---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01809"></a><span class="lineno"> 1809</span> <span class="comment"></span></div>
+<div class="line"><a name="l01810"></a><span class="lineno"> 1810</span> <span class="comment"># If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for</span></div>
+<div class="line"><a name="l01811"></a><span class="lineno"> 1811</span> <span class="comment"># classes and files.</span></div>
+<div class="line"><a name="l01812"></a><span class="lineno"> 1812</span> <span class="comment"># The default value is: NO.</span></div>
+<div class="line"><a name="l01813"></a><span class="lineno"> 1813</span> <span class="comment"></span></div>
+<div class="line"><a name="l01814"></a><span class="lineno"> 1814</span> <span class="comment">GENERATE_MAN = NO</span></div>
+<div class="line"><a name="l01815"></a><span class="lineno"> 1815</span> <span class="comment"></span></div>
+<div class="line"><a name="l01816"></a><span class="lineno"> 1816</span> <span class="comment"># The MAN_OUTPUT tag is used to specify where the man pages will be put. If a</span></div>
+<div class="line"><a name="l01817"></a><span class="lineno"> 1817</span> <span class="comment"># relative path is entered the value of OUTPUT_DIRECTORY will be put in front of</span></div>
+<div class="line"><a name="l01818"></a><span class="lineno"> 1818</span> <span class="comment"># it. A directory man3 will be created inside the directory specified by</span></div>
+<div class="line"><a name="l01819"></a><span class="lineno"> 1819</span> <span class="comment"># MAN_OUTPUT.</span></div>
+<div class="line"><a name="l01820"></a><span class="lineno"> 1820</span> <span class="comment"># The default directory is: man.</span></div>
+<div class="line"><a name="l01821"></a><span class="lineno"> 1821</span> <span class="comment"># This tag requires that the tag GENERATE_MAN is set to YES.</span></div>
+<div class="line"><a name="l01822"></a><span class="lineno"> 1822</span> <span class="comment"></span></div>
+<div class="line"><a name="l01823"></a><span class="lineno"> 1823</span> <span class="comment">MAN_OUTPUT = man</span></div>
+<div class="line"><a name="l01824"></a><span class="lineno"> 1824</span> <span class="comment"></span></div>
+<div class="line"><a name="l01825"></a><span class="lineno"> 1825</span> <span class="comment"># The MAN_EXTENSION tag determines the extension that is added to the generated</span></div>
+<div class="line"><a name="l01826"></a><span class="lineno"> 1826</span> <span class="comment"># man pages. In case the manual section does not start with a number, the number</span></div>
+<div class="line"><a name="l01827"></a><span class="lineno"> 1827</span> <span class="comment"># 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is</span></div>
+<div class="line"><a name="l01828"></a><span class="lineno"> 1828</span> <span class="comment"># optional.</span></div>
+<div class="line"><a name="l01829"></a><span class="lineno"> 1829</span> <span class="comment"># The default value is: .3.</span></div>
+<div class="line"><a name="l01830"></a><span class="lineno"> 1830</span> <span class="comment"># This tag requires that the tag GENERATE_MAN is set to YES.</span></div>
+<div class="line"><a name="l01831"></a><span class="lineno"> 1831</span> <span class="comment"></span></div>
+<div class="line"><a name="l01832"></a><span class="lineno"> 1832</span> <span class="comment">MAN_EXTENSION = .3</span></div>
+<div class="line"><a name="l01833"></a><span class="lineno"> 1833</span> <span class="comment"></span></div>
+<div class="line"><a name="l01834"></a><span class="lineno"> 1834</span> <span class="comment"># The MAN_SUBDIR tag determines the name of the directory created within</span></div>
+<div class="line"><a name="l01835"></a><span class="lineno"> 1835</span> <span class="comment"># MAN_OUTPUT in which the man pages are placed. If defaults to man followed by</span></div>
+<div class="line"><a name="l01836"></a><span class="lineno"> 1836</span> <span class="comment"># MAN_EXTENSION with the initial . removed.</span></div>
+<div class="line"><a name="l01837"></a><span class="lineno"> 1837</span> <span class="comment"># This tag requires that the tag GENERATE_MAN is set to YES.</span></div>
+<div class="line"><a name="l01838"></a><span class="lineno"> 1838</span> <span class="comment"></span></div>
+<div class="line"><a name="l01839"></a><span class="lineno"> 1839</span> <span class="comment">MAN_SUBDIR = </span></div>
+<div class="line"><a name="l01840"></a><span class="lineno"> 1840</span> <span class="comment"></span></div>
+<div class="line"><a name="l01841"></a><span class="lineno"> 1841</span> <span class="comment"># If the MAN_LINKS tag is set to YES and doxygen generates man output, then it</span></div>
+<div class="line"><a name="l01842"></a><span class="lineno"> 1842</span> <span class="comment"># will generate one additional man file for each entity documented in the real</span></div>
+<div class="line"><a name="l01843"></a><span class="lineno"> 1843</span> <span class="comment"># man page(s). These additional files only source the real man page, but without</span></div>
+<div class="line"><a name="l01844"></a><span class="lineno"> 1844</span> <span class="comment"># them the man command would be unable to find the correct page.</span></div>
+<div class="line"><a name="l01845"></a><span class="lineno"> 1845</span> <span class="comment"># The default value is: NO.</span></div>
+<div class="line"><a name="l01846"></a><span class="lineno"> 1846</span> <span class="comment"># This tag requires that the tag GENERATE_MAN is set to YES.</span></div>
+<div class="line"><a name="l01847"></a><span class="lineno"> 1847</span> <span class="comment"></span></div>
+<div class="line"><a name="l01848"></a><span class="lineno"> 1848</span> <span class="comment">MAN_LINKS = NO</span></div>
+<div class="line"><a name="l01849"></a><span class="lineno"> 1849</span> <span class="comment"></span></div>
+<div class="line"><a name="l01850"></a><span class="lineno"> 1850</span> <span class="comment">#---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01851"></a><span class="lineno"> 1851</span> <span class="comment"># Configuration options related to the XML output</span></div>
+<div class="line"><a name="l01852"></a><span class="lineno"> 1852</span> <span class="comment">#---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01853"></a><span class="lineno"> 1853</span> <span class="comment"></span></div>
+<div class="line"><a name="l01854"></a><span class="lineno"> 1854</span> <span class="comment"># If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that</span></div>
+<div class="line"><a name="l01855"></a><span class="lineno"> 1855</span> <span class="comment"># captures the structure of the code including all documentation.</span></div>
+<div class="line"><a name="l01856"></a><span class="lineno"> 1856</span> <span class="comment"># The default value is: NO.</span></div>
+<div class="line"><a name="l01857"></a><span class="lineno"> 1857</span> <span class="comment"></span></div>
+<div class="line"><a name="l01858"></a><span class="lineno"> 1858</span> <span class="comment">GENERATE_XML = NO</span></div>
+<div class="line"><a name="l01859"></a><span class="lineno"> 1859</span> <span class="comment"></span></div>
+<div class="line"><a name="l01860"></a><span class="lineno"> 1860</span> <span class="comment"># The XML_OUTPUT tag is used to specify where the XML pages will be put. If a</span></div>
+<div class="line"><a name="l01861"></a><span class="lineno"> 1861</span> <span class="comment"># relative path is entered the value of OUTPUT_DIRECTORY will be put in front of</span></div>
+<div class="line"><a name="l01862"></a><span class="lineno"> 1862</span> <span class="comment"># it.</span></div>
+<div class="line"><a name="l01863"></a><span class="lineno"> 1863</span> <span class="comment"># The default directory is: xml.</span></div>
+<div class="line"><a name="l01864"></a><span class="lineno"> 1864</span> <span class="comment"># This tag requires that the tag GENERATE_XML is set to YES.</span></div>
+<div class="line"><a name="l01865"></a><span class="lineno"> 1865</span> <span class="comment"></span></div>
+<div class="line"><a name="l01866"></a><span class="lineno"> 1866</span> <span class="comment">XML_OUTPUT = xml</span></div>
+<div class="line"><a name="l01867"></a><span class="lineno"> 1867</span> <span class="comment"></span></div>
+<div class="line"><a name="l01868"></a><span class="lineno"> 1868</span> <span class="comment"># If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program</span></div>
+<div class="line"><a name="l01869"></a><span class="lineno"> 1869</span> <span class="comment"># listings (including syntax highlighting and cross-referencing information) to</span></div>
+<div class="line"><a name="l01870"></a><span class="lineno"> 1870</span> <span class="comment"># the XML output. Note that enabling this will significantly increase the size</span></div>
+<div class="line"><a name="l01871"></a><span class="lineno"> 1871</span> <span class="comment"># of the XML output.</span></div>
+<div class="line"><a name="l01872"></a><span class="lineno"> 1872</span> <span class="comment"># The default value is: YES.</span></div>
+<div class="line"><a name="l01873"></a><span class="lineno"> 1873</span> <span class="comment"># This tag requires that the tag GENERATE_XML is set to YES.</span></div>
+<div class="line"><a name="l01874"></a><span class="lineno"> 1874</span> <span class="comment"></span></div>
+<div class="line"><a name="l01875"></a><span class="lineno"> 1875</span> <span class="comment">XML_PROGRAMLISTING = YES</span></div>
+<div class="line"><a name="l01876"></a><span class="lineno"> 1876</span> <span class="comment"></span></div>
+<div class="line"><a name="l01877"></a><span class="lineno"> 1877</span> <span class="comment">#---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01878"></a><span class="lineno"> 1878</span> <span class="comment"># Configuration options related to the DOCBOOK output</span></div>
+<div class="line"><a name="l01879"></a><span class="lineno"> 1879</span> <span class="comment">#---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01880"></a><span class="lineno"> 1880</span> <span class="comment"></span></div>
+<div class="line"><a name="l01881"></a><span class="lineno"> 1881</span> <span class="comment"># If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files</span></div>
+<div class="line"><a name="l01882"></a><span class="lineno"> 1882</span> <span class="comment"># that can be used to generate PDF.</span></div>
+<div class="line"><a name="l01883"></a><span class="lineno"> 1883</span> <span class="comment"># The default value is: NO.</span></div>
+<div class="line"><a name="l01884"></a><span class="lineno"> 1884</span> <span class="comment"></span></div>
+<div class="line"><a name="l01885"></a><span class="lineno"> 1885</span> <span class="comment">GENERATE_DOCBOOK = NO</span></div>
+<div class="line"><a name="l01886"></a><span class="lineno"> 1886</span> <span class="comment"></span></div>
+<div class="line"><a name="l01887"></a><span class="lineno"> 1887</span> <span class="comment"># The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.</span></div>
+<div class="line"><a name="l01888"></a><span class="lineno"> 1888</span> <span class="comment"># If a relative path is entered the value of OUTPUT_DIRECTORY will be put in</span></div>
+<div class="line"><a name="l01889"></a><span class="lineno"> 1889</span> <span class="comment"># front of it.</span></div>
+<div class="line"><a name="l01890"></a><span class="lineno"> 1890</span> <span class="comment"># The default directory is: docbook.</span></div>
+<div class="line"><a name="l01891"></a><span class="lineno"> 1891</span> <span class="comment"># This tag requires that the tag GENERATE_DOCBOOK is set to YES.</span></div>
+<div class="line"><a name="l01892"></a><span class="lineno"> 1892</span> <span class="comment"></span></div>
+<div class="line"><a name="l01893"></a><span class="lineno"> 1893</span> <span class="comment">DOCBOOK_OUTPUT = docbook</span></div>
+<div class="line"><a name="l01894"></a><span class="lineno"> 1894</span> <span class="comment"></span></div>
+<div class="line"><a name="l01895"></a><span class="lineno"> 1895</span> <span class="comment"># If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the</span></div>
+<div class="line"><a name="l01896"></a><span class="lineno"> 1896</span> <span class="comment"># program listings (including syntax highlighting and cross-referencing</span></div>
+<div class="line"><a name="l01897"></a><span class="lineno"> 1897</span> <span class="comment"># information) to the DOCBOOK output. Note that enabling this will significantly</span></div>
+<div class="line"><a name="l01898"></a><span class="lineno"> 1898</span> <span class="comment"># increase the size of the DOCBOOK output.</span></div>
+<div class="line"><a name="l01899"></a><span class="lineno"> 1899</span> <span class="comment"># The default value is: NO.</span></div>
+<div class="line"><a name="l01900"></a><span class="lineno"> 1900</span> <span class="comment"># This tag requires that the tag GENERATE_DOCBOOK is set to YES.</span></div>
+<div class="line"><a name="l01901"></a><span class="lineno"> 1901</span> <span class="comment"></span></div>
+<div class="line"><a name="l01902"></a><span class="lineno"> 1902</span> <span class="comment">DOCBOOK_PROGRAMLISTING = NO</span></div>
+<div class="line"><a name="l01903"></a><span class="lineno"> 1903</span> <span class="comment"></span></div>
+<div class="line"><a name="l01904"></a><span class="lineno"> 1904</span> <span class="comment">#---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01905"></a><span class="lineno"> 1905</span> <span class="comment"># Configuration options for the AutoGen Definitions output</span></div>
+<div class="line"><a name="l01906"></a><span class="lineno"> 1906</span> <span class="comment">#---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01907"></a><span class="lineno"> 1907</span> <span class="comment"></span></div>
+<div class="line"><a name="l01908"></a><span class="lineno"> 1908</span> <span class="comment"># If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an</span></div>
+<div class="line"><a name="l01909"></a><span class="lineno"> 1909</span> <span class="comment"># AutoGen Definitions (see http://autogen.sf.net) file that captures the</span></div>
+<div class="line"><a name="l01910"></a><span class="lineno"> 1910</span> <span class="comment"># structure of the code including all documentation. Note that this feature is</span></div>
+<div class="line"><a name="l01911"></a><span class="lineno"> 1911</span> <span class="comment"># still experimental and incomplete at the moment.</span></div>
+<div class="line"><a name="l01912"></a><span class="lineno"> 1912</span> <span class="comment"># The default value is: NO.</span></div>
+<div class="line"><a name="l01913"></a><span class="lineno"> 1913</span> <span class="comment"></span></div>
+<div class="line"><a name="l01914"></a><span class="lineno"> 1914</span> <span class="comment">GENERATE_AUTOGEN_DEF = NO</span></div>
+<div class="line"><a name="l01915"></a><span class="lineno"> 1915</span> <span class="comment"></span></div>
+<div class="line"><a name="l01916"></a><span class="lineno"> 1916</span> <span class="comment">#---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01917"></a><span class="lineno"> 1917</span> <span class="comment"># Configuration options related to the Perl module output</span></div>
+<div class="line"><a name="l01918"></a><span class="lineno"> 1918</span> <span class="comment">#---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01919"></a><span class="lineno"> 1919</span> <span class="comment"></span></div>
+<div class="line"><a name="l01920"></a><span class="lineno"> 1920</span> <span class="comment"># If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module</span></div>
+<div class="line"><a name="l01921"></a><span class="lineno"> 1921</span> <span class="comment"># file that captures the structure of the code including all documentation.</span></div>
+<div class="line"><a name="l01922"></a><span class="lineno"> 1922</span> <span class="comment">#</span></div>
+<div class="line"><a name="l01923"></a><span class="lineno"> 1923</span> <span class="comment"># Note that this feature is still experimental and incomplete at the moment.</span></div>
+<div class="line"><a name="l01924"></a><span class="lineno"> 1924</span> <span class="comment"># The default value is: NO.</span></div>
+<div class="line"><a name="l01925"></a><span class="lineno"> 1925</span> <span class="comment"></span></div>
+<div class="line"><a name="l01926"></a><span class="lineno"> 1926</span> <span class="comment">GENERATE_PERLMOD = NO</span></div>
+<div class="line"><a name="l01927"></a><span class="lineno"> 1927</span> <span class="comment"></span></div>
+<div class="line"><a name="l01928"></a><span class="lineno"> 1928</span> <span class="comment"># If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary</span></div>
+<div class="line"><a name="l01929"></a><span class="lineno"> 1929</span> <span class="comment"># Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI</span></div>
+<div class="line"><a name="l01930"></a><span class="lineno"> 1930</span> <span class="comment"># output from the Perl module output.</span></div>
+<div class="line"><a name="l01931"></a><span class="lineno"> 1931</span> <span class="comment"># The default value is: NO.</span></div>
+<div class="line"><a name="l01932"></a><span class="lineno"> 1932</span> <span class="comment"># This tag requires that the tag GENERATE_PERLMOD is set to YES.</span></div>
+<div class="line"><a name="l01933"></a><span class="lineno"> 1933</span> <span class="comment"></span></div>
+<div class="line"><a name="l01934"></a><span class="lineno"> 1934</span> <span class="comment">PERLMOD_LATEX = NO</span></div>
+<div class="line"><a name="l01935"></a><span class="lineno"> 1935</span> <span class="comment"></span></div>
+<div class="line"><a name="l01936"></a><span class="lineno"> 1936</span> <span class="comment"># If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely</span></div>
+<div class="line"><a name="l01937"></a><span class="lineno"> 1937</span> <span class="comment"># formatted so it can be parsed by a human reader. This is useful if you want to</span></div>
+<div class="line"><a name="l01938"></a><span class="lineno"> 1938</span> <span class="comment"># understand what is going on. On the other hand, if this tag is set to NO, the</span></div>
+<div class="line"><a name="l01939"></a><span class="lineno"> 1939</span> <span class="comment"># size of the Perl module output will be much smaller and Perl will parse it</span></div>
+<div class="line"><a name="l01940"></a><span class="lineno"> 1940</span> <span class="comment"># just the same.</span></div>
+<div class="line"><a name="l01941"></a><span class="lineno"> 1941</span> <span class="comment"># The default value is: YES.</span></div>
+<div class="line"><a name="l01942"></a><span class="lineno"> 1942</span> <span class="comment"># This tag requires that the tag GENERATE_PERLMOD is set to YES.</span></div>
+<div class="line"><a name="l01943"></a><span class="lineno"> 1943</span> <span class="comment"></span></div>
+<div class="line"><a name="l01944"></a><span class="lineno"> 1944</span> <span class="comment">PERLMOD_PRETTY = YES</span></div>
+<div class="line"><a name="l01945"></a><span class="lineno"> 1945</span> <span class="comment"></span></div>
+<div class="line"><a name="l01946"></a><span class="lineno"> 1946</span> <span class="comment"># The names of the make variables in the generated doxyrules.make file are</span></div>
+<div class="line"><a name="l01947"></a><span class="lineno"> 1947</span> <span class="comment"># prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful</span></div>
+<div class="line"><a name="l01948"></a><span class="lineno"> 1948</span> <span class="comment"># so different doxyrules.make files included by the same Makefile don't</span></div>
+<div class="line"><a name="l01949"></a><span class="lineno"> 1949</span> <span class="comment"># overwrite each other's variables.</span></div>
+<div class="line"><a name="l01950"></a><span class="lineno"> 1950</span> <span class="comment"># This tag requires that the tag GENERATE_PERLMOD is set to YES.</span></div>
+<div class="line"><a name="l01951"></a><span class="lineno"> 1951</span> <span class="comment"></span></div>
+<div class="line"><a name="l01952"></a><span class="lineno"> 1952</span> <span class="comment">PERLMOD_MAKEVAR_PREFIX = </span></div>
+<div class="line"><a name="l01953"></a><span class="lineno"> 1953</span> <span class="comment"></span></div>
+<div class="line"><a name="l01954"></a><span class="lineno"> 1954</span> <span class="comment">#---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01955"></a><span class="lineno"> 1955</span> <span class="comment"># Configuration options related to the preprocessor</span></div>
+<div class="line"><a name="l01956"></a><span class="lineno"> 1956</span> <span class="comment">#---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01957"></a><span class="lineno"> 1957</span> <span class="comment"></span></div>
+<div class="line"><a name="l01958"></a><span class="lineno"> 1958</span> <span class="comment"># If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all</span></div>
+<div class="line"><a name="l01959"></a><span class="lineno"> 1959</span> <span class="comment"># C-preprocessor directives found in the sources and include files.</span></div>
+<div class="line"><a name="l01960"></a><span class="lineno"> 1960</span> <span class="comment"># The default value is: YES.</span></div>
+<div class="line"><a name="l01961"></a><span class="lineno"> 1961</span> <span class="comment"></span></div>
+<div class="line"><a name="l01962"></a><span class="lineno"> 1962</span> <span class="comment">ENABLE_PREPROCESSING = YES</span></div>
+<div class="line"><a name="l01963"></a><span class="lineno"> 1963</span> <span class="comment"></span></div>
+<div class="line"><a name="l01964"></a><span class="lineno"> 1964</span> <span class="comment"># If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names</span></div>
+<div class="line"><a name="l01965"></a><span class="lineno"> 1965</span> <span class="comment"># in the source code. If set to NO, only conditional compilation will be</span></div>
+<div class="line"><a name="l01966"></a><span class="lineno"> 1966</span> <span class="comment"># performed. Macro expansion can be done in a controlled way by setting</span></div>
+<div class="line"><a name="l01967"></a><span class="lineno"> 1967</span> <span class="comment"># EXPAND_ONLY_PREDEF to YES.</span></div>
+<div class="line"><a name="l01968"></a><span class="lineno"> 1968</span> <span class="comment"># The default value is: NO.</span></div>
+<div class="line"><a name="l01969"></a><span class="lineno"> 1969</span> <span class="comment"># This tag requires that the tag ENABLE_PREPROCESSING is set to YES.</span></div>
+<div class="line"><a name="l01970"></a><span class="lineno"> 1970</span> <span class="comment"></span></div>
+<div class="line"><a name="l01971"></a><span class="lineno"> 1971</span> <span class="comment">MACRO_EXPANSION = NO</span></div>
+<div class="line"><a name="l01972"></a><span class="lineno"> 1972</span> <span class="comment"></span></div>
+<div class="line"><a name="l01973"></a><span class="lineno"> 1973</span> <span class="comment"># If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then</span></div>
+<div class="line"><a name="l01974"></a><span class="lineno"> 1974</span> <span class="comment"># the macro expansion is limited to the macros specified with the PREDEFINED and</span></div>
+<div class="line"><a name="l01975"></a><span class="lineno"> 1975</span> <span class="comment"># EXPAND_AS_DEFINED tags.</span></div>
+<div class="line"><a name="l01976"></a><span class="lineno"> 1976</span> <span class="comment"># The default value is: NO.</span></div>
+<div class="line"><a name="l01977"></a><span class="lineno"> 1977</span> <span class="comment"># This tag requires that the tag ENABLE_PREPROCESSING is set to YES.</span></div>
+<div class="line"><a name="l01978"></a><span class="lineno"> 1978</span> <span class="comment"></span></div>
+<div class="line"><a name="l01979"></a><span class="lineno"> 1979</span> <span class="comment">EXPAND_ONLY_PREDEF = NO</span></div>
+<div class="line"><a name="l01980"></a><span class="lineno"> 1980</span> <span class="comment"></span></div>
+<div class="line"><a name="l01981"></a><span class="lineno"> 1981</span> <span class="comment"># If the SEARCH_INCLUDES tag is set to YES, the include files in the</span></div>
+<div class="line"><a name="l01982"></a><span class="lineno"> 1982</span> <span class="comment"># INCLUDE_PATH will be searched if a #include is found.</span></div>
+<div class="line"><a name="l01983"></a><span class="lineno"> 1983</span> <span class="comment"># The default value is: YES.</span></div>
+<div class="line"><a name="l01984"></a><span class="lineno"> 1984</span> <span class="comment"># This tag requires that the tag ENABLE_PREPROCESSING is set to YES.</span></div>
+<div class="line"><a name="l01985"></a><span class="lineno"> 1985</span> <span class="comment"></span></div>
+<div class="line"><a name="l01986"></a><span class="lineno"> 1986</span> <span class="comment">SEARCH_INCLUDES = YES</span></div>
+<div class="line"><a name="l01987"></a><span class="lineno"> 1987</span> <span class="comment"></span></div>
+<div class="line"><a name="l01988"></a><span class="lineno"> 1988</span> <span class="comment"># The INCLUDE_PATH tag can be used to specify one or more directories that</span></div>
+<div class="line"><a name="l01989"></a><span class="lineno"> 1989</span> <span class="comment"># contain include files that are not input files but should be processed by the</span></div>
+<div class="line"><a name="l01990"></a><span class="lineno"> 1990</span> <span class="comment"># preprocessor.</span></div>
+<div class="line"><a name="l01991"></a><span class="lineno"> 1991</span> <span class="comment"># This tag requires that the tag SEARCH_INCLUDES is set to YES.</span></div>
+<div class="line"><a name="l01992"></a><span class="lineno"> 1992</span> <span class="comment"></span></div>
+<div class="line"><a name="l01993"></a><span class="lineno"> 1993</span> <span class="comment">INCLUDE_PATH = </span></div>
+<div class="line"><a name="l01994"></a><span class="lineno"> 1994</span> <span class="comment"></span></div>
+<div class="line"><a name="l01995"></a><span class="lineno"> 1995</span> <span class="comment"># You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard</span></div>
+<div class="line"><a name="l01996"></a><span class="lineno"> 1996</span> <span class="comment"># patterns (like *.h and *.hpp) to filter out the header-files in the</span></div>
+<div class="line"><a name="l01997"></a><span class="lineno"> 1997</span> <span class="comment"># directories. If left blank, the patterns specified with FILE_PATTERNS will be</span></div>
+<div class="line"><a name="l01998"></a><span class="lineno"> 1998</span> <span class="comment"># used.</span></div>
+<div class="line"><a name="l01999"></a><span class="lineno"> 1999</span> <span class="comment"># This tag requires that the tag ENABLE_PREPROCESSING is set to YES.</span></div>
+<div class="line"><a name="l02000"></a><span class="lineno"> 2000</span> <span class="comment"></span></div>
+<div class="line"><a name="l02001"></a><span class="lineno"> 2001</span> <span class="comment">INCLUDE_FILE_PATTERNS = </span></div>
+<div class="line"><a name="l02002"></a><span class="lineno"> 2002</span> <span class="comment"></span></div>
+<div class="line"><a name="l02003"></a><span class="lineno"> 2003</span> <span class="comment"># The PREDEFINED tag can be used to specify one or more macro names that are</span></div>
+<div class="line"><a name="l02004"></a><span class="lineno"> 2004</span> <span class="comment"># defined before the preprocessor is started (similar to the -D option of e.g.</span></div>
+<div class="line"><a name="l02005"></a><span class="lineno"> 2005</span> <span class="comment"># gcc). The argument of the tag is a list of macros of the form: name or</span></div>
+<div class="line"><a name="l02006"></a><span class="lineno"> 2006</span> <span class="comment"># name=definition (no spaces). If the definition and the "=" are omitted, "=1"</span></div>
+<div class="line"><a name="l02007"></a><span class="lineno"> 2007</span> <span class="comment"># is assumed. To prevent a macro definition from being undefined via #undef or</span></div>
+<div class="line"><a name="l02008"></a><span class="lineno"> 2008</span> <span class="comment"># recursively expanded use the := operator instead of the = operator.</span></div>
+<div class="line"><a name="l02009"></a><span class="lineno"> 2009</span> <span class="comment"># This tag requires that the tag ENABLE_PREPROCESSING is set to YES.</span></div>
+<div class="line"><a name="l02010"></a><span class="lineno"> 2010</span> <span class="comment"></span></div>
+<div class="line"><a name="l02011"></a><span class="lineno"> 2011</span> <span class="comment">PREDEFINED = </span></div>
+<div class="line"><a name="l02012"></a><span class="lineno"> 2012</span> <span class="comment"></span></div>
+<div class="line"><a name="l02013"></a><span class="lineno"> 2013</span> <span class="comment"># If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this</span></div>
+<div class="line"><a name="l02014"></a><span class="lineno"> 2014</span> <span class="comment"># tag can be used to specify a list of macro names that should be expanded. The</span></div>
+<div class="line"><a name="l02015"></a><span class="lineno"> 2015</span> <span class="comment"># macro definition that is found in the sources will be used. Use the PREDEFINED</span></div>
+<div class="line"><a name="l02016"></a><span class="lineno"> 2016</span> <span class="comment"># tag if you want to use a different macro definition that overrules the</span></div>
+<div class="line"><a name="l02017"></a><span class="lineno"> 2017</span> <span class="comment"># definition found in the source code.</span></div>
+<div class="line"><a name="l02018"></a><span class="lineno"> 2018</span> <span class="comment"># This tag requires that the tag ENABLE_PREPROCESSING is set to YES.</span></div>
+<div class="line"><a name="l02019"></a><span class="lineno"> 2019</span> <span class="comment"></span></div>
+<div class="line"><a name="l02020"></a><span class="lineno"> 2020</span> <span class="comment">EXPAND_AS_DEFINED = </span></div>
+<div class="line"><a name="l02021"></a><span class="lineno"> 2021</span> <span class="comment"></span></div>
+<div class="line"><a name="l02022"></a><span class="lineno"> 2022</span> <span class="comment"># If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will</span></div>
+<div class="line"><a name="l02023"></a><span class="lineno"> 2023</span> <span class="comment"># remove all references to function-like macros that are alone on a line, have</span></div>
+<div class="line"><a name="l02024"></a><span class="lineno"> 2024</span> <span class="comment"># an all uppercase name, and do not end with a semicolon. Such function macros</span></div>
+<div class="line"><a name="l02025"></a><span class="lineno"> 2025</span> <span class="comment"># are typically used for boiler-plate code, and will confuse the parser if not</span></div>
+<div class="line"><a name="l02026"></a><span class="lineno"> 2026</span> <span class="comment"># removed.</span></div>
+<div class="line"><a name="l02027"></a><span class="lineno"> 2027</span> <span class="comment"># The default value is: YES.</span></div>
+<div class="line"><a name="l02028"></a><span class="lineno"> 2028</span> <span class="comment"># This tag requires that the tag ENABLE_PREPROCESSING is set to YES.</span></div>
+<div class="line"><a name="l02029"></a><span class="lineno"> 2029</span> <span class="comment"></span></div>
+<div class="line"><a name="l02030"></a><span class="lineno"> 2030</span> <span class="comment">SKIP_FUNCTION_MACROS = YES</span></div>
+<div class="line"><a name="l02031"></a><span class="lineno"> 2031</span> <span class="comment"></span></div>
+<div class="line"><a name="l02032"></a><span class="lineno"> 2032</span> <span class="comment">#---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l02033"></a><span class="lineno"> 2033</span> <span class="comment"># Configuration options related to external references</span></div>
+<div class="line"><a name="l02034"></a><span class="lineno"> 2034</span> <span class="comment">#---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l02035"></a><span class="lineno"> 2035</span> <span class="comment"></span></div>
+<div class="line"><a name="l02036"></a><span class="lineno"> 2036</span> <span class="comment"># The TAGFILES tag can be used to specify one or more tag files. For each tag</span></div>
+<div class="line"><a name="l02037"></a><span class="lineno"> 2037</span> <span class="comment"># file the location of the external documentation should be added. The format of</span></div>
+<div class="line"><a name="l02038"></a><span class="lineno"> 2038</span> <span class="comment"># a tag file without this location is as follows:</span></div>
+<div class="line"><a name="l02039"></a><span class="lineno"> 2039</span> <span class="comment"># TAGFILES = file1 file2 ...</span></div>
+<div class="line"><a name="l02040"></a><span class="lineno"> 2040</span> <span class="comment"># Adding location for the tag files is done as follows:</span></div>
+<div class="line"><a name="l02041"></a><span class="lineno"> 2041</span> <span class="comment"># TAGFILES = file1=loc1 "file2 = loc2" ...</span></div>
+<div class="line"><a name="l02042"></a><span class="lineno"> 2042</span> <span class="comment"># where loc1 and loc2 can be relative or absolute paths or URLs. See the</span></div>
+<div class="line"><a name="l02043"></a><span class="lineno"> 2043</span> <span class="comment"># section "Linking to external documentation" for more information about the use</span></div>
+<div class="line"><a name="l02044"></a><span class="lineno"> 2044</span> <span class="comment"># of tag files.</span></div>
+<div class="line"><a name="l02045"></a><span class="lineno"> 2045</span> <span class="comment"># Note: Each tag file must have a unique name (where the name does NOT include</span></div>
+<div class="line"><a name="l02046"></a><span class="lineno"> 2046</span> <span class="comment"># the path). If a tag file is not located in the directory in which doxygen is</span></div>
+<div class="line"><a name="l02047"></a><span class="lineno"> 2047</span> <span class="comment"># run, you must also specify the path to the tagfile here.</span></div>
+<div class="line"><a name="l02048"></a><span class="lineno"> 2048</span> <span class="comment"></span></div>
+<div class="line"><a name="l02049"></a><span class="lineno"> 2049</span> <span class="comment">TAGFILES = </span></div>
+<div class="line"><a name="l02050"></a><span class="lineno"> 2050</span> <span class="comment"></span></div>
+<div class="line"><a name="l02051"></a><span class="lineno"> 2051</span> <span class="comment"># When a file name is specified after GENERATE_TAGFILE, doxygen will create a</span></div>
+<div class="line"><a name="l02052"></a><span class="lineno"> 2052</span> <span class="comment"># tag file that is based on the input files it reads. See section "Linking to</span></div>
+<div class="line"><a name="l02053"></a><span class="lineno"> 2053</span> <span class="comment"># external documentation" for more information about the usage of tag files.</span></div>
+<div class="line"><a name="l02054"></a><span class="lineno"> 2054</span> <span class="comment"></span></div>
+<div class="line"><a name="l02055"></a><span class="lineno"> 2055</span> <span class="comment">GENERATE_TAGFILE = </span></div>
+<div class="line"><a name="l02056"></a><span class="lineno"> 2056</span> <span class="comment"></span></div>
+<div class="line"><a name="l02057"></a><span class="lineno"> 2057</span> <span class="comment"># If the ALLEXTERNALS tag is set to YES, all external class will be listed in</span></div>
+<div class="line"><a name="l02058"></a><span class="lineno"> 2058</span> <span class="comment"># the class index. If set to NO, only the inherited external classes will be</span></div>
+<div class="line"><a name="l02059"></a><span class="lineno"> 2059</span> <span class="comment"># listed.</span></div>
+<div class="line"><a name="l02060"></a><span class="lineno"> 2060</span> <span class="comment"># The default value is: NO.</span></div>
+<div class="line"><a name="l02061"></a><span class="lineno"> 2061</span> <span class="comment"></span></div>
+<div class="line"><a name="l02062"></a><span class="lineno"> 2062</span> <span class="comment">ALLEXTERNALS = NO</span></div>
+<div class="line"><a name="l02063"></a><span class="lineno"> 2063</span> <span class="comment"></span></div>
+<div class="line"><a name="l02064"></a><span class="lineno"> 2064</span> <span class="comment"># If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed</span></div>
+<div class="line"><a name="l02065"></a><span class="lineno"> 2065</span> <span class="comment"># in the modules index. If set to NO, only the current project's groups will be</span></div>
+<div class="line"><a name="l02066"></a><span class="lineno"> 2066</span> <span class="comment"># listed.</span></div>
+<div class="line"><a name="l02067"></a><span class="lineno"> 2067</span> <span class="comment"># The default value is: YES.</span></div>
+<div class="line"><a name="l02068"></a><span class="lineno"> 2068</span> <span class="comment"></span></div>
+<div class="line"><a name="l02069"></a><span class="lineno"> 2069</span> <span class="comment">EXTERNAL_GROUPS = YES</span></div>
+<div class="line"><a name="l02070"></a><span class="lineno"> 2070</span> <span class="comment"></span></div>
+<div class="line"><a name="l02071"></a><span class="lineno"> 2071</span> <span class="comment"># If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in</span></div>
+<div class="line"><a name="l02072"></a><span class="lineno"> 2072</span> <span class="comment"># the related pages index. If set to NO, only the current project's pages will</span></div>
+<div class="line"><a name="l02073"></a><span class="lineno"> 2073</span> <span class="comment"># be listed.</span></div>
+<div class="line"><a name="l02074"></a><span class="lineno"> 2074</span> <span class="comment"># The default value is: YES.</span></div>
+<div class="line"><a name="l02075"></a><span class="lineno"> 2075</span> <span class="comment"></span></div>
+<div class="line"><a name="l02076"></a><span class="lineno"> 2076</span> <span class="comment">EXTERNAL_PAGES = YES</span></div>
+<div class="line"><a name="l02077"></a><span class="lineno"> 2077</span> <span class="comment"></span></div>
+<div class="line"><a name="l02078"></a><span class="lineno"> 2078</span> <span class="comment"># The PERL_PATH should be the absolute path and name of the perl script</span></div>
+<div class="line"><a name="l02079"></a><span class="lineno"> 2079</span> <span class="comment"># interpreter (i.e. the result of 'which perl').</span></div>
+<div class="line"><a name="l02080"></a><span class="lineno"> 2080</span> <span class="comment"># The default file (with absolute path) is: /usr/bin/perl.</span></div>
+<div class="line"><a name="l02081"></a><span class="lineno"> 2081</span> <span class="comment"></span></div>
+<div class="line"><a name="l02082"></a><span class="lineno"> 2082</span> <span class="comment">PERL_PATH = /usr/bin/perl</span></div>
+<div class="line"><a name="l02083"></a><span class="lineno"> 2083</span> <span class="comment"></span></div>
+<div class="line"><a name="l02084"></a><span class="lineno"> 2084</span> <span class="comment">#---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l02085"></a><span class="lineno"> 2085</span> <span class="comment"># Configuration options related to the dot tool</span></div>
+<div class="line"><a name="l02086"></a><span class="lineno"> 2086</span> <span class="comment">#---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l02087"></a><span class="lineno"> 2087</span> <span class="comment"></span></div>
+<div class="line"><a name="l02088"></a><span class="lineno"> 2088</span> <span class="comment"># If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram</span></div>
+<div class="line"><a name="l02089"></a><span class="lineno"> 2089</span> <span class="comment"># (in HTML and LaTeX) for classes with base or super classes. Setting the tag to</span></div>
+<div class="line"><a name="l02090"></a><span class="lineno"> 2090</span> <span class="comment"># NO turns the diagrams off. Note that this option also works with HAVE_DOT</span></div>
+<div class="line"><a name="l02091"></a><span class="lineno"> 2091</span> <span class="comment"># disabled, but it is recommended to install and use dot, since it yields more</span></div>
+<div class="line"><a name="l02092"></a><span class="lineno"> 2092</span> <span class="comment"># powerful graphs.</span></div>
+<div class="line"><a name="l02093"></a><span class="lineno"> 2093</span> <span class="comment"># The default value is: YES.</span></div>
+<div class="line"><a name="l02094"></a><span class="lineno"> 2094</span> <span class="comment"></span></div>
+<div class="line"><a name="l02095"></a><span class="lineno"> 2095</span> <span class="comment">CLASS_DIAGRAMS = YES</span></div>
+<div class="line"><a name="l02096"></a><span class="lineno"> 2096</span> <span class="comment"></span></div>
+<div class="line"><a name="l02097"></a><span class="lineno"> 2097</span> <span class="comment"># You can define message sequence charts within doxygen comments using the \msc</span></div>
+<div class="line"><a name="l02098"></a><span class="lineno"> 2098</span> <span class="comment"># command. Doxygen will then run the mscgen tool (see:</span></div>
+<div class="line"><a name="l02099"></a><span class="lineno"> 2099</span> <span class="comment"># http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the</span></div>
+<div class="line"><a name="l02100"></a><span class="lineno"> 2100</span> <span class="comment"># documentation. The MSCGEN_PATH tag allows you to specify the directory where</span></div>
+<div class="line"><a name="l02101"></a><span class="lineno"> 2101</span> <span class="comment"># the mscgen tool resides. If left empty the tool is assumed to be found in the</span></div>
+<div class="line"><a name="l02102"></a><span class="lineno"> 2102</span> <span class="comment"># default search path.</span></div>
+<div class="line"><a name="l02103"></a><span class="lineno"> 2103</span> <span class="comment"></span></div>
+<div class="line"><a name="l02104"></a><span class="lineno"> 2104</span> <span class="comment">MSCGEN_PATH = </span></div>
+<div class="line"><a name="l02105"></a><span class="lineno"> 2105</span> <span class="comment"></span></div>
+<div class="line"><a name="l02106"></a><span class="lineno"> 2106</span> <span class="comment"># You can include diagrams made with dia in doxygen documentation. Doxygen will</span></div>
+<div class="line"><a name="l02107"></a><span class="lineno"> 2107</span> <span class="comment"># then run dia to produce the diagram and insert it in the documentation. The</span></div>
+<div class="line"><a name="l02108"></a><span class="lineno"> 2108</span> <span class="comment"># DIA_PATH tag allows you to specify the directory where the dia binary resides.</span></div>
+<div class="line"><a name="l02109"></a><span class="lineno"> 2109</span> <span class="comment"># If left empty dia is assumed to be found in the default search path.</span></div>
+<div class="line"><a name="l02110"></a><span class="lineno"> 2110</span> <span class="comment"></span></div>
+<div class="line"><a name="l02111"></a><span class="lineno"> 2111</span> <span class="comment">DIA_PATH = </span></div>
+<div class="line"><a name="l02112"></a><span class="lineno"> 2112</span> <span class="comment"></span></div>
+<div class="line"><a name="l02113"></a><span class="lineno"> 2113</span> <span class="comment"># If set to YES the inheritance and collaboration graphs will hide inheritance</span></div>
+<div class="line"><a name="l02114"></a><span class="lineno"> 2114</span> <span class="comment"># and usage relations if the target is undocumented or is not a class.</span></div>
+<div class="line"><a name="l02115"></a><span class="lineno"> 2115</span> <span class="comment"># The default value is: YES.</span></div>
+<div class="line"><a name="l02116"></a><span class="lineno"> 2116</span> <span class="comment"></span></div>
+<div class="line"><a name="l02117"></a><span class="lineno"> 2117</span> <span class="comment">HIDE_UNDOC_RELATIONS = YES</span></div>
+<div class="line"><a name="l02118"></a><span class="lineno"> 2118</span> <span class="comment"></span></div>
+<div class="line"><a name="l02119"></a><span class="lineno"> 2119</span> <span class="comment"># If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is</span></div>
+<div class="line"><a name="l02120"></a><span class="lineno"> 2120</span> <span class="comment"># available from the path. This tool is part of Graphviz (see:</span></div>
+<div class="line"><a name="l02121"></a><span class="lineno"> 2121</span> <span class="comment"># http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent</span></div>
+<div class="line"><a name="l02122"></a><span class="lineno"> 2122</span> <span class="comment"># Bell Labs. The other options in this section have no effect if this option is</span></div>
+<div class="line"><a name="l02123"></a><span class="lineno"> 2123</span> <span class="comment"># set to NO</span></div>
+<div class="line"><a name="l02124"></a><span class="lineno"> 2124</span> <span class="comment"># The default value is: NO.</span></div>
+<div class="line"><a name="l02125"></a><span class="lineno"> 2125</span> <span class="comment"></span></div>
+<div class="line"><a name="l02126"></a><span class="lineno"> 2126</span> <span class="comment">HAVE_DOT = NO</span></div>
+<div class="line"><a name="l02127"></a><span class="lineno"> 2127</span> <span class="comment"></span></div>
+<div class="line"><a name="l02128"></a><span class="lineno"> 2128</span> <span class="comment"># The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed</span></div>
+<div class="line"><a name="l02129"></a><span class="lineno"> 2129</span> <span class="comment"># to run in parallel. When set to 0 doxygen will base this on the number of</span></div>
+<div class="line"><a name="l02130"></a><span class="lineno"> 2130</span> <span class="comment"># processors available in the system. You can set it explicitly to a value</span></div>
+<div class="line"><a name="l02131"></a><span class="lineno"> 2131</span> <span class="comment"># larger than 0 to get control over the balance between CPU load and processing</span></div>
+<div class="line"><a name="l02132"></a><span class="lineno"> 2132</span> <span class="comment"># speed.</span></div>
+<div class="line"><a name="l02133"></a><span class="lineno"> 2133</span> <span class="comment"># Minimum value: 0, maximum value: 32, default value: 0.</span></div>
+<div class="line"><a name="l02134"></a><span class="lineno"> 2134</span> <span class="comment"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>
+<div class="line"><a name="l02135"></a><span class="lineno"> 2135</span> <span class="comment"></span></div>
+<div class="line"><a name="l02136"></a><span class="lineno"> 2136</span> <span class="comment">DOT_NUM_THREADS = 0</span></div>
+<div class="line"><a name="l02137"></a><span class="lineno"> 2137</span> <span class="comment"></span></div>
+<div class="line"><a name="l02138"></a><span class="lineno"> 2138</span> <span class="comment"># When you want a differently looking font in the dot files that doxygen</span></div>
+<div class="line"><a name="l02139"></a><span class="lineno"> 2139</span> <span class="comment"># generates you can specify the font name using DOT_FONTNAME. You need to make</span></div>
+<div class="line"><a name="l02140"></a><span class="lineno"> 2140</span> <span class="comment"># sure dot is able to find the font, which can be done by putting it in a</span></div>
+<div class="line"><a name="l02141"></a><span class="lineno"> 2141</span> <span class="comment"># standard location or by setting the DOTFONTPATH environment variable or by</span></div>
+<div class="line"><a name="l02142"></a><span class="lineno"> 2142</span> <span class="comment"># setting DOT_FONTPATH to the directory containing the font.</span></div>
+<div class="line"><a name="l02143"></a><span class="lineno"> 2143</span> <span class="comment"># The default value is: Helvetica.</span></div>
+<div class="line"><a name="l02144"></a><span class="lineno"> 2144</span> <span class="comment"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>
+<div class="line"><a name="l02145"></a><span class="lineno"> 2145</span> <span class="comment"></span></div>
+<div class="line"><a name="l02146"></a><span class="lineno"> 2146</span> <span class="comment">DOT_FONTNAME = Helvetica</span></div>
+<div class="line"><a name="l02147"></a><span class="lineno"> 2147</span> <span class="comment"></span></div>
+<div class="line"><a name="l02148"></a><span class="lineno"> 2148</span> <span class="comment"># The DOT_FONTSIZE tag can be used to set the size (in points) of the font of</span></div>
+<div class="line"><a name="l02149"></a><span class="lineno"> 2149</span> <span class="comment"># dot graphs.</span></div>
+<div class="line"><a name="l02150"></a><span class="lineno"> 2150</span> <span class="comment"># Minimum value: 4, maximum value: 24, default value: 10.</span></div>
+<div class="line"><a name="l02151"></a><span class="lineno"> 2151</span> <span class="comment"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>
+<div class="line"><a name="l02152"></a><span class="lineno"> 2152</span> <span class="comment"></span></div>
+<div class="line"><a name="l02153"></a><span class="lineno"> 2153</span> <span class="comment">DOT_FONTSIZE = 10</span></div>
+<div class="line"><a name="l02154"></a><span class="lineno"> 2154</span> <span class="comment"></span></div>
+<div class="line"><a name="l02155"></a><span class="lineno"> 2155</span> <span class="comment"># By default doxygen will tell dot to use the default font as specified with</span></div>
+<div class="line"><a name="l02156"></a><span class="lineno"> 2156</span> <span class="comment"># DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set</span></div>
+<div class="line"><a name="l02157"></a><span class="lineno"> 2157</span> <span class="comment"># the path where dot can find it using this tag.</span></div>
+<div class="line"><a name="l02158"></a><span class="lineno"> 2158</span> <span class="comment"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>
+<div class="line"><a name="l02159"></a><span class="lineno"> 2159</span> <span class="comment"></span></div>
+<div class="line"><a name="l02160"></a><span class="lineno"> 2160</span> <span class="comment">DOT_FONTPATH = </span></div>
+<div class="line"><a name="l02161"></a><span class="lineno"> 2161</span> <span class="comment"></span></div>
+<div class="line"><a name="l02162"></a><span class="lineno"> 2162</span> <span class="comment"># If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for</span></div>
+<div class="line"><a name="l02163"></a><span class="lineno"> 2163</span> <span class="comment"># each documented class showing the direct and indirect inheritance relations.</span></div>
+<div class="line"><a name="l02164"></a><span class="lineno"> 2164</span> <span class="comment"># Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.</span></div>
+<div class="line"><a name="l02165"></a><span class="lineno"> 2165</span> <span class="comment"># The default value is: YES.</span></div>
+<div class="line"><a name="l02166"></a><span class="lineno"> 2166</span> <span class="comment"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>
+<div class="line"><a name="l02167"></a><span class="lineno"> 2167</span> <span class="comment"></span></div>
+<div class="line"><a name="l02168"></a><span class="lineno"> 2168</span> <span class="comment">CLASS_GRAPH = YES</span></div>
+<div class="line"><a name="l02169"></a><span class="lineno"> 2169</span> <span class="comment"></span></div>
+<div class="line"><a name="l02170"></a><span class="lineno"> 2170</span> <span class="comment"># If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a</span></div>
+<div class="line"><a name="l02171"></a><span class="lineno"> 2171</span> <span class="comment"># graph for each documented class showing the direct and indirect implementation</span></div>
+<div class="line"><a name="l02172"></a><span class="lineno"> 2172</span> <span class="comment"># dependencies (inheritance, containment, and class references variables) of the</span></div>
+<div class="line"><a name="l02173"></a><span class="lineno"> 2173</span> <span class="comment"># class with other documented classes.</span></div>
+<div class="line"><a name="l02174"></a><span class="lineno"> 2174</span> <span class="comment"># The default value is: YES.</span></div>
+<div class="line"><a name="l02175"></a><span class="lineno"> 2175</span> <span class="comment"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>
+<div class="line"><a name="l02176"></a><span class="lineno"> 2176</span> <span class="comment"></span></div>
+<div class="line"><a name="l02177"></a><span class="lineno"> 2177</span> <span class="comment">COLLABORATION_GRAPH = YES</span></div>
+<div class="line"><a name="l02178"></a><span class="lineno"> 2178</span> <span class="comment"></span></div>
+<div class="line"><a name="l02179"></a><span class="lineno"> 2179</span> <span class="comment"># If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for</span></div>
+<div class="line"><a name="l02180"></a><span class="lineno"> 2180</span> <span class="comment"># groups, showing the direct groups dependencies.</span></div>
+<div class="line"><a name="l02181"></a><span class="lineno"> 2181</span> <span class="comment"># The default value is: YES.</span></div>
+<div class="line"><a name="l02182"></a><span class="lineno"> 2182</span> <span class="comment"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>
+<div class="line"><a name="l02183"></a><span class="lineno"> 2183</span> <span class="comment"></span></div>
+<div class="line"><a name="l02184"></a><span class="lineno"> 2184</span> <span class="comment">GROUP_GRAPHS = YES</span></div>
+<div class="line"><a name="l02185"></a><span class="lineno"> 2185</span> <span class="comment"></span></div>
+<div class="line"><a name="l02186"></a><span class="lineno"> 2186</span> <span class="comment"># If the UML_LOOK tag is set to YES, doxygen will generate inheritance and</span></div>
+<div class="line"><a name="l02187"></a><span class="lineno"> 2187</span> <span class="comment"># collaboration diagrams in a style similar to the OMG's Unified Modeling</span></div>
+<div class="line"><a name="l02188"></a><span class="lineno"> 2188</span> <span class="comment"># Language.</span></div>
+<div class="line"><a name="l02189"></a><span class="lineno"> 2189</span> <span class="comment"># The default value is: NO.</span></div>
+<div class="line"><a name="l02190"></a><span class="lineno"> 2190</span> <span class="comment"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>
+<div class="line"><a name="l02191"></a><span class="lineno"> 2191</span> <span class="comment"></span></div>
+<div class="line"><a name="l02192"></a><span class="lineno"> 2192</span> <span class="comment">UML_LOOK = NO</span></div>
+<div class="line"><a name="l02193"></a><span class="lineno"> 2193</span> <span class="comment"></span></div>
+<div class="line"><a name="l02194"></a><span class="lineno"> 2194</span> <span class="comment"># If the UML_LOOK tag is enabled, the fields and methods are shown inside the</span></div>
+<div class="line"><a name="l02195"></a><span class="lineno"> 2195</span> <span class="comment"># class node. If there are many fields or methods and many nodes the graph may</span></div>
+<div class="line"><a name="l02196"></a><span class="lineno"> 2196</span> <span class="comment"># become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the</span></div>
+<div class="line"><a name="l02197"></a><span class="lineno"> 2197</span> <span class="comment"># number of items for each type to make the size more manageable. Set this to 0</span></div>
+<div class="line"><a name="l02198"></a><span class="lineno"> 2198</span> <span class="comment"># for no limit. Note that the threshold may be exceeded by 50% before the limit</span></div>
+<div class="line"><a name="l02199"></a><span class="lineno"> 2199</span> <span class="comment"># is enforced. So when you set the threshold to 10, up to 15 fields may appear,</span></div>
+<div class="line"><a name="l02200"></a><span class="lineno"> 2200</span> <span class="comment"># but if the number exceeds 15, the total amount of fields shown is limited to</span></div>
+<div class="line"><a name="l02201"></a><span class="lineno"> 2201</span> <span class="comment"># 10.</span></div>
+<div class="line"><a name="l02202"></a><span class="lineno"> 2202</span> <span class="comment"># Minimum value: 0, maximum value: 100, default value: 10.</span></div>
+<div class="line"><a name="l02203"></a><span class="lineno"> 2203</span> <span class="comment"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>
+<div class="line"><a name="l02204"></a><span class="lineno"> 2204</span> <span class="comment"></span></div>
+<div class="line"><a name="l02205"></a><span class="lineno"> 2205</span> <span class="comment">UML_LIMIT_NUM_FIELDS = 10</span></div>
+<div class="line"><a name="l02206"></a><span class="lineno"> 2206</span> <span class="comment"></span></div>
+<div class="line"><a name="l02207"></a><span class="lineno"> 2207</span> <span class="comment"># If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and</span></div>
+<div class="line"><a name="l02208"></a><span class="lineno"> 2208</span> <span class="comment"># collaboration graphs will show the relations between templates and their</span></div>
+<div class="line"><a name="l02209"></a><span class="lineno"> 2209</span> <span class="comment"># instances.</span></div>
+<div class="line"><a name="l02210"></a><span class="lineno"> 2210</span> <span class="comment"># The default value is: NO.</span></div>
+<div class="line"><a name="l02211"></a><span class="lineno"> 2211</span> <span class="comment"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>
+<div class="line"><a name="l02212"></a><span class="lineno"> 2212</span> <span class="comment"></span></div>
+<div class="line"><a name="l02213"></a><span class="lineno"> 2213</span> <span class="comment">TEMPLATE_RELATIONS = NO</span></div>
+<div class="line"><a name="l02214"></a><span class="lineno"> 2214</span> <span class="comment"></span></div>
+<div class="line"><a name="l02215"></a><span class="lineno"> 2215</span> <span class="comment"># If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to</span></div>
+<div class="line"><a name="l02216"></a><span class="lineno"> 2216</span> <span class="comment"># YES then doxygen will generate a graph for each documented file showing the</span></div>
+<div class="line"><a name="l02217"></a><span class="lineno"> 2217</span> <span class="comment"># direct and indirect include dependencies of the file with other documented</span></div>
+<div class="line"><a name="l02218"></a><span class="lineno"> 2218</span> <span class="comment"># files.</span></div>
+<div class="line"><a name="l02219"></a><span class="lineno"> 2219</span> <span class="comment"># The default value is: YES.</span></div>
+<div class="line"><a name="l02220"></a><span class="lineno"> 2220</span> <span class="comment"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>
+<div class="line"><a name="l02221"></a><span class="lineno"> 2221</span> <span class="comment"></span></div>
+<div class="line"><a name="l02222"></a><span class="lineno"> 2222</span> <span class="comment">INCLUDE_GRAPH = YES</span></div>
+<div class="line"><a name="l02223"></a><span class="lineno"> 2223</span> <span class="comment"></span></div>
+<div class="line"><a name="l02224"></a><span class="lineno"> 2224</span> <span class="comment"># If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are</span></div>
+<div class="line"><a name="l02225"></a><span class="lineno"> 2225</span> <span class="comment"># set to YES then doxygen will generate a graph for each documented file showing</span></div>
+<div class="line"><a name="l02226"></a><span class="lineno"> 2226</span> <span class="comment"># the direct and indirect include dependencies of the file with other documented</span></div>
+<div class="line"><a name="l02227"></a><span class="lineno"> 2227</span> <span class="comment"># files.</span></div>
+<div class="line"><a name="l02228"></a><span class="lineno"> 2228</span> <span class="comment"># The default value is: YES.</span></div>
+<div class="line"><a name="l02229"></a><span class="lineno"> 2229</span> <span class="comment"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>
+<div class="line"><a name="l02230"></a><span class="lineno"> 2230</span> <span class="comment"></span></div>
+<div class="line"><a name="l02231"></a><span class="lineno"> 2231</span> <span class="comment">INCLUDED_BY_GRAPH = YES</span></div>
+<div class="line"><a name="l02232"></a><span class="lineno"> 2232</span> <span class="comment"></span></div>
+<div class="line"><a name="l02233"></a><span class="lineno"> 2233</span> <span class="comment"># If the CALL_GRAPH tag is set to YES then doxygen will generate a call</span></div>
+<div class="line"><a name="l02234"></a><span class="lineno"> 2234</span> <span class="comment"># dependency graph for every global function or class method.</span></div>
+<div class="line"><a name="l02235"></a><span class="lineno"> 2235</span> <span class="comment">#</span></div>
+<div class="line"><a name="l02236"></a><span class="lineno"> 2236</span> <span class="comment"># Note that enabling this option will significantly increase the time of a run.</span></div>
+<div class="line"><a name="l02237"></a><span class="lineno"> 2237</span> <span class="comment"># So in most cases it will be better to enable call graphs for selected</span></div>
+<div class="line"><a name="l02238"></a><span class="lineno"> 2238</span> <span class="comment"># functions only using the \callgraph command. Disabling a call graph can be</span></div>
+<div class="line"><a name="l02239"></a><span class="lineno"> 2239</span> <span class="comment"># accomplished by means of the command \hidecallgraph.</span></div>
+<div class="line"><a name="l02240"></a><span class="lineno"> 2240</span> <span class="comment"># The default value is: NO.</span></div>
+<div class="line"><a name="l02241"></a><span class="lineno"> 2241</span> <span class="comment"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>
+<div class="line"><a name="l02242"></a><span class="lineno"> 2242</span> <span class="comment"></span></div>
+<div class="line"><a name="l02243"></a><span class="lineno"> 2243</span> <span class="comment">CALL_GRAPH = YES</span></div>
+<div class="line"><a name="l02244"></a><span class="lineno"> 2244</span> <span class="comment"></span></div>
+<div class="line"><a name="l02245"></a><span class="lineno"> 2245</span> <span class="comment"># If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller</span></div>
+<div class="line"><a name="l02246"></a><span class="lineno"> 2246</span> <span class="comment"># dependency graph for every global function or class method.</span></div>
+<div class="line"><a name="l02247"></a><span class="lineno"> 2247</span> <span class="comment">#</span></div>
+<div class="line"><a name="l02248"></a><span class="lineno"> 2248</span> <span class="comment"># Note that enabling this option will significantly increase the time of a run.</span></div>
+<div class="line"><a name="l02249"></a><span class="lineno"> 2249</span> <span class="comment"># So in most cases it will be better to enable caller graphs for selected</span></div>
+<div class="line"><a name="l02250"></a><span class="lineno"> 2250</span> <span class="comment"># functions only using the \callergraph command. Disabling a caller graph can be</span></div>
+<div class="line"><a name="l02251"></a><span class="lineno"> 2251</span> <span class="comment"># accomplished by means of the command \hidecallergraph.</span></div>
+<div class="line"><a name="l02252"></a><span class="lineno"> 2252</span> <span class="comment"># The default value is: NO.</span></div>
+<div class="line"><a name="l02253"></a><span class="lineno"> 2253</span> <span class="comment"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>
+<div class="line"><a name="l02254"></a><span class="lineno"> 2254</span> <span class="comment"></span></div>
+<div class="line"><a name="l02255"></a><span class="lineno"> 2255</span> <span class="comment">CALLER_GRAPH = YES</span></div>
+<div class="line"><a name="l02256"></a><span class="lineno"> 2256</span> <span class="comment"></span></div>
+<div class="line"><a name="l02257"></a><span class="lineno"> 2257</span> <span class="comment"># If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical</span></div>
+<div class="line"><a name="l02258"></a><span class="lineno"> 2258</span> <span class="comment"># hierarchy of all classes instead of a textual one.</span></div>
+<div class="line"><a name="l02259"></a><span class="lineno"> 2259</span> <span class="comment"># The default value is: YES.</span></div>
+<div class="line"><a name="l02260"></a><span class="lineno"> 2260</span> <span class="comment"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>
+<div class="line"><a name="l02261"></a><span class="lineno"> 2261</span> <span class="comment"></span></div>
+<div class="line"><a name="l02262"></a><span class="lineno"> 2262</span> <span class="comment">GRAPHICAL_HIERARCHY = YES</span></div>
+<div class="line"><a name="l02263"></a><span class="lineno"> 2263</span> <span class="comment"></span></div>
+<div class="line"><a name="l02264"></a><span class="lineno"> 2264</span> <span class="comment"># If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the</span></div>
+<div class="line"><a name="l02265"></a><span class="lineno"> 2265</span> <span class="comment"># dependencies a directory has on other directories in a graphical way. The</span></div>
+<div class="line"><a name="l02266"></a><span class="lineno"> 2266</span> <span class="comment"># dependency relations are determined by the #include relations between the</span></div>
+<div class="line"><a name="l02267"></a><span class="lineno"> 2267</span> <span class="comment"># files in the directories.</span></div>
+<div class="line"><a name="l02268"></a><span class="lineno"> 2268</span> <span class="comment"># The default value is: YES.</span></div>
+<div class="line"><a name="l02269"></a><span class="lineno"> 2269</span> <span class="comment"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>
+<div class="line"><a name="l02270"></a><span class="lineno"> 2270</span> <span class="comment"></span></div>
+<div class="line"><a name="l02271"></a><span class="lineno"> 2271</span> <span class="comment">DIRECTORY_GRAPH = YES</span></div>
+<div class="line"><a name="l02272"></a><span class="lineno"> 2272</span> <span class="comment"></span></div>
+<div class="line"><a name="l02273"></a><span class="lineno"> 2273</span> <span class="comment"># The DOT_IMAGE_FORMAT tag can be used to set the image format of the images</span></div>
+<div class="line"><a name="l02274"></a><span class="lineno"> 2274</span> <span class="comment"># generated by dot. For an explanation of the image formats see the section</span></div>
+<div class="line"><a name="l02275"></a><span class="lineno"> 2275</span> <span class="comment"># output formats in the documentation of the dot tool (Graphviz (see:</span></div>
+<div class="line"><a name="l02276"></a><span class="lineno"> 2276</span> <span class="comment"># http://www.graphviz.org/)).</span></div>
+<div class="line"><a name="l02277"></a><span class="lineno"> 2277</span> <span class="comment"># Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order</span></div>
+<div class="line"><a name="l02278"></a><span class="lineno"> 2278</span> <span class="comment"># to make the SVG files visible in IE 9+ (other browsers do not have this</span></div>
+<div class="line"><a name="l02279"></a><span class="lineno"> 2279</span> <span class="comment"># requirement).</span></div>
+<div class="line"><a name="l02280"></a><span class="lineno"> 2280</span> <span class="comment"># Possible values are: png, jpg, gif, svg, png:gd, png:gd:gd, png:cairo,</span></div>
+<div class="line"><a name="l02281"></a><span class="lineno"> 2281</span> <span class="comment"># png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and</span></div>
+<div class="line"><a name="l02282"></a><span class="lineno"> 2282</span> <span class="comment"># png:gdiplus:gdiplus.</span></div>
+<div class="line"><a name="l02283"></a><span class="lineno"> 2283</span> <span class="comment"># The default value is: png.</span></div>
+<div class="line"><a name="l02284"></a><span class="lineno"> 2284</span> <span class="comment"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>
+<div class="line"><a name="l02285"></a><span class="lineno"> 2285</span> <span class="comment"></span></div>
+<div class="line"><a name="l02286"></a><span class="lineno"> 2286</span> <span class="comment">DOT_IMAGE_FORMAT = png</span></div>
+<div class="line"><a name="l02287"></a><span class="lineno"> 2287</span> <span class="comment"></span></div>
+<div class="line"><a name="l02288"></a><span class="lineno"> 2288</span> <span class="comment"># If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to</span></div>
+<div class="line"><a name="l02289"></a><span class="lineno"> 2289</span> <span class="comment"># enable generation of interactive SVG images that allow zooming and panning.</span></div>
+<div class="line"><a name="l02290"></a><span class="lineno"> 2290</span> <span class="comment">#</span></div>
+<div class="line"><a name="l02291"></a><span class="lineno"> 2291</span> <span class="comment"># Note that this requires a modern browser other than Internet Explorer. Tested</span></div>
+<div class="line"><a name="l02292"></a><span class="lineno"> 2292</span> <span class="comment"># and working are Firefox, Chrome, Safari, and Opera.</span></div>
+<div class="line"><a name="l02293"></a><span class="lineno"> 2293</span> <span class="comment"># Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make</span></div>
+<div class="line"><a name="l02294"></a><span class="lineno"> 2294</span> <span class="comment"># the SVG files visible. Older versions of IE do not have SVG support.</span></div>
+<div class="line"><a name="l02295"></a><span class="lineno"> 2295</span> <span class="comment"># The default value is: NO.</span></div>
+<div class="line"><a name="l02296"></a><span class="lineno"> 2296</span> <span class="comment"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>
+<div class="line"><a name="l02297"></a><span class="lineno"> 2297</span> <span class="comment"></span></div>
+<div class="line"><a name="l02298"></a><span class="lineno"> 2298</span> <span class="comment">INTERACTIVE_SVG = NO</span></div>
+<div class="line"><a name="l02299"></a><span class="lineno"> 2299</span> <span class="comment"></span></div>
+<div class="line"><a name="l02300"></a><span class="lineno"> 2300</span> <span class="comment"># The DOT_PATH tag can be used to specify the path where the dot tool can be</span></div>
+<div class="line"><a name="l02301"></a><span class="lineno"> 2301</span> <span class="comment"># found. If left blank, it is assumed the dot tool can be found in the path.</span></div>
+<div class="line"><a name="l02302"></a><span class="lineno"> 2302</span> <span class="comment"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>
+<div class="line"><a name="l02303"></a><span class="lineno"> 2303</span> <span class="comment"></span></div>
+<div class="line"><a name="l02304"></a><span class="lineno"> 2304</span> <span class="comment">DOT_PATH = </span></div>
+<div class="line"><a name="l02305"></a><span class="lineno"> 2305</span> <span class="comment"></span></div>
+<div class="line"><a name="l02306"></a><span class="lineno"> 2306</span> <span class="comment"># The DOTFILE_DIRS tag can be used to specify one or more directories that</span></div>
+<div class="line"><a name="l02307"></a><span class="lineno"> 2307</span> <span class="comment"># contain dot files that are included in the documentation (see the \dotfile</span></div>
+<div class="line"><a name="l02308"></a><span class="lineno"> 2308</span> <span class="comment"># command).</span></div>
+<div class="line"><a name="l02309"></a><span class="lineno"> 2309</span> <span class="comment"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>
+<div class="line"><a name="l02310"></a><span class="lineno"> 2310</span> <span class="comment"></span></div>
+<div class="line"><a name="l02311"></a><span class="lineno"> 2311</span> <span class="comment">DOTFILE_DIRS = </span></div>
+<div class="line"><a name="l02312"></a><span class="lineno"> 2312</span> <span class="comment"></span></div>
+<div class="line"><a name="l02313"></a><span class="lineno"> 2313</span> <span class="comment"># The MSCFILE_DIRS tag can be used to specify one or more directories that</span></div>
+<div class="line"><a name="l02314"></a><span class="lineno"> 2314</span> <span class="comment"># contain msc files that are included in the documentation (see the \mscfile</span></div>
+<div class="line"><a name="l02315"></a><span class="lineno"> 2315</span> <span class="comment"># command).</span></div>
+<div class="line"><a name="l02316"></a><span class="lineno"> 2316</span> <span class="comment"></span></div>
+<div class="line"><a name="l02317"></a><span class="lineno"> 2317</span> <span class="comment">MSCFILE_DIRS = </span></div>
+<div class="line"><a name="l02318"></a><span class="lineno"> 2318</span> <span class="comment"></span></div>
+<div class="line"><a name="l02319"></a><span class="lineno"> 2319</span> <span class="comment"># The DIAFILE_DIRS tag can be used to specify one or more directories that</span></div>
+<div class="line"><a name="l02320"></a><span class="lineno"> 2320</span> <span class="comment"># contain dia files that are included in the documentation (see the \diafile</span></div>
+<div class="line"><a name="l02321"></a><span class="lineno"> 2321</span> <span class="comment"># command).</span></div>
+<div class="line"><a name="l02322"></a><span class="lineno"> 2322</span> <span class="comment"></span></div>
+<div class="line"><a name="l02323"></a><span class="lineno"> 2323</span> <span class="comment">DIAFILE_DIRS = </span></div>
+<div class="line"><a name="l02324"></a><span class="lineno"> 2324</span> <span class="comment"></span></div>
+<div class="line"><a name="l02325"></a><span class="lineno"> 2325</span> <span class="comment"># When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the</span></div>
+<div class="line"><a name="l02326"></a><span class="lineno"> 2326</span> <span class="comment"># path where java can find the plantuml.jar file. If left blank, it is assumed</span></div>
+<div class="line"><a name="l02327"></a><span class="lineno"> 2327</span> <span class="comment"># PlantUML is not used or called during a preprocessing step. Doxygen will</span></div>
+<div class="line"><a name="l02328"></a><span class="lineno"> 2328</span> <span class="comment"># generate a warning when it encounters a \startuml command in this case and</span></div>
+<div class="line"><a name="l02329"></a><span class="lineno"> 2329</span> <span class="comment"># will not generate output for the diagram.</span></div>
+<div class="line"><a name="l02330"></a><span class="lineno"> 2330</span> <span class="comment"></span></div>
+<div class="line"><a name="l02331"></a><span class="lineno"> 2331</span> <span class="comment">PLANTUML_JAR_PATH = </span></div>
+<div class="line"><a name="l02332"></a><span class="lineno"> 2332</span> <span class="comment"></span></div>
+<div class="line"><a name="l02333"></a><span class="lineno"> 2333</span> <span class="comment"># When using plantuml, the specified paths are searched for files specified by</span></div>
+<div class="line"><a name="l02334"></a><span class="lineno"> 2334</span> <span class="comment"># the !include statement in a plantuml block.</span></div>
+<div class="line"><a name="l02335"></a><span class="lineno"> 2335</span> <span class="comment"></span></div>
+<div class="line"><a name="l02336"></a><span class="lineno"> 2336</span> <span class="comment">PLANTUML_INCLUDE_PATH = </span></div>
+<div class="line"><a name="l02337"></a><span class="lineno"> 2337</span> <span class="comment"></span></div>
+<div class="line"><a name="l02338"></a><span class="lineno"> 2338</span> <span class="comment"># The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes</span></div>
+<div class="line"><a name="l02339"></a><span class="lineno"> 2339</span> <span class="comment"># that will be shown in the graph. If the number of nodes in a graph becomes</span></div>
+<div class="line"><a name="l02340"></a><span class="lineno"> 2340</span> <span class="comment"># larger than this value, doxygen will truncate the graph, which is visualized</span></div>
+<div class="line"><a name="l02341"></a><span class="lineno"> 2341</span> <span class="comment"># by representing a node as a red box. Note that doxygen if the number of direct</span></div>
+<div class="line"><a name="l02342"></a><span class="lineno"> 2342</span> <span class="comment"># children of the root node in a graph is already larger than</span></div>
+<div class="line"><a name="l02343"></a><span class="lineno"> 2343</span> <span class="comment"># DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that</span></div>
+<div class="line"><a name="l02344"></a><span class="lineno"> 2344</span> <span class="comment"># the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.</span></div>
+<div class="line"><a name="l02345"></a><span class="lineno"> 2345</span> <span class="comment"># Minimum value: 0, maximum value: 10000, default value: 50.</span></div>
+<div class="line"><a name="l02346"></a><span class="lineno"> 2346</span> <span class="comment"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>
+<div class="line"><a name="l02347"></a><span class="lineno"> 2347</span> <span class="comment"></span></div>
+<div class="line"><a name="l02348"></a><span class="lineno"> 2348</span> <span class="comment">DOT_GRAPH_MAX_NODES = 50</span></div>
+<div class="line"><a name="l02349"></a><span class="lineno"> 2349</span> <span class="comment"></span></div>
+<div class="line"><a name="l02350"></a><span class="lineno"> 2350</span> <span class="comment"># The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs</span></div>
+<div class="line"><a name="l02351"></a><span class="lineno"> 2351</span> <span class="comment"># generated by dot. A depth value of 3 means that only nodes reachable from the</span></div>
+<div class="line"><a name="l02352"></a><span class="lineno"> 2352</span> <span class="comment"># root by following a path via at most 3 edges will be shown. Nodes that lay</span></div>
+<div class="line"><a name="l02353"></a><span class="lineno"> 2353</span> <span class="comment"># further from the root node will be omitted. Note that setting this option to 1</span></div>
+<div class="line"><a name="l02354"></a><span class="lineno"> 2354</span> <span class="comment"># or 2 may greatly reduce the computation time needed for large code bases. Also</span></div>
+<div class="line"><a name="l02355"></a><span class="lineno"> 2355</span> <span class="comment"># note that the size of a graph can be further restricted by</span></div>
+<div class="line"><a name="l02356"></a><span class="lineno"> 2356</span> <span class="comment"># DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.</span></div>
+<div class="line"><a name="l02357"></a><span class="lineno"> 2357</span> <span class="comment"># Minimum value: 0, maximum value: 1000, default value: 0.</span></div>
+<div class="line"><a name="l02358"></a><span class="lineno"> 2358</span> <span class="comment"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>
+<div class="line"><a name="l02359"></a><span class="lineno"> 2359</span> <span class="comment"></span></div>
+<div class="line"><a name="l02360"></a><span class="lineno"> 2360</span> <span class="comment">MAX_DOT_GRAPH_DEPTH = 1000</span></div>
+<div class="line"><a name="l02361"></a><span class="lineno"> 2361</span> <span class="comment"></span></div>
+<div class="line"><a name="l02362"></a><span class="lineno"> 2362</span> <span class="comment"># Set the DOT_TRANSPARENT tag to YES to generate images with a transparent</span></div>
+<div class="line"><a name="l02363"></a><span class="lineno"> 2363</span> <span class="comment"># background. This is disabled by default, because dot on Windows does not seem</span></div>
+<div class="line"><a name="l02364"></a><span class="lineno"> 2364</span> <span class="comment"># to support this out of the box.</span></div>
+<div class="line"><a name="l02365"></a><span class="lineno"> 2365</span> <span class="comment">#</span></div>
+<div class="line"><a name="l02366"></a><span class="lineno"> 2366</span> <span class="comment"># Warning: Depending on the platform used, enabling this option may lead to</span></div>
+<div class="line"><a name="l02367"></a><span class="lineno"> 2367</span> <span class="comment"># badly anti-aliased labels on the edges of a graph (i.e. they become hard to</span></div>
+<div class="line"><a name="l02368"></a><span class="lineno"> 2368</span> <span class="comment"># read).</span></div>
+<div class="line"><a name="l02369"></a><span class="lineno"> 2369</span> <span class="comment"># The default value is: NO.</span></div>
+<div class="line"><a name="l02370"></a><span class="lineno"> 2370</span> <span class="comment"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>
+<div class="line"><a name="l02371"></a><span class="lineno"> 2371</span> <span class="comment"></span></div>
+<div class="line"><a name="l02372"></a><span class="lineno"> 2372</span> <span class="comment">DOT_TRANSPARENT = NO</span></div>
+<div class="line"><a name="l02373"></a><span class="lineno"> 2373</span> <span class="comment"></span></div>
+<div class="line"><a name="l02374"></a><span class="lineno"> 2374</span> <span class="comment"># Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output</span></div>
+<div class="line"><a name="l02375"></a><span class="lineno"> 2375</span> <span class="comment"># files in one run (i.e. multiple -o and -T options on the command line). This</span></div>
+<div class="line"><a name="l02376"></a><span class="lineno"> 2376</span> <span class="comment"># makes dot run faster, but since only newer versions of dot (>1.8.10) support</span></div>
+<div class="line"><a name="l02377"></a><span class="lineno"> 2377</span> <span class="comment"># this, this feature is disabled by default.</span></div>
+<div class="line"><a name="l02378"></a><span class="lineno"> 2378</span> <span class="comment"># The default value is: NO.</span></div>
+<div class="line"><a name="l02379"></a><span class="lineno"> 2379</span> <span class="comment"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>
+<div class="line"><a name="l02380"></a><span class="lineno"> 2380</span> <span class="comment"></span></div>
+<div class="line"><a name="l02381"></a><span class="lineno"> 2381</span> <span class="comment">DOT_MULTI_TARGETS = NO</span></div>
+<div class="line"><a name="l02382"></a><span class="lineno"> 2382</span> <span class="comment"></span></div>
+<div class="line"><a name="l02383"></a><span class="lineno"> 2383</span> <span class="comment"># If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page</span></div>
+<div class="line"><a name="l02384"></a><span class="lineno"> 2384</span> <span class="comment"># explaining the meaning of the various boxes and arrows in the dot generated</span></div>
+<div class="line"><a name="l02385"></a><span class="lineno"> 2385</span> <span class="comment"># graphs.</span></div>
+<div class="line"><a name="l02386"></a><span class="lineno"> 2386</span> <span class="comment"># The default value is: YES.</span></div>
+<div class="line"><a name="l02387"></a><span class="lineno"> 2387</span> <span class="comment"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>
+<div class="line"><a name="l02388"></a><span class="lineno"> 2388</span> <span class="comment"></span></div>
+<div class="line"><a name="l02389"></a><span class="lineno"> 2389</span> <span class="comment">GENERATE_LEGEND = YES</span></div>
+<div class="line"><a name="l02390"></a><span class="lineno"> 2390</span> <span class="comment"></span></div>
+<div class="line"><a name="l02391"></a><span class="lineno"> 2391</span> <span class="comment"># If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot</span></div>
+<div class="line"><a name="l02392"></a><span class="lineno"> 2392</span> <span class="comment"># files that are used to generate the various graphs.</span></div>
+<div class="line"><a name="l02393"></a><span class="lineno"> 2393</span> <span class="comment"># The default value is: YES.</span></div>
+<div class="line"><a name="l02394"></a><span class="lineno"> 2394</span> <span class="comment"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>
+<div class="line"><a name="l02395"></a><span class="lineno"> 2395</span> <span class="comment"></span></div>
+<div class="line"><a name="l02396"></a><span class="lineno"> 2396</span> <span class="comment">DOT_CLEANUP = YES</span></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00051.html b/src/third_party/glm/doc/api/a00051.html
new file mode 100644
index 0000000..5dc17c1
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00051.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: mat2x2.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">mat2x2.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00051_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+
+<p>Definition in file <a class="el" href="a00051_source.html">mat2x2.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00051_source.html b/src/third_party/glm/doc/api/a00051_source.html
new file mode 100644
index 0000000..8147043
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00051_source.html
@@ -0,0 +1,88 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: mat2x2.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">mat2x2.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00051.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include "<a class="code" href="a00115.html">detail/type_mat2x2.hpp</a>"</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> </div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> {</div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>  <span class="keyword">typedef</span> tmat2x2<float, lowp> <a class="code" href="a00158.html#ga8ed94bfb5f4e0b2c3b0d49c5be478c85">lowp_mat2</a>;</div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>  </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keyword">typedef</span> tmat2x2<float, mediump> <a class="code" href="a00158.html#ga57b1e6c49a1432cefa518f13a56c5d47">mediump_mat2</a>;</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keyword">typedef</span> tmat2x2<float, highp> <a class="code" href="a00158.html#ga11c1eb1d307846d5bee7d7c0d8c386f0">highp_mat2</a>;</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  </div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keyword">typedef</span> tmat2x2<float, lowp> <a class="code" href="a00158.html#gab1a0d4d8fd3bb85f6616dac9dbef2981">lowp_mat2x2</a>;</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  </div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keyword">typedef</span> tmat2x2<float, mediump> <a class="code" href="a00158.html#ga1b77963ca2812ac2653624fa0f81ba74">mediump_mat2x2</a>;</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keyword">typedef</span> tmat2x2<float, highp> <a class="code" href="a00158.html#gae6a747cfc33928652abcb1347712b231">highp_mat2x2</a>;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> }<span class="comment">//namespace glm</span></div>
+<div class="ttc" id="a00158_html_ga57b1e6c49a1432cefa518f13a56c5d47"><div class="ttname"><a href="a00158.html#ga57b1e6c49a1432cefa518f13a56c5d47">glm::mediump_mat2</a></div><div class="ttdeci">tmat2x2< float, mediump > mediump_mat2</div><div class="ttdoc">2 columns of 2 components matrix of medium precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00046">type_mat.hpp:46</a></div></div>
+<div class="ttc" id="a00115_html"><div class="ttname"><a href="a00115.html">type_mat2x2.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00158_html_ga8ed94bfb5f4e0b2c3b0d49c5be478c85"><div class="ttname"><a href="a00158.html#ga8ed94bfb5f4e0b2c3b0d49c5be478c85">glm::lowp_mat2</a></div><div class="ttdeci">tmat2x2< float, lowp > lowp_mat2</div><div class="ttdoc">2 columns of 2 components matrix of low precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00039">type_mat.hpp:39</a></div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00158_html_gae6a747cfc33928652abcb1347712b231"><div class="ttname"><a href="a00158.html#gae6a747cfc33928652abcb1347712b231">glm::highp_mat2x2</a></div><div class="ttdeci">tmat2x2< float, highp > highp_mat2x2</div><div class="ttdoc">2 columns of 2 components matrix of high precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00074">type_mat.hpp:74</a></div></div>
+<div class="ttc" id="a00158_html_ga1b77963ca2812ac2653624fa0f81ba74"><div class="ttname"><a href="a00158.html#ga1b77963ca2812ac2653624fa0f81ba74">glm::mediump_mat2x2</a></div><div class="ttdeci">tmat2x2< float, mediump > mediump_mat2x2</div><div class="ttdoc">2 columns of 2 components matrix of medium precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00067">type_mat.hpp:67</a></div></div>
+<div class="ttc" id="a00158_html_gab1a0d4d8fd3bb85f6616dac9dbef2981"><div class="ttname"><a href="a00158.html#gab1a0d4d8fd3bb85f6616dac9dbef2981">glm::lowp_mat2x2</a></div><div class="ttdeci">tmat2x2< float, lowp > lowp_mat2x2</div><div class="ttdoc">2 columns of 2 components matrix of low precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00060">type_mat.hpp:60</a></div></div>
+<div class="ttc" id="a00158_html_ga11c1eb1d307846d5bee7d7c0d8c386f0"><div class="ttname"><a href="a00158.html#ga11c1eb1d307846d5bee7d7c0d8c386f0">glm::highp_mat2</a></div><div class="ttdeci">tmat2x2< float, highp > highp_mat2</div><div class="ttdoc">2 columns of 2 components matrix of high precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00053">type_mat.hpp:53</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00052.html b/src/third_party/glm/doc/api/a00052.html
new file mode 100644
index 0000000..b2bd9f5
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00052.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: mat2x3.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">mat2x3.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00052_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+
+<p>Definition in file <a class="el" href="a00052_source.html">mat2x3.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00052_source.html b/src/third_party/glm/doc/api/a00052_source.html
new file mode 100644
index 0000000..bfc7dcd
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00052_source.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: mat2x3.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">mat2x3.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00052.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include "<a class="code" href="a00116.html">detail/type_mat2x3.hpp</a>"</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> </div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> {</div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>  <span class="keyword">typedef</span> tmat2x3<float, lowp> <a class="code" href="a00158.html#gae8fe30d421bc141fa84ad414b803947d">lowp_mat2x3</a>;</div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keyword">typedef</span> tmat2x3<float, mediump> <a class="code" href="a00158.html#ga8c17198123baf6bfb59582ec42a3ca09">mediump_mat2x3</a>;</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keyword">typedef</span> tmat2x3<float, highp> <a class="code" href="a00158.html#ga9dfd75b5b17b89ccbecbdd6201efc74b">highp_mat2x3</a>;</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00158_html_gae8fe30d421bc141fa84ad414b803947d"><div class="ttname"><a href="a00158.html#gae8fe30d421bc141fa84ad414b803947d">glm::lowp_mat2x3</a></div><div class="ttdeci">tmat2x3< float, lowp > lowp_mat2x3</div><div class="ttdoc">2 columns of 3 components matrix of low precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00086">type_mat.hpp:86</a></div></div>
+<div class="ttc" id="a00158_html_ga8c17198123baf6bfb59582ec42a3ca09"><div class="ttname"><a href="a00158.html#ga8c17198123baf6bfb59582ec42a3ca09">glm::mediump_mat2x3</a></div><div class="ttdeci">tmat2x3< float, mediump > mediump_mat2x3</div><div class="ttdoc">2 columns of 3 components matrix of medium precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00093">type_mat.hpp:93</a></div></div>
+<div class="ttc" id="a00116_html"><div class="ttname"><a href="a00116.html">type_mat2x3.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00158_html_ga9dfd75b5b17b89ccbecbdd6201efc74b"><div class="ttname"><a href="a00158.html#ga9dfd75b5b17b89ccbecbdd6201efc74b">glm::highp_mat2x3</a></div><div class="ttdeci">tmat2x3< float, highp > highp_mat2x3</div><div class="ttdoc">2 columns of 3 components matrix of high precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00100">type_mat.hpp:100</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00053.html b/src/third_party/glm/doc/api/a00053.html
new file mode 100644
index 0000000..53bcc06
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00053.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: mat2x4.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">mat2x4.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00053_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+
+<p>Definition in file <a class="el" href="a00053_source.html">mat2x4.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00053_source.html b/src/third_party/glm/doc/api/a00053_source.html
new file mode 100644
index 0000000..8eef9f5
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00053_source.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: mat2x4.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">mat2x4.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00053.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include "<a class="code" href="a00117.html">detail/type_mat2x4.hpp</a>"</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> </div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> {</div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>  <span class="keyword">typedef</span> tmat2x4<float, lowp> <a class="code" href="a00158.html#gad64a0179b75508142a72917854034b9b">lowp_mat2x4</a>;</div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>  </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keyword">typedef</span> tmat2x4<float, mediump> <a class="code" href="a00158.html#ga7e95e348c99ef3d56b87ede14bc90bfe">mediump_mat2x4</a>;</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keyword">typedef</span> tmat2x4<float, highp> <a class="code" href="a00158.html#ga03fe2f9a84c61cc0f08b324a27d9b493">highp_mat2x4</a>;</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> }<span class="comment">//namespace glm</span></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00158_html_gad64a0179b75508142a72917854034b9b"><div class="ttname"><a href="a00158.html#gad64a0179b75508142a72917854034b9b">glm::lowp_mat2x4</a></div><div class="ttdeci">tmat2x4< float, lowp > lowp_mat2x4</div><div class="ttdoc">2 columns of 4 components matrix of low precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00112">type_mat.hpp:112</a></div></div>
+<div class="ttc" id="a00117_html"><div class="ttname"><a href="a00117.html">type_mat2x4.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00158_html_ga03fe2f9a84c61cc0f08b324a27d9b493"><div class="ttname"><a href="a00158.html#ga03fe2f9a84c61cc0f08b324a27d9b493">glm::highp_mat2x4</a></div><div class="ttdeci">tmat2x4< float, highp > highp_mat2x4</div><div class="ttdoc">2 columns of 4 components matrix of high precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00126">type_mat.hpp:126</a></div></div>
+<div class="ttc" id="a00158_html_ga7e95e348c99ef3d56b87ede14bc90bfe"><div class="ttname"><a href="a00158.html#ga7e95e348c99ef3d56b87ede14bc90bfe">glm::mediump_mat2x4</a></div><div class="ttdeci">tmat2x4< float, mediump > mediump_mat2x4</div><div class="ttdoc">2 columns of 4 components matrix of medium precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00119">type_mat.hpp:119</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00054.html b/src/third_party/glm/doc/api/a00054.html
new file mode 100644
index 0000000..0777a27
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00054.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: mat3x2.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">mat3x2.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00054_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+
+<p>Definition in file <a class="el" href="a00054_source.html">mat3x2.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00054_source.html b/src/third_party/glm/doc/api/a00054_source.html
new file mode 100644
index 0000000..e56e553
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00054_source.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: mat3x2.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">mat3x2.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00054.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include "<a class="code" href="a00118.html">detail/type_mat3x2.hpp</a>"</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> </div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> {</div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>  <span class="keyword">typedef</span> tmat3x2<float, lowp> <a class="code" href="a00158.html#gaa2542e884ac7d05ada8ebb078b721924">lowp_mat3x2</a>;</div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>  </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keyword">typedef</span> tmat3x2<float, mediump> <a class="code" href="a00158.html#ga9fa569295a9bd6ce0825ccb832c8aac9">mediump_mat3x2</a>;</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keyword">typedef</span> tmat3x2<float, highp> <a class="code" href="a00158.html#ga6b00cd7956ac2ee3d4f3ab3b549b564a">highp_mat3x2</a>;</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> }<span class="comment">//namespace</span></div>
+<div class="ttc" id="a00118_html"><div class="ttname"><a href="a00118.html">type_mat3x2.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00158_html_ga9fa569295a9bd6ce0825ccb832c8aac9"><div class="ttname"><a href="a00158.html#ga9fa569295a9bd6ce0825ccb832c8aac9">glm::mediump_mat3x2</a></div><div class="ttdeci">tmat3x2< float, mediump > mediump_mat3x2</div><div class="ttdoc">3 columns of 2 components matrix of medium precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00145">type_mat.hpp:145</a></div></div>
+<div class="ttc" id="a00158_html_ga6b00cd7956ac2ee3d4f3ab3b549b564a"><div class="ttname"><a href="a00158.html#ga6b00cd7956ac2ee3d4f3ab3b549b564a">glm::highp_mat3x2</a></div><div class="ttdeci">tmat3x2< float, highp > highp_mat3x2</div><div class="ttdoc">3 columns of 2 components matrix of high precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00152">type_mat.hpp:152</a></div></div>
+<div class="ttc" id="a00158_html_gaa2542e884ac7d05ada8ebb078b721924"><div class="ttname"><a href="a00158.html#gaa2542e884ac7d05ada8ebb078b721924">glm::lowp_mat3x2</a></div><div class="ttdeci">tmat3x2< float, lowp > lowp_mat3x2</div><div class="ttdoc">3 columns of 2 components matrix of low precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00138">type_mat.hpp:138</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00055.html b/src/third_party/glm/doc/api/a00055.html
new file mode 100644
index 0000000..8df165f
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00055.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: mat3x3.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">mat3x3.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00055_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+
+<p>Definition in file <a class="el" href="a00055_source.html">mat3x3.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00055_source.html b/src/third_party/glm/doc/api/a00055_source.html
new file mode 100644
index 0000000..ef15c8b
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00055_source.html
@@ -0,0 +1,88 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: mat3x3.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">mat3x3.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00055.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include "<a class="code" href="a00119.html">detail/type_mat3x3.hpp</a>"</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> </div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> {</div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>  <span class="keyword">typedef</span> tmat3x3<float, lowp> <a class="code" href="a00158.html#ga6a66118df7e2398a36ca4a8e98ce6783">lowp_mat3</a>;</div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>  </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keyword">typedef</span> tmat3x3<float, mediump> <a class="code" href="a00158.html#ga29d313adfc82fd4179d29a9fd98b1b5b">mediump_mat3</a>;</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keyword">typedef</span> tmat3x3<float, highp> <a class="code" href="a00158.html#gaac1bde847d053902c27bad811b76e9fd">highp_mat3</a>;</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  </div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keyword">typedef</span> tmat3x3<float, lowp> <a class="code" href="a00158.html#gab7ca36023fa56d8006341a192ee09260">lowp_mat3x3</a>;</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  </div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keyword">typedef</span> tmat3x3<float, mediump> <a class="code" href="a00158.html#ga2f02cb49e386f65817c10ead9bbe7dec">mediump_mat3x3</a>;</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keyword">typedef</span> tmat3x3<float, highp> <a class="code" href="a00158.html#ga223de5d0549b215566dfb977d4bb45bd">highp_mat3x3</a>;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> }<span class="comment">//namespace glm</span></div>
+<div class="ttc" id="a00158_html_gab7ca36023fa56d8006341a192ee09260"><div class="ttname"><a href="a00158.html#gab7ca36023fa56d8006341a192ee09260">glm::lowp_mat3x3</a></div><div class="ttdeci">tmat3x3< float, lowp > lowp_mat3x3</div><div class="ttdoc">3 columns of 3 components matrix of low precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00185">type_mat.hpp:185</a></div></div>
+<div class="ttc" id="a00158_html_gaac1bde847d053902c27bad811b76e9fd"><div class="ttname"><a href="a00158.html#gaac1bde847d053902c27bad811b76e9fd">glm::highp_mat3</a></div><div class="ttdeci">tmat3x3< float, highp > highp_mat3</div><div class="ttdoc">3 columns of 3 components matrix of high precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00178">type_mat.hpp:178</a></div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00158_html_ga29d313adfc82fd4179d29a9fd98b1b5b"><div class="ttname"><a href="a00158.html#ga29d313adfc82fd4179d29a9fd98b1b5b">glm::mediump_mat3</a></div><div class="ttdeci">tmat3x3< float, mediump > mediump_mat3</div><div class="ttdoc">3 columns of 3 components matrix of medium precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00171">type_mat.hpp:171</a></div></div>
+<div class="ttc" id="a00158_html_ga223de5d0549b215566dfb977d4bb45bd"><div class="ttname"><a href="a00158.html#ga223de5d0549b215566dfb977d4bb45bd">glm::highp_mat3x3</a></div><div class="ttdeci">tmat3x3< float, highp > highp_mat3x3</div><div class="ttdoc">3 columns of 3 components matrix of high precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00199">type_mat.hpp:199</a></div></div>
+<div class="ttc" id="a00158_html_ga2f02cb49e386f65817c10ead9bbe7dec"><div class="ttname"><a href="a00158.html#ga2f02cb49e386f65817c10ead9bbe7dec">glm::mediump_mat3x3</a></div><div class="ttdeci">tmat3x3< float, mediump > mediump_mat3x3</div><div class="ttdoc">3 columns of 3 components matrix of medium precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00192">type_mat.hpp:192</a></div></div>
+<div class="ttc" id="a00158_html_ga6a66118df7e2398a36ca4a8e98ce6783"><div class="ttname"><a href="a00158.html#ga6a66118df7e2398a36ca4a8e98ce6783">glm::lowp_mat3</a></div><div class="ttdeci">tmat3x3< float, lowp > lowp_mat3</div><div class="ttdoc">3 columns of 3 components matrix of low precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00164">type_mat.hpp:164</a></div></div>
+<div class="ttc" id="a00119_html"><div class="ttname"><a href="a00119.html">type_mat3x3.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00056.html b/src/third_party/glm/doc/api/a00056.html
new file mode 100644
index 0000000..f3b8cd1
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00056.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: mat3x4.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">mat3x4.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00056_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+
+<p>Definition in file <a class="el" href="a00056_source.html">mat3x4.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00056_source.html b/src/third_party/glm/doc/api/a00056_source.html
new file mode 100644
index 0000000..468f247
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00056_source.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: mat3x4.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">mat3x4.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00056.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include "<a class="code" href="a00120.html">detail/type_mat3x4.hpp</a>"</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> </div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> {</div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>  <span class="keyword">typedef</span> tmat3x4<float, lowp> <a class="code" href="a00158.html#ga2938621d14e70bc3dc576b4fc1547a7e">lowp_mat3x4</a>;</div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>  </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keyword">typedef</span> tmat3x4<float, mediump> <a class="code" href="a00158.html#gac7afc5b81d320dbd7bd6a6f07d587e24">mediump_mat3x4</a>;</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keyword">typedef</span> tmat3x4<float, highp> <a class="code" href="a00158.html#ga117d8a040e738396a3d60368605623d2">highp_mat3x4</a>;</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> }<span class="comment">//namespace glm</span></div>
+<div class="ttc" id="a00158_html_ga117d8a040e738396a3d60368605623d2"><div class="ttname"><a href="a00158.html#ga117d8a040e738396a3d60368605623d2">glm::highp_mat3x4</a></div><div class="ttdeci">tmat3x4< float, highp > highp_mat3x4</div><div class="ttdoc">3 columns of 4 components matrix of high precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00225">type_mat.hpp:225</a></div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00158_html_ga2938621d14e70bc3dc576b4fc1547a7e"><div class="ttname"><a href="a00158.html#ga2938621d14e70bc3dc576b4fc1547a7e">glm::lowp_mat3x4</a></div><div class="ttdeci">tmat3x4< float, lowp > lowp_mat3x4</div><div class="ttdoc">3 columns of 4 components matrix of low precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00211">type_mat.hpp:211</a></div></div>
+<div class="ttc" id="a00158_html_gac7afc5b81d320dbd7bd6a6f07d587e24"><div class="ttname"><a href="a00158.html#gac7afc5b81d320dbd7bd6a6f07d587e24">glm::mediump_mat3x4</a></div><div class="ttdeci">tmat3x4< float, mediump > mediump_mat3x4</div><div class="ttdoc">3 columns of 4 components matrix of medium precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00218">type_mat.hpp:218</a></div></div>
+<div class="ttc" id="a00120_html"><div class="ttname"><a href="a00120.html">type_mat3x4.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00057.html b/src/third_party/glm/doc/api/a00057.html
new file mode 100644
index 0000000..dd2a847
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00057.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: mat4x2.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">mat4x2.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00057_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+
+<p>Definition in file <a class="el" href="a00057_source.html">mat4x2.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00057_source.html b/src/third_party/glm/doc/api/a00057_source.html
new file mode 100644
index 0000000..937bd88
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00057_source.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: mat4x2.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">mat4x2.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00057.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include "<a class="code" href="a00121.html">detail/type_mat4x2.hpp</a>"</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> </div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> {</div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>  <span class="keyword">typedef</span> tmat4x2<float, lowp> <a class="code" href="a00158.html#gac6d04a9590cb7ab62cbe29203dbb9b93">lowp_mat4x2</a>;</div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>  </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keyword">typedef</span> tmat4x2<float, mediump> <a class="code" href="a00158.html#ga22194c68bc3d798bb68a22f635558c8d">mediump_mat4x2</a>;</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keyword">typedef</span> tmat4x2<float, highp> <a class="code" href="a00158.html#gaeea75c96b308be4114e0badf49f58075">highp_mat4x2</a>;</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> }<span class="comment">//namespace glm</span></div>
+<div class="ttc" id="a00158_html_gac6d04a9590cb7ab62cbe29203dbb9b93"><div class="ttname"><a href="a00158.html#gac6d04a9590cb7ab62cbe29203dbb9b93">glm::lowp_mat4x2</a></div><div class="ttdeci">tmat4x2< float, lowp > lowp_mat4x2</div><div class="ttdoc">4 columns of 2 components matrix of low precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00237">type_mat.hpp:237</a></div></div>
+<div class="ttc" id="a00158_html_gaeea75c96b308be4114e0badf49f58075"><div class="ttname"><a href="a00158.html#gaeea75c96b308be4114e0badf49f58075">glm::highp_mat4x2</a></div><div class="ttdeci">tmat4x2< float, highp > highp_mat4x2</div><div class="ttdoc">4 columns of 2 components matrix of high precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00251">type_mat.hpp:251</a></div></div>
+<div class="ttc" id="a00121_html"><div class="ttname"><a href="a00121.html">type_mat4x2.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00158_html_ga22194c68bc3d798bb68a22f635558c8d"><div class="ttname"><a href="a00158.html#ga22194c68bc3d798bb68a22f635558c8d">glm::mediump_mat4x2</a></div><div class="ttdeci">tmat4x2< float, mediump > mediump_mat4x2</div><div class="ttdoc">4 columns of 2 components matrix of medium precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00244">type_mat.hpp:244</a></div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00058_source.html b/src/third_party/glm/doc/api/a00058_source.html
new file mode 100644
index 0000000..5e355e6
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00058_source.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: mat4x3.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">mat4x3.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include "<a class="code" href="a00122.html">detail/type_mat4x3.hpp</a>"</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> </div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> {</div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>  <span class="keyword">typedef</span> tmat4x3<float, lowp> <a class="code" href="a00158.html#gafb3dbbc82f8b166867fd21c76eb8db4f">lowp_mat4x3</a>;</div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>  </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keyword">typedef</span> tmat4x3<float, mediump> <a class="code" href="a00158.html#ga38a01cba69e3db9b1a1056b362519acb">mediump_mat4x3</a>;</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keyword">typedef</span> tmat4x3<float, highp> <a class="code" href="a00158.html#ga046e59c57aaa185a8b0b012164ce707f">highp_mat4x3</a>;</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> }<span class="comment">//namespace glm</span></div>
+<div class="ttc" id="a00158_html_ga046e59c57aaa185a8b0b012164ce707f"><div class="ttname"><a href="a00158.html#ga046e59c57aaa185a8b0b012164ce707f">glm::highp_mat4x3</a></div><div class="ttdeci">tmat4x3< float, highp > highp_mat4x3</div><div class="ttdoc">4 columns of 3 components matrix of high precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00277">type_mat.hpp:277</a></div></div>
+<div class="ttc" id="a00122_html"><div class="ttname"><a href="a00122.html">type_mat4x3.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00158_html_ga38a01cba69e3db9b1a1056b362519acb"><div class="ttname"><a href="a00158.html#ga38a01cba69e3db9b1a1056b362519acb">glm::mediump_mat4x3</a></div><div class="ttdeci">tmat4x3< float, mediump > mediump_mat4x3</div><div class="ttdoc">4 columns of 3 components matrix of medium precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00270">type_mat.hpp:270</a></div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00158_html_gafb3dbbc82f8b166867fd21c76eb8db4f"><div class="ttname"><a href="a00158.html#gafb3dbbc82f8b166867fd21c76eb8db4f">glm::lowp_mat4x3</a></div><div class="ttdeci">tmat4x3< float, lowp > lowp_mat4x3</div><div class="ttdoc">4 columns of 3 components matrix of low precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00263">type_mat.hpp:263</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00059.html b/src/third_party/glm/doc/api/a00059.html
new file mode 100644
index 0000000..16837da
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00059.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: mat4x4.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">mat4x4.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00059_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+
+<p>Definition in file <a class="el" href="a00059_source.html">mat4x4.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00059_source.html b/src/third_party/glm/doc/api/a00059_source.html
new file mode 100644
index 0000000..aa441e5
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00059_source.html
@@ -0,0 +1,88 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: mat4x4.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">mat4x4.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00059.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include "<a class="code" href="a00123.html">detail/type_mat4x4.hpp</a>"</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> </div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> {</div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>  <span class="keyword">typedef</span> tmat4x4<float, lowp> <a class="code" href="a00158.html#gabb754302a1ff8736ec7814d860c9a3c0">lowp_mat4</a>;</div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>  </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keyword">typedef</span> tmat4x4<float, mediump> <a class="code" href="a00158.html#ga6259813853e4253f80c2a08672e9fb6a">mediump_mat4</a>;</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keyword">typedef</span> tmat4x4<float, highp> <a class="code" href="a00158.html#gabace1eeb2fac7d73a7faaecf33f352d0">highp_mat4</a>;</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  </div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keyword">typedef</span> tmat4x4<float, lowp> <a class="code" href="a00158.html#gafff11cbd0abc762e8a340870a31d5bfa">lowp_mat4x4</a>;</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  </div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keyword">typedef</span> tmat4x4<float, mediump> <a class="code" href="a00158.html#ga535614d97234065ab44b2513667c8563">mediump_mat4x4</a>;</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keyword">typedef</span> tmat4x4<float, highp> <a class="code" href="a00158.html#gaa72822d91f0dceb4dcaaec550cbfeead">highp_mat4x4</a>;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> }<span class="comment">//namespace glm</span></div>
+<div class="ttc" id="a00158_html_ga535614d97234065ab44b2513667c8563"><div class="ttname"><a href="a00158.html#ga535614d97234065ab44b2513667c8563">glm::mediump_mat4x4</a></div><div class="ttdeci">tmat4x4< float, mediump > mediump_mat4x4</div><div class="ttdoc">4 columns of 4 components matrix of medium precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00318">type_mat.hpp:318</a></div></div>
+<div class="ttc" id="a00158_html_gafff11cbd0abc762e8a340870a31d5bfa"><div class="ttname"><a href="a00158.html#gafff11cbd0abc762e8a340870a31d5bfa">glm::lowp_mat4x4</a></div><div class="ttdeci">tmat4x4< float, lowp > lowp_mat4x4</div><div class="ttdoc">4 columns of 4 components matrix of low precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00311">type_mat.hpp:311</a></div></div>
+<div class="ttc" id="a00123_html"><div class="ttname"><a href="a00123.html">type_mat4x4.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00158_html_gabace1eeb2fac7d73a7faaecf33f352d0"><div class="ttname"><a href="a00158.html#gabace1eeb2fac7d73a7faaecf33f352d0">glm::highp_mat4</a></div><div class="ttdeci">tmat4x4< float, highp > highp_mat4</div><div class="ttdoc">4 columns of 4 components matrix of high precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00304">type_mat.hpp:304</a></div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00158_html_gabb754302a1ff8736ec7814d860c9a3c0"><div class="ttname"><a href="a00158.html#gabb754302a1ff8736ec7814d860c9a3c0">glm::lowp_mat4</a></div><div class="ttdeci">tmat4x4< float, lowp > lowp_mat4</div><div class="ttdoc">4 columns of 4 components matrix of low precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00290">type_mat.hpp:290</a></div></div>
+<div class="ttc" id="a00158_html_gaa72822d91f0dceb4dcaaec550cbfeead"><div class="ttname"><a href="a00158.html#gaa72822d91f0dceb4dcaaec550cbfeead">glm::highp_mat4x4</a></div><div class="ttdeci">tmat4x4< float, highp > highp_mat4x4</div><div class="ttdoc">4 columns of 4 components matrix of high precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00325">type_mat.hpp:325</a></div></div>
+<div class="ttc" id="a00158_html_ga6259813853e4253f80c2a08672e9fb6a"><div class="ttname"><a href="a00158.html#ga6259813853e4253f80c2a08672e9fb6a">glm::mediump_mat4</a></div><div class="ttdeci">tmat4x4< float, mediump > mediump_mat4</div><div class="ttdoc">4 columns of 4 components matrix of medium precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00297">type_mat.hpp:297</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00060.html b/src/third_party/glm/doc/api/a00060.html
new file mode 100644
index 0000000..f0f7c58
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00060.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: matrix.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">matrix.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00060_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+
+<p>Definition in file <a class="el" href="a00060_source.html">matrix.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00060_source.html b/src/third_party/glm/doc/api/a00060_source.html
new file mode 100644
index 0000000..b2112bc
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00060_source.html
@@ -0,0 +1,65 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: matrix.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">matrix.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00060.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include "<a class="code" href="a00033.html">detail/func_matrix.hpp</a>"</span></div>
+<div class="ttc" id="a00033_html"><div class="ttname"><a href="a00033.html">func_matrix.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00061.html b/src/third_party/glm/doc/api/a00061.html
new file mode 100644
index 0000000..bba35e9
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00061.html
@@ -0,0 +1,85 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: matrix_access.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_9440d7c11b99dcd7e5d369c7cf9802fe.html">gtc</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">matrix_access.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00061_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga96022eb0d3fae39d89fc7a954e59b374"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga96022eb0d3fae39d89fc7a954e59b374"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType::col_type </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00166.html#ga96022eb0d3fae39d89fc7a954e59b374">column</a> (genType const &m, length_t index)</td></tr>
+<tr class="separator:ga96022eb0d3fae39d89fc7a954e59b374"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9e757377523890e8b80c5843dbe4dd15"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga9e757377523890e8b80c5843dbe4dd15"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00166.html#ga9e757377523890e8b80c5843dbe4dd15">column</a> (genType const &m, length_t index, typename genType::col_type const &x)</td></tr>
+<tr class="separator:ga9e757377523890e8b80c5843dbe4dd15"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga259e5ebd0f31ec3f83440f8cae7f5dba"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga259e5ebd0f31ec3f83440f8cae7f5dba"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType::row_type </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00166.html#ga259e5ebd0f31ec3f83440f8cae7f5dba">row</a> (genType const &m, length_t index)</td></tr>
+<tr class="separator:ga259e5ebd0f31ec3f83440f8cae7f5dba"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaadcc64829aadf4103477679e48c7594f"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gaadcc64829aadf4103477679e48c7594f"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00166.html#gaadcc64829aadf4103477679e48c7594f">row</a> (genType const &m, length_t index, typename genType::row_type const &x)</td></tr>
+<tr class="separator:gaadcc64829aadf4103477679e48c7594f"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00166.html">GLM_GTC_matrix_access</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00061_source.html">matrix_access.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00061_source.html b/src/third_party/glm/doc/api/a00061_source.html
new file mode 100644
index 0000000..251cdea
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00061_source.html
@@ -0,0 +1,101 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: matrix_access.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_9440d7c11b99dcd7e5d369c7cf9802fe.html">gtc</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">matrix_access.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00061.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> </div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#include "../detail/setup.hpp"</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor"># pragma message("GLM: GLM_GTC_matrix_access extension included")</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> {</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  GLM_FUNC_DECL <span class="keyword">typename</span> genType::row_type <a class="code" href="a00166.html#gaadcc64829aadf4103477679e48c7594f">row</a>(</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  genType <span class="keyword">const</span> & m,</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  length_t index);</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  GLM_FUNC_DECL genType <a class="code" href="a00166.html#gaadcc64829aadf4103477679e48c7594f">row</a>(</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  genType <span class="keyword">const</span> & m,</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  length_t index,</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keyword">typename</span> genType::row_type <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  GLM_FUNC_DECL <span class="keyword">typename</span> genType::col_type <a class="code" href="a00166.html#ga9e757377523890e8b80c5843dbe4dd15">column</a>(</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  genType <span class="keyword">const</span> & m,</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  length_t index);</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  GLM_FUNC_DECL genType <a class="code" href="a00166.html#ga9e757377523890e8b80c5843dbe4dd15">column</a>(</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  genType <span class="keyword">const</span> & m,</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  length_t index,</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keyword">typename</span> genType::col_type <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="preprocessor">#include "matrix_access.inl"</span></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00166_html_gaadcc64829aadf4103477679e48c7594f"><div class="ttname"><a href="a00166.html#gaadcc64829aadf4103477679e48c7594f">glm::row</a></div><div class="ttdeci">GLM_FUNC_DECL genType row(genType const &m, length_t index, typename genType::row_type const &x)</div><div class="ttdoc">Set a specific row to a matrix. </div></div>
+<div class="ttc" id="a00166_html_ga9e757377523890e8b80c5843dbe4dd15"><div class="ttname"><a href="a00166.html#ga9e757377523890e8b80c5843dbe4dd15">glm::column</a></div><div class="ttdeci">GLM_FUNC_DECL genType column(genType const &m, length_t index, typename genType::col_type const &x)</div><div class="ttdoc">Set a specific column to a matrix. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00062.html b/src/third_party/glm/doc/api/a00062.html
new file mode 100644
index 0000000..4cefc76
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00062.html
@@ -0,0 +1,81 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: matrix_cross_product.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">matrix_cross_product.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00062_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga04385b2e3a93c78d116b51af2d8d708e"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga04385b2e3a93c78d116b51af2d8d708e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat3x3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00203.html#ga04385b2e3a93c78d116b51af2d8d708e">matrixCross3</a> (tvec3< T, P > const &x)</td></tr>
+<tr class="separator:ga04385b2e3a93c78d116b51af2d8d708e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2d46cc5253761c214aa5c782865156b1"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga2d46cc5253761c214aa5c782865156b1"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00203.html#ga2d46cc5253761c214aa5c782865156b1">matrixCross4</a> (tvec3< T, P > const &x)</td></tr>
+<tr class="separator:ga2d46cc5253761c214aa5c782865156b1"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00203.html">GLM_GTX_matrix_cross_product</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd>
+<dd>
+<a class="el" href="a00192.html" title="Min and max functions for 3 to 4 parameters. ">GLM_GTX_extented_min_max</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00062_source.html">matrix_cross_product.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00062_source.html b/src/third_party/glm/doc/api/a00062_source.html
new file mode 100644
index 0000000..8585573
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00062_source.html
@@ -0,0 +1,87 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: matrix_cross_product.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">matrix_cross_product.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00062.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "../glm.hpp"</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_matrix_cross_product extension included")</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> {</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  GLM_FUNC_DECL tmat3x3<T, P> <a class="code" href="a00203.html#ga04385b2e3a93c78d116b51af2d8d708e">matrixCross3</a>(</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  tvec3<T, P> <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  </div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  GLM_FUNC_DECL tmat4x4<T, P> <a class="code" href="a00203.html#ga2d46cc5253761c214aa5c782865156b1">matrixCross4</a>(</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  tvec3<T, P> <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor">#include "matrix_cross_product.inl"</span></div>
+<div class="ttc" id="a00203_html_ga2d46cc5253761c214aa5c782865156b1"><div class="ttname"><a href="a00203.html#ga2d46cc5253761c214aa5c782865156b1">glm::matrixCross4</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, P > matrixCross4(tvec3< T, P > const &x)</div><div class="ttdoc">Build a cross product matrix. </div></div>
+<div class="ttc" id="a00203_html_ga04385b2e3a93c78d116b51af2d8d708e"><div class="ttname"><a href="a00203.html#ga04385b2e3a93c78d116b51af2d8d708e">glm::matrixCross3</a></div><div class="ttdeci">GLM_FUNC_DECL tmat3x3< T, P > matrixCross3(tvec3< T, P > const &x)</div><div class="ttdoc">Build a cross product matrix. </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00063.html b/src/third_party/glm/doc/api/a00063.html
new file mode 100644
index 0000000..e462dc9
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00063.html
@@ -0,0 +1,76 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: matrix_decompose.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">matrix_decompose.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00063_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga0f1245817507156b337798a253577c8b"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga0f1245817507156b337798a253577c8b"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00204.html#ga0f1245817507156b337798a253577c8b">decompose</a> (tmat4x4< T, P > const &modelMatrix, tvec3< T, P > &scale, tquat< T, P > &orientation, tvec3< T, P > &translation, tvec3< T, P > &skew, tvec4< T, P > &perspective)</td></tr>
+<tr class="separator:ga0f1245817507156b337798a253577c8b"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00204.html">GLM_GTX_matrix_decompose</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00063_source.html">matrix_decompose.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00063_source.html b/src/third_party/glm/doc/api/a00063_source.html
new file mode 100644
index 0000000..2881a52
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00063_source.html
@@ -0,0 +1,91 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: matrix_decompose.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">matrix_decompose.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00063.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// Dependencies</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include "../mat4x4.hpp"</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "../vec3.hpp"</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "../vec4.hpp"</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include "../geometric.hpp"</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "../gtc/quaternion.hpp"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "../gtc/matrix_transform.hpp"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_matrix_decompose extension included")</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> {</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> <a class="code" href="a00204.html#ga0f1245817507156b337798a253577c8b">decompose</a>(</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  tmat4x4<T, P> <span class="keyword">const</span> & modelMatrix,</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  tvec3<T, P> & <a class="code" href="a00169.html#ga8f062fcc07e2445500793f2803afebb0">scale</a>, tquat<T, P> & <a class="code" href="a00224.html#ga49b4d082305cdfcfe0a5c184f684a902">orientation</a>, tvec3<T, P> & translation, tvec3<T, P> & skew, tvec4<T, P> & <a class="code" href="a00169.html#gac3613dcb6c6916465ad5b7ad5a786175">perspective</a>);</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor">#include "matrix_decompose.inl"</span></div>
+<div class="ttc" id="a00224_html_ga49b4d082305cdfcfe0a5c184f684a902"><div class="ttname"><a href="a00224.html#ga49b4d082305cdfcfe0a5c184f684a902">glm::orientation</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, P > orientation(tvec3< T, P > const &Normal, tvec3< T, P > const &Up)</div><div class="ttdoc">Build a rotation matrix from a normal and a up vector. </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00169_html_ga8f062fcc07e2445500793f2803afebb0"><div class="ttname"><a href="a00169.html#ga8f062fcc07e2445500793f2803afebb0">glm::scale</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, P > scale(tmat4x4< T, P > const &m, tvec3< T, P > const &v)</div><div class="ttdoc">Builds a scale 4 * 4 matrix created from 3 scalars. </div></div>
+<div class="ttc" id="a00169_html_gac3613dcb6c6916465ad5b7ad5a786175"><div class="ttname"><a href="a00169.html#gac3613dcb6c6916465ad5b7ad5a786175">glm::perspective</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, defaultp > perspective(T fovy, T aspect, T near, T far)</div><div class="ttdoc">Creates a matrix for a symetric perspective-view frustum based on the default handedness. </div></div>
+<div class="ttc" id="a00204_html_ga0f1245817507156b337798a253577c8b"><div class="ttname"><a href="a00204.html#ga0f1245817507156b337798a253577c8b">glm::decompose</a></div><div class="ttdeci">GLM_FUNC_DECL bool decompose(tmat4x4< T, P > const &modelMatrix, tvec3< T, P > &scale, tquat< T, P > &orientation, tvec3< T, P > &translation, tvec3< T, P > &skew, tvec4< T, P > &perspective)</div><div class="ttdoc">Decomposes a model matrix to translations, rotation and scale components. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00064.html b/src/third_party/glm/doc/api/a00064.html
new file mode 100644
index 0000000..5a85643
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00064.html
@@ -0,0 +1,265 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: matrix_integer.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_9440d7c11b99dcd7e5d369c7cf9802fe.html">gtc</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#typedef-members">Typedefs</a> </div>
+ <div class="headertitle">
+<div class="title">matrix_integer.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00064_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:gaa9f8144beebdefd85e2a9ac480e7608a"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gaa9f8144beebdefd85e2a9ac480e7608a">highp_imat2</a></td></tr>
+<tr class="separator:gaa9f8144beebdefd85e2a9ac480e7608a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac455e55e7cb32e31396a9d4613da046a"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gac455e55e7cb32e31396a9d4613da046a">highp_imat2x2</a></td></tr>
+<tr class="separator:gac455e55e7cb32e31396a9d4613da046a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5f5f1e6dc06b72216463a425b2f7613e"><td class="memItemLeft" align="right" valign="top">typedef tmat2x3< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga5f5f1e6dc06b72216463a425b2f7613e">highp_imat2x3</a></td></tr>
+<tr class="separator:ga5f5f1e6dc06b72216463a425b2f7613e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga73b855cc40e5d8202b7ab38461326d65"><td class="memItemLeft" align="right" valign="top">typedef tmat2x4< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga73b855cc40e5d8202b7ab38461326d65">highp_imat2x4</a></td></tr>
+<tr class="separator:ga73b855cc40e5d8202b7ab38461326d65"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4efd6470c0edf9704d2244fc92dbc2a9"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga4efd6470c0edf9704d2244fc92dbc2a9">highp_imat3</a></td></tr>
+<tr class="separator:ga4efd6470c0edf9704d2244fc92dbc2a9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0413bf87605b9247be2533c439127a1c"><td class="memItemLeft" align="right" valign="top">typedef tmat3x2< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga0413bf87605b9247be2533c439127a1c">highp_imat3x2</a></td></tr>
+<tr class="separator:ga0413bf87605b9247be2533c439127a1c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gacce460d54216438bb577bf8c9d68299c"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gacce460d54216438bb577bf8c9d68299c">highp_imat3x3</a></td></tr>
+<tr class="separator:gacce460d54216438bb577bf8c9d68299c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad4fea24b4100e21ed7742c91e5458d49"><td class="memItemLeft" align="right" valign="top">typedef tmat3x4< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gad4fea24b4100e21ed7742c91e5458d49">highp_imat3x4</a></td></tr>
+<tr class="separator:gad4fea24b4100e21ed7742c91e5458d49"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga159ce04cc638ff4db755542cd8f758cb"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga159ce04cc638ff4db755542cd8f758cb">highp_imat4</a></td></tr>
+<tr class="separator:ga159ce04cc638ff4db755542cd8f758cb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7d43dd8332000f7f19379efa1b303599"><td class="memItemLeft" align="right" valign="top">typedef tmat4x2< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga7d43dd8332000f7f19379efa1b303599">highp_imat4x2</a></td></tr>
+<tr class="separator:ga7d43dd8332000f7f19379efa1b303599"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0c66b9b7c10a6017a58a03489c8d4c73"><td class="memItemLeft" align="right" valign="top">typedef tmat4x3< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga0c66b9b7c10a6017a58a03489c8d4c73">highp_imat4x3</a></td></tr>
+<tr class="separator:ga0c66b9b7c10a6017a58a03489c8d4c73"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae53db595d36f49a299e180302795e3c9"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gae53db595d36f49a299e180302795e3c9">highp_imat4x4</a></td></tr>
+<tr class="separator:gae53db595d36f49a299e180302795e3c9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae7b96c808a36fbe87f41af1c77b7941c"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< uint, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gae7b96c808a36fbe87f41af1c77b7941c">highp_umat2</a></td></tr>
+<tr class="separator:gae7b96c808a36fbe87f41af1c77b7941c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4860b4b01430bdb70643808c8d3bf5cb"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< uint, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga4860b4b01430bdb70643808c8d3bf5cb">highp_umat2x2</a></td></tr>
+<tr class="separator:ga4860b4b01430bdb70643808c8d3bf5cb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac351446661e5a8168473ff7b3b5ac3b5"><td class="memItemLeft" align="right" valign="top">typedef tmat2x3< uint, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gac351446661e5a8168473ff7b3b5ac3b5">highp_umat2x3</a></td></tr>
+<tr class="separator:gac351446661e5a8168473ff7b3b5ac3b5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga815eb9fdf70edc45687cbcda07e97213"><td class="memItemLeft" align="right" valign="top">typedef tmat2x4< uint, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga815eb9fdf70edc45687cbcda07e97213">highp_umat2x4</a></td></tr>
+<tr class="separator:ga815eb9fdf70edc45687cbcda07e97213"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa60b19d7cadbaa56bed1e6e0047af147"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< uint, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gaa60b19d7cadbaa56bed1e6e0047af147">highp_umat3</a></td></tr>
+<tr class="separator:gaa60b19d7cadbaa56bed1e6e0047af147"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab1d8e627b6a0b21c9b5e599a89132d8f"><td class="memItemLeft" align="right" valign="top">typedef tmat3x2< uint, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gab1d8e627b6a0b21c9b5e599a89132d8f">highp_umat3x2</a></td></tr>
+<tr class="separator:gab1d8e627b6a0b21c9b5e599a89132d8f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gacf71e9abe57bcfd18b4b003421e306aa"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< uint, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gacf71e9abe57bcfd18b4b003421e306aa">highp_umat3x3</a></td></tr>
+<tr class="separator:gacf71e9abe57bcfd18b4b003421e306aa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6edbf193ad6c4309e31262165f2655e7"><td class="memItemLeft" align="right" valign="top">typedef tmat3x4< uint, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga6edbf193ad6c4309e31262165f2655e7">highp_umat3x4</a></td></tr>
+<tr class="separator:ga6edbf193ad6c4309e31262165f2655e7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8368cb49cb0bd5ac682a71d1eccc9a8c"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< uint, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga8368cb49cb0bd5ac682a71d1eccc9a8c">highp_umat4</a></td></tr>
+<tr class="separator:ga8368cb49cb0bd5ac682a71d1eccc9a8c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaaba8a59eac3e5c0b3aaa9b35c1f10292"><td class="memItemLeft" align="right" valign="top">typedef tmat4x2< uint, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gaaba8a59eac3e5c0b3aaa9b35c1f10292">highp_umat4x2</a></td></tr>
+<tr class="separator:gaaba8a59eac3e5c0b3aaa9b35c1f10292"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga899a376888652fe3c03718641812bb27"><td class="memItemLeft" align="right" valign="top">typedef tmat4x3< uint, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga899a376888652fe3c03718641812bb27">highp_umat4x3</a></td></tr>
+<tr class="separator:ga899a376888652fe3c03718641812bb27"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab8068521c0ad6990373d27d87d333084"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< uint, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gab8068521c0ad6990373d27d87d333084">highp_umat4x4</a></td></tr>
+<tr class="separator:gab8068521c0ad6990373d27d87d333084"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaabe04f9948d4a213bb1c20137de03e01"><td class="memItemLeft" align="right" valign="top">typedef mediump_imat2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gaabe04f9948d4a213bb1c20137de03e01">imat2</a></td></tr>
+<tr class="separator:gaabe04f9948d4a213bb1c20137de03e01"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa4732a240522ad9bc28144fda2fc14ec"><td class="memItemLeft" align="right" valign="top">typedef mediump_imat2x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gaa4732a240522ad9bc28144fda2fc14ec">imat2x2</a></td></tr>
+<tr class="separator:gaa4732a240522ad9bc28144fda2fc14ec"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3f42dd3d5d94a0fd5706f7ec8dd0c605"><td class="memItemLeft" align="right" valign="top">typedef mediump_imat2x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga3f42dd3d5d94a0fd5706f7ec8dd0c605">imat2x3</a></td></tr>
+<tr class="separator:ga3f42dd3d5d94a0fd5706f7ec8dd0c605"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9d8faafdca42583d67e792dd038fc668"><td class="memItemLeft" align="right" valign="top">typedef mediump_imat2x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga9d8faafdca42583d67e792dd038fc668">imat2x4</a></td></tr>
+<tr class="separator:ga9d8faafdca42583d67e792dd038fc668"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga038f68437155ffa3c2583a15264a8195"><td class="memItemLeft" align="right" valign="top">typedef mediump_imat3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga038f68437155ffa3c2583a15264a8195">imat3</a></td></tr>
+<tr class="separator:ga038f68437155ffa3c2583a15264a8195"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7b33bbe4f12c060892bd3cc8d4cd737f"><td class="memItemLeft" align="right" valign="top">typedef mediump_imat3x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga7b33bbe4f12c060892bd3cc8d4cd737f">imat3x2</a></td></tr>
+<tr class="separator:ga7b33bbe4f12c060892bd3cc8d4cd737f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6aacc960f62e8f7d2fe9d32d5050e7a4"><td class="memItemLeft" align="right" valign="top">typedef mediump_imat3x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga6aacc960f62e8f7d2fe9d32d5050e7a4">imat3x3</a></td></tr>
+<tr class="separator:ga6aacc960f62e8f7d2fe9d32d5050e7a4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6e9ce23496d8b08dfc302d4039694b58"><td class="memItemLeft" align="right" valign="top">typedef mediump_imat3x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga6e9ce23496d8b08dfc302d4039694b58">imat3x4</a></td></tr>
+<tr class="separator:ga6e9ce23496d8b08dfc302d4039694b58"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga96b0d26a33b81bb6a60ca0f39682f7eb"><td class="memItemLeft" align="right" valign="top">typedef mediump_imat4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga96b0d26a33b81bb6a60ca0f39682f7eb">imat4</a></td></tr>
+<tr class="separator:ga96b0d26a33b81bb6a60ca0f39682f7eb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8ce7ef51d8b2c1901fa5414deccbc3fa"><td class="memItemLeft" align="right" valign="top">typedef mediump_imat4x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga8ce7ef51d8b2c1901fa5414deccbc3fa">imat4x2</a></td></tr>
+<tr class="separator:ga8ce7ef51d8b2c1901fa5414deccbc3fa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga705ee0bf49d6c3de4404ce2481bf0df5"><td class="memItemLeft" align="right" valign="top">typedef mediump_imat4x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga705ee0bf49d6c3de4404ce2481bf0df5">imat4x3</a></td></tr>
+<tr class="separator:ga705ee0bf49d6c3de4404ce2481bf0df5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga43ed5e4f475b6f4cad7cba78f29c405b"><td class="memItemLeft" align="right" valign="top">typedef mediump_imat4x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga43ed5e4f475b6f4cad7cba78f29c405b">imat4x4</a></td></tr>
+<tr class="separator:ga43ed5e4f475b6f4cad7cba78f29c405b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3c035fec7db0d671ec8f9f1f0d05bed0"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< int, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga3c035fec7db0d671ec8f9f1f0d05bed0">lowp_imat2</a></td></tr>
+<tr class="separator:ga3c035fec7db0d671ec8f9f1f0d05bed0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5bfe58853451fbc1f1ef6ce1f93c5e31"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< int, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga5bfe58853451fbc1f1ef6ce1f93c5e31">lowp_imat2x2</a></td></tr>
+<tr class="separator:ga5bfe58853451fbc1f1ef6ce1f93c5e31"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3f8fb92b62e31528886cc728d3404ecc"><td class="memItemLeft" align="right" valign="top">typedef tmat2x3< int, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga3f8fb92b62e31528886cc728d3404ecc">lowp_imat2x3</a></td></tr>
+<tr class="separator:ga3f8fb92b62e31528886cc728d3404ecc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga892b53e26d36763f380b08a5768dee6b"><td class="memItemLeft" align="right" valign="top">typedef tmat2x4< int, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga892b53e26d36763f380b08a5768dee6b">lowp_imat2x4</a></td></tr>
+<tr class="separator:ga892b53e26d36763f380b08a5768dee6b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga148f3a81d15a570b9460158e6964f41c"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< int, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga148f3a81d15a570b9460158e6964f41c">lowp_imat3</a></td></tr>
+<tr class="separator:ga148f3a81d15a570b9460158e6964f41c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7655dfee0d726e80d7a3b72f46d5fd35"><td class="memItemLeft" align="right" valign="top">typedef tmat3x2< int, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga7655dfee0d726e80d7a3b72f46d5fd35">lowp_imat3x2</a></td></tr>
+<tr class="separator:ga7655dfee0d726e80d7a3b72f46d5fd35"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab3d5c6aaeb5815f8f080305888f6828f"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< int, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gab3d5c6aaeb5815f8f080305888f6828f">lowp_imat3x3</a></td></tr>
+<tr class="separator:gab3d5c6aaeb5815f8f080305888f6828f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3d913d70c629aa7ad504739286328f1b"><td class="memItemLeft" align="right" valign="top">typedef tmat3x4< int, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga3d913d70c629aa7ad504739286328f1b">lowp_imat3x4</a></td></tr>
+<tr class="separator:ga3d913d70c629aa7ad504739286328f1b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad3d7b23bdb4ed9b7d53c9db792db9bb4"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< int, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gad3d7b23bdb4ed9b7d53c9db792db9bb4">lowp_imat4</a></td></tr>
+<tr class="separator:gad3d7b23bdb4ed9b7d53c9db792db9bb4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3fdfce509d30bdd7778b8b156cb968df"><td class="memItemLeft" align="right" valign="top">typedef tmat4x2< int, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga3fdfce509d30bdd7778b8b156cb968df">lowp_imat4x2</a></td></tr>
+<tr class="separator:ga3fdfce509d30bdd7778b8b156cb968df"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6a9945878f99294cfde40c6c3a867d69"><td class="memItemLeft" align="right" valign="top">typedef tmat4x3< int, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga6a9945878f99294cfde40c6c3a867d69">lowp_imat4x3</a></td></tr>
+<tr class="separator:ga6a9945878f99294cfde40c6c3a867d69"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga330140b22a9449caab308f2c69bf4c80"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< int, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga330140b22a9449caab308f2c69bf4c80">lowp_imat4x4</a></td></tr>
+<tr class="separator:ga330140b22a9449caab308f2c69bf4c80"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1406406e396b56bde3c7c0722f657064"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< uint, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga1406406e396b56bde3c7c0722f657064">lowp_umat2</a></td></tr>
+<tr class="separator:ga1406406e396b56bde3c7c0722f657064"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1f0cea730f6c13b16e511bd2d63507a3"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< uint, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga1f0cea730f6c13b16e511bd2d63507a3">lowp_umat2x2</a></td></tr>
+<tr class="separator:ga1f0cea730f6c13b16e511bd2d63507a3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa86bd9dc8463b46a46ee944948111676"><td class="memItemLeft" align="right" valign="top">typedef tmat2x3< uint, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gaa86bd9dc8463b46a46ee944948111676">lowp_umat2x3</a></td></tr>
+<tr class="separator:gaa86bd9dc8463b46a46ee944948111676"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7b6c64600bad79d735fa6bec843b2bb4"><td class="memItemLeft" align="right" valign="top">typedef tmat2x4< uint, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga7b6c64600bad79d735fa6bec843b2bb4">lowp_umat2x4</a></td></tr>
+<tr class="separator:ga7b6c64600bad79d735fa6bec843b2bb4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7fc1f795f2abd0020c7b5204f4c83033"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< uint, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga7fc1f795f2abd0020c7b5204f4c83033">lowp_umat3</a></td></tr>
+<tr class="separator:ga7fc1f795f2abd0020c7b5204f4c83033"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad73943020bb49a072317ecfc52d587f0"><td class="memItemLeft" align="right" valign="top">typedef tmat3x2< uint, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gad73943020bb49a072317ecfc52d587f0">lowp_umat3x2</a></td></tr>
+<tr class="separator:gad73943020bb49a072317ecfc52d587f0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga402d169fc3cdca5f3ea47a358a7b7c67"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< uint, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga402d169fc3cdca5f3ea47a358a7b7c67">lowp_umat3x3</a></td></tr>
+<tr class="separator:ga402d169fc3cdca5f3ea47a358a7b7c67"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2dce1c00ed50fd09fe349de3713d96db"><td class="memItemLeft" align="right" valign="top">typedef tmat3x4< uint, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga2dce1c00ed50fd09fe349de3713d96db">lowp_umat3x4</a></td></tr>
+<tr class="separator:ga2dce1c00ed50fd09fe349de3713d96db"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafe68c1cf2b379a9a11d1a11c9c2f8884"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< uint, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gafe68c1cf2b379a9a11d1a11c9c2f8884">lowp_umat4</a></td></tr>
+<tr class="separator:gafe68c1cf2b379a9a11d1a11c9c2f8884"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga76cab31d492ea214c693ab9132b4de95"><td class="memItemLeft" align="right" valign="top">typedef tmat4x2< uint, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga76cab31d492ea214c693ab9132b4de95">lowp_umat4x2</a></td></tr>
+<tr class="separator:ga76cab31d492ea214c693ab9132b4de95"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae3ca9e28a9d2e5fce5e28593d27e370d"><td class="memItemLeft" align="right" valign="top">typedef tmat4x3< uint, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gae3ca9e28a9d2e5fce5e28593d27e370d">lowp_umat4x3</a></td></tr>
+<tr class="separator:gae3ca9e28a9d2e5fce5e28593d27e370d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga742be484e56e08ef637f8ec4ab7c8bb2"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< uint, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga742be484e56e08ef637f8ec4ab7c8bb2">lowp_umat4x4</a></td></tr>
+<tr class="separator:ga742be484e56e08ef637f8ec4ab7c8bb2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3f8e55e14a6fc61850f8c0df9b4ff655"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< int, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga3f8e55e14a6fc61850f8c0df9b4ff655">mediump_imat2</a></td></tr>
+<tr class="separator:ga3f8e55e14a6fc61850f8c0df9b4ff655"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gabc572d47b60f7e595d7aad945f5d13a8"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< int, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gabc572d47b60f7e595d7aad945f5d13a8">mediump_imat2x2</a></td></tr>
+<tr class="separator:gabc572d47b60f7e595d7aad945f5d13a8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5b7e9af5024e1a164db6419f67ecfc9a"><td class="memItemLeft" align="right" valign="top">typedef tmat2x3< int, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga5b7e9af5024e1a164db6419f67ecfc9a">mediump_imat2x3</a></td></tr>
+<tr class="separator:ga5b7e9af5024e1a164db6419f67ecfc9a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa08e27efc514088315ccbaf818f01880"><td class="memItemLeft" align="right" valign="top">typedef tmat2x4< int, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gaa08e27efc514088315ccbaf818f01880">mediump_imat2x4</a></td></tr>
+<tr class="separator:gaa08e27efc514088315ccbaf818f01880"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac2b0985b576fe0eba47227499aed2b3c"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< int, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gac2b0985b576fe0eba47227499aed2b3c">mediump_imat3</a></td></tr>
+<tr class="separator:gac2b0985b576fe0eba47227499aed2b3c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1a61c706b31aa60fd7012b2b27765983"><td class="memItemLeft" align="right" valign="top">typedef tmat3x2< int, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga1a61c706b31aa60fd7012b2b27765983">mediump_imat3x2</a></td></tr>
+<tr class="separator:ga1a61c706b31aa60fd7012b2b27765983"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga05064e28b911be1af0503ddf6e6204a3"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< int, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga05064e28b911be1af0503ddf6e6204a3">mediump_imat3x3</a></td></tr>
+<tr class="separator:ga05064e28b911be1af0503ddf6e6204a3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8e0f797a57fec255f0eec7da1511bc38"><td class="memItemLeft" align="right" valign="top">typedef tmat3x4< int, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga8e0f797a57fec255f0eec7da1511bc38">mediump_imat3x4</a></td></tr>
+<tr class="separator:ga8e0f797a57fec255f0eec7da1511bc38"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga551ad2e4e0304c67451ffbadeef0d615"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< int, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga551ad2e4e0304c67451ffbadeef0d615">mediump_imat4</a></td></tr>
+<tr class="separator:ga551ad2e4e0304c67451ffbadeef0d615"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1582c5dc83e49a7e53bb0b94bef9de54"><td class="memItemLeft" align="right" valign="top">typedef tmat4x2< int, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga1582c5dc83e49a7e53bb0b94bef9de54">mediump_imat4x2</a></td></tr>
+<tr class="separator:ga1582c5dc83e49a7e53bb0b94bef9de54"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1526c62951b04f5cd73f541f7b3b7d8d"><td class="memItemLeft" align="right" valign="top">typedef tmat4x3< int, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga1526c62951b04f5cd73f541f7b3b7d8d">mediump_imat4x3</a></td></tr>
+<tr class="separator:ga1526c62951b04f5cd73f541f7b3b7d8d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga655bfcca624f422aff308dcc99688ce8"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< int, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga655bfcca624f422aff308dcc99688ce8">mediump_imat4x4</a></td></tr>
+<tr class="separator:ga655bfcca624f422aff308dcc99688ce8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7322b97f1be10c83290ab57ef784d493"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< uint, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga7322b97f1be10c83290ab57ef784d493">mediump_umat2</a></td></tr>
+<tr class="separator:ga7322b97f1be10c83290ab57ef784d493"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0ffed083b64e4f764db0f446d2c49163"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< uint, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga0ffed083b64e4f764db0f446d2c49163">mediump_umat2x2</a></td></tr>
+<tr class="separator:ga0ffed083b64e4f764db0f446d2c49163"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7ecc585b71766cfa96bd54a595bea1fb"><td class="memItemLeft" align="right" valign="top">typedef tmat2x3< uint, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga7ecc585b71766cfa96bd54a595bea1fb">mediump_umat2x3</a></td></tr>
+<tr class="separator:ga7ecc585b71766cfa96bd54a595bea1fb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac4abd549f2e521c7f40f53b6235c450e"><td class="memItemLeft" align="right" valign="top">typedef tmat2x4< uint, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gac4abd549f2e521c7f40f53b6235c450e">mediump_umat2x4</a></td></tr>
+<tr class="separator:gac4abd549f2e521c7f40f53b6235c450e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga93961d3aac6efa36dc3f9cfa7e9056e6"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< uint, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga93961d3aac6efa36dc3f9cfa7e9056e6">mediump_umat3</a></td></tr>
+<tr class="separator:ga93961d3aac6efa36dc3f9cfa7e9056e6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3fb358a947f8ceaefddd75bce22cd947"><td class="memItemLeft" align="right" valign="top">typedef tmat3x2< uint, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga3fb358a947f8ceaefddd75bce22cd947">mediump_umat3x2</a></td></tr>
+<tr class="separator:ga3fb358a947f8ceaefddd75bce22cd947"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad4809dbfb1bfcf222d7b34a97a8eafe5"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< uint, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gad4809dbfb1bfcf222d7b34a97a8eafe5">mediump_umat3x3</a></td></tr>
+<tr class="separator:gad4809dbfb1bfcf222d7b34a97a8eafe5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5a9d62e44668ca2222f0362f9c99d9cc"><td class="memItemLeft" align="right" valign="top">typedef tmat3x4< uint, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga5a9d62e44668ca2222f0362f9c99d9cc">mediump_umat3x4</a></td></tr>
+<tr class="separator:ga5a9d62e44668ca2222f0362f9c99d9cc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac23667a99ae1ec649b5e55cd5a05b833"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< uint, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gac23667a99ae1ec649b5e55cd5a05b833">mediump_umat4</a></td></tr>
+<tr class="separator:gac23667a99ae1ec649b5e55cd5a05b833"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac8d1db85d62244fd90d240227c7f51ad"><td class="memItemLeft" align="right" valign="top">typedef tmat4x2< uint, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gac8d1db85d62244fd90d240227c7f51ad">mediump_umat4x2</a></td></tr>
+<tr class="separator:gac8d1db85d62244fd90d240227c7f51ad"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7d332d462f2c1ad5a65dc580d3d1aa39"><td class="memItemLeft" align="right" valign="top">typedef tmat4x3< uint, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga7d332d462f2c1ad5a65dc580d3d1aa39">mediump_umat4x3</a></td></tr>
+<tr class="separator:ga7d332d462f2c1ad5a65dc580d3d1aa39"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga24716579cf155f4e042542808f83978c"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< uint, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga24716579cf155f4e042542808f83978c">mediump_umat4x4</a></td></tr>
+<tr class="separator:ga24716579cf155f4e042542808f83978c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4cae85566f900debf930c41944b64691"><td class="memItemLeft" align="right" valign="top">typedef mediump_umat2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga4cae85566f900debf930c41944b64691">umat2</a></td></tr>
+<tr class="separator:ga4cae85566f900debf930c41944b64691"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gabf8acdd33ce8951051edbca5200898aa"><td class="memItemLeft" align="right" valign="top">typedef mediump_umat2x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gabf8acdd33ce8951051edbca5200898aa">umat2x2</a></td></tr>
+<tr class="separator:gabf8acdd33ce8951051edbca5200898aa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1870da7578d5022b973a83155d386ab3"><td class="memItemLeft" align="right" valign="top">typedef mediump_umat2x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga1870da7578d5022b973a83155d386ab3">umat2x3</a></td></tr>
+<tr class="separator:ga1870da7578d5022b973a83155d386ab3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga57936a3998e992370e59a223e0ee4fd4"><td class="memItemLeft" align="right" valign="top">typedef mediump_umat2x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga57936a3998e992370e59a223e0ee4fd4">umat2x4</a></td></tr>
+<tr class="separator:ga57936a3998e992370e59a223e0ee4fd4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5085e3ff02abbac5e537eb7b89ab63b6"><td class="memItemLeft" align="right" valign="top">typedef mediump_umat3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga5085e3ff02abbac5e537eb7b89ab63b6">umat3</a></td></tr>
+<tr class="separator:ga5085e3ff02abbac5e537eb7b89ab63b6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9cd7fa637a4a6788337f45231fad9e1a"><td class="memItemLeft" align="right" valign="top">typedef mediump_umat3x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga9cd7fa637a4a6788337f45231fad9e1a">umat3x2</a></td></tr>
+<tr class="separator:ga9cd7fa637a4a6788337f45231fad9e1a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1f2cfcf3357db0cdf31fcb15e3c6bafb"><td class="memItemLeft" align="right" valign="top">typedef mediump_umat3x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga1f2cfcf3357db0cdf31fcb15e3c6bafb">umat3x3</a></td></tr>
+<tr class="separator:ga1f2cfcf3357db0cdf31fcb15e3c6bafb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae7c78ff3fc4309605ab0fa186c8d48ba"><td class="memItemLeft" align="right" valign="top">typedef mediump_umat3x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gae7c78ff3fc4309605ab0fa186c8d48ba">umat3x4</a></td></tr>
+<tr class="separator:gae7c78ff3fc4309605ab0fa186c8d48ba"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga38bc7bb6494e344185df596deeb4544c"><td class="memItemLeft" align="right" valign="top">typedef mediump_umat4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga38bc7bb6494e344185df596deeb4544c">umat4</a></td></tr>
+<tr class="separator:ga38bc7bb6494e344185df596deeb4544c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga70fa2d05896aa83cbc8c07672a429b53"><td class="memItemLeft" align="right" valign="top">typedef mediump_umat4x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga70fa2d05896aa83cbc8c07672a429b53">umat4x2</a></td></tr>
+<tr class="separator:ga70fa2d05896aa83cbc8c07672a429b53"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga87581417945411f75cb31dd6ca1dba98"><td class="memItemLeft" align="right" valign="top">typedef mediump_umat4x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga87581417945411f75cb31dd6ca1dba98">umat4x3</a></td></tr>
+<tr class="separator:ga87581417945411f75cb31dd6ca1dba98"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf72e6d399c42985db6872c50f53d7eb8"><td class="memItemLeft" align="right" valign="top">typedef mediump_umat4x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gaf72e6d399c42985db6872c50f53d7eb8">umat4x4</a></td></tr>
+<tr class="separator:gaf72e6d399c42985db6872c50f53d7eb8"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00167.html">GLM_GTC_matrix_integer</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00064_source.html b/src/third_party/glm/doc/api/a00064_source.html
new file mode 100644
index 0000000..59a8291
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00064_source.html
@@ -0,0 +1,438 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: matrix_integer.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_9440d7c11b99dcd7e5d369c7cf9802fe.html">gtc</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">matrix_integer.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00064.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> </div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#include "../mat2x2.hpp"</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include "../mat2x3.hpp"</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "../mat2x4.hpp"</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "../mat3x2.hpp"</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include "../mat3x3.hpp"</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "../mat3x4.hpp"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "../mat4x2.hpp"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "../mat4x3.hpp"</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "../mat4x4.hpp"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor"># pragma message("GLM: GLM_GTC_matrix_integer extension included")</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> {</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno"><a class="line" href="a00167.html#gaa9f8144beebdefd85e2a9ac480e7608a"> 36</a></span>  <span class="keyword">typedef</span> tmat2x2<int, highp> <a class="code" href="a00167.html#gaa9f8144beebdefd85e2a9ac480e7608a">highp_imat2</a>;</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="a00167.html#ga4efd6470c0edf9704d2244fc92dbc2a9"> 40</a></span>  <span class="keyword">typedef</span> tmat3x3<int, highp> <a class="code" href="a00167.html#ga4efd6470c0edf9704d2244fc92dbc2a9">highp_imat3</a>;</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="a00167.html#ga159ce04cc638ff4db755542cd8f758cb"> 44</a></span>  <span class="keyword">typedef</span> tmat4x4<int, highp> <a class="code" href="a00167.html#ga159ce04cc638ff4db755542cd8f758cb">highp_imat4</a>;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="a00167.html#gac455e55e7cb32e31396a9d4613da046a"> 48</a></span>  <span class="keyword">typedef</span> tmat2x2<int, highp> <a class="code" href="a00167.html#gac455e55e7cb32e31396a9d4613da046a">highp_imat2x2</a>;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="a00167.html#ga5f5f1e6dc06b72216463a425b2f7613e"> 52</a></span>  <span class="keyword">typedef</span> tmat2x3<int, highp> <a class="code" href="a00167.html#ga5f5f1e6dc06b72216463a425b2f7613e">highp_imat2x3</a>;</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="a00167.html#ga73b855cc40e5d8202b7ab38461326d65"> 56</a></span>  <span class="keyword">typedef</span> tmat2x4<int, highp> <a class="code" href="a00167.html#ga73b855cc40e5d8202b7ab38461326d65">highp_imat2x4</a>;</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="a00167.html#ga0413bf87605b9247be2533c439127a1c"> 60</a></span>  <span class="keyword">typedef</span> tmat3x2<int, highp> <a class="code" href="a00167.html#ga0413bf87605b9247be2533c439127a1c">highp_imat3x2</a>;</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="a00167.html#gacce460d54216438bb577bf8c9d68299c"> 64</a></span>  <span class="keyword">typedef</span> tmat3x3<int, highp> <a class="code" href="a00167.html#gacce460d54216438bb577bf8c9d68299c">highp_imat3x3</a>;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="a00167.html#gad4fea24b4100e21ed7742c91e5458d49"> 68</a></span>  <span class="keyword">typedef</span> tmat3x4<int, highp> <a class="code" href="a00167.html#gad4fea24b4100e21ed7742c91e5458d49">highp_imat3x4</a>;</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="a00167.html#ga7d43dd8332000f7f19379efa1b303599"> 72</a></span>  <span class="keyword">typedef</span> tmat4x2<int, highp> <a class="code" href="a00167.html#ga7d43dd8332000f7f19379efa1b303599">highp_imat4x2</a>;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="a00167.html#ga0c66b9b7c10a6017a58a03489c8d4c73"> 76</a></span>  <span class="keyword">typedef</span> tmat4x3<int, highp> <a class="code" href="a00167.html#ga0c66b9b7c10a6017a58a03489c8d4c73">highp_imat4x3</a>;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno"><a class="line" href="a00167.html#gae53db595d36f49a299e180302795e3c9"> 80</a></span>  <span class="keyword">typedef</span> tmat4x4<int, highp> <a class="code" href="a00167.html#gae53db595d36f49a299e180302795e3c9">highp_imat4x4</a>;</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="a00167.html#ga3f8e55e14a6fc61850f8c0df9b4ff655"> 85</a></span>  <span class="keyword">typedef</span> tmat2x2<int, mediump> <a class="code" href="a00167.html#ga3f8e55e14a6fc61850f8c0df9b4ff655">mediump_imat2</a>;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="a00167.html#gac2b0985b576fe0eba47227499aed2b3c"> 89</a></span>  <span class="keyword">typedef</span> tmat3x3<int, mediump> <a class="code" href="a00167.html#gac2b0985b576fe0eba47227499aed2b3c">mediump_imat3</a>;</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="a00167.html#ga551ad2e4e0304c67451ffbadeef0d615"> 93</a></span>  <span class="keyword">typedef</span> tmat4x4<int, mediump> <a class="code" href="a00167.html#ga551ad2e4e0304c67451ffbadeef0d615">mediump_imat4</a>;</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno"><a class="line" href="a00167.html#gabc572d47b60f7e595d7aad945f5d13a8"> 98</a></span>  <span class="keyword">typedef</span> tmat2x2<int, mediump> <a class="code" href="a00167.html#gabc572d47b60f7e595d7aad945f5d13a8">mediump_imat2x2</a>;</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="a00167.html#ga5b7e9af5024e1a164db6419f67ecfc9a"> 102</a></span>  <span class="keyword">typedef</span> tmat2x3<int, mediump> <a class="code" href="a00167.html#ga5b7e9af5024e1a164db6419f67ecfc9a">mediump_imat2x3</a>;</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno"><a class="line" href="a00167.html#gaa08e27efc514088315ccbaf818f01880"> 106</a></span>  <span class="keyword">typedef</span> tmat2x4<int, mediump> <a class="code" href="a00167.html#gaa08e27efc514088315ccbaf818f01880">mediump_imat2x4</a>;</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno"><a class="line" href="a00167.html#ga1a61c706b31aa60fd7012b2b27765983"> 110</a></span>  <span class="keyword">typedef</span> tmat3x2<int, mediump> <a class="code" href="a00167.html#ga1a61c706b31aa60fd7012b2b27765983">mediump_imat3x2</a>;</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno"><a class="line" href="a00167.html#ga05064e28b911be1af0503ddf6e6204a3"> 114</a></span>  <span class="keyword">typedef</span> tmat3x3<int, mediump> <a class="code" href="a00167.html#ga05064e28b911be1af0503ddf6e6204a3">mediump_imat3x3</a>;</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno"><a class="line" href="a00167.html#ga8e0f797a57fec255f0eec7da1511bc38"> 118</a></span>  <span class="keyword">typedef</span> tmat3x4<int, mediump> <a class="code" href="a00167.html#ga8e0f797a57fec255f0eec7da1511bc38">mediump_imat3x4</a>;</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno"><a class="line" href="a00167.html#ga1582c5dc83e49a7e53bb0b94bef9de54"> 122</a></span>  <span class="keyword">typedef</span> tmat4x2<int, mediump> <a class="code" href="a00167.html#ga1582c5dc83e49a7e53bb0b94bef9de54">mediump_imat4x2</a>;</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno"><a class="line" href="a00167.html#ga1526c62951b04f5cd73f541f7b3b7d8d"> 126</a></span>  <span class="keyword">typedef</span> tmat4x3<int, mediump> <a class="code" href="a00167.html#ga1526c62951b04f5cd73f541f7b3b7d8d">mediump_imat4x3</a>;</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno"><a class="line" href="a00167.html#ga655bfcca624f422aff308dcc99688ce8"> 130</a></span>  <span class="keyword">typedef</span> tmat4x4<int, mediump> <a class="code" href="a00167.html#ga655bfcca624f422aff308dcc99688ce8">mediump_imat4x4</a>;</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno"><a class="line" href="a00167.html#ga3c035fec7db0d671ec8f9f1f0d05bed0"> 135</a></span>  <span class="keyword">typedef</span> tmat2x2<int, lowp> <a class="code" href="a00167.html#ga3c035fec7db0d671ec8f9f1f0d05bed0">lowp_imat2</a>;</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  </div>
+<div class="line"><a name="l00139"></a><span class="lineno"><a class="line" href="a00167.html#ga148f3a81d15a570b9460158e6964f41c"> 139</a></span>  <span class="keyword">typedef</span> tmat3x3<int, lowp> <a class="code" href="a00167.html#ga148f3a81d15a570b9460158e6964f41c">lowp_imat3</a>;</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno"><a class="line" href="a00167.html#gad3d7b23bdb4ed9b7d53c9db792db9bb4"> 143</a></span>  <span class="keyword">typedef</span> tmat4x4<int, lowp> <a class="code" href="a00167.html#gad3d7b23bdb4ed9b7d53c9db792db9bb4">lowp_imat4</a>;</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno"><a class="line" href="a00167.html#ga5bfe58853451fbc1f1ef6ce1f93c5e31"> 148</a></span>  <span class="keyword">typedef</span> tmat2x2<int, lowp> <a class="code" href="a00167.html#ga5bfe58853451fbc1f1ef6ce1f93c5e31">lowp_imat2x2</a>;</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno"><a class="line" href="a00167.html#ga3f8fb92b62e31528886cc728d3404ecc"> 152</a></span>  <span class="keyword">typedef</span> tmat2x3<int, lowp> <a class="code" href="a00167.html#ga3f8fb92b62e31528886cc728d3404ecc">lowp_imat2x3</a>;</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> </div>
+<div class="line"><a name="l00156"></a><span class="lineno"><a class="line" href="a00167.html#ga892b53e26d36763f380b08a5768dee6b"> 156</a></span>  <span class="keyword">typedef</span> tmat2x4<int, lowp> <a class="code" href="a00167.html#ga892b53e26d36763f380b08a5768dee6b">lowp_imat2x4</a>;</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno"><a class="line" href="a00167.html#ga7655dfee0d726e80d7a3b72f46d5fd35"> 160</a></span>  <span class="keyword">typedef</span> tmat3x2<int, lowp> <a class="code" href="a00167.html#ga7655dfee0d726e80d7a3b72f46d5fd35">lowp_imat3x2</a>;</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno"><a class="line" href="a00167.html#gab3d5c6aaeb5815f8f080305888f6828f"> 164</a></span>  <span class="keyword">typedef</span> tmat3x3<int, lowp> <a class="code" href="a00167.html#gab3d5c6aaeb5815f8f080305888f6828f">lowp_imat3x3</a>;</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> </div>
+<div class="line"><a name="l00168"></a><span class="lineno"><a class="line" href="a00167.html#ga3d913d70c629aa7ad504739286328f1b"> 168</a></span>  <span class="keyword">typedef</span> tmat3x4<int, lowp> <a class="code" href="a00167.html#ga3d913d70c629aa7ad504739286328f1b">lowp_imat3x4</a>;</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno"><a class="line" href="a00167.html#ga3fdfce509d30bdd7778b8b156cb968df"> 172</a></span>  <span class="keyword">typedef</span> tmat4x2<int, lowp> <a class="code" href="a00167.html#ga3fdfce509d30bdd7778b8b156cb968df">lowp_imat4x2</a>;</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno"><a class="line" href="a00167.html#ga6a9945878f99294cfde40c6c3a867d69"> 176</a></span>  <span class="keyword">typedef</span> tmat4x3<int, lowp> <a class="code" href="a00167.html#ga6a9945878f99294cfde40c6c3a867d69">lowp_imat4x3</a>;</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> </div>
+<div class="line"><a name="l00180"></a><span class="lineno"><a class="line" href="a00167.html#ga330140b22a9449caab308f2c69bf4c80"> 180</a></span>  <span class="keyword">typedef</span> tmat4x4<int, lowp> <a class="code" href="a00167.html#ga330140b22a9449caab308f2c69bf4c80">lowp_imat4x4</a>;</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> </div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> </div>
+<div class="line"><a name="l00185"></a><span class="lineno"><a class="line" href="a00167.html#gae7b96c808a36fbe87f41af1c77b7941c"> 185</a></span>  <span class="keyword">typedef</span> tmat2x2<uint, highp> <a class="code" href="a00167.html#gae7b96c808a36fbe87f41af1c77b7941c">highp_umat2</a>; </div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno"><a class="line" href="a00167.html#gaa60b19d7cadbaa56bed1e6e0047af147"> 189</a></span>  <span class="keyword">typedef</span> tmat3x3<uint, highp> <a class="code" href="a00167.html#gaa60b19d7cadbaa56bed1e6e0047af147">highp_umat3</a>;</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno"><a class="line" href="a00167.html#ga8368cb49cb0bd5ac682a71d1eccc9a8c"> 193</a></span>  <span class="keyword">typedef</span> tmat4x4<uint, highp> <a class="code" href="a00167.html#ga8368cb49cb0bd5ac682a71d1eccc9a8c">highp_umat4</a>;</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno"><a class="line" href="a00167.html#ga4860b4b01430bdb70643808c8d3bf5cb"> 197</a></span>  <span class="keyword">typedef</span> tmat2x2<uint, highp> <a class="code" href="a00167.html#ga4860b4b01430bdb70643808c8d3bf5cb">highp_umat2x2</a>;</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> </div>
+<div class="line"><a name="l00201"></a><span class="lineno"><a class="line" href="a00167.html#gac351446661e5a8168473ff7b3b5ac3b5"> 201</a></span>  <span class="keyword">typedef</span> tmat2x3<uint, highp> <a class="code" href="a00167.html#gac351446661e5a8168473ff7b3b5ac3b5">highp_umat2x3</a>;</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno"><a class="line" href="a00167.html#ga815eb9fdf70edc45687cbcda07e97213"> 205</a></span>  <span class="keyword">typedef</span> tmat2x4<uint, highp> <a class="code" href="a00167.html#ga815eb9fdf70edc45687cbcda07e97213">highp_umat2x4</a>;</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno"><a class="line" href="a00167.html#gab1d8e627b6a0b21c9b5e599a89132d8f"> 209</a></span>  <span class="keyword">typedef</span> tmat3x2<uint, highp> <a class="code" href="a00167.html#gab1d8e627b6a0b21c9b5e599a89132d8f">highp_umat3x2</a>;</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> </div>
+<div class="line"><a name="l00213"></a><span class="lineno"><a class="line" href="a00167.html#gacf71e9abe57bcfd18b4b003421e306aa"> 213</a></span>  <span class="keyword">typedef</span> tmat3x3<uint, highp> <a class="code" href="a00167.html#gacf71e9abe57bcfd18b4b003421e306aa">highp_umat3x3</a>;</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> </div>
+<div class="line"><a name="l00217"></a><span class="lineno"><a class="line" href="a00167.html#ga6edbf193ad6c4309e31262165f2655e7"> 217</a></span>  <span class="keyword">typedef</span> tmat3x4<uint, highp> <a class="code" href="a00167.html#ga6edbf193ad6c4309e31262165f2655e7">highp_umat3x4</a>;</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> </div>
+<div class="line"><a name="l00221"></a><span class="lineno"><a class="line" href="a00167.html#gaaba8a59eac3e5c0b3aaa9b35c1f10292"> 221</a></span>  <span class="keyword">typedef</span> tmat4x2<uint, highp> <a class="code" href="a00167.html#gaaba8a59eac3e5c0b3aaa9b35c1f10292">highp_umat4x2</a>;</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> </div>
+<div class="line"><a name="l00225"></a><span class="lineno"><a class="line" href="a00167.html#ga899a376888652fe3c03718641812bb27"> 225</a></span>  <span class="keyword">typedef</span> tmat4x3<uint, highp> <a class="code" href="a00167.html#ga899a376888652fe3c03718641812bb27">highp_umat4x3</a>;</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> </div>
+<div class="line"><a name="l00229"></a><span class="lineno"><a class="line" href="a00167.html#gab8068521c0ad6990373d27d87d333084"> 229</a></span>  <span class="keyword">typedef</span> tmat4x4<uint, highp> <a class="code" href="a00167.html#gab8068521c0ad6990373d27d87d333084">highp_umat4x4</a>;</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> </div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> </div>
+<div class="line"><a name="l00234"></a><span class="lineno"><a class="line" href="a00167.html#ga7322b97f1be10c83290ab57ef784d493"> 234</a></span>  <span class="keyword">typedef</span> tmat2x2<uint, mediump> <a class="code" href="a00167.html#ga7322b97f1be10c83290ab57ef784d493">mediump_umat2</a>;</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> </div>
+<div class="line"><a name="l00238"></a><span class="lineno"><a class="line" href="a00167.html#ga93961d3aac6efa36dc3f9cfa7e9056e6"> 238</a></span>  <span class="keyword">typedef</span> tmat3x3<uint, mediump> <a class="code" href="a00167.html#ga93961d3aac6efa36dc3f9cfa7e9056e6">mediump_umat3</a>;</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> </div>
+<div class="line"><a name="l00242"></a><span class="lineno"><a class="line" href="a00167.html#gac23667a99ae1ec649b5e55cd5a05b833"> 242</a></span>  <span class="keyword">typedef</span> tmat4x4<uint, mediump> <a class="code" href="a00167.html#gac23667a99ae1ec649b5e55cd5a05b833">mediump_umat4</a>;</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> </div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> </div>
+<div class="line"><a name="l00247"></a><span class="lineno"><a class="line" href="a00167.html#ga0ffed083b64e4f764db0f446d2c49163"> 247</a></span>  <span class="keyword">typedef</span> tmat2x2<uint, mediump> <a class="code" href="a00167.html#ga0ffed083b64e4f764db0f446d2c49163">mediump_umat2x2</a>;</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno"><a class="line" href="a00167.html#ga7ecc585b71766cfa96bd54a595bea1fb"> 251</a></span>  <span class="keyword">typedef</span> tmat2x3<uint, mediump> <a class="code" href="a00167.html#ga7ecc585b71766cfa96bd54a595bea1fb">mediump_umat2x3</a>;</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> </div>
+<div class="line"><a name="l00255"></a><span class="lineno"><a class="line" href="a00167.html#gac4abd549f2e521c7f40f53b6235c450e"> 255</a></span>  <span class="keyword">typedef</span> tmat2x4<uint, mediump> <a class="code" href="a00167.html#gac4abd549f2e521c7f40f53b6235c450e">mediump_umat2x4</a>;</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> </div>
+<div class="line"><a name="l00259"></a><span class="lineno"><a class="line" href="a00167.html#ga3fb358a947f8ceaefddd75bce22cd947"> 259</a></span>  <span class="keyword">typedef</span> tmat3x2<uint, mediump> <a class="code" href="a00167.html#ga3fb358a947f8ceaefddd75bce22cd947">mediump_umat3x2</a>;</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> </div>
+<div class="line"><a name="l00263"></a><span class="lineno"><a class="line" href="a00167.html#gad4809dbfb1bfcf222d7b34a97a8eafe5"> 263</a></span>  <span class="keyword">typedef</span> tmat3x3<uint, mediump> <a class="code" href="a00167.html#gad4809dbfb1bfcf222d7b34a97a8eafe5">mediump_umat3x3</a>;</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> </div>
+<div class="line"><a name="l00267"></a><span class="lineno"><a class="line" href="a00167.html#ga5a9d62e44668ca2222f0362f9c99d9cc"> 267</a></span>  <span class="keyword">typedef</span> tmat3x4<uint, mediump> <a class="code" href="a00167.html#ga5a9d62e44668ca2222f0362f9c99d9cc">mediump_umat3x4</a>;</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno"><a class="line" href="a00167.html#gac8d1db85d62244fd90d240227c7f51ad"> 271</a></span>  <span class="keyword">typedef</span> tmat4x2<uint, mediump> <a class="code" href="a00167.html#gac8d1db85d62244fd90d240227c7f51ad">mediump_umat4x2</a>;</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> </div>
+<div class="line"><a name="l00275"></a><span class="lineno"><a class="line" href="a00167.html#ga7d332d462f2c1ad5a65dc580d3d1aa39"> 275</a></span>  <span class="keyword">typedef</span> tmat4x3<uint, mediump> <a class="code" href="a00167.html#ga7d332d462f2c1ad5a65dc580d3d1aa39">mediump_umat4x3</a>;</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> </div>
+<div class="line"><a name="l00279"></a><span class="lineno"><a class="line" href="a00167.html#ga24716579cf155f4e042542808f83978c"> 279</a></span>  <span class="keyword">typedef</span> tmat4x4<uint, mediump> <a class="code" href="a00167.html#ga24716579cf155f4e042542808f83978c">mediump_umat4x4</a>;</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> </div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> </div>
+<div class="line"><a name="l00284"></a><span class="lineno"><a class="line" href="a00167.html#ga1406406e396b56bde3c7c0722f657064"> 284</a></span>  <span class="keyword">typedef</span> tmat2x2<uint, lowp> <a class="code" href="a00167.html#ga1406406e396b56bde3c7c0722f657064">lowp_umat2</a>;</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  </div>
+<div class="line"><a name="l00288"></a><span class="lineno"><a class="line" href="a00167.html#ga7fc1f795f2abd0020c7b5204f4c83033"> 288</a></span>  <span class="keyword">typedef</span> tmat3x3<uint, lowp> <a class="code" href="a00167.html#ga7fc1f795f2abd0020c7b5204f4c83033">lowp_umat3</a>;</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> </div>
+<div class="line"><a name="l00292"></a><span class="lineno"><a class="line" href="a00167.html#gafe68c1cf2b379a9a11d1a11c9c2f8884"> 292</a></span>  <span class="keyword">typedef</span> tmat4x4<uint, lowp> <a class="code" href="a00167.html#gafe68c1cf2b379a9a11d1a11c9c2f8884">lowp_umat4</a>;</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> </div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> </div>
+<div class="line"><a name="l00297"></a><span class="lineno"><a class="line" href="a00167.html#ga1f0cea730f6c13b16e511bd2d63507a3"> 297</a></span>  <span class="keyword">typedef</span> tmat2x2<uint, lowp> <a class="code" href="a00167.html#ga1f0cea730f6c13b16e511bd2d63507a3">lowp_umat2x2</a>;</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> </div>
+<div class="line"><a name="l00301"></a><span class="lineno"><a class="line" href="a00167.html#gaa86bd9dc8463b46a46ee944948111676"> 301</a></span>  <span class="keyword">typedef</span> tmat2x3<uint, lowp> <a class="code" href="a00167.html#gaa86bd9dc8463b46a46ee944948111676">lowp_umat2x3</a>;</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> </div>
+<div class="line"><a name="l00305"></a><span class="lineno"><a class="line" href="a00167.html#ga7b6c64600bad79d735fa6bec843b2bb4"> 305</a></span>  <span class="keyword">typedef</span> tmat2x4<uint, lowp> <a class="code" href="a00167.html#ga7b6c64600bad79d735fa6bec843b2bb4">lowp_umat2x4</a>;</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> </div>
+<div class="line"><a name="l00309"></a><span class="lineno"><a class="line" href="a00167.html#gad73943020bb49a072317ecfc52d587f0"> 309</a></span>  <span class="keyword">typedef</span> tmat3x2<uint, lowp> <a class="code" href="a00167.html#gad73943020bb49a072317ecfc52d587f0">lowp_umat3x2</a>;</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> </div>
+<div class="line"><a name="l00313"></a><span class="lineno"><a class="line" href="a00167.html#ga402d169fc3cdca5f3ea47a358a7b7c67"> 313</a></span>  <span class="keyword">typedef</span> tmat3x3<uint, lowp> <a class="code" href="a00167.html#ga402d169fc3cdca5f3ea47a358a7b7c67">lowp_umat3x3</a>;</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> </div>
+<div class="line"><a name="l00317"></a><span class="lineno"><a class="line" href="a00167.html#ga2dce1c00ed50fd09fe349de3713d96db"> 317</a></span>  <span class="keyword">typedef</span> tmat3x4<uint, lowp> <a class="code" href="a00167.html#ga2dce1c00ed50fd09fe349de3713d96db">lowp_umat3x4</a>;</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> </div>
+<div class="line"><a name="l00321"></a><span class="lineno"><a class="line" href="a00167.html#ga76cab31d492ea214c693ab9132b4de95"> 321</a></span>  <span class="keyword">typedef</span> tmat4x2<uint, lowp> <a class="code" href="a00167.html#ga76cab31d492ea214c693ab9132b4de95">lowp_umat4x2</a>;</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> </div>
+<div class="line"><a name="l00325"></a><span class="lineno"><a class="line" href="a00167.html#gae3ca9e28a9d2e5fce5e28593d27e370d"> 325</a></span>  <span class="keyword">typedef</span> tmat4x3<uint, lowp> <a class="code" href="a00167.html#gae3ca9e28a9d2e5fce5e28593d27e370d">lowp_umat4x3</a>;</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> </div>
+<div class="line"><a name="l00329"></a><span class="lineno"><a class="line" href="a00167.html#ga742be484e56e08ef637f8ec4ab7c8bb2"> 329</a></span>  <span class="keyword">typedef</span> tmat4x4<uint, lowp> <a class="code" href="a00167.html#ga742be484e56e08ef637f8ec4ab7c8bb2">lowp_umat4x4</a>;</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> </div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> <span class="preprocessor">#if(defined(GLM_PRECISION_HIGHP_INT))</span></div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <span class="keyword">typedef</span> highp_imat2 <a class="code" href="a00167.html#gaabe04f9948d4a213bb1c20137de03e01">imat2</a>;</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  <span class="keyword">typedef</span> highp_imat3 <a class="code" href="a00167.html#ga038f68437155ffa3c2583a15264a8195">imat3</a>;</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  <span class="keyword">typedef</span> highp_imat4 <a class="code" href="a00167.html#ga96b0d26a33b81bb6a60ca0f39682f7eb">imat4</a>;</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  <span class="keyword">typedef</span> highp_imat2x2 <a class="code" href="a00167.html#gaa4732a240522ad9bc28144fda2fc14ec">imat2x2</a>;</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  <span class="keyword">typedef</span> highp_imat2x3 <a class="code" href="a00167.html#ga3f42dd3d5d94a0fd5706f7ec8dd0c605">imat2x3</a>;</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  <span class="keyword">typedef</span> highp_imat2x4 <a class="code" href="a00167.html#ga9d8faafdca42583d67e792dd038fc668">imat2x4</a>;</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  <span class="keyword">typedef</span> highp_imat3x2 <a class="code" href="a00167.html#ga7b33bbe4f12c060892bd3cc8d4cd737f">imat3x2</a>;</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  <span class="keyword">typedef</span> highp_imat3x3 <a class="code" href="a00167.html#ga6aacc960f62e8f7d2fe9d32d5050e7a4">imat3x3</a>;</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  <span class="keyword">typedef</span> highp_imat3x4 <a class="code" href="a00167.html#ga6e9ce23496d8b08dfc302d4039694b58">imat3x4</a>;</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  <span class="keyword">typedef</span> highp_imat4x2 <a class="code" href="a00167.html#ga8ce7ef51d8b2c1901fa5414deccbc3fa">imat4x2</a>;</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  <span class="keyword">typedef</span> highp_imat4x3 <a class="code" href="a00167.html#ga705ee0bf49d6c3de4404ce2481bf0df5">imat4x3</a>;</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  <span class="keyword">typedef</span> highp_imat4x4 <a class="code" href="a00167.html#ga43ed5e4f475b6f4cad7cba78f29c405b">imat4x4</a>;</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> <span class="preprocessor">#elif(defined(GLM_PRECISION_LOWP_INT))</span></div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  <span class="keyword">typedef</span> lowp_imat2 <a class="code" href="a00167.html#gaabe04f9948d4a213bb1c20137de03e01">imat2</a>;</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  <span class="keyword">typedef</span> lowp_imat3 <a class="code" href="a00167.html#ga038f68437155ffa3c2583a15264a8195">imat3</a>;</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  <span class="keyword">typedef</span> lowp_imat4 <a class="code" href="a00167.html#ga96b0d26a33b81bb6a60ca0f39682f7eb">imat4</a>;</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  <span class="keyword">typedef</span> lowp_imat2x2 <a class="code" href="a00167.html#gaa4732a240522ad9bc28144fda2fc14ec">imat2x2</a>;</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  <span class="keyword">typedef</span> lowp_imat2x3 <a class="code" href="a00167.html#ga3f42dd3d5d94a0fd5706f7ec8dd0c605">imat2x3</a>;</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  <span class="keyword">typedef</span> lowp_imat2x4 <a class="code" href="a00167.html#ga9d8faafdca42583d67e792dd038fc668">imat2x4</a>;</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  <span class="keyword">typedef</span> lowp_imat3x2 <a class="code" href="a00167.html#ga7b33bbe4f12c060892bd3cc8d4cd737f">imat3x2</a>;</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  <span class="keyword">typedef</span> lowp_imat3x3 <a class="code" href="a00167.html#ga6aacc960f62e8f7d2fe9d32d5050e7a4">imat3x3</a>;</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  <span class="keyword">typedef</span> lowp_imat3x4 <a class="code" href="a00167.html#ga6e9ce23496d8b08dfc302d4039694b58">imat3x4</a>;</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  <span class="keyword">typedef</span> lowp_imat4x2 <a class="code" href="a00167.html#ga8ce7ef51d8b2c1901fa5414deccbc3fa">imat4x2</a>;</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  <span class="keyword">typedef</span> lowp_imat4x3 <a class="code" href="a00167.html#ga705ee0bf49d6c3de4404ce2481bf0df5">imat4x3</a>;</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <span class="keyword">typedef</span> lowp_imat4x4 <a class="code" href="a00167.html#ga43ed5e4f475b6f4cad7cba78f29c405b">imat4x4</a>;</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="preprocessor">#else //if(defined(GLM_PRECISION_MEDIUMP_INT))</span></div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> </div>
+<div class="line"><a name="l00361"></a><span class="lineno"><a class="line" href="a00167.html#gaabe04f9948d4a213bb1c20137de03e01"> 361</a></span>  <span class="keyword">typedef</span> mediump_imat2 <a class="code" href="a00167.html#gaabe04f9948d4a213bb1c20137de03e01">imat2</a>;</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> </div>
+<div class="line"><a name="l00365"></a><span class="lineno"><a class="line" href="a00167.html#ga038f68437155ffa3c2583a15264a8195"> 365</a></span>  <span class="keyword">typedef</span> mediump_imat3 <a class="code" href="a00167.html#ga038f68437155ffa3c2583a15264a8195">imat3</a>;</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> </div>
+<div class="line"><a name="l00369"></a><span class="lineno"><a class="line" href="a00167.html#ga96b0d26a33b81bb6a60ca0f39682f7eb"> 369</a></span>  <span class="keyword">typedef</span> mediump_imat4 <a class="code" href="a00167.html#ga96b0d26a33b81bb6a60ca0f39682f7eb">imat4</a>;</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> </div>
+<div class="line"><a name="l00373"></a><span class="lineno"><a class="line" href="a00167.html#gaa4732a240522ad9bc28144fda2fc14ec"> 373</a></span>  <span class="keyword">typedef</span> mediump_imat2x2 <a class="code" href="a00167.html#gaa4732a240522ad9bc28144fda2fc14ec">imat2x2</a>;</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> </div>
+<div class="line"><a name="l00377"></a><span class="lineno"><a class="line" href="a00167.html#ga3f42dd3d5d94a0fd5706f7ec8dd0c605"> 377</a></span>  <span class="keyword">typedef</span> mediump_imat2x3 <a class="code" href="a00167.html#ga3f42dd3d5d94a0fd5706f7ec8dd0c605">imat2x3</a>;</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> </div>
+<div class="line"><a name="l00381"></a><span class="lineno"><a class="line" href="a00167.html#ga9d8faafdca42583d67e792dd038fc668"> 381</a></span>  <span class="keyword">typedef</span> mediump_imat2x4 <a class="code" href="a00167.html#ga9d8faafdca42583d67e792dd038fc668">imat2x4</a>;</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> </div>
+<div class="line"><a name="l00385"></a><span class="lineno"><a class="line" href="a00167.html#ga7b33bbe4f12c060892bd3cc8d4cd737f"> 385</a></span>  <span class="keyword">typedef</span> mediump_imat3x2 <a class="code" href="a00167.html#ga7b33bbe4f12c060892bd3cc8d4cd737f">imat3x2</a>;</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> </div>
+<div class="line"><a name="l00389"></a><span class="lineno"><a class="line" href="a00167.html#ga6aacc960f62e8f7d2fe9d32d5050e7a4"> 389</a></span>  <span class="keyword">typedef</span> mediump_imat3x3 <a class="code" href="a00167.html#ga6aacc960f62e8f7d2fe9d32d5050e7a4">imat3x3</a>;</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> </div>
+<div class="line"><a name="l00393"></a><span class="lineno"><a class="line" href="a00167.html#ga6e9ce23496d8b08dfc302d4039694b58"> 393</a></span>  <span class="keyword">typedef</span> mediump_imat3x4 <a class="code" href="a00167.html#ga6e9ce23496d8b08dfc302d4039694b58">imat3x4</a>;</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> </div>
+<div class="line"><a name="l00397"></a><span class="lineno"><a class="line" href="a00167.html#ga8ce7ef51d8b2c1901fa5414deccbc3fa"> 397</a></span>  <span class="keyword">typedef</span> mediump_imat4x2 <a class="code" href="a00167.html#ga8ce7ef51d8b2c1901fa5414deccbc3fa">imat4x2</a>;</div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> </div>
+<div class="line"><a name="l00401"></a><span class="lineno"><a class="line" href="a00167.html#ga705ee0bf49d6c3de4404ce2481bf0df5"> 401</a></span>  <span class="keyword">typedef</span> mediump_imat4x3 <a class="code" href="a00167.html#ga705ee0bf49d6c3de4404ce2481bf0df5">imat4x3</a>;</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> </div>
+<div class="line"><a name="l00405"></a><span class="lineno"><a class="line" href="a00167.html#ga43ed5e4f475b6f4cad7cba78f29c405b"> 405</a></span>  <span class="keyword">typedef</span> mediump_imat4x4 <a class="code" href="a00167.html#ga43ed5e4f475b6f4cad7cba78f29c405b">imat4x4</a>;</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> <span class="preprocessor">#endif//GLM_PRECISION</span></div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> </div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> <span class="preprocessor">#if(defined(GLM_PRECISION_HIGHP_UINT))</span></div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span>  <span class="keyword">typedef</span> highp_umat2 <a class="code" href="a00167.html#ga4cae85566f900debf930c41944b64691">umat2</a>;</div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  <span class="keyword">typedef</span> highp_umat3 <a class="code" href="a00167.html#ga5085e3ff02abbac5e537eb7b89ab63b6">umat3</a>;</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  <span class="keyword">typedef</span> highp_umat4 <a class="code" href="a00167.html#ga38bc7bb6494e344185df596deeb4544c">umat4</a>;</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  <span class="keyword">typedef</span> highp_umat2x2 <a class="code" href="a00167.html#gabf8acdd33ce8951051edbca5200898aa">umat2x2</a>;</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  <span class="keyword">typedef</span> highp_umat2x3 <a class="code" href="a00167.html#ga1870da7578d5022b973a83155d386ab3">umat2x3</a>;</div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  <span class="keyword">typedef</span> highp_umat2x4 <a class="code" href="a00167.html#ga57936a3998e992370e59a223e0ee4fd4">umat2x4</a>;</div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  <span class="keyword">typedef</span> highp_umat3x2 <a class="code" href="a00167.html#ga9cd7fa637a4a6788337f45231fad9e1a">umat3x2</a>;</div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  <span class="keyword">typedef</span> highp_umat3x3 <a class="code" href="a00167.html#ga1f2cfcf3357db0cdf31fcb15e3c6bafb">umat3x3</a>;</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  <span class="keyword">typedef</span> highp_umat3x4 <a class="code" href="a00167.html#gae7c78ff3fc4309605ab0fa186c8d48ba">umat3x4</a>;</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  <span class="keyword">typedef</span> highp_umat4x2 <a class="code" href="a00167.html#ga70fa2d05896aa83cbc8c07672a429b53">umat4x2</a>;</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  <span class="keyword">typedef</span> highp_umat4x3 <a class="code" href="a00167.html#ga87581417945411f75cb31dd6ca1dba98">umat4x3</a>;</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  <span class="keyword">typedef</span> highp_umat4x4 <a class="code" href="a00167.html#gaf72e6d399c42985db6872c50f53d7eb8">umat4x4</a>;</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> <span class="preprocessor">#elif(defined(GLM_PRECISION_LOWP_UINT))</span></div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  <span class="keyword">typedef</span> lowp_umat2 <a class="code" href="a00167.html#ga4cae85566f900debf930c41944b64691">umat2</a>;</div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  <span class="keyword">typedef</span> lowp_umat3 <a class="code" href="a00167.html#ga5085e3ff02abbac5e537eb7b89ab63b6">umat3</a>;</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  <span class="keyword">typedef</span> lowp_umat4 <a class="code" href="a00167.html#ga38bc7bb6494e344185df596deeb4544c">umat4</a>;</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  <span class="keyword">typedef</span> lowp_umat2x2 <a class="code" href="a00167.html#gabf8acdd33ce8951051edbca5200898aa">umat2x2</a>;</div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  <span class="keyword">typedef</span> lowp_umat2x3 <a class="code" href="a00167.html#ga1870da7578d5022b973a83155d386ab3">umat2x3</a>;</div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  <span class="keyword">typedef</span> lowp_umat2x4 <a class="code" href="a00167.html#ga57936a3998e992370e59a223e0ee4fd4">umat2x4</a>;</div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  <span class="keyword">typedef</span> lowp_umat3x2 <a class="code" href="a00167.html#ga9cd7fa637a4a6788337f45231fad9e1a">umat3x2</a>;</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  <span class="keyword">typedef</span> lowp_umat3x3 <a class="code" href="a00167.html#ga1f2cfcf3357db0cdf31fcb15e3c6bafb">umat3x3</a>;</div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  <span class="keyword">typedef</span> lowp_umat3x4 <a class="code" href="a00167.html#gae7c78ff3fc4309605ab0fa186c8d48ba">umat3x4</a>;</div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  <span class="keyword">typedef</span> lowp_umat4x2 <a class="code" href="a00167.html#ga70fa2d05896aa83cbc8c07672a429b53">umat4x2</a>;</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  <span class="keyword">typedef</span> lowp_umat4x3 <a class="code" href="a00167.html#ga87581417945411f75cb31dd6ca1dba98">umat4x3</a>;</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  <span class="keyword">typedef</span> lowp_umat4x4 <a class="code" href="a00167.html#gaf72e6d399c42985db6872c50f53d7eb8">umat4x4</a>;</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> <span class="preprocessor">#else //if(defined(GLM_PRECISION_MEDIUMP_UINT))</span></div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  </div>
+<div class="line"><a name="l00438"></a><span class="lineno"><a class="line" href="a00167.html#ga4cae85566f900debf930c41944b64691"> 438</a></span>  <span class="keyword">typedef</span> mediump_umat2 <a class="code" href="a00167.html#ga4cae85566f900debf930c41944b64691">umat2</a>;</div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> </div>
+<div class="line"><a name="l00442"></a><span class="lineno"><a class="line" href="a00167.html#ga5085e3ff02abbac5e537eb7b89ab63b6"> 442</a></span>  <span class="keyword">typedef</span> mediump_umat3 <a class="code" href="a00167.html#ga5085e3ff02abbac5e537eb7b89ab63b6">umat3</a>;</div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> </div>
+<div class="line"><a name="l00446"></a><span class="lineno"><a class="line" href="a00167.html#ga38bc7bb6494e344185df596deeb4544c"> 446</a></span>  <span class="keyword">typedef</span> mediump_umat4 <a class="code" href="a00167.html#ga38bc7bb6494e344185df596deeb4544c">umat4</a>;</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> </div>
+<div class="line"><a name="l00450"></a><span class="lineno"><a class="line" href="a00167.html#gabf8acdd33ce8951051edbca5200898aa"> 450</a></span>  <span class="keyword">typedef</span> mediump_umat2x2 <a class="code" href="a00167.html#gabf8acdd33ce8951051edbca5200898aa">umat2x2</a>;</div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> </div>
+<div class="line"><a name="l00454"></a><span class="lineno"><a class="line" href="a00167.html#ga1870da7578d5022b973a83155d386ab3"> 454</a></span>  <span class="keyword">typedef</span> mediump_umat2x3 <a class="code" href="a00167.html#ga1870da7578d5022b973a83155d386ab3">umat2x3</a>;</div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> </div>
+<div class="line"><a name="l00458"></a><span class="lineno"><a class="line" href="a00167.html#ga57936a3998e992370e59a223e0ee4fd4"> 458</a></span>  <span class="keyword">typedef</span> mediump_umat2x4 <a class="code" href="a00167.html#ga57936a3998e992370e59a223e0ee4fd4">umat2x4</a>;</div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> </div>
+<div class="line"><a name="l00462"></a><span class="lineno"><a class="line" href="a00167.html#ga9cd7fa637a4a6788337f45231fad9e1a"> 462</a></span>  <span class="keyword">typedef</span> mediump_umat3x2 <a class="code" href="a00167.html#ga9cd7fa637a4a6788337f45231fad9e1a">umat3x2</a>;</div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> </div>
+<div class="line"><a name="l00466"></a><span class="lineno"><a class="line" href="a00167.html#ga1f2cfcf3357db0cdf31fcb15e3c6bafb"> 466</a></span>  <span class="keyword">typedef</span> mediump_umat3x3 <a class="code" href="a00167.html#ga1f2cfcf3357db0cdf31fcb15e3c6bafb">umat3x3</a>;</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> </div>
+<div class="line"><a name="l00470"></a><span class="lineno"><a class="line" href="a00167.html#gae7c78ff3fc4309605ab0fa186c8d48ba"> 470</a></span>  <span class="keyword">typedef</span> mediump_umat3x4 <a class="code" href="a00167.html#gae7c78ff3fc4309605ab0fa186c8d48ba">umat3x4</a>;</div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> </div>
+<div class="line"><a name="l00474"></a><span class="lineno"><a class="line" href="a00167.html#ga70fa2d05896aa83cbc8c07672a429b53"> 474</a></span>  <span class="keyword">typedef</span> mediump_umat4x2 <a class="code" href="a00167.html#ga70fa2d05896aa83cbc8c07672a429b53">umat4x2</a>;</div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> </div>
+<div class="line"><a name="l00478"></a><span class="lineno"><a class="line" href="a00167.html#ga87581417945411f75cb31dd6ca1dba98"> 478</a></span>  <span class="keyword">typedef</span> mediump_umat4x3 <a class="code" href="a00167.html#ga87581417945411f75cb31dd6ca1dba98">umat4x3</a>;</div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> </div>
+<div class="line"><a name="l00482"></a><span class="lineno"><a class="line" href="a00167.html#gaf72e6d399c42985db6872c50f53d7eb8"> 482</a></span>  <span class="keyword">typedef</span> mediump_umat4x4 <a class="code" href="a00167.html#gaf72e6d399c42985db6872c50f53d7eb8">umat4x4</a>;</div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> <span class="preprocessor">#endif//GLM_PRECISION</span></div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> </div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> }<span class="comment">//namespace glm</span></div>
+<div class="ttc" id="a00167_html_ga705ee0bf49d6c3de4404ce2481bf0df5"><div class="ttname"><a href="a00167.html#ga705ee0bf49d6c3de4404ce2481bf0df5">glm::imat4x3</a></div><div class="ttdeci">mediump_imat4x3 imat4x3</div><div class="ttdoc">Signed integer 4x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00401">matrix_integer.hpp:401</a></div></div>
+<div class="ttc" id="a00167_html_ga148f3a81d15a570b9460158e6964f41c"><div class="ttname"><a href="a00167.html#ga148f3a81d15a570b9460158e6964f41c">glm::lowp_imat3</a></div><div class="ttdeci">tmat3x3< int, lowp > lowp_imat3</div><div class="ttdoc">Low-precision signed integer 3x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00139">matrix_integer.hpp:139</a></div></div>
+<div class="ttc" id="a00167_html_gabc572d47b60f7e595d7aad945f5d13a8"><div class="ttname"><a href="a00167.html#gabc572d47b60f7e595d7aad945f5d13a8">glm::mediump_imat2x2</a></div><div class="ttdeci">tmat2x2< int, mediump > mediump_imat2x2</div><div class="ttdoc">Medium-precision signed integer 2x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00098">matrix_integer.hpp:98</a></div></div>
+<div class="ttc" id="a00167_html_ga8e0f797a57fec255f0eec7da1511bc38"><div class="ttname"><a href="a00167.html#ga8e0f797a57fec255f0eec7da1511bc38">glm::mediump_imat3x4</a></div><div class="ttdeci">tmat3x4< int, mediump > mediump_imat3x4</div><div class="ttdoc">Medium-precision signed integer 3x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00118">matrix_integer.hpp:118</a></div></div>
+<div class="ttc" id="a00167_html_ga0413bf87605b9247be2533c439127a1c"><div class="ttname"><a href="a00167.html#ga0413bf87605b9247be2533c439127a1c">glm::highp_imat3x2</a></div><div class="ttdeci">tmat3x2< int, highp > highp_imat3x2</div><div class="ttdoc">High-precision signed integer 3x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00060">matrix_integer.hpp:60</a></div></div>
+<div class="ttc" id="a00167_html_ga76cab31d492ea214c693ab9132b4de95"><div class="ttname"><a href="a00167.html#ga76cab31d492ea214c693ab9132b4de95">glm::lowp_umat4x2</a></div><div class="ttdeci">tmat4x2< uint, lowp > lowp_umat4x2</div><div class="ttdoc">Low-precision unsigned integer 4x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00321">matrix_integer.hpp:321</a></div></div>
+<div class="ttc" id="a00167_html_ga3fb358a947f8ceaefddd75bce22cd947"><div class="ttname"><a href="a00167.html#ga3fb358a947f8ceaefddd75bce22cd947">glm::mediump_umat3x2</a></div><div class="ttdeci">tmat3x2< uint, mediump > mediump_umat3x2</div><div class="ttdoc">Medium-precision unsigned integer 3x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00259">matrix_integer.hpp:259</a></div></div>
+<div class="ttc" id="a00167_html_ga05064e28b911be1af0503ddf6e6204a3"><div class="ttname"><a href="a00167.html#ga05064e28b911be1af0503ddf6e6204a3">glm::mediump_imat3x3</a></div><div class="ttdeci">tmat3x3< int, mediump > mediump_imat3x3</div><div class="ttdoc">Medium-precision signed integer 3x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00114">matrix_integer.hpp:114</a></div></div>
+<div class="ttc" id="a00167_html_ga3f42dd3d5d94a0fd5706f7ec8dd0c605"><div class="ttname"><a href="a00167.html#ga3f42dd3d5d94a0fd5706f7ec8dd0c605">glm::imat2x3</a></div><div class="ttdeci">mediump_imat2x3 imat2x3</div><div class="ttdoc">Signed integer 2x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00377">matrix_integer.hpp:377</a></div></div>
+<div class="ttc" id="a00167_html_ga70fa2d05896aa83cbc8c07672a429b53"><div class="ttname"><a href="a00167.html#ga70fa2d05896aa83cbc8c07672a429b53">glm::umat4x2</a></div><div class="ttdeci">mediump_umat4x2 umat4x2</div><div class="ttdoc">Unsigned integer 4x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00474">matrix_integer.hpp:474</a></div></div>
+<div class="ttc" id="a00167_html_ga4efd6470c0edf9704d2244fc92dbc2a9"><div class="ttname"><a href="a00167.html#ga4efd6470c0edf9704d2244fc92dbc2a9">glm::highp_imat3</a></div><div class="ttdeci">tmat3x3< int, highp > highp_imat3</div><div class="ttdoc">High-precision signed integer 3x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00040">matrix_integer.hpp:40</a></div></div>
+<div class="ttc" id="a00167_html_ga7d43dd8332000f7f19379efa1b303599"><div class="ttname"><a href="a00167.html#ga7d43dd8332000f7f19379efa1b303599">glm::highp_imat4x2</a></div><div class="ttdeci">tmat4x2< int, highp > highp_imat4x2</div><div class="ttdoc">High-precision signed integer 4x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00072">matrix_integer.hpp:72</a></div></div>
+<div class="ttc" id="a00167_html_gae53db595d36f49a299e180302795e3c9"><div class="ttname"><a href="a00167.html#gae53db595d36f49a299e180302795e3c9">glm::highp_imat4x4</a></div><div class="ttdeci">tmat4x4< int, highp > highp_imat4x4</div><div class="ttdoc">High-precision signed integer 4x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00080">matrix_integer.hpp:80</a></div></div>
+<div class="ttc" id="a00167_html_ga7655dfee0d726e80d7a3b72f46d5fd35"><div class="ttname"><a href="a00167.html#ga7655dfee0d726e80d7a3b72f46d5fd35">glm::lowp_imat3x2</a></div><div class="ttdeci">tmat3x2< int, lowp > lowp_imat3x2</div><div class="ttdoc">Low-precision signed integer 3x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00160">matrix_integer.hpp:160</a></div></div>
+<div class="ttc" id="a00167_html_ga1a61c706b31aa60fd7012b2b27765983"><div class="ttname"><a href="a00167.html#ga1a61c706b31aa60fd7012b2b27765983">glm::mediump_imat3x2</a></div><div class="ttdeci">tmat3x2< int, mediump > mediump_imat3x2</div><div class="ttdoc">Medium-precision signed integer 3x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00110">matrix_integer.hpp:110</a></div></div>
+<div class="ttc" id="a00167_html_ga4cae85566f900debf930c41944b64691"><div class="ttname"><a href="a00167.html#ga4cae85566f900debf930c41944b64691">glm::umat2</a></div><div class="ttdeci">mediump_umat2 umat2</div><div class="ttdoc">Unsigned integer 2x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00438">matrix_integer.hpp:438</a></div></div>
+<div class="ttc" id="a00167_html_gaa08e27efc514088315ccbaf818f01880"><div class="ttname"><a href="a00167.html#gaa08e27efc514088315ccbaf818f01880">glm::mediump_imat2x4</a></div><div class="ttdeci">tmat2x4< int, mediump > mediump_imat2x4</div><div class="ttdoc">Medium-precision signed integer 2x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00106">matrix_integer.hpp:106</a></div></div>
+<div class="ttc" id="a00167_html_gaa4732a240522ad9bc28144fda2fc14ec"><div class="ttname"><a href="a00167.html#gaa4732a240522ad9bc28144fda2fc14ec">glm::imat2x2</a></div><div class="ttdeci">mediump_imat2x2 imat2x2</div><div class="ttdoc">Signed integer 2x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00373">matrix_integer.hpp:373</a></div></div>
+<div class="ttc" id="a00167_html_ga0ffed083b64e4f764db0f446d2c49163"><div class="ttname"><a href="a00167.html#ga0ffed083b64e4f764db0f446d2c49163">glm::mediump_umat2x2</a></div><div class="ttdeci">tmat2x2< uint, mediump > mediump_umat2x2</div><div class="ttdoc">Medium-precision unsigned integer 2x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00247">matrix_integer.hpp:247</a></div></div>
+<div class="ttc" id="a00167_html_gacf71e9abe57bcfd18b4b003421e306aa"><div class="ttname"><a href="a00167.html#gacf71e9abe57bcfd18b4b003421e306aa">glm::highp_umat3x3</a></div><div class="ttdeci">tmat3x3< uint, highp > highp_umat3x3</div><div class="ttdoc">High-precision unsigned integer 3x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00213">matrix_integer.hpp:213</a></div></div>
+<div class="ttc" id="a00167_html_ga3d913d70c629aa7ad504739286328f1b"><div class="ttname"><a href="a00167.html#ga3d913d70c629aa7ad504739286328f1b">glm::lowp_imat3x4</a></div><div class="ttdeci">tmat3x4< int, lowp > lowp_imat3x4</div><div class="ttdoc">Low-precision signed integer 3x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00168">matrix_integer.hpp:168</a></div></div>
+<div class="ttc" id="a00167_html_gabf8acdd33ce8951051edbca5200898aa"><div class="ttname"><a href="a00167.html#gabf8acdd33ce8951051edbca5200898aa">glm::umat2x2</a></div><div class="ttdeci">mediump_umat2x2 umat2x2</div><div class="ttdoc">Unsigned integer 2x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00450">matrix_integer.hpp:450</a></div></div>
+<div class="ttc" id="a00167_html_gaf72e6d399c42985db6872c50f53d7eb8"><div class="ttname"><a href="a00167.html#gaf72e6d399c42985db6872c50f53d7eb8">glm::umat4x4</a></div><div class="ttdeci">mediump_umat4x4 umat4x4</div><div class="ttdoc">Unsigned integer 4x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00482">matrix_integer.hpp:482</a></div></div>
+<div class="ttc" id="a00167_html_ga96b0d26a33b81bb6a60ca0f39682f7eb"><div class="ttname"><a href="a00167.html#ga96b0d26a33b81bb6a60ca0f39682f7eb">glm::imat4</a></div><div class="ttdeci">mediump_imat4 imat4</div><div class="ttdoc">Signed integer 4x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00369">matrix_integer.hpp:369</a></div></div>
+<div class="ttc" id="a00167_html_ga5085e3ff02abbac5e537eb7b89ab63b6"><div class="ttname"><a href="a00167.html#ga5085e3ff02abbac5e537eb7b89ab63b6">glm::umat3</a></div><div class="ttdeci">mediump_umat3 umat3</div><div class="ttdoc">Unsigned integer 3x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00442">matrix_integer.hpp:442</a></div></div>
+<div class="ttc" id="a00167_html_ga3f8fb92b62e31528886cc728d3404ecc"><div class="ttname"><a href="a00167.html#ga3f8fb92b62e31528886cc728d3404ecc">glm::lowp_imat2x3</a></div><div class="ttdeci">tmat2x3< int, lowp > lowp_imat2x3</div><div class="ttdoc">Low-precision signed integer 2x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00152">matrix_integer.hpp:152</a></div></div>
+<div class="ttc" id="a00167_html_gaa86bd9dc8463b46a46ee944948111676"><div class="ttname"><a href="a00167.html#gaa86bd9dc8463b46a46ee944948111676">glm::lowp_umat2x3</a></div><div class="ttdeci">tmat2x3< uint, lowp > lowp_umat2x3</div><div class="ttdoc">Low-precision unsigned integer 2x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00301">matrix_integer.hpp:301</a></div></div>
+<div class="ttc" id="a00167_html_ga038f68437155ffa3c2583a15264a8195"><div class="ttname"><a href="a00167.html#ga038f68437155ffa3c2583a15264a8195">glm::imat3</a></div><div class="ttdeci">mediump_imat3 imat3</div><div class="ttdoc">Signed integer 3x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00365">matrix_integer.hpp:365</a></div></div>
+<div class="ttc" id="a00167_html_ga1870da7578d5022b973a83155d386ab3"><div class="ttname"><a href="a00167.html#ga1870da7578d5022b973a83155d386ab3">glm::umat2x3</a></div><div class="ttdeci">mediump_umat2x3 umat2x3</div><div class="ttdoc">Unsigned integer 2x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00454">matrix_integer.hpp:454</a></div></div>
+<div class="ttc" id="a00167_html_ga8368cb49cb0bd5ac682a71d1eccc9a8c"><div class="ttname"><a href="a00167.html#ga8368cb49cb0bd5ac682a71d1eccc9a8c">glm::highp_umat4</a></div><div class="ttdeci">tmat4x4< uint, highp > highp_umat4</div><div class="ttdoc">High-precision unsigned integer 4x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00193">matrix_integer.hpp:193</a></div></div>
+<div class="ttc" id="a00167_html_gae3ca9e28a9d2e5fce5e28593d27e370d"><div class="ttname"><a href="a00167.html#gae3ca9e28a9d2e5fce5e28593d27e370d">glm::lowp_umat4x3</a></div><div class="ttdeci">tmat4x3< uint, lowp > lowp_umat4x3</div><div class="ttdoc">Low-precision unsigned integer 4x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00325">matrix_integer.hpp:325</a></div></div>
+<div class="ttc" id="a00167_html_gac8d1db85d62244fd90d240227c7f51ad"><div class="ttname"><a href="a00167.html#gac8d1db85d62244fd90d240227c7f51ad">glm::mediump_umat4x2</a></div><div class="ttdeci">tmat4x2< uint, mediump > mediump_umat4x2</div><div class="ttdoc">Medium-precision unsigned integer 4x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00271">matrix_integer.hpp:271</a></div></div>
+<div class="ttc" id="a00167_html_ga7fc1f795f2abd0020c7b5204f4c83033"><div class="ttname"><a href="a00167.html#ga7fc1f795f2abd0020c7b5204f4c83033">glm::lowp_umat3</a></div><div class="ttdeci">tmat3x3< uint, lowp > lowp_umat3</div><div class="ttdoc">Low-precision unsigned integer 3x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00288">matrix_integer.hpp:288</a></div></div>
+<div class="ttc" id="a00167_html_gac455e55e7cb32e31396a9d4613da046a"><div class="ttname"><a href="a00167.html#gac455e55e7cb32e31396a9d4613da046a">glm::highp_imat2x2</a></div><div class="ttdeci">tmat2x2< int, highp > highp_imat2x2</div><div class="ttdoc">High-precision signed integer 2x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00048">matrix_integer.hpp:48</a></div></div>
+<div class="ttc" id="a00167_html_ga815eb9fdf70edc45687cbcda07e97213"><div class="ttname"><a href="a00167.html#ga815eb9fdf70edc45687cbcda07e97213">glm::highp_umat2x4</a></div><div class="ttdeci">tmat2x4< uint, highp > highp_umat2x4</div><div class="ttdoc">High-precision unsigned integer 2x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00205">matrix_integer.hpp:205</a></div></div>
+<div class="ttc" id="a00167_html_ga7d332d462f2c1ad5a65dc580d3d1aa39"><div class="ttname"><a href="a00167.html#ga7d332d462f2c1ad5a65dc580d3d1aa39">glm::mediump_umat4x3</a></div><div class="ttdeci">tmat4x3< uint, mediump > mediump_umat4x3</div><div class="ttdoc">Medium-precision unsigned integer 4x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00275">matrix_integer.hpp:275</a></div></div>
+<div class="ttc" id="a00167_html_ga655bfcca624f422aff308dcc99688ce8"><div class="ttname"><a href="a00167.html#ga655bfcca624f422aff308dcc99688ce8">glm::mediump_imat4x4</a></div><div class="ttdeci">tmat4x4< int, mediump > mediump_imat4x4</div><div class="ttdoc">Medium-precision signed integer 4x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00130">matrix_integer.hpp:130</a></div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00167_html_gac2b0985b576fe0eba47227499aed2b3c"><div class="ttname"><a href="a00167.html#gac2b0985b576fe0eba47227499aed2b3c">glm::mediump_imat3</a></div><div class="ttdeci">tmat3x3< int, mediump > mediump_imat3</div><div class="ttdoc">Medium-precision signed integer 3x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00089">matrix_integer.hpp:89</a></div></div>
+<div class="ttc" id="a00167_html_ga7ecc585b71766cfa96bd54a595bea1fb"><div class="ttname"><a href="a00167.html#ga7ecc585b71766cfa96bd54a595bea1fb">glm::mediump_umat2x3</a></div><div class="ttdeci">tmat2x3< uint, mediump > mediump_umat2x3</div><div class="ttdoc">Medium-precision unsigned integer 2x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00251">matrix_integer.hpp:251</a></div></div>
+<div class="ttc" id="a00167_html_ga6e9ce23496d8b08dfc302d4039694b58"><div class="ttname"><a href="a00167.html#ga6e9ce23496d8b08dfc302d4039694b58">glm::imat3x4</a></div><div class="ttdeci">mediump_imat3x4 imat3x4</div><div class="ttdoc">Signed integer 3x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00393">matrix_integer.hpp:393</a></div></div>
+<div class="ttc" id="a00167_html_gac23667a99ae1ec649b5e55cd5a05b833"><div class="ttname"><a href="a00167.html#gac23667a99ae1ec649b5e55cd5a05b833">glm::mediump_umat4</a></div><div class="ttdeci">tmat4x4< uint, mediump > mediump_umat4</div><div class="ttdoc">Medium-precision unsigned integer 4x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00242">matrix_integer.hpp:242</a></div></div>
+<div class="ttc" id="a00167_html_ga892b53e26d36763f380b08a5768dee6b"><div class="ttname"><a href="a00167.html#ga892b53e26d36763f380b08a5768dee6b">glm::lowp_imat2x4</a></div><div class="ttdeci">tmat2x4< int, lowp > lowp_imat2x4</div><div class="ttdoc">Low-precision signed integer 2x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00156">matrix_integer.hpp:156</a></div></div>
+<div class="ttc" id="a00167_html_gacce460d54216438bb577bf8c9d68299c"><div class="ttname"><a href="a00167.html#gacce460d54216438bb577bf8c9d68299c">glm::highp_imat3x3</a></div><div class="ttdeci">tmat3x3< int, highp > highp_imat3x3</div><div class="ttdoc">High-precision signed integer 3x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00064">matrix_integer.hpp:64</a></div></div>
+<div class="ttc" id="a00167_html_ga2dce1c00ed50fd09fe349de3713d96db"><div class="ttname"><a href="a00167.html#ga2dce1c00ed50fd09fe349de3713d96db">glm::lowp_umat3x4</a></div><div class="ttdeci">tmat3x4< uint, lowp > lowp_umat3x4</div><div class="ttdoc">Low-precision unsigned integer 3x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00317">matrix_integer.hpp:317</a></div></div>
+<div class="ttc" id="a00167_html_ga402d169fc3cdca5f3ea47a358a7b7c67"><div class="ttname"><a href="a00167.html#ga402d169fc3cdca5f3ea47a358a7b7c67">glm::lowp_umat3x3</a></div><div class="ttdeci">tmat3x3< uint, lowp > lowp_umat3x3</div><div class="ttdoc">Low-precision unsigned integer 3x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00313">matrix_integer.hpp:313</a></div></div>
+<div class="ttc" id="a00167_html_ga24716579cf155f4e042542808f83978c"><div class="ttname"><a href="a00167.html#ga24716579cf155f4e042542808f83978c">glm::mediump_umat4x4</a></div><div class="ttdeci">tmat4x4< uint, mediump > mediump_umat4x4</div><div class="ttdoc">Medium-precision unsigned integer 4x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00279">matrix_integer.hpp:279</a></div></div>
+<div class="ttc" id="a00167_html_gae7b96c808a36fbe87f41af1c77b7941c"><div class="ttname"><a href="a00167.html#gae7b96c808a36fbe87f41af1c77b7941c">glm::highp_umat2</a></div><div class="ttdeci">tmat2x2< uint, highp > highp_umat2</div><div class="ttdoc">High-precision unsigned integer 2x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00185">matrix_integer.hpp:185</a></div></div>
+<div class="ttc" id="a00167_html_ga57936a3998e992370e59a223e0ee4fd4"><div class="ttname"><a href="a00167.html#ga57936a3998e992370e59a223e0ee4fd4">glm::umat2x4</a></div><div class="ttdeci">mediump_umat2x4 umat2x4</div><div class="ttdoc">Unsigned integer 2x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00458">matrix_integer.hpp:458</a></div></div>
+<div class="ttc" id="a00167_html_ga5b7e9af5024e1a164db6419f67ecfc9a"><div class="ttname"><a href="a00167.html#ga5b7e9af5024e1a164db6419f67ecfc9a">glm::mediump_imat2x3</a></div><div class="ttdeci">tmat2x3< int, mediump > mediump_imat2x3</div><div class="ttdoc">Medium-precision signed integer 2x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00102">matrix_integer.hpp:102</a></div></div>
+<div class="ttc" id="a00167_html_ga6edbf193ad6c4309e31262165f2655e7"><div class="ttname"><a href="a00167.html#ga6edbf193ad6c4309e31262165f2655e7">glm::highp_umat3x4</a></div><div class="ttdeci">tmat3x4< uint, highp > highp_umat3x4</div><div class="ttdoc">High-precision unsigned integer 3x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00217">matrix_integer.hpp:217</a></div></div>
+<div class="ttc" id="a00167_html_ga5bfe58853451fbc1f1ef6ce1f93c5e31"><div class="ttname"><a href="a00167.html#ga5bfe58853451fbc1f1ef6ce1f93c5e31">glm::lowp_imat2x2</a></div><div class="ttdeci">tmat2x2< int, lowp > lowp_imat2x2</div><div class="ttdoc">Low-precision signed integer 2x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00148">matrix_integer.hpp:148</a></div></div>
+<div class="ttc" id="a00167_html_ga3c035fec7db0d671ec8f9f1f0d05bed0"><div class="ttname"><a href="a00167.html#ga3c035fec7db0d671ec8f9f1f0d05bed0">glm::lowp_imat2</a></div><div class="ttdeci">tmat2x2< int, lowp > lowp_imat2</div><div class="ttdoc">Low-precision signed integer 2x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00135">matrix_integer.hpp:135</a></div></div>
+<div class="ttc" id="a00167_html_gaa9f8144beebdefd85e2a9ac480e7608a"><div class="ttname"><a href="a00167.html#gaa9f8144beebdefd85e2a9ac480e7608a">glm::highp_imat2</a></div><div class="ttdeci">tmat2x2< int, highp > highp_imat2</div><div class="ttdoc">High-precision signed integer 2x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00036">matrix_integer.hpp:36</a></div></div>
+<div class="ttc" id="a00167_html_gac4abd549f2e521c7f40f53b6235c450e"><div class="ttname"><a href="a00167.html#gac4abd549f2e521c7f40f53b6235c450e">glm::mediump_umat2x4</a></div><div class="ttdeci">tmat2x4< uint, mediump > mediump_umat2x4</div><div class="ttdoc">Medium-precision unsigned integer 2x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00255">matrix_integer.hpp:255</a></div></div>
+<div class="ttc" id="a00167_html_ga87581417945411f75cb31dd6ca1dba98"><div class="ttname"><a href="a00167.html#ga87581417945411f75cb31dd6ca1dba98">glm::umat4x3</a></div><div class="ttdeci">mediump_umat4x3 umat4x3</div><div class="ttdoc">Unsigned integer 4x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00478">matrix_integer.hpp:478</a></div></div>
+<div class="ttc" id="a00167_html_ga1406406e396b56bde3c7c0722f657064"><div class="ttname"><a href="a00167.html#ga1406406e396b56bde3c7c0722f657064">glm::lowp_umat2</a></div><div class="ttdeci">tmat2x2< uint, lowp > lowp_umat2</div><div class="ttdoc">Low-precision unsigned integer 2x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00284">matrix_integer.hpp:284</a></div></div>
+<div class="ttc" id="a00167_html_ga4860b4b01430bdb70643808c8d3bf5cb"><div class="ttname"><a href="a00167.html#ga4860b4b01430bdb70643808c8d3bf5cb">glm::highp_umat2x2</a></div><div class="ttdeci">tmat2x2< uint, highp > highp_umat2x2</div><div class="ttdoc">High-precision unsigned integer 2x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00197">matrix_integer.hpp:197</a></div></div>
+<div class="ttc" id="a00167_html_gaa60b19d7cadbaa56bed1e6e0047af147"><div class="ttname"><a href="a00167.html#gaa60b19d7cadbaa56bed1e6e0047af147">glm::highp_umat3</a></div><div class="ttdeci">tmat3x3< uint, highp > highp_umat3</div><div class="ttdoc">High-precision unsigned integer 3x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00189">matrix_integer.hpp:189</a></div></div>
+<div class="ttc" id="a00167_html_ga5a9d62e44668ca2222f0362f9c99d9cc"><div class="ttname"><a href="a00167.html#ga5a9d62e44668ca2222f0362f9c99d9cc">glm::mediump_umat3x4</a></div><div class="ttdeci">tmat3x4< uint, mediump > mediump_umat3x4</div><div class="ttdoc">Medium-precision unsigned integer 3x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00267">matrix_integer.hpp:267</a></div></div>
+<div class="ttc" id="a00167_html_ga1526c62951b04f5cd73f541f7b3b7d8d"><div class="ttname"><a href="a00167.html#ga1526c62951b04f5cd73f541f7b3b7d8d">glm::mediump_imat4x3</a></div><div class="ttdeci">tmat4x3< int, mediump > mediump_imat4x3</div><div class="ttdoc">Medium-precision signed integer 4x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00126">matrix_integer.hpp:126</a></div></div>
+<div class="ttc" id="a00167_html_ga73b855cc40e5d8202b7ab38461326d65"><div class="ttname"><a href="a00167.html#ga73b855cc40e5d8202b7ab38461326d65">glm::highp_imat2x4</a></div><div class="ttdeci">tmat2x4< int, highp > highp_imat2x4</div><div class="ttdoc">High-precision signed integer 2x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00056">matrix_integer.hpp:56</a></div></div>
+<div class="ttc" id="a00167_html_ga43ed5e4f475b6f4cad7cba78f29c405b"><div class="ttname"><a href="a00167.html#ga43ed5e4f475b6f4cad7cba78f29c405b">glm::imat4x4</a></div><div class="ttdeci">mediump_imat4x4 imat4x4</div><div class="ttdoc">Signed integer 4x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00405">matrix_integer.hpp:405</a></div></div>
+<div class="ttc" id="a00167_html_gad73943020bb49a072317ecfc52d587f0"><div class="ttname"><a href="a00167.html#gad73943020bb49a072317ecfc52d587f0">glm::lowp_umat3x2</a></div><div class="ttdeci">tmat3x2< uint, lowp > lowp_umat3x2</div><div class="ttdoc">Low-precision unsigned integer 3x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00309">matrix_integer.hpp:309</a></div></div>
+<div class="ttc" id="a00167_html_ga1582c5dc83e49a7e53bb0b94bef9de54"><div class="ttname"><a href="a00167.html#ga1582c5dc83e49a7e53bb0b94bef9de54">glm::mediump_imat4x2</a></div><div class="ttdeci">tmat4x2< int, mediump > mediump_imat4x2</div><div class="ttdoc">Medium-precision signed integer 4x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00122">matrix_integer.hpp:122</a></div></div>
+<div class="ttc" id="a00167_html_ga330140b22a9449caab308f2c69bf4c80"><div class="ttname"><a href="a00167.html#ga330140b22a9449caab308f2c69bf4c80">glm::lowp_imat4x4</a></div><div class="ttdeci">tmat4x4< int, lowp > lowp_imat4x4</div><div class="ttdoc">Low-precision signed integer 4x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00180">matrix_integer.hpp:180</a></div></div>
+<div class="ttc" id="a00167_html_gac351446661e5a8168473ff7b3b5ac3b5"><div class="ttname"><a href="a00167.html#gac351446661e5a8168473ff7b3b5ac3b5">glm::highp_umat2x3</a></div><div class="ttdeci">tmat2x3< uint, highp > highp_umat2x3</div><div class="ttdoc">High-precision unsigned integer 2x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00201">matrix_integer.hpp:201</a></div></div>
+<div class="ttc" id="a00167_html_ga9d8faafdca42583d67e792dd038fc668"><div class="ttname"><a href="a00167.html#ga9d8faafdca42583d67e792dd038fc668">glm::imat2x4</a></div><div class="ttdeci">mediump_imat2x4 imat2x4</div><div class="ttdoc">Signed integer 2x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00381">matrix_integer.hpp:381</a></div></div>
+<div class="ttc" id="a00167_html_gab8068521c0ad6990373d27d87d333084"><div class="ttname"><a href="a00167.html#gab8068521c0ad6990373d27d87d333084">glm::highp_umat4x4</a></div><div class="ttdeci">tmat4x4< uint, highp > highp_umat4x4</div><div class="ttdoc">High-precision unsigned integer 4x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00229">matrix_integer.hpp:229</a></div></div>
+<div class="ttc" id="a00167_html_gaabe04f9948d4a213bb1c20137de03e01"><div class="ttname"><a href="a00167.html#gaabe04f9948d4a213bb1c20137de03e01">glm::imat2</a></div><div class="ttdeci">mediump_imat2 imat2</div><div class="ttdoc">Signed integer 2x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00361">matrix_integer.hpp:361</a></div></div>
+<div class="ttc" id="a00167_html_ga8ce7ef51d8b2c1901fa5414deccbc3fa"><div class="ttname"><a href="a00167.html#ga8ce7ef51d8b2c1901fa5414deccbc3fa">glm::imat4x2</a></div><div class="ttdeci">mediump_imat4x2 imat4x2</div><div class="ttdoc">Signed integer 4x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00397">matrix_integer.hpp:397</a></div></div>
+<div class="ttc" id="a00167_html_gafe68c1cf2b379a9a11d1a11c9c2f8884"><div class="ttname"><a href="a00167.html#gafe68c1cf2b379a9a11d1a11c9c2f8884">glm::lowp_umat4</a></div><div class="ttdeci">tmat4x4< uint, lowp > lowp_umat4</div><div class="ttdoc">Low-precision unsigned integer 4x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00292">matrix_integer.hpp:292</a></div></div>
+<div class="ttc" id="a00167_html_ga1f0cea730f6c13b16e511bd2d63507a3"><div class="ttname"><a href="a00167.html#ga1f0cea730f6c13b16e511bd2d63507a3">glm::lowp_umat2x2</a></div><div class="ttdeci">tmat2x2< uint, lowp > lowp_umat2x2</div><div class="ttdoc">Low-precision unsigned integer 2x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00297">matrix_integer.hpp:297</a></div></div>
+<div class="ttc" id="a00167_html_ga3fdfce509d30bdd7778b8b156cb968df"><div class="ttname"><a href="a00167.html#ga3fdfce509d30bdd7778b8b156cb968df">glm::lowp_imat4x2</a></div><div class="ttdeci">tmat4x2< int, lowp > lowp_imat4x2</div><div class="ttdoc">Low-precision signed integer 4x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00172">matrix_integer.hpp:172</a></div></div>
+<div class="ttc" id="a00167_html_ga6a9945878f99294cfde40c6c3a867d69"><div class="ttname"><a href="a00167.html#ga6a9945878f99294cfde40c6c3a867d69">glm::lowp_imat4x3</a></div><div class="ttdeci">tmat4x3< int, lowp > lowp_imat4x3</div><div class="ttdoc">Low-precision signed integer 4x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00176">matrix_integer.hpp:176</a></div></div>
+<div class="ttc" id="a00167_html_ga9cd7fa637a4a6788337f45231fad9e1a"><div class="ttname"><a href="a00167.html#ga9cd7fa637a4a6788337f45231fad9e1a">glm::umat3x2</a></div><div class="ttdeci">mediump_umat3x2 umat3x2</div><div class="ttdoc">Unsigned integer 3x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00462">matrix_integer.hpp:462</a></div></div>
+<div class="ttc" id="a00167_html_gae7c78ff3fc4309605ab0fa186c8d48ba"><div class="ttname"><a href="a00167.html#gae7c78ff3fc4309605ab0fa186c8d48ba">glm::umat3x4</a></div><div class="ttdeci">mediump_umat3x4 umat3x4</div><div class="ttdoc">Unsigned integer 3x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00470">matrix_integer.hpp:470</a></div></div>
+<div class="ttc" id="a00167_html_ga7322b97f1be10c83290ab57ef784d493"><div class="ttname"><a href="a00167.html#ga7322b97f1be10c83290ab57ef784d493">glm::mediump_umat2</a></div><div class="ttdeci">tmat2x2< uint, mediump > mediump_umat2</div><div class="ttdoc">Medium-precision unsigned integer 2x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00234">matrix_integer.hpp:234</a></div></div>
+<div class="ttc" id="a00167_html_ga6aacc960f62e8f7d2fe9d32d5050e7a4"><div class="ttname"><a href="a00167.html#ga6aacc960f62e8f7d2fe9d32d5050e7a4">glm::imat3x3</a></div><div class="ttdeci">mediump_imat3x3 imat3x3</div><div class="ttdoc">Signed integer 3x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00389">matrix_integer.hpp:389</a></div></div>
+<div class="ttc" id="a00167_html_gad4809dbfb1bfcf222d7b34a97a8eafe5"><div class="ttname"><a href="a00167.html#gad4809dbfb1bfcf222d7b34a97a8eafe5">glm::mediump_umat3x3</a></div><div class="ttdeci">tmat3x3< uint, mediump > mediump_umat3x3</div><div class="ttdoc">Medium-precision unsigned integer 3x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00263">matrix_integer.hpp:263</a></div></div>
+<div class="ttc" id="a00167_html_gad3d7b23bdb4ed9b7d53c9db792db9bb4"><div class="ttname"><a href="a00167.html#gad3d7b23bdb4ed9b7d53c9db792db9bb4">glm::lowp_imat4</a></div><div class="ttdeci">tmat4x4< int, lowp > lowp_imat4</div><div class="ttdoc">Low-precision signed integer 4x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00143">matrix_integer.hpp:143</a></div></div>
+<div class="ttc" id="a00167_html_gab3d5c6aaeb5815f8f080305888f6828f"><div class="ttname"><a href="a00167.html#gab3d5c6aaeb5815f8f080305888f6828f">glm::lowp_imat3x3</a></div><div class="ttdeci">tmat3x3< int, lowp > lowp_imat3x3</div><div class="ttdoc">Low-precision signed integer 3x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00164">matrix_integer.hpp:164</a></div></div>
+<div class="ttc" id="a00167_html_ga3f8e55e14a6fc61850f8c0df9b4ff655"><div class="ttname"><a href="a00167.html#ga3f8e55e14a6fc61850f8c0df9b4ff655">glm::mediump_imat2</a></div><div class="ttdeci">tmat2x2< int, mediump > mediump_imat2</div><div class="ttdoc">Medium-precision signed integer 2x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00085">matrix_integer.hpp:85</a></div></div>
+<div class="ttc" id="a00167_html_ga1f2cfcf3357db0cdf31fcb15e3c6bafb"><div class="ttname"><a href="a00167.html#ga1f2cfcf3357db0cdf31fcb15e3c6bafb">glm::umat3x3</a></div><div class="ttdeci">mediump_umat3x3 umat3x3</div><div class="ttdoc">Unsigned integer 3x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00466">matrix_integer.hpp:466</a></div></div>
+<div class="ttc" id="a00167_html_ga551ad2e4e0304c67451ffbadeef0d615"><div class="ttname"><a href="a00167.html#ga551ad2e4e0304c67451ffbadeef0d615">glm::mediump_imat4</a></div><div class="ttdeci">tmat4x4< int, mediump > mediump_imat4</div><div class="ttdoc">Medium-precision signed integer 4x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00093">matrix_integer.hpp:93</a></div></div>
+<div class="ttc" id="a00167_html_ga93961d3aac6efa36dc3f9cfa7e9056e6"><div class="ttname"><a href="a00167.html#ga93961d3aac6efa36dc3f9cfa7e9056e6">glm::mediump_umat3</a></div><div class="ttdeci">tmat3x3< uint, mediump > mediump_umat3</div><div class="ttdoc">Medium-precision unsigned integer 3x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00238">matrix_integer.hpp:238</a></div></div>
+<div class="ttc" id="a00167_html_ga742be484e56e08ef637f8ec4ab7c8bb2"><div class="ttname"><a href="a00167.html#ga742be484e56e08ef637f8ec4ab7c8bb2">glm::lowp_umat4x4</a></div><div class="ttdeci">tmat4x4< uint, lowp > lowp_umat4x4</div><div class="ttdoc">Low-precision unsigned integer 4x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00329">matrix_integer.hpp:329</a></div></div>
+<div class="ttc" id="a00167_html_ga5f5f1e6dc06b72216463a425b2f7613e"><div class="ttname"><a href="a00167.html#ga5f5f1e6dc06b72216463a425b2f7613e">glm::highp_imat2x3</a></div><div class="ttdeci">tmat2x3< int, highp > highp_imat2x3</div><div class="ttdoc">High-precision signed integer 2x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00052">matrix_integer.hpp:52</a></div></div>
+<div class="ttc" id="a00167_html_ga7b6c64600bad79d735fa6bec843b2bb4"><div class="ttname"><a href="a00167.html#ga7b6c64600bad79d735fa6bec843b2bb4">glm::lowp_umat2x4</a></div><div class="ttdeci">tmat2x4< uint, lowp > lowp_umat2x4</div><div class="ttdoc">Low-precision unsigned integer 2x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00305">matrix_integer.hpp:305</a></div></div>
+<div class="ttc" id="a00167_html_ga38bc7bb6494e344185df596deeb4544c"><div class="ttname"><a href="a00167.html#ga38bc7bb6494e344185df596deeb4544c">glm::umat4</a></div><div class="ttdeci">mediump_umat4 umat4</div><div class="ttdoc">Unsigned integer 4x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00446">matrix_integer.hpp:446</a></div></div>
+<div class="ttc" id="a00167_html_ga7b33bbe4f12c060892bd3cc8d4cd737f"><div class="ttname"><a href="a00167.html#ga7b33bbe4f12c060892bd3cc8d4cd737f">glm::imat3x2</a></div><div class="ttdeci">mediump_imat3x2 imat3x2</div><div class="ttdoc">Signed integer 3x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00385">matrix_integer.hpp:385</a></div></div>
+<div class="ttc" id="a00167_html_ga159ce04cc638ff4db755542cd8f758cb"><div class="ttname"><a href="a00167.html#ga159ce04cc638ff4db755542cd8f758cb">glm::highp_imat4</a></div><div class="ttdeci">tmat4x4< int, highp > highp_imat4</div><div class="ttdoc">High-precision signed integer 4x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00044">matrix_integer.hpp:44</a></div></div>
+<div class="ttc" id="a00167_html_gad4fea24b4100e21ed7742c91e5458d49"><div class="ttname"><a href="a00167.html#gad4fea24b4100e21ed7742c91e5458d49">glm::highp_imat3x4</a></div><div class="ttdeci">tmat3x4< int, highp > highp_imat3x4</div><div class="ttdoc">High-precision signed integer 3x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00068">matrix_integer.hpp:68</a></div></div>
+<div class="ttc" id="a00167_html_gab1d8e627b6a0b21c9b5e599a89132d8f"><div class="ttname"><a href="a00167.html#gab1d8e627b6a0b21c9b5e599a89132d8f">glm::highp_umat3x2</a></div><div class="ttdeci">tmat3x2< uint, highp > highp_umat3x2</div><div class="ttdoc">High-precision unsigned integer 3x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00209">matrix_integer.hpp:209</a></div></div>
+<div class="ttc" id="a00167_html_ga0c66b9b7c10a6017a58a03489c8d4c73"><div class="ttname"><a href="a00167.html#ga0c66b9b7c10a6017a58a03489c8d4c73">glm::highp_imat4x3</a></div><div class="ttdeci">tmat4x3< int, highp > highp_imat4x3</div><div class="ttdoc">High-precision signed integer 4x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00076">matrix_integer.hpp:76</a></div></div>
+<div class="ttc" id="a00167_html_ga899a376888652fe3c03718641812bb27"><div class="ttname"><a href="a00167.html#ga899a376888652fe3c03718641812bb27">glm::highp_umat4x3</a></div><div class="ttdeci">tmat4x3< uint, highp > highp_umat4x3</div><div class="ttdoc">High-precision unsigned integer 4x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00225">matrix_integer.hpp:225</a></div></div>
+<div class="ttc" id="a00167_html_gaaba8a59eac3e5c0b3aaa9b35c1f10292"><div class="ttname"><a href="a00167.html#gaaba8a59eac3e5c0b3aaa9b35c1f10292">glm::highp_umat4x2</a></div><div class="ttdeci">tmat4x2< uint, highp > highp_umat4x2</div><div class="ttdoc">High-precision unsigned integer 4x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00064_source.html#l00221">matrix_integer.hpp:221</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00065.html b/src/third_party/glm/doc/api/a00065.html
new file mode 100644
index 0000000..fbdb180
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00065.html
@@ -0,0 +1,86 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: matrix_interpolation.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">matrix_interpolation.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00065_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga9aef292eb5f29bdbb58a53ef4281af92"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga9aef292eb5f29bdbb58a53ef4281af92"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00205.html#ga9aef292eb5f29bdbb58a53ef4281af92">axisAngle</a> (tmat4x4< T, P > const &mat, tvec3< T, P > &axis, T &angle)</td></tr>
+<tr class="separator:ga9aef292eb5f29bdbb58a53ef4281af92"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga82d4bc058e9628cb2ea1d4e117a0cf39"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga82d4bc058e9628cb2ea1d4e117a0cf39"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00205.html#ga82d4bc058e9628cb2ea1d4e117a0cf39">axisAngleMatrix</a> (tvec3< T, P > const &axis, T const angle)</td></tr>
+<tr class="separator:ga82d4bc058e9628cb2ea1d4e117a0cf39"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6b8170aa4cf43caf81400696ebb38afe"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga6b8170aa4cf43caf81400696ebb38afe"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00205.html#ga6b8170aa4cf43caf81400696ebb38afe">extractMatrixRotation</a> (tmat4x4< T, P > const &mat)</td></tr>
+<tr class="separator:ga6b8170aa4cf43caf81400696ebb38afe"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga45099a92c5c704503565619ac2bcd5c6"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga45099a92c5c704503565619ac2bcd5c6"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00205.html#ga45099a92c5c704503565619ac2bcd5c6">interpolate</a> (tmat4x4< T, P > const &m1, tmat4x4< T, P > const &m2, T const delta)</td></tr>
+<tr class="separator:ga45099a92c5c704503565619ac2bcd5c6"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00205.html">GLM_GTX_matrix_interpolation</a> </p>
+<dl class="section author"><dt>Author</dt><dd>Ghenadii Ursachi (<a href="#" onclick="location.href='mai'+'lto:'+'the'+'.a'+'ste'+'ro'+'th@'+'gm'+'ail'+'.c'+'om'; return false;">the.a<span style="display: none;">.nosp@m.</span>ster<span style="display: none;">.nosp@m.</span>oth@g<span style="display: none;">.nosp@m.</span>mail<span style="display: none;">.nosp@m.</span>.com</a>)</dd></dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00065_source.html">matrix_interpolation.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00065_source.html b/src/third_party/glm/doc/api/a00065_source.html
new file mode 100644
index 0000000..00f3069
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00065_source.html
@@ -0,0 +1,104 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: matrix_interpolation.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">matrix_interpolation.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00065.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "../glm.hpp"</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_matrix_interpolation extension included")</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> {</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  GLM_FUNC_DECL <span class="keywordtype">void</span> <a class="code" href="a00205.html#ga9aef292eb5f29bdbb58a53ef4281af92">axisAngle</a>(</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  tmat4x4<T, P> <span class="keyword">const</span> & mat,</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  tvec3<T, P> & <a class="code" href="a00172.html#ga0b3e87a13b2708154b72259e50789a19">axis</a>,</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  T & <a class="code" href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">angle</a>);</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  GLM_FUNC_DECL tmat4x4<T, P> <a class="code" href="a00205.html#ga82d4bc058e9628cb2ea1d4e117a0cf39">axisAngleMatrix</a>(</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  tvec3<T, P> <span class="keyword">const</span> & <a class="code" href="a00172.html#ga0b3e87a13b2708154b72259e50789a19">axis</a>,</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  T <span class="keyword">const</span> <a class="code" href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">angle</a>);</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  GLM_FUNC_DECL tmat4x4<T, P> <a class="code" href="a00205.html#ga6b8170aa4cf43caf81400696ebb38afe">extractMatrixRotation</a>(</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  tmat4x4<T, P> <span class="keyword">const</span> & mat);</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  GLM_FUNC_DECL tmat4x4<T, P> <a class="code" href="a00205.html#ga45099a92c5c704503565619ac2bcd5c6">interpolate</a>(</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  tmat4x4<T, P> <span class="keyword">const</span> & m1,</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  tmat4x4<T, P> <span class="keyword">const</span> & m2,</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  T <span class="keyword">const</span> delta);</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="preprocessor">#include "matrix_interpolation.inl"</span></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00172_html_ga0b3e87a13b2708154b72259e50789a19"><div class="ttname"><a href="a00172.html#ga0b3e87a13b2708154b72259e50789a19">glm::axis</a></div><div class="ttdeci">GLM_FUNC_DECL tvec3< T, P > axis(tquat< T, P > const &x)</div><div class="ttdoc">Returns the q rotation axis. </div></div>
+<div class="ttc" id="a00205_html_ga82d4bc058e9628cb2ea1d4e117a0cf39"><div class="ttname"><a href="a00205.html#ga82d4bc058e9628cb2ea1d4e117a0cf39">glm::axisAngleMatrix</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, P > axisAngleMatrix(tvec3< T, P > const &axis, T const angle)</div><div class="ttdoc">Build a matrix from axis and angle. </div></div>
+<div class="ttc" id="a00205_html_ga9aef292eb5f29bdbb58a53ef4281af92"><div class="ttname"><a href="a00205.html#ga9aef292eb5f29bdbb58a53ef4281af92">glm::axisAngle</a></div><div class="ttdeci">GLM_FUNC_DECL void axisAngle(tmat4x4< T, P > const &mat, tvec3< T, P > &axis, T &angle)</div><div class="ttdoc">Get the axis and angle of the rotation from a matrix. </div></div>
+<div class="ttc" id="a00172_html_gad4a4448baedb198b2b1e7880d2544dc9"><div class="ttname"><a href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">glm::angle</a></div><div class="ttdeci">GLM_FUNC_DECL T angle(tquat< T, P > const &x)</div><div class="ttdoc">Returns the quaternion rotation angle. </div></div>
+<div class="ttc" id="a00205_html_ga6b8170aa4cf43caf81400696ebb38afe"><div class="ttname"><a href="a00205.html#ga6b8170aa4cf43caf81400696ebb38afe">glm::extractMatrixRotation</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, P > extractMatrixRotation(tmat4x4< T, P > const &mat)</div><div class="ttdoc">Extracts the rotation part of a matrix. </div></div>
+<div class="ttc" id="a00205_html_ga45099a92c5c704503565619ac2bcd5c6"><div class="ttname"><a href="a00205.html#ga45099a92c5c704503565619ac2bcd5c6">glm::interpolate</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, P > interpolate(tmat4x4< T, P > const &m1, tmat4x4< T, P > const &m2, T const delta)</div><div class="ttdoc">Build a interpolation of 4 * 4 matrixes. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00066.html b/src/third_party/glm/doc/api/a00066.html
new file mode 100644
index 0000000..93a36b5
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00066.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: matrix_inverse.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_9440d7c11b99dcd7e5d369c7cf9802fe.html">gtc</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">matrix_inverse.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00066_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gae0fcc5fc8783291f9702272de428fa0e"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gae0fcc5fc8783291f9702272de428fa0e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00168.html#gae0fcc5fc8783291f9702272de428fa0e">affineInverse</a> (genType const &m)</td></tr>
+<tr class="separator:gae0fcc5fc8783291f9702272de428fa0e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab213cd0e3ead5f316d583f99d6312008"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gab213cd0e3ead5f316d583f99d6312008"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00168.html#gab213cd0e3ead5f316d583f99d6312008">inverseTranspose</a> (genType const &m)</td></tr>
+<tr class="separator:gab213cd0e3ead5f316d583f99d6312008"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00168.html">GLM_GTC_matrix_inverse</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00066_source.html">matrix_inverse.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00066_source.html b/src/third_party/glm/doc/api/a00066_source.html
new file mode 100644
index 0000000..f140a9a
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00066_source.html
@@ -0,0 +1,89 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: matrix_inverse.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_9440d7c11b99dcd7e5d369c7cf9802fe.html">gtc</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">matrix_inverse.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00066.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> </div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">// Dependencies</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#include "../detail/setup.hpp"</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include "../matrix.hpp"</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "../mat2x2.hpp"</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "../mat3x3.hpp"</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include "../mat4x4.hpp"</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"># pragma message("GLM: GLM_GTC_matrix_inverse extension included")</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> {</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType> </div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  GLM_FUNC_DECL genType <a class="code" href="a00168.html#gae0fcc5fc8783291f9702272de428fa0e">affineInverse</a>(genType <span class="keyword">const</span> & m);</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  GLM_FUNC_DECL genType <a class="code" href="a00168.html#gab213cd0e3ead5f316d583f99d6312008">inverseTranspose</a>(genType <span class="keyword">const</span> & m);</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="preprocessor">#include "matrix_inverse.inl"</span></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00168_html_gab213cd0e3ead5f316d583f99d6312008"><div class="ttname"><a href="a00168.html#gab213cd0e3ead5f316d583f99d6312008">glm::inverseTranspose</a></div><div class="ttdeci">GLM_FUNC_DECL genType inverseTranspose(genType const &m)</div><div class="ttdoc">Compute the inverse transpose of a matrix. </div></div>
+<div class="ttc" id="a00168_html_gae0fcc5fc8783291f9702272de428fa0e"><div class="ttname"><a href="a00168.html#gae0fcc5fc8783291f9702272de428fa0e">glm::affineInverse</a></div><div class="ttdeci">GLM_FUNC_DECL genType affineInverse(genType const &m)</div><div class="ttdoc">Fast matrix inverse for affine matrix. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00067.html b/src/third_party/glm/doc/api/a00067.html
new file mode 100644
index 0000000..fe62080
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00067.html
@@ -0,0 +1,111 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: matrix_major_storage.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">matrix_major_storage.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00067_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga599fff4f1c65912b256a82138ebcca37"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga599fff4f1c65912b256a82138ebcca37"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat2x2< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00206.html#ga599fff4f1c65912b256a82138ebcca37">colMajor2</a> (tvec2< T, P > const &v1, tvec2< T, P > const &v2)</td></tr>
+<tr class="separator:ga599fff4f1c65912b256a82138ebcca37"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5cfd25de9d5b4c6a825085f38ddfeff7"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga5cfd25de9d5b4c6a825085f38ddfeff7"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat2x2< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00206.html#ga5cfd25de9d5b4c6a825085f38ddfeff7">colMajor2</a> (tmat2x2< T, P > const &m)</td></tr>
+<tr class="separator:ga5cfd25de9d5b4c6a825085f38ddfeff7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3a55e2948193e91733e434e7cc3c1540"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga3a55e2948193e91733e434e7cc3c1540"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat3x3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00206.html#ga3a55e2948193e91733e434e7cc3c1540">colMajor3</a> (tvec3< T, P > const &v1, tvec3< T, P > const &v2, tvec3< T, P > const &v3)</td></tr>
+<tr class="separator:ga3a55e2948193e91733e434e7cc3c1540"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa93f3dcc47ced18e5db4a853363d9386"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gaa93f3dcc47ced18e5db4a853363d9386"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat3x3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00206.html#gaa93f3dcc47ced18e5db4a853363d9386">colMajor3</a> (tmat3x3< T, P > const &m)</td></tr>
+<tr class="separator:gaa93f3dcc47ced18e5db4a853363d9386"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2829de096bb67ab5cd670958f3d402b6"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga2829de096bb67ab5cd670958f3d402b6"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00206.html#ga2829de096bb67ab5cd670958f3d402b6">colMajor4</a> (tvec4< T, P > const &v1, tvec4< T, P > const &v2, tvec4< T, P > const &v3, tvec4< T, P > const &v4)</td></tr>
+<tr class="separator:ga2829de096bb67ab5cd670958f3d402b6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7592acfd27da055e2d7c39564cf8803d"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga7592acfd27da055e2d7c39564cf8803d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00206.html#ga7592acfd27da055e2d7c39564cf8803d">colMajor4</a> (tmat4x4< T, P > const &m)</td></tr>
+<tr class="separator:ga7592acfd27da055e2d7c39564cf8803d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0c7f4d56a85865f0002127119ab7d551"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga0c7f4d56a85865f0002127119ab7d551"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat2x2< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00206.html#ga0c7f4d56a85865f0002127119ab7d551">rowMajor2</a> (tvec2< T, P > const &v1, tvec2< T, P > const &v2)</td></tr>
+<tr class="separator:ga0c7f4d56a85865f0002127119ab7d551"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga42a006aa66198452bd3c89415f892196"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga42a006aa66198452bd3c89415f892196"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat2x2< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00206.html#ga42a006aa66198452bd3c89415f892196">rowMajor2</a> (tmat2x2< T, P > const &m)</td></tr>
+<tr class="separator:ga42a006aa66198452bd3c89415f892196"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaba4de9afc4e65ec8ea0403e7cba3fb9f"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gaba4de9afc4e65ec8ea0403e7cba3fb9f"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat3x3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00206.html#gaba4de9afc4e65ec8ea0403e7cba3fb9f">rowMajor3</a> (tvec3< T, P > const &v1, tvec3< T, P > const &v2, tvec3< T, P > const &v3)</td></tr>
+<tr class="separator:gaba4de9afc4e65ec8ea0403e7cba3fb9f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga38537061135b55e7a053926ca55e6e20"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga38537061135b55e7a053926ca55e6e20"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat3x3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00206.html#ga38537061135b55e7a053926ca55e6e20">rowMajor3</a> (tmat3x3< T, P > const &m)</td></tr>
+<tr class="separator:ga38537061135b55e7a053926ca55e6e20"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3ce8f2a78fb2f15bf28151ee128b0ae8"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga3ce8f2a78fb2f15bf28151ee128b0ae8"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00206.html#ga3ce8f2a78fb2f15bf28151ee128b0ae8">rowMajor4</a> (tvec4< T, P > const &v1, tvec4< T, P > const &v2, tvec4< T, P > const &v3, tvec4< T, P > const &v4)</td></tr>
+<tr class="separator:ga3ce8f2a78fb2f15bf28151ee128b0ae8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga85771a88c114a088a0414bcfce55e729"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga85771a88c114a088a0414bcfce55e729"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00206.html#ga85771a88c114a088a0414bcfce55e729">rowMajor4</a> (tmat4x4< T, P > const &m)</td></tr>
+<tr class="separator:ga85771a88c114a088a0414bcfce55e729"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00206.html">GLM_GTX_matrix_major_storage</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd>
+<dd>
+<a class="el" href="a00192.html" title="Min and max functions for 3 to 4 parameters. ">GLM_GTX_extented_min_max</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00067_source.html">matrix_major_storage.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00067_source.html b/src/third_party/glm/doc/api/a00067_source.html
new file mode 100644
index 0000000..cf16e86
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00067_source.html
@@ -0,0 +1,143 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: matrix_major_storage.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">matrix_major_storage.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00067.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "../glm.hpp"</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_matrix_major_storage extension included")</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> {</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  GLM_FUNC_DECL tmat2x2<T, P> <a class="code" href="a00206.html#ga42a006aa66198452bd3c89415f892196">rowMajor2</a>(</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  tvec2<T, P> <span class="keyword">const</span> & v1, </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  tvec2<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  </div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  GLM_FUNC_DECL tmat2x2<T, P> <a class="code" href="a00206.html#ga42a006aa66198452bd3c89415f892196">rowMajor2</a>(</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  tmat2x2<T, P> <span class="keyword">const</span> & m);</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  GLM_FUNC_DECL tmat3x3<T, P> <a class="code" href="a00206.html#ga38537061135b55e7a053926ca55e6e20">rowMajor3</a>(</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  tvec3<T, P> <span class="keyword">const</span> & v1, </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  tvec3<T, P> <span class="keyword">const</span> & v2, </div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  tvec3<T, P> <span class="keyword">const</span> & v3);</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  GLM_FUNC_DECL tmat3x3<T, P> <a class="code" href="a00206.html#ga38537061135b55e7a053926ca55e6e20">rowMajor3</a>(</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  tmat3x3<T, P> <span class="keyword">const</span> & m);</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  GLM_FUNC_DECL tmat4x4<T, P> <a class="code" href="a00206.html#ga85771a88c114a088a0414bcfce55e729">rowMajor4</a>(</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  tvec4<T, P> <span class="keyword">const</span> & v1, </div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  tvec4<T, P> <span class="keyword">const</span> & v2,</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  tvec4<T, P> <span class="keyword">const</span> & v3, </div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  tvec4<T, P> <span class="keyword">const</span> & v4);</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  GLM_FUNC_DECL tmat4x4<T, P> <a class="code" href="a00206.html#ga85771a88c114a088a0414bcfce55e729">rowMajor4</a>(</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  tmat4x4<T, P> <span class="keyword">const</span> & m);</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  GLM_FUNC_DECL tmat2x2<T, P> <a class="code" href="a00206.html#ga5cfd25de9d5b4c6a825085f38ddfeff7">colMajor2</a>(</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  tvec2<T, P> <span class="keyword">const</span> & v1, </div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  tvec2<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  </div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  GLM_FUNC_DECL tmat2x2<T, P> <a class="code" href="a00206.html#ga5cfd25de9d5b4c6a825085f38ddfeff7">colMajor2</a>(</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  tmat2x2<T, P> <span class="keyword">const</span> & m);</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  GLM_FUNC_DECL tmat3x3<T, P> <a class="code" href="a00206.html#gaa93f3dcc47ced18e5db4a853363d9386">colMajor3</a>(</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  tvec3<T, P> <span class="keyword">const</span> & v1, </div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  tvec3<T, P> <span class="keyword">const</span> & v2, </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  tvec3<T, P> <span class="keyword">const</span> & v3);</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  </div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  GLM_FUNC_DECL tmat3x3<T, P> <a class="code" href="a00206.html#gaa93f3dcc47ced18e5db4a853363d9386">colMajor3</a>(</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  tmat3x3<T, P> <span class="keyword">const</span> & m);</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  </div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  GLM_FUNC_DECL tmat4x4<T, P> <a class="code" href="a00206.html#ga7592acfd27da055e2d7c39564cf8803d">colMajor4</a>(</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  tvec4<T, P> <span class="keyword">const</span> & v1, </div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  tvec4<T, P> <span class="keyword">const</span> & v2, </div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  tvec4<T, P> <span class="keyword">const</span> & v3, </div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  tvec4<T, P> <span class="keyword">const</span> & v4);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  </div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> </div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  GLM_FUNC_DECL tmat4x4<T, P> <a class="code" href="a00206.html#ga7592acfd27da055e2d7c39564cf8803d">colMajor4</a>(</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  tmat4x4<T, P> <span class="keyword">const</span> & m);</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="preprocessor">#include "matrix_major_storage.inl"</span></div>
+<div class="ttc" id="a00206_html_ga7592acfd27da055e2d7c39564cf8803d"><div class="ttname"><a href="a00206.html#ga7592acfd27da055e2d7c39564cf8803d">glm::colMajor4</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, P > colMajor4(tmat4x4< T, P > const &m)</div><div class="ttdoc">Build a column major matrix from other matrix. </div></div>
+<div class="ttc" id="a00206_html_ga42a006aa66198452bd3c89415f892196"><div class="ttname"><a href="a00206.html#ga42a006aa66198452bd3c89415f892196">glm::rowMajor2</a></div><div class="ttdeci">GLM_FUNC_DECL tmat2x2< T, P > rowMajor2(tmat2x2< T, P > const &m)</div><div class="ttdoc">Build a row major matrix from other matrix. </div></div>
+<div class="ttc" id="a00206_html_ga38537061135b55e7a053926ca55e6e20"><div class="ttname"><a href="a00206.html#ga38537061135b55e7a053926ca55e6e20">glm::rowMajor3</a></div><div class="ttdeci">GLM_FUNC_DECL tmat3x3< T, P > rowMajor3(tmat3x3< T, P > const &m)</div><div class="ttdoc">Build a row major matrix from other matrix. </div></div>
+<div class="ttc" id="a00206_html_ga5cfd25de9d5b4c6a825085f38ddfeff7"><div class="ttname"><a href="a00206.html#ga5cfd25de9d5b4c6a825085f38ddfeff7">glm::colMajor2</a></div><div class="ttdeci">GLM_FUNC_DECL tmat2x2< T, P > colMajor2(tmat2x2< T, P > const &m)</div><div class="ttdoc">Build a column major matrix from other matrix. </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00206_html_gaa93f3dcc47ced18e5db4a853363d9386"><div class="ttname"><a href="a00206.html#gaa93f3dcc47ced18e5db4a853363d9386">glm::colMajor3</a></div><div class="ttdeci">GLM_FUNC_DECL tmat3x3< T, P > colMajor3(tmat3x3< T, P > const &m)</div><div class="ttdoc">Build a column major matrix from other matrix. </div></div>
+<div class="ttc" id="a00206_html_ga85771a88c114a088a0414bcfce55e729"><div class="ttname"><a href="a00206.html#ga85771a88c114a088a0414bcfce55e729">glm::rowMajor4</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, P > rowMajor4(tmat4x4< T, P > const &m)</div><div class="ttdoc">Build a row major matrix from other matrix. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00068.html b/src/third_party/glm/doc/api/a00068.html
new file mode 100644
index 0000000..db84d16
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00068.html
@@ -0,0 +1,100 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: matrix_operation.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">matrix_operation.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00068_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga01dc503262dba9c457113d131fc8c024"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga01dc503262dba9c457113d131fc8c024"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat2x2< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00207.html#ga01dc503262dba9c457113d131fc8c024">diagonal2x2</a> (tvec2< T, P > const &v)</td></tr>
+<tr class="separator:ga01dc503262dba9c457113d131fc8c024"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga763817f07d6a94b722a48adfa87a35db"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga763817f07d6a94b722a48adfa87a35db"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat2x3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00207.html#ga763817f07d6a94b722a48adfa87a35db">diagonal2x3</a> (tvec2< T, P > const &v)</td></tr>
+<tr class="separator:ga763817f07d6a94b722a48adfa87a35db"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga49b37c819cf6dd8e35112ed1a13d45a3"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga49b37c819cf6dd8e35112ed1a13d45a3"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat2x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00207.html#ga49b37c819cf6dd8e35112ed1a13d45a3">diagonal2x4</a> (tvec2< T, P > const &v)</td></tr>
+<tr class="separator:ga49b37c819cf6dd8e35112ed1a13d45a3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga586e1ced91fd8a7c414186a200f13532"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga586e1ced91fd8a7c414186a200f13532"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat3x2< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00207.html#ga586e1ced91fd8a7c414186a200f13532">diagonal3x2</a> (tvec2< T, P > const &v)</td></tr>
+<tr class="separator:ga586e1ced91fd8a7c414186a200f13532"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8e817dba22f2305cdebae07bbbe0360c"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga8e817dba22f2305cdebae07bbbe0360c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat3x3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00207.html#ga8e817dba22f2305cdebae07bbbe0360c">diagonal3x3</a> (tvec3< T, P > const &v)</td></tr>
+<tr class="separator:ga8e817dba22f2305cdebae07bbbe0360c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae3f85af86c18c80f2acbe3223feb8e81"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gae3f85af86c18c80f2acbe3223feb8e81"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat3x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00207.html#gae3f85af86c18c80f2acbe3223feb8e81">diagonal3x4</a> (tvec3< T, P > const &v)</td></tr>
+<tr class="separator:gae3f85af86c18c80f2acbe3223feb8e81"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga70cc5632aa9f41e7cf0b81fee6f2bfe6"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga70cc5632aa9f41e7cf0b81fee6f2bfe6"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x2< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00207.html#ga70cc5632aa9f41e7cf0b81fee6f2bfe6">diagonal4x2</a> (tvec2< T, P > const &v)</td></tr>
+<tr class="separator:ga70cc5632aa9f41e7cf0b81fee6f2bfe6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4242ea5681f81539e0c5b54fadcd9ddf"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga4242ea5681f81539e0c5b54fadcd9ddf"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00207.html#ga4242ea5681f81539e0c5b54fadcd9ddf">diagonal4x3</a> (tvec3< T, P > const &v)</td></tr>
+<tr class="separator:ga4242ea5681f81539e0c5b54fadcd9ddf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gade576e044d8e52f343166f665589d782"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gade576e044d8e52f343166f665589d782"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00207.html#gade576e044d8e52f343166f665589d782">diagonal4x4</a> (tvec4< T, P > const &v)</td></tr>
+<tr class="separator:gade576e044d8e52f343166f665589d782"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00207.html">GLM_GTX_matrix_operation</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00068_source.html">matrix_operation.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00068_source.html b/src/third_party/glm/doc/api/a00068_source.html
new file mode 100644
index 0000000..f36fde1
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00068_source.html
@@ -0,0 +1,122 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: matrix_operation.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">matrix_operation.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00068.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include "../glm.hpp"</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_matrix_operation extension included")</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> {</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  GLM_FUNC_DECL tmat2x2<T, P> <a class="code" href="a00207.html#ga01dc503262dba9c457113d131fc8c024">diagonal2x2</a>(</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  tvec2<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  GLM_FUNC_DECL tmat2x3<T, P> <a class="code" href="a00207.html#ga763817f07d6a94b722a48adfa87a35db">diagonal2x3</a>(</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  tvec2<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  GLM_FUNC_DECL tmat2x4<T, P> <a class="code" href="a00207.html#ga49b37c819cf6dd8e35112ed1a13d45a3">diagonal2x4</a>(</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  tvec2<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  GLM_FUNC_DECL tmat3x2<T, P> <a class="code" href="a00207.html#ga586e1ced91fd8a7c414186a200f13532">diagonal3x2</a>(</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  tvec2<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  GLM_FUNC_DECL tmat3x3<T, P> <a class="code" href="a00207.html#ga8e817dba22f2305cdebae07bbbe0360c">diagonal3x3</a>(</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  tvec3<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  GLM_FUNC_DECL tmat3x4<T, P> <a class="code" href="a00207.html#gae3f85af86c18c80f2acbe3223feb8e81">diagonal3x4</a>(</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  tvec3<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  GLM_FUNC_DECL tmat4x2<T, P> <a class="code" href="a00207.html#ga70cc5632aa9f41e7cf0b81fee6f2bfe6">diagonal4x2</a>(</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  tvec2<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  GLM_FUNC_DECL tmat4x3<T, P> <a class="code" href="a00207.html#ga4242ea5681f81539e0c5b54fadcd9ddf">diagonal4x3</a>(</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  tvec3<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  GLM_FUNC_DECL tmat4x4<T, P> <a class="code" href="a00207.html#gade576e044d8e52f343166f665589d782">diagonal4x4</a>(</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  tvec4<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="preprocessor">#include "matrix_operation.inl"</span></div>
+<div class="ttc" id="a00207_html_gade576e044d8e52f343166f665589d782"><div class="ttname"><a href="a00207.html#gade576e044d8e52f343166f665589d782">glm::diagonal4x4</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, P > diagonal4x4(tvec4< T, P > const &v)</div><div class="ttdoc">Build a diagonal matrix. </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00207_html_ga49b37c819cf6dd8e35112ed1a13d45a3"><div class="ttname"><a href="a00207.html#ga49b37c819cf6dd8e35112ed1a13d45a3">glm::diagonal2x4</a></div><div class="ttdeci">GLM_FUNC_DECL tmat2x4< T, P > diagonal2x4(tvec2< T, P > const &v)</div><div class="ttdoc">Build a diagonal matrix. </div></div>
+<div class="ttc" id="a00207_html_ga8e817dba22f2305cdebae07bbbe0360c"><div class="ttname"><a href="a00207.html#ga8e817dba22f2305cdebae07bbbe0360c">glm::diagonal3x3</a></div><div class="ttdeci">GLM_FUNC_DECL tmat3x3< T, P > diagonal3x3(tvec3< T, P > const &v)</div><div class="ttdoc">Build a diagonal matrix. </div></div>
+<div class="ttc" id="a00207_html_ga70cc5632aa9f41e7cf0b81fee6f2bfe6"><div class="ttname"><a href="a00207.html#ga70cc5632aa9f41e7cf0b81fee6f2bfe6">glm::diagonal4x2</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x2< T, P > diagonal4x2(tvec2< T, P > const &v)</div><div class="ttdoc">Build a diagonal matrix. </div></div>
+<div class="ttc" id="a00207_html_ga763817f07d6a94b722a48adfa87a35db"><div class="ttname"><a href="a00207.html#ga763817f07d6a94b722a48adfa87a35db">glm::diagonal2x3</a></div><div class="ttdeci">GLM_FUNC_DECL tmat2x3< T, P > diagonal2x3(tvec2< T, P > const &v)</div><div class="ttdoc">Build a diagonal matrix. </div></div>
+<div class="ttc" id="a00207_html_ga01dc503262dba9c457113d131fc8c024"><div class="ttname"><a href="a00207.html#ga01dc503262dba9c457113d131fc8c024">glm::diagonal2x2</a></div><div class="ttdeci">GLM_FUNC_DECL tmat2x2< T, P > diagonal2x2(tvec2< T, P > const &v)</div><div class="ttdoc">Build a diagonal matrix. </div></div>
+<div class="ttc" id="a00207_html_ga586e1ced91fd8a7c414186a200f13532"><div class="ttname"><a href="a00207.html#ga586e1ced91fd8a7c414186a200f13532">glm::diagonal3x2</a></div><div class="ttdeci">GLM_FUNC_DECL tmat3x2< T, P > diagonal3x2(tvec2< T, P > const &v)</div><div class="ttdoc">Build a diagonal matrix. </div></div>
+<div class="ttc" id="a00207_html_gae3f85af86c18c80f2acbe3223feb8e81"><div class="ttname"><a href="a00207.html#gae3f85af86c18c80f2acbe3223feb8e81">glm::diagonal3x4</a></div><div class="ttdeci">GLM_FUNC_DECL tmat3x4< T, P > diagonal3x4(tvec3< T, P > const &v)</div><div class="ttdoc">Build a diagonal matrix. </div></div>
+<div class="ttc" id="a00207_html_ga4242ea5681f81539e0c5b54fadcd9ddf"><div class="ttname"><a href="a00207.html#ga4242ea5681f81539e0c5b54fadcd9ddf">glm::diagonal4x3</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x3< T, P > diagonal4x3(tvec3< T, P > const &v)</div><div class="ttdoc">Build a diagonal matrix. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00069.html b/src/third_party/glm/doc/api/a00069.html
new file mode 100644
index 0000000..80ac133
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00069.html
@@ -0,0 +1,99 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: matrix_query.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">matrix_query.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00069_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gafc1ce12c738b8c5d007179e615609330"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class matType> </td></tr>
+<tr class="memitem:gafc1ce12c738b8c5d007179e615609330"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00208.html#gafc1ce12c738b8c5d007179e615609330">isIdentity</a> (matType< T, P > const &m, T const &epsilon)</td></tr>
+<tr class="separator:gafc1ce12c738b8c5d007179e615609330"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga11a8d5cdb36496b85f61e4f5f7f2602c"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga11a8d5cdb36496b85f61e4f5f7f2602c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00208.html#ga11a8d5cdb36496b85f61e4f5f7f2602c">isNormalized</a> (tmat2x2< T, P > const &m, T const &epsilon)</td></tr>
+<tr class="separator:ga11a8d5cdb36496b85f61e4f5f7f2602c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga351bcc8d485d329b78cfa875e084964d"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga351bcc8d485d329b78cfa875e084964d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00208.html#ga351bcc8d485d329b78cfa875e084964d">isNormalized</a> (tmat3x3< T, P > const &m, T const &epsilon)</td></tr>
+<tr class="separator:ga351bcc8d485d329b78cfa875e084964d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga934b673ec0e16d79eca0ca9dbb5d6d8b"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga934b673ec0e16d79eca0ca9dbb5d6d8b"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00208.html#ga934b673ec0e16d79eca0ca9dbb5d6d8b">isNormalized</a> (tmat4x4< T, P > const &m, T const &epsilon)</td></tr>
+<tr class="separator:ga934b673ec0e16d79eca0ca9dbb5d6d8b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga37e535cbeaea383b8c1247b98875cd4b"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga37e535cbeaea383b8c1247b98875cd4b"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00208.html#ga37e535cbeaea383b8c1247b98875cd4b">isNull</a> (tmat2x2< T, P > const &m, T const &epsilon)</td></tr>
+<tr class="separator:ga37e535cbeaea383b8c1247b98875cd4b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac67a5c7e029a84b74b02ac9599b8972d"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gac67a5c7e029a84b74b02ac9599b8972d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00208.html#gac67a5c7e029a84b74b02ac9599b8972d">isNull</a> (tmat3x3< T, P > const &m, T const &epsilon)</td></tr>
+<tr class="separator:gac67a5c7e029a84b74b02ac9599b8972d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga326de496972051413c7b44b85fc9cb6e"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga326de496972051413c7b44b85fc9cb6e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00208.html#ga326de496972051413c7b44b85fc9cb6e">isNull</a> (tmat4x4< T, P > const &m, T const &epsilon)</td></tr>
+<tr class="separator:ga326de496972051413c7b44b85fc9cb6e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab2cb5d23df77b4e4e63ad2965acd31b3"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class matType> </td></tr>
+<tr class="memitem:gab2cb5d23df77b4e4e63ad2965acd31b3"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00208.html#gab2cb5d23df77b4e4e63ad2965acd31b3">isOrthogonal</a> (matType< T, P > const &m, T const &epsilon)</td></tr>
+<tr class="separator:gab2cb5d23df77b4e4e63ad2965acd31b3"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00208.html">GLM_GTX_matrix_query</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd>
+<dd>
+<a class="el" href="a00237.html" title="Query informations of vector types. ">GLM_GTX_vector_query</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00069_source.html">matrix_query.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00069_source.html b/src/third_party/glm/doc/api/a00069_source.html
new file mode 100644
index 0000000..d5c4262
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00069_source.html
@@ -0,0 +1,108 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: matrix_query.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">matrix_query.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00069.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "../glm.hpp"</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "../gtx/vector_query.hpp"</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include <limits></span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_matrix_query extension included")</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> {</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> <a class="code" href="a00208.html#ga326de496972051413c7b44b85fc9cb6e">isNull</a>(tmat2x2<T, P> <span class="keyword">const</span> & m, T <span class="keyword">const</span> & <a class="code" href="a00162.html#ga2a1e57fc5592b69cfae84174cbfc9429">epsilon</a>);</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  </div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> <a class="code" href="a00208.html#ga326de496972051413c7b44b85fc9cb6e">isNull</a>(tmat3x3<T, P> <span class="keyword">const</span> & m, T <span class="keyword">const</span> & <a class="code" href="a00162.html#ga2a1e57fc5592b69cfae84174cbfc9429">epsilon</a>);</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  </div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> <a class="code" href="a00208.html#ga326de496972051413c7b44b85fc9cb6e">isNull</a>(tmat4x4<T, P> <span class="keyword">const</span> & m, T <span class="keyword">const</span> & <a class="code" href="a00162.html#ga2a1e57fc5592b69cfae84174cbfc9429">epsilon</a>);</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  </div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>matType></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> <a class="code" href="a00208.html#gafc1ce12c738b8c5d007179e615609330">isIdentity</a>(matType<T, P> <span class="keyword">const</span> & m, T <span class="keyword">const</span> & <a class="code" href="a00162.html#ga2a1e57fc5592b69cfae84174cbfc9429">epsilon</a>);</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> <a class="code" href="a00208.html#ga934b673ec0e16d79eca0ca9dbb5d6d8b">isNormalized</a>(tmat2x2<T, P> <span class="keyword">const</span> & m, T <span class="keyword">const</span> & <a class="code" href="a00162.html#ga2a1e57fc5592b69cfae84174cbfc9429">epsilon</a>);</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> <a class="code" href="a00208.html#ga934b673ec0e16d79eca0ca9dbb5d6d8b">isNormalized</a>(tmat3x3<T, P> <span class="keyword">const</span> & m, T <span class="keyword">const</span> & <a class="code" href="a00162.html#ga2a1e57fc5592b69cfae84174cbfc9429">epsilon</a>);</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> <a class="code" href="a00208.html#ga934b673ec0e16d79eca0ca9dbb5d6d8b">isNormalized</a>(tmat4x4<T, P> <span class="keyword">const</span> & m, T <span class="keyword">const</span> & <a class="code" href="a00162.html#ga2a1e57fc5592b69cfae84174cbfc9429">epsilon</a>);</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>matType></div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> <a class="code" href="a00208.html#gab2cb5d23df77b4e4e63ad2965acd31b3">isOrthogonal</a>(matType<T, P> <span class="keyword">const</span> & m, T <span class="keyword">const</span> & <a class="code" href="a00162.html#ga2a1e57fc5592b69cfae84174cbfc9429">epsilon</a>);</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="preprocessor">#include "matrix_query.inl"</span></div>
+<div class="ttc" id="a00162_html_ga2a1e57fc5592b69cfae84174cbfc9429"><div class="ttname"><a href="a00162.html#ga2a1e57fc5592b69cfae84174cbfc9429">glm::epsilon</a></div><div class="ttdeci">GLM_FUNC_DECL GLM_CONSTEXPR genType epsilon()</div><div class="ttdoc">Return the epsilon constant for floating point types. </div></div>
+<div class="ttc" id="a00208_html_ga326de496972051413c7b44b85fc9cb6e"><div class="ttname"><a href="a00208.html#ga326de496972051413c7b44b85fc9cb6e">glm::isNull</a></div><div class="ttdeci">GLM_FUNC_DECL bool isNull(tmat4x4< T, P > const &m, T const &epsilon)</div><div class="ttdoc">Return whether a matrix is a null matrix. </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00208_html_gafc1ce12c738b8c5d007179e615609330"><div class="ttname"><a href="a00208.html#gafc1ce12c738b8c5d007179e615609330">glm::isIdentity</a></div><div class="ttdeci">GLM_FUNC_DECL bool isIdentity(matType< T, P > const &m, T const &epsilon)</div><div class="ttdoc">Return whether a matrix is an identity matrix. </div></div>
+<div class="ttc" id="a00208_html_ga934b673ec0e16d79eca0ca9dbb5d6d8b"><div class="ttname"><a href="a00208.html#ga934b673ec0e16d79eca0ca9dbb5d6d8b">glm::isNormalized</a></div><div class="ttdeci">GLM_FUNC_DECL bool isNormalized(tmat4x4< T, P > const &m, T const &epsilon)</div><div class="ttdoc">Return whether a matrix is a normalized matrix. </div></div>
+<div class="ttc" id="a00208_html_gab2cb5d23df77b4e4e63ad2965acd31b3"><div class="ttname"><a href="a00208.html#gab2cb5d23df77b4e4e63ad2965acd31b3">glm::isOrthogonal</a></div><div class="ttdeci">GLM_FUNC_DECL bool isOrthogonal(matType< T, P > const &m, T const &epsilon)</div><div class="ttdoc">Return whether a matrix is an orthonormalized matrix. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00070.html b/src/third_party/glm/doc/api/a00070.html
new file mode 100644
index 0000000..088f295
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00070.html
@@ -0,0 +1,158 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: matrix_transform.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_9440d7c11b99dcd7e5d369c7cf9802fe.html">gtc</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">matrix_transform.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00070_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gada6deb989d4b553fe0f7e3279f3afae1"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gada6deb989d4b553fe0f7e3279f3afae1"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#gada6deb989d4b553fe0f7e3279f3afae1">frustum</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>
+<tr class="separator:gada6deb989d4b553fe0f7e3279f3afae1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga75b1c1d0ee1f80c1e873605adeb1838c"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga75b1c1d0ee1f80c1e873605adeb1838c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#ga75b1c1d0ee1f80c1e873605adeb1838c">frustumLH</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>
+<tr class="separator:ga75b1c1d0ee1f80c1e873605adeb1838c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad0e184273bdacbe769e5cd81069e48ed"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gad0e184273bdacbe769e5cd81069e48ed"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#gad0e184273bdacbe769e5cd81069e48ed">frustumRH</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>
+<tr class="separator:gad0e184273bdacbe769e5cd81069e48ed"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga79f704ad91a5f0d68abd88c66c8186e5"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga79f704ad91a5f0d68abd88c66c8186e5"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#ga79f704ad91a5f0d68abd88c66c8186e5">infinitePerspective</a> (T fovy, T aspect, T near)</td></tr>
+<tr class="separator:ga79f704ad91a5f0d68abd88c66c8186e5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga47af534da2b28effa4c7945ec82ccd9d"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga47af534da2b28effa4c7945ec82ccd9d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#ga47af534da2b28effa4c7945ec82ccd9d">infinitePerspectiveLH</a> (T fovy, T aspect, T near)</td></tr>
+<tr class="separator:ga47af534da2b28effa4c7945ec82ccd9d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga79575023763df88dff1bf8255a42d0be"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga79575023763df88dff1bf8255a42d0be"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#ga79575023763df88dff1bf8255a42d0be">infinitePerspectiveRH</a> (T fovy, T aspect, T near)</td></tr>
+<tr class="separator:ga79575023763df88dff1bf8255a42d0be"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf8eef81da1ad09f6a8920101c01eaae4"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gaf8eef81da1ad09f6a8920101c01eaae4"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#gaf8eef81da1ad09f6a8920101c01eaae4">lookAt</a> (tvec3< T, P > const &eye, tvec3< T, P > const &center, tvec3< T, P > const &up)</td></tr>
+<tr class="separator:gaf8eef81da1ad09f6a8920101c01eaae4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gacd0c077ec7b58a575855e29cb5fb586d"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gacd0c077ec7b58a575855e29cb5fb586d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#gacd0c077ec7b58a575855e29cb5fb586d">lookAtLH</a> (tvec3< T, P > const &eye, tvec3< T, P > const &center, tvec3< T, P > const &up)</td></tr>
+<tr class="separator:gacd0c077ec7b58a575855e29cb5fb586d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2876d9313334980b94292d2ec169088e"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga2876d9313334980b94292d2ec169088e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#ga2876d9313334980b94292d2ec169088e">lookAtRH</a> (tvec3< T, P > const &eye, tvec3< T, P > const &center, tvec3< T, P > const &up)</td></tr>
+<tr class="separator:ga2876d9313334980b94292d2ec169088e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga65280251de6e38580110a0577a43d8f8"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga65280251de6e38580110a0577a43d8f8"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#ga65280251de6e38580110a0577a43d8f8">ortho</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>
+<tr class="separator:ga65280251de6e38580110a0577a43d8f8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga45b1b64f99255c07119b4f1aaed04dd7"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga45b1b64f99255c07119b4f1aaed04dd7"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#ga45b1b64f99255c07119b4f1aaed04dd7">ortho</a> (T left, T right, T bottom, T top)</td></tr>
+<tr class="separator:ga45b1b64f99255c07119b4f1aaed04dd7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga71503df1e691b12cc2d45e64fd0628fe"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga71503df1e691b12cc2d45e64fd0628fe"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#ga71503df1e691b12cc2d45e64fd0628fe">orthoLH</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>
+<tr class="separator:ga71503df1e691b12cc2d45e64fd0628fe"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gada0aaaee76f1fd3c272698c8eca735a1"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gada0aaaee76f1fd3c272698c8eca735a1"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#gada0aaaee76f1fd3c272698c8eca735a1">orthoRH</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>
+<tr class="separator:gada0aaaee76f1fd3c272698c8eca735a1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac3613dcb6c6916465ad5b7ad5a786175"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gac3613dcb6c6916465ad5b7ad5a786175"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#gac3613dcb6c6916465ad5b7ad5a786175">perspective</a> (T fovy, T aspect, T near, T far)</td></tr>
+<tr class="separator:gac3613dcb6c6916465ad5b7ad5a786175"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae9146e2c550fc8646299e4b900238145"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gae9146e2c550fc8646299e4b900238145"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#gae9146e2c550fc8646299e4b900238145">perspectiveFov</a> (T fov, T width, T height, T near, T far)</td></tr>
+<tr class="separator:gae9146e2c550fc8646299e4b900238145"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae705a2f19c3ef5ef880bd6c92759cf2d"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gae705a2f19c3ef5ef880bd6c92759cf2d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#gae705a2f19c3ef5ef880bd6c92759cf2d">perspectiveFovLH</a> (T fov, T width, T height, T near, T far)</td></tr>
+<tr class="separator:gae705a2f19c3ef5ef880bd6c92759cf2d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga07cd8df791bf90dcb782645fe0b21261"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga07cd8df791bf90dcb782645fe0b21261"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#ga07cd8df791bf90dcb782645fe0b21261">perspectiveFovRH</a> (T fov, T width, T height, T near, T far)</td></tr>
+<tr class="separator:ga07cd8df791bf90dcb782645fe0b21261"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga34048da27c559f1ac8e9550d169dd6f3"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga34048da27c559f1ac8e9550d169dd6f3"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#ga34048da27c559f1ac8e9550d169dd6f3">perspectiveLH</a> (T fovy, T aspect, T near, T far)</td></tr>
+<tr class="separator:ga34048da27c559f1ac8e9550d169dd6f3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5a4fa9f8ffabb2294e48a18bf8fa2f5f"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga5a4fa9f8ffabb2294e48a18bf8fa2f5f"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#ga5a4fa9f8ffabb2294e48a18bf8fa2f5f">perspectiveRH</a> (T fovy, T aspect, T near, T far)</td></tr>
+<tr class="separator:ga5a4fa9f8ffabb2294e48a18bf8fa2f5f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9026c77505b99990f68826f27c267dc5"><td class="memTemplParams" colspan="2">template<typename T , precision P, typename U > </td></tr>
+<tr class="memitem:ga9026c77505b99990f68826f27c267dc5"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#ga9026c77505b99990f68826f27c267dc5">pickMatrix</a> (tvec2< T, P > const &center, tvec2< T, P > const &delta, tvec4< U, P > const &viewport)</td></tr>
+<tr class="separator:ga9026c77505b99990f68826f27c267dc5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad743556abd138264d4f06f4ca27f1d7e"><td class="memTemplParams" colspan="2">template<typename T , typename U , precision P> </td></tr>
+<tr class="memitem:gad743556abd138264d4f06f4ca27f1d7e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#gad743556abd138264d4f06f4ca27f1d7e">project</a> (tvec3< T, P > const &obj, tmat4x4< T, P > const &model, tmat4x4< T, P > const &proj, tvec4< U, P > const &viewport)</td></tr>
+<tr class="separator:gad743556abd138264d4f06f4ca27f1d7e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga161b1df124348f232d994ba7958e4815"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga161b1df124348f232d994ba7958e4815"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#ga161b1df124348f232d994ba7958e4815">rotate</a> (tmat4x4< T, P > const &m, T angle, tvec3< T, P > const &axis)</td></tr>
+<tr class="separator:ga161b1df124348f232d994ba7958e4815"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8f062fcc07e2445500793f2803afebb0"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga8f062fcc07e2445500793f2803afebb0"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#ga8f062fcc07e2445500793f2803afebb0">scale</a> (tmat4x4< T, P > const &m, tvec3< T, P > const &v)</td></tr>
+<tr class="separator:ga8f062fcc07e2445500793f2803afebb0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaee134ab77c6c5548a6ebf4e8e476c6ed"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gaee134ab77c6c5548a6ebf4e8e476c6ed"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#gaee134ab77c6c5548a6ebf4e8e476c6ed">translate</a> (tmat4x4< T, P > const &m, tvec3< T, P > const &v)</td></tr>
+<tr class="separator:gaee134ab77c6c5548a6ebf4e8e476c6ed"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaed64bd81f5ecdab52fecbdf7f6b58194"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gaed64bd81f5ecdab52fecbdf7f6b58194"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#gaed64bd81f5ecdab52fecbdf7f6b58194">tweakedInfinitePerspective</a> (T fovy, T aspect, T near)</td></tr>
+<tr class="separator:gaed64bd81f5ecdab52fecbdf7f6b58194"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa50fce7f50b5d5da881ed30f5532a921"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gaa50fce7f50b5d5da881ed30f5532a921"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#gaa50fce7f50b5d5da881ed30f5532a921">tweakedInfinitePerspective</a> (T fovy, T aspect, T near, T ep)</td></tr>
+<tr class="separator:gaa50fce7f50b5d5da881ed30f5532a921"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga82a558de3ce42cbeed0f6ec292a4e1b3"><td class="memTemplParams" colspan="2">template<typename T , typename U , precision P> </td></tr>
+<tr class="memitem:ga82a558de3ce42cbeed0f6ec292a4e1b3"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#ga82a558de3ce42cbeed0f6ec292a4e1b3">unProject</a> (tvec3< T, P > const &win, tmat4x4< T, P > const &model, tmat4x4< T, P > const &proj, tvec4< U, P > const &viewport)</td></tr>
+<tr class="separator:ga82a558de3ce42cbeed0f6ec292a4e1b3"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00169.html">GLM_GTC_matrix_transform</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd>
+<dd>
+<a class="el" href="a00232.html" title="Add transformation matrices. ">GLM_GTX_transform</a> </dd>
+<dd>
+<a class="el" href="a00233.html" title="Add extra transformation matrices. ">GLM_GTX_transform2</a> </dd></dl>
+
+<p>Definition in file <a class="el" href="a00070_source.html">matrix_transform.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00070_source.html b/src/third_party/glm/doc/api/a00070_source.html
new file mode 100644
index 0000000..a3a734a
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00070_source.html
@@ -0,0 +1,289 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: matrix_transform.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_9440d7c11b99dcd7e5d369c7cf9802fe.html">gtc</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">matrix_transform.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00070.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment">// Dependencies</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "../mat4x4.hpp"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "../vec2.hpp"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "../vec3.hpp"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "../vec4.hpp"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include "../gtc/constants.hpp"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor"># pragma message("GLM: GLM_GTC_matrix_transform extension included")</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> {</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  GLM_FUNC_DECL tmat4x4<T, P> <a class="code" href="a00169.html#gaee134ab77c6c5548a6ebf4e8e476c6ed">translate</a>(</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  tmat4x4<T, P> <span class="keyword">const</span> & m,</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  tvec3<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  </div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  GLM_FUNC_DECL tmat4x4<T, P> <a class="code" href="a00169.html#ga161b1df124348f232d994ba7958e4815">rotate</a>(</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  tmat4x4<T, P> <span class="keyword">const</span> & m,</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  T <a class="code" href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">angle</a>,</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  tvec3<T, P> <span class="keyword">const</span> & <a class="code" href="a00172.html#ga0b3e87a13b2708154b72259e50789a19">axis</a>);</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  GLM_FUNC_DECL tmat4x4<T, P> <a class="code" href="a00169.html#ga8f062fcc07e2445500793f2803afebb0">scale</a>(</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  tmat4x4<T, P> <span class="keyword">const</span> & m,</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  tvec3<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  GLM_FUNC_DECL tmat4x4<T, defaultp> <a class="code" href="a00169.html#ga45b1b64f99255c07119b4f1aaed04dd7">ortho</a>(</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  T left,</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  T right,</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  T bottom,</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  T top,</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  T zNear,</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  T zFar);</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  GLM_FUNC_DECL tmat4x4<T, defaultp> <a class="code" href="a00169.html#ga71503df1e691b12cc2d45e64fd0628fe">orthoLH</a>(</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  T left,</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  T right,</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  T bottom,</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  T top,</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  T zNear,</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  T zFar);</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  GLM_FUNC_DECL tmat4x4<T, defaultp> <a class="code" href="a00169.html#gada0aaaee76f1fd3c272698c8eca735a1">orthoRH</a>(</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  T left,</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  T right,</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  T bottom,</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  T top,</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  T zNear,</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  T zFar);</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  GLM_FUNC_DECL tmat4x4<T, defaultp> <a class="code" href="a00169.html#ga45b1b64f99255c07119b4f1aaed04dd7">ortho</a>(</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  T left,</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  T right,</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  T bottom,</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  T top);</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  GLM_FUNC_DECL tmat4x4<T, defaultp> <a class="code" href="a00169.html#gada6deb989d4b553fe0f7e3279f3afae1">frustum</a>(</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  T left,</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  T right,</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  T bottom,</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  T top,</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  T near,</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  T far);</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  GLM_FUNC_DECL tmat4x4<T, defaultp> <a class="code" href="a00169.html#ga75b1c1d0ee1f80c1e873605adeb1838c">frustumLH</a>(</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  T left,</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  T right,</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  T bottom,</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  T top,</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  T near,</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  T far);</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  GLM_FUNC_DECL tmat4x4<T, defaultp> <a class="code" href="a00169.html#gad0e184273bdacbe769e5cd81069e48ed">frustumRH</a>(</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  T left,</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  T right,</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  T bottom,</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  T top,</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  T near,</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  T far);</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> </div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  GLM_FUNC_DECL tmat4x4<T, defaultp> <a class="code" href="a00169.html#gac3613dcb6c6916465ad5b7ad5a786175">perspective</a>(</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  T fovy,</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  T aspect,</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  T near,</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  T far);</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> </div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  GLM_FUNC_DECL tmat4x4<T, defaultp> <a class="code" href="a00169.html#ga5a4fa9f8ffabb2294e48a18bf8fa2f5f">perspectiveRH</a>(</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  T fovy,</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  T aspect,</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  T near,</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  T far);</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> </div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  GLM_FUNC_DECL tmat4x4<T, defaultp> <a class="code" href="a00169.html#ga34048da27c559f1ac8e9550d169dd6f3">perspectiveLH</a>(</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  T fovy,</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  T aspect,</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  T near,</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  T far);</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> </div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  GLM_FUNC_DECL tmat4x4<T, defaultp> <a class="code" href="a00169.html#gae9146e2c550fc8646299e4b900238145">perspectiveFov</a>(</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  T fov,</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  T width,</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  T height,</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  T near,</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  T far);</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> </div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  GLM_FUNC_DECL tmat4x4<T, defaultp> <a class="code" href="a00169.html#ga07cd8df791bf90dcb782645fe0b21261">perspectiveFovRH</a>(</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  T fov,</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  T width,</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  T height,</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  T near,</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  T far);</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> </div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  GLM_FUNC_DECL tmat4x4<T, defaultp> <a class="code" href="a00169.html#gae705a2f19c3ef5ef880bd6c92759cf2d">perspectiveFovLH</a>(</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  T fov,</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  T width,</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  T height,</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  T near,</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  T far);</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> </div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  GLM_FUNC_DECL tmat4x4<T, defaultp> <a class="code" href="a00169.html#ga79f704ad91a5f0d68abd88c66c8186e5">infinitePerspective</a>(</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  T fovy, T aspect, T near);</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> </div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  GLM_FUNC_DECL tmat4x4<T, defaultp> <a class="code" href="a00169.html#ga47af534da2b28effa4c7945ec82ccd9d">infinitePerspectiveLH</a>(</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  T fovy, T aspect, T near);</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> </div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  GLM_FUNC_DECL tmat4x4<T, defaultp> <a class="code" href="a00169.html#ga79575023763df88dff1bf8255a42d0be">infinitePerspectiveRH</a>(</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  T fovy, T aspect, T near);</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> </div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  GLM_FUNC_DECL tmat4x4<T, defaultp> <a class="code" href="a00169.html#gaa50fce7f50b5d5da881ed30f5532a921">tweakedInfinitePerspective</a>(</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  T fovy, T aspect, T near);</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> </div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  GLM_FUNC_DECL tmat4x4<T, defaultp> <a class="code" href="a00169.html#gaa50fce7f50b5d5da881ed30f5532a921">tweakedInfinitePerspective</a>(</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  T fovy, T aspect, T near, T ep);</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> </div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, <span class="keyword">typename</span> U, precision P></div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  GLM_FUNC_DECL tvec3<T, P> <a class="code" href="a00169.html#gad743556abd138264d4f06f4ca27f1d7e">project</a>(</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  tvec3<T, P> <span class="keyword">const</span> & obj,</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  tmat4x4<T, P> <span class="keyword">const</span> & model,</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  tmat4x4<T, P> <span class="keyword">const</span> & <a class="code" href="a00219.html#gadf29123bcf748fc9d6fb0998192184cf">proj</a>,</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  tvec4<U, P> <span class="keyword">const</span> & viewport);</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> </div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, <span class="keyword">typename</span> U, precision P></div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  GLM_FUNC_DECL tvec3<T, P> <a class="code" href="a00169.html#ga82a558de3ce42cbeed0f6ec292a4e1b3">unProject</a>(</div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  tvec3<T, P> <span class="keyword">const</span> & win,</div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  tmat4x4<T, P> <span class="keyword">const</span> & model,</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  tmat4x4<T, P> <span class="keyword">const</span> & <a class="code" href="a00219.html#gadf29123bcf748fc9d6fb0998192184cf">proj</a>,</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  tvec4<U, P> <span class="keyword">const</span> & viewport);</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> </div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  GLM_FUNC_DECL tmat4x4<T, P> <a class="code" href="a00169.html#ga9026c77505b99990f68826f27c267dc5">pickMatrix</a>(</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  tvec2<T, P> <span class="keyword">const</span> & center,</div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  tvec2<T, P> <span class="keyword">const</span> & delta,</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  tvec4<U, P> <span class="keyword">const</span> & viewport);</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> </div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  GLM_FUNC_DECL tmat4x4<T, P> <a class="code" href="a00169.html#gaf8eef81da1ad09f6a8920101c01eaae4">lookAt</a>(</div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  tvec3<T, P> <span class="keyword">const</span> & eye,</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  tvec3<T, P> <span class="keyword">const</span> & center,</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  tvec3<T, P> <span class="keyword">const</span> & up);</div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> </div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  GLM_FUNC_DECL tmat4x4<T, P> <a class="code" href="a00169.html#ga2876d9313334980b94292d2ec169088e">lookAtRH</a>(</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  tvec3<T, P> <span class="keyword">const</span> & eye,</div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  tvec3<T, P> <span class="keyword">const</span> & center,</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  tvec3<T, P> <span class="keyword">const</span> & up);</div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> </div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  GLM_FUNC_DECL tmat4x4<T, P> <a class="code" href="a00169.html#gacd0c077ec7b58a575855e29cb5fb586d">lookAtLH</a>(</div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  tvec3<T, P> <span class="keyword">const</span> & eye,</div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  tvec3<T, P> <span class="keyword">const</span> & center,</div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  tvec3<T, P> <span class="keyword">const</span> & up);</div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> </div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> </div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> <span class="preprocessor">#include "matrix_transform.inl"</span></div>
+<div class="ttc" id="a00169_html_ga79575023763df88dff1bf8255a42d0be"><div class="ttname"><a href="a00169.html#ga79575023763df88dff1bf8255a42d0be">glm::infinitePerspectiveRH</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, defaultp > infinitePerspectiveRH(T fovy, T aspect, T near)</div><div class="ttdoc">Creates a matrix for a right handed, symmetric perspective-view frustum with far plane at infinite...</div></div>
+<div class="ttc" id="a00219_html_gadf29123bcf748fc9d6fb0998192184cf"><div class="ttname"><a href="a00219.html#gadf29123bcf748fc9d6fb0998192184cf">glm::proj</a></div><div class="ttdeci">GLM_FUNC_DECL vecType proj(vecType const &x, vecType const &Normal)</div><div class="ttdoc">Projects x on Normal. </div></div>
+<div class="ttc" id="a00169_html_gacd0c077ec7b58a575855e29cb5fb586d"><div class="ttname"><a href="a00169.html#gacd0c077ec7b58a575855e29cb5fb586d">glm::lookAtLH</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, P > lookAtLH(tvec3< T, P > const &eye, tvec3< T, P > const &center, tvec3< T, P > const &up)</div><div class="ttdoc">Build a left handed look at view matrix. </div></div>
+<div class="ttc" id="a00169_html_gada6deb989d4b553fe0f7e3279f3afae1"><div class="ttname"><a href="a00169.html#gada6deb989d4b553fe0f7e3279f3afae1">glm::frustum</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, defaultp > frustum(T left, T right, T bottom, T top, T near, T far)</div><div class="ttdoc">Creates a frustum matrix with default handedness. </div></div>
+<div class="ttc" id="a00169_html_ga79f704ad91a5f0d68abd88c66c8186e5"><div class="ttname"><a href="a00169.html#ga79f704ad91a5f0d68abd88c66c8186e5">glm::infinitePerspective</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, defaultp > infinitePerspective(T fovy, T aspect, T near)</div><div class="ttdoc">Creates a matrix for a symmetric perspective-view frustum with far plane at infinite with default han...</div></div>
+<div class="ttc" id="a00169_html_gaf8eef81da1ad09f6a8920101c01eaae4"><div class="ttname"><a href="a00169.html#gaf8eef81da1ad09f6a8920101c01eaae4">glm::lookAt</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, P > lookAt(tvec3< T, P > const &eye, tvec3< T, P > const &center, tvec3< T, P > const &up)</div><div class="ttdoc">Build a look at view matrix based on the default handedness. </div></div>
+<div class="ttc" id="a00169_html_ga161b1df124348f232d994ba7958e4815"><div class="ttname"><a href="a00169.html#ga161b1df124348f232d994ba7958e4815">glm::rotate</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, P > rotate(tmat4x4< T, P > const &m, T angle, tvec3< T, P > const &axis)</div><div class="ttdoc">Builds a rotation 4 * 4 matrix created from an axis vector and an angle. </div></div>
+<div class="ttc" id="a00169_html_gad743556abd138264d4f06f4ca27f1d7e"><div class="ttname"><a href="a00169.html#gad743556abd138264d4f06f4ca27f1d7e">glm::project</a></div><div class="ttdeci">GLM_FUNC_DECL tvec3< T, P > project(tvec3< T, P > const &obj, tmat4x4< T, P > const &model, tmat4x4< T, P > const &proj, tvec4< U, P > const &viewport)</div><div class="ttdoc">Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates. </div></div>
+<div class="ttc" id="a00169_html_gae705a2f19c3ef5ef880bd6c92759cf2d"><div class="ttname"><a href="a00169.html#gae705a2f19c3ef5ef880bd6c92759cf2d">glm::perspectiveFovLH</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, defaultp > perspectiveFovLH(T fov, T width, T height, T near, T far)</div><div class="ttdoc">Builds a left handed perspective projection matrix based on a field of view. </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00169_html_ga2876d9313334980b94292d2ec169088e"><div class="ttname"><a href="a00169.html#ga2876d9313334980b94292d2ec169088e">glm::lookAtRH</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, P > lookAtRH(tvec3< T, P > const &eye, tvec3< T, P > const &center, tvec3< T, P > const &up)</div><div class="ttdoc">Build a right handed look at view matrix. </div></div>
+<div class="ttc" id="a00169_html_ga07cd8df791bf90dcb782645fe0b21261"><div class="ttname"><a href="a00169.html#ga07cd8df791bf90dcb782645fe0b21261">glm::perspectiveFovRH</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, defaultp > perspectiveFovRH(T fov, T width, T height, T near, T far)</div><div class="ttdoc">Builds a right handed perspective projection matrix based on a field of view. </div></div>
+<div class="ttc" id="a00169_html_gae9146e2c550fc8646299e4b900238145"><div class="ttname"><a href="a00169.html#gae9146e2c550fc8646299e4b900238145">glm::perspectiveFov</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, defaultp > perspectiveFov(T fov, T width, T height, T near, T far)</div><div class="ttdoc">Builds a perspective projection matrix based on a field of view and the default handedness. </div></div>
+<div class="ttc" id="a00169_html_gaa50fce7f50b5d5da881ed30f5532a921"><div class="ttname"><a href="a00169.html#gaa50fce7f50b5d5da881ed30f5532a921">glm::tweakedInfinitePerspective</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, defaultp > tweakedInfinitePerspective(T fovy, T aspect, T near, T ep)</div><div class="ttdoc">Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics har...</div></div>
+<div class="ttc" id="a00169_html_ga71503df1e691b12cc2d45e64fd0628fe"><div class="ttname"><a href="a00169.html#ga71503df1e691b12cc2d45e64fd0628fe">glm::orthoLH</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, defaultp > orthoLH(T left, T right, T bottom, T top, T zNear, T zFar)</div><div class="ttdoc">Creates a matrix for an orthographic parallel viewing volume, using left-handedness. </div></div>
+<div class="ttc" id="a00169_html_gada0aaaee76f1fd3c272698c8eca735a1"><div class="ttname"><a href="a00169.html#gada0aaaee76f1fd3c272698c8eca735a1">glm::orthoRH</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, defaultp > orthoRH(T left, T right, T bottom, T top, T zNear, T zFar)</div><div class="ttdoc">Creates a matrix for an orthographic parallel viewing volume, using right-handedness. </div></div>
+<div class="ttc" id="a00169_html_gaee134ab77c6c5548a6ebf4e8e476c6ed"><div class="ttname"><a href="a00169.html#gaee134ab77c6c5548a6ebf4e8e476c6ed">glm::translate</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, P > translate(tmat4x4< T, P > const &m, tvec3< T, P > const &v)</div><div class="ttdoc">Builds a translation 4 * 4 matrix created from a vector of 3 components. </div></div>
+<div class="ttc" id="a00172_html_ga0b3e87a13b2708154b72259e50789a19"><div class="ttname"><a href="a00172.html#ga0b3e87a13b2708154b72259e50789a19">glm::axis</a></div><div class="ttdeci">GLM_FUNC_DECL tvec3< T, P > axis(tquat< T, P > const &x)</div><div class="ttdoc">Returns the q rotation axis. </div></div>
+<div class="ttc" id="a00169_html_ga8f062fcc07e2445500793f2803afebb0"><div class="ttname"><a href="a00169.html#ga8f062fcc07e2445500793f2803afebb0">glm::scale</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, P > scale(tmat4x4< T, P > const &m, tvec3< T, P > const &v)</div><div class="ttdoc">Builds a scale 4 * 4 matrix created from 3 scalars. </div></div>
+<div class="ttc" id="a00169_html_gac3613dcb6c6916465ad5b7ad5a786175"><div class="ttname"><a href="a00169.html#gac3613dcb6c6916465ad5b7ad5a786175">glm::perspective</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, defaultp > perspective(T fovy, T aspect, T near, T far)</div><div class="ttdoc">Creates a matrix for a symetric perspective-view frustum based on the default handedness. </div></div>
+<div class="ttc" id="a00169_html_ga47af534da2b28effa4c7945ec82ccd9d"><div class="ttname"><a href="a00169.html#ga47af534da2b28effa4c7945ec82ccd9d">glm::infinitePerspectiveLH</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, defaultp > infinitePerspectiveLH(T fovy, T aspect, T near)</div><div class="ttdoc">Creates a matrix for a left handed, symmetric perspective-view frustum with far plane at infinite...</div></div>
+<div class="ttc" id="a00172_html_gad4a4448baedb198b2b1e7880d2544dc9"><div class="ttname"><a href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">glm::angle</a></div><div class="ttdeci">GLM_FUNC_DECL T angle(tquat< T, P > const &x)</div><div class="ttdoc">Returns the quaternion rotation angle. </div></div>
+<div class="ttc" id="a00169_html_gad0e184273bdacbe769e5cd81069e48ed"><div class="ttname"><a href="a00169.html#gad0e184273bdacbe769e5cd81069e48ed">glm::frustumRH</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, defaultp > frustumRH(T left, T right, T bottom, T top, T near, T far)</div><div class="ttdoc">Creates a right handed frustum matrix. </div></div>
+<div class="ttc" id="a00169_html_ga82a558de3ce42cbeed0f6ec292a4e1b3"><div class="ttname"><a href="a00169.html#ga82a558de3ce42cbeed0f6ec292a4e1b3">glm::unProject</a></div><div class="ttdeci">GLM_FUNC_DECL tvec3< T, P > unProject(tvec3< T, P > const &win, tmat4x4< T, P > const &model, tmat4x4< T, P > const &proj, tvec4< U, P > const &viewport)</div><div class="ttdoc">Map the specified window coordinates (win.x, win.y, win.z) into object coordinates. </div></div>
+<div class="ttc" id="a00169_html_ga5a4fa9f8ffabb2294e48a18bf8fa2f5f"><div class="ttname"><a href="a00169.html#ga5a4fa9f8ffabb2294e48a18bf8fa2f5f">glm::perspectiveRH</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, defaultp > perspectiveRH(T fovy, T aspect, T near, T far)</div><div class="ttdoc">Creates a matrix for a right handed, symetric perspective-view frustum. </div></div>
+<div class="ttc" id="a00169_html_ga9026c77505b99990f68826f27c267dc5"><div class="ttname"><a href="a00169.html#ga9026c77505b99990f68826f27c267dc5">glm::pickMatrix</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, P > pickMatrix(tvec2< T, P > const &center, tvec2< T, P > const &delta, tvec4< U, P > const &viewport)</div><div class="ttdoc">Define a picking region. </div></div>
+<div class="ttc" id="a00169_html_ga75b1c1d0ee1f80c1e873605adeb1838c"><div class="ttname"><a href="a00169.html#ga75b1c1d0ee1f80c1e873605adeb1838c">glm::frustumLH</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, defaultp > frustumLH(T left, T right, T bottom, T top, T near, T far)</div><div class="ttdoc">Creates a left handed frustum matrix. </div></div>
+<div class="ttc" id="a00169_html_ga34048da27c559f1ac8e9550d169dd6f3"><div class="ttname"><a href="a00169.html#ga34048da27c559f1ac8e9550d169dd6f3">glm::perspectiveLH</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, defaultp > perspectiveLH(T fovy, T aspect, T near, T far)</div><div class="ttdoc">Creates a matrix for a left handed, symetric perspective-view frustum. </div></div>
+<div class="ttc" id="a00169_html_ga45b1b64f99255c07119b4f1aaed04dd7"><div class="ttname"><a href="a00169.html#ga45b1b64f99255c07119b4f1aaed04dd7">glm::ortho</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, defaultp > ortho(T left, T right, T bottom, T top)</div><div class="ttdoc">Creates a matrix for projecting two-dimensional coordinates onto the screen. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00071.html b/src/third_party/glm/doc/api/a00071.html
new file mode 100644
index 0000000..8d5091d
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00071.html
@@ -0,0 +1,89 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: matrix_transform_2d.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">matrix_transform_2d.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00071_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gab4f798c6048db91a6d0686812fd54022"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gab4f798c6048db91a6d0686812fd54022"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER tmat3x3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00209.html#gab4f798c6048db91a6d0686812fd54022">rotate</a> (tmat3x3< T, P > const &m, T angle)</td></tr>
+<tr class="separator:gab4f798c6048db91a6d0686812fd54022"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5a608eaf1fdfd0a349a30181cb6a0240"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga5a608eaf1fdfd0a349a30181cb6a0240"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER tmat3x3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00209.html#ga5a608eaf1fdfd0a349a30181cb6a0240">scale</a> (tmat3x3< T, P > const &m, tvec2< T, P > const &v)</td></tr>
+<tr class="separator:ga5a608eaf1fdfd0a349a30181cb6a0240"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3da9ea234fdb2a96c75a97a18c903489"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga3da9ea234fdb2a96c75a97a18c903489"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER tmat3x3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00209.html#ga3da9ea234fdb2a96c75a97a18c903489">shearX</a> (tmat3x3< T, P > const &m, T y)</td></tr>
+<tr class="separator:ga3da9ea234fdb2a96c75a97a18c903489"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga93bb348e7d251bcc2c17bfc11bd82e91"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga93bb348e7d251bcc2c17bfc11bd82e91"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER tmat3x3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00209.html#ga93bb348e7d251bcc2c17bfc11bd82e91">shearY</a> (tmat3x3< T, P > const &m, T x)</td></tr>
+<tr class="separator:ga93bb348e7d251bcc2c17bfc11bd82e91"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga22b5e806a6d2e2be54ebd29100d11c51"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga22b5e806a6d2e2be54ebd29100d11c51"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER tmat3x3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00209.html#ga22b5e806a6d2e2be54ebd29100d11c51">translate</a> (tmat3x3< T, P > const &m, tvec2< T, P > const &v)</td></tr>
+<tr class="separator:ga22b5e806a6d2e2be54ebd29100d11c51"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00209.html">GLM_GTX_matrix_transform_2d</a> </p>
+<dl class="section author"><dt>Author</dt><dd>Miguel Ángel Pérez Martínez</dd></dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00071_source.html">matrix_transform_2d.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00071_source.html b/src/third_party/glm/doc/api/a00071_source.html
new file mode 100644
index 0000000..4c4bd1b
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00071_source.html
@@ -0,0 +1,110 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: matrix_transform_2d.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">matrix_transform_2d.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00071.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "../mat3x3.hpp"</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "../vec2.hpp"</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_matrix_transform_2d extension included")</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> {</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  GLM_FUNC_QUALIFIER tmat3x3<T, P> <a class="code" href="a00209.html#ga22b5e806a6d2e2be54ebd29100d11c51">translate</a>(</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  tmat3x3<T, P> <span class="keyword">const</span> & m,</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  tvec2<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> </div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  GLM_FUNC_QUALIFIER tmat3x3<T, P> <a class="code" href="a00209.html#gab4f798c6048db91a6d0686812fd54022">rotate</a>(</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  tmat3x3<T, P> <span class="keyword">const</span> & m,</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  T <a class="code" href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">angle</a>);</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> </div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  GLM_FUNC_QUALIFIER tmat3x3<T, P> <a class="code" href="a00209.html#ga5a608eaf1fdfd0a349a30181cb6a0240">scale</a>(</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  tmat3x3<T, P> <span class="keyword">const</span> & m,</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  tvec2<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> </div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  GLM_FUNC_QUALIFIER tmat3x3<T, P> <a class="code" href="a00209.html#ga3da9ea234fdb2a96c75a97a18c903489">shearX</a>(</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  tmat3x3<T, P> <span class="keyword">const</span> & m,</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  T y);</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> </div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  GLM_FUNC_QUALIFIER tmat3x3<T, P> <a class="code" href="a00209.html#ga93bb348e7d251bcc2c17bfc11bd82e91">shearY</a>(</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  tmat3x3<T, P> <span class="keyword">const</span> & m,</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  T x);</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="preprocessor">#include "matrix_transform_2d.inl"</span></div>
+<div class="ttc" id="a00209_html_gab4f798c6048db91a6d0686812fd54022"><div class="ttname"><a href="a00209.html#gab4f798c6048db91a6d0686812fd54022">glm::rotate</a></div><div class="ttdeci">GLM_FUNC_QUALIFIER tmat3x3< T, P > rotate(tmat3x3< T, P > const &m, T angle)</div><div class="ttdoc">Builds a rotation 3 * 3 matrix created from an angle. </div></div>
+<div class="ttc" id="a00209_html_ga93bb348e7d251bcc2c17bfc11bd82e91"><div class="ttname"><a href="a00209.html#ga93bb348e7d251bcc2c17bfc11bd82e91">glm::shearY</a></div><div class="ttdeci">GLM_FUNC_QUALIFIER tmat3x3< T, P > shearY(tmat3x3< T, P > const &m, T x)</div><div class="ttdoc">Builds a vertical (parallel to the y axis) shear 3 * 3 matrix. </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00209_html_ga5a608eaf1fdfd0a349a30181cb6a0240"><div class="ttname"><a href="a00209.html#ga5a608eaf1fdfd0a349a30181cb6a0240">glm::scale</a></div><div class="ttdeci">GLM_FUNC_QUALIFIER tmat3x3< T, P > scale(tmat3x3< T, P > const &m, tvec2< T, P > const &v)</div><div class="ttdoc">Builds a scale 3 * 3 matrix created from a vector of 2 components. </div></div>
+<div class="ttc" id="a00209_html_ga3da9ea234fdb2a96c75a97a18c903489"><div class="ttname"><a href="a00209.html#ga3da9ea234fdb2a96c75a97a18c903489">glm::shearX</a></div><div class="ttdeci">GLM_FUNC_QUALIFIER tmat3x3< T, P > shearX(tmat3x3< T, P > const &m, T y)</div><div class="ttdoc">Builds an horizontal (parallel to the x axis) shear 3 * 3 matrix. </div></div>
+<div class="ttc" id="a00172_html_gad4a4448baedb198b2b1e7880d2544dc9"><div class="ttname"><a href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">glm::angle</a></div><div class="ttdeci">GLM_FUNC_DECL T angle(tquat< T, P > const &x)</div><div class="ttdoc">Returns the quaternion rotation angle. </div></div>
+<div class="ttc" id="a00209_html_ga22b5e806a6d2e2be54ebd29100d11c51"><div class="ttname"><a href="a00209.html#ga22b5e806a6d2e2be54ebd29100d11c51">glm::translate</a></div><div class="ttdeci">GLM_FUNC_QUALIFIER tmat3x3< T, P > translate(tmat3x3< T, P > const &m, tvec2< T, P > const &v)</div><div class="ttdoc">Builds a translation 3 * 3 matrix created from a vector of 2 components. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00072.html b/src/third_party/glm/doc/api/a00072.html
new file mode 100644
index 0000000..90a5b82
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00072.html
@@ -0,0 +1,77 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: mixed_product.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">mixed_product.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00072_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gaaee4cf80d69cb86de80f12af88b3c3af"><td class="memTemplParams" colspan="2"><a class="anchor" id="gaaee4cf80d69cb86de80f12af88b3c3af"></a>
+template<typename T , precision P> </td></tr>
+<tr class="memitem:gaaee4cf80d69cb86de80f12af88b3c3af"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00210.html#gaaee4cf80d69cb86de80f12af88b3c3af">mixedProduct</a> (tvec3< T, P > const &v1, tvec3< T, P > const &v2, tvec3< T, P > const &v3)</td></tr>
+<tr class="separator:gaaee4cf80d69cb86de80f12af88b3c3af"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00210.html">GLM_GTX_mixed_producte</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00072_source.html">mixed_product.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00072_source.html b/src/third_party/glm/doc/api/a00072_source.html
new file mode 100644
index 0000000..208663e
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00072_source.html
@@ -0,0 +1,84 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: mixed_product.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">mixed_product.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00072.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include "../glm.hpp"</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_mixed_product extension included")</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> {</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  GLM_FUNC_DECL T <a class="code" href="a00210.html#gaaee4cf80d69cb86de80f12af88b3c3af">mixedProduct</a>(</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  tvec3<T, P> <span class="keyword">const</span> & v1, </div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  tvec3<T, P> <span class="keyword">const</span> & v2, </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  tvec3<T, P> <span class="keyword">const</span> & v3);</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> }<span class="comment">// namespace glm</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#include "mixed_product.inl"</span></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00210_html_gaaee4cf80d69cb86de80f12af88b3c3af"><div class="ttname"><a href="a00210.html#gaaee4cf80d69cb86de80f12af88b3c3af">glm::mixedProduct</a></div><div class="ttdeci">GLM_FUNC_DECL T mixedProduct(tvec3< T, P > const &v1, tvec3< T, P > const &v2, tvec3< T, P > const &v3)</div><div class="ttdoc">Mixed product of 3 vectors (from GLM_GTX_mixed_product extension) </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00073.html b/src/third_party/glm/doc/api/a00073.html
new file mode 100644
index 0000000..618648b
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00073.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: noise.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_9440d7c11b99dcd7e5d369c7cf9802fe.html">gtc</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">noise.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00073_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga14e5975486b2b36e747861d3c65b16c1"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga14e5975486b2b36e747861d3c65b16c1"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00170.html#ga14e5975486b2b36e747861d3c65b16c1">perlin</a> (vecType< T, P > const &p)</td></tr>
+<tr class="separator:ga14e5975486b2b36e747861d3c65b16c1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7e103ffffacb322fe2d4863c372ae2fd"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga7e103ffffacb322fe2d4863c372ae2fd"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00170.html#ga7e103ffffacb322fe2d4863c372ae2fd">perlin</a> (vecType< T, P > const &p, vecType< T, P > const &rep)</td></tr>
+<tr class="separator:ga7e103ffffacb322fe2d4863c372ae2fd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga05f5ab240c9a3fdeee353636e464c285"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga05f5ab240c9a3fdeee353636e464c285"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00170.html#ga05f5ab240c9a3fdeee353636e464c285">simplex</a> (vecType< T, P > const &p)</td></tr>
+<tr class="separator:ga05f5ab240c9a3fdeee353636e464c285"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00170.html">GLM_GTC_noise</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00073_source.html">noise.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00073_source.html b/src/third_party/glm/doc/api/a00073_source.html
new file mode 100644
index 0000000..7546943
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00073_source.html
@@ -0,0 +1,100 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: noise.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_9440d7c11b99dcd7e5d369c7cf9802fe.html">gtc</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">noise.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00073.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">// Dependencies</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include "../detail/setup.hpp"</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "../detail/precision.hpp"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "../detail/_noise.hpp"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "../geometric.hpp"</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "../common.hpp"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "../vector_relational.hpp"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "../vec2.hpp"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "../vec3.hpp"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "../vec4.hpp"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor"># pragma message("GLM: GLM_GTC_noise extension included")</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> {</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span><<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  GLM_FUNC_DECL T <a class="code" href="a00170.html#ga7e103ffffacb322fe2d4863c372ae2fd">perlin</a>(</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  vecType<T, P> <span class="keyword">const</span> & p);</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span><<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  GLM_FUNC_DECL T <a class="code" href="a00170.html#ga7e103ffffacb322fe2d4863c372ae2fd">perlin</a>(</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  vecType<T, P> <span class="keyword">const</span> & p,</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  vecType<T, P> <span class="keyword">const</span> & rep);</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span><<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  GLM_FUNC_DECL T <a class="code" href="a00170.html#ga05f5ab240c9a3fdeee353636e464c285">simplex</a>(</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  vecType<T, P> <span class="keyword">const</span> & p);</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="preprocessor">#include "noise.inl"</span></div>
+<div class="ttc" id="a00170_html_ga7e103ffffacb322fe2d4863c372ae2fd"><div class="ttname"><a href="a00170.html#ga7e103ffffacb322fe2d4863c372ae2fd">glm::perlin</a></div><div class="ttdeci">GLM_FUNC_DECL T perlin(vecType< T, P > const &p, vecType< T, P > const &rep)</div><div class="ttdoc">Periodic perlin noise. </div></div>
+<div class="ttc" id="a00170_html_ga05f5ab240c9a3fdeee353636e464c285"><div class="ttname"><a href="a00170.html#ga05f5ab240c9a3fdeee353636e464c285">glm::simplex</a></div><div class="ttdeci">GLM_FUNC_DECL T simplex(vecType< T, P > const &p)</div><div class="ttdoc">Simplex noise. </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00074.html b/src/third_party/glm/doc/api/a00074.html
new file mode 100644
index 0000000..152caf8
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00074.html
@@ -0,0 +1,99 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: norm.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">norm.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00074_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga647d2602008801d6ed78f9708eb439cc"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga647d2602008801d6ed78f9708eb439cc"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00211.html#ga647d2602008801d6ed78f9708eb439cc">distance2</a> (vecType< T, P > const &p0, vecType< T, P > const &p1)</td></tr>
+<tr class="separator:ga647d2602008801d6ed78f9708eb439cc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaebe5a39b06e262e615622129f37da4f4"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gaebe5a39b06e262e615622129f37da4f4"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00211.html#gaebe5a39b06e262e615622129f37da4f4">l1Norm</a> (tvec3< T, P > const &x, tvec3< T, P > const &y)</td></tr>
+<tr class="separator:gaebe5a39b06e262e615622129f37da4f4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6d5964f09cdb43803496a5ee3ced71cb"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga6d5964f09cdb43803496a5ee3ced71cb"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00211.html#ga6d5964f09cdb43803496a5ee3ced71cb">l1Norm</a> (tvec3< T, P > const &v)</td></tr>
+<tr class="separator:ga6d5964f09cdb43803496a5ee3ced71cb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafa6fbbc99cd44d81bf030e74eaf7ad64"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gafa6fbbc99cd44d81bf030e74eaf7ad64"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00211.html#gafa6fbbc99cd44d81bf030e74eaf7ad64">l2Norm</a> (tvec3< T, P > const &x, tvec3< T, P > const &y)</td></tr>
+<tr class="separator:gafa6fbbc99cd44d81bf030e74eaf7ad64"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0a8cb8a0ce88d1d977de23209bf04610"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga0a8cb8a0ce88d1d977de23209bf04610"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00211.html#ga0a8cb8a0ce88d1d977de23209bf04610">l2Norm</a> (tvec3< T, P > const &x)</td></tr>
+<tr class="separator:ga0a8cb8a0ce88d1d977de23209bf04610"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6d326d62fd9b7f4f0a1b79e56492a7e4"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga6d326d62fd9b7f4f0a1b79e56492a7e4"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00211.html#ga6d326d62fd9b7f4f0a1b79e56492a7e4">length2</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:ga6d326d62fd9b7f4f0a1b79e56492a7e4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga932bb0854e5c5a6ab5a14b023c451ca7"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga932bb0854e5c5a6ab5a14b023c451ca7"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00211.html#ga932bb0854e5c5a6ab5a14b023c451ca7">lxNorm</a> (tvec3< T, P > const &x, tvec3< T, P > const &y, unsigned int Depth)</td></tr>
+<tr class="separator:ga932bb0854e5c5a6ab5a14b023c451ca7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaab931b0d1acfe2f9c1cb78311edf24fc"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gaab931b0d1acfe2f9c1cb78311edf24fc"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00211.html#gaab931b0d1acfe2f9c1cb78311edf24fc">lxNorm</a> (tvec3< T, P > const &x, unsigned int Depth)</td></tr>
+<tr class="separator:gaab931b0d1acfe2f9c1cb78311edf24fc"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00211.html">GLM_GTX_norm</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd>
+<dd>
+<a class="el" href="a00220.html" title="Extented quaternion types and functions. ">GLM_GTX_quaternion</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00074_source.html">norm.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00074_source.html b/src/third_party/glm/doc/api/a00074_source.html
new file mode 100644
index 0000000..338fb74
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00074_source.html
@@ -0,0 +1,121 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: norm.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">norm.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00074.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "../detail/func_geometric.hpp"</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "../gtx/quaternion.hpp"</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_norm extension included")</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> {</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  GLM_FUNC_DECL T <a class="code" href="a00211.html#ga6d326d62fd9b7f4f0a1b79e56492a7e4">length2</a>(</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  vecType<T, P> <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  GLM_FUNC_DECL T <a class="code" href="a00211.html#ga647d2602008801d6ed78f9708eb439cc">distance2</a>(</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  vecType<T, P> <span class="keyword">const</span> & p0,</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  vecType<T, P> <span class="keyword">const</span> & p1);</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  GLM_FUNC_DECL T <a class="code" href="a00211.html#ga6d5964f09cdb43803496a5ee3ced71cb">l1Norm</a>(</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  tvec3<T, P> <span class="keyword">const</span> & x,</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  tvec3<T, P> <span class="keyword">const</span> & y);</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  </div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  GLM_FUNC_DECL T <a class="code" href="a00211.html#ga6d5964f09cdb43803496a5ee3ced71cb">l1Norm</a>(</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  tvec3<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  </div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  GLM_FUNC_DECL T <a class="code" href="a00211.html#ga0a8cb8a0ce88d1d977de23209bf04610">l2Norm</a>(</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  tvec3<T, P> <span class="keyword">const</span> & x,</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  tvec3<T, P> <span class="keyword">const</span> & y);</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  </div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  GLM_FUNC_DECL T <a class="code" href="a00211.html#ga0a8cb8a0ce88d1d977de23209bf04610">l2Norm</a>(</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  tvec3<T, P> <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  </div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  GLM_FUNC_DECL T <a class="code" href="a00211.html#gaab931b0d1acfe2f9c1cb78311edf24fc">lxNorm</a>(</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  tvec3<T, P> <span class="keyword">const</span> & x,</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  tvec3<T, P> <span class="keyword">const</span> & y,</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> Depth);</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  GLM_FUNC_DECL T <a class="code" href="a00211.html#gaab931b0d1acfe2f9c1cb78311edf24fc">lxNorm</a>(</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  tvec3<T, P> <span class="keyword">const</span> & x,</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> Depth);</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="preprocessor">#include "norm.inl"</span></div>
+<div class="ttc" id="a00211_html_ga0a8cb8a0ce88d1d977de23209bf04610"><div class="ttname"><a href="a00211.html#ga0a8cb8a0ce88d1d977de23209bf04610">glm::l2Norm</a></div><div class="ttdeci">GLM_FUNC_DECL T l2Norm(tvec3< T, P > const &x)</div><div class="ttdoc">Returns the L2 norm of v. </div></div>
+<div class="ttc" id="a00211_html_ga647d2602008801d6ed78f9708eb439cc"><div class="ttname"><a href="a00211.html#ga647d2602008801d6ed78f9708eb439cc">glm::distance2</a></div><div class="ttdeci">GLM_FUNC_DECL T distance2(vecType< T, P > const &p0, vecType< T, P > const &p1)</div><div class="ttdoc">Returns the squared distance between p0 and p1, i.e., length2(p0 - p1). </div></div>
+<div class="ttc" id="a00211_html_ga6d5964f09cdb43803496a5ee3ced71cb"><div class="ttname"><a href="a00211.html#ga6d5964f09cdb43803496a5ee3ced71cb">glm::l1Norm</a></div><div class="ttdeci">GLM_FUNC_DECL T l1Norm(tvec3< T, P > const &v)</div><div class="ttdoc">Returns the L1 norm of v. </div></div>
+<div class="ttc" id="a00211_html_gaab931b0d1acfe2f9c1cb78311edf24fc"><div class="ttname"><a href="a00211.html#gaab931b0d1acfe2f9c1cb78311edf24fc">glm::lxNorm</a></div><div class="ttdeci">GLM_FUNC_DECL T lxNorm(tvec3< T, P > const &x, unsigned int Depth)</div><div class="ttdoc">Returns the L norm of v. </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00211_html_ga6d326d62fd9b7f4f0a1b79e56492a7e4"><div class="ttname"><a href="a00211.html#ga6d326d62fd9b7f4f0a1b79e56492a7e4">glm::length2</a></div><div class="ttdeci">GLM_FUNC_DECL T length2(vecType< T, P > const &x)</div><div class="ttdoc">Returns the squared length of x. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00075.html b/src/third_party/glm/doc/api/a00075.html
new file mode 100644
index 0000000..4b81acb
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00075.html
@@ -0,0 +1,78 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: normal.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">normal.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00075_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga7842850bcda582f1756883e3ed950e14"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga7842850bcda582f1756883e3ed950e14"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00212.html#ga7842850bcda582f1756883e3ed950e14">triangleNormal</a> (tvec3< T, P > const &p1, tvec3< T, P > const &p2, tvec3< T, P > const &p3)</td></tr>
+<tr class="separator:ga7842850bcda582f1756883e3ed950e14"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00212.html">GLM_GTX_normal</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd>
+<dd>
+<a class="el" href="a00192.html" title="Min and max functions for 3 to 4 parameters. ">GLM_GTX_extented_min_max</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00075_source.html">normal.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00075_source.html b/src/third_party/glm/doc/api/a00075_source.html
new file mode 100644
index 0000000..10ded47
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00075_source.html
@@ -0,0 +1,84 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: normal.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">normal.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00075.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "../glm.hpp"</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_normal extension included")</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> {</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> </div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  GLM_FUNC_DECL tvec3<T, P> <a class="code" href="a00212.html#ga7842850bcda582f1756883e3ed950e14">triangleNormal</a>(</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  tvec3<T, P> <span class="keyword">const</span> & p1, </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  tvec3<T, P> <span class="keyword">const</span> & p2, </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  tvec3<T, P> <span class="keyword">const</span> & p3);</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#include "normal.inl"</span></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00212_html_ga7842850bcda582f1756883e3ed950e14"><div class="ttname"><a href="a00212.html#ga7842850bcda582f1756883e3ed950e14">glm::triangleNormal</a></div><div class="ttdeci">GLM_FUNC_DECL tvec3< T, P > triangleNormal(tvec3< T, P > const &p1, tvec3< T, P > const &p2, tvec3< T, P > const &p3)</div><div class="ttdoc">Computes triangle normal from triangle points. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00076.html b/src/third_party/glm/doc/api/a00076.html
new file mode 100644
index 0000000..006af46
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00076.html
@@ -0,0 +1,81 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: normalize_dot.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">normalize_dot.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00076_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga8593b21bc2fe22184f01d5e08b5a2024"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga8593b21bc2fe22184f01d5e08b5a2024"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00213.html#ga8593b21bc2fe22184f01d5e08b5a2024">fastNormalizeDot</a> (vecType< T, P > const &x, vecType< T, P > const &y)</td></tr>
+<tr class="separator:ga8593b21bc2fe22184f01d5e08b5a2024"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaffbc2f2cb15838de8886a68048f9004d"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gaffbc2f2cb15838de8886a68048f9004d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00213.html#gaffbc2f2cb15838de8886a68048f9004d">normalizeDot</a> (vecType< T, P > const &x, vecType< T, P > const &y)</td></tr>
+<tr class="separator:gaffbc2f2cb15838de8886a68048f9004d"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00213.html">GLM_GTX_normalize_dot</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd>
+<dd>
+<a class="el" href="a00194.html" title="Fast but less accurate implementations of square root based functions. ">GLM_GTX_fast_square_root</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00076_source.html">normalize_dot.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00076_source.html b/src/third_party/glm/doc/api/a00076_source.html
new file mode 100644
index 0000000..ebf199d
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00076_source.html
@@ -0,0 +1,85 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: normalize_dot.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">normalize_dot.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00076.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "../gtx/fast_square_root.hpp"</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_normalize_dot extension included")</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> {</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  GLM_FUNC_DECL T <a class="code" href="a00213.html#gaffbc2f2cb15838de8886a68048f9004d">normalizeDot</a>(vecType<T, P> <span class="keyword">const</span> & x, vecType<T, P> <span class="keyword">const</span> & y);</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  GLM_FUNC_DECL T <a class="code" href="a00213.html#ga8593b21bc2fe22184f01d5e08b5a2024">fastNormalizeDot</a>(vecType<T, P> <span class="keyword">const</span> & x, vecType<T, P> <span class="keyword">const</span> & y);</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor">#include "normalize_dot.inl"</span></div>
+<div class="ttc" id="a00213_html_gaffbc2f2cb15838de8886a68048f9004d"><div class="ttname"><a href="a00213.html#gaffbc2f2cb15838de8886a68048f9004d">glm::normalizeDot</a></div><div class="ttdeci">GLM_FUNC_DECL T normalizeDot(vecType< T, P > const &x, vecType< T, P > const &y)</div><div class="ttdoc">Normalize parameters and returns the dot product of x and y. </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00213_html_ga8593b21bc2fe22184f01d5e08b5a2024"><div class="ttname"><a href="a00213.html#ga8593b21bc2fe22184f01d5e08b5a2024">glm::fastNormalizeDot</a></div><div class="ttdeci">GLM_FUNC_DECL T fastNormalizeDot(vecType< T, P > const &x, vecType< T, P > const &y)</div><div class="ttdoc">Normalize parameters and returns the dot product of x and y. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00077.html b/src/third_party/glm/doc/api/a00077.html
new file mode 100644
index 0000000..8a57be2
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00077.html
@@ -0,0 +1,107 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: number_precision.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#typedef-members">Typedefs</a> </div>
+ <div class="headertitle">
+<div class="title">number_precision.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00077_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ga145ad477a2a3e152855511c3b52469a6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga145ad477a2a3e152855511c3b52469a6"></a>
+typedef f32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga145ad477a2a3e152855511c3b52469a6">f32mat1</a></td></tr>
+<tr class="separator:ga145ad477a2a3e152855511c3b52469a6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac88c6a4dbfc380aa26e3adbbade36348"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac88c6a4dbfc380aa26e3adbbade36348"></a>
+typedef f32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#gac88c6a4dbfc380aa26e3adbbade36348">f32mat1x1</a></td></tr>
+<tr class="separator:gac88c6a4dbfc380aa26e3adbbade36348"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga07f8d7348eb7ae059a84c118fdfeb943"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga07f8d7348eb7ae059a84c118fdfeb943"></a>
+typedef f32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga07f8d7348eb7ae059a84c118fdfeb943">f32vec1</a></td></tr>
+<tr class="separator:ga07f8d7348eb7ae059a84c118fdfeb943"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga59bfa589419b5265d01314fcecd33435"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga59bfa589419b5265d01314fcecd33435"></a>
+typedef f64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga59bfa589419b5265d01314fcecd33435">f64mat1</a></td></tr>
+<tr class="separator:ga59bfa589419b5265d01314fcecd33435"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga448eeb08d0b7d8c43a8b292c981955fd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga448eeb08d0b7d8c43a8b292c981955fd"></a>
+typedef f64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga448eeb08d0b7d8c43a8b292c981955fd">f64mat1x1</a></td></tr>
+<tr class="separator:ga448eeb08d0b7d8c43a8b292c981955fd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae5987a61b8c03d5c432a9e62f0b3efe1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae5987a61b8c03d5c432a9e62f0b3efe1"></a>
+typedef f64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#gae5987a61b8c03d5c432a9e62f0b3efe1">f64vec1</a></td></tr>
+<tr class="separator:gae5987a61b8c03d5c432a9e62f0b3efe1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga52cc069a92e126c3a8dcde93424d2ef0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga52cc069a92e126c3a8dcde93424d2ef0"></a>
+typedef u16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga52cc069a92e126c3a8dcde93424d2ef0">u16vec1</a></td></tr>
+<tr class="separator:ga52cc069a92e126c3a8dcde93424d2ef0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9bbc1e14aea65cba5e2dcfef6a67d9f3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga9bbc1e14aea65cba5e2dcfef6a67d9f3"></a>
+typedef u32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga9bbc1e14aea65cba5e2dcfef6a67d9f3">u32vec1</a></td></tr>
+<tr class="separator:ga9bbc1e14aea65cba5e2dcfef6a67d9f3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga818de170e2584ab037130f2881925974"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga818de170e2584ab037130f2881925974"></a>
+typedef u64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga818de170e2584ab037130f2881925974">u64vec1</a></td></tr>
+<tr class="separator:ga818de170e2584ab037130f2881925974"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5853fe457f4c8a6bc09343d0e9833980"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga5853fe457f4c8a6bc09343d0e9833980"></a>
+typedef u8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga5853fe457f4c8a6bc09343d0e9833980">u8vec1</a></td></tr>
+<tr class="separator:ga5853fe457f4c8a6bc09343d0e9833980"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00214.html">GLM_GTX_number_precision</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd>
+<dd>
+<a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> (dependence) </dd>
+<dd>
+<a class="el" href="a00172.html" title="Defines a templated quaternion type and several quaternion operations. ">GLM_GTC_quaternion</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00077_source.html">number_precision.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00077_source.html b/src/third_party/glm/doc/api/a00077_source.html
new file mode 100644
index 0000000..a5a344e
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00077_source.html
@@ -0,0 +1,115 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: number_precision.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">number_precision.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00077.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "../glm.hpp"</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include "../gtc/type_precision.hpp"</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_number_precision extension included")</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a>{</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">namespace </span>gtx</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> {</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="comment">// Unsigned int vector types </span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="a00214.html#ga5853fe457f4c8a6bc09343d0e9833980"> 34</a></span>  <span class="keyword">typedef</span> <a class="code" href="a00177.html#gaecc7082561fc9028b844b6cf3d305d36">u8</a> <a class="code" href="a00214.html#ga5853fe457f4c8a6bc09343d0e9833980">u8vec1</a>; </div>
+<div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="a00214.html#ga52cc069a92e126c3a8dcde93424d2ef0"> 35</a></span>  <span class="keyword">typedef</span> <a class="code" href="a00177.html#gaa2d7acc0adb536fab71fe261232a40ff">u16</a> <a class="code" href="a00214.html#ga52cc069a92e126c3a8dcde93424d2ef0">u16vec1</a>; </div>
+<div class="line"><a name="l00036"></a><span class="lineno"><a class="line" href="a00214.html#ga9bbc1e14aea65cba5e2dcfef6a67d9f3"> 36</a></span>  <span class="keyword">typedef</span> <a class="code" href="a00177.html#ga8165913e068444f7842302d40ba897b9">u32</a> <a class="code" href="a00214.html#ga9bbc1e14aea65cba5e2dcfef6a67d9f3">u32vec1</a>; </div>
+<div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="a00214.html#ga818de170e2584ab037130f2881925974"> 37</a></span>  <span class="keyword">typedef</span> <a class="code" href="a00177.html#gaf3f312156984c365e9f65620354da70b">u64</a> <a class="code" href="a00214.html#ga818de170e2584ab037130f2881925974">u64vec1</a>; </div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="comment">// Float vector types </span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="a00214.html#ga07f8d7348eb7ae059a84c118fdfeb943"> 42</a></span>  <span class="keyword">typedef</span> <a class="code" href="a00177.html#gabe6a542dd6c1d5ffd847f1b9b4c9c9b7">f32</a> <a class="code" href="a00214.html#ga07f8d7348eb7ae059a84c118fdfeb943">f32vec1</a>; </div>
+<div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="a00214.html#gae5987a61b8c03d5c432a9e62f0b3efe1"> 43</a></span>  <span class="keyword">typedef</span> <a class="code" href="a00177.html#ga1d794d240091678f602e8de225b8d8c9">f64</a> <a class="code" href="a00214.html#gae5987a61b8c03d5c432a9e62f0b3efe1">f64vec1</a>; </div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="comment">// Float matrix types </span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="a00214.html#ga145ad477a2a3e152855511c3b52469a6"> 48</a></span>  <span class="keyword">typedef</span> <a class="code" href="a00177.html#gabe6a542dd6c1d5ffd847f1b9b4c9c9b7">f32</a> <a class="code" href="a00214.html#ga145ad477a2a3e152855511c3b52469a6">f32mat1</a>; </div>
+<div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="a00214.html#gac88c6a4dbfc380aa26e3adbbade36348"> 49</a></span>  <span class="keyword">typedef</span> <a class="code" href="a00177.html#gabe6a542dd6c1d5ffd847f1b9b4c9c9b7">f32</a> <a class="code" href="a00214.html#gac88c6a4dbfc380aa26e3adbbade36348">f32mat1x1</a>; </div>
+<div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="a00214.html#ga59bfa589419b5265d01314fcecd33435"> 50</a></span>  <span class="keyword">typedef</span> <a class="code" href="a00177.html#ga1d794d240091678f602e8de225b8d8c9">f64</a> <a class="code" href="a00214.html#ga59bfa589419b5265d01314fcecd33435">f64mat1</a>; </div>
+<div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="a00214.html#ga448eeb08d0b7d8c43a8b292c981955fd"> 51</a></span>  <span class="keyword">typedef</span> <a class="code" href="a00177.html#ga1d794d240091678f602e8de225b8d8c9">f64</a> <a class="code" href="a00214.html#ga448eeb08d0b7d8c43a8b292c981955fd">f64mat1x1</a>; </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> }<span class="comment">//namespace gtx</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="preprocessor">#include "number_precision.inl"</span></div>
+<div class="ttc" id="a00177_html_ga1d794d240091678f602e8de225b8d8c9"><div class="ttname"><a href="a00177.html#ga1d794d240091678f602e8de225b8d8c9">glm::f64</a></div><div class="ttdeci">highp_float64_t f64</div><div class="ttdoc">Default 64 bit double-precision floating-point scalar. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l01509">fwd.hpp:1509</a></div></div>
+<div class="ttc" id="a00214_html_gac88c6a4dbfc380aa26e3adbbade36348"><div class="ttname"><a href="a00214.html#gac88c6a4dbfc380aa26e3adbbade36348">glm::gtx::f32mat1x1</a></div><div class="ttdeci">f32 f32mat1x1</div><div class="ttdoc">Single-precision floating-point scalar. (from GLM_GTX_number_precision extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00077_source.html#l00049">number_precision.hpp:49</a></div></div>
+<div class="ttc" id="a00214_html_ga145ad477a2a3e152855511c3b52469a6"><div class="ttname"><a href="a00214.html#ga145ad477a2a3e152855511c3b52469a6">glm::gtx::f32mat1</a></div><div class="ttdeci">f32 f32mat1</div><div class="ttdoc">Single-precision floating-point scalar. (from GLM_GTX_number_precision extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00077_source.html#l00048">number_precision.hpp:48</a></div></div>
+<div class="ttc" id="a00177_html_ga8165913e068444f7842302d40ba897b9"><div class="ttname"><a href="a00177.html#ga8165913e068444f7842302d40ba897b9">glm::u32</a></div><div class="ttdeci">detail::uint32 u32</div><div class="ttdoc">32 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00902">fwd.hpp:902</a></div></div>
+<div class="ttc" id="a00214_html_ga9bbc1e14aea65cba5e2dcfef6a67d9f3"><div class="ttname"><a href="a00214.html#ga9bbc1e14aea65cba5e2dcfef6a67d9f3">glm::gtx::u32vec1</a></div><div class="ttdeci">u32 u32vec1</div><div class="ttdoc">32bit unsigned integer scalar. (from GLM_GTX_number_precision extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00077_source.html#l00036">number_precision.hpp:36</a></div></div>
+<div class="ttc" id="a00214_html_ga448eeb08d0b7d8c43a8b292c981955fd"><div class="ttname"><a href="a00214.html#ga448eeb08d0b7d8c43a8b292c981955fd">glm::gtx::f64mat1x1</a></div><div class="ttdeci">f64 f64mat1x1</div><div class="ttdoc">Double-precision floating-point scalar. (from GLM_GTX_number_precision extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00077_source.html#l00051">number_precision.hpp:51</a></div></div>
+<div class="ttc" id="a00214_html_ga818de170e2584ab037130f2881925974"><div class="ttname"><a href="a00214.html#ga818de170e2584ab037130f2881925974">glm::gtx::u64vec1</a></div><div class="ttdeci">u64 u64vec1</div><div class="ttdoc">64bit unsigned integer scalar. (from GLM_GTX_number_precision extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00077_source.html#l00037">number_precision.hpp:37</a></div></div>
+<div class="ttc" id="a00214_html_ga5853fe457f4c8a6bc09343d0e9833980"><div class="ttname"><a href="a00214.html#ga5853fe457f4c8a6bc09343d0e9833980">glm::gtx::u8vec1</a></div><div class="ttdeci">u8 u8vec1</div><div class="ttdoc">8bit unsigned integer scalar. (from GLM_GTX_number_precision extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00077_source.html#l00034">number_precision.hpp:34</a></div></div>
+<div class="ttc" id="a00177_html_gaa2d7acc0adb536fab71fe261232a40ff"><div class="ttname"><a href="a00177.html#gaa2d7acc0adb536fab71fe261232a40ff">glm::u16</a></div><div class="ttdeci">detail::uint16 u16</div><div class="ttdoc">16 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00898">fwd.hpp:898</a></div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00214_html_gae5987a61b8c03d5c432a9e62f0b3efe1"><div class="ttname"><a href="a00214.html#gae5987a61b8c03d5c432a9e62f0b3efe1">glm::gtx::f64vec1</a></div><div class="ttdeci">f64 f64vec1</div><div class="ttdoc">Single-precision floating-point scalar. (from GLM_GTX_number_precision extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00077_source.html#l00043">number_precision.hpp:43</a></div></div>
+<div class="ttc" id="a00214_html_ga07f8d7348eb7ae059a84c118fdfeb943"><div class="ttname"><a href="a00214.html#ga07f8d7348eb7ae059a84c118fdfeb943">glm::gtx::f32vec1</a></div><div class="ttdeci">f32 f32vec1</div><div class="ttdoc">Single-precision floating-point scalar. (from GLM_GTX_number_precision extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00077_source.html#l00042">number_precision.hpp:42</a></div></div>
+<div class="ttc" id="a00214_html_ga59bfa589419b5265d01314fcecd33435"><div class="ttname"><a href="a00214.html#ga59bfa589419b5265d01314fcecd33435">glm::gtx::f64mat1</a></div><div class="ttdeci">f64 f64mat1</div><div class="ttdoc">Double-precision floating-point scalar. (from GLM_GTX_number_precision extension) ...</div><div class="ttdef"><b>Definition:</b> <a href="a00077_source.html#l00050">number_precision.hpp:50</a></div></div>
+<div class="ttc" id="a00177_html_gaecc7082561fc9028b844b6cf3d305d36"><div class="ttname"><a href="a00177.html#gaecc7082561fc9028b844b6cf3d305d36">glm::u8</a></div><div class="ttdeci">detail::uint8 u8</div><div class="ttdoc">8 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00894">fwd.hpp:894</a></div></div>
+<div class="ttc" id="a00177_html_gaf3f312156984c365e9f65620354da70b"><div class="ttname"><a href="a00177.html#gaf3f312156984c365e9f65620354da70b">glm::u64</a></div><div class="ttdeci">detail::uint64 u64</div><div class="ttdoc">64 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00906">fwd.hpp:906</a></div></div>
+<div class="ttc" id="a00214_html_ga52cc069a92e126c3a8dcde93424d2ef0"><div class="ttname"><a href="a00214.html#ga52cc069a92e126c3a8dcde93424d2ef0">glm::gtx::u16vec1</a></div><div class="ttdeci">u16 u16vec1</div><div class="ttdoc">16bit unsigned integer scalar. (from GLM_GTX_number_precision extension) </div><div class="ttdef"><b>Definition:</b> <a href="a00077_source.html#l00035">number_precision.hpp:35</a></div></div>
+<div class="ttc" id="a00177_html_gabe6a542dd6c1d5ffd847f1b9b4c9c9b7"><div class="ttname"><a href="a00177.html#gabe6a542dd6c1d5ffd847f1b9b4c9c9b7">glm::f32</a></div><div class="ttdeci">highp_float32_t f32</div><div class="ttdoc">Default 32 bit single-precision floating-point scalar. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l01505">fwd.hpp:1505</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00078.html b/src/third_party/glm/doc/api/a00078.html
new file mode 100644
index 0000000..132cd1d
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00078.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: optimum_pow.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">optimum_pow.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00078_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga19aaff3213bf23bdec3ef124ace237e9"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga19aaff3213bf23bdec3ef124ace237e9"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00215.html#ga19aaff3213bf23bdec3ef124ace237e9">pow2</a> (genType const &x)</td></tr>
+<tr class="separator:ga19aaff3213bf23bdec3ef124ace237e9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga35689d03cd434d6ea819f1942d3bf82e"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga35689d03cd434d6ea819f1942d3bf82e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00215.html#ga35689d03cd434d6ea819f1942d3bf82e">pow3</a> (genType const &x)</td></tr>
+<tr class="separator:ga35689d03cd434d6ea819f1942d3bf82e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gacef0968763026e180e53e735007dbf5a"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gacef0968763026e180e53e735007dbf5a"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00215.html#gacef0968763026e180e53e735007dbf5a">pow4</a> (genType const &x)</td></tr>
+<tr class="separator:gacef0968763026e180e53e735007dbf5a"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00215.html">GLM_GTX_optimum_pow</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00078_source.html">optimum_pow.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00078_source.html b/src/third_party/glm/doc/api/a00078_source.html
new file mode 100644
index 0000000..56eded1
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00078_source.html
@@ -0,0 +1,91 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: optimum_pow.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">optimum_pow.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00078.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include "../glm.hpp"</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_optimum_pow extension included")</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a>{</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="keyword">namespace </span>gtx</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> {</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  GLM_FUNC_DECL genType <a class="code" href="a00215.html#ga19aaff3213bf23bdec3ef124ace237e9">pow2</a>(genType <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  GLM_FUNC_DECL genType <a class="code" href="a00215.html#ga35689d03cd434d6ea819f1942d3bf82e">pow3</a>(genType <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  GLM_FUNC_DECL genType <a class="code" href="a00215.html#gacef0968763026e180e53e735007dbf5a">pow4</a>(genType <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> }<span class="comment">//namespace gtx</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="preprocessor">#include "optimum_pow.inl"</span></div>
+<div class="ttc" id="a00215_html_ga19aaff3213bf23bdec3ef124ace237e9"><div class="ttname"><a href="a00215.html#ga19aaff3213bf23bdec3ef124ace237e9">glm::gtx::pow2</a></div><div class="ttdeci">GLM_FUNC_DECL genType pow2(genType const &x)</div><div class="ttdoc">Returns x raised to the power of 2. </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00215_html_ga35689d03cd434d6ea819f1942d3bf82e"><div class="ttname"><a href="a00215.html#ga35689d03cd434d6ea819f1942d3bf82e">glm::gtx::pow3</a></div><div class="ttdeci">GLM_FUNC_DECL genType pow3(genType const &x)</div><div class="ttdoc">Returns x raised to the power of 3. </div></div>
+<div class="ttc" id="a00215_html_gacef0968763026e180e53e735007dbf5a"><div class="ttname"><a href="a00215.html#gacef0968763026e180e53e735007dbf5a">glm::gtx::pow4</a></div><div class="ttdeci">GLM_FUNC_DECL genType pow4(genType const &x)</div><div class="ttdoc">Returns x raised to the power of 4. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00079.html b/src/third_party/glm/doc/api/a00079.html
new file mode 100644
index 0000000..1926924
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00079.html
@@ -0,0 +1,81 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: orthonormalize.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">orthonormalize.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00079_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga23c4340b8f1559d259229b6d8bdc3f97"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga23c4340b8f1559d259229b6d8bdc3f97"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat3x3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00216.html#ga23c4340b8f1559d259229b6d8bdc3f97">orthonormalize</a> (tmat3x3< T, P > const &m)</td></tr>
+<tr class="separator:ga23c4340b8f1559d259229b6d8bdc3f97"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad7afff30d7323fdc7aed7f5a16a0c596"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gad7afff30d7323fdc7aed7f5a16a0c596"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00216.html#gad7afff30d7323fdc7aed7f5a16a0c596">orthonormalize</a> (tvec3< T, P > const &x, tvec3< T, P > const &y)</td></tr>
+<tr class="separator:gad7afff30d7323fdc7aed7f5a16a0c596"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00216.html">GLM_GTX_orthonormalize</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd>
+<dd>
+<a class="el" href="a00192.html" title="Min and max functions for 3 to 4 parameters. ">GLM_GTX_extented_min_max</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00079_source.html">orthonormalize.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00079_source.html b/src/third_party/glm/doc/api/a00079_source.html
new file mode 100644
index 0000000..5152cb9
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00079_source.html
@@ -0,0 +1,86 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: orthonormalize.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">orthonormalize.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00079.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "../vec3.hpp"</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "../mat3x3.hpp"</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include "../geometric.hpp"</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_orthonormalize extension included")</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> {</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  GLM_FUNC_DECL tmat3x3<T, P> <a class="code" href="a00216.html#gad7afff30d7323fdc7aed7f5a16a0c596">orthonormalize</a>(tmat3x3<T, P> <span class="keyword">const</span> & m);</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  GLM_FUNC_DECL tvec3<T, P> <a class="code" href="a00216.html#gad7afff30d7323fdc7aed7f5a16a0c596">orthonormalize</a>(tvec3<T, P> <span class="keyword">const</span> & x, tvec3<T, P> <span class="keyword">const</span> & y);</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor">#include "orthonormalize.inl"</span></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00216_html_gad7afff30d7323fdc7aed7f5a16a0c596"><div class="ttname"><a href="a00216.html#gad7afff30d7323fdc7aed7f5a16a0c596">glm::orthonormalize</a></div><div class="ttdeci">GLM_FUNC_DECL tvec3< T, P > orthonormalize(tvec3< T, P > const &x, tvec3< T, P > const &y)</div><div class="ttdoc">Orthonormalizes x according y. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00080.html b/src/third_party/glm/doc/api/a00080.html
new file mode 100644
index 0000000..fd1c602
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00080.html
@@ -0,0 +1,175 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: packing.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_9440d7c11b99dcd7e5d369c7cf9802fe.html">gtc</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">gtc/packing.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00080_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga4944ad465ff950e926d49621f916c78d"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga4944ad465ff950e926d49621f916c78d">packF2x11_1x10</a> (vec3 const &v)</td></tr>
+<tr class="separator:ga4944ad465ff950e926d49621f916c78d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3f648fc205467792dc6d8c59c748f8a6"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga3f648fc205467792dc6d8c59c748f8a6">packF3x9_E1x5</a> (vec3 const &v)</td></tr>
+<tr class="separator:ga3f648fc205467792dc6d8c59c748f8a6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga896d806b72e390eb953786cca3632ec9"><td class="memTemplParams" colspan="2">template<precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga896d806b72e390eb953786cca3632ec9"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< uint16, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00171.html#ga896d806b72e390eb953786cca3632ec9">packHalf</a> (vecType< float, P > const &v)</td></tr>
+<tr class="separator:ga896d806b72e390eb953786cca3632ec9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga43f2093b6ff192a79058ff7834fc3528"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga43f2093b6ff192a79058ff7834fc3528">packHalf1x16</a> (float v)</td></tr>
+<tr class="separator:ga43f2093b6ff192a79058ff7834fc3528"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafe2f7b39caf8f5ec555e1c059ec530e6"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#gafe2f7b39caf8f5ec555e1c059ec530e6">packHalf4x16</a> (vec4 const &v)</td></tr>
+<tr class="separator:gafe2f7b39caf8f5ec555e1c059ec530e6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga06ecb6afb902dba45419008171db9023"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga06ecb6afb902dba45419008171db9023">packI3x10_1x2</a> (ivec4 const &v)</td></tr>
+<tr class="separator:ga06ecb6afb902dba45419008171db9023"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1be760860697db386b36513aeafe9d5e"><td class="memTemplParams" colspan="2">template<typename intType , typename floatType , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga1be760860697db386b36513aeafe9d5e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< intType, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00171.html#ga1be760860697db386b36513aeafe9d5e">packSnorm</a> (vecType< floatType, P > const &v)</td></tr>
+<tr class="separator:ga1be760860697db386b36513aeafe9d5e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab22f8bcfdb5fc65af4701b25f143c1af"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#gab22f8bcfdb5fc65af4701b25f143c1af">packSnorm1x16</a> (float v)</td></tr>
+<tr class="separator:gab22f8bcfdb5fc65af4701b25f143c1af"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae3592e0795e62aaa1865b3a10496a7a1"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#gae3592e0795e62aaa1865b3a10496a7a1">packSnorm1x8</a> (float s)</td></tr>
+<tr class="separator:gae3592e0795e62aaa1865b3a10496a7a1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6be3cfb2cce3702f03e91bbeb5286d7e"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga6be3cfb2cce3702f03e91bbeb5286d7e">packSnorm2x8</a> (vec2 const &v)</td></tr>
+<tr class="separator:ga6be3cfb2cce3702f03e91bbeb5286d7e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab997545661877d2c7362a5084d3897d3"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#gab997545661877d2c7362a5084d3897d3">packSnorm3x10_1x2</a> (vec4 const &v)</td></tr>
+<tr class="separator:gab997545661877d2c7362a5084d3897d3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga358943934d21da947d5bcc88c2ab7832"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga358943934d21da947d5bcc88c2ab7832">packSnorm4x16</a> (vec4 const &v)</td></tr>
+<tr class="separator:ga358943934d21da947d5bcc88c2ab7832"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gada3d88d59f0f458f9c51a9fd359a4bc0"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#gada3d88d59f0f458f9c51a9fd359a4bc0">packU3x10_1x2</a> (uvec4 const &v)</td></tr>
+<tr class="separator:gada3d88d59f0f458f9c51a9fd359a4bc0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gacb9a3df68172c1193c9d701a3fa4d88b"><td class="memTemplParams" colspan="2">template<typename uintType , typename floatType , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gacb9a3df68172c1193c9d701a3fa4d88b"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< uintType, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00171.html#gacb9a3df68172c1193c9d701a3fa4d88b">packUnorm</a> (vecType< floatType, P > const &v)</td></tr>
+<tr class="separator:gacb9a3df68172c1193c9d701a3fa4d88b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9f82737bf2a44bedff1d286b76837886"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga9f82737bf2a44bedff1d286b76837886">packUnorm1x16</a> (float v)</td></tr>
+<tr class="separator:ga9f82737bf2a44bedff1d286b76837886"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga768e0337dd6246773f14aa0a421fe9a8"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga768e0337dd6246773f14aa0a421fe9a8">packUnorm1x5_1x6_1x5</a> (vec3 const &v)</td></tr>
+<tr class="separator:ga768e0337dd6246773f14aa0a421fe9a8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4b2fa60df3460403817d28b082ee0736"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga4b2fa60df3460403817d28b082ee0736">packUnorm1x8</a> (float v)</td></tr>
+<tr class="separator:ga4b2fa60df3460403817d28b082ee0736"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7f9abdb50f9be1aa1c14912504a0d98d"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga7f9abdb50f9be1aa1c14912504a0d98d">packUnorm2x3_1x2</a> (vec3 const &v)</td></tr>
+<tr class="separator:ga7f9abdb50f9be1aa1c14912504a0d98d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab6bbd5be3b8e6db538ecb33a7844481c"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#gab6bbd5be3b8e6db538ecb33a7844481c">packUnorm2x4</a> (vec2 const &v)</td></tr>
+<tr class="separator:gab6bbd5be3b8e6db538ecb33a7844481c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9a666b1c688ab54100061ed06526de6e"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga9a666b1c688ab54100061ed06526de6e">packUnorm2x8</a> (vec2 const &v)</td></tr>
+<tr class="separator:ga9a666b1c688ab54100061ed06526de6e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8a1ee625d2707c60530fb3fca2980b19"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga8a1ee625d2707c60530fb3fca2980b19">packUnorm3x10_1x2</a> (vec4 const &v)</td></tr>
+<tr class="separator:ga8a1ee625d2707c60530fb3fca2980b19"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaec4112086d7fb133bea104a7c237de52"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#gaec4112086d7fb133bea104a7c237de52">packUnorm3x5_1x1</a> (vec4 const &v)</td></tr>
+<tr class="separator:gaec4112086d7fb133bea104a7c237de52"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1f63c264e7ab63264e2b2a99fd393897"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga1f63c264e7ab63264e2b2a99fd393897">packUnorm4x16</a> (vec4 const &v)</td></tr>
+<tr class="separator:ga1f63c264e7ab63264e2b2a99fd393897"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad3e7e3ce521513584a53aedc5f9765c1"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#gad3e7e3ce521513584a53aedc5f9765c1">packUnorm4x4</a> (vec4 const &v)</td></tr>
+<tr class="separator:gad3e7e3ce521513584a53aedc5f9765c1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2b1fd1e854705b1345e98409e0a25e50"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL vec3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga2b1fd1e854705b1345e98409e0a25e50">unpackF2x11_1x10</a> (uint32 p)</td></tr>
+<tr class="separator:ga2b1fd1e854705b1345e98409e0a25e50"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab9e60ebe3ad3eeced6a9ec6eb876d74e"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL vec3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#gab9e60ebe3ad3eeced6a9ec6eb876d74e">unpackF3x9_E1x5</a> (uint32 p)</td></tr>
+<tr class="separator:gab9e60ebe3ad3eeced6a9ec6eb876d74e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf3f9387834f8d8beadfe723c1dd247a7"><td class="memTemplParams" colspan="2">template<precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gaf3f9387834f8d8beadfe723c1dd247a7"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< float, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00171.html#gaf3f9387834f8d8beadfe723c1dd247a7">unpackHalf</a> (vecType< uint16, P > const &p)</td></tr>
+<tr class="separator:gaf3f9387834f8d8beadfe723c1dd247a7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac37dedaba24b00adb4ec6e8f92c19dbf"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL float </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#gac37dedaba24b00adb4ec6e8f92c19dbf">unpackHalf1x16</a> (uint16 v)</td></tr>
+<tr class="separator:gac37dedaba24b00adb4ec6e8f92c19dbf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga57dfc41b2eb20b0ac00efae7d9c49dcd"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL vec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga57dfc41b2eb20b0ac00efae7d9c49dcd">unpackHalf4x16</a> (uint64 p)</td></tr>
+<tr class="separator:ga57dfc41b2eb20b0ac00efae7d9c49dcd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9a05330e5490be0908d3b117d82aff56"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL ivec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga9a05330e5490be0908d3b117d82aff56">unpackI3x10_1x2</a> (uint32 p)</td></tr>
+<tr class="separator:ga9a05330e5490be0908d3b117d82aff56"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga63eeec0d416e48462f341f4a7a9a45fe"><td class="memTemplParams" colspan="2">template<typename intType , typename floatType , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga63eeec0d416e48462f341f4a7a9a45fe"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< floatType, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00171.html#ga63eeec0d416e48462f341f4a7a9a45fe">unpackSnorm</a> (vecType< intType, P > const &v)</td></tr>
+<tr class="separator:ga63eeec0d416e48462f341f4a7a9a45fe"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga96dd15002370627a443c835ab03a766c"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL float </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga96dd15002370627a443c835ab03a766c">unpackSnorm1x16</a> (uint16 p)</td></tr>
+<tr class="separator:ga96dd15002370627a443c835ab03a766c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4851ff86678aa1c7ace9d67846894285"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL float </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga4851ff86678aa1c7ace9d67846894285">unpackSnorm1x8</a> (uint8 p)</td></tr>
+<tr class="separator:ga4851ff86678aa1c7ace9d67846894285"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8b128e89be449fc71336968a66bf6e1a"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL vec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga8b128e89be449fc71336968a66bf6e1a">unpackSnorm2x8</a> (uint16 p)</td></tr>
+<tr class="separator:ga8b128e89be449fc71336968a66bf6e1a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7a4fbf79be9740e3c57737bc2af05e5b"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL vec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga7a4fbf79be9740e3c57737bc2af05e5b">unpackSnorm3x10_1x2</a> (uint32 p)</td></tr>
+<tr class="separator:ga7a4fbf79be9740e3c57737bc2af05e5b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaaddf9c353528fe896106f7181219c7f4"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL vec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#gaaddf9c353528fe896106f7181219c7f4">unpackSnorm4x16</a> (uint64 p)</td></tr>
+<tr class="separator:gaaddf9c353528fe896106f7181219c7f4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga48df3042a7d079767f5891a1bfd8a60a"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uvec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga48df3042a7d079767f5891a1bfd8a60a">unpackU3x10_1x2</a> (uint32 p)</td></tr>
+<tr class="separator:ga48df3042a7d079767f5891a1bfd8a60a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad3d7e1ec7fcfb7ae341658e2ce1c3bd9"><td class="memTemplParams" colspan="2">template<typename uintType , typename floatType , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gad3d7e1ec7fcfb7ae341658e2ce1c3bd9"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< floatType, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00171.html#gad3d7e1ec7fcfb7ae341658e2ce1c3bd9">unpackUnorm</a> (vecType< uintType, P > const &v)</td></tr>
+<tr class="separator:gad3d7e1ec7fcfb7ae341658e2ce1c3bd9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga83d34160a5cb7bcb5339823210fc7501"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL float </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga83d34160a5cb7bcb5339823210fc7501">unpackUnorm1x16</a> (uint16 p)</td></tr>
+<tr class="separator:ga83d34160a5cb7bcb5339823210fc7501"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab3bc08ecfc0f3339be93fb2b3b56d88a"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL vec3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#gab3bc08ecfc0f3339be93fb2b3b56d88a">unpackUnorm1x5_1x6_1x5</a> (uint16 p)</td></tr>
+<tr class="separator:gab3bc08ecfc0f3339be93fb2b3b56d88a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1319207e30874fb4931a9ee913983ee1"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL float </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga1319207e30874fb4931a9ee913983ee1">unpackUnorm1x8</a> (uint8 p)</td></tr>
+<tr class="separator:ga1319207e30874fb4931a9ee913983ee1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6abd5a9014df3b5ce4059008d2491260"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL vec3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga6abd5a9014df3b5ce4059008d2491260">unpackUnorm2x3_1x2</a> (uint8 p)</td></tr>
+<tr class="separator:ga6abd5a9014df3b5ce4059008d2491260"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2e50476132fe5f27f08e273d9c70d85b"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL vec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga2e50476132fe5f27f08e273d9c70d85b">unpackUnorm2x4</a> (uint8 p)</td></tr>
+<tr class="separator:ga2e50476132fe5f27f08e273d9c70d85b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga637cbe3913dd95c6e7b4c99c61bd611f"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL vec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga637cbe3913dd95c6e7b4c99c61bd611f">unpackUnorm2x8</a> (uint16 p)</td></tr>
+<tr class="separator:ga637cbe3913dd95c6e7b4c99c61bd611f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5156d3060355fe332865da2c7f78815f"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL vec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga5156d3060355fe332865da2c7f78815f">unpackUnorm3x10_1x2</a> (uint32 p)</td></tr>
+<tr class="separator:ga5156d3060355fe332865da2c7f78815f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5ff95ff5bc16f396432ab67243dbae4d"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL vec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga5ff95ff5bc16f396432ab67243dbae4d">unpackUnorm3x5_1x1</a> (uint16 p)</td></tr>
+<tr class="separator:ga5ff95ff5bc16f396432ab67243dbae4d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2ae149c5d2473ac1e5f347bb654a242d"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL vec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga2ae149c5d2473ac1e5f347bb654a242d">unpackUnorm4x16</a> (uint64 p)</td></tr>
+<tr class="separator:ga2ae149c5d2473ac1e5f347bb654a242d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac58ee89d0e224bb6df5e8bbb18843a2d"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL vec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#gac58ee89d0e224bb6df5e8bbb18843a2d">unpackUnorm4x4</a> (uint16 p)</td></tr>
+<tr class="separator:gac58ee89d0e224bb6df5e8bbb18843a2d"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00171.html">GLM_GTC_packing</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00080_source.html">gtc/packing.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00080_source.html b/src/third_party/glm/doc/api/a00080_source.html
new file mode 100644
index 0000000..19d8a70
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00080_source.html
@@ -0,0 +1,233 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: packing.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_9440d7c11b99dcd7e5d369c7cf9802fe.html">gtc</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">gtc/packing.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00080.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "<a class="code" href="a00124.html">type_precision.hpp</a>"</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor"># pragma message("GLM: GLM_GTC_packing extension included")</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> {</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  GLM_FUNC_DECL uint8 <a class="code" href="a00171.html#ga4b2fa60df3460403817d28b082ee0736">packUnorm1x8</a>(<span class="keywordtype">float</span> v);</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  GLM_FUNC_DECL <span class="keywordtype">float</span> <a class="code" href="a00171.html#ga1319207e30874fb4931a9ee913983ee1">unpackUnorm1x8</a>(uint8 p);</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  GLM_FUNC_DECL uint16 <a class="code" href="a00171.html#ga9a666b1c688ab54100061ed06526de6e">packUnorm2x8</a>(<a class="code" href="a00157.html#ga09d0200e8ff86391d8804b4fefd5f1da">vec2</a> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  GLM_FUNC_DECL <a class="code" href="a00157.html#ga09d0200e8ff86391d8804b4fefd5f1da">vec2</a> <a class="code" href="a00171.html#ga637cbe3913dd95c6e7b4c99c61bd611f">unpackUnorm2x8</a>(uint16 p);</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  </div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  GLM_FUNC_DECL uint8 <a class="code" href="a00171.html#gae3592e0795e62aaa1865b3a10496a7a1">packSnorm1x8</a>(<span class="keywordtype">float</span> s);</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  GLM_FUNC_DECL <span class="keywordtype">float</span> <a class="code" href="a00171.html#ga4851ff86678aa1c7ace9d67846894285">unpackSnorm1x8</a>(uint8 p);</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  </div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  GLM_FUNC_DECL uint16 <a class="code" href="a00171.html#ga6be3cfb2cce3702f03e91bbeb5286d7e">packSnorm2x8</a>(<a class="code" href="a00157.html#ga09d0200e8ff86391d8804b4fefd5f1da">vec2</a> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  GLM_FUNC_DECL <a class="code" href="a00157.html#ga09d0200e8ff86391d8804b4fefd5f1da">vec2</a> <a class="code" href="a00171.html#ga8b128e89be449fc71336968a66bf6e1a">unpackSnorm2x8</a>(uint16 p);</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  </div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  GLM_FUNC_DECL uint16 <a class="code" href="a00171.html#ga9f82737bf2a44bedff1d286b76837886">packUnorm1x16</a>(<span class="keywordtype">float</span> v);</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  GLM_FUNC_DECL <span class="keywordtype">float</span> <a class="code" href="a00171.html#ga83d34160a5cb7bcb5339823210fc7501">unpackUnorm1x16</a>(uint16 p);</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  GLM_FUNC_DECL uint64 <a class="code" href="a00171.html#ga1f63c264e7ab63264e2b2a99fd393897">packUnorm4x16</a>(<a class="code" href="a00157.html#gafbab23070ca47932487d25332adc7d7c">vec4</a> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  GLM_FUNC_DECL <a class="code" href="a00157.html#gafbab23070ca47932487d25332adc7d7c">vec4</a> <a class="code" href="a00171.html#ga2ae149c5d2473ac1e5f347bb654a242d">unpackUnorm4x16</a>(uint64 p);</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  GLM_FUNC_DECL uint16 <a class="code" href="a00171.html#gab22f8bcfdb5fc65af4701b25f143c1af">packSnorm1x16</a>(<span class="keywordtype">float</span> v);</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> </div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  GLM_FUNC_DECL <span class="keywordtype">float</span> <a class="code" href="a00171.html#ga96dd15002370627a443c835ab03a766c">unpackSnorm1x16</a>(uint16 p);</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> </div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  GLM_FUNC_DECL uint64 <a class="code" href="a00171.html#ga358943934d21da947d5bcc88c2ab7832">packSnorm4x16</a>(<a class="code" href="a00157.html#gafbab23070ca47932487d25332adc7d7c">vec4</a> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> </div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  GLM_FUNC_DECL <a class="code" href="a00157.html#gafbab23070ca47932487d25332adc7d7c">vec4</a> <a class="code" href="a00171.html#gaaddf9c353528fe896106f7181219c7f4">unpackSnorm4x16</a>(uint64 p);</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  </div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  GLM_FUNC_DECL uint16 <a class="code" href="a00171.html#ga43f2093b6ff192a79058ff7834fc3528">packHalf1x16</a>(<span class="keywordtype">float</span> v);</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  </div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  GLM_FUNC_DECL <span class="keywordtype">float</span> <a class="code" href="a00171.html#gac37dedaba24b00adb4ec6e8f92c19dbf">unpackHalf1x16</a>(uint16 v);</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> </div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  GLM_FUNC_DECL uint64 <a class="code" href="a00171.html#gafe2f7b39caf8f5ec555e1c059ec530e6">packHalf4x16</a>(<a class="code" href="a00157.html#gafbab23070ca47932487d25332adc7d7c">vec4</a> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  </div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  GLM_FUNC_DECL <a class="code" href="a00157.html#gafbab23070ca47932487d25332adc7d7c">vec4</a> <a class="code" href="a00171.html#ga57dfc41b2eb20b0ac00efae7d9c49dcd">unpackHalf4x16</a>(uint64 p);</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> </div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  GLM_FUNC_DECL uint32 <a class="code" href="a00171.html#ga06ecb6afb902dba45419008171db9023">packI3x10_1x2</a>(<a class="code" href="a00157.html#gaaa26c41d168dc00be0fe55f4d0a34224">ivec4</a> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> </div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  GLM_FUNC_DECL <a class="code" href="a00157.html#gaaa26c41d168dc00be0fe55f4d0a34224">ivec4</a> <a class="code" href="a00171.html#ga9a05330e5490be0908d3b117d82aff56">unpackI3x10_1x2</a>(uint32 p);</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> </div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  GLM_FUNC_DECL uint32 <a class="code" href="a00171.html#gada3d88d59f0f458f9c51a9fd359a4bc0">packU3x10_1x2</a>(<a class="code" href="a00157.html#gaa7c3a0e7ae50c34c3290415c115f251e">uvec4</a> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> </div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  GLM_FUNC_DECL <a class="code" href="a00157.html#gaa7c3a0e7ae50c34c3290415c115f251e">uvec4</a> <a class="code" href="a00171.html#ga48df3042a7d079767f5891a1bfd8a60a">unpackU3x10_1x2</a>(uint32 p);</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> </div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  GLM_FUNC_DECL uint32 <a class="code" href="a00171.html#gab997545661877d2c7362a5084d3897d3">packSnorm3x10_1x2</a>(<a class="code" href="a00157.html#gafbab23070ca47932487d25332adc7d7c">vec4</a> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> </div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  GLM_FUNC_DECL <a class="code" href="a00157.html#gafbab23070ca47932487d25332adc7d7c">vec4</a> <a class="code" href="a00171.html#ga7a4fbf79be9740e3c57737bc2af05e5b">unpackSnorm3x10_1x2</a>(uint32 p);</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> </div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  GLM_FUNC_DECL uint32 <a class="code" href="a00171.html#ga8a1ee625d2707c60530fb3fca2980b19">packUnorm3x10_1x2</a>(<a class="code" href="a00157.html#gafbab23070ca47932487d25332adc7d7c">vec4</a> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> </div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  GLM_FUNC_DECL <a class="code" href="a00157.html#gafbab23070ca47932487d25332adc7d7c">vec4</a> <a class="code" href="a00171.html#ga5156d3060355fe332865da2c7f78815f">unpackUnorm3x10_1x2</a>(uint32 p);</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> </div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  GLM_FUNC_DECL uint32 <a class="code" href="a00171.html#ga4944ad465ff950e926d49621f916c78d">packF2x11_1x10</a>(<a class="code" href="a00157.html#gaa8ea2429bb3cb41a715258a447f39897">vec3</a> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> </div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  GLM_FUNC_DECL <a class="code" href="a00157.html#gaa8ea2429bb3cb41a715258a447f39897">vec3</a> <a class="code" href="a00171.html#ga2b1fd1e854705b1345e98409e0a25e50">unpackF2x11_1x10</a>(uint32 p);</div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> </div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> </div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  GLM_FUNC_DECL uint32 <a class="code" href="a00171.html#ga3f648fc205467792dc6d8c59c748f8a6">packF3x9_E1x5</a>(<a class="code" href="a00157.html#gaa8ea2429bb3cb41a715258a447f39897">vec3</a> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> </div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  GLM_FUNC_DECL <a class="code" href="a00157.html#gaa8ea2429bb3cb41a715258a447f39897">vec3</a> <a class="code" href="a00171.html#gab9e60ebe3ad3eeced6a9ec6eb876d74e">unpackF3x9_E1x5</a>(uint32 p);</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> </div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  <span class="keyword">template</span> <precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  GLM_FUNC_DECL vecType<uint16, P> <a class="code" href="a00171.html#ga896d806b72e390eb953786cca3632ec9">packHalf</a>(vecType<float, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> </div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  <span class="keyword">template</span> <precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  GLM_FUNC_DECL vecType<float, P> <a class="code" href="a00171.html#gaf3f9387834f8d8beadfe723c1dd247a7">unpackHalf</a>(vecType<uint16, P> <span class="keyword">const</span> & p);</div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> </div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> u<span class="keywordtype">int</span>Type, <span class="keyword">typename</span> <span class="keywordtype">float</span>Type, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span>  GLM_FUNC_DECL vecType<uintType, P> <a class="code" href="a00171.html#gacb9a3df68172c1193c9d701a3fa4d88b">packUnorm</a>(vecType<floatType, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> </div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> u<span class="keywordtype">int</span>Type, <span class="keyword">typename</span> <span class="keywordtype">float</span>Type, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  GLM_FUNC_DECL vecType<floatType, P> <a class="code" href="a00171.html#gad3d7e1ec7fcfb7ae341658e2ce1c3bd9">unpackUnorm</a>(vecType<uintType, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> </div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> <span class="keywordtype">int</span>Type, <span class="keyword">typename</span> <span class="keywordtype">float</span>Type, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  GLM_FUNC_DECL vecType<intType, P> <a class="code" href="a00171.html#ga1be760860697db386b36513aeafe9d5e">packSnorm</a>(vecType<floatType, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> </div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> <span class="keywordtype">int</span>Type, <span class="keyword">typename</span> <span class="keywordtype">float</span>Type, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  GLM_FUNC_DECL vecType<floatType, P> <a class="code" href="a00171.html#ga63eeec0d416e48462f341f4a7a9a45fe">unpackSnorm</a>(vecType<intType, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> </div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  GLM_FUNC_DECL uint8 <a class="code" href="a00171.html#gab6bbd5be3b8e6db538ecb33a7844481c">packUnorm2x4</a>(<a class="code" href="a00157.html#ga09d0200e8ff86391d8804b4fefd5f1da">vec2</a> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> </div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  GLM_FUNC_DECL <a class="code" href="a00157.html#ga09d0200e8ff86391d8804b4fefd5f1da">vec2</a> <a class="code" href="a00171.html#ga2e50476132fe5f27f08e273d9c70d85b">unpackUnorm2x4</a>(uint8 p);</div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> </div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  GLM_FUNC_DECL uint16 <a class="code" href="a00171.html#gad3e7e3ce521513584a53aedc5f9765c1">packUnorm4x4</a>(<a class="code" href="a00157.html#gafbab23070ca47932487d25332adc7d7c">vec4</a> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> </div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span>  GLM_FUNC_DECL <a class="code" href="a00157.html#gafbab23070ca47932487d25332adc7d7c">vec4</a> <a class="code" href="a00171.html#gac58ee89d0e224bb6df5e8bbb18843a2d">unpackUnorm4x4</a>(uint16 p);</div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> </div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  GLM_FUNC_DECL uint16 <a class="code" href="a00171.html#ga768e0337dd6246773f14aa0a421fe9a8">packUnorm1x5_1x6_1x5</a>(<a class="code" href="a00157.html#gaa8ea2429bb3cb41a715258a447f39897">vec3</a> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> </div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  GLM_FUNC_DECL <a class="code" href="a00157.html#gaa8ea2429bb3cb41a715258a447f39897">vec3</a> <a class="code" href="a00171.html#gab3bc08ecfc0f3339be93fb2b3b56d88a">unpackUnorm1x5_1x6_1x5</a>(uint16 p);</div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> </div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  GLM_FUNC_DECL uint16 <a class="code" href="a00171.html#gaec4112086d7fb133bea104a7c237de52">packUnorm3x5_1x1</a>(<a class="code" href="a00157.html#gafbab23070ca47932487d25332adc7d7c">vec4</a> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> </div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  GLM_FUNC_DECL <a class="code" href="a00157.html#gafbab23070ca47932487d25332adc7d7c">vec4</a> <a class="code" href="a00171.html#ga5ff95ff5bc16f396432ab67243dbae4d">unpackUnorm3x5_1x1</a>(uint16 p);</div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> </div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  GLM_FUNC_DECL uint8 <a class="code" href="a00171.html#ga7f9abdb50f9be1aa1c14912504a0d98d">packUnorm2x3_1x2</a>(<a class="code" href="a00157.html#gaa8ea2429bb3cb41a715258a447f39897">vec3</a> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> </div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span>  GLM_FUNC_DECL <a class="code" href="a00157.html#gaa8ea2429bb3cb41a715258a447f39897">vec3</a> <a class="code" href="a00171.html#ga6abd5a9014df3b5ce4059008d2491260">unpackUnorm2x3_1x2</a>(uint8 p);</div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> }<span class="comment">// namespace glm</span></div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> </div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> <span class="preprocessor">#include "packing.inl"</span></div>
+<div class="ttc" id="a00171_html_ga358943934d21da947d5bcc88c2ab7832"><div class="ttname"><a href="a00171.html#ga358943934d21da947d5bcc88c2ab7832">glm::packSnorm4x16</a></div><div class="ttdeci">GLM_FUNC_DECL uint64 packSnorm4x16(vec4 const &v)</div><div class="ttdoc">First, converts each component of the normalized floating-point value v into 16-bit integer values...</div></div>
+<div class="ttc" id="a00171_html_ga7f9abdb50f9be1aa1c14912504a0d98d"><div class="ttname"><a href="a00171.html#ga7f9abdb50f9be1aa1c14912504a0d98d">glm::packUnorm2x3_1x2</a></div><div class="ttdeci">GLM_FUNC_DECL uint8 packUnorm2x3_1x2(vec3 const &v)</div><div class="ttdoc">Convert each component of the normalized floating-point vector into unsigned integer values...</div></div>
+<div class="ttc" id="a00124_html"><div class="ttname"><a href="a00124.html">type_precision.hpp</a></div><div class="ttdoc">GLM_GTC_type_precision </div></div>
+<div class="ttc" id="a00171_html_ga3f648fc205467792dc6d8c59c748f8a6"><div class="ttname"><a href="a00171.html#ga3f648fc205467792dc6d8c59c748f8a6">glm::packF3x9_E1x5</a></div><div class="ttdeci">GLM_FUNC_DECL uint32 packF3x9_E1x5(vec3 const &v)</div><div class="ttdoc">First, converts the first two components of the normalized floating-point value v into 11-bit signles...</div></div>
+<div class="ttc" id="a00171_html_gab3bc08ecfc0f3339be93fb2b3b56d88a"><div class="ttname"><a href="a00171.html#gab3bc08ecfc0f3339be93fb2b3b56d88a">glm::unpackUnorm1x5_1x6_1x5</a></div><div class="ttdeci">GLM_FUNC_DECL vec3 unpackUnorm1x5_1x6_1x5(uint16 p)</div><div class="ttdoc">Convert each unsigned integer components of a vector to normalized floating-point values...</div></div>
+<div class="ttc" id="a00171_html_gad3d7e1ec7fcfb7ae341658e2ce1c3bd9"><div class="ttname"><a href="a00171.html#gad3d7e1ec7fcfb7ae341658e2ce1c3bd9">glm::unpackUnorm</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< floatType, P > unpackUnorm(vecType< uintType, P > const &v)</div><div class="ttdoc">Convert each unsigned integer components of a vector to normalized floating-point values...</div></div>
+<div class="ttc" id="a00171_html_gad3e7e3ce521513584a53aedc5f9765c1"><div class="ttname"><a href="a00171.html#gad3e7e3ce521513584a53aedc5f9765c1">glm::packUnorm4x4</a></div><div class="ttdeci">GLM_FUNC_DECL uint16 packUnorm4x4(vec4 const &v)</div><div class="ttdoc">Convert each component of the normalized floating-point vector into unsigned integer values...</div></div>
+<div class="ttc" id="a00171_html_gac37dedaba24b00adb4ec6e8f92c19dbf"><div class="ttname"><a href="a00171.html#gac37dedaba24b00adb4ec6e8f92c19dbf">glm::unpackHalf1x16</a></div><div class="ttdeci">GLM_FUNC_DECL float unpackHalf1x16(uint16 v)</div><div class="ttdoc">Returns a floating-point scalar with components obtained by unpacking a 16-bit unsigned integer into ...</div></div>
+<div class="ttc" id="a00171_html_gab22f8bcfdb5fc65af4701b25f143c1af"><div class="ttname"><a href="a00171.html#gab22f8bcfdb5fc65af4701b25f143c1af">glm::packSnorm1x16</a></div><div class="ttdeci">GLM_FUNC_DECL uint16 packSnorm1x16(float v)</div><div class="ttdoc">First, converts the normalized floating-point value v into 16-bit integer value. </div></div>
+<div class="ttc" id="a00171_html_ga06ecb6afb902dba45419008171db9023"><div class="ttname"><a href="a00171.html#ga06ecb6afb902dba45419008171db9023">glm::packI3x10_1x2</a></div><div class="ttdeci">GLM_FUNC_DECL uint32 packI3x10_1x2(ivec4 const &v)</div><div class="ttdoc">Returns an unsigned integer obtained by converting the components of a four-component signed integer ...</div></div>
+<div class="ttc" id="a00171_html_ga9f82737bf2a44bedff1d286b76837886"><div class="ttname"><a href="a00171.html#ga9f82737bf2a44bedff1d286b76837886">glm::packUnorm1x16</a></div><div class="ttdeci">GLM_FUNC_DECL uint16 packUnorm1x16(float v)</div><div class="ttdoc">First, converts the normalized floating-point value v into a 16-bit integer value. </div></div>
+<div class="ttc" id="a00171_html_ga5156d3060355fe332865da2c7f78815f"><div class="ttname"><a href="a00171.html#ga5156d3060355fe332865da2c7f78815f">glm::unpackUnorm3x10_1x2</a></div><div class="ttdeci">GLM_FUNC_DECL vec4 unpackUnorm3x10_1x2(uint32 p)</div><div class="ttdoc">First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers. </div></div>
+<div class="ttc" id="a00171_html_gada3d88d59f0f458f9c51a9fd359a4bc0"><div class="ttname"><a href="a00171.html#gada3d88d59f0f458f9c51a9fd359a4bc0">glm::packU3x10_1x2</a></div><div class="ttdeci">GLM_FUNC_DECL uint32 packU3x10_1x2(uvec4 const &v)</div><div class="ttdoc">Returns an unsigned integer obtained by converting the components of a four-component unsigned intege...</div></div>
+<div class="ttc" id="a00157_html_gafbab23070ca47932487d25332adc7d7c"><div class="ttname"><a href="a00157.html#gafbab23070ca47932487d25332adc7d7c">glm::vec4</a></div><div class="ttdeci">highp_vec4 vec4</div><div class="ttdoc">4 components vector of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00466">type_vec.hpp:466</a></div></div>
+<div class="ttc" id="a00171_html_ga2ae149c5d2473ac1e5f347bb654a242d"><div class="ttname"><a href="a00171.html#ga2ae149c5d2473ac1e5f347bb654a242d">glm::unpackUnorm4x16</a></div><div class="ttdeci">GLM_FUNC_DECL vec4 unpackUnorm4x16(uint64 p)</div><div class="ttdoc">First, unpacks a single 64-bit unsigned integer p into four 16-bit unsigned integers. </div></div>
+<div class="ttc" id="a00171_html_ga637cbe3913dd95c6e7b4c99c61bd611f"><div class="ttname"><a href="a00171.html#ga637cbe3913dd95c6e7b4c99c61bd611f">glm::unpackUnorm2x8</a></div><div class="ttdeci">GLM_FUNC_DECL vec2 unpackUnorm2x8(uint16 p)</div><div class="ttdoc">First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit unsigned integers. </div></div>
+<div class="ttc" id="a00171_html_ga83d34160a5cb7bcb5339823210fc7501"><div class="ttname"><a href="a00171.html#ga83d34160a5cb7bcb5339823210fc7501">glm::unpackUnorm1x16</a></div><div class="ttdeci">GLM_FUNC_DECL float unpackUnorm1x16(uint16 p)</div><div class="ttdoc">First, unpacks a single 16-bit unsigned integer p into a of 16-bit unsigned integers. </div></div>
+<div class="ttc" id="a00171_html_ga9a05330e5490be0908d3b117d82aff56"><div class="ttname"><a href="a00171.html#ga9a05330e5490be0908d3b117d82aff56">glm::unpackI3x10_1x2</a></div><div class="ttdeci">GLM_FUNC_DECL ivec4 unpackI3x10_1x2(uint32 p)</div><div class="ttdoc">Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit signed integers...</div></div>
+<div class="ttc" id="a00171_html_ga1be760860697db386b36513aeafe9d5e"><div class="ttname"><a href="a00171.html#ga1be760860697db386b36513aeafe9d5e">glm::packSnorm</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< intType, P > packSnorm(vecType< floatType, P > const &v)</div><div class="ttdoc">Convert each component of the normalized floating-point vector into signed integer values...</div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00171_html_gac58ee89d0e224bb6df5e8bbb18843a2d"><div class="ttname"><a href="a00171.html#gac58ee89d0e224bb6df5e8bbb18843a2d">glm::unpackUnorm4x4</a></div><div class="ttdeci">GLM_FUNC_DECL vec4 unpackUnorm4x4(uint16 p)</div><div class="ttdoc">Convert each unsigned integer components of a vector to normalized floating-point values...</div></div>
+<div class="ttc" id="a00171_html_ga1319207e30874fb4931a9ee913983ee1"><div class="ttname"><a href="a00171.html#ga1319207e30874fb4931a9ee913983ee1">glm::unpackUnorm1x8</a></div><div class="ttdeci">GLM_FUNC_DECL float unpackUnorm1x8(uint8 p)</div><div class="ttdoc">Convert a single 8-bit integer to a normalized floating-point value. </div></div>
+<div class="ttc" id="a00171_html_ga63eeec0d416e48462f341f4a7a9a45fe"><div class="ttname"><a href="a00171.html#ga63eeec0d416e48462f341f4a7a9a45fe">glm::unpackSnorm</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< floatType, P > unpackSnorm(vecType< intType, P > const &v)</div><div class="ttdoc">Convert each signed integer components of a vector to normalized floating-point values. </div></div>
+<div class="ttc" id="a00171_html_gaf3f9387834f8d8beadfe723c1dd247a7"><div class="ttname"><a href="a00171.html#gaf3f9387834f8d8beadfe723c1dd247a7">glm::unpackHalf</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< float, P > unpackHalf(vecType< uint16, P > const &p)</div><div class="ttdoc">Returns a floating-point vector with components obtained by reinterpreting an integer vector as 16-bi...</div></div>
+<div class="ttc" id="a00171_html_ga57dfc41b2eb20b0ac00efae7d9c49dcd"><div class="ttname"><a href="a00171.html#ga57dfc41b2eb20b0ac00efae7d9c49dcd">glm::unpackHalf4x16</a></div><div class="ttdeci">GLM_FUNC_DECL vec4 unpackHalf4x16(uint64 p)</div><div class="ttdoc">Returns a four-component floating-point vector with components obtained by unpacking a 64-bit unsigne...</div></div>
+<div class="ttc" id="a00171_html_ga43f2093b6ff192a79058ff7834fc3528"><div class="ttname"><a href="a00171.html#ga43f2093b6ff192a79058ff7834fc3528">glm::packHalf1x16</a></div><div class="ttdeci">GLM_FUNC_DECL uint16 packHalf1x16(float v)</div><div class="ttdoc">Returns an unsigned integer obtained by converting the components of a floating-point scalar to the 1...</div></div>
+<div class="ttc" id="a00171_html_gab9e60ebe3ad3eeced6a9ec6eb876d74e"><div class="ttname"><a href="a00171.html#gab9e60ebe3ad3eeced6a9ec6eb876d74e">glm::unpackF3x9_E1x5</a></div><div class="ttdeci">GLM_FUNC_DECL vec3 unpackF3x9_E1x5(uint32 p)</div><div class="ttdoc">First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point values and ...</div></div>
+<div class="ttc" id="a00171_html_ga48df3042a7d079767f5891a1bfd8a60a"><div class="ttname"><a href="a00171.html#ga48df3042a7d079767f5891a1bfd8a60a">glm::unpackU3x10_1x2</a></div><div class="ttdeci">GLM_FUNC_DECL uvec4 unpackU3x10_1x2(uint32 p)</div><div class="ttdoc">Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit unsigned integers...</div></div>
+<div class="ttc" id="a00171_html_ga6abd5a9014df3b5ce4059008d2491260"><div class="ttname"><a href="a00171.html#ga6abd5a9014df3b5ce4059008d2491260">glm::unpackUnorm2x3_1x2</a></div><div class="ttdeci">GLM_FUNC_DECL vec3 unpackUnorm2x3_1x2(uint8 p)</div><div class="ttdoc">Convert each unsigned integer components of a vector to normalized floating-point values...</div></div>
+<div class="ttc" id="a00171_html_ga9a666b1c688ab54100061ed06526de6e"><div class="ttname"><a href="a00171.html#ga9a666b1c688ab54100061ed06526de6e">glm::packUnorm2x8</a></div><div class="ttdeci">GLM_FUNC_DECL uint16 packUnorm2x8(vec2 const &v)</div><div class="ttdoc">First, converts each component of the normalized floating-point value v into 8-bit integer values...</div></div>
+<div class="ttc" id="a00171_html_gae3592e0795e62aaa1865b3a10496a7a1"><div class="ttname"><a href="a00171.html#gae3592e0795e62aaa1865b3a10496a7a1">glm::packSnorm1x8</a></div><div class="ttdeci">GLM_FUNC_DECL uint8 packSnorm1x8(float s)</div><div class="ttdoc">First, converts the normalized floating-point value v into 8-bit integer value. </div></div>
+<div class="ttc" id="a00171_html_ga896d806b72e390eb953786cca3632ec9"><div class="ttname"><a href="a00171.html#ga896d806b72e390eb953786cca3632ec9">glm::packHalf</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< uint16, P > packHalf(vecType< float, P > const &v)</div><div class="ttdoc">Returns an unsigned integer vector obtained by converting the components of a floating-point vector t...</div></div>
+<div class="ttc" id="a00171_html_gab997545661877d2c7362a5084d3897d3"><div class="ttname"><a href="a00171.html#gab997545661877d2c7362a5084d3897d3">glm::packSnorm3x10_1x2</a></div><div class="ttdeci">GLM_FUNC_DECL uint32 packSnorm3x10_1x2(vec4 const &v)</div><div class="ttdoc">First, converts the first three components of the normalized floating-point value v into 10-bit signe...</div></div>
+<div class="ttc" id="a00171_html_gab6bbd5be3b8e6db538ecb33a7844481c"><div class="ttname"><a href="a00171.html#gab6bbd5be3b8e6db538ecb33a7844481c">glm::packUnorm2x4</a></div><div class="ttdeci">GLM_FUNC_DECL uint8 packUnorm2x4(vec2 const &v)</div><div class="ttdoc">Convert each component of the normalized floating-point vector into unsigned integer values...</div></div>
+<div class="ttc" id="a00171_html_gacb9a3df68172c1193c9d701a3fa4d88b"><div class="ttname"><a href="a00171.html#gacb9a3df68172c1193c9d701a3fa4d88b">glm::packUnorm</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< uintType, P > packUnorm(vecType< floatType, P > const &v)</div><div class="ttdoc">Convert each component of the normalized floating-point vector into unsigned integer values...</div></div>
+<div class="ttc" id="a00157_html_gaa7c3a0e7ae50c34c3290415c115f251e"><div class="ttname"><a href="a00157.html#gaa7c3a0e7ae50c34c3290415c115f251e">glm::uvec4</a></div><div class="ttdeci">highp_uvec4 uvec4</div><div class="ttdoc">4 components vector of unsigned integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00547">type_vec.hpp:547</a></div></div>
+<div class="ttc" id="a00171_html_gafe2f7b39caf8f5ec555e1c059ec530e6"><div class="ttname"><a href="a00171.html#gafe2f7b39caf8f5ec555e1c059ec530e6">glm::packHalf4x16</a></div><div class="ttdeci">GLM_FUNC_DECL uint64 packHalf4x16(vec4 const &v)</div><div class="ttdoc">Returns an unsigned integer obtained by converting the components of a four-component floating-point ...</div></div>
+<div class="ttc" id="a00171_html_gaec4112086d7fb133bea104a7c237de52"><div class="ttname"><a href="a00171.html#gaec4112086d7fb133bea104a7c237de52">glm::packUnorm3x5_1x1</a></div><div class="ttdeci">GLM_FUNC_DECL uint16 packUnorm3x5_1x1(vec4 const &v)</div><div class="ttdoc">Convert each component of the normalized floating-point vector into unsigned integer values...</div></div>
+<div class="ttc" id="a00171_html_ga768e0337dd6246773f14aa0a421fe9a8"><div class="ttname"><a href="a00171.html#ga768e0337dd6246773f14aa0a421fe9a8">glm::packUnorm1x5_1x6_1x5</a></div><div class="ttdeci">GLM_FUNC_DECL uint16 packUnorm1x5_1x6_1x5(vec3 const &v)</div><div class="ttdoc">Convert each component of the normalized floating-point vector into unsigned integer values...</div></div>
+<div class="ttc" id="a00171_html_gaaddf9c353528fe896106f7181219c7f4"><div class="ttname"><a href="a00171.html#gaaddf9c353528fe896106f7181219c7f4">glm::unpackSnorm4x16</a></div><div class="ttdeci">GLM_FUNC_DECL vec4 unpackSnorm4x16(uint64 p)</div><div class="ttdoc">First, unpacks a single 64-bit unsigned integer p into four 16-bit signed integers. </div></div>
+<div class="ttc" id="a00171_html_ga6be3cfb2cce3702f03e91bbeb5286d7e"><div class="ttname"><a href="a00171.html#ga6be3cfb2cce3702f03e91bbeb5286d7e">glm::packSnorm2x8</a></div><div class="ttdeci">GLM_FUNC_DECL uint16 packSnorm2x8(vec2 const &v)</div><div class="ttdoc">First, converts each component of the normalized floating-point value v into 8-bit integer values...</div></div>
+<div class="ttc" id="a00171_html_ga4944ad465ff950e926d49621f916c78d"><div class="ttname"><a href="a00171.html#ga4944ad465ff950e926d49621f916c78d">glm::packF2x11_1x10</a></div><div class="ttdeci">GLM_FUNC_DECL uint32 packF2x11_1x10(vec3 const &v)</div><div class="ttdoc">First, converts the first two components of the normalized floating-point value v into 11-bit signles...</div></div>
+<div class="ttc" id="a00171_html_ga4851ff86678aa1c7ace9d67846894285"><div class="ttname"><a href="a00171.html#ga4851ff86678aa1c7ace9d67846894285">glm::unpackSnorm1x8</a></div><div class="ttdeci">GLM_FUNC_DECL float unpackSnorm1x8(uint8 p)</div><div class="ttdoc">First, unpacks a single 8-bit unsigned integer p into a single 8-bit signed integers. </div></div>
+<div class="ttc" id="a00171_html_ga2e50476132fe5f27f08e273d9c70d85b"><div class="ttname"><a href="a00171.html#ga2e50476132fe5f27f08e273d9c70d85b">glm::unpackUnorm2x4</a></div><div class="ttdeci">GLM_FUNC_DECL vec2 unpackUnorm2x4(uint8 p)</div><div class="ttdoc">Convert each unsigned integer components of a vector to normalized floating-point values...</div></div>
+<div class="ttc" id="a00171_html_ga96dd15002370627a443c835ab03a766c"><div class="ttname"><a href="a00171.html#ga96dd15002370627a443c835ab03a766c">glm::unpackSnorm1x16</a></div><div class="ttdeci">GLM_FUNC_DECL float unpackSnorm1x16(uint16 p)</div><div class="ttdoc">First, unpacks a single 16-bit unsigned integer p into a single 16-bit signed integers. </div></div>
+<div class="ttc" id="a00171_html_ga8b128e89be449fc71336968a66bf6e1a"><div class="ttname"><a href="a00171.html#ga8b128e89be449fc71336968a66bf6e1a">glm::unpackSnorm2x8</a></div><div class="ttdeci">GLM_FUNC_DECL vec2 unpackSnorm2x8(uint16 p)</div><div class="ttdoc">First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit signed integers. </div></div>
+<div class="ttc" id="a00171_html_ga4b2fa60df3460403817d28b082ee0736"><div class="ttname"><a href="a00171.html#ga4b2fa60df3460403817d28b082ee0736">glm::packUnorm1x8</a></div><div class="ttdeci">GLM_FUNC_DECL uint8 packUnorm1x8(float v)</div><div class="ttdoc">First, converts the normalized floating-point value v into a 8-bit integer value. ...</div></div>
+<div class="ttc" id="a00157_html_gaa8ea2429bb3cb41a715258a447f39897"><div class="ttname"><a href="a00157.html#gaa8ea2429bb3cb41a715258a447f39897">glm::vec3</a></div><div class="ttdeci">highp_vec3 vec3</div><div class="ttdoc">3 components vector of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00461">type_vec.hpp:461</a></div></div>
+<div class="ttc" id="a00171_html_ga5ff95ff5bc16f396432ab67243dbae4d"><div class="ttname"><a href="a00171.html#ga5ff95ff5bc16f396432ab67243dbae4d">glm::unpackUnorm3x5_1x1</a></div><div class="ttdeci">GLM_FUNC_DECL vec4 unpackUnorm3x5_1x1(uint16 p)</div><div class="ttdoc">Convert each unsigned integer components of a vector to normalized floating-point values...</div></div>
+<div class="ttc" id="a00157_html_ga09d0200e8ff86391d8804b4fefd5f1da"><div class="ttname"><a href="a00157.html#ga09d0200e8ff86391d8804b4fefd5f1da">glm::vec2</a></div><div class="ttdeci">highp_vec2 vec2</div><div class="ttdoc">2 components vector of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00456">type_vec.hpp:456</a></div></div>
+<div class="ttc" id="a00171_html_ga1f63c264e7ab63264e2b2a99fd393897"><div class="ttname"><a href="a00171.html#ga1f63c264e7ab63264e2b2a99fd393897">glm::packUnorm4x16</a></div><div class="ttdeci">GLM_FUNC_DECL uint64 packUnorm4x16(vec4 const &v)</div><div class="ttdoc">First, converts each component of the normalized floating-point value v into 16-bit integer values...</div></div>
+<div class="ttc" id="a00171_html_ga7a4fbf79be9740e3c57737bc2af05e5b"><div class="ttname"><a href="a00171.html#ga7a4fbf79be9740e3c57737bc2af05e5b">glm::unpackSnorm3x10_1x2</a></div><div class="ttdeci">GLM_FUNC_DECL vec4 unpackSnorm3x10_1x2(uint32 p)</div><div class="ttdoc">First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers. </div></div>
+<div class="ttc" id="a00157_html_gaaa26c41d168dc00be0fe55f4d0a34224"><div class="ttname"><a href="a00157.html#gaaa26c41d168dc00be0fe55f4d0a34224">glm::ivec4</a></div><div class="ttdeci">highp_ivec4 ivec4</div><div class="ttdoc">4 components vector of signed integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00520">type_vec.hpp:520</a></div></div>
+<div class="ttc" id="a00171_html_ga8a1ee625d2707c60530fb3fca2980b19"><div class="ttname"><a href="a00171.html#ga8a1ee625d2707c60530fb3fca2980b19">glm::packUnorm3x10_1x2</a></div><div class="ttdeci">GLM_FUNC_DECL uint32 packUnorm3x10_1x2(vec4 const &v)</div><div class="ttdoc">First, converts the first three components of the normalized floating-point value v into 10-bit unsig...</div></div>
+<div class="ttc" id="a00171_html_ga2b1fd1e854705b1345e98409e0a25e50"><div class="ttname"><a href="a00171.html#ga2b1fd1e854705b1345e98409e0a25e50">glm::unpackF2x11_1x10</a></div><div class="ttdeci">GLM_FUNC_DECL vec3 unpackF2x11_1x10(uint32 p)</div><div class="ttdoc">First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point values and ...</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00081.html b/src/third_party/glm/doc/api/a00081.html
new file mode 100644
index 0000000..69b6e35
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00081.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: packing.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">packing.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00081_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+
+<p>Definition in file <a class="el" href="a00081_source.html">packing.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00081_source.html b/src/third_party/glm/doc/api/a00081_source.html
new file mode 100644
index 0000000..2779db7
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00081_source.html
@@ -0,0 +1,65 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: packing.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">packing.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00081.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include "<a class="code" href="a00034.html">detail/func_packing.hpp</a>"</span></div>
+<div class="ttc" id="a00034_html"><div class="ttname"><a href="a00034.html">func_packing.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00082_source.html b/src/third_party/glm/doc/api/a00082_source.html
new file mode 100644
index 0000000..6ca7b8c
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00082_source.html
@@ -0,0 +1,61 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: pages.doxy Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_577c788b67d63fb3b3b5752bd495d0f2.html">doc</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pages.doxy</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00083.html b/src/third_party/glm/doc/api/a00083.html
new file mode 100644
index 0000000..f837f20
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00083.html
@@ -0,0 +1,78 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: perpendicular.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">perpendicular.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00083_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga41f8c73da9798a18e6b1e32f1e301f07"><td class="memTemplParams" colspan="2">template<typename vecType > </td></tr>
+<tr class="memitem:ga41f8c73da9798a18e6b1e32f1e301f07"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00217.html#ga41f8c73da9798a18e6b1e32f1e301f07">perp</a> (vecType const &x, vecType const &Normal)</td></tr>
+<tr class="separator:ga41f8c73da9798a18e6b1e32f1e301f07"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00217.html">GLM_GTX_perpendicular</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd>
+<dd>
+<a class="el" href="a00219.html" title="Projection of a vector to other one. ">GLM_GTX_projection</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00083_source.html">perpendicular.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00083_source.html b/src/third_party/glm/doc/api/a00083_source.html
new file mode 100644
index 0000000..050d14a
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00083_source.html
@@ -0,0 +1,84 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: perpendicular.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">perpendicular.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00083.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "../glm.hpp"</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "../gtx/projection.hpp"</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_perpendicular extension included")</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> {</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> vecType> </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  GLM_FUNC_DECL vecType <a class="code" href="a00217.html#ga41f8c73da9798a18e6b1e32f1e301f07">perp</a>(</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  vecType <span class="keyword">const</span> & x, </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  vecType <span class="keyword">const</span> & Normal);</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#include "perpendicular.inl"</span></div>
+<div class="ttc" id="a00217_html_ga41f8c73da9798a18e6b1e32f1e301f07"><div class="ttname"><a href="a00217.html#ga41f8c73da9798a18e6b1e32f1e301f07">glm::perp</a></div><div class="ttdeci">GLM_FUNC_DECL vecType perp(vecType const &x, vecType const &Normal)</div><div class="ttdoc">Projects x a perpendicular axis of Normal. </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00084.html b/src/third_party/glm/doc/api/a00084.html
new file mode 100644
index 0000000..793732a
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00084.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: polar_coordinates.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">polar_coordinates.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00084_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga45ece1fbf7260c43e0f873c498202581"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga45ece1fbf7260c43e0f873c498202581"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00218.html#ga45ece1fbf7260c43e0f873c498202581">euclidean</a> (tvec2< T, P > const &polar)</td></tr>
+<tr class="separator:ga45ece1fbf7260c43e0f873c498202581"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafcf95a38c780a4ad5ba14c8ac9e522bb"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gafcf95a38c780a4ad5ba14c8ac9e522bb"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00218.html#gafcf95a38c780a4ad5ba14c8ac9e522bb">polar</a> (tvec3< T, P > const &euclidean)</td></tr>
+<tr class="separator:gafcf95a38c780a4ad5ba14c8ac9e522bb"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00218.html">GLM_GTX_polar_coordinates</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00084_source.html">polar_coordinates.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00084_source.html b/src/third_party/glm/doc/api/a00084_source.html
new file mode 100644
index 0000000..2c2c2a1
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00084_source.html
@@ -0,0 +1,87 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: polar_coordinates.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">polar_coordinates.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00084.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include "../glm.hpp"</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_polar_coordinates extension included")</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> {</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  GLM_FUNC_DECL tvec3<T, P> <a class="code" href="a00218.html#gafcf95a38c780a4ad5ba14c8ac9e522bb">polar</a>(</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  tvec3<T, P> <span class="keyword">const</span> & <a class="code" href="a00218.html#ga45ece1fbf7260c43e0f873c498202581">euclidean</a>);</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  GLM_FUNC_DECL tvec3<T, P> <a class="code" href="a00218.html#ga45ece1fbf7260c43e0f873c498202581">euclidean</a>(</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  tvec2<T, P> <span class="keyword">const</span> & <a class="code" href="a00218.html#gafcf95a38c780a4ad5ba14c8ac9e522bb">polar</a>);</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor">#include "polar_coordinates.inl"</span></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00218_html_gafcf95a38c780a4ad5ba14c8ac9e522bb"><div class="ttname"><a href="a00218.html#gafcf95a38c780a4ad5ba14c8ac9e522bb">glm::polar</a></div><div class="ttdeci">GLM_FUNC_DECL tvec3< T, P > polar(tvec3< T, P > const &euclidean)</div><div class="ttdoc">Convert Euclidean to Polar coordinates, x is the xz distance, y, the latitude and z the longitude...</div></div>
+<div class="ttc" id="a00218_html_ga45ece1fbf7260c43e0f873c498202581"><div class="ttname"><a href="a00218.html#ga45ece1fbf7260c43e0f873c498202581">glm::euclidean</a></div><div class="ttdeci">GLM_FUNC_DECL tvec3< T, P > euclidean(tvec2< T, P > const &polar)</div><div class="ttdoc">Convert Polar to Euclidean coordinates. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00085.html b/src/third_party/glm/doc/api/a00085.html
new file mode 100644
index 0000000..8be5648
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00085.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: precision.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">precision.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00085_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+
+<p>Definition in file <a class="el" href="a00085_source.html">precision.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00085_source.html b/src/third_party/glm/doc/api/a00085_source.html
new file mode 100644
index 0000000..efbdf16
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00085_source.html
@@ -0,0 +1,123 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: precision.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">precision.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00085.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include "<a class="code" href="a00098.html">setup.hpp</a>"</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> </div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> {</div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>  <span class="keyword">enum</span> precision</div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>  {</div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>  packed_highp,</div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>  packed_mediump,</div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>  packed_lowp,</div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor"># if GLM_HAS_ALIGNED_TYPE</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>  aligned_highp,</div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  aligned_mediump,</div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  aligned_lowp,</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  aligned = aligned_highp,</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  highp = packed_highp,</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  mediump = packed_mediump,</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  lowp = packed_lowp,</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  packed = packed_highp,</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor"># if GLM_HAS_ALIGNED_TYPE && defined(GLM_FORCE_ALIGNED)</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  defaultp = aligned_highp</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor"># else</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  defaultp = highp</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  };</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keyword">namespace </span>detail</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> {</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keyword">template</span> <glm::precision P></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keyword">struct </span>is_aligned</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  {</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> value = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  };</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor"># if GLM_HAS_ALIGNED_TYPE</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keyword">template</span><></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keyword">struct </span>is_aligned<<a class="code" href="a00141.html">glm</a>::aligned_lowp></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  {</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> value = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  };</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keyword">template</span><></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keyword">struct </span>is_aligned<<a class="code" href="a00141.html">glm</a>::aligned_mediump></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  {</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> value = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  };</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keyword">template</span><></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keyword">struct </span>is_aligned<<a class="code" href="a00141.html">glm</a>::aligned_highp></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  {</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> value = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  };</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> }<span class="comment">//namespace detail</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> }<span class="comment">//namespace glm</span></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00098_html"><div class="ttname"><a href="a00098.html">setup.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00086.html b/src/third_party/glm/doc/api/a00086.html
new file mode 100644
index 0000000..60718b6
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00086.html
@@ -0,0 +1,76 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: projection.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">projection.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00086_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gadf29123bcf748fc9d6fb0998192184cf"><td class="memTemplParams" colspan="2">template<typename vecType > </td></tr>
+<tr class="memitem:gadf29123bcf748fc9d6fb0998192184cf"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00219.html#gadf29123bcf748fc9d6fb0998192184cf">proj</a> (vecType const &x, vecType const &Normal)</td></tr>
+<tr class="separator:gadf29123bcf748fc9d6fb0998192184cf"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00219.html">GLM_GTX_projection</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00086_source.html">projection.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00086_source.html b/src/third_party/glm/doc/api/a00086_source.html
new file mode 100644
index 0000000..6feb424
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00086_source.html
@@ -0,0 +1,81 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: projection.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">projection.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00086.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include "../geometric.hpp"</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_projection extension included")</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> {</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> vecType></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  GLM_FUNC_DECL vecType <a class="code" href="a00219.html#gadf29123bcf748fc9d6fb0998192184cf">proj</a>(vecType <span class="keyword">const</span> & x, vecType <span class="keyword">const</span> & Normal);</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#include "projection.inl"</span></div>
+<div class="ttc" id="a00219_html_gadf29123bcf748fc9d6fb0998192184cf"><div class="ttname"><a href="a00219.html#gadf29123bcf748fc9d6fb0998192184cf">glm::proj</a></div><div class="ttdeci">GLM_FUNC_DECL vecType proj(vecType const &x, vecType const &Normal)</div><div class="ttdoc">Projects x on Normal. </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00087.html b/src/third_party/glm/doc/api/a00087.html
new file mode 100644
index 0000000..c4a956a
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00087.html
@@ -0,0 +1,161 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: quaternion.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_9440d7c11b99dcd7e5d369c7cf9802fe.html">gtc</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">gtc/quaternion.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00087_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gad4a4448baedb198b2b1e7880d2544dc9"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gad4a4448baedb198b2b1e7880d2544dc9"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">angle</a> (tquat< T, P > const &x)</td></tr>
+<tr class="separator:gad4a4448baedb198b2b1e7880d2544dc9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga37ae19405f1ccf766f27e4fcd035d859"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga37ae19405f1ccf766f27e4fcd035d859"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#ga37ae19405f1ccf766f27e4fcd035d859">angleAxis</a> (T const &angle, tvec3< T, P > const &axis)</td></tr>
+<tr class="separator:ga37ae19405f1ccf766f27e4fcd035d859"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0b3e87a13b2708154b72259e50789a19"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga0b3e87a13b2708154b72259e50789a19"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#ga0b3e87a13b2708154b72259e50789a19">axis</a> (tquat< T, P > const &x)</td></tr>
+<tr class="separator:ga0b3e87a13b2708154b72259e50789a19"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab1ace864fbf189ffa368950001808a3c"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gab1ace864fbf189ffa368950001808a3c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#gab1ace864fbf189ffa368950001808a3c">conjugate</a> (tquat< T, P > const &q)</td></tr>
+<tr class="separator:gab1ace864fbf189ffa368950001808a3c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac54dfc83de465a2d03e90d342242ab3d"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class quatType> </td></tr>
+<tr class="memitem:gac54dfc83de465a2d03e90d342242ab3d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#gac54dfc83de465a2d03e90d342242ab3d">dot</a> (quatType< T, P > const &x, quatType< T, P > const &y)</td></tr>
+<tr class="separator:gac54dfc83de465a2d03e90d342242ab3d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac187115710365e0b2902220b9611e7b6"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gac187115710365e0b2902220b9611e7b6"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec4< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#gac187115710365e0b2902220b9611e7b6">equal</a> (tquat< T, P > const &x, tquat< T, P > const &y)</td></tr>
+<tr class="separator:gac187115710365e0b2902220b9611e7b6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gadb92ec1c1b0dd6b024176a73fbef3e64"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gadb92ec1c1b0dd6b024176a73fbef3e64"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#gadb92ec1c1b0dd6b024176a73fbef3e64">eulerAngles</a> (tquat< T, P > const &x)</td></tr>
+<tr class="separator:gadb92ec1c1b0dd6b024176a73fbef3e64"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga09d21a588ae425ac7517ea65cc59a5ae"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga09d21a588ae425ac7517ea65cc59a5ae"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec4< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#ga09d21a588ae425ac7517ea65cc59a5ae">greaterThan</a> (tquat< T, P > const &x, tquat< T, P > const &y)</td></tr>
+<tr class="separator:ga09d21a588ae425ac7517ea65cc59a5ae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0906a221a2037519fcf316ea5c1e3b3e"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga0906a221a2037519fcf316ea5c1e3b3e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec4< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#ga0906a221a2037519fcf316ea5c1e3b3e">greaterThanEqual</a> (tquat< T, P > const &x, tquat< T, P > const &y)</td></tr>
+<tr class="separator:ga0906a221a2037519fcf316ea5c1e3b3e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5f47300c024c2d809944e6ac661d6d14"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga5f47300c024c2d809944e6ac661d6d14"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#ga5f47300c024c2d809944e6ac661d6d14">inverse</a> (tquat< T, P > const &q)</td></tr>
+<tr class="separator:ga5f47300c024c2d809944e6ac661d6d14"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0a850f06736d25887536d0da88e63c70"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga0a850f06736d25887536d0da88e63c70"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec4< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#ga0a850f06736d25887536d0da88e63c70">isinf</a> (tquat< T, P > const &x)</td></tr>
+<tr class="separator:ga0a850f06736d25887536d0da88e63c70"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad2fc52dd4ba5ff79cc56b3e0f9c092ed"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gad2fc52dd4ba5ff79cc56b3e0f9c092ed"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec4< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#gad2fc52dd4ba5ff79cc56b3e0f9c092ed">isnan</a> (tquat< T, P > const &x)</td></tr>
+<tr class="separator:gad2fc52dd4ba5ff79cc56b3e0f9c092ed"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac682181783027544c8d251b4d3a60cf8"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gac682181783027544c8d251b4d3a60cf8"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#gac682181783027544c8d251b4d3a60cf8">length</a> (tquat< T, P > const &q)</td></tr>
+<tr class="separator:gac682181783027544c8d251b4d3a60cf8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5692804fa4db9e762a1c19b607e54435"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga5692804fa4db9e762a1c19b607e54435"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#ga5692804fa4db9e762a1c19b607e54435">lerp</a> (tquat< T, P > const &x, tquat< T, P > const &y, T a)</td></tr>
+<tr class="separator:ga5692804fa4db9e762a1c19b607e54435"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga91a40d16a3b5bb47d71ac1a3fb688ffa"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga91a40d16a3b5bb47d71ac1a3fb688ffa"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec4< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#ga91a40d16a3b5bb47d71ac1a3fb688ffa">lessThan</a> (tquat< T, P > const &x, tquat< T, P > const &y)</td></tr>
+<tr class="separator:ga91a40d16a3b5bb47d71ac1a3fb688ffa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7c81996ed2724f26fe76faf352c76294"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga7c81996ed2724f26fe76faf352c76294"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec4< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#ga7c81996ed2724f26fe76faf352c76294">lessThanEqual</a> (tquat< T, P > const &x, tquat< T, P > const &y)</td></tr>
+<tr class="separator:ga7c81996ed2724f26fe76faf352c76294"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae04c39422eb4e450ec8c4f45a1057b40"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gae04c39422eb4e450ec8c4f45a1057b40"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat3x3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#gae04c39422eb4e450ec8c4f45a1057b40">mat3_cast</a> (tquat< T, P > const &x)</td></tr>
+<tr class="separator:gae04c39422eb4e450ec8c4f45a1057b40"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga14bb2ddf028c91542763eb6f2bba47ef"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga14bb2ddf028c91542763eb6f2bba47ef"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#ga14bb2ddf028c91542763eb6f2bba47ef">mat4_cast</a> (tquat< T, P > const &x)</td></tr>
+<tr class="separator:ga14bb2ddf028c91542763eb6f2bba47ef"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga31cc82178742c36450f5662bd4fb30b0"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga31cc82178742c36450f5662bd4fb30b0"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#ga31cc82178742c36450f5662bd4fb30b0">mix</a> (tquat< T, P > const &x, tquat< T, P > const &y, T a)</td></tr>
+<tr class="separator:ga31cc82178742c36450f5662bd4fb30b0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga35b6bcb22ac6d1e4a85440f5b69bdf86"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga35b6bcb22ac6d1e4a85440f5b69bdf86"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#ga35b6bcb22ac6d1e4a85440f5b69bdf86">normalize</a> (tquat< T, P > const &q)</td></tr>
+<tr class="separator:ga35b6bcb22ac6d1e4a85440f5b69bdf86"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga484c4633f7c05d8e29ee8b452350f539"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga484c4633f7c05d8e29ee8b452350f539"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec4< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#ga484c4633f7c05d8e29ee8b452350f539">notEqual</a> (tquat< T, P > const &x, tquat< T, P > const &y)</td></tr>
+<tr class="separator:ga484c4633f7c05d8e29ee8b452350f539"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2c08b93a4261c10748fd4d2104346f17"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga2c08b93a4261c10748fd4d2104346f17"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#ga2c08b93a4261c10748fd4d2104346f17">pitch</a> (tquat< T, P > const &x)</td></tr>
+<tr class="separator:ga2c08b93a4261c10748fd4d2104346f17"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga950f8acff3e33bbda77895a3dcb7e5ce"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga950f8acff3e33bbda77895a3dcb7e5ce"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#ga950f8acff3e33bbda77895a3dcb7e5ce">quat_cast</a> (tmat3x3< T, P > const &x)</td></tr>
+<tr class="separator:ga950f8acff3e33bbda77895a3dcb7e5ce"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3e4615e9884dd0f41f5617b9848a5d9c"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga3e4615e9884dd0f41f5617b9848a5d9c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#ga3e4615e9884dd0f41f5617b9848a5d9c">quat_cast</a> (tmat4x4< T, P > const &x)</td></tr>
+<tr class="separator:ga3e4615e9884dd0f41f5617b9848a5d9c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4fd705376c6c1fd667be0055a0ea58ec"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga4fd705376c6c1fd667be0055a0ea58ec"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#ga4fd705376c6c1fd667be0055a0ea58ec">roll</a> (tquat< T, P > const &x)</td></tr>
+<tr class="separator:ga4fd705376c6c1fd667be0055a0ea58ec"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa8f42979c921e450ff2812fb43c25702"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gaa8f42979c921e450ff2812fb43c25702"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#gaa8f42979c921e450ff2812fb43c25702">rotate</a> (tquat< T, P > const &q, T const &angle, tvec3< T, P > const &axis)</td></tr>
+<tr class="separator:gaa8f42979c921e450ff2812fb43c25702"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga22b438c7252f3fa5b773c9882471652a"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga22b438c7252f3fa5b773c9882471652a"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#ga22b438c7252f3fa5b773c9882471652a">slerp</a> (tquat< T, P > const &x, tquat< T, P > const &y, T a)</td></tr>
+<tr class="separator:ga22b438c7252f3fa5b773c9882471652a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga724a5df282b70cec0a6cb0d6dcddb6d6"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga724a5df282b70cec0a6cb0d6dcddb6d6"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#ga724a5df282b70cec0a6cb0d6dcddb6d6">yaw</a> (tquat< T, P > const &x)</td></tr>
+<tr class="separator:ga724a5df282b70cec0a6cb0d6dcddb6d6"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00172.html">GLM_GTC_quaternion</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd>
+<dd>
+gtc_half_float (dependence) </dd>
+<dd>
+<a class="el" href="a00162.html" title="Provide a list of constants and precomputed useful values. ">GLM_GTC_constants</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00087_source.html">gtc/quaternion.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00087_source.html b/src/third_party/glm/doc/api/a00087_source.html
new file mode 100644
index 0000000..ffed5f9
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00087_source.html
@@ -0,0 +1,329 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: quaternion.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_9440d7c11b99dcd7e5d369c7cf9802fe.html">gtc</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">gtc/quaternion.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00087.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "../mat3x3.hpp"</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include "../mat4x4.hpp"</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "../vec3.hpp"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "../vec4.hpp"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "../gtc/constants.hpp"</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor"># pragma message("GLM: GLM_GTC_quaternion extension included")</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> {</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P = defaultp></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keyword">struct </span>tquat</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  {</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="comment">// -- Implementation detail --</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keyword">typedef</span> tquat<T, P> type;</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keyword">typedef</span> T value_type;</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="comment">// -- Data --</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor"># if GLM_HAS_ALIGNED_TYPE</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor"># if GLM_COMPILER & GLM_COMPILER_GCC</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor"># pragma GCC diagnostic push</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="preprocessor"># pragma GCC diagnostic ignored "-pedantic"</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor"># if GLM_COMPILER & GLM_COMPILER_CLANG</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="preprocessor"># pragma clang diagnostic push</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="preprocessor"># pragma clang diagnostic ignored "-Wgnu-anonymous-struct"</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="preprocessor"># pragma clang diagnostic ignored "-Wnested-anon-types"</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keyword">union</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  {</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keyword">struct </span>{ T x, y, z, w;};</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keyword">typename</span> detail::storage<T, sizeof(T) * 4, detail::is_aligned<P>::value>::type data;</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  };</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  </div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="preprocessor"># if GLM_COMPILER & GLM_COMPILER_CLANG</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="preprocessor"># pragma clang diagnostic pop</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="preprocessor"># if GLM_COMPILER & GLM_COMPILER_GCC</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="preprocessor"># pragma GCC diagnostic pop</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="preprocessor"># else</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  T x, y, z, w;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="comment">// -- Component accesses --</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keyword">typedef</span> length_t length_type;</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  GLM_FUNC_DECL GLM_CONSTEXPR length_type <a class="code" href="a00172.html#gac682181783027544c8d251b4d3a60cf8">length</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  GLM_FUNC_DECL T & operator[](length_type i);</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  GLM_FUNC_DECL T <span class="keyword">const</span> & operator[](length_type i) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="comment">// -- Implicit basic constructors --</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  GLM_FUNC_DECL GLM_CONSTEXPR tquat() GLM_DEFAULT_CTOR;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  GLM_FUNC_DECL GLM_CONSTEXPR tquat(tquat<T, P> const & q) GLM_DEFAULT;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  template <precision Q></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  GLM_FUNC_DECL GLM_CONSTEXPR tquat(tquat<T, Q> const & q);</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="comment">// -- Explicit basic constructors --</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tquat(ctor);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  GLM_FUNC_DECL GLM_CONSTEXPR tquat(T const & s, tvec3<T, P> const & v);</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  GLM_FUNC_DECL GLM_CONSTEXPR tquat(T const & w, T const & x, T const & y, T const & z);</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="comment">// -- Conversion constructors --</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  template <typename U, precision Q></div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT tquat(tquat<U, Q> const & q);</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="preprocessor"># if GLM_HAS_EXPLICIT_CONVERSION_OPERATORS</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  GLM_FUNC_DECL <span class="keyword">explicit</span> <span class="keyword">operator</span> tmat3x3<T, P>();</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  GLM_FUNC_DECL <span class="keyword">explicit</span> <span class="keyword">operator</span> tmat4x4<T, P>();</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  GLM_FUNC_DECL tquat(tvec3<T, P> <span class="keyword">const</span> & u, tvec3<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  GLM_FUNC_DECL GLM_EXPLICIT tquat(tvec3<T, P> <span class="keyword">const</span> & <a class="code" href="a00172.html#gadb92ec1c1b0dd6b024176a73fbef3e64">eulerAngles</a>);</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  GLM_FUNC_DECL GLM_EXPLICIT tquat(tmat3x3<T, P> <span class="keyword">const</span> & m);</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  GLM_FUNC_DECL GLM_EXPLICIT tquat(tmat4x4<T, P> <span class="keyword">const</span> & m);</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="comment">// -- Unary arithmetic operators --</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  GLM_FUNC_DECL tquat<T, P> & operator=(tquat<T, P> <span class="keyword">const</span> & m) GLM_DEFAULT;</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  GLM_FUNC_DECL tquat<T, P> & operator=(tquat<U, P> <span class="keyword">const</span> & m);</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  GLM_FUNC_DECL tquat<T, P> & operator+=(tquat<U, P> <span class="keyword">const</span> & q);</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  GLM_FUNC_DECL tquat<T, P> & operator-=(tquat<U, P> <span class="keyword">const</span> & q);</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  GLM_FUNC_DECL tquat<T, P> & operator*=(tquat<U, P> <span class="keyword">const</span> & q);</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  GLM_FUNC_DECL tquat<T, P> & operator*=(U s);</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  GLM_FUNC_DECL tquat<T, P> & operator/=(U s);</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  };</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="comment">// -- Unary bit operators --</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> </div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  GLM_FUNC_DECL tquat<T, P> operator+(tquat<T, P> <span class="keyword">const</span> & q);</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  GLM_FUNC_DECL tquat<T, P> operator-(tquat<T, P> <span class="keyword">const</span> & q);</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="comment">// -- Binary operators --</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  GLM_FUNC_DECL tquat<T, P> operator+(tquat<T, P> <span class="keyword">const</span> & q, tquat<T, P> <span class="keyword">const</span> & p);</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  GLM_FUNC_DECL tquat<T, P> operator*(tquat<T, P> <span class="keyword">const</span> & q, tquat<T, P> <span class="keyword">const</span> & p);</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  GLM_FUNC_DECL tvec3<T, P> operator*(tquat<T, P> <span class="keyword">const</span> & q, tvec3<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  GLM_FUNC_DECL tvec3<T, P> operator*(tvec3<T, P> <span class="keyword">const</span> & v, tquat<T, P> <span class="keyword">const</span> & q);</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> </div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  GLM_FUNC_DECL tvec4<T, P> operator*(tquat<T, P> <span class="keyword">const</span> & q, tvec4<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  GLM_FUNC_DECL tvec4<T, P> operator*(tvec4<T, P> <span class="keyword">const</span> & v, tquat<T, P> <span class="keyword">const</span> & q);</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  GLM_FUNC_DECL tquat<T, P> operator*(tquat<T, P> <span class="keyword">const</span> & q, T <span class="keyword">const</span> & s);</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  GLM_FUNC_DECL tquat<T, P> operator*(T <span class="keyword">const</span> & s, tquat<T, P> <span class="keyword">const</span> & q);</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> </div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  GLM_FUNC_DECL tquat<T, P> operator/(tquat<T, P> <span class="keyword">const</span> & q, T <span class="keyword">const</span> & s);</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> </div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  <span class="comment">// -- Boolean operators --</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> operator==(tquat<T, P> <span class="keyword">const</span> & q1, tquat<T, P> <span class="keyword">const</span> & q2);</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> operator!=(tquat<T, P> <span class="keyword">const</span> & q1, tquat<T, P> <span class="keyword">const</span> & q2);</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  GLM_FUNC_DECL T <a class="code" href="a00172.html#gac682181783027544c8d251b4d3a60cf8">length</a>(tquat<T, P> <span class="keyword">const</span> & q);</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  GLM_FUNC_DECL tquat<T, P> <a class="code" href="a00172.html#ga35b6bcb22ac6d1e4a85440f5b69bdf86">normalize</a>(tquat<T, P> <span class="keyword">const</span> & q);</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  </div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>quatType></div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  GLM_FUNC_DECL T <a class="code" href="a00172.html#gac54dfc83de465a2d03e90d342242ab3d">dot</a>(quatType<T, P> <span class="keyword">const</span> & x, quatType<T, P> <span class="keyword">const</span> & y);</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  GLM_FUNC_DECL tquat<T, P> <a class="code" href="a00172.html#ga31cc82178742c36450f5662bd4fb30b0">mix</a>(tquat<T, P> <span class="keyword">const</span> & x, tquat<T, P> <span class="keyword">const</span> & y, T a);</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> </div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  GLM_FUNC_DECL tquat<T, P> <a class="code" href="a00172.html#ga5692804fa4db9e762a1c19b607e54435">lerp</a>(tquat<T, P> <span class="keyword">const</span> & x, tquat<T, P> <span class="keyword">const</span> & y, T a);</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> </div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  GLM_FUNC_DECL tquat<T, P> <a class="code" href="a00172.html#ga22b438c7252f3fa5b773c9882471652a">slerp</a>(tquat<T, P> <span class="keyword">const</span> & x, tquat<T, P> <span class="keyword">const</span> & y, T a);</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> </div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  GLM_FUNC_DECL tquat<T, P> <a class="code" href="a00172.html#gab1ace864fbf189ffa368950001808a3c">conjugate</a>(tquat<T, P> <span class="keyword">const</span> & q);</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> </div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  GLM_FUNC_DECL tquat<T, P> <a class="code" href="a00172.html#ga5f47300c024c2d809944e6ac661d6d14">inverse</a>(tquat<T, P> <span class="keyword">const</span> & q);</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  GLM_FUNC_DECL tquat<T, P> <a class="code" href="a00172.html#gaa8f42979c921e450ff2812fb43c25702">rotate</a>(tquat<T, P> <span class="keyword">const</span> & q, T <span class="keyword">const</span> & <a class="code" href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">angle</a>, tvec3<T, P> <span class="keyword">const</span> & <a class="code" href="a00172.html#ga0b3e87a13b2708154b72259e50789a19">axis</a>);</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> </div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  GLM_FUNC_DECL tvec3<T, P> <a class="code" href="a00172.html#gadb92ec1c1b0dd6b024176a73fbef3e64">eulerAngles</a>(tquat<T, P> <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> </div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  GLM_FUNC_DECL T <a class="code" href="a00172.html#ga4fd705376c6c1fd667be0055a0ea58ec">roll</a>(tquat<T, P> <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  GLM_FUNC_DECL T <a class="code" href="a00172.html#ga2c08b93a4261c10748fd4d2104346f17">pitch</a>(tquat<T, P> <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> </div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  GLM_FUNC_DECL T <a class="code" href="a00172.html#ga724a5df282b70cec0a6cb0d6dcddb6d6">yaw</a>(tquat<T, P> <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> </div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  GLM_FUNC_DECL tmat3x3<T, P> <a class="code" href="a00172.html#gae04c39422eb4e450ec8c4f45a1057b40">mat3_cast</a>(tquat<T, P> <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> </div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  GLM_FUNC_DECL tmat4x4<T, P> <a class="code" href="a00172.html#ga14bb2ddf028c91542763eb6f2bba47ef">mat4_cast</a>(tquat<T, P> <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> </div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  GLM_FUNC_DECL tquat<T, P> <a class="code" href="a00172.html#ga3e4615e9884dd0f41f5617b9848a5d9c">quat_cast</a>(tmat3x3<T, P> <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> </div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  GLM_FUNC_DECL tquat<T, P> <a class="code" href="a00172.html#ga3e4615e9884dd0f41f5617b9848a5d9c">quat_cast</a>(tmat4x4<T, P> <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> </div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  GLM_FUNC_DECL T <a class="code" href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">angle</a>(tquat<T, P> <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> </div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  GLM_FUNC_DECL tvec3<T, P> <a class="code" href="a00172.html#ga0b3e87a13b2708154b72259e50789a19">axis</a>(tquat<T, P> <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> </div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  GLM_FUNC_DECL tquat<T, P> <a class="code" href="a00172.html#ga37ae19405f1ccf766f27e4fcd035d859">angleAxis</a>(T <span class="keyword">const</span> & <a class="code" href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">angle</a>, tvec3<T, P> <span class="keyword">const</span> & <a class="code" href="a00172.html#ga0b3e87a13b2708154b72259e50789a19">axis</a>);</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> </div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  GLM_FUNC_DECL tvec4<bool, P> <a class="code" href="a00172.html#ga91a40d16a3b5bb47d71ac1a3fb688ffa">lessThan</a>(tquat<T, P> <span class="keyword">const</span> & x, tquat<T, P> <span class="keyword">const</span> & y);</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> </div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  GLM_FUNC_DECL tvec4<bool, P> <a class="code" href="a00172.html#ga7c81996ed2724f26fe76faf352c76294">lessThanEqual</a>(tquat<T, P> <span class="keyword">const</span> & x, tquat<T, P> <span class="keyword">const</span> & y);</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> </div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  GLM_FUNC_DECL tvec4<bool, P> <a class="code" href="a00172.html#ga09d21a588ae425ac7517ea65cc59a5ae">greaterThan</a>(tquat<T, P> <span class="keyword">const</span> & x, tquat<T, P> <span class="keyword">const</span> & y);</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> </div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  GLM_FUNC_DECL tvec4<bool, P> <a class="code" href="a00172.html#ga0906a221a2037519fcf316ea5c1e3b3e">greaterThanEqual</a>(tquat<T, P> <span class="keyword">const</span> & x, tquat<T, P> <span class="keyword">const</span> & y);</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> </div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  GLM_FUNC_DECL tvec4<bool, P> <a class="code" href="a00172.html#gac187115710365e0b2902220b9611e7b6">equal</a>(tquat<T, P> <span class="keyword">const</span> & x, tquat<T, P> <span class="keyword">const</span> & y);</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> </div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  GLM_FUNC_DECL tvec4<bool, P> <a class="code" href="a00172.html#ga484c4633f7c05d8e29ee8b452350f539">notEqual</a>(tquat<T, P> <span class="keyword">const</span> & x, tquat<T, P> <span class="keyword">const</span> & y);</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> </div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  GLM_FUNC_DECL tvec4<bool, P> <a class="code" href="a00172.html#gad2fc52dd4ba5ff79cc56b3e0f9c092ed">isnan</a>(tquat<T, P> <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> </div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  GLM_FUNC_DECL tvec4<bool, P> <a class="code" href="a00172.html#ga0a850f06736d25887536d0da88e63c70">isinf</a>(tquat<T, P> <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> </div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> } <span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> </div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <span class="preprocessor">#include "quaternion.inl"</span></div>
+<div class="ttc" id="a00172_html_ga4fd705376c6c1fd667be0055a0ea58ec"><div class="ttname"><a href="a00172.html#ga4fd705376c6c1fd667be0055a0ea58ec">glm::roll</a></div><div class="ttdeci">GLM_FUNC_DECL T roll(tquat< T, P > const &x)</div><div class="ttdoc">Returns roll value of euler angles expressed in radians. </div></div>
+<div class="ttc" id="a00172_html_ga2c08b93a4261c10748fd4d2104346f17"><div class="ttname"><a href="a00172.html#ga2c08b93a4261c10748fd4d2104346f17">glm::pitch</a></div><div class="ttdeci">GLM_FUNC_DECL T pitch(tquat< T, P > const &x)</div><div class="ttdoc">Returns pitch value of euler angles expressed in radians. </div></div>
+<div class="ttc" id="a00172_html_gac187115710365e0b2902220b9611e7b6"><div class="ttname"><a href="a00172.html#gac187115710365e0b2902220b9611e7b6">glm::equal</a></div><div class="ttdeci">GLM_FUNC_DECL tvec4< bool, P > equal(tquat< T, P > const &x, tquat< T, P > const &y)</div><div class="ttdoc">Returns the component-wise comparison of result x == y. </div></div>
+<div class="ttc" id="a00172_html_gaa8f42979c921e450ff2812fb43c25702"><div class="ttname"><a href="a00172.html#gaa8f42979c921e450ff2812fb43c25702">glm::rotate</a></div><div class="ttdeci">GLM_FUNC_DECL tquat< T, P > rotate(tquat< T, P > const &q, T const &angle, tvec3< T, P > const &axis)</div><div class="ttdoc">Rotates a quaternion from a vector of 3 components axis and an angle. </div></div>
+<div class="ttc" id="a00172_html_ga0906a221a2037519fcf316ea5c1e3b3e"><div class="ttname"><a href="a00172.html#ga0906a221a2037519fcf316ea5c1e3b3e">glm::greaterThanEqual</a></div><div class="ttdeci">GLM_FUNC_DECL tvec4< bool, P > greaterThanEqual(tquat< T, P > const &x, tquat< T, P > const &y)</div><div class="ttdoc">Returns the component-wise comparison of result x >= y. </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00172_html_ga3e4615e9884dd0f41f5617b9848a5d9c"><div class="ttname"><a href="a00172.html#ga3e4615e9884dd0f41f5617b9848a5d9c">glm::quat_cast</a></div><div class="ttdeci">GLM_FUNC_DECL tquat< T, P > quat_cast(tmat4x4< T, P > const &x)</div><div class="ttdoc">Converts a 4 * 4 matrix to a quaternion. </div></div>
+<div class="ttc" id="a00172_html_gad2fc52dd4ba5ff79cc56b3e0f9c092ed"><div class="ttname"><a href="a00172.html#gad2fc52dd4ba5ff79cc56b3e0f9c092ed">glm::isnan</a></div><div class="ttdeci">GLM_FUNC_DECL tvec4< bool, P > isnan(tquat< T, P > const &x)</div><div class="ttdoc">Returns true if x holds a NaN (not a number) representation in the underlying implementation's set of...</div></div>
+<div class="ttc" id="a00172_html_gab1ace864fbf189ffa368950001808a3c"><div class="ttname"><a href="a00172.html#gab1ace864fbf189ffa368950001808a3c">glm::conjugate</a></div><div class="ttdeci">GLM_FUNC_DECL tquat< T, P > conjugate(tquat< T, P > const &q)</div><div class="ttdoc">Returns the q conjugate. </div></div>
+<div class="ttc" id="a00172_html_ga09d21a588ae425ac7517ea65cc59a5ae"><div class="ttname"><a href="a00172.html#ga09d21a588ae425ac7517ea65cc59a5ae">glm::greaterThan</a></div><div class="ttdeci">GLM_FUNC_DECL tvec4< bool, P > greaterThan(tquat< T, P > const &x, tquat< T, P > const &y)</div><div class="ttdoc">Returns the component-wise comparison of result x > y. </div></div>
+<div class="ttc" id="a00172_html_ga5692804fa4db9e762a1c19b607e54435"><div class="ttname"><a href="a00172.html#ga5692804fa4db9e762a1c19b607e54435">glm::lerp</a></div><div class="ttdeci">GLM_FUNC_DECL tquat< T, P > lerp(tquat< T, P > const &x, tquat< T, P > const &y, T a)</div><div class="ttdoc">Linear interpolation of two quaternions. </div></div>
+<div class="ttc" id="a00172_html_ga14bb2ddf028c91542763eb6f2bba47ef"><div class="ttname"><a href="a00172.html#ga14bb2ddf028c91542763eb6f2bba47ef">glm::mat4_cast</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, P > mat4_cast(tquat< T, P > const &x)</div><div class="ttdoc">Converts a quaternion to a 4 * 4 matrix. </div></div>
+<div class="ttc" id="a00172_html_ga35b6bcb22ac6d1e4a85440f5b69bdf86"><div class="ttname"><a href="a00172.html#ga35b6bcb22ac6d1e4a85440f5b69bdf86">glm::normalize</a></div><div class="ttdeci">GLM_FUNC_DECL tquat< T, P > normalize(tquat< T, P > const &q)</div><div class="ttdoc">Returns the normalized quaternion. </div></div>
+<div class="ttc" id="a00172_html_gac682181783027544c8d251b4d3a60cf8"><div class="ttname"><a href="a00172.html#gac682181783027544c8d251b4d3a60cf8">glm::length</a></div><div class="ttdeci">GLM_FUNC_DECL T length(tquat< T, P > const &q)</div><div class="ttdoc">Returns the length of the quaternion. </div></div>
+<div class="ttc" id="a00172_html_ga0b3e87a13b2708154b72259e50789a19"><div class="ttname"><a href="a00172.html#ga0b3e87a13b2708154b72259e50789a19">glm::axis</a></div><div class="ttdeci">GLM_FUNC_DECL tvec3< T, P > axis(tquat< T, P > const &x)</div><div class="ttdoc">Returns the q rotation axis. </div></div>
+<div class="ttc" id="a00172_html_gac54dfc83de465a2d03e90d342242ab3d"><div class="ttname"><a href="a00172.html#gac54dfc83de465a2d03e90d342242ab3d">glm::dot</a></div><div class="ttdeci">GLM_FUNC_DECL T dot(quatType< T, P > const &x, quatType< T, P > const &y)</div><div class="ttdoc">Returns dot product of q1 and q2, i.e., q1[0] * q2[0] + q1[1] * q2[1] + ... </div></div>
+<div class="ttc" id="a00172_html_ga7c81996ed2724f26fe76faf352c76294"><div class="ttname"><a href="a00172.html#ga7c81996ed2724f26fe76faf352c76294">glm::lessThanEqual</a></div><div class="ttdeci">GLM_FUNC_DECL tvec4< bool, P > lessThanEqual(tquat< T, P > const &x, tquat< T, P > const &y)</div><div class="ttdoc">Returns the component-wise comparison of result x <= y. </div></div>
+<div class="ttc" id="a00172_html_gadb92ec1c1b0dd6b024176a73fbef3e64"><div class="ttname"><a href="a00172.html#gadb92ec1c1b0dd6b024176a73fbef3e64">glm::eulerAngles</a></div><div class="ttdeci">GLM_FUNC_DECL tvec3< T, P > eulerAngles(tquat< T, P > const &x)</div><div class="ttdoc">Returns euler angles, pitch as x, yaw as y, roll as z. </div></div>
+<div class="ttc" id="a00172_html_gad4a4448baedb198b2b1e7880d2544dc9"><div class="ttname"><a href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">glm::angle</a></div><div class="ttdeci">GLM_FUNC_DECL T angle(tquat< T, P > const &x)</div><div class="ttdoc">Returns the quaternion rotation angle. </div></div>
+<div class="ttc" id="a00172_html_ga22b438c7252f3fa5b773c9882471652a"><div class="ttname"><a href="a00172.html#ga22b438c7252f3fa5b773c9882471652a">glm::slerp</a></div><div class="ttdeci">GLM_FUNC_DECL tquat< T, P > slerp(tquat< T, P > const &x, tquat< T, P > const &y, T a)</div><div class="ttdoc">Spherical linear interpolation of two quaternions. </div></div>
+<div class="ttc" id="a00172_html_ga484c4633f7c05d8e29ee8b452350f539"><div class="ttname"><a href="a00172.html#ga484c4633f7c05d8e29ee8b452350f539">glm::notEqual</a></div><div class="ttdeci">GLM_FUNC_DECL tvec4< bool, P > notEqual(tquat< T, P > const &x, tquat< T, P > const &y)</div><div class="ttdoc">Returns the component-wise comparison of result x != y. </div></div>
+<div class="ttc" id="a00172_html_gae04c39422eb4e450ec8c4f45a1057b40"><div class="ttname"><a href="a00172.html#gae04c39422eb4e450ec8c4f45a1057b40">glm::mat3_cast</a></div><div class="ttdeci">GLM_FUNC_DECL tmat3x3< T, P > mat3_cast(tquat< T, P > const &x)</div><div class="ttdoc">Converts a quaternion to a 3 * 3 matrix. </div></div>
+<div class="ttc" id="a00172_html_ga37ae19405f1ccf766f27e4fcd035d859"><div class="ttname"><a href="a00172.html#ga37ae19405f1ccf766f27e4fcd035d859">glm::angleAxis</a></div><div class="ttdeci">GLM_FUNC_DECL tquat< T, P > angleAxis(T const &angle, tvec3< T, P > const &axis)</div><div class="ttdoc">Build a quaternion from an angle and a normalized axis. </div></div>
+<div class="ttc" id="a00172_html_ga91a40d16a3b5bb47d71ac1a3fb688ffa"><div class="ttname"><a href="a00172.html#ga91a40d16a3b5bb47d71ac1a3fb688ffa">glm::lessThan</a></div><div class="ttdeci">GLM_FUNC_DECL tvec4< bool, P > lessThan(tquat< T, P > const &x, tquat< T, P > const &y)</div><div class="ttdoc">Returns the component-wise comparison result of x < y. </div></div>
+<div class="ttc" id="a00172_html_ga0a850f06736d25887536d0da88e63c70"><div class="ttname"><a href="a00172.html#ga0a850f06736d25887536d0da88e63c70">glm::isinf</a></div><div class="ttdeci">GLM_FUNC_DECL tvec4< bool, P > isinf(tquat< T, P > const &x)</div><div class="ttdoc">Returns true if x holds a positive infinity or negative infinity representation in the underlying imp...</div></div>
+<div class="ttc" id="a00172_html_ga31cc82178742c36450f5662bd4fb30b0"><div class="ttname"><a href="a00172.html#ga31cc82178742c36450f5662bd4fb30b0">glm::mix</a></div><div class="ttdeci">GLM_FUNC_DECL tquat< T, P > mix(tquat< T, P > const &x, tquat< T, P > const &y, T a)</div><div class="ttdoc">Spherical linear interpolation of two quaternions. </div></div>
+<div class="ttc" id="a00172_html_ga5f47300c024c2d809944e6ac661d6d14"><div class="ttname"><a href="a00172.html#ga5f47300c024c2d809944e6ac661d6d14">glm::inverse</a></div><div class="ttdeci">GLM_FUNC_DECL tquat< T, P > inverse(tquat< T, P > const &q)</div><div class="ttdoc">Returns the q inverse. </div></div>
+<div class="ttc" id="a00172_html_ga724a5df282b70cec0a6cb0d6dcddb6d6"><div class="ttname"><a href="a00172.html#ga724a5df282b70cec0a6cb0d6dcddb6d6">glm::yaw</a></div><div class="ttdeci">GLM_FUNC_DECL T yaw(tquat< T, P > const &x)</div><div class="ttdoc">Returns yaw value of euler angles expressed in radians. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00088.html b/src/third_party/glm/doc/api/a00088.html
new file mode 100644
index 0000000..76a3f54
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00088.html
@@ -0,0 +1,129 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: quaternion.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">gtx/quaternion.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00088_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga33ecf8ba903eee5fc09f0fbfc0d5ca6b"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga33ecf8ba903eee5fc09f0fbfc0d5ca6b"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00220.html#ga33ecf8ba903eee5fc09f0fbfc0d5ca6b">cross</a> (tquat< T, P > const &q, tvec3< T, P > const &v)</td></tr>
+<tr class="separator:ga33ecf8ba903eee5fc09f0fbfc0d5ca6b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4bfe3c7770fc43d14b8ef0058c4a86b5"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga4bfe3c7770fc43d14b8ef0058c4a86b5"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00220.html#ga4bfe3c7770fc43d14b8ef0058c4a86b5">cross</a> (tvec3< T, P > const &v, tquat< T, P > const &q)</td></tr>
+<tr class="separator:ga4bfe3c7770fc43d14b8ef0058c4a86b5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga17295173d4c2b5ae49b84e9993b63a62"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga17295173d4c2b5ae49b84e9993b63a62"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00220.html#ga17295173d4c2b5ae49b84e9993b63a62">exp</a> (tquat< T, P > const &q)</td></tr>
+<tr class="separator:ga17295173d4c2b5ae49b84e9993b63a62"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga90de879d97487ec804522dd418e5d8a0"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga90de879d97487ec804522dd418e5d8a0"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00220.html#ga90de879d97487ec804522dd418e5d8a0">extractRealComponent</a> (tquat< T, P > const &q)</td></tr>
+<tr class="separator:ga90de879d97487ec804522dd418e5d8a0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac11bf550f17d1da14423595a27575084"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gac11bf550f17d1da14423595a27575084"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00220.html#gac11bf550f17d1da14423595a27575084">fastMix</a> (tquat< T, P > const &x, tquat< T, P > const &y, T const &a)</td></tr>
+<tr class="separator:gac11bf550f17d1da14423595a27575084"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga56abae85b3669c866e91f3c57b298b9c"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga56abae85b3669c866e91f3c57b298b9c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00220.html#ga56abae85b3669c866e91f3c57b298b9c">intermediate</a> (tquat< T, P > const &prev, tquat< T, P > const &curr, tquat< T, P > const &next)</td></tr>
+<tr class="separator:ga56abae85b3669c866e91f3c57b298b9c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga02b45352c7ac345cabc9e877314acda6"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga02b45352c7ac345cabc9e877314acda6"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00220.html#ga02b45352c7ac345cabc9e877314acda6">length2</a> (tquat< T, P > const &q)</td></tr>
+<tr class="separator:ga02b45352c7ac345cabc9e877314acda6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga791f42e134bfe97fc9c96f4668dd7489"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga791f42e134bfe97fc9c96f4668dd7489"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00220.html#ga791f42e134bfe97fc9c96f4668dd7489">log</a> (tquat< T, P > const &q)</td></tr>
+<tr class="separator:ga791f42e134bfe97fc9c96f4668dd7489"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga42a0cf206c59eaeff4c67dd62e09a580"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga42a0cf206c59eaeff4c67dd62e09a580"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00220.html#ga42a0cf206c59eaeff4c67dd62e09a580">pow</a> (tquat< T, P > const &x, T const &y)</td></tr>
+<tr class="separator:ga42a0cf206c59eaeff4c67dd62e09a580"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9f39f0d3ecd66839a4af44560aa10fb2"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga9f39f0d3ecd66839a4af44560aa10fb2"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00220.html#ga9f39f0d3ecd66839a4af44560aa10fb2">rotate</a> (tquat< T, P > const &q, tvec3< T, P > const &v)</td></tr>
+<tr class="separator:ga9f39f0d3ecd66839a4af44560aa10fb2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga96575f8868b3f2aa3e13cab9b94ccbd3"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga96575f8868b3f2aa3e13cab9b94ccbd3"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00220.html#ga96575f8868b3f2aa3e13cab9b94ccbd3">rotate</a> (tquat< T, P > const &q, tvec4< T, P > const &v)</td></tr>
+<tr class="separator:ga96575f8868b3f2aa3e13cab9b94ccbd3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac4856d356c5c97cec74e9b672ea89240"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gac4856d356c5c97cec74e9b672ea89240"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00220.html#gac4856d356c5c97cec74e9b672ea89240">rotation</a> (tvec3< T, P > const &orig, tvec3< T, P > const &dest)</td></tr>
+<tr class="separator:gac4856d356c5c97cec74e9b672ea89240"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3534443de2a1a806f386976546cddc81"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga3534443de2a1a806f386976546cddc81"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00220.html#ga3534443de2a1a806f386976546cddc81">shortMix</a> (tquat< T, P > const &x, tquat< T, P > const &y, T const &a)</td></tr>
+<tr class="separator:ga3534443de2a1a806f386976546cddc81"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae75f537becdf2b1381b4482ec96e6c82"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gae75f537becdf2b1381b4482ec96e6c82"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00220.html#gae75f537becdf2b1381b4482ec96e6c82">squad</a> (tquat< T, P > const &q1, tquat< T, P > const &q2, tquat< T, P > const &s1, tquat< T, P > const &s2, T const &h)</td></tr>
+<tr class="separator:gae75f537becdf2b1381b4482ec96e6c82"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga01935b66ba245c2fd7dee5427d86ce9b"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga01935b66ba245c2fd7dee5427d86ce9b"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat3x3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00220.html#ga01935b66ba245c2fd7dee5427d86ce9b">toMat3</a> (tquat< T, P > const &x)</td></tr>
+<tr class="separator:ga01935b66ba245c2fd7dee5427d86ce9b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaedc9fba6485eade37cc26c16df9d7aad"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gaedc9fba6485eade37cc26c16df9d7aad"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00220.html#gaedc9fba6485eade37cc26c16df9d7aad">toMat4</a> (tquat< T, P > const &x)</td></tr>
+<tr class="separator:gaedc9fba6485eade37cc26c16df9d7aad"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac9e3109ca60b644ce508d6b71a1697bc"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gac9e3109ca60b644ce508d6b71a1697bc"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00220.html#gac9e3109ca60b644ce508d6b71a1697bc">toQuat</a> (tmat3x3< T, P > const &x)</td></tr>
+<tr class="separator:gac9e3109ca60b644ce508d6b71a1697bc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga808dd0f83ee8150db7e652313bde8eb2"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga808dd0f83ee8150db7e652313bde8eb2"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00220.html#ga808dd0f83ee8150db7e652313bde8eb2">toQuat</a> (tmat4x4< T, P > const &x)</td></tr>
+<tr class="separator:ga808dd0f83ee8150db7e652313bde8eb2"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00220.html">GLM_GTX_quaternion</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd>
+<dd>
+<a class="el" href="a00192.html" title="Min and max functions for 3 to 4 parameters. ">GLM_GTX_extented_min_max</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00088_source.html">gtx/quaternion.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00088_source.html b/src/third_party/glm/doc/api/a00088_source.html
new file mode 100644
index 0000000..3a089c4
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00088_source.html
@@ -0,0 +1,189 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: quaternion.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">gtx/quaternion.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00088.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "../glm.hpp"</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "../gtc/constants.hpp"</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include "../gtc/quaternion.hpp"</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "../gtx/norm.hpp"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_quaternion extension included")</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> {</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  GLM_FUNC_DECL tvec3<T, P> <a class="code" href="a00220.html#ga4bfe3c7770fc43d14b8ef0058c4a86b5">cross</a>(</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  tquat<T, P> <span class="keyword">const</span> & q,</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  tvec3<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  GLM_FUNC_DECL tvec3<T, P> <a class="code" href="a00220.html#ga4bfe3c7770fc43d14b8ef0058c4a86b5">cross</a>(</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  tvec3<T, P> <span class="keyword">const</span> & v,</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  tquat<T, P> <span class="keyword">const</span> & q);</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  GLM_FUNC_DECL tquat<T, P> <a class="code" href="a00220.html#gae75f537becdf2b1381b4482ec96e6c82">squad</a>(</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  tquat<T, P> <span class="keyword">const</span> & q1,</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  tquat<T, P> <span class="keyword">const</span> & q2,</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  tquat<T, P> <span class="keyword">const</span> & s1,</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  tquat<T, P> <span class="keyword">const</span> & s2,</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  T <span class="keyword">const</span> & h);</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  GLM_FUNC_DECL tquat<T, P> <a class="code" href="a00220.html#ga56abae85b3669c866e91f3c57b298b9c">intermediate</a>(</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  tquat<T, P> <span class="keyword">const</span> & prev,</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  tquat<T, P> <span class="keyword">const</span> & curr,</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  tquat<T, P> <span class="keyword">const</span> & next);</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  GLM_FUNC_DECL tquat<T, P> <a class="code" href="a00220.html#ga17295173d4c2b5ae49b84e9993b63a62">exp</a>(</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  tquat<T, P> <span class="keyword">const</span> & q);</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  GLM_FUNC_DECL tquat<T, P> <a class="code" href="a00220.html#ga791f42e134bfe97fc9c96f4668dd7489">log</a>(</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  tquat<T, P> <span class="keyword">const</span> & q);</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  GLM_FUNC_DECL tquat<T, P> <a class="code" href="a00220.html#ga42a0cf206c59eaeff4c67dd62e09a580">pow</a>(</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  tquat<T, P> <span class="keyword">const</span> & x,</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  T <span class="keyword">const</span> & y);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="comment">//template<typename T, precision P></span></div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <span class="comment">//tquat<T, P> sqrt(</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="comment">// tquat<T, P> const & q);</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  GLM_FUNC_DECL tvec3<T, P> <a class="code" href="a00220.html#ga96575f8868b3f2aa3e13cab9b94ccbd3">rotate</a>(</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  tquat<T, P> <span class="keyword">const</span> & q,</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  tvec3<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  GLM_FUNC_DECL tvec4<T, P> <a class="code" href="a00220.html#ga96575f8868b3f2aa3e13cab9b94ccbd3">rotate</a>(</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  tquat<T, P> <span class="keyword">const</span> & q,</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  tvec4<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  GLM_FUNC_DECL T <a class="code" href="a00220.html#ga90de879d97487ec804522dd418e5d8a0">extractRealComponent</a>(</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  tquat<T, P> <span class="keyword">const</span> & q);</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00124"></a><span class="lineno"><a class="line" href="a00220.html#ga01935b66ba245c2fd7dee5427d86ce9b"> 124</a></span>  GLM_FUNC_DECL tmat3x3<T, P> <a class="code" href="a00220.html#ga01935b66ba245c2fd7dee5427d86ce9b">toMat3</a>(</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  tquat<T, P> <span class="keyword">const</span> & x){<span class="keywordflow">return</span> <a class="code" href="a00172.html#gae04c39422eb4e450ec8c4f45a1057b40">mat3_cast</a>(x);}</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00131"></a><span class="lineno"><a class="line" href="a00220.html#gaedc9fba6485eade37cc26c16df9d7aad"> 131</a></span>  GLM_FUNC_DECL tmat4x4<T, P> <a class="code" href="a00220.html#gaedc9fba6485eade37cc26c16df9d7aad">toMat4</a>(</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  tquat<T, P> <span class="keyword">const</span> & x){<span class="keywordflow">return</span> <a class="code" href="a00172.html#ga14bb2ddf028c91542763eb6f2bba47ef">mat4_cast</a>(x);}</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00138"></a><span class="lineno"><a class="line" href="a00220.html#gac9e3109ca60b644ce508d6b71a1697bc"> 138</a></span>  GLM_FUNC_DECL tquat<T, P> <a class="code" href="a00220.html#ga808dd0f83ee8150db7e652313bde8eb2">toQuat</a>(</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  tmat3x3<T, P> <span class="keyword">const</span> & x){<span class="keywordflow">return</span> <a class="code" href="a00172.html#ga950f8acff3e33bbda77895a3dcb7e5ce">quat_cast</a>(x);}</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00145"></a><span class="lineno"><a class="line" href="a00220.html#ga808dd0f83ee8150db7e652313bde8eb2"> 145</a></span>  GLM_FUNC_DECL tquat<T, P> <a class="code" href="a00220.html#ga808dd0f83ee8150db7e652313bde8eb2">toQuat</a>(</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  tmat4x4<T, P> <span class="keyword">const</span> & x){<span class="keywordflow">return</span> <a class="code" href="a00172.html#ga950f8acff3e33bbda77895a3dcb7e5ce">quat_cast</a>(x);}</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  GLM_FUNC_DECL tquat<T, P> <a class="code" href="a00220.html#ga3534443de2a1a806f386976546cddc81">shortMix</a>(</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  tquat<T, P> <span class="keyword">const</span> & x,</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  tquat<T, P> <span class="keyword">const</span> & y,</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  T <span class="keyword">const</span> & a);</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  GLM_FUNC_DECL tquat<T, P> <a class="code" href="a00220.html#gac11bf550f17d1da14423595a27575084">fastMix</a>(</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  tquat<T, P> <span class="keyword">const</span> & x,</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  tquat<T, P> <span class="keyword">const</span> & y,</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  T <span class="keyword">const</span> & a);</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> </div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  GLM_FUNC_DECL tquat<T, P> <a class="code" href="a00220.html#gac4856d356c5c97cec74e9b672ea89240">rotation</a>(</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  tvec3<T, P> <span class="keyword">const</span> & orig, </div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  tvec3<T, P> <span class="keyword">const</span> & dest);</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  GLM_FUNC_DECL T <a class="code" href="a00220.html#ga02b45352c7ac345cabc9e877314acda6">length2</a>(tquat<T, P> <span class="keyword">const</span> & q);</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> </div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="preprocessor">#include "quaternion.inl"</span></div>
+<div class="ttc" id="a00220_html_ga42a0cf206c59eaeff4c67dd62e09a580"><div class="ttname"><a href="a00220.html#ga42a0cf206c59eaeff4c67dd62e09a580">glm::pow</a></div><div class="ttdeci">GLM_FUNC_DECL tquat< T, P > pow(tquat< T, P > const &x, T const &y)</div><div class="ttdoc">Returns x raised to the y power. </div></div>
+<div class="ttc" id="a00220_html_ga02b45352c7ac345cabc9e877314acda6"><div class="ttname"><a href="a00220.html#ga02b45352c7ac345cabc9e877314acda6">glm::length2</a></div><div class="ttdeci">GLM_FUNC_DECL T length2(tquat< T, P > const &q)</div><div class="ttdoc">Returns the squared length of x. </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00220_html_gaedc9fba6485eade37cc26c16df9d7aad"><div class="ttname"><a href="a00220.html#gaedc9fba6485eade37cc26c16df9d7aad">glm::toMat4</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, P > toMat4(tquat< T, P > const &x)</div><div class="ttdoc">Converts a quaternion to a 4 * 4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00088_source.html#l00131">gtx/quaternion.hpp:131</a></div></div>
+<div class="ttc" id="a00220_html_ga4bfe3c7770fc43d14b8ef0058c4a86b5"><div class="ttname"><a href="a00220.html#ga4bfe3c7770fc43d14b8ef0058c4a86b5">glm::cross</a></div><div class="ttdeci">GLM_FUNC_DECL tvec3< T, P > cross(tvec3< T, P > const &v, tquat< T, P > const &q)</div><div class="ttdoc">Compute a cross product between a vector and a quaternion. </div></div>
+<div class="ttc" id="a00220_html_ga3534443de2a1a806f386976546cddc81"><div class="ttname"><a href="a00220.html#ga3534443de2a1a806f386976546cddc81">glm::shortMix</a></div><div class="ttdeci">GLM_FUNC_DECL tquat< T, P > shortMix(tquat< T, P > const &x, tquat< T, P > const &y, T const &a)</div><div class="ttdoc">Quaternion interpolation using the rotation short path. </div></div>
+<div class="ttc" id="a00220_html_ga01935b66ba245c2fd7dee5427d86ce9b"><div class="ttname"><a href="a00220.html#ga01935b66ba245c2fd7dee5427d86ce9b">glm::toMat3</a></div><div class="ttdeci">GLM_FUNC_DECL tmat3x3< T, P > toMat3(tquat< T, P > const &x)</div><div class="ttdoc">Converts a quaternion to a 3 * 3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00088_source.html#l00124">gtx/quaternion.hpp:124</a></div></div>
+<div class="ttc" id="a00220_html_gac4856d356c5c97cec74e9b672ea89240"><div class="ttname"><a href="a00220.html#gac4856d356c5c97cec74e9b672ea89240">glm::rotation</a></div><div class="ttdeci">GLM_FUNC_DECL tquat< T, P > rotation(tvec3< T, P > const &orig, tvec3< T, P > const &dest)</div><div class="ttdoc">Compute the rotation between two vectors. </div></div>
+<div class="ttc" id="a00172_html_ga14bb2ddf028c91542763eb6f2bba47ef"><div class="ttname"><a href="a00172.html#ga14bb2ddf028c91542763eb6f2bba47ef">glm::mat4_cast</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, P > mat4_cast(tquat< T, P > const &x)</div><div class="ttdoc">Converts a quaternion to a 4 * 4 matrix. </div></div>
+<div class="ttc" id="a00220_html_ga90de879d97487ec804522dd418e5d8a0"><div class="ttname"><a href="a00220.html#ga90de879d97487ec804522dd418e5d8a0">glm::extractRealComponent</a></div><div class="ttdeci">GLM_FUNC_DECL T extractRealComponent(tquat< T, P > const &q)</div><div class="ttdoc">Extract the real component of a quaternion. </div></div>
+<div class="ttc" id="a00220_html_ga56abae85b3669c866e91f3c57b298b9c"><div class="ttname"><a href="a00220.html#ga56abae85b3669c866e91f3c57b298b9c">glm::intermediate</a></div><div class="ttdeci">GLM_FUNC_DECL tquat< T, P > intermediate(tquat< T, P > const &prev, tquat< T, P > const &curr, tquat< T, P > const &next)</div><div class="ttdoc">Returns an intermediate control point for squad interpolation. </div></div>
+<div class="ttc" id="a00220_html_ga17295173d4c2b5ae49b84e9993b63a62"><div class="ttname"><a href="a00220.html#ga17295173d4c2b5ae49b84e9993b63a62">glm::exp</a></div><div class="ttdeci">GLM_FUNC_DECL tquat< T, P > exp(tquat< T, P > const &q)</div><div class="ttdoc">Returns a exp of a quaternion. </div></div>
+<div class="ttc" id="a00220_html_ga96575f8868b3f2aa3e13cab9b94ccbd3"><div class="ttname"><a href="a00220.html#ga96575f8868b3f2aa3e13cab9b94ccbd3">glm::rotate</a></div><div class="ttdeci">GLM_FUNC_DECL tvec4< T, P > rotate(tquat< T, P > const &q, tvec4< T, P > const &v)</div><div class="ttdoc">Rotates a 4 components vector by a quaternion. </div></div>
+<div class="ttc" id="a00220_html_gac11bf550f17d1da14423595a27575084"><div class="ttname"><a href="a00220.html#gac11bf550f17d1da14423595a27575084">glm::fastMix</a></div><div class="ttdeci">GLM_FUNC_DECL tquat< T, P > fastMix(tquat< T, P > const &x, tquat< T, P > const &y, T const &a)</div><div class="ttdoc">Quaternion normalized linear interpolation. </div></div>
+<div class="ttc" id="a00220_html_ga808dd0f83ee8150db7e652313bde8eb2"><div class="ttname"><a href="a00220.html#ga808dd0f83ee8150db7e652313bde8eb2">glm::toQuat</a></div><div class="ttdeci">GLM_FUNC_DECL tquat< T, P > toQuat(tmat4x4< T, P > const &x)</div><div class="ttdoc">Converts a 4 * 4 matrix to a quaternion. </div><div class="ttdef"><b>Definition:</b> <a href="a00088_source.html#l00145">gtx/quaternion.hpp:145</a></div></div>
+<div class="ttc" id="a00172_html_ga950f8acff3e33bbda77895a3dcb7e5ce"><div class="ttname"><a href="a00172.html#ga950f8acff3e33bbda77895a3dcb7e5ce">glm::quat_cast</a></div><div class="ttdeci">GLM_FUNC_DECL tquat< T, P > quat_cast(tmat3x3< T, P > const &x)</div><div class="ttdoc">Converts a 3 * 3 matrix to a quaternion. </div></div>
+<div class="ttc" id="a00172_html_gae04c39422eb4e450ec8c4f45a1057b40"><div class="ttname"><a href="a00172.html#gae04c39422eb4e450ec8c4f45a1057b40">glm::mat3_cast</a></div><div class="ttdeci">GLM_FUNC_DECL tmat3x3< T, P > mat3_cast(tquat< T, P > const &x)</div><div class="ttdoc">Converts a quaternion to a 3 * 3 matrix. </div></div>
+<div class="ttc" id="a00220_html_gae75f537becdf2b1381b4482ec96e6c82"><div class="ttname"><a href="a00220.html#gae75f537becdf2b1381b4482ec96e6c82">glm::squad</a></div><div class="ttdeci">GLM_FUNC_DECL tquat< T, P > squad(tquat< T, P > const &q1, tquat< T, P > const &q2, tquat< T, P > const &s1, tquat< T, P > const &s2, T const &h)</div><div class="ttdoc">Compute a point on a path according squad equation. </div></div>
+<div class="ttc" id="a00220_html_ga791f42e134bfe97fc9c96f4668dd7489"><div class="ttname"><a href="a00220.html#ga791f42e134bfe97fc9c96f4668dd7489">glm::log</a></div><div class="ttdeci">GLM_FUNC_DECL tquat< T, P > log(tquat< T, P > const &q)</div><div class="ttdoc">Returns a log of a quaternion. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00089.html b/src/third_party/glm/doc/api/a00089.html
new file mode 100644
index 0000000..c614afa
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00089.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: random.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_9440d7c11b99dcd7e5d369c7cf9802fe.html">gtc</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">random.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00089_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga5506dee301160e3a06aef9b9bc7a0a83"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga5506dee301160e3a06aef9b9bc7a0a83"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00173.html#ga5506dee301160e3a06aef9b9bc7a0a83">ballRand</a> (T Radius)</td></tr>
+<tr class="separator:ga5506dee301160e3a06aef9b9bc7a0a83"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae989c26a2899b2fb7444abe7c275c29c"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gae989c26a2899b2fb7444abe7c275c29c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec2< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00173.html#gae989c26a2899b2fb7444abe7c275c29c">circularRand</a> (T Radius)</td></tr>
+<tr class="separator:gae989c26a2899b2fb7444abe7c275c29c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad3a3ee7d26502a31ba552cb627a68606"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gad3a3ee7d26502a31ba552cb627a68606"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec2< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00173.html#gad3a3ee7d26502a31ba552cb627a68606">diskRand</a> (T Radius)</td></tr>
+<tr class="separator:gad3a3ee7d26502a31ba552cb627a68606"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5193a83e49e4fdc5652c084711083574"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga5193a83e49e4fdc5652c084711083574"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00173.html#ga5193a83e49e4fdc5652c084711083574">gaussRand</a> (genType Mean, genType Deviation)</td></tr>
+<tr class="separator:ga5193a83e49e4fdc5652c084711083574"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga12aebc19b85a8c736f5801c2f7b9b716"><td class="memTemplParams" colspan="2">template<typename genTYpe > </td></tr>
+<tr class="memitem:ga12aebc19b85a8c736f5801c2f7b9b716"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genTYpe </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00173.html#ga12aebc19b85a8c736f5801c2f7b9b716">linearRand</a> (genTYpe Min, genTYpe Max)</td></tr>
+<tr class="separator:ga12aebc19b85a8c736f5801c2f7b9b716"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaba9cec867916d894d794a32897b7fdfd"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gaba9cec867916d894d794a32897b7fdfd"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00173.html#gaba9cec867916d894d794a32897b7fdfd">linearRand</a> (vecType< T, P > const &Min, vecType< T, P > const &Max)</td></tr>
+<tr class="separator:gaba9cec867916d894d794a32897b7fdfd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa9a6fc2d7a295b3857f7db23b1053d9d"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gaa9a6fc2d7a295b3857f7db23b1053d9d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00173.html#gaa9a6fc2d7a295b3857f7db23b1053d9d">sphericalRand</a> (T Radius)</td></tr>
+<tr class="separator:gaa9a6fc2d7a295b3857f7db23b1053d9d"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00173.html">GLM_GTC_random</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd>
+<dd>
+gtc_half_float (dependence) </dd>
+<dd>
+gtx_random (extended) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00089_source.html">random.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00089_source.html b/src/third_party/glm/doc/api/a00089_source.html
new file mode 100644
index 0000000..e5a32d5
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00089_source.html
@@ -0,0 +1,115 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: random.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_9440d7c11b99dcd7e5d369c7cf9802fe.html">gtc</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">random.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00089.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "../vec2.hpp"</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include "../vec3.hpp"</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"># pragma message("GLM: GLM_GTC_random extension included")</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> {</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  </div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genTYpe></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  GLM_FUNC_DECL genTYpe <a class="code" href="a00173.html#gaba9cec867916d894d794a32897b7fdfd">linearRand</a>(</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  genTYpe Min,</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  genTYpe Max);</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00173.html#gaba9cec867916d894d794a32897b7fdfd">linearRand</a>(</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  vecType<T, P> <span class="keyword">const</span> & Min,</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  vecType<T, P> <span class="keyword">const</span> & Max);</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  GLM_FUNC_DECL genType <a class="code" href="a00173.html#ga5193a83e49e4fdc5652c084711083574">gaussRand</a>(</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  genType Mean,</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  genType Deviation);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  </div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  GLM_FUNC_DECL tvec2<T, defaultp> <a class="code" href="a00173.html#gae989c26a2899b2fb7444abe7c275c29c">circularRand</a>(</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  T Radius);</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  </div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  GLM_FUNC_DECL tvec3<T, defaultp> <a class="code" href="a00173.html#gaa9a6fc2d7a295b3857f7db23b1053d9d">sphericalRand</a>(</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  T Radius);</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  </div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  GLM_FUNC_DECL tvec2<T, defaultp> <a class="code" href="a00173.html#gad3a3ee7d26502a31ba552cb627a68606">diskRand</a>(</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  T Radius);</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  </div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  GLM_FUNC_DECL tvec3<T, defaultp> <a class="code" href="a00173.html#ga5506dee301160e3a06aef9b9bc7a0a83">ballRand</a>(</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  T Radius);</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  </div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="preprocessor">#include "random.inl"</span></div>
+<div class="ttc" id="a00173_html_gaa9a6fc2d7a295b3857f7db23b1053d9d"><div class="ttname"><a href="a00173.html#gaa9a6fc2d7a295b3857f7db23b1053d9d">glm::sphericalRand</a></div><div class="ttdeci">GLM_FUNC_DECL tvec3< T, defaultp > sphericalRand(T Radius)</div><div class="ttdoc">Generate a random 3D vector which coordinates are regulary distributed on a sphere of a given radius...</div></div>
+<div class="ttc" id="a00173_html_gad3a3ee7d26502a31ba552cb627a68606"><div class="ttname"><a href="a00173.html#gad3a3ee7d26502a31ba552cb627a68606">glm::diskRand</a></div><div class="ttdeci">GLM_FUNC_DECL tvec2< T, defaultp > diskRand(T Radius)</div><div class="ttdoc">Generate a random 2D vector which coordinates are regulary distributed within the area of a disk of a...</div></div>
+<div class="ttc" id="a00173_html_gaba9cec867916d894d794a32897b7fdfd"><div class="ttname"><a href="a00173.html#gaba9cec867916d894d794a32897b7fdfd">glm::linearRand</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > linearRand(vecType< T, P > const &Min, vecType< T, P > const &Max)</div><div class="ttdoc">Generate random numbers in the interval [Min, Max], according a linear distribution. </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00173_html_ga5506dee301160e3a06aef9b9bc7a0a83"><div class="ttname"><a href="a00173.html#ga5506dee301160e3a06aef9b9bc7a0a83">glm::ballRand</a></div><div class="ttdeci">GLM_FUNC_DECL tvec3< T, defaultp > ballRand(T Radius)</div><div class="ttdoc">Generate a random 3D vector which coordinates are regulary distributed within the volume of a ball of...</div></div>
+<div class="ttc" id="a00173_html_gae989c26a2899b2fb7444abe7c275c29c"><div class="ttname"><a href="a00173.html#gae989c26a2899b2fb7444abe7c275c29c">glm::circularRand</a></div><div class="ttdeci">GLM_FUNC_DECL tvec2< T, defaultp > circularRand(T Radius)</div><div class="ttdoc">Generate a random 2D vector which coordinates are regulary distributed on a circle of a given radius...</div></div>
+<div class="ttc" id="a00173_html_ga5193a83e49e4fdc5652c084711083574"><div class="ttname"><a href="a00173.html#ga5193a83e49e4fdc5652c084711083574">glm::gaussRand</a></div><div class="ttdeci">GLM_FUNC_DECL genType gaussRand(genType Mean, genType Deviation)</div><div class="ttdoc">Generate random numbers in the interval [Min, Max], according a gaussian distribution. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00090.html b/src/third_party/glm/doc/api/a00090.html
new file mode 100644
index 0000000..62a0306
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00090.html
@@ -0,0 +1,67 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: range.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">range.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00090_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00221.html">GLM_GTX_range</a> </p>
+<dl class="section author"><dt>Author</dt><dd>Joshua Moerman </dd></dl>
+
+<p>Definition in file <a class="el" href="a00090_source.html">range.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00090_source.html b/src/third_party/glm/doc/api/a00090_source.html
new file mode 100644
index 0000000..35b7ac2
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00090_source.html
@@ -0,0 +1,133 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: range.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">range.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00090.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// Dependencies</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include "../detail/setup.hpp"</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#if !GLM_HAS_RANGE_FOR</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor"># error "GLM_GTX_range requires C++11 suppport or 'range for'"</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "../gtc/type_ptr.hpp"</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "../gtc/vec1.hpp"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> {</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <span class="keyword">inline</span> length_t components(tvec1<T, P> <span class="keyword">const</span> & v)</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  {</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keywordflow">return</span> v.length();</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  }</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  </div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keyword">inline</span> length_t components(tvec2<T, P> <span class="keyword">const</span> & v)</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  {</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keywordflow">return</span> v.length();</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  }</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  </div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keyword">inline</span> length_t components(tvec3<T, P> <span class="keyword">const</span> & v)</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  {</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordflow">return</span> v.length();</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  }</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  </div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keyword">inline</span> length_t components(tvec4<T, P> <span class="keyword">const</span> & v)</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  {</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keywordflow">return</span> v.length();</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  }</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keyword">inline</span> length_t components(genType <span class="keyword">const</span> & m)</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  {</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keywordflow">return</span> m.length() * m[0].length();</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  }</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  </div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keyword">inline</span> <span class="keyword">typename</span> genType::value_type <span class="keyword">const</span> * begin(genType <span class="keyword">const</span> & v)</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  {</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keywordflow">return</span> <a class="code" href="a00178.html#gaf019636bb8bd7c9efb7c7ce3bb23bcfc">value_ptr</a>(v);</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  }</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keyword">inline</span> <span class="keyword">typename</span> genType::value_type <span class="keyword">const</span> * end(genType <span class="keyword">const</span> & v)</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  {</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keywordflow">return</span> begin(v) + components(v);</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  }</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="keyword">inline</span> <span class="keyword">typename</span> genType::value_type * begin(genType& v)</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  {</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="keywordflow">return</span> <a class="code" href="a00178.html#gaf019636bb8bd7c9efb7c7ce3bb23bcfc">value_ptr</a>(v);</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  }</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keyword">inline</span> <span class="keyword">typename</span> genType::value_type * end(genType& v)</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  {</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keywordflow">return</span> begin(v) + components(v);</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  }</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> }<span class="comment">//namespace glm</span></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00178_html_gaf019636bb8bd7c9efb7c7ce3bb23bcfc"><div class="ttname"><a href="a00178.html#gaf019636bb8bd7c9efb7c7ce3bb23bcfc">glm::value_ptr</a></div><div class="ttdeci">GLM_FUNC_DECL genType::value_type const * value_ptr(genType const &vec)</div><div class="ttdoc">Return the constant address to the data of the input parameter. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00091.html b/src/third_party/glm/doc/api/a00091.html
new file mode 100644
index 0000000..d9af15d
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00091.html
@@ -0,0 +1,81 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: raw_data.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#typedef-members">Typedefs</a> </div>
+ <div class="headertitle">
+<div class="title">raw_data.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00091_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ga3005cb0d839d546c616becfa6602c607"><td class="memItemLeft" align="right" valign="top">typedef detail::uint8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00222.html#ga3005cb0d839d546c616becfa6602c607">byte</a></td></tr>
+<tr class="separator:ga3005cb0d839d546c616becfa6602c607"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga86e46fff9f80ae33893d8d697f2ca98a"><td class="memItemLeft" align="right" valign="top">typedef detail::uint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00222.html#ga86e46fff9f80ae33893d8d697f2ca98a">dword</a></td></tr>
+<tr class="separator:ga86e46fff9f80ae33893d8d697f2ca98a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4021754ffb8e5ef14c75802b15657714"><td class="memItemLeft" align="right" valign="top">typedef detail::uint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00222.html#ga4021754ffb8e5ef14c75802b15657714">qword</a></td></tr>
+<tr class="separator:ga4021754ffb8e5ef14c75802b15657714"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga16e9fea0ef1e6c4ef472d3d1731c49a5"><td class="memItemLeft" align="right" valign="top">typedef detail::uint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00222.html#ga16e9fea0ef1e6c4ef472d3d1731c49a5">word</a></td></tr>
+<tr class="separator:ga16e9fea0ef1e6c4ef472d3d1731c49a5"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00222.html">GLM_GTX_raw_data</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00091_source.html">raw_data.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00091_source.html b/src/third_party/glm/doc/api/a00091_source.html
new file mode 100644
index 0000000..af978ee
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00091_source.html
@@ -0,0 +1,90 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: raw_data.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">raw_data.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00091.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// Dependencies</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include "../detail/setup.hpp"</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "../detail/type_int.hpp"</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_raw_data extension included")</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> {</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"><a class="line" href="a00222.html#ga3005cb0d839d546c616becfa6602c607"> 30</a></span>  <span class="keyword">typedef</span> detail::uint8 <a class="code" href="a00222.html#ga3005cb0d839d546c616becfa6602c607">byte</a>;</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="a00222.html#ga16e9fea0ef1e6c4ef472d3d1731c49a5"> 34</a></span>  <span class="keyword">typedef</span> detail::uint16 <a class="code" href="a00222.html#ga16e9fea0ef1e6c4ef472d3d1731c49a5">word</a>;</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="a00222.html#ga86e46fff9f80ae33893d8d697f2ca98a"> 38</a></span>  <span class="keyword">typedef</span> detail::uint32 <a class="code" href="a00222.html#ga86e46fff9f80ae33893d8d697f2ca98a">dword</a>;</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="a00222.html#ga4021754ffb8e5ef14c75802b15657714"> 42</a></span>  <span class="keyword">typedef</span> detail::uint64 <a class="code" href="a00222.html#ga4021754ffb8e5ef14c75802b15657714">qword</a>;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> }<span class="comment">// namespace glm</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor">#include "raw_data.inl"</span></div>
+<div class="ttc" id="a00222_html_ga4021754ffb8e5ef14c75802b15657714"><div class="ttname"><a href="a00222.html#ga4021754ffb8e5ef14c75802b15657714">glm::qword</a></div><div class="ttdeci">detail::uint64 qword</div><div class="ttdoc">Type for qword numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00091_source.html#l00042">raw_data.hpp:42</a></div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00222_html_ga3005cb0d839d546c616becfa6602c607"><div class="ttname"><a href="a00222.html#ga3005cb0d839d546c616becfa6602c607">glm::byte</a></div><div class="ttdeci">detail::uint8 byte</div><div class="ttdoc">Type for byte numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00091_source.html#l00030">raw_data.hpp:30</a></div></div>
+<div class="ttc" id="a00222_html_ga16e9fea0ef1e6c4ef472d3d1731c49a5"><div class="ttname"><a href="a00222.html#ga16e9fea0ef1e6c4ef472d3d1731c49a5">glm::word</a></div><div class="ttdeci">detail::uint16 word</div><div class="ttdoc">Type for word numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00091_source.html#l00034">raw_data.hpp:34</a></div></div>
+<div class="ttc" id="a00222_html_ga86e46fff9f80ae33893d8d697f2ca98a"><div class="ttname"><a href="a00222.html#ga86e46fff9f80ae33893d8d697f2ca98a">glm::dword</a></div><div class="ttdeci">detail::uint32 dword</div><div class="ttdoc">Type for dword numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00091_source.html#l00038">raw_data.hpp:38</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00092.html b/src/third_party/glm/doc/api/a00092.html
new file mode 100644
index 0000000..cacd7fa
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00092.html
@@ -0,0 +1,109 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: reciprocal.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_9440d7c11b99dcd7e5d369c7cf9802fe.html">gtc</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">reciprocal.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00092_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gaeadfb9c9d71093f7865b2ba2ca8d104d"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gaeadfb9c9d71093f7865b2ba2ca8d104d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00174.html#gaeadfb9c9d71093f7865b2ba2ca8d104d">acot</a> (genType x)</td></tr>
+<tr class="separator:gaeadfb9c9d71093f7865b2ba2ca8d104d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafaca98a7100170db8841f446282debfa"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gafaca98a7100170db8841f446282debfa"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00174.html#gafaca98a7100170db8841f446282debfa">acoth</a> (genType x)</td></tr>
+<tr class="separator:gafaca98a7100170db8841f446282debfa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1b4bed91476b9b915e76b4a30236d330"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga1b4bed91476b9b915e76b4a30236d330"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00174.html#ga1b4bed91476b9b915e76b4a30236d330">acsc</a> (genType x)</td></tr>
+<tr class="separator:ga1b4bed91476b9b915e76b4a30236d330"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4b50aa5e5afc7e19ec113ab91596c576"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga4b50aa5e5afc7e19ec113ab91596c576"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00174.html#ga4b50aa5e5afc7e19ec113ab91596c576">acsch</a> (genType x)</td></tr>
+<tr class="separator:ga4b50aa5e5afc7e19ec113ab91596c576"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2c5b7f962c2c9ff684e6d2de48db1f10"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga2c5b7f962c2c9ff684e6d2de48db1f10"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00174.html#ga2c5b7f962c2c9ff684e6d2de48db1f10">asec</a> (genType x)</td></tr>
+<tr class="separator:ga2c5b7f962c2c9ff684e6d2de48db1f10"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaec7586dccfe431f850d006f3824b8ca6"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gaec7586dccfe431f850d006f3824b8ca6"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00174.html#gaec7586dccfe431f850d006f3824b8ca6">asech</a> (genType x)</td></tr>
+<tr class="separator:gaec7586dccfe431f850d006f3824b8ca6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3a7b517a95bbd3ad74da3aea87a66314"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga3a7b517a95bbd3ad74da3aea87a66314"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00174.html#ga3a7b517a95bbd3ad74da3aea87a66314">cot</a> (genType angle)</td></tr>
+<tr class="separator:ga3a7b517a95bbd3ad74da3aea87a66314"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6b8b770eb7198e4dea59d52e6db81442"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga6b8b770eb7198e4dea59d52e6db81442"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00174.html#ga6b8b770eb7198e4dea59d52e6db81442">coth</a> (genType angle)</td></tr>
+<tr class="separator:ga6b8b770eb7198e4dea59d52e6db81442"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga59dd0005b6474eea48af743b4f14ebbb"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga59dd0005b6474eea48af743b4f14ebbb"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00174.html#ga59dd0005b6474eea48af743b4f14ebbb">csc</a> (genType angle)</td></tr>
+<tr class="separator:ga59dd0005b6474eea48af743b4f14ebbb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6d95843ff3ca6472ab399ba171d290a0"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga6d95843ff3ca6472ab399ba171d290a0"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00174.html#ga6d95843ff3ca6472ab399ba171d290a0">csch</a> (genType angle)</td></tr>
+<tr class="separator:ga6d95843ff3ca6472ab399ba171d290a0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae4bcbebee670c5ea155f0777b3acbd84"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gae4bcbebee670c5ea155f0777b3acbd84"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00174.html#gae4bcbebee670c5ea155f0777b3acbd84">sec</a> (genType angle)</td></tr>
+<tr class="separator:gae4bcbebee670c5ea155f0777b3acbd84"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9a5cfd1e7170104a7b33863b1b75e5ae"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga9a5cfd1e7170104a7b33863b1b75e5ae"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00174.html#ga9a5cfd1e7170104a7b33863b1b75e5ae">sech</a> (genType angle)</td></tr>
+<tr class="separator:ga9a5cfd1e7170104a7b33863b1b75e5ae"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00174.html">GLM_GTC_reciprocal</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00092_source.html">reciprocal.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00092_source.html b/src/third_party/glm/doc/api/a00092_source.html
new file mode 100644
index 0000000..0a7798f
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00092_source.html
@@ -0,0 +1,126 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: reciprocal.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_9440d7c11b99dcd7e5d369c7cf9802fe.html">gtc</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">reciprocal.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00092.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// Dependencies</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include "../detail/setup.hpp"</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor"># pragma message("GLM: GLM_GTC_reciprocal extension included")</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> {</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  GLM_FUNC_DECL genType <a class="code" href="a00174.html#gae4bcbebee670c5ea155f0777b3acbd84">sec</a>(genType <a class="code" href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">angle</a>);</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType> </div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  GLM_FUNC_DECL genType <a class="code" href="a00174.html#ga59dd0005b6474eea48af743b4f14ebbb">csc</a>(genType <a class="code" href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">angle</a>);</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  </div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  GLM_FUNC_DECL genType <a class="code" href="a00174.html#ga3a7b517a95bbd3ad74da3aea87a66314">cot</a>(genType <a class="code" href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">angle</a>);</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  GLM_FUNC_DECL genType <a class="code" href="a00174.html#ga2c5b7f962c2c9ff684e6d2de48db1f10">asec</a>(genType x);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  GLM_FUNC_DECL genType <a class="code" href="a00174.html#ga1b4bed91476b9b915e76b4a30236d330">acsc</a>(genType x);</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  </div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  GLM_FUNC_DECL genType <a class="code" href="a00174.html#gaeadfb9c9d71093f7865b2ba2ca8d104d">acot</a>(genType x);</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  GLM_FUNC_DECL genType <a class="code" href="a00174.html#ga9a5cfd1e7170104a7b33863b1b75e5ae">sech</a>(genType <a class="code" href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">angle</a>);</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  GLM_FUNC_DECL genType <a class="code" href="a00174.html#ga6d95843ff3ca6472ab399ba171d290a0">csch</a>(genType <a class="code" href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">angle</a>);</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  </div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  GLM_FUNC_DECL genType <a class="code" href="a00174.html#ga6b8b770eb7198e4dea59d52e6db81442">coth</a>(genType <a class="code" href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">angle</a>);</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  GLM_FUNC_DECL genType <a class="code" href="a00174.html#gaec7586dccfe431f850d006f3824b8ca6">asech</a>(genType x);</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  GLM_FUNC_DECL genType <a class="code" href="a00174.html#ga4b50aa5e5afc7e19ec113ab91596c576">acsch</a>(genType x);</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  </div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  GLM_FUNC_DECL genType <a class="code" href="a00174.html#gafaca98a7100170db8841f446282debfa">acoth</a>(genType x);</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="preprocessor">#include "reciprocal.inl"</span></div>
+<div class="ttc" id="a00174_html_ga59dd0005b6474eea48af743b4f14ebbb"><div class="ttname"><a href="a00174.html#ga59dd0005b6474eea48af743b4f14ebbb">glm::csc</a></div><div class="ttdeci">GLM_FUNC_DECL genType csc(genType angle)</div><div class="ttdoc">Cosecant function. </div></div>
+<div class="ttc" id="a00174_html_ga6b8b770eb7198e4dea59d52e6db81442"><div class="ttname"><a href="a00174.html#ga6b8b770eb7198e4dea59d52e6db81442">glm::coth</a></div><div class="ttdeci">GLM_FUNC_DECL genType coth(genType angle)</div><div class="ttdoc">Cotangent hyperbolic function. </div></div>
+<div class="ttc" id="a00174_html_ga9a5cfd1e7170104a7b33863b1b75e5ae"><div class="ttname"><a href="a00174.html#ga9a5cfd1e7170104a7b33863b1b75e5ae">glm::sech</a></div><div class="ttdeci">GLM_FUNC_DECL genType sech(genType angle)</div><div class="ttdoc">Secant hyperbolic function. </div></div>
+<div class="ttc" id="a00174_html_gaeadfb9c9d71093f7865b2ba2ca8d104d"><div class="ttname"><a href="a00174.html#gaeadfb9c9d71093f7865b2ba2ca8d104d">glm::acot</a></div><div class="ttdeci">GLM_FUNC_DECL genType acot(genType x)</div><div class="ttdoc">Inverse cotangent function. </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00174_html_ga3a7b517a95bbd3ad74da3aea87a66314"><div class="ttname"><a href="a00174.html#ga3a7b517a95bbd3ad74da3aea87a66314">glm::cot</a></div><div class="ttdeci">GLM_FUNC_DECL genType cot(genType angle)</div><div class="ttdoc">Cotangent function. </div></div>
+<div class="ttc" id="a00174_html_gaec7586dccfe431f850d006f3824b8ca6"><div class="ttname"><a href="a00174.html#gaec7586dccfe431f850d006f3824b8ca6">glm::asech</a></div><div class="ttdeci">GLM_FUNC_DECL genType asech(genType x)</div><div class="ttdoc">Inverse secant hyperbolic function. </div></div>
+<div class="ttc" id="a00174_html_gae4bcbebee670c5ea155f0777b3acbd84"><div class="ttname"><a href="a00174.html#gae4bcbebee670c5ea155f0777b3acbd84">glm::sec</a></div><div class="ttdeci">GLM_FUNC_DECL genType sec(genType angle)</div><div class="ttdoc">Secant function. </div></div>
+<div class="ttc" id="a00172_html_gad4a4448baedb198b2b1e7880d2544dc9"><div class="ttname"><a href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">glm::angle</a></div><div class="ttdeci">GLM_FUNC_DECL T angle(tquat< T, P > const &x)</div><div class="ttdoc">Returns the quaternion rotation angle. </div></div>
+<div class="ttc" id="a00174_html_ga1b4bed91476b9b915e76b4a30236d330"><div class="ttname"><a href="a00174.html#ga1b4bed91476b9b915e76b4a30236d330">glm::acsc</a></div><div class="ttdeci">GLM_FUNC_DECL genType acsc(genType x)</div><div class="ttdoc">Inverse cosecant function. </div></div>
+<div class="ttc" id="a00174_html_gafaca98a7100170db8841f446282debfa"><div class="ttname"><a href="a00174.html#gafaca98a7100170db8841f446282debfa">glm::acoth</a></div><div class="ttdeci">GLM_FUNC_DECL genType acoth(genType x)</div><div class="ttdoc">Inverse cotangent hyperbolic function. </div></div>
+<div class="ttc" id="a00174_html_ga2c5b7f962c2c9ff684e6d2de48db1f10"><div class="ttname"><a href="a00174.html#ga2c5b7f962c2c9ff684e6d2de48db1f10">glm::asec</a></div><div class="ttdeci">GLM_FUNC_DECL genType asec(genType x)</div><div class="ttdoc">Inverse secant function. </div></div>
+<div class="ttc" id="a00174_html_ga6d95843ff3ca6472ab399ba171d290a0"><div class="ttname"><a href="a00174.html#ga6d95843ff3ca6472ab399ba171d290a0">glm::csch</a></div><div class="ttdeci">GLM_FUNC_DECL genType csch(genType angle)</div><div class="ttdoc">Cosecant hyperbolic function. </div></div>
+<div class="ttc" id="a00174_html_ga4b50aa5e5afc7e19ec113ab91596c576"><div class="ttname"><a href="a00174.html#ga4b50aa5e5afc7e19ec113ab91596c576">glm::acsch</a></div><div class="ttdeci">GLM_FUNC_DECL genType acsch(genType x)</div><div class="ttdoc">Inverse cosecant hyperbolic function. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00093.html b/src/third_party/glm/doc/api/a00093.html
new file mode 100644
index 0000000..6040ad2
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00093.html
@@ -0,0 +1,83 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: rotate_normalized_axis.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">rotate_normalized_axis.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00093_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gaada623964a895def5a8b77b5b7887dc4"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gaada623964a895def5a8b77b5b7887dc4"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00223.html#gaada623964a895def5a8b77b5b7887dc4">rotateNormalizedAxis</a> (tmat4x4< T, P > const &m, T const &angle, tvec3< T, P > const &axis)</td></tr>
+<tr class="separator:gaada623964a895def5a8b77b5b7887dc4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6c00234d844faef36a6a94669fbd1639"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga6c00234d844faef36a6a94669fbd1639"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00223.html#ga6c00234d844faef36a6a94669fbd1639">rotateNormalizedAxis</a> (tquat< T, P > const &q, T const &angle, tvec3< T, P > const &axis)</td></tr>
+<tr class="separator:ga6c00234d844faef36a6a94669fbd1639"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00223.html">GLM_GTX_rotate_normalized_axis</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd>
+<dd>
+<a class="el" href="a00169.html" title="Defines functions that generate common transformation matrices. ">GLM_GTC_matrix_transform</a> </dd>
+<dd>
+<a class="el" href="a00172.html" title="Defines a templated quaternion type and several quaternion operations. ">GLM_GTC_quaternion</a> </dd></dl>
+
+<p>Definition in file <a class="el" href="a00093_source.html">rotate_normalized_axis.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00093_source.html b/src/third_party/glm/doc/api/a00093_source.html
new file mode 100644
index 0000000..6c2b2ac
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00093_source.html
@@ -0,0 +1,94 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: rotate_normalized_axis.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">rotate_normalized_axis.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00093.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "../glm.hpp"</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include "../gtc/epsilon.hpp"</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "../gtc/quaternion.hpp"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_rotate_normalized_axis extension included")</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> {</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  GLM_FUNC_DECL tmat4x4<T, P> <a class="code" href="a00223.html#ga6c00234d844faef36a6a94669fbd1639">rotateNormalizedAxis</a>(</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  tmat4x4<T, P> <span class="keyword">const</span> & m,</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  T <span class="keyword">const</span> & <a class="code" href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">angle</a>,</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  tvec3<T, P> <span class="keyword">const</span> & <a class="code" href="a00172.html#ga0b3e87a13b2708154b72259e50789a19">axis</a>);</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  GLM_FUNC_DECL tquat<T, P> <a class="code" href="a00223.html#ga6c00234d844faef36a6a94669fbd1639">rotateNormalizedAxis</a>(</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  tquat<T, P> <span class="keyword">const</span> & q,</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  T <span class="keyword">const</span> & <a class="code" href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">angle</a>,</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  tvec3<T, P> <span class="keyword">const</span> & <a class="code" href="a00172.html#ga0b3e87a13b2708154b72259e50789a19">axis</a>);</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="preprocessor">#include "rotate_normalized_axis.inl"</span></div>
+<div class="ttc" id="a00223_html_ga6c00234d844faef36a6a94669fbd1639"><div class="ttname"><a href="a00223.html#ga6c00234d844faef36a6a94669fbd1639">glm::rotateNormalizedAxis</a></div><div class="ttdeci">GLM_FUNC_DECL tquat< T, P > rotateNormalizedAxis(tquat< T, P > const &q, T const &angle, tvec3< T, P > const &axis)</div><div class="ttdoc">Rotates a quaternion from a vector of 3 components normalized axis and an angle. </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00172_html_ga0b3e87a13b2708154b72259e50789a19"><div class="ttname"><a href="a00172.html#ga0b3e87a13b2708154b72259e50789a19">glm::axis</a></div><div class="ttdeci">GLM_FUNC_DECL tvec3< T, P > axis(tquat< T, P > const &x)</div><div class="ttdoc">Returns the q rotation axis. </div></div>
+<div class="ttc" id="a00172_html_gad4a4448baedb198b2b1e7880d2544dc9"><div class="ttname"><a href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">glm::angle</a></div><div class="ttdeci">GLM_FUNC_DECL T angle(tquat< T, P > const &x)</div><div class="ttdoc">Returns the quaternion rotation angle. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00094.html b/src/third_party/glm/doc/api/a00094.html
new file mode 100644
index 0000000..ac05ee7
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00094.html
@@ -0,0 +1,108 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: rotate_vector.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">rotate_vector.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00094_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga49b4d082305cdfcfe0a5c184f684a902"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga49b4d082305cdfcfe0a5c184f684a902"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00224.html#ga49b4d082305cdfcfe0a5c184f684a902">orientation</a> (tvec3< T, P > const &Normal, tvec3< T, P > const &Up)</td></tr>
+<tr class="separator:ga49b4d082305cdfcfe0a5c184f684a902"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9bff444fb191e2e089a906b899cd033d"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga9bff444fb191e2e089a906b899cd033d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec2< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00224.html#ga9bff444fb191e2e089a906b899cd033d">rotate</a> (tvec2< T, P > const &v, T const &angle)</td></tr>
+<tr class="separator:ga9bff444fb191e2e089a906b899cd033d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga526b6f8995bc0946aa1a04e9297de7c6"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga526b6f8995bc0946aa1a04e9297de7c6"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00224.html#ga526b6f8995bc0946aa1a04e9297de7c6">rotate</a> (tvec3< T, P > const &v, T const &angle, tvec3< T, P > const &normal)</td></tr>
+<tr class="separator:ga526b6f8995bc0946aa1a04e9297de7c6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf4d59dd2f668f9ffb38048055d1316bd"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gaf4d59dd2f668f9ffb38048055d1316bd"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00224.html#gaf4d59dd2f668f9ffb38048055d1316bd">rotate</a> (tvec4< T, P > const &v, T const &angle, tvec3< T, P > const &normal)</td></tr>
+<tr class="separator:gaf4d59dd2f668f9ffb38048055d1316bd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0c2dc9f8507bffcbb957db9818b18508"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga0c2dc9f8507bffcbb957db9818b18508"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00224.html#ga0c2dc9f8507bffcbb957db9818b18508">rotateX</a> (tvec3< T, P > const &v, T const &angle)</td></tr>
+<tr class="separator:ga0c2dc9f8507bffcbb957db9818b18508"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gadab312d430a564741ae02215255027a0"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gadab312d430a564741ae02215255027a0"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00224.html#gadab312d430a564741ae02215255027a0">rotateX</a> (tvec4< T, P > const &v, T const &angle)</td></tr>
+<tr class="separator:gadab312d430a564741ae02215255027a0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gabb5d19eba5befeebcb35a0aad4a114e3"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gabb5d19eba5befeebcb35a0aad4a114e3"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00224.html#gabb5d19eba5befeebcb35a0aad4a114e3">rotateY</a> (tvec3< T, P > const &v, T const &angle)</td></tr>
+<tr class="separator:gabb5d19eba5befeebcb35a0aad4a114e3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae2507577c4bffa3548b32852791dd90c"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gae2507577c4bffa3548b32852791dd90c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00224.html#gae2507577c4bffa3548b32852791dd90c">rotateY</a> (tvec4< T, P > const &v, T const &angle)</td></tr>
+<tr class="separator:gae2507577c4bffa3548b32852791dd90c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae30ac01b89d4f16a972fee696c964908"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gae30ac01b89d4f16a972fee696c964908"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00224.html#gae30ac01b89d4f16a972fee696c964908">rotateZ</a> (tvec3< T, P > const &v, T const &angle)</td></tr>
+<tr class="separator:gae30ac01b89d4f16a972fee696c964908"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga034e5d197ab4bd8685624bc2cf16e586"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga034e5d197ab4bd8685624bc2cf16e586"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00224.html#ga034e5d197ab4bd8685624bc2cf16e586">rotateZ</a> (tvec4< T, P > const &v, T const &angle)</td></tr>
+<tr class="separator:ga034e5d197ab4bd8685624bc2cf16e586"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafc9ab3101c3f3799f3d5d6d9d3baac09"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gafc9ab3101c3f3799f3d5d6d9d3baac09"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00224.html#gafc9ab3101c3f3799f3d5d6d9d3baac09">slerp</a> (tvec3< T, P > const &x, tvec3< T, P > const &y, T const &a)</td></tr>
+<tr class="separator:gafc9ab3101c3f3799f3d5d6d9d3baac09"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00224.html">GLM_GTX_rotate_vector</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd>
+<dd>
+<a class="el" href="a00232.html" title="Add transformation matrices. ">GLM_GTX_transform</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00094_source.html">rotate_vector.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00094_source.html b/src/third_party/glm/doc/api/a00094_source.html
new file mode 100644
index 0000000..b97dd43
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00094_source.html
@@ -0,0 +1,143 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: rotate_vector.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">rotate_vector.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00094.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "../glm.hpp"</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "../gtx/transform.hpp"</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_rotate_vector extension included")</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> {</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  GLM_FUNC_DECL tvec3<T, P> <a class="code" href="a00224.html#gafc9ab3101c3f3799f3d5d6d9d3baac09">slerp</a>(</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  tvec3<T, P> <span class="keyword">const</span> & x,</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  tvec3<T, P> <span class="keyword">const</span> & y,</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  T <span class="keyword">const</span> & a);</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  GLM_FUNC_DECL tvec2<T, P> <a class="code" href="a00224.html#gaf4d59dd2f668f9ffb38048055d1316bd">rotate</a>(</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  tvec2<T, P> <span class="keyword">const</span> & v,</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  T <span class="keyword">const</span> & <a class="code" href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">angle</a>);</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  </div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  GLM_FUNC_DECL tvec3<T, P> <a class="code" href="a00224.html#gaf4d59dd2f668f9ffb38048055d1316bd">rotate</a>(</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  tvec3<T, P> <span class="keyword">const</span> & v,</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  T <span class="keyword">const</span> & <a class="code" href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">angle</a>,</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  tvec3<T, P> <span class="keyword">const</span> & normal);</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  </div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  GLM_FUNC_DECL tvec4<T, P> <a class="code" href="a00224.html#gaf4d59dd2f668f9ffb38048055d1316bd">rotate</a>(</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  tvec4<T, P> <span class="keyword">const</span> & v,</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  T <span class="keyword">const</span> & <a class="code" href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">angle</a>,</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  tvec3<T, P> <span class="keyword">const</span> & normal);</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  </div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  GLM_FUNC_DECL tvec3<T, P> <a class="code" href="a00224.html#gadab312d430a564741ae02215255027a0">rotateX</a>(</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  tvec3<T, P> <span class="keyword">const</span> & v,</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  T <span class="keyword">const</span> & <a class="code" href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">angle</a>);</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  GLM_FUNC_DECL tvec3<T, P> <a class="code" href="a00224.html#gae2507577c4bffa3548b32852791dd90c">rotateY</a>(</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  tvec3<T, P> <span class="keyword">const</span> & v,</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  T <span class="keyword">const</span> & <a class="code" href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">angle</a>);</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  </div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  GLM_FUNC_DECL tvec3<T, P> <a class="code" href="a00224.html#ga034e5d197ab4bd8685624bc2cf16e586">rotateZ</a>(</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  tvec3<T, P> <span class="keyword">const</span> & v,</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  T <span class="keyword">const</span> & <a class="code" href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">angle</a>);</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  </div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  GLM_FUNC_DECL tvec4<T, P> <a class="code" href="a00224.html#gadab312d430a564741ae02215255027a0">rotateX</a>(</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  tvec4<T, P> <span class="keyword">const</span> & v,</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  T <span class="keyword">const</span> & <a class="code" href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">angle</a>);</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  </div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  GLM_FUNC_DECL tvec4<T, P> <a class="code" href="a00224.html#gae2507577c4bffa3548b32852791dd90c">rotateY</a>(</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  tvec4<T, P> <span class="keyword">const</span> & v,</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  T <span class="keyword">const</span> & <a class="code" href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">angle</a>);</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  </div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  GLM_FUNC_DECL tvec4<T, P> <a class="code" href="a00224.html#ga034e5d197ab4bd8685624bc2cf16e586">rotateZ</a>(</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  tvec4<T, P> <span class="keyword">const</span> & v,</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  T <span class="keyword">const</span> & <a class="code" href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">angle</a>);</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  </div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  GLM_FUNC_DECL tmat4x4<T, P> <a class="code" href="a00224.html#ga49b4d082305cdfcfe0a5c184f684a902">orientation</a>(</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  tvec3<T, P> <span class="keyword">const</span> & Normal,</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  tvec3<T, P> <span class="keyword">const</span> & Up);</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="preprocessor">#include "rotate_vector.inl"</span></div>
+<div class="ttc" id="a00224_html_ga49b4d082305cdfcfe0a5c184f684a902"><div class="ttname"><a href="a00224.html#ga49b4d082305cdfcfe0a5c184f684a902">glm::orientation</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, P > orientation(tvec3< T, P > const &Normal, tvec3< T, P > const &Up)</div><div class="ttdoc">Build a rotation matrix from a normal and a up vector. </div></div>
+<div class="ttc" id="a00224_html_gaf4d59dd2f668f9ffb38048055d1316bd"><div class="ttname"><a href="a00224.html#gaf4d59dd2f668f9ffb38048055d1316bd">glm::rotate</a></div><div class="ttdeci">GLM_FUNC_DECL tvec4< T, P > rotate(tvec4< T, P > const &v, T const &angle, tvec3< T, P > const &normal)</div><div class="ttdoc">Rotate a four dimensional vector around an axis. </div></div>
+<div class="ttc" id="a00224_html_ga034e5d197ab4bd8685624bc2cf16e586"><div class="ttname"><a href="a00224.html#ga034e5d197ab4bd8685624bc2cf16e586">glm::rotateZ</a></div><div class="ttdeci">GLM_FUNC_DECL tvec4< T, P > rotateZ(tvec4< T, P > const &v, T const &angle)</div><div class="ttdoc">Rotate a four dimensional vector around the X axis. </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00224_html_gae2507577c4bffa3548b32852791dd90c"><div class="ttname"><a href="a00224.html#gae2507577c4bffa3548b32852791dd90c">glm::rotateY</a></div><div class="ttdeci">GLM_FUNC_DECL tvec4< T, P > rotateY(tvec4< T, P > const &v, T const &angle)</div><div class="ttdoc">Rotate a four dimensional vector around the X axis. </div></div>
+<div class="ttc" id="a00224_html_gafc9ab3101c3f3799f3d5d6d9d3baac09"><div class="ttname"><a href="a00224.html#gafc9ab3101c3f3799f3d5d6d9d3baac09">glm::slerp</a></div><div class="ttdeci">GLM_FUNC_DECL tvec3< T, P > slerp(tvec3< T, P > const &x, tvec3< T, P > const &y, T const &a)</div><div class="ttdoc">Returns Spherical interpolation between two vectors. </div></div>
+<div class="ttc" id="a00172_html_gad4a4448baedb198b2b1e7880d2544dc9"><div class="ttname"><a href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">glm::angle</a></div><div class="ttdeci">GLM_FUNC_DECL T angle(tquat< T, P > const &x)</div><div class="ttdoc">Returns the quaternion rotation angle. </div></div>
+<div class="ttc" id="a00224_html_gadab312d430a564741ae02215255027a0"><div class="ttname"><a href="a00224.html#gadab312d430a564741ae02215255027a0">glm::rotateX</a></div><div class="ttdeci">GLM_FUNC_DECL tvec4< T, P > rotateX(tvec4< T, P > const &v, T const &angle)</div><div class="ttdoc">Rotate a four dimentionnals vector around the X axis. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00095.html b/src/third_party/glm/doc/api/a00095.html
new file mode 100644
index 0000000..0c2f74f
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00095.html
@@ -0,0 +1,126 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: round.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_9440d7c11b99dcd7e5d369c7cf9802fe.html">gtc</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">round.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00095_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gac84898c466e609cdd2e81d9ba907d9e8"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gac84898c466e609cdd2e81d9ba907d9e8"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00175.html#gac84898c466e609cdd2e81d9ba907d9e8">ceilMultiple</a> (genType Source, genType Multiple)</td></tr>
+<tr class="separator:gac84898c466e609cdd2e81d9ba907d9e8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafe632af669ac57d670ca18e3665a12ca"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gafe632af669ac57d670ca18e3665a12ca"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00175.html#gafe632af669ac57d670ca18e3665a12ca">ceilMultiple</a> (vecType< T, P > const &Source, vecType< T, P > const &Multiple)</td></tr>
+<tr class="separator:gafe632af669ac57d670ca18e3665a12ca"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa73c7690c787086fa3ac1c312264acab"><td class="memTemplParams" colspan="2">template<typename genIUType > </td></tr>
+<tr class="memitem:gaa73c7690c787086fa3ac1c312264acab"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genIUType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00175.html#gaa73c7690c787086fa3ac1c312264acab">ceilPowerOfTwo</a> (genIUType Value)</td></tr>
+<tr class="separator:gaa73c7690c787086fa3ac1c312264acab"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga76ec9b214ea1376fe09a903e34bab847"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga76ec9b214ea1376fe09a903e34bab847"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00175.html#ga76ec9b214ea1376fe09a903e34bab847">ceilPowerOfTwo</a> (vecType< T, P > const &value)</td></tr>
+<tr class="separator:ga76ec9b214ea1376fe09a903e34bab847"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9eafb9dbedf84e5cece65c2fe9d5631d"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga9eafb9dbedf84e5cece65c2fe9d5631d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00175.html#ga9eafb9dbedf84e5cece65c2fe9d5631d">floorMultiple</a> (genType Source, genType Multiple)</td></tr>
+<tr class="separator:ga9eafb9dbedf84e5cece65c2fe9d5631d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6912db42d43873fe1dedb3aed2b7a239"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga6912db42d43873fe1dedb3aed2b7a239"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00175.html#ga6912db42d43873fe1dedb3aed2b7a239">floorMultiple</a> (vecType< T, P > const &Source, vecType< T, P > const &Multiple)</td></tr>
+<tr class="separator:ga6912db42d43873fe1dedb3aed2b7a239"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac80f6519c31baae10d8d7bea6735d1fa"><td class="memTemplParams" colspan="2">template<typename genIUType > </td></tr>
+<tr class="memitem:gac80f6519c31baae10d8d7bea6735d1fa"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genIUType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00175.html#gac80f6519c31baae10d8d7bea6735d1fa">floorPowerOfTwo</a> (genIUType Value)</td></tr>
+<tr class="separator:gac80f6519c31baae10d8d7bea6735d1fa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6a5a8f6dd1b2f755e4572bd039062c37"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga6a5a8f6dd1b2f755e4572bd039062c37"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00175.html#ga6a5a8f6dd1b2f755e4572bd039062c37">floorPowerOfTwo</a> (vecType< T, P > const &value)</td></tr>
+<tr class="separator:ga6a5a8f6dd1b2f755e4572bd039062c37"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf7444a7b2eb524f373463ceba76b9326"><td class="memTemplParams" colspan="2">template<typename genIUType > </td></tr>
+<tr class="memitem:gaf7444a7b2eb524f373463ceba76b9326"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00175.html#gaf7444a7b2eb524f373463ceba76b9326">isMultiple</a> (genIUType Value, genIUType Multiple)</td></tr>
+<tr class="separator:gaf7444a7b2eb524f373463ceba76b9326"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga50ea5d5dc33fffba39ad6002a3784123"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga50ea5d5dc33fffba39ad6002a3784123"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00175.html#ga50ea5d5dc33fffba39ad6002a3784123">isMultiple</a> (vecType< T, P > const &Value, T Multiple)</td></tr>
+<tr class="separator:ga50ea5d5dc33fffba39ad6002a3784123"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7ae705574ef3e3ebfb4f537d8d285c48"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga7ae705574ef3e3ebfb4f537d8d285c48"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00175.html#ga7ae705574ef3e3ebfb4f537d8d285c48">isMultiple</a> (vecType< T, P > const &Value, vecType< T, P > const &Multiple)</td></tr>
+<tr class="separator:ga7ae705574ef3e3ebfb4f537d8d285c48"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaebf826fbb6e0a70eeaab0792d89b25ec"><td class="memTemplParams" colspan="2">template<typename genIUType > </td></tr>
+<tr class="memitem:gaebf826fbb6e0a70eeaab0792d89b25ec"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00175.html#gaebf826fbb6e0a70eeaab0792d89b25ec">isPowerOfTwo</a> (genIUType Value)</td></tr>
+<tr class="separator:gaebf826fbb6e0a70eeaab0792d89b25ec"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad454e4c8d8cd73ddc7de855f733a1465"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gad454e4c8d8cd73ddc7de855f733a1465"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00175.html#gad454e4c8d8cd73ddc7de855f733a1465">isPowerOfTwo</a> (vecType< T, P > const &value)</td></tr>
+<tr class="separator:gad454e4c8d8cd73ddc7de855f733a1465"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6739d1de04b2cea7c78675b365644bce"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga6739d1de04b2cea7c78675b365644bce"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00175.html#ga6739d1de04b2cea7c78675b365644bce">roundMultiple</a> (genType Source, genType Multiple)</td></tr>
+<tr class="separator:ga6739d1de04b2cea7c78675b365644bce"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga10a8ab7b254257b607b6a3fc68c3e661"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga10a8ab7b254257b607b6a3fc68c3e661"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00175.html#ga10a8ab7b254257b607b6a3fc68c3e661">roundMultiple</a> (vecType< T, P > const &Source, vecType< T, P > const &Multiple)</td></tr>
+<tr class="separator:ga10a8ab7b254257b607b6a3fc68c3e661"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6d24a9e3abe3e6a908661b43acb8efe0"><td class="memTemplParams" colspan="2">template<typename genIUType > </td></tr>
+<tr class="memitem:ga6d24a9e3abe3e6a908661b43acb8efe0"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genIUType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00175.html#ga6d24a9e3abe3e6a908661b43acb8efe0">roundPowerOfTwo</a> (genIUType Value)</td></tr>
+<tr class="separator:ga6d24a9e3abe3e6a908661b43acb8efe0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae95be3b384f3bbd00c6c1cf0a1f96485"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gae95be3b384f3bbd00c6c1cf0a1f96485"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00175.html#gae95be3b384f3bbd00c6c1cf0a1f96485">roundPowerOfTwo</a> (vecType< T, P > const &value)</td></tr>
+<tr class="separator:gae95be3b384f3bbd00c6c1cf0a1f96485"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00175.html">GLM_GTC_round</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd>
+<dd>
+<a class="el" href="a00175.html" title="rounding value to specific boundings ">GLM_GTC_round</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00095_source.html">round.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00095_source.html b/src/third_party/glm/doc/api/a00095_source.html
new file mode 100644
index 0000000..32abd5b
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00095_source.html
@@ -0,0 +1,149 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: round.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_9440d7c11b99dcd7e5d369c7cf9802fe.html">gtc</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">round.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00095.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// Dependencies</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "../detail/setup.hpp"</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "../detail/precision.hpp"</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include "../detail/_vectorize.hpp"</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "../vector_relational.hpp"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "../common.hpp"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <limits></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor"># pragma message("GLM: GLM_GTC_integer extension included")</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> {</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genIUType></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> <a class="code" href="a00175.html#gad454e4c8d8cd73ddc7de855f733a1465">isPowerOfTwo</a>(genIUType Value);</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  GLM_FUNC_DECL vecType<bool, P> <a class="code" href="a00175.html#gad454e4c8d8cd73ddc7de855f733a1465">isPowerOfTwo</a>(vecType<T, P> <span class="keyword">const</span> & value);</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genIUType></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  GLM_FUNC_DECL genIUType <a class="code" href="a00175.html#ga76ec9b214ea1376fe09a903e34bab847">ceilPowerOfTwo</a>(genIUType Value);</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00175.html#ga76ec9b214ea1376fe09a903e34bab847">ceilPowerOfTwo</a>(vecType<T, P> <span class="keyword">const</span> & value);</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genIUType></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  GLM_FUNC_DECL genIUType <a class="code" href="a00175.html#ga6a5a8f6dd1b2f755e4572bd039062c37">floorPowerOfTwo</a>(genIUType Value);</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00175.html#ga6a5a8f6dd1b2f755e4572bd039062c37">floorPowerOfTwo</a>(vecType<T, P> <span class="keyword">const</span> & value);</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genIUType></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  GLM_FUNC_DECL genIUType <a class="code" href="a00175.html#gae95be3b384f3bbd00c6c1cf0a1f96485">roundPowerOfTwo</a>(genIUType Value);</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00175.html#gae95be3b384f3bbd00c6c1cf0a1f96485">roundPowerOfTwo</a>(vecType<T, P> <span class="keyword">const</span> & value);</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genIUType></div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> <a class="code" href="a00175.html#ga7ae705574ef3e3ebfb4f537d8d285c48">isMultiple</a>(genIUType Value, genIUType Multiple);</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  GLM_FUNC_DECL vecType<bool, P> <a class="code" href="a00175.html#ga7ae705574ef3e3ebfb4f537d8d285c48">isMultiple</a>(vecType<T, P> <span class="keyword">const</span> & Value, T Multiple);</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  GLM_FUNC_DECL vecType<bool, P> <a class="code" href="a00175.html#ga7ae705574ef3e3ebfb4f537d8d285c48">isMultiple</a>(vecType<T, P> <span class="keyword">const</span> & Value, vecType<T, P> <span class="keyword">const</span> & Multiple);</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  GLM_FUNC_DECL genType <a class="code" href="a00175.html#gafe632af669ac57d670ca18e3665a12ca">ceilMultiple</a>(genType Source, genType Multiple);</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00175.html#gafe632af669ac57d670ca18e3665a12ca">ceilMultiple</a>(vecType<T, P> <span class="keyword">const</span> & Source, vecType<T, P> <span class="keyword">const</span> & Multiple);</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  GLM_FUNC_DECL genType <a class="code" href="a00175.html#ga6912db42d43873fe1dedb3aed2b7a239">floorMultiple</a>(</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  genType Source,</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  genType Multiple);</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00175.html#ga6912db42d43873fe1dedb3aed2b7a239">floorMultiple</a>(</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  vecType<T, P> <span class="keyword">const</span> & Source,</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  vecType<T, P> <span class="keyword">const</span> & Multiple);</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  GLM_FUNC_DECL genType <a class="code" href="a00175.html#ga10a8ab7b254257b607b6a3fc68c3e661">roundMultiple</a>(</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  genType Source,</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  genType Multiple);</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00175.html#ga10a8ab7b254257b607b6a3fc68c3e661">roundMultiple</a>(</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  vecType<T, P> <span class="keyword">const</span> & Source,</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  vecType<T, P> <span class="keyword">const</span> & Multiple);</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> } <span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="preprocessor">#include "round.inl"</span></div>
+<div class="ttc" id="a00175_html_gad454e4c8d8cd73ddc7de855f733a1465"><div class="ttname"><a href="a00175.html#gad454e4c8d8cd73ddc7de855f733a1465">glm::isPowerOfTwo</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< bool, P > isPowerOfTwo(vecType< T, P > const &value)</div><div class="ttdoc">Return true if the value is a power of two number. </div></div>
+<div class="ttc" id="a00175_html_ga7ae705574ef3e3ebfb4f537d8d285c48"><div class="ttname"><a href="a00175.html#ga7ae705574ef3e3ebfb4f537d8d285c48">glm::isMultiple</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< bool, P > isMultiple(vecType< T, P > const &Value, vecType< T, P > const &Multiple)</div><div class="ttdoc">Return true if the 'Value' is a multiple of 'Multiple'. </div></div>
+<div class="ttc" id="a00175_html_gafe632af669ac57d670ca18e3665a12ca"><div class="ttname"><a href="a00175.html#gafe632af669ac57d670ca18e3665a12ca">glm::ceilMultiple</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > ceilMultiple(vecType< T, P > const &Source, vecType< T, P > const &Multiple)</div><div class="ttdoc">Higher multiple number of Source. </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00175_html_gae95be3b384f3bbd00c6c1cf0a1f96485"><div class="ttname"><a href="a00175.html#gae95be3b384f3bbd00c6c1cf0a1f96485">glm::roundPowerOfTwo</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > roundPowerOfTwo(vecType< T, P > const &value)</div><div class="ttdoc">Return the power of two number which value is the closet to the input value. </div></div>
+<div class="ttc" id="a00175_html_ga10a8ab7b254257b607b6a3fc68c3e661"><div class="ttname"><a href="a00175.html#ga10a8ab7b254257b607b6a3fc68c3e661">glm::roundMultiple</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > roundMultiple(vecType< T, P > const &Source, vecType< T, P > const &Multiple)</div><div class="ttdoc">Lower multiple number of Source. </div></div>
+<div class="ttc" id="a00175_html_ga6a5a8f6dd1b2f755e4572bd039062c37"><div class="ttname"><a href="a00175.html#ga6a5a8f6dd1b2f755e4572bd039062c37">glm::floorPowerOfTwo</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > floorPowerOfTwo(vecType< T, P > const &value)</div><div class="ttdoc">Return the power of two number which value is just lower the input value, round down to a power of tw...</div></div>
+<div class="ttc" id="a00175_html_ga76ec9b214ea1376fe09a903e34bab847"><div class="ttname"><a href="a00175.html#ga76ec9b214ea1376fe09a903e34bab847">glm::ceilPowerOfTwo</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > ceilPowerOfTwo(vecType< T, P > const &value)</div><div class="ttdoc">Return the power of two number which value is just higher the input value, round up to a power of two...</div></div>
+<div class="ttc" id="a00175_html_ga6912db42d43873fe1dedb3aed2b7a239"><div class="ttname"><a href="a00175.html#ga6912db42d43873fe1dedb3aed2b7a239">glm::floorMultiple</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > floorMultiple(vecType< T, P > const &Source, vecType< T, P > const &Multiple)</div><div class="ttdoc">Lower multiple number of Source. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00096.html b/src/third_party/glm/doc/api/a00096.html
new file mode 100644
index 0000000..2ccd042
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00096.html
@@ -0,0 +1,69 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: scalar_multiplication.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">scalar_multiplication.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00096_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00155.html">GTX Extensions (Experimental)</a> </p>
+<dl class="section author"><dt>Author</dt><dd>Joshua Moerman</dd></dl>
+<p>Enables scalar multiplication for all types</p>
+<p>Since GLSL is very strict about types, the following (often used) combinations do not work: double * vec4 int * vec4 vec4 / int So we'll fix that! Of course "float * vec4" should remain the same (hence the enable_if magic) </p>
+
+<p>Definition in file <a class="el" href="a00096_source.html">scalar_multiplication.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00096_source.html b/src/third_party/glm/doc/api/a00096_source.html
new file mode 100644
index 0000000..d345a48
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00096_source.html
@@ -0,0 +1,131 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: scalar_multiplication.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">scalar_multiplication.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00096.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#include "../detail/setup.hpp"</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#if !GLM_HAS_TEMPLATE_ALIASES && !(GLM_COMPILER & GLM_COMPILER_GCC)</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor"># error "GLM_GTX_scalar_multiplication requires C++11 support or alias templates and if not support for GCC"</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "../vec2.hpp"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "../vec3.hpp"</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "../vec4.hpp"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "../mat2x2.hpp"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <type_traits></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> {</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, <span class="keyword">typename</span> Vec></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keyword">using</span> return_type_scalar_multiplication = <span class="keyword">typename</span> std::enable_if<</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  !std::is_same<T, float>::value <span class="comment">// T may not be a float</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  && std::is_arithmetic<T>::value, Vec <span class="comment">// But it may be an int or double (no vec3 or mat3, ...)</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  >::type;</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#define GLM_IMPLEMENT_SCAL_MULT(Vec) \</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor"> template <typename T> \</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor"> return_type_scalar_multiplication<T, Vec> \</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor"> operator*(T const & s, Vec rh){ \</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor"> return rh *= static_cast<float>(s); \</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor"> template <typename T> \</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor"> return_type_scalar_multiplication<T, Vec> \</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor"> operator*(Vec lh, T const & s){ \</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor"> return lh *= static_cast<float>(s); \</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="preprocessor"> } \</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor"> \</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor"> template <typename T> \</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="preprocessor"> return_type_scalar_multiplication<T, Vec> \</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="preprocessor"> operator/(Vec lh, T const & s){ \</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="preprocessor"> return lh *= 1.0f / s; \</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="preprocessor"> }</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> GLM_IMPLEMENT_SCAL_MULT(<a class="code" href="a00157.html#ga09d0200e8ff86391d8804b4fefd5f1da">vec2</a>)</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> GLM_IMPLEMENT_SCAL_MULT(<a class="code" href="a00157.html#gaa8ea2429bb3cb41a715258a447f39897">vec3</a>)</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> GLM_IMPLEMENT_SCAL_MULT(<a class="code" href="a00157.html#gafbab23070ca47932487d25332adc7d7c">vec4</a>)</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> GLM_IMPLEMENT_SCAL_MULT(<a class="code" href="a00157.html#ga6e30cfba068ebc3c71fe1f8b3110e450">mat2</a>)</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> GLM_IMPLEMENT_SCAL_MULT(<a class="code" href="a00157.html#gafb063d734266e92915d87f8943560471">mat2x3</a>)</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> GLM_IMPLEMENT_SCAL_MULT(<a class="code" href="a00157.html#ga4d2ac1a80c36fb5a1d15914035f792ac">mat2x4</a>)</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> GLM_IMPLEMENT_SCAL_MULT(<a class="code" href="a00157.html#ga3839ca29d011a80ff3ede7f22ba602a4">mat3x2</a>)</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> GLM_IMPLEMENT_SCAL_MULT(<a class="code" href="a00157.html#ga6dd3ec98a548755676267e59142911f8">mat3</a>)</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> GLM_IMPLEMENT_SCAL_MULT(<a class="code" href="a00157.html#ga7876e0c3e3fcc3e2f4c0462c152e87cf">mat3x4</a>)</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> GLM_IMPLEMENT_SCAL_MULT(<a class="code" href="a00157.html#ga1b3f6a5cbc17362141f9781262ed838f">mat4x2</a>)</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> GLM_IMPLEMENT_SCAL_MULT(<a class="code" href="a00157.html#gacd9ff3b943b3d8bda4f4b388320420fd">mat4x3</a>)</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> GLM_IMPLEMENT_SCAL_MULT(<a class="code" href="a00157.html#gade0eb47c01f79384a6f38017ede17446">mat4</a>)</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="preprocessor">#undef GLM_IMPLEMENT_SCAL_MULT</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> } <span class="comment">// namespace glm</span></div>
+<div class="ttc" id="a00157_html_ga4d2ac1a80c36fb5a1d15914035f792ac"><div class="ttname"><a href="a00157.html#ga4d2ac1a80c36fb5a1d15914035f792ac">glm::mat2x4</a></div><div class="ttdeci">highp_mat2x4 mat2x4</div><div class="ttdoc">2 columns of 4 components matrix of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00369">type_mat.hpp:369</a></div></div>
+<div class="ttc" id="a00157_html_ga6e30cfba068ebc3c71fe1f8b3110e450"><div class="ttname"><a href="a00157.html#ga6e30cfba068ebc3c71fe1f8b3110e450">glm::mat2</a></div><div class="ttdeci">mat2x2 mat2</div><div class="ttdoc">2 columns of 2 components matrix of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00406">type_mat.hpp:406</a></div></div>
+<div class="ttc" id="a00157_html_gafb063d734266e92915d87f8943560471"><div class="ttname"><a href="a00157.html#gafb063d734266e92915d87f8943560471">glm::mat2x3</a></div><div class="ttdeci">highp_mat2x3 mat2x3</div><div class="ttdoc">2 columns of 3 components matrix of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00364">type_mat.hpp:364</a></div></div>
+<div class="ttc" id="a00157_html_gafbab23070ca47932487d25332adc7d7c"><div class="ttname"><a href="a00157.html#gafbab23070ca47932487d25332adc7d7c">glm::vec4</a></div><div class="ttdeci">highp_vec4 vec4</div><div class="ttdoc">4 components vector of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00466">type_vec.hpp:466</a></div></div>
+<div class="ttc" id="a00157_html_ga3839ca29d011a80ff3ede7f22ba602a4"><div class="ttname"><a href="a00157.html#ga3839ca29d011a80ff3ede7f22ba602a4">glm::mat3x2</a></div><div class="ttdeci">highp_mat3x2 mat3x2</div><div class="ttdoc">3 columns of 2 components matrix of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00374">type_mat.hpp:374</a></div></div>
+<div class="ttc" id="a00157_html_ga7876e0c3e3fcc3e2f4c0462c152e87cf"><div class="ttname"><a href="a00157.html#ga7876e0c3e3fcc3e2f4c0462c152e87cf">glm::mat3x4</a></div><div class="ttdeci">highp_mat3x4 mat3x4</div><div class="ttdoc">3 columns of 4 components matrix of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00384">type_mat.hpp:384</a></div></div>
+<div class="ttc" id="a00157_html_ga6dd3ec98a548755676267e59142911f8"><div class="ttname"><a href="a00157.html#ga6dd3ec98a548755676267e59142911f8">glm::mat3</a></div><div class="ttdeci">mat3x3 mat3</div><div class="ttdoc">3 columns of 3 components matrix of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00411">type_mat.hpp:411</a></div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00157_html_gade0eb47c01f79384a6f38017ede17446"><div class="ttname"><a href="a00157.html#gade0eb47c01f79384a6f38017ede17446">glm::mat4</a></div><div class="ttdeci">mat4x4 mat4</div><div class="ttdoc">4 columns of 4 components matrix of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00416">type_mat.hpp:416</a></div></div>
+<div class="ttc" id="a00157_html_ga1b3f6a5cbc17362141f9781262ed838f"><div class="ttname"><a href="a00157.html#ga1b3f6a5cbc17362141f9781262ed838f">glm::mat4x2</a></div><div class="ttdeci">highp_mat4x2 mat4x2</div><div class="ttdoc">4 columns of 2 components matrix of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00389">type_mat.hpp:389</a></div></div>
+<div class="ttc" id="a00157_html_gaa8ea2429bb3cb41a715258a447f39897"><div class="ttname"><a href="a00157.html#gaa8ea2429bb3cb41a715258a447f39897">glm::vec3</a></div><div class="ttdeci">highp_vec3 vec3</div><div class="ttdoc">3 components vector of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00461">type_vec.hpp:461</a></div></div>
+<div class="ttc" id="a00157_html_ga09d0200e8ff86391d8804b4fefd5f1da"><div class="ttname"><a href="a00157.html#ga09d0200e8ff86391d8804b4fefd5f1da">glm::vec2</a></div><div class="ttdeci">highp_vec2 vec2</div><div class="ttdoc">2 components vector of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00456">type_vec.hpp:456</a></div></div>
+<div class="ttc" id="a00157_html_gacd9ff3b943b3d8bda4f4b388320420fd"><div class="ttname"><a href="a00157.html#gacd9ff3b943b3d8bda4f4b388320420fd">glm::mat4x3</a></div><div class="ttdeci">highp_mat4x3 mat4x3</div><div class="ttdoc">4 columns of 3 components matrix of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00394">type_mat.hpp:394</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00097.html b/src/third_party/glm/doc/api/a00097.html
new file mode 100644
index 0000000..db54a90
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00097.html
@@ -0,0 +1,67 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: scalar_relational.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">scalar_relational.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00097_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00225.html">GLM_GTX_scalar_relational</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00097_source.html">scalar_relational.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00097_source.html b/src/third_party/glm/doc/api/a00097_source.html
new file mode 100644
index 0000000..cd93b2b
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00097_source.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: scalar_relational.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">scalar_relational.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00097.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include "../glm.hpp"</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_extend extension included")</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> {</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include "scalar_relational.inl"</span></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00098.html b/src/third_party/glm/doc/api/a00098.html
new file mode 100644
index 0000000..c1b642c
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00098.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: setup.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">setup.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00098_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+
+<p>Definition in file <a class="el" href="a00098_source.html">setup.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00098_source.html b/src/third_party/glm/doc/api/a00098_source.html
new file mode 100644
index 0000000..2c5ed28
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00098_source.html
@@ -0,0 +1,827 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: setup.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">setup.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00098.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#if (defined(GLM_FORCE_SWIZZLE) || defined(GLM_SWIZZLE)) && defined(GLM_FORCE_UNRESTRICTED_GENTYPE)</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor"># error "Both GLM_FORCE_SWIZZLE and GLM_FORCE_UNRESTRICTED_GENTYPE can't be defined at the same time"</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> </div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment">// Messages</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> </div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#ifdef GLM_MESSAGES</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor"># pragma message("GLM: GLM_MESSAGES is deprecated, use GLM_FORCE_MESSAGES instead")</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#define GLM_MESSAGES_ENABLED 1</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#define GLM_MESSAGES_DISABLE 0</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#if defined(GLM_FORCE_MESSAGES) || defined(GLM_MESSAGES)</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor"># undef GLM_MESSAGES</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"># define GLM_MESSAGES GLM_MESSAGES_ENABLED</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor"># undef GLM_MESSAGES</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor"># define GLM_MESSAGES GLM_MESSAGES_DISABLE</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include <cassert></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include <cstddef></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "../simd/platform.h"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="comment">// Version</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#define GLM_VERSION 98</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#define GLM_VERSION_MAJOR 0</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#define GLM_VERSION_MINOR 9</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#define GLM_VERSION_PATCH 8</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#define GLM_VERSION_REVISION 0</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_MESSAGE_VERSION_DISPLAYED)</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor"># define GLM_MESSAGE_VERSION_DISPLAYED</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor"># pragma message ("GLM: version 0.9.8.0")</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor">#endif//GLM_MESSAGES</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="comment">// Report compiler detection</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_MESSAGE_COMPILER_DISPLAYED)</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor"># define GLM_MESSAGE_COMPILER_DISPLAYED</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="preprocessor"># if GLM_COMPILER & GLM_COMPILER_CUDA</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="preprocessor"># pragma message("GLM: CUDA compiler detected")</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="preprocessor"># elif GLM_COMPILER & GLM_COMPILER_VC</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="preprocessor"># pragma message("GLM: Visual C++ compiler detected")</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="preprocessor"># elif GLM_COMPILER & GLM_COMPILER_CLANG</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="preprocessor"># pragma message("GLM: Clang compiler detected")</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="preprocessor"># elif GLM_COMPILER & GLM_COMPILER_INTEL</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="preprocessor"># pragma message("GLM: Intel Compiler detected")</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="preprocessor"># elif GLM_COMPILER & GLM_COMPILER_GCC</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="preprocessor"># pragma message("GLM: GCC compiler detected")</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="preprocessor"># else</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="preprocessor"># pragma message("GLM: Compiler not detected")</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="preprocessor">#endif//GLM_MESSAGES</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="comment">// Build model</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="preprocessor">#if defined(__arch64__) || defined(__LP64__) || defined(_M_X64) || defined(__ppc64__) || defined(__x86_64__)</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="preprocessor"># define GLM_MODEL GLM_MODEL_64</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="preprocessor">#elif defined(__i386__) || defined(__ppc__)</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="preprocessor"># define GLM_MODEL GLM_MODEL_32</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="preprocessor"># define GLM_MODEL GLM_MODEL_32</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="preprocessor">#endif//</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="preprocessor">#if !defined(GLM_MODEL) && GLM_COMPILER != 0</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="preprocessor"># error "GLM_MODEL undefined, your compiler may not be supported by GLM. Add #define GLM_MODEL 0 to ignore this message."</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="preprocessor">#endif//GLM_MODEL</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_MESSAGE_MODEL_DISPLAYED)</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="preprocessor"># define GLM_MESSAGE_MODEL_DISPLAYED</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="preprocessor"># if(GLM_MODEL == GLM_MODEL_64)</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="preprocessor"># pragma message("GLM: 64 bits model")</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="preprocessor"># elif(GLM_MODEL == GLM_MODEL_32)</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="preprocessor"># pragma message("GLM: 32 bits model")</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="preprocessor"># endif//GLM_MODEL</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="preprocessor">#endif//GLM_MESSAGES</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_MESSAGE_ARCH_DISPLAYED)</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="preprocessor"># define GLM_MESSAGE_ARCH_DISPLAYED</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="preprocessor"># if(GLM_ARCH == GLM_ARCH_PURE)</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="preprocessor"># pragma message("GLM: Platform independent code")</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="preprocessor"># elif(GLM_ARCH == GLM_ARCH_AVX2)</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="preprocessor"># pragma message("GLM: AVX2 instruction set")</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="preprocessor"># elif(GLM_ARCH == GLM_ARCH_AVX)</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="preprocessor"># pragma message("GLM: AVX instruction set")</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="preprocessor"># elif(GLM_ARCH == GLM_ARCH_SSE42)</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="preprocessor"># pragma message("GLM: SSE4.2 instruction set")</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="preprocessor"># elif(GLM_ARCH == GLM_ARCH_SSE41)</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="preprocessor"># pragma message("GLM: SSE4.1 instruction set")</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="preprocessor"># elif(GLM_ARCH == GLM_ARCH_SSSE3)</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="preprocessor"># pragma message("GLM: SSSE3 instruction set")</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="preprocessor"># elif(GLM_ARCH == GLM_ARCH_SSE3)</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="preprocessor"># pragma message("GLM: SSE3 instruction set")</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="preprocessor"># elif(GLM_ARCH == GLM_ARCH_SSE2)</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="preprocessor"># pragma message("GLM: SSE2 instruction set")</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="preprocessor"># elif(GLM_ARCH == GLM_ARCH_X86)</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="preprocessor"># pragma message("GLM: x86 instruction set")</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="preprocessor"># elif(GLM_ARCH == GLM_ARCH_NEON)</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="preprocessor"># pragma message("GLM: NEON instruction set")</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="preprocessor"># elif(GLM_ARCH == GLM_ARCH_ARM)</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="preprocessor"># pragma message("GLM: ARM instruction set")</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="preprocessor"># elif(GLM_ARCH == GLM_ARCH_MIPS)</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="preprocessor"># pragma message("GLM: MIPS instruction set")</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="preprocessor"># elif(GLM_ARCH == GLM_ARCH_PPC)</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="preprocessor"># pragma message("GLM: PowerPC architechture")</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="preprocessor"># endif//GLM_ARCH</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="preprocessor">#endif//GLM_MESSAGES</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="comment">// C++ Version</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="comment">// User defines: GLM_FORCE_CXX98, GLM_FORCE_CXX03, GLM_FORCE_CXX11, GLM_FORCE_CXX14</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="preprocessor">#define GLM_LANG_CXX98_FLAG (1 << 1)</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="preprocessor">#define GLM_LANG_CXX03_FLAG (1 << 2)</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="preprocessor">#define GLM_LANG_CXX0X_FLAG (1 << 3)</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="preprocessor">#define GLM_LANG_CXX11_FLAG (1 << 4)</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="preprocessor">#define GLM_LANG_CXX1Y_FLAG (1 << 5)</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="preprocessor">#define GLM_LANG_CXX14_FLAG (1 << 6)</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="preprocessor">#define GLM_LANG_CXX1Z_FLAG (1 << 7)</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="preprocessor">#define GLM_LANG_CXXMS_FLAG (1 << 8)</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="preprocessor">#define GLM_LANG_CXXGNU_FLAG (1 << 9)</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="preprocessor">#define GLM_LANG_CXX98 GLM_LANG_CXX98_FLAG</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="preprocessor">#define GLM_LANG_CXX03 (GLM_LANG_CXX98 | GLM_LANG_CXX03_FLAG)</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="preprocessor">#define GLM_LANG_CXX0X (GLM_LANG_CXX03 | GLM_LANG_CXX0X_FLAG)</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="preprocessor">#define GLM_LANG_CXX11 (GLM_LANG_CXX0X | GLM_LANG_CXX11_FLAG)</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="preprocessor">#define GLM_LANG_CXX1Y (GLM_LANG_CXX11 | GLM_LANG_CXX1Y_FLAG)</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="preprocessor">#define GLM_LANG_CXX14 (GLM_LANG_CXX1Y | GLM_LANG_CXX14_FLAG)</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="preprocessor">#define GLM_LANG_CXX1Z (GLM_LANG_CXX14 | GLM_LANG_CXX1Z_FLAG)</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="preprocessor">#define GLM_LANG_CXXMS GLM_LANG_CXXMS_FLAG</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="preprocessor">#define GLM_LANG_CXXGNU GLM_LANG_CXXGNU_FLAG</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="preprocessor">#if defined(GLM_FORCE_CXX14)</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="preprocessor"># undef GLM_FORCE_CXX11</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="preprocessor"># undef GLM_FORCE_CXX03</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="preprocessor"># undef GLM_FORCE_CXX98</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="preprocessor"># define GLM_LANG GLM_LANG_CXX14</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="preprocessor">#elif defined(GLM_FORCE_CXX11)</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="preprocessor"># undef GLM_FORCE_CXX03</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="preprocessor"># undef GLM_FORCE_CXX98</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="preprocessor"># define GLM_LANG GLM_LANG_CXX11</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="preprocessor">#elif defined(GLM_FORCE_CXX03)</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="preprocessor"># undef GLM_FORCE_CXX98</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="preprocessor"># define GLM_LANG GLM_LANG_CXX03</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="preprocessor">#elif defined(GLM_FORCE_CXX98)</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="preprocessor"># define GLM_LANG GLM_LANG_CXX98</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="preprocessor"># if GLM_COMPILER & GLM_COMPILER_CLANG</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="preprocessor"># if __cplusplus >= 201402L // GLM_COMPILER_CLANG34 + -std=c++14</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="preprocessor"># define GLM_LANG GLM_LANG_CXX14</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="preprocessor"># elif __has_feature(cxx_decltype_auto) && __has_feature(cxx_aggregate_nsdmi) // GLM_COMPILER_CLANG33 + -std=c++1y</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="preprocessor"># define GLM_LANG GLM_LANG_CXX1Y</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="preprocessor"># elif __cplusplus >= 201103L // GLM_COMPILER_CLANG33 + -std=c++11</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="preprocessor"># define GLM_LANG GLM_LANG_CXX11</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="preprocessor"># elif __has_feature(cxx_static_assert) // GLM_COMPILER_CLANG29 + -std=c++11</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="preprocessor"># define GLM_LANG GLM_LANG_CXX0X</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="preprocessor"># elif __cplusplus >= 199711L</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="preprocessor"># define GLM_LANG GLM_LANG_CXX98</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="preprocessor"># else</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="preprocessor"># define GLM_LANG GLM_LANG_CXX</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="preprocessor"># elif GLM_COMPILER & GLM_COMPILER_GCC</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="preprocessor"># if __cplusplus >= 201402L</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="preprocessor"># define GLM_LANG GLM_LANG_CXX14</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="preprocessor"># elif __cplusplus >= 201103L</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="preprocessor"># define GLM_LANG GLM_LANG_CXX11</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="preprocessor"># elif defined(__GXX_EXPERIMENTAL_CXX0X__)</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="preprocessor"># define GLM_LANG GLM_LANG_CXX0X</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="preprocessor"># else</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="preprocessor"># define GLM_LANG GLM_LANG_CXX98</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="preprocessor"># elif GLM_COMPILER & GLM_COMPILER_VC</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="preprocessor"># ifdef _MSC_EXTENSIONS</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="preprocessor"># if __cplusplus >= 201402L</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="preprocessor"># define GLM_LANG (GLM_LANG_CXX14 | GLM_LANG_CXXMS_FLAG)</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="comment">//# elif GLM_COMPILER >= GLM_COMPILER_VC2015</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="comment">//# define GLM_LANG (GLM_LANG_CXX1Y | GLM_LANG_CXXMS_FLAG)</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="preprocessor"># elif __cplusplus >= 201103L</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="preprocessor"># define GLM_LANG (GLM_LANG_CXX11 | GLM_LANG_CXXMS_FLAG)</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="preprocessor"># elif GLM_COMPILER >= GLM_COMPILER_VC2010</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="preprocessor"># define GLM_LANG (GLM_LANG_CXX0X | GLM_LANG_CXXMS_FLAG)</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="preprocessor"># elif __cplusplus >= 199711L</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="preprocessor"># define GLM_LANG (GLM_LANG_CXX98 | GLM_LANG_CXXMS_FLAG)</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="preprocessor"># else</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="preprocessor"># define GLM_LANG (GLM_LANG_CXX | GLM_LANG_CXXMS_FLAG)</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="preprocessor"># else</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="preprocessor"># if __cplusplus >= 201402L</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="preprocessor"># define GLM_LANG GLM_LANG_CXX14</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="preprocessor"># elif __cplusplus >= 201103L</span></div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="preprocessor"># define GLM_LANG GLM_LANG_CXX11</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="preprocessor"># elif GLM_COMPILER >= GLM_COMPILER_VC2010</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="preprocessor"># define GLM_LANG GLM_LANG_CXX0X</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="preprocessor"># elif __cplusplus >= 199711L</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="preprocessor"># define GLM_LANG GLM_LANG_CXX98</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="preprocessor"># else</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="preprocessor"># define GLM_LANG GLM_LANG_CXX</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="preprocessor"># elif GLM_COMPILER & GLM_COMPILER_INTEL</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="preprocessor"># ifdef _MSC_EXTENSIONS</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="preprocessor"># define GLM_MSC_EXT GLM_LANG_CXXMS_FLAG</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="preprocessor"># else</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="preprocessor"># define GLM_MSC_EXT 0</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="preprocessor"># if __cplusplus >= 201402L</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="preprocessor"># define GLM_LANG (GLM_LANG_CXX14 | GLM_MSC_EXT)</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="preprocessor"># elif __cplusplus >= 201103L</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="preprocessor"># define GLM_LANG (GLM_LANG_CXX11 | GLM_MSC_EXT)</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="preprocessor"># elif __INTEL_CXX11_MODE__</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="preprocessor"># define GLM_LANG (GLM_LANG_CXX0X | GLM_MSC_EXT)</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="preprocessor"># elif __cplusplus >= 199711L</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="preprocessor"># define GLM_LANG (GLM_LANG_CXX98 | GLM_MSC_EXT)</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="preprocessor"># else</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="preprocessor"># define GLM_LANG (GLM_LANG_CXX | GLM_MSC_EXT)</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="preprocessor"># elif GLM_COMPILER & GLM_COMPILER_CUDA</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="preprocessor"># ifdef _MSC_EXTENSIONS</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="preprocessor"># define GLM_MSC_EXT GLM_LANG_CXXMS_FLAG</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <span class="preprocessor"># else</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> <span class="preprocessor"># define GLM_MSC_EXT 0</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="preprocessor"># if GLM_COMPILER >= GLM_COMPILER_CUDA75</span></div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="preprocessor"># define GLM_LANG (GLM_LANG_CXX0X | GLM_MSC_EXT)</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="preprocessor"># else</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="preprocessor"># define GLM_LANG (GLM_LANG_CXX98 | GLM_MSC_EXT)</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="preprocessor"># else // Unknown compiler</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="preprocessor"># if __cplusplus >= 201402L</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="preprocessor"># define GLM_LANG GLM_LANG_CXX14</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="preprocessor"># elif __cplusplus >= 201103L</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <span class="preprocessor"># define GLM_LANG GLM_LANG_CXX11</span></div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="preprocessor"># elif __cplusplus >= 199711L</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="preprocessor"># define GLM_LANG GLM_LANG_CXX98</span></div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <span class="preprocessor"># else</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> <span class="preprocessor"># define GLM_LANG GLM_LANG_CXX // Good luck with that!</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="preprocessor"># ifndef GLM_FORCE_PURE</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> <span class="preprocessor"># define GLM_FORCE_PURE</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> </div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_MESSAGE_LANG_DISPLAYED)</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="preprocessor"># define GLM_MESSAGE_LANG_DISPLAYED</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> </div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="preprocessor"># if GLM_LANG & GLM_LANG_CXX1Z_FLAG</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <span class="preprocessor"># pragma message("GLM: C++1z")</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> <span class="preprocessor"># elif GLM_LANG & GLM_LANG_CXX14_FLAG</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="preprocessor"># pragma message("GLM: C++14")</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> <span class="preprocessor"># elif GLM_LANG & GLM_LANG_CXX1Y_FLAG</span></div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="preprocessor"># pragma message("GLM: C++1y")</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> <span class="preprocessor"># elif GLM_LANG & GLM_LANG_CXX11_FLAG</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <span class="preprocessor"># pragma message("GLM: C++11")</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> <span class="preprocessor"># elif GLM_LANG & GLM_LANG_CXX0X_FLAG</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <span class="preprocessor"># pragma message("GLM: C++0x")</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> <span class="preprocessor"># elif GLM_LANG & GLM_LANG_CXX03_FLAG</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <span class="preprocessor"># pragma message("GLM: C++03")</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <span class="preprocessor"># elif GLM_LANG & GLM_LANG_CXX98_FLAG</span></div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="preprocessor"># pragma message("GLM: C++98")</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <span class="preprocessor"># else</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <span class="preprocessor"># pragma message("GLM: C++ language undetected")</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> <span class="preprocessor"># endif//GLM_LANG</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> </div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> <span class="preprocessor"># if GLM_LANG & (GLM_LANG_CXXGNU_FLAG | GLM_LANG_CXXMS_FLAG)</span></div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <span class="preprocessor"># pragma message("GLM: Language extensions enabled")</span></div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> <span class="preprocessor"># endif//GLM_LANG</span></div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> <span class="preprocessor">#endif//GLM_MESSAGES</span></div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> </div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> <span class="comment">// Has of C++ features</span></div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> </div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="comment">// http://clang.llvm.org/cxx_status.html</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="comment">// http://gcc.gnu.org/projects/cxx0x.html</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> <span class="comment">// http://msdn.microsoft.com/en-us/library/vstudio/hh567368(v=vs.120).aspx</span></div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> </div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> <span class="preprocessor">#if GLM_COMPILER & GLM_COMPILER_CLANG</span></div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> <span class="preprocessor"># if defined(_LIBCPP_VERSION) && GLM_LANG & GLM_LANG_CXX11_FLAG</span></div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> <span class="preprocessor"># define GLM_HAS_CXX11_STL 1</span></div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <span class="preprocessor"># else</span></div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="preprocessor"># define GLM_HAS_CXX11_STL 0</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> <span class="preprocessor"># define GLM_HAS_CXX11_STL ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="preprocessor"> ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC48)) || \</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> <span class="preprocessor"> ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2013)) || \</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> <span class="preprocessor"> ((GLM_PLATFORM != GLM_PLATFORM_WINDOWS) && (GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL15))))</span></div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> </div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <span class="comment">// N1720</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="preprocessor">#if GLM_COMPILER & GLM_COMPILER_CLANG</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> <span class="preprocessor"># define GLM_HAS_STATIC_ASSERT __has_feature(cxx_static_assert)</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <span class="preprocessor">#elif GLM_LANG & GLM_LANG_CXX11_FLAG</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <span class="preprocessor"># define GLM_HAS_STATIC_ASSERT 1</span></div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> <span class="preprocessor"># define GLM_HAS_STATIC_ASSERT ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <span class="preprocessor"> ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC43)) || \</span></div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <span class="preprocessor"> ((GLM_COMPILER & GLM_COMPILER_CUDA)) || \</span></div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="preprocessor"> ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2010))))</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> </div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="comment">// N1988</span></div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> <span class="preprocessor">#if GLM_LANG & GLM_LANG_CXX11_FLAG</span></div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="preprocessor"># define GLM_HAS_EXTENDED_INTEGER_TYPE 1</span></div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <span class="preprocessor"># define GLM_HAS_EXTENDED_INTEGER_TYPE (\</span></div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> <span class="preprocessor"> ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2012)) || \</span></div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> <span class="preprocessor"> ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_CUDA)) || \</span></div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="preprocessor"> ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC43)) || \</span></div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> <span class="preprocessor"> ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_CLANG) && (GLM_COMPILER >= GLM_COMPILER_CLANG30)))</span></div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> </div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> <span class="comment">// N2235</span></div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <span class="preprocessor">#if GLM_COMPILER & GLM_COMPILER_CLANG</span></div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> <span class="preprocessor"># define GLM_HAS_CONSTEXPR __has_feature(cxx_constexpr)</span></div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> <span class="preprocessor"># define GLM_HAS_CONSTEXPR_PARTIAL GLM_HAS_CONSTEXPR</span></div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> <span class="preprocessor">#elif GLM_LANG & GLM_LANG_CXX11_FLAG</span></div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> <span class="preprocessor"># define GLM_HAS_CONSTEXPR 1</span></div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> <span class="preprocessor"># define GLM_HAS_CONSTEXPR_PARTIAL GLM_HAS_CONSTEXPR</span></div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> <span class="preprocessor"># define GLM_HAS_CONSTEXPR ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\</span></div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <span class="preprocessor"> ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC48)))) // GCC 4.6 support constexpr but there is a compiler bug causing a crash</span></div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> <span class="preprocessor"># define GLM_HAS_CONSTEXPR_PARTIAL (GLM_HAS_CONSTEXPR || ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2015)))</span></div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> </div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> <span class="comment">// N2672</span></div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> <span class="preprocessor">#if GLM_COMPILER & GLM_COMPILER_CLANG</span></div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> <span class="preprocessor"># define GLM_HAS_INITIALIZER_LISTS __has_feature(cxx_generalized_initializers)</span></div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> <span class="preprocessor">#elif GLM_LANG & GLM_LANG_CXX11_FLAG</span></div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> <span class="preprocessor"># define GLM_HAS_INITIALIZER_LISTS 1</span></div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> <span class="preprocessor"># define GLM_HAS_INITIALIZER_LISTS ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\</span></div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> <span class="preprocessor"> ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC44)) || \</span></div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <span class="preprocessor"> ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2013)) || \</span></div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> <span class="preprocessor"> ((GLM_COMPILER & GLM_COMPILER_CUDA) && (GLM_COMPILER >= GLM_COMPILER_CUDA75))))</span></div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> </div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> <span class="comment">// N2544 Unrestricted unions http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf</span></div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> <span class="preprocessor">#if GLM_COMPILER & GLM_COMPILER_CLANG</span></div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <span class="preprocessor"># define GLM_HAS_UNRESTRICTED_UNIONS __has_feature(cxx_unrestricted_unions)</span></div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="preprocessor">#elif GLM_LANG & (GLM_LANG_CXX11_FLAG | GLM_LANG_CXXMS_FLAG)</span></div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> <span class="preprocessor"># define GLM_HAS_UNRESTRICTED_UNIONS 1</span></div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> <span class="preprocessor"># define GLM_HAS_UNRESTRICTED_UNIONS (GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\</span></div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> <span class="preprocessor"> ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_LANG & GLM_LANG_CXXMS_FLAG)) || \</span></div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="preprocessor"> ((GLM_COMPILER & GLM_COMPILER_CUDA) && (GLM_COMPILER >= GLM_COMPILER_CUDA75)) || \</span></div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> <span class="preprocessor"> ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC46)))</span></div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> </div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> <span class="comment">// N2346</span></div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> <span class="preprocessor">#if defined(GLM_FORCE_UNRESTRICTED_GENTYPE)</span></div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> <span class="preprocessor"># define GLM_HAS_DEFAULTED_FUNCTIONS 0</span></div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <span class="preprocessor">#elif GLM_COMPILER & GLM_COMPILER_CLANG</span></div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> <span class="preprocessor"># define GLM_HAS_DEFAULTED_FUNCTIONS __has_feature(cxx_defaulted_functions)</span></div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> <span class="preprocessor">#elif GLM_LANG & GLM_LANG_CXX11_FLAG</span></div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> <span class="preprocessor"># define GLM_HAS_DEFAULTED_FUNCTIONS 1</span></div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> <span class="preprocessor"># define GLM_HAS_DEFAULTED_FUNCTIONS ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\</span></div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <span class="preprocessor"> ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC44)) || \</span></div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> <span class="preprocessor"> ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2013)) || \</span></div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> <span class="preprocessor"> ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL12)) || \</span></div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> <span class="preprocessor"> (GLM_COMPILER & GLM_COMPILER_CUDA)))</span></div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> </div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> <span class="comment">// N2118</span></div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> <span class="preprocessor">#if GLM_COMPILER & GLM_COMPILER_CLANG</span></div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> <span class="preprocessor"># define GLM_HAS_RVALUE_REFERENCES __has_feature(cxx_rvalue_references)</span></div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> <span class="preprocessor">#elif GLM_LANG & GLM_LANG_CXX11_FLAG</span></div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> <span class="preprocessor"># define GLM_HAS_RVALUE_REFERENCES 1</span></div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> <span class="preprocessor"># define GLM_HAS_RVALUE_REFERENCES ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\</span></div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> <span class="preprocessor"> ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC43)) || \</span></div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> <span class="preprocessor"> ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2012)) || \</span></div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> <span class="preprocessor"> ((GLM_COMPILER & GLM_COMPILER_CUDA) && (GLM_COMPILER >= GLM_COMPILER_CUDA50))))</span></div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> </div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <span class="comment">// N2437 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf</span></div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> <span class="preprocessor">#if GLM_COMPILER & GLM_COMPILER_CLANG</span></div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> <span class="preprocessor"># define GLM_HAS_EXPLICIT_CONVERSION_OPERATORS __has_feature(cxx_explicit_conversions)</span></div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <span class="preprocessor">#elif GLM_LANG & GLM_LANG_CXX11_FLAG</span></div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> <span class="preprocessor"># define GLM_HAS_EXPLICIT_CONVERSION_OPERATORS 1</span></div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> <span class="preprocessor"># define GLM_HAS_EXPLICIT_CONVERSION_OPERATORS ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\</span></div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> <span class="preprocessor"> ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC45)) || \</span></div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> <span class="preprocessor"> ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL14)) || \</span></div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <span class="preprocessor"> ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2013)) || \</span></div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> <span class="preprocessor"> ((GLM_COMPILER & GLM_COMPILER_CUDA) && (GLM_COMPILER >= GLM_COMPILER_CUDA50))))</span></div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> </div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> <span class="comment">// N2258 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf</span></div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> <span class="preprocessor">#if GLM_COMPILER & GLM_COMPILER_CLANG</span></div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> <span class="preprocessor"># define GLM_HAS_TEMPLATE_ALIASES __has_feature(cxx_alias_templates)</span></div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> <span class="preprocessor">#elif GLM_LANG & GLM_LANG_CXX11_FLAG</span></div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="preprocessor"># define GLM_HAS_TEMPLATE_ALIASES 1</span></div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> <span class="preprocessor"># define GLM_HAS_TEMPLATE_ALIASES ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\</span></div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> <span class="preprocessor"> ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL12_1)) || \</span></div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="preprocessor"> ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC47)) || \</span></div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> <span class="preprocessor"> ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2013)) || \</span></div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> <span class="preprocessor"> ((GLM_COMPILER & GLM_COMPILER_CUDA) && (GLM_COMPILER >= GLM_COMPILER_CUDA50))))</span></div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> </div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> <span class="comment">// N2930 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2930.html</span></div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> <span class="preprocessor">#if GLM_COMPILER & GLM_COMPILER_CLANG</span></div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> <span class="preprocessor"># define GLM_HAS_RANGE_FOR __has_feature(cxx_range_for)</span></div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> <span class="preprocessor">#elif GLM_LANG & GLM_LANG_CXX11_FLAG</span></div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> <span class="preprocessor"># define GLM_HAS_RANGE_FOR 1</span></div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> <span class="preprocessor"># define GLM_HAS_RANGE_FOR ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\</span></div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> <span class="preprocessor"> ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC46)) || \</span></div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> <span class="preprocessor"> ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL13)) || \</span></div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> <span class="preprocessor"> ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2012)) || \</span></div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> <span class="preprocessor"> ((GLM_COMPILER & GLM_COMPILER_CUDA) && (GLM_COMPILER >= GLM_COMPILER_CUDA50))))</span></div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> </div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> <span class="preprocessor">#if GLM_LANG & GLM_LANG_CXX11_FLAG</span></div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> <span class="preprocessor"># define GLM_HAS_ASSIGNABLE 1</span></div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> <span class="preprocessor"># define GLM_HAS_ASSIGNABLE ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\</span></div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> <span class="preprocessor"> ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC49))))</span></div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> </div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> <span class="preprocessor">#define GLM_HAS_TRIVIAL_QUERIES 0</span></div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> </div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> <span class="comment">//</span></div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> <span class="preprocessor">#if GLM_LANG & GLM_LANG_CXX11_FLAG</span></div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> <span class="preprocessor"># define GLM_HAS_MAKE_SIGNED 1</span></div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> <span class="preprocessor"># define GLM_HAS_MAKE_SIGNED ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\</span></div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> <span class="preprocessor"> ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2013)) || \</span></div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> <span class="preprocessor"> ((GLM_COMPILER & GLM_COMPILER_CUDA) && (GLM_COMPILER >= GLM_COMPILER_CUDA50))))</span></div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> </div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> <span class="preprocessor">#if GLM_ARCH == GLM_ARCH_PURE</span></div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> <span class="preprocessor"># define GLM_HAS_BITSCAN_WINDOWS 0</span></div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> <span class="preprocessor"># define GLM_HAS_BITSCAN_WINDOWS ((GLM_PLATFORM & GLM_PLATFORM_WINDOWS) && (\</span></div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> <span class="preprocessor"> (GLM_COMPILER & (GLM_COMPILER_VC | GLM_COMPILER_INTEL))))</span></div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> </div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> <span class="comment">// OpenMP</span></div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> <span class="preprocessor">#ifdef _OPENMP</span></div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> <span class="preprocessor"># if GLM_COMPILER & GLM_COMPILER_GCC</span></div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> <span class="preprocessor"># if GLM_COMPILER >= GLM_COMPILER_GCC61</span></div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> <span class="preprocessor"># define GLM_HAS_OPENMP 45</span></div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> <span class="preprocessor"># elif GLM_COMPILER >= GLM_COMPILER_GCC49</span></div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> <span class="preprocessor"># define GLM_HAS_OPENMP 40</span></div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> <span class="preprocessor"># elif GLM_COMPILER >= GLM_COMPILER_GCC47</span></div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> <span class="preprocessor"># define GLM_HAS_OPENMP 31</span></div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> <span class="preprocessor"># elif GLM_COMPILER >= GLM_COMPILER_GCC44</span></div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> <span class="preprocessor"># define GLM_HAS_OPENMP 30</span></div>
+<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> <span class="preprocessor"># elif GLM_COMPILER >= GLM_COMPILER_GCC42</span></div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> <span class="preprocessor"># define GLM_HAS_OPENMP 25</span></div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> <span class="preprocessor"># else</span></div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> <span class="preprocessor"># define GLM_HAS_OPENMP 0</span></div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> <span class="preprocessor"># elif GLM_COMPILER & GLM_COMPILER_CLANG</span></div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> <span class="preprocessor"># if GLM_COMPILER >= GLM_COMPILER_CLANG38</span></div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> <span class="preprocessor"># define GLM_HAS_OPENMP 31</span></div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <span class="preprocessor"># else</span></div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> <span class="preprocessor"># define GLM_HAS_OPENMP 0</span></div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> <span class="preprocessor"># elif GLM_COMPILER & GLM_COMPILER_VC</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> <span class="preprocessor"># if GLM_COMPILER >= GLM_COMPILER_VC2010</span></div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> <span class="preprocessor"># define GLM_HAS_OPENMP 20</span></div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> <span class="preprocessor"># else</span></div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> <span class="preprocessor"># define GLM_HAS_OPENMP 0</span></div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> <span class="preprocessor"># elif GLM_COMPILER & GLM_COMPILER_INTEL</span></div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> <span class="preprocessor"># if GLM_COMPILER >= GLM_COMPILER_INTEL16</span></div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> <span class="preprocessor"># define GLM_HAS_OPENMP 40</span></div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> <span class="preprocessor"># elif GLM_COMPILER >= GLM_COMPILER_INTEL12</span></div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> <span class="preprocessor"># define GLM_HAS_OPENMP 31</span></div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> <span class="preprocessor"># else</span></div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> <span class="preprocessor"># define GLM_HAS_OPENMP 0</span></div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> <span class="preprocessor"># else</span></div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> <span class="preprocessor"># define GLM_HAS_OPENMP 0</span></div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> <span class="preprocessor"># endif// GLM_COMPILER & GLM_COMPILER_VC</span></div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> </div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> <span class="comment">// Static assert</span></div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> </div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> <span class="preprocessor">#if GLM_HAS_STATIC_ASSERT</span></div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> <span class="preprocessor"># define GLM_STATIC_ASSERT(x, message) static_assert(x, message)</span></div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> <span class="preprocessor">#elif defined(BOOST_STATIC_ASSERT)</span></div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> <span class="preprocessor"># define GLM_STATIC_ASSERT(x, message) BOOST_STATIC_ASSERT(x)</span></div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> <span class="preprocessor">#elif GLM_COMPILER & GLM_COMPILER_VC</span></div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> <span class="preprocessor"># define GLM_STATIC_ASSERT(x, message) typedef char __CASSERT__##__LINE__[(x) ? 1 : -1]</span></div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> <span class="preprocessor"># define GLM_STATIC_ASSERT(x, message)</span></div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> <span class="preprocessor"># define GLM_STATIC_ASSERT_NULL</span></div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> <span class="preprocessor">#endif//GLM_LANG</span></div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> </div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> <span class="comment">// Qualifiers</span></div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> </div>
+<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> <span class="preprocessor">#if GLM_COMPILER & GLM_COMPILER_CUDA</span></div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> <span class="preprocessor"># define GLM_CUDA_FUNC_DEF __device__ __host__</span></div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> <span class="preprocessor"># define GLM_CUDA_FUNC_DECL __device__ __host__</span></div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> <span class="preprocessor"># define GLM_CUDA_FUNC_DEF</span></div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> <span class="preprocessor"># define GLM_CUDA_FUNC_DECL</span></div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> </div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> <span class="preprocessor">#if GLM_COMPILER & GLM_COMPILER_GCC</span></div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> <span class="preprocessor"># define GLM_VAR_USED __attribute__ ((unused))</span></div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> <span class="preprocessor"># define GLM_VAR_USED</span></div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> </div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> <span class="preprocessor">#if defined(GLM_FORCE_INLINE)</span></div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> <span class="preprocessor"># if GLM_COMPILER & GLM_COMPILER_VC</span></div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> <span class="preprocessor"># define GLM_INLINE __forceinline</span></div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> <span class="preprocessor"># define GLM_NEVER_INLINE __declspec((noinline))</span></div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> <span class="preprocessor"># elif GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG)</span></div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> <span class="preprocessor"># define GLM_INLINE inline __attribute__((__always_inline__))</span></div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> <span class="preprocessor"># define GLM_NEVER_INLINE __attribute__((__noinline__))</span></div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> <span class="preprocessor"># elif GLM_COMPILER & GLM_COMPILER_CUDA</span></div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> <span class="preprocessor"># define GLM_INLINE __forceinline__</span></div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> <span class="preprocessor"># define GLM_NEVER_INLINE __noinline__</span></div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> <span class="preprocessor"># else</span></div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> <span class="preprocessor"># define GLM_INLINE inline</span></div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> <span class="preprocessor"># define GLM_NEVER_INLINE</span></div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> <span class="preprocessor"># endif//GLM_COMPILER</span></div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> <span class="preprocessor"># define GLM_INLINE inline</span></div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> <span class="preprocessor"># define GLM_NEVER_INLINE</span></div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> <span class="preprocessor">#endif//defined(GLM_FORCE_INLINE)</span></div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> </div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> <span class="preprocessor">#define GLM_FUNC_DECL GLM_CUDA_FUNC_DECL</span></div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> <span class="preprocessor">#define GLM_FUNC_QUALIFIER GLM_CUDA_FUNC_DEF GLM_INLINE</span></div>
+<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> </div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> <span class="comment">// Swizzle operators</span></div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> </div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> <span class="comment">// User defines: GLM_FORCE_SWIZZLE</span></div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> </div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> <span class="preprocessor">#ifdef GLM_SWIZZLE</span></div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> <span class="preprocessor"># pragma message("GLM: GLM_SWIZZLE is deprecated, use GLM_FORCE_SWIZZLE instead")</span></div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> </div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> <span class="preprocessor">#define GLM_SWIZZLE_ENABLED 1</span></div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> <span class="preprocessor">#define GLM_SWIZZLE_DISABLE 0</span></div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> </div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> <span class="preprocessor">#if defined(GLM_FORCE_SWIZZLE) || defined(GLM_SWIZZLE)</span></div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> <span class="preprocessor"># undef GLM_SWIZZLE</span></div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> <span class="preprocessor"># define GLM_SWIZZLE GLM_SWIZZLE_ENABLED</span></div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> <span class="preprocessor"># undef GLM_SWIZZLE</span></div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> <span class="preprocessor"># define GLM_SWIZZLE GLM_SWIZZLE_DISABLE</span></div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> </div>
+<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_MESSAGE_SWIZZLE_DISPLAYED)</span></div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> <span class="preprocessor"># define GLM_MESSAGE_SWIZZLE_DISPLAYED</span></div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> <span class="preprocessor"># if GLM_SWIZZLE == GLM_SWIZZLE_ENABLED</span></div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> <span class="preprocessor"># pragma message("GLM: Swizzling operators enabled")</span></div>
+<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> <span class="preprocessor"># else</span></div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> <span class="preprocessor"># pragma message("GLM: Swizzling operators disabled, #define GLM_SWIZZLE to enable swizzle operators")</span></div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> <span class="preprocessor">#endif//GLM_MESSAGES</span></div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> </div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> <span class="comment">// Allows using not basic types as genType</span></div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> </div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> <span class="comment">// #define GLM_FORCE_UNRESTRICTED_GENTYPE</span></div>
+<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> </div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_MESSAGE_UNRESTRICTED_GENTYPE_DISPLAYED)</span></div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> <span class="preprocessor"># define GLM_MESSAGE_UNRESTRICTED_GENTYPE_DISPLAYED</span></div>
+<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> <span class="preprocessor"># ifdef GLM_FORCE_UNRESTRICTED_GENTYPE</span></div>
+<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> <span class="preprocessor"># pragma message("GLM: Use unrestricted genType")</span></div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> <span class="preprocessor">#endif//GLM_MESSAGES</span></div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> </div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> <span class="comment">// Clip control</span></div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> </div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> <span class="preprocessor">#ifdef GLM_DEPTH_ZERO_TO_ONE // Legacy 0.9.8 development</span></div>
+<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> <span class="preprocessor"># error Define GLM_FORCE_DEPTH_ZERO_TO_ONE instead of GLM_DEPTH_ZERO_TO_ONE to use 0 to 1 clip space.</span></div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> </div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> <span class="preprocessor">#define GLM_DEPTH_ZERO_TO_ONE 0x00000001</span></div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> <span class="preprocessor">#define GLM_DEPTH_NEGATIVE_ONE_TO_ONE 0x00000002</span></div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> </div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> <span class="preprocessor">#ifdef GLM_FORCE_DEPTH_ZERO_TO_ONE</span></div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> <span class="preprocessor"># define GLM_DEPTH_CLIP_SPACE GLM_DEPTH_ZERO_TO_ONE</span></div>
+<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> <span class="preprocessor"># define GLM_DEPTH_CLIP_SPACE GLM_DEPTH_NEGATIVE_ONE_TO_ONE</span></div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> </div>
+<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_MESSAGE_DEPTH_DISPLAYED)</span></div>
+<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> <span class="preprocessor"># define GLM_MESSAGE_DEPTH_DISPLAYED</span></div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> <span class="preprocessor"># if GLM_DEPTH_CLIP_SPACE == GLM_DEPTH_ZERO_TO_ONE</span></div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> <span class="preprocessor"># pragma message("GLM: Depth clip space: Zero to one")</span></div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> <span class="preprocessor"># else</span></div>
+<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> <span class="preprocessor"># pragma message("GLM: Depth clip space: negative one to one")</span></div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> <span class="preprocessor">#endif//GLM_MESSAGES</span></div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> </div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> <span class="comment">// Coordinate system, define GLM_FORCE_LEFT_HANDED before including GLM</span></div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> <span class="comment">// to use left handed coordinate system by default.</span></div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> </div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> <span class="preprocessor">#ifdef GLM_LEFT_HANDED // Legacy 0.9.8 development</span></div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> <span class="preprocessor"># error Define GLM_FORCE_LEFT_HANDED instead of GLM_LEFT_HANDED left handed coordinate system by default.</span></div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> </div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> <span class="preprocessor">#define GLM_LEFT_HANDED 0x00000001 // For DirectX, Metal, Vulkan</span></div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> <span class="preprocessor">#define GLM_RIGHT_HANDED 0x00000002 // For OpenGL, default in GLM</span></div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> </div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> <span class="preprocessor">#ifdef GLM_FORCE_LEFT_HANDED</span></div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> <span class="preprocessor"># define GLM_COORDINATE_SYSTEM GLM_LEFT_HANDED</span></div>
+<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> <span class="preprocessor"># define GLM_COORDINATE_SYSTEM GLM_RIGHT_HANDED</span></div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> </div>
+<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_MESSAGE_HANDED_DISPLAYED)</span></div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> <span class="preprocessor"># define GLM_MESSAGE_HANDED_DISPLAYED</span></div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> <span class="preprocessor"># if GLM_COORDINATE_SYSTEM == GLM_LEFT_HANDED</span></div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> <span class="preprocessor"># pragma message("GLM: Coordinate system: left handed")</span></div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> <span class="preprocessor"># else</span></div>
+<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> <span class="preprocessor"># pragma message("GLM: Coordinate system: right handed")</span></div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> <span class="preprocessor">#endif//GLM_MESSAGES</span></div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> </div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> <span class="comment">// Qualifiers</span></div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> </div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> <span class="preprocessor">#if (GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))</span></div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> <span class="preprocessor"># define GLM_DEPRECATED __declspec(deprecated)</span></div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> <span class="preprocessor"># define GLM_ALIGN(x) __declspec(align(x))</span></div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> <span class="preprocessor"># define GLM_ALIGNED_STRUCT(x) struct __declspec(align(x))</span></div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> <span class="preprocessor"># define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef __declspec(align(alignment)) type name</span></div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> <span class="preprocessor"># define GLM_RESTRICT_FUNC __declspec(restrict)</span></div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> <span class="preprocessor"># define GLM_RESTRICT __restrict</span></div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> <span class="preprocessor"># if GLM_COMPILER >= GLM_COMPILER_VC2013</span></div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> <span class="preprocessor"># define GLM_VECTOR_CALL __vectorcall</span></div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> <span class="preprocessor"># else</span></div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> <span class="preprocessor"># define GLM_VECTOR_CALL</span></div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> <span class="preprocessor">#elif GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG | GLM_COMPILER_INTEL)</span></div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> <span class="preprocessor"># define GLM_DEPRECATED __attribute__((__deprecated__))</span></div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> <span class="preprocessor"># define GLM_ALIGN(x) __attribute__((aligned(x)))</span></div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> <span class="preprocessor"># define GLM_ALIGNED_STRUCT(x) struct __attribute__((aligned(x)))</span></div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> <span class="preprocessor"># define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name __attribute__((aligned(alignment)))</span></div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> <span class="preprocessor"># define GLM_RESTRICT_FUNC __restrict__</span></div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> <span class="preprocessor"># define GLM_RESTRICT __restrict__</span></div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> <span class="preprocessor"># if GLM_COMPILER & GLM_COMPILER_CLANG</span></div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> <span class="preprocessor"># if GLM_COMPILER >= GLM_COMPILER_CLANG37</span></div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> <span class="preprocessor"># define GLM_VECTOR_CALL __vectorcall</span></div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> <span class="preprocessor"># else</span></div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> <span class="preprocessor"># define GLM_VECTOR_CALL</span></div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> <span class="preprocessor"># else</span></div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> <span class="preprocessor"># define GLM_VECTOR_CALL</span></div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span> <span class="preprocessor">#elif GLM_COMPILER & GLM_COMPILER_CUDA</span></div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span> <span class="preprocessor"># define GLM_DEPRECATED</span></div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> <span class="preprocessor"># define GLM_ALIGN(x) __align__(x)</span></div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span> <span class="preprocessor"># define GLM_ALIGNED_STRUCT(x) struct __align__(x)</span></div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> <span class="preprocessor"># define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name __align__(x)</span></div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span> <span class="preprocessor"># define GLM_RESTRICT_FUNC __restrict__</span></div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span> <span class="preprocessor"># define GLM_RESTRICT __restrict__</span></div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span> <span class="preprocessor"># define GLM_VECTOR_CALL</span></div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span> <span class="preprocessor"># define GLM_DEPRECATED</span></div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span> <span class="preprocessor"># define GLM_ALIGN</span></div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span> <span class="preprocessor"># define GLM_ALIGNED_STRUCT(x) struct</span></div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span> <span class="preprocessor"># define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name</span></div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span> <span class="preprocessor"># define GLM_RESTRICT_FUNC</span></div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span> <span class="preprocessor"># define GLM_RESTRICT</span></div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span> <span class="preprocessor"># define GLM_VECTOR_CALL</span></div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span> <span class="preprocessor">#endif//GLM_COMPILER</span></div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span> </div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span> <span class="preprocessor">#if GLM_HAS_DEFAULTED_FUNCTIONS</span></div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span> <span class="preprocessor"># define GLM_DEFAULT = default</span></div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span> <span class="preprocessor"># ifdef GLM_FORCE_NO_CTOR_INIT</span></div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span> <span class="preprocessor"># define GLM_DEFAULT_CTOR = default</span></div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span> <span class="preprocessor"># else</span></div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span> <span class="preprocessor"># define GLM_DEFAULT_CTOR</span></div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span> <span class="preprocessor"># define GLM_DEFAULT</span></div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span> <span class="preprocessor"># define GLM_DEFAULT_CTOR</span></div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span> </div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span> <span class="preprocessor">#if GLM_HAS_CONSTEXPR</span></div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span> <span class="preprocessor"># define GLM_CONSTEXPR constexpr</span></div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span> <span class="preprocessor"># define GLM_CONSTEXPR_CTOR constexpr</span></div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span> <span class="preprocessor"># define GLM_RELAXED_CONSTEXPR constexpr</span></div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span> <span class="preprocessor">#elif GLM_HAS_CONSTEXPR_PARTIAL</span></div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span> <span class="preprocessor"># define GLM_CONSTEXPR constexpr</span></div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span> <span class="preprocessor"># define GLM_CONSTEXPR_CTOR</span></div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span> <span class="preprocessor"># define GLM_RELAXED_CONSTEXPR const</span></div>
+<div class="line"><a name="l00709"></a><span class="lineno"> 709</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00710"></a><span class="lineno"> 710</span> <span class="preprocessor"># define GLM_CONSTEXPR</span></div>
+<div class="line"><a name="l00711"></a><span class="lineno"> 711</span> <span class="preprocessor"># define GLM_CONSTEXPR_CTOR</span></div>
+<div class="line"><a name="l00712"></a><span class="lineno"> 712</span> <span class="preprocessor"># define GLM_RELAXED_CONSTEXPR const</span></div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00714"></a><span class="lineno"> 714</span> </div>
+<div class="line"><a name="l00715"></a><span class="lineno"> 715</span> <span class="preprocessor">#if GLM_ARCH == GLM_ARCH_PURE</span></div>
+<div class="line"><a name="l00716"></a><span class="lineno"> 716</span> <span class="preprocessor"># define GLM_CONSTEXPR_SIMD GLM_CONSTEXPR</span></div>
+<div class="line"><a name="l00717"></a><span class="lineno"> 717</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span> <span class="preprocessor"># define GLM_CONSTEXPR_SIMD</span></div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00720"></a><span class="lineno"> 720</span> </div>
+<div class="line"><a name="l00721"></a><span class="lineno"> 721</span> <span class="preprocessor">#ifdef GLM_FORCE_EXPLICIT_CTOR</span></div>
+<div class="line"><a name="l00722"></a><span class="lineno"> 722</span> <span class="preprocessor"># define GLM_EXPLICIT explicit</span></div>
+<div class="line"><a name="l00723"></a><span class="lineno"> 723</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00724"></a><span class="lineno"> 724</span> <span class="preprocessor"># define GLM_EXPLICIT</span></div>
+<div class="line"><a name="l00725"></a><span class="lineno"> 725</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00726"></a><span class="lineno"> 726</span> </div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span> </div>
+<div class="line"><a name="l00729"></a><span class="lineno"> 729</span> <span class="preprocessor">#define GLM_HAS_ALIGNED_TYPE GLM_HAS_UNRESTRICTED_UNIONS</span></div>
+<div class="line"><a name="l00730"></a><span class="lineno"> 730</span> </div>
+<div class="line"><a name="l00732"></a><span class="lineno"> 732</span> <span class="comment">// Length type</span></div>
+<div class="line"><a name="l00733"></a><span class="lineno"> 733</span> </div>
+<div class="line"><a name="l00734"></a><span class="lineno"> 734</span> <span class="comment">// User defines: GLM_FORCE_SIZE_T_LENGTH GLM_FORCE_SIZE_FUNC</span></div>
+<div class="line"><a name="l00735"></a><span class="lineno"> 735</span> </div>
+<div class="line"><a name="l00736"></a><span class="lineno"> 736</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00737"></a><span class="lineno"> 737</span> {</div>
+<div class="line"><a name="l00738"></a><span class="lineno"> 738</span>  <span class="keyword">using</span> std::size_t;</div>
+<div class="line"><a name="l00739"></a><span class="lineno"> 739</span> <span class="preprocessor"># if defined(GLM_FORCE_SIZE_T_LENGTH)</span></div>
+<div class="line"><a name="l00740"></a><span class="lineno"> 740</span>  <span class="keyword">typedef</span> <span class="keywordtype">size_t</span> length_t;</div>
+<div class="line"><a name="l00741"></a><span class="lineno"> 741</span> <span class="preprocessor"># else</span></div>
+<div class="line"><a name="l00742"></a><span class="lineno"> 742</span>  <span class="keyword">typedef</span> <span class="keywordtype">int</span> length_t;</div>
+<div class="line"><a name="l00743"></a><span class="lineno"> 743</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00744"></a><span class="lineno"> 744</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00745"></a><span class="lineno"> 745</span> </div>
+<div class="line"><a name="l00746"></a><span class="lineno"> 746</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_MESSAGE_FORCE_SIZE_T_LENGTH)</span></div>
+<div class="line"><a name="l00747"></a><span class="lineno"> 747</span> <span class="preprocessor"># define GLM_MESSAGE_FORCE_SIZE_T_LENGTH</span></div>
+<div class="line"><a name="l00748"></a><span class="lineno"> 748</span> <span class="preprocessor"># if defined GLM_FORCE_SIZE_T_LENGTH</span></div>
+<div class="line"><a name="l00749"></a><span class="lineno"> 749</span> <span class="preprocessor"># pragma message("GLM: .length() returns glm::length_t, a typedef of std::size_t")</span></div>
+<div class="line"><a name="l00750"></a><span class="lineno"> 750</span> <span class="preprocessor"># else</span></div>
+<div class="line"><a name="l00751"></a><span class="lineno"> 751</span> <span class="preprocessor"># pragma message("GLM: .length() returns glm::length_t, a typedef of int following the GLSL specification")</span></div>
+<div class="line"><a name="l00752"></a><span class="lineno"> 752</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00753"></a><span class="lineno"> 753</span> <span class="preprocessor">#endif//GLM_MESSAGES</span></div>
+<div class="line"><a name="l00754"></a><span class="lineno"> 754</span> </div>
+<div class="line"><a name="l00756"></a><span class="lineno"> 756</span> <span class="comment">// countof</span></div>
+<div class="line"><a name="l00757"></a><span class="lineno"> 757</span> </div>
+<div class="line"><a name="l00758"></a><span class="lineno"> 758</span> <span class="preprocessor">#ifndef __has_feature</span></div>
+<div class="line"><a name="l00759"></a><span class="lineno"> 759</span> <span class="preprocessor"># define __has_feature(x) 0 // Compatibility with non-clang compilers.</span></div>
+<div class="line"><a name="l00760"></a><span class="lineno"> 760</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00761"></a><span class="lineno"> 761</span> </div>
+<div class="line"><a name="l00762"></a><span class="lineno"> 762</span> <span class="preprocessor">#if GLM_HAS_CONSTEXPR_PARTIAL</span></div>
+<div class="line"><a name="l00763"></a><span class="lineno"> 763</span>  <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00764"></a><span class="lineno"> 764</span>  {</div>
+<div class="line"><a name="l00765"></a><span class="lineno"> 765</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, std::<span class="keywordtype">size_t</span> N></div>
+<div class="line"><a name="l00766"></a><span class="lineno"> 766</span>  constexpr std::size_t countof(T <span class="keyword">const</span> (&)[N])</div>
+<div class="line"><a name="l00767"></a><span class="lineno"> 767</span>  {</div>
+<div class="line"><a name="l00768"></a><span class="lineno"> 768</span>  <span class="keywordflow">return</span> N;</div>
+<div class="line"><a name="l00769"></a><span class="lineno"> 769</span>  }</div>
+<div class="line"><a name="l00770"></a><span class="lineno"> 770</span>  }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00771"></a><span class="lineno"> 771</span> <span class="preprocessor"># define GLM_COUNTOF(arr) glm::countof(arr)</span></div>
+<div class="line"><a name="l00772"></a><span class="lineno"> 772</span> <span class="preprocessor">#elif defined(_MSC_VER)</span></div>
+<div class="line"><a name="l00773"></a><span class="lineno"> 773</span> <span class="preprocessor"># define GLM_COUNTOF(arr) _countof(arr)</span></div>
+<div class="line"><a name="l00774"></a><span class="lineno"> 774</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00775"></a><span class="lineno"> 775</span> <span class="preprocessor"># define GLM_COUNTOF(arr) sizeof(arr) / sizeof(arr[0])</span></div>
+<div class="line"><a name="l00776"></a><span class="lineno"> 776</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00777"></a><span class="lineno"> 777</span> </div>
+<div class="line"><a name="l00779"></a><span class="lineno"> 779</span> <span class="comment">// Uninitialize constructors</span></div>
+<div class="line"><a name="l00780"></a><span class="lineno"> 780</span> </div>
+<div class="line"><a name="l00781"></a><span class="lineno"> 781</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00782"></a><span class="lineno"> 782</span> {</div>
+<div class="line"><a name="l00783"></a><span class="lineno"> 783</span>  <span class="keyword">enum</span> ctor{uninitialize};</div>
+<div class="line"><a name="l00784"></a><span class="lineno"> 784</span> }<span class="comment">//namespace glm</span></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00099.html b/src/third_party/glm/doc/api/a00099.html
new file mode 100644
index 0000000..7a0554c
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00099.html
@@ -0,0 +1,67 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: simd_mat4.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">simd_mat4.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00099_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00226.html">GLM_GTX_simd_mat4</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00099_source.html">simd_mat4.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00099_source.html b/src/third_party/glm/doc/api/a00099_source.html
new file mode 100644
index 0000000..c74c9e4
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00099_source.html
@@ -0,0 +1,219 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: simd_mat4.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">simd_mat4.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00099.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// Dependencies</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include "../detail/setup.hpp"</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#if(GLM_ARCH != GLM_ARCH_PURE)</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#if(GLM_ARCH & GLM_ARCH_SSE2_BIT)</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor"># include "../detail/intrinsic_matrix.hpp"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"># include "../gtx/simd_vec4.hpp"</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor"># error "GLM: GLM_GTX_simd_mat4 requires compiler support of SSE2 through intrinsics"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_simd_mat4 extension included")</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_simd_mat4 extension is deprecated and will be removed in GLM 0.9.9. Use mat4 instead and use compiler SIMD arguments.")</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a>{</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">namespace </span>detail</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> {</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  GLM_ALIGNED_STRUCT(16) fmat4x4SIMD</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  {</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keyword">typedef</span> <span class="keywordtype">float</span> value_type;</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keyword">typedef</span> fvec4SIMD col_type;</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keyword">typedef</span> fvec4SIMD row_type;</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keyword">typedef</span> std::size_t size_type;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keyword">typedef</span> fmat4x4SIMD type;</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keyword">typedef</span> fmat4x4SIMD transpose_type;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keyword">typedef</span> tmat4x4<float, defaultp> pure_type;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keyword">typedef</span> tvec4<float, defaultp> pure_row_type;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keyword">typedef</span> tvec4<float, defaultp> pure_col_type;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keyword">typedef</span> tmat4x4<float, defaultp> pure_transpose_type;</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  GLM_FUNC_DECL length_t <a class="code" href="a00148.html#ga18d45e3d4c7705e67ccfabd99e521604">length</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  fvec4SIMD Data[4];</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="comment">// Constructors</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  fmat4x4SIMD() GLM_DEFAULT_CTOR;</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  explicit fmat4x4SIMD(<span class="keywordtype">float</span> const & s);</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  explicit fmat4x4SIMD(</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keywordtype">float</span> const & x0, <span class="keywordtype">float</span> const & y0, <span class="keywordtype">float</span> const & z0, <span class="keywordtype">float</span> const & w0,</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keywordtype">float</span> const & x1, <span class="keywordtype">float</span> const & y1, <span class="keywordtype">float</span> const & z1, <span class="keywordtype">float</span> const & w1,</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keywordtype">float</span> const & x2, <span class="keywordtype">float</span> const & y2, <span class="keywordtype">float</span> const & z2, <span class="keywordtype">float</span> const & w2,</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keywordtype">float</span> const & x3, <span class="keywordtype">float</span> const & y3, <span class="keywordtype">float</span> const & z3, <span class="keywordtype">float</span> const & w3);</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  explicit fmat4x4SIMD(</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  fvec4SIMD const & v0,</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  fvec4SIMD const & v1,</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  fvec4SIMD const & v2,</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  fvec4SIMD const & v3);</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  explicit fmat4x4SIMD(</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <a class="code" href="a00157.html#ga089315d5a0c20ac6eaa17a854bbd2e81">mat4x4</a> const & m);</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  explicit fmat4x4SIMD(</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  __m128 const in[4]);</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="comment">// Conversions</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="comment">//template <typename U></span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="comment">//explicit tmat4x4(tmat4x4<U> const & m);</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="comment">//explicit tmat4x4(tmat2x2<T> const & x);</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="comment">//explicit tmat4x4(tmat3x3<T> const & x);</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="comment">//explicit tmat4x4(tmat2x3<T> const & x);</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="comment">//explicit tmat4x4(tmat3x2<T> const & x);</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <span class="comment">//explicit tmat4x4(tmat2x4<T> const & x);</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="comment">//explicit tmat4x4(tmat4x2<T> const & x);</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="comment">//explicit tmat4x4(tmat3x4<T> const & x);</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="comment">//explicit tmat4x4(tmat4x3<T> const & x);</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="comment">// Accesses</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  fvec4SIMD & operator[](length_t i);</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  fvec4SIMD const & operator[](length_t i) const;</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="comment">// Unary updatable operators</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  fmat4x4SIMD & operator= (fmat4x4SIMD const & m) GLM_DEFAULT;</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  fmat4x4SIMD & operator+= (<span class="keywordtype">float</span> const & s);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  fmat4x4SIMD & operator+= (fmat4x4SIMD const & m);</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  fmat4x4SIMD & operator-= (<span class="keywordtype">float</span> const & s);</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  fmat4x4SIMD & operator-= (fmat4x4SIMD const & m);</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  fmat4x4SIMD & operator*= (<span class="keywordtype">float</span> const & s);</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  fmat4x4SIMD & operator*= (fmat4x4SIMD const & m);</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  fmat4x4SIMD & operator/= (<span class="keywordtype">float</span> const & s);</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  fmat4x4SIMD & operator/= (fmat4x4SIMD const & m);</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  fmat4x4SIMD & operator++ ();</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  fmat4x4SIMD & operator-- ();</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  };</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <span class="comment">// Binary operators</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  fmat4x4SIMD operator+ (fmat4x4SIMD const & m, <span class="keywordtype">float</span> const & s);</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  fmat4x4SIMD operator+ (<span class="keywordtype">float</span> const & s, fmat4x4SIMD const & m);</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  fmat4x4SIMD operator+ (fmat4x4SIMD const & m1, fmat4x4SIMD const & m2);</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  fmat4x4SIMD operator- (fmat4x4SIMD const & m, <span class="keywordtype">float</span> const & s);</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  fmat4x4SIMD operator- (<span class="keywordtype">float</span> const & s, fmat4x4SIMD const & m);</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  fmat4x4SIMD operator- (fmat4x4SIMD const & m1, fmat4x4SIMD const & m2);</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  fmat4x4SIMD operator* (fmat4x4SIMD const & m, <span class="keywordtype">float</span> const & s);</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  fmat4x4SIMD operator* (<span class="keywordtype">float</span> const & s, fmat4x4SIMD const & m);</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  fvec4SIMD operator* (fmat4x4SIMD const & m, fvec4SIMD const & v);</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  fvec4SIMD operator* (fvec4SIMD const & v, fmat4x4SIMD const & m);</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  fmat4x4SIMD operator* (fmat4x4SIMD const & m1, fmat4x4SIMD const & m2);</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  fmat4x4SIMD operator/ (fmat4x4SIMD const & m, <span class="keywordtype">float</span> const & s);</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  fmat4x4SIMD operator/ (<span class="keywordtype">float</span> const & s, fmat4x4SIMD const & m);</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  fvec4SIMD operator/ (fmat4x4SIMD const & m, fvec4SIMD const & v);</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  fvec4SIMD operator/ (fvec4SIMD const & v, fmat4x4SIMD const & m);</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  fmat4x4SIMD operator/ (fmat4x4SIMD const & m1, fmat4x4SIMD const & m2);</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="comment">// Unary constant operators</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  fmat4x4SIMD const operator- (fmat4x4SIMD const & m);</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  fmat4x4SIMD const operator-- (fmat4x4SIMD const & m, <span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  fmat4x4SIMD const operator++ (fmat4x4SIMD const & m, <span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> }<span class="comment">//namespace detail</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  typedef detail::fmat4x4SIMD simdMat4;</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <a class="code" href="a00157.html#gade0eb47c01f79384a6f38017ede17446">mat4</a> <a class="code" href="a00172.html#ga14bb2ddf028c91542763eb6f2bba47ef">mat4_cast</a>(</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  detail::fmat4x4SIMD const & x);</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  detail::fmat4x4SIMD <a class="code" href="a00150.html#ga4a54992e4741188ee624b21e3ba91814">matrixCompMult</a>(</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  detail::fmat4x4SIMD const & x,</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  detail::fmat4x4SIMD const & y);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  detail::fmat4x4SIMD <a class="code" href="a00150.html#gae9f513dc8e4f3ceb993669321b6d0f09">outerProduct</a>(</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  detail::fvec4SIMD const & c,</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  detail::fvec4SIMD const & r);</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  detail::fmat4x4SIMD transpose(</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  detail::fmat4x4SIMD const & x);</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <span class="keywordtype">float</span> <a class="code" href="a00150.html#ga26ea77c574802bc6fc193c40478718d2">determinant</a>(</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  detail::fmat4x4SIMD const & m);</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  detail::fmat4x4SIMD <a class="code" href="a00150.html#gaa7e1d5586cd499126cec76e0f11871e3">inverse</a>(</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  detail::fmat4x4SIMD const & m);</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> </div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> }<span class="comment">// namespace glm</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> </div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="preprocessor">#include "simd_mat4.inl"</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> </div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="preprocessor">#endif//(GLM_ARCH != GLM_ARCH_PURE)</span></div>
+<div class="ttc" id="a00150_html_ga26ea77c574802bc6fc193c40478718d2"><div class="ttname"><a href="a00150.html#ga26ea77c574802bc6fc193c40478718d2">glm::determinant</a></div><div class="ttdeci">GLM_FUNC_DECL T determinant(matType< T, P > const &m)</div><div class="ttdoc">Returns the transposed matrix of x. </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00150_html_gaa7e1d5586cd499126cec76e0f11871e3"><div class="ttname"><a href="a00150.html#gaa7e1d5586cd499126cec76e0f11871e3">glm::inverse</a></div><div class="ttdeci">GLM_FUNC_DECL matType< T, P > inverse(matType< T, P > const &m)</div><div class="ttdoc">Return the inverse of a squared matrix. </div></div>
+<div class="ttc" id="a00157_html_gade0eb47c01f79384a6f38017ede17446"><div class="ttname"><a href="a00157.html#gade0eb47c01f79384a6f38017ede17446">glm::mat4</a></div><div class="ttdeci">mat4x4 mat4</div><div class="ttdoc">4 columns of 4 components matrix of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00416">type_mat.hpp:416</a></div></div>
+<div class="ttc" id="a00157_html_ga089315d5a0c20ac6eaa17a854bbd2e81"><div class="ttname"><a href="a00157.html#ga089315d5a0c20ac6eaa17a854bbd2e81">glm::mat4x4</a></div><div class="ttdeci">highp_mat4x4 mat4x4</div><div class="ttdoc">4 columns of 4 components matrix of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00399">type_mat.hpp:399</a></div></div>
+<div class="ttc" id="a00172_html_ga14bb2ddf028c91542763eb6f2bba47ef"><div class="ttname"><a href="a00172.html#ga14bb2ddf028c91542763eb6f2bba47ef">glm::mat4_cast</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, P > mat4_cast(tquat< T, P > const &x)</div><div class="ttdoc">Converts a quaternion to a 4 * 4 matrix. </div></div>
+<div class="ttc" id="a00150_html_gae9f513dc8e4f3ceb993669321b6d0f09"><div class="ttname"><a href="a00150.html#gae9f513dc8e4f3ceb993669321b6d0f09">glm::outerProduct</a></div><div class="ttdeci">GLM_FUNC_DECL detail::outerProduct_trait< T, P, vecTypeA, vecTypeB >::type outerProduct(vecTypeA< T, P > const &c, vecTypeB< T, P > const &r)</div><div class="ttdoc">Treats the first parameter c as a column vector and the second parameter r as a row vector and does a...</div></div>
+<div class="ttc" id="a00150_html_ga4a54992e4741188ee624b21e3ba91814"><div class="ttname"><a href="a00150.html#ga4a54992e4741188ee624b21e3ba91814">glm::matrixCompMult</a></div><div class="ttdeci">GLM_FUNC_DECL matType< T, P > matrixCompMult(matType< T, P > const &x, matType< T, P > const &y)</div><div class="ttdoc">Multiply matrix x by matrix y component-wise, i.e., result[i][j] is the scalar product of x[i][j] and...</div></div>
+<div class="ttc" id="a00148_html_ga18d45e3d4c7705e67ccfabd99e521604"><div class="ttname"><a href="a00148.html#ga18d45e3d4c7705e67ccfabd99e521604">glm::length</a></div><div class="ttdeci">GLM_FUNC_DECL T length(vecType< T, P > const &x)</div><div class="ttdoc">Returns the length of x, i.e., sqrt(x * x). </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00100.html b/src/third_party/glm/doc/api/a00100.html
new file mode 100644
index 0000000..21ba4b1
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00100.html
@@ -0,0 +1,67 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: simd_quat.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">simd_quat.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00100_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00227.html">GLM_GTX_simd_quat</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00100_source.html">simd_quat.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00100_source.html b/src/third_party/glm/doc/api/a00100_source.html
new file mode 100644
index 0000000..2ed51eb
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00100_source.html
@@ -0,0 +1,282 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: simd_quat.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">simd_quat.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00100.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include "../glm.hpp"</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "../gtc/quaternion.hpp"</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "../gtx/fast_trigonometry.hpp"</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#if GLM_ARCH != GLM_ARCH_PURE</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#if GLM_ARCH & GLM_ARCH_SSE2_BIT</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor"># include "../gtx/simd_mat4.hpp"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor"># error "GLM: GLM_GTX_simd_quat requires compiler support of SSE2 through intrinsics"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_simd_quat extension included")</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_simd_quat extension is deprecated and will be removed in GLM 0.9.9. Use GLM_GTC_quaternion instead and use compiler SIMD arguments.")</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="comment">// Warning silencer for nameless struct/union.</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#if (GLM_COMPILER & GLM_COMPILER_VC)</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor"># pragma warning(push)</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor"># pragma warning(disable:4201) // warning C4201: nonstandard extension used : nameless struct/union</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a>{</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keyword">namespace </span>detail</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> {</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  GLM_ALIGNED_STRUCT(16) fquatSIMD</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  {</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keyword">typedef</span> <span class="keywordtype">float</span> value_type;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keyword">typedef</span> std::size_t size_type;</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keyword">typedef</span> fquatSIMD type;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keyword">typedef</span> tquat<bool, defaultp> bool_type;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keyword">typedef</span> tquat<float, defaultp> pure_type;</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="preprocessor">#ifdef GLM_SIMD_ENABLE_XYZW_UNION</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keyword">union</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  {</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  __m128 Data;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keyword">struct </span>{<span class="keywordtype">float</span> x, y, z, w;};</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  };</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  __m128 Data;</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="comment">// Implicit basic constructors</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  fquatSIMD() GLM_DEFAULT_CTOR;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  fquatSIMD(fquatSIMD const & q) GLM_DEFAULT;</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  fquatSIMD(__m128 const & Data);</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="comment">// Explicit basic constructors</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  explicit fquatSIMD(</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  ctor);</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  explicit fquatSIMD(</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keywordtype">float</span> const & w,</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="keywordtype">float</span> const & x,</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordtype">float</span> const & y,</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keywordtype">float</span> const & z);</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  explicit fquatSIMD(</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  quat const & v);</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  explicit fquatSIMD(</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <a class="code" href="a00157.html#gaa8ea2429bb3cb41a715258a447f39897">vec3</a> const & <a class="code" href="a00172.html#gadb92ec1c1b0dd6b024176a73fbef3e64">eulerAngles</a>);</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="comment">// Unary arithmetic operators</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  fquatSIMD& operator= (fquatSIMD const & q) GLM_DEFAULT;</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  fquatSIMD& operator*=(<span class="keywordtype">float</span> const & s);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  fquatSIMD& operator/=(<span class="keywordtype">float</span> const & s);</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  };</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <span class="comment">// Arithmetic operators</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  detail::fquatSIMD operator- (</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  detail::fquatSIMD const & q);</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  detail::fquatSIMD operator+ (</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  detail::fquatSIMD const & q,</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  detail::fquatSIMD const & p);</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  detail::fquatSIMD operator* (</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  detail::fquatSIMD const & q,</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  detail::fquatSIMD const & p);</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  detail::fvec4SIMD operator* (</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  detail::fquatSIMD const & q,</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  detail::fvec4SIMD const & v);</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  detail::fvec4SIMD operator* (</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  detail::fvec4SIMD const & v,</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  detail::fquatSIMD const & q);</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  detail::fquatSIMD operator* (</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  detail::fquatSIMD const & q,</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="keywordtype">float</span> s);</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  detail::fquatSIMD operator* (</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="keywordtype">float</span> s,</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  detail::fquatSIMD const & q);</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  detail::fquatSIMD operator/ (</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  detail::fquatSIMD const & q,</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="keywordtype">float</span> s);</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> }<span class="comment">//namespace detail</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  typedef <a class="code" href="a00141.html">glm</a>::detail::fquatSIMD simdQuat;</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> </div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  quat <a class="code" href="a00172.html#ga950f8acff3e33bbda77895a3dcb7e5ce">quat_cast</a>(</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  detail::fquatSIMD const & x);</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  detail::fquatSIMD quatSIMD_cast(</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  detail::fmat4x4SIMD const & m);</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  detail::fquatSIMD quatSIMD_cast(</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  tmat4x4<T, P> const & m);</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  detail::fquatSIMD quatSIMD_cast(</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  tmat3x3<T, P> const & m);</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  detail::fmat4x4SIMD mat4SIMD_cast(</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  detail::fquatSIMD const & q);</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <a class="code" href="a00157.html#gade0eb47c01f79384a6f38017ede17446">mat4</a> <a class="code" href="a00172.html#ga14bb2ddf028c91542763eb6f2bba47ef">mat4_cast</a>(</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  detail::fquatSIMD const & q);</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <span class="keywordtype">float</span> <a class="code" href="a00148.html#ga18d45e3d4c7705e67ccfabd99e521604">length</a>(</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  detail::fquatSIMD const & x);</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  detail::fquatSIMD <a class="code" href="a00148.html#gada9451ec170a36fe53552812b9c03a68">normalize</a>(</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  detail::fquatSIMD const & x);</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="keywordtype">float</span> <a class="code" href="a00148.html#ga7dada304da2ba7dd3376ab4f178c3f6b">dot</a>(</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  detail::fquatSIMD const & q1,</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  detail::fquatSIMD const & q2);</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  detail::fquatSIMD <a class="code" href="a00146.html#gadccbaffe46f369cf1a96b2aef92cbfdd">mix</a>(</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  detail::fquatSIMD const & x,</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  detail::fquatSIMD const & y,</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <span class="keywordtype">float</span> const & a);</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  detail::fquatSIMD <a class="code" href="a00172.html#ga5692804fa4db9e762a1c19b607e54435">lerp</a>(</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  detail::fquatSIMD const & x,</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  detail::fquatSIMD const & y,</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <span class="keywordtype">float</span> const & a);</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> </div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  detail::fquatSIMD <a class="code" href="a00172.html#ga22b438c7252f3fa5b773c9882471652a">slerp</a>(</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  detail::fquatSIMD const & x,</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  detail::fquatSIMD const & y,</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="keywordtype">float</span> const & a);</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> </div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> </div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  detail::fquatSIMD <a class="code" href="a00220.html#gac11bf550f17d1da14423595a27575084">fastMix</a>(</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  detail::fquatSIMD const & x,</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  detail::fquatSIMD const & y,</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <span class="keywordtype">float</span> const & a);</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> </div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  detail::fquatSIMD fastSlerp(</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  detail::fquatSIMD const & x,</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  detail::fquatSIMD const & y,</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  <span class="keywordtype">float</span> const & a);</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> </div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> </div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  detail::fquatSIMD <a class="code" href="a00172.html#gab1ace864fbf189ffa368950001808a3c">conjugate</a>(</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  detail::fquatSIMD const & q);</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> </div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  detail::fquatSIMD <a class="code" href="a00150.html#gaa7e1d5586cd499126cec76e0f11871e3">inverse</a>(</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  detail::fquatSIMD const & q);</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> </div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  detail::fquatSIMD angleAxisSIMD(</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <span class="keywordtype">float</span> const & <a class="code" href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">angle</a>,</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <a class="code" href="a00157.html#gaa8ea2429bb3cb41a715258a447f39897">vec3</a> const & <a class="code" href="a00172.html#ga0b3e87a13b2708154b72259e50789a19">axis</a>);</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> </div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  detail::fquatSIMD angleAxisSIMD(</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="keywordtype">float</span> const & angle,</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <span class="keywordtype">float</span> const & x,</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="keywordtype">float</span> const & y,</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  <span class="keywordtype">float</span> const & z);</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> </div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  <span class="comment">// TODO: Move this to somewhere more appropriate. Used with fastMix() and fastSlerp().</span></div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="comment"></span> __m128 <a class="code" href="a00195.html#ga0aab3257bb3b628d10a1e0483e2c6915">fastSin</a>(__m128 x);</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> </div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> </div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> <span class="preprocessor">#include "simd_quat.inl"</span></div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> </div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> </div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="preprocessor">#if (GLM_COMPILER & GLM_COMPILER_VC)</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> <span class="preprocessor"># pragma warning(pop)</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> </div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> </div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> <span class="preprocessor">#endif//(GLM_ARCH != GLM_ARCH_PURE)</span></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00148_html_ga7dada304da2ba7dd3376ab4f178c3f6b"><div class="ttname"><a href="a00148.html#ga7dada304da2ba7dd3376ab4f178c3f6b">glm::dot</a></div><div class="ttdeci">GLM_FUNC_DECL T dot(vecType< T, P > const &x, vecType< T, P > const &y)</div><div class="ttdoc">Returns the dot product of x and y, i.e., result = x * y. </div></div>
+<div class="ttc" id="a00150_html_gaa7e1d5586cd499126cec76e0f11871e3"><div class="ttname"><a href="a00150.html#gaa7e1d5586cd499126cec76e0f11871e3">glm::inverse</a></div><div class="ttdeci">GLM_FUNC_DECL matType< T, P > inverse(matType< T, P > const &m)</div><div class="ttdoc">Return the inverse of a squared matrix. </div></div>
+<div class="ttc" id="a00157_html_gade0eb47c01f79384a6f38017ede17446"><div class="ttname"><a href="a00157.html#gade0eb47c01f79384a6f38017ede17446">glm::mat4</a></div><div class="ttdeci">mat4x4 mat4</div><div class="ttdoc">4 columns of 4 components matrix of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00416">type_mat.hpp:416</a></div></div>
+<div class="ttc" id="a00146_html_gadccbaffe46f369cf1a96b2aef92cbfdd"><div class="ttname"><a href="a00146.html#gadccbaffe46f369cf1a96b2aef92cbfdd">glm::mix</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > mix(vecType< T, P > const &x, vecType< T, P > const &y, vecType< U, P > const &a)</div><div class="ttdoc">If genTypeU is a floating scalar or vector: Returns x * (1.0 - a) + y * a, i.e., the linear blend of ...</div></div>
+<div class="ttc" id="a00172_html_gab1ace864fbf189ffa368950001808a3c"><div class="ttname"><a href="a00172.html#gab1ace864fbf189ffa368950001808a3c">glm::conjugate</a></div><div class="ttdeci">GLM_FUNC_DECL tquat< T, P > conjugate(tquat< T, P > const &q)</div><div class="ttdoc">Returns the q conjugate. </div></div>
+<div class="ttc" id="a00172_html_ga5692804fa4db9e762a1c19b607e54435"><div class="ttname"><a href="a00172.html#ga5692804fa4db9e762a1c19b607e54435">glm::lerp</a></div><div class="ttdeci">GLM_FUNC_DECL tquat< T, P > lerp(tquat< T, P > const &x, tquat< T, P > const &y, T a)</div><div class="ttdoc">Linear interpolation of two quaternions. </div></div>
+<div class="ttc" id="a00172_html_ga14bb2ddf028c91542763eb6f2bba47ef"><div class="ttname"><a href="a00172.html#ga14bb2ddf028c91542763eb6f2bba47ef">glm::mat4_cast</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, P > mat4_cast(tquat< T, P > const &x)</div><div class="ttdoc">Converts a quaternion to a 4 * 4 matrix. </div></div>
+<div class="ttc" id="a00195_html_ga0aab3257bb3b628d10a1e0483e2c6915"><div class="ttname"><a href="a00195.html#ga0aab3257bb3b628d10a1e0483e2c6915">glm::fastSin</a></div><div class="ttdeci">GLM_FUNC_DECL T fastSin(T angle)</div><div class="ttdoc">Faster than the common sin function but less accurate. </div></div>
+<div class="ttc" id="a00220_html_gac11bf550f17d1da14423595a27575084"><div class="ttname"><a href="a00220.html#gac11bf550f17d1da14423595a27575084">glm::fastMix</a></div><div class="ttdeci">GLM_FUNC_DECL tquat< T, P > fastMix(tquat< T, P > const &x, tquat< T, P > const &y, T const &a)</div><div class="ttdoc">Quaternion normalized linear interpolation. </div></div>
+<div class="ttc" id="a00148_html_gada9451ec170a36fe53552812b9c03a68"><div class="ttname"><a href="a00148.html#gada9451ec170a36fe53552812b9c03a68">glm::normalize</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > normalize(vecType< T, P > const &x)</div><div class="ttdoc">Returns a vector in the same direction as x but with length of 1. </div></div>
+<div class="ttc" id="a00172_html_ga0b3e87a13b2708154b72259e50789a19"><div class="ttname"><a href="a00172.html#ga0b3e87a13b2708154b72259e50789a19">glm::axis</a></div><div class="ttdeci">GLM_FUNC_DECL tvec3< T, P > axis(tquat< T, P > const &x)</div><div class="ttdoc">Returns the q rotation axis. </div></div>
+<div class="ttc" id="a00172_html_gadb92ec1c1b0dd6b024176a73fbef3e64"><div class="ttname"><a href="a00172.html#gadb92ec1c1b0dd6b024176a73fbef3e64">glm::eulerAngles</a></div><div class="ttdeci">GLM_FUNC_DECL tvec3< T, P > eulerAngles(tquat< T, P > const &x)</div><div class="ttdoc">Returns euler angles, pitch as x, yaw as y, roll as z. </div></div>
+<div class="ttc" id="a00172_html_gad4a4448baedb198b2b1e7880d2544dc9"><div class="ttname"><a href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">glm::angle</a></div><div class="ttdeci">GLM_FUNC_DECL T angle(tquat< T, P > const &x)</div><div class="ttdoc">Returns the quaternion rotation angle. </div></div>
+<div class="ttc" id="a00172_html_ga950f8acff3e33bbda77895a3dcb7e5ce"><div class="ttname"><a href="a00172.html#ga950f8acff3e33bbda77895a3dcb7e5ce">glm::quat_cast</a></div><div class="ttdeci">GLM_FUNC_DECL tquat< T, P > quat_cast(tmat3x3< T, P > const &x)</div><div class="ttdoc">Converts a 3 * 3 matrix to a quaternion. </div></div>
+<div class="ttc" id="a00172_html_ga22b438c7252f3fa5b773c9882471652a"><div class="ttname"><a href="a00172.html#ga22b438c7252f3fa5b773c9882471652a">glm::slerp</a></div><div class="ttdeci">GLM_FUNC_DECL tquat< T, P > slerp(tquat< T, P > const &x, tquat< T, P > const &y, T a)</div><div class="ttdoc">Spherical linear interpolation of two quaternions. </div></div>
+<div class="ttc" id="a00148_html_ga18d45e3d4c7705e67ccfabd99e521604"><div class="ttname"><a href="a00148.html#ga18d45e3d4c7705e67ccfabd99e521604">glm::length</a></div><div class="ttdeci">GLM_FUNC_DECL T length(vecType< T, P > const &x)</div><div class="ttdoc">Returns the length of x, i.e., sqrt(x * x). </div></div>
+<div class="ttc" id="a00157_html_gaa8ea2429bb3cb41a715258a447f39897"><div class="ttname"><a href="a00157.html#gaa8ea2429bb3cb41a715258a447f39897">glm::vec3</a></div><div class="ttdeci">highp_vec3 vec3</div><div class="ttdoc">3 components vector of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00461">type_vec.hpp:461</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00101.html b/src/third_party/glm/doc/api/a00101.html
new file mode 100644
index 0000000..f14dac5
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00101.html
@@ -0,0 +1,67 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: simd_vec4.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">simd_vec4.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00101_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00228.html">GLM_GTX_simd_vec4</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00101_source.html">simd_vec4.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00101_source.html b/src/third_party/glm/doc/api/a00101_source.html
new file mode 100644
index 0000000..6b80408
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00101_source.html
@@ -0,0 +1,402 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: simd_vec4.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">simd_vec4.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00101.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include "../glm.hpp"</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#if(GLM_ARCH != GLM_ARCH_PURE)</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#if(GLM_ARCH & GLM_ARCH_SSE2_BIT)</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor"># include "../detail/intrinsic_common.hpp"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"># include "../detail/intrinsic_geometric.hpp"</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor"># include "../detail/intrinsic_integer.hpp"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor"># error "GLM: GLM_GTX_simd_vec4 requires compiler support of SSE2 through intrinsics"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_simd_vec4 extension included")</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_simd_vec4 extension is deprecated and will be removed in GLM 0.9.9. Use *vec4 types instead and use compiler SIMD arguments.")</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="comment">// Warning silencer for nameless struct/union.</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#if (GLM_COMPILER & GLM_COMPILER_VC)</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor"># pragma warning(push)</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor"># pragma warning(disable:4201) // warning C4201: nonstandard extension used : nameless struct/union</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> {</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keyword">enum</span> comp</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  {</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  X = 0,</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  R = 0,</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  S = 0,</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  Y = 1,</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  G = 1,</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  T = 1,</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  Z = 2,</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  B = 2,</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  P = 2,</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  W = 3,</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  A = 3,</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  Q = 3</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  };</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a>{</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="keyword">namespace </span>detail</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> {</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  GLM_ALIGNED_STRUCT(16) fvec4SIMD</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  {</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keyword">typedef</span> <span class="keywordtype">float</span> value_type;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keyword">typedef</span> std::size_t size_type;</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keyword">typedef</span> fvec4SIMD type;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="keyword">typedef</span> tvec4<float, defaultp> pure_type;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keyword">typedef</span> tvec4<bool, highp> bool_type;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="preprocessor">#ifdef GLM_SIMD_ENABLE_XYZW_UNION</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="keyword">union</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  {</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  __m128 Data;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keyword">struct </span>{<span class="keywordtype">float</span> x, y, z, w;};</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  };</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  __m128 Data;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="comment">// Implicit basic constructors</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  fvec4SIMD() GLM_DEFAULT_CTOR;</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  fvec4SIMD(fvec4SIMD const & v) GLM_DEFAULT;</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  fvec4SIMD(__m128 const & Data);</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="comment">// Explicit basic constructors</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  explicit fvec4SIMD(</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  ctor);</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  explicit fvec4SIMD(</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keywordtype">float</span> const & s);</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  explicit fvec4SIMD(</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keywordtype">float</span> const & x,</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="keywordtype">float</span> const & y,</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keywordtype">float</span> const & z,</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <span class="keywordtype">float</span> const & w);</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  explicit fvec4SIMD(</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <a class="code" href="a00157.html#gafbab23070ca47932487d25332adc7d7c">vec4</a> const & v);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  fvec4SIMD(<a class="code" href="a00157.html#ga09d0200e8ff86391d8804b4fefd5f1da">vec2</a> const & v, <span class="keywordtype">float</span> const & s1, <span class="keywordtype">float</span> const & s2);</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  fvec4SIMD(<span class="keywordtype">float</span> const & s1, <a class="code" href="a00157.html#ga09d0200e8ff86391d8804b4fefd5f1da">vec2</a> const & v, <span class="keywordtype">float</span> const & s2);</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  fvec4SIMD(<span class="keywordtype">float</span> const & s1, <span class="keywordtype">float</span> const & s2, <a class="code" href="a00157.html#ga09d0200e8ff86391d8804b4fefd5f1da">vec2</a> const & v);</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  fvec4SIMD(<a class="code" href="a00157.html#gaa8ea2429bb3cb41a715258a447f39897">vec3</a> const & v, <span class="keywordtype">float</span> const & s);</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  fvec4SIMD(<span class="keywordtype">float</span> const & s, <a class="code" href="a00157.html#gaa8ea2429bb3cb41a715258a447f39897">vec3</a> const & v);</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  fvec4SIMD(<a class="code" href="a00157.html#ga09d0200e8ff86391d8804b4fefd5f1da">vec2</a> const & v1, <a class="code" href="a00157.html#ga09d0200e8ff86391d8804b4fefd5f1da">vec2</a> const & v2);</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="comment">//fvec4SIMD(ivec4SIMD const & v);</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="comment">// Unary arithmetic operators</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  fvec4SIMD& operator= (fvec4SIMD const & v) GLM_DEFAULT;</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  fvec4SIMD& operator+=(fvec4SIMD const & v);</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  fvec4SIMD& operator-=(fvec4SIMD const & v);</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  fvec4SIMD& operator*=(fvec4SIMD const & v);</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  fvec4SIMD& operator/=(fvec4SIMD const & v);</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  fvec4SIMD& operator+=(<span class="keywordtype">float</span> const & s);</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  fvec4SIMD& operator-=(<span class="keywordtype">float</span> const & s);</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  fvec4SIMD& operator*=(<span class="keywordtype">float</span> const & s);</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  fvec4SIMD& operator/=(<span class="keywordtype">float</span> const & s);</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  fvec4SIMD& operator++();</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  fvec4SIMD& operator--();</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="comment">// Swizzle operators</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  template <comp X_, comp Y_, comp Z_, comp W_></div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  fvec4SIMD& swizzle();</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  template <comp X_, comp Y_, comp Z_, comp W_></div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  fvec4SIMD swizzle() const;</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  template <comp X_, comp Y_, comp Z_></div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  fvec4SIMD swizzle() const;</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  template <comp X_, comp Y_></div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  fvec4SIMD swizzle() const;</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  template <comp X_></div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  fvec4SIMD swizzle() const;</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  };</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> }<span class="comment">//namespace detail</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  typedef <a class="code" href="a00141.html">glm</a>::detail::fvec4SIMD simdVec4;</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <a class="code" href="a00157.html#gafbab23070ca47932487d25332adc7d7c">vec4</a> vec4_cast(</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  detail::fvec4SIMD const & x);</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  detail::fvec4SIMD <a class="code" href="a00146.html#ga693d77696ff36572a0da79efec965acd">abs</a>(detail::fvec4SIMD const & x);</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  detail::fvec4SIMD <a class="code" href="a00146.html#gac3446b4138e0b8757561c07cd19f084d">sign</a>(detail::fvec4SIMD const & x);</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  detail::fvec4SIMD <a class="code" href="a00146.html#ga568b822b78f045f77c3325e165b44d5d">floor</a>(detail::fvec4SIMD const & x);</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  detail::fvec4SIMD <a class="code" href="a00146.html#ga634cdbf8b37edca03f2248450570fd54">trunc</a>(detail::fvec4SIMD const & x);</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> </div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  detail::fvec4SIMD <a class="code" href="a00146.html#gada0165544c0618d634c8056a88082ce9">round</a>(detail::fvec4SIMD const & x);</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> </div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <span class="comment">//detail::fvec4SIMD roundEven(detail::fvec4SIMD const & x);</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  detail::fvec4SIMD <a class="code" href="a00146.html#ga9189b2bec45ff301923ea8f8dd157fb8">ceil</a>(detail::fvec4SIMD const & x);</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> </div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  detail::fvec4SIMD <a class="code" href="a00146.html#ga8ba89e40e55ae5cdf228548f9b7639c7">fract</a>(detail::fvec4SIMD const & x);</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  detail::fvec4SIMD <a class="code" href="a00146.html#ga12201563ef902e3b07e0d1d7656efdb1">mod</a>(</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  detail::fvec4SIMD const & x,</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  detail::fvec4SIMD const & y);</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> </div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  detail::fvec4SIMD <a class="code" href="a00146.html#ga12201563ef902e3b07e0d1d7656efdb1">mod</a>(</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  detail::fvec4SIMD const & x,</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <span class="keywordtype">float</span> const & y);</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  <span class="comment">//detail::fvec4SIMD modf(</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="comment">// detail::fvec4SIMD const & x,</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <span class="comment">// detail::fvec4SIMD & i);</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> </div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  detail::fvec4SIMD <a class="code" href="a00146.html#ga2c2bde1cec025b7ddff83c74a1113719">min</a>(</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  detail::fvec4SIMD const & x,</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  detail::fvec4SIMD const & y);</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> </div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  detail::fvec4SIMD <a class="code" href="a00146.html#ga2c2bde1cec025b7ddff83c74a1113719">min</a>(</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  detail::fvec4SIMD const & x,</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <span class="keywordtype">float</span> const & y);</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> </div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  detail::fvec4SIMD <a class="code" href="a00146.html#ga98caa7f95a94c86a86ebce893a45326c">max</a>(</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  detail::fvec4SIMD const & x,</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  detail::fvec4SIMD const & y);</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> </div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  detail::fvec4SIMD <a class="code" href="a00146.html#ga98caa7f95a94c86a86ebce893a45326c">max</a>(</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  detail::fvec4SIMD const & x,</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="keywordtype">float</span> const & y);</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> </div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  detail::fvec4SIMD <a class="code" href="a00146.html#ga93bce26c7d80d30a62f5c508f8498a6c">clamp</a>(</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  detail::fvec4SIMD const & x,</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  detail::fvec4SIMD const & minVal,</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  detail::fvec4SIMD const & maxVal);</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> </div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  detail::fvec4SIMD <a class="code" href="a00146.html#ga93bce26c7d80d30a62f5c508f8498a6c">clamp</a>(</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  detail::fvec4SIMD const & x,</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <span class="keywordtype">float</span> const & minVal,</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <span class="keywordtype">float</span> const & maxVal);</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> </div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  detail::fvec4SIMD <a class="code" href="a00146.html#gadccbaffe46f369cf1a96b2aef92cbfdd">mix</a>(</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  detail::fvec4SIMD const & x,</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  detail::fvec4SIMD const & y,</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  detail::fvec4SIMD const & a);</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> </div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  detail::fvec4SIMD <a class="code" href="a00146.html#ga015a1261ff23e12650211aa872863cce">step</a>(</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  detail::fvec4SIMD const & edge,</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  detail::fvec4SIMD const & x);</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> </div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  detail::fvec4SIMD <a class="code" href="a00146.html#ga015a1261ff23e12650211aa872863cce">step</a>(</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <span class="keywordtype">float</span> const & edge,</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  detail::fvec4SIMD const & x);</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> </div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  detail::fvec4SIMD <a class="code" href="a00146.html#ga562edf7eca082cc5b7a0aaf180436daf">smoothstep</a>(</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  detail::fvec4SIMD const & edge0,</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  detail::fvec4SIMD const & edge1,</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  detail::fvec4SIMD const & x);</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> </div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  detail::fvec4SIMD <a class="code" href="a00146.html#ga562edf7eca082cc5b7a0aaf180436daf">smoothstep</a>(</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <span class="keywordtype">float</span> const & edge0,</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  <span class="keywordtype">float</span> const & edge1,</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  detail::fvec4SIMD const & x);</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> </div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  <span class="comment">//bvec4 isnan(detail::fvec4SIMD const & x);</span></div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> </div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  <span class="comment">//bvec4 isinf(detail::fvec4SIMD const & x);</span></div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> </div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  <span class="comment">//detail::ivec4SIMD floatBitsToInt(detail::fvec4SIMD const & value);</span></div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> </div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  <span class="comment">//detail::fvec4SIMD intBitsToFloat(detail::ivec4SIMD const & value);</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> </div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  detail::fvec4SIMD <a class="code" href="a00146.html#gad0f444d4b81cc53c3b6edf5aa25078c2">fma</a>(</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  detail::fvec4SIMD const & a,</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  detail::fvec4SIMD const & b,</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  detail::fvec4SIMD const & c);</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> </div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  <span class="comment">//detail::fvec4SIMD frexp(detail::fvec4SIMD const & x, detail::ivec4SIMD & exp);</span></div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> </div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  <span class="comment">//detail::fvec4SIMD ldexp(detail::fvec4SIMD const & x, detail::ivec4SIMD const & exp);</span></div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> </div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  <span class="keywordtype">float</span> <a class="code" href="a00148.html#ga18d45e3d4c7705e67ccfabd99e521604">length</a>(</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  detail::fvec4SIMD const & x);</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> </div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  <span class="keywordtype">float</span> <a class="code" href="a00194.html#gafe697d6287719538346bbdf8b1367c59">fastLength</a>(</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  detail::fvec4SIMD const & x);</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> </div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  <span class="keywordtype">float</span> niceLength(</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  detail::fvec4SIMD const & x);</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> </div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  detail::fvec4SIMD length4(</div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  detail::fvec4SIMD const & x);</div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> </div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  detail::fvec4SIMD fastLength4(</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  detail::fvec4SIMD const & x);</div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> </div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  detail::fvec4SIMD niceLength4(</div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  detail::fvec4SIMD const & x);</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> </div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  <span class="keywordtype">float</span> <a class="code" href="a00148.html#ga7ca317dde0d7e94d920153554d4a02a8">distance</a>(</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  detail::fvec4SIMD const & p0,</div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  detail::fvec4SIMD const & p1);</div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> </div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  detail::fvec4SIMD distance4(</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  detail::fvec4SIMD const & p0,</div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  detail::fvec4SIMD const & p1);</div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> </div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  <span class="keywordtype">float</span> simdDot(</div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  detail::fvec4SIMD const & x,</div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  detail::fvec4SIMD const & y);</div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> </div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  detail::fvec4SIMD dot4(</div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  detail::fvec4SIMD const & x,</div>
+<div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  detail::fvec4SIMD const & y);</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> </div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  detail::fvec4SIMD <a class="code" href="a00148.html#gafe2cae8cb26fd44be62aee97369d0af8">cross</a>(</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  detail::fvec4SIMD const & x,</div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  detail::fvec4SIMD const & y);</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> </div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  detail::fvec4SIMD <a class="code" href="a00148.html#gada9451ec170a36fe53552812b9c03a68">normalize</a>(</div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  detail::fvec4SIMD const & x);</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> </div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  detail::fvec4SIMD <a class="code" href="a00194.html#ga3b02c1d6e0c754144e2f1e110bf9f16c">fastNormalize</a>(</div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  detail::fvec4SIMD const & x);</div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> </div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  detail::fvec4SIMD simdFaceforward(</div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  detail::fvec4SIMD const & N,</div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  detail::fvec4SIMD const & I,</div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  detail::fvec4SIMD const & Nref);</div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> </div>
+<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  detail::fvec4SIMD <a class="code" href="a00148.html#gab63646fc36b81cf69d3ce123a72f76f2">reflect</a>(</div>
+<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  detail::fvec4SIMD const & I,</div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  detail::fvec4SIMD const & N);</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> </div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  detail::fvec4SIMD <a class="code" href="a00148.html#gab7e7cdf4403931a5f7b74560ad64159b">refract</a>(</div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  detail::fvec4SIMD const & I,</div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  detail::fvec4SIMD const & N,</div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span>  <span class="keywordtype">float</span> const & eta);</div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> </div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  detail::fvec4SIMD <a class="code" href="a00147.html#gae7ac2e44c14d4e8004098d0bfba6e2b8">sqrt</a>(</div>
+<div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  detail::fvec4SIMD const & x);</div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> </div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  detail::fvec4SIMD niceSqrt(</div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  detail::fvec4SIMD const & x);</div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> </div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  detail::fvec4SIMD <a class="code" href="a00194.html#ga6c460e9414a50b2fc455c8f64c86cdc9">fastSqrt</a>(</div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  detail::fvec4SIMD const & x);</div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> </div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  detail::fvec4SIMD <a class="code" href="a00147.html#ga599103d4fe4ef2234761ba8da7268627">inversesqrt</a>(</div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  detail::fvec4SIMD const & x);</div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> </div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  detail::fvec4SIMD fastInversesqrt(</div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>  detail::fvec4SIMD const & x);</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> </div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> </div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> <span class="preprocessor">#include "simd_vec4.inl"</span></div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> </div>
+<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> <span class="preprocessor">#if (GLM_COMPILER & GLM_COMPILER_VC)</span></div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> <span class="preprocessor"># pragma warning(pop)</span></div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> </div>
+<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> <span class="preprocessor">#endif//(GLM_ARCH != GLM_ARCH_PURE)</span></div>
+<div class="ttc" id="a00146_html_ga8ba89e40e55ae5cdf228548f9b7639c7"><div class="ttname"><a href="a00146.html#ga8ba89e40e55ae5cdf228548f9b7639c7">glm::fract</a></div><div class="ttdeci">GLM_FUNC_DECL genType fract(genType x)</div><div class="ttdoc">Return x - floor(x). </div></div>
+<div class="ttc" id="a00146_html_ga9189b2bec45ff301923ea8f8dd157fb8"><div class="ttname"><a href="a00146.html#ga9189b2bec45ff301923ea8f8dd157fb8">glm::ceil</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > ceil(vecType< T, P > const &x)</div><div class="ttdoc">Returns a value equal to the nearest integer that is greater than or equal to x. </div></div>
+<div class="ttc" id="a00194_html_ga3b02c1d6e0c754144e2f1e110bf9f16c"><div class="ttname"><a href="a00194.html#ga3b02c1d6e0c754144e2f1e110bf9f16c">glm::fastNormalize</a></div><div class="ttdeci">GLM_FUNC_DECL genType fastNormalize(genType const &x)</div><div class="ttdoc">Faster than the common normalize function but less accurate. </div></div>
+<div class="ttc" id="a00194_html_ga6c460e9414a50b2fc455c8f64c86cdc9"><div class="ttname"><a href="a00194.html#ga6c460e9414a50b2fc455c8f64c86cdc9">glm::fastSqrt</a></div><div class="ttdeci">GLM_FUNC_DECL genType fastSqrt(genType x)</div><div class="ttdoc">Faster than the common sqrt function but less accurate. </div></div>
+<div class="ttc" id="a00157_html_gafbab23070ca47932487d25332adc7d7c"><div class="ttname"><a href="a00157.html#gafbab23070ca47932487d25332adc7d7c">glm::vec4</a></div><div class="ttdeci">highp_vec4 vec4</div><div class="ttdoc">4 components vector of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00466">type_vec.hpp:466</a></div></div>
+<div class="ttc" id="a00146_html_ga562edf7eca082cc5b7a0aaf180436daf"><div class="ttname"><a href="a00146.html#ga562edf7eca082cc5b7a0aaf180436daf">glm::smoothstep</a></div><div class="ttdeci">GLM_FUNC_DECL genType smoothstep(genType edge0, genType edge1, genType x)</div><div class="ttdoc">Returns 0.0 if x <= edge0 and 1.0 if x >= edge1 and performs smooth Hermite interpolation between 0 a...</div></div>
+<div class="ttc" id="a00146_html_ga98caa7f95a94c86a86ebce893a45326c"><div class="ttname"><a href="a00146.html#ga98caa7f95a94c86a86ebce893a45326c">glm::max</a></div><div class="ttdeci">GLM_FUNC_DECL genType max(genType x, genType y)</div><div class="ttdoc">Returns y if x < y; otherwise, it returns x. </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00146_html_ga12201563ef902e3b07e0d1d7656efdb1"><div class="ttname"><a href="a00146.html#ga12201563ef902e3b07e0d1d7656efdb1">glm::mod</a></div><div class="ttdeci">GLM_FUNC_DECL genType mod(genType x, genType y)</div><div class="ttdoc">Modulus. </div></div>
+<div class="ttc" id="a00146_html_gada0165544c0618d634c8056a88082ce9"><div class="ttname"><a href="a00146.html#gada0165544c0618d634c8056a88082ce9">glm::round</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > round(vecType< T, P > const &x)</div><div class="ttdoc">Returns a value equal to the nearest integer to x. </div></div>
+<div class="ttc" id="a00146_html_gadccbaffe46f369cf1a96b2aef92cbfdd"><div class="ttname"><a href="a00146.html#gadccbaffe46f369cf1a96b2aef92cbfdd">glm::mix</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > mix(vecType< T, P > const &x, vecType< T, P > const &y, vecType< U, P > const &a)</div><div class="ttdoc">If genTypeU is a floating scalar or vector: Returns x * (1.0 - a) + y * a, i.e., the linear blend of ...</div></div>
+<div class="ttc" id="a00146_html_ga634cdbf8b37edca03f2248450570fd54"><div class="ttname"><a href="a00146.html#ga634cdbf8b37edca03f2248450570fd54">glm::trunc</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > trunc(vecType< T, P > const &x)</div><div class="ttdoc">Returns a value equal to the nearest integer to x whose absolute value is not larger than the absolut...</div></div>
+<div class="ttc" id="a00146_html_ga693d77696ff36572a0da79efec965acd"><div class="ttname"><a href="a00146.html#ga693d77696ff36572a0da79efec965acd">glm::abs</a></div><div class="ttdeci">GLM_FUNC_DECL genType abs(genType x)</div><div class="ttdoc">Returns x if x >= 0; otherwise, it returns -x. </div></div>
+<div class="ttc" id="a00148_html_gafe2cae8cb26fd44be62aee97369d0af8"><div class="ttname"><a href="a00148.html#gafe2cae8cb26fd44be62aee97369d0af8">glm::cross</a></div><div class="ttdeci">GLM_FUNC_DECL tvec3< T, P > cross(tvec3< T, P > const &x, tvec3< T, P > const &y)</div><div class="ttdoc">Returns the cross product of x and y. </div></div>
+<div class="ttc" id="a00148_html_gab63646fc36b81cf69d3ce123a72f76f2"><div class="ttname"><a href="a00148.html#gab63646fc36b81cf69d3ce123a72f76f2">glm::reflect</a></div><div class="ttdeci">GLM_FUNC_DECL genType reflect(genType const &I, genType const &N)</div><div class="ttdoc">For the incident vector I and surface orientation N, returns the reflection direction : result = I - ...</div></div>
+<div class="ttc" id="a00147_html_gae7ac2e44c14d4e8004098d0bfba6e2b8"><div class="ttname"><a href="a00147.html#gae7ac2e44c14d4e8004098d0bfba6e2b8">glm::sqrt</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > sqrt(vecType< T, P > const &v)</div><div class="ttdoc">Returns the positive square root of v. </div></div>
+<div class="ttc" id="a00148_html_gada9451ec170a36fe53552812b9c03a68"><div class="ttname"><a href="a00148.html#gada9451ec170a36fe53552812b9c03a68">glm::normalize</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > normalize(vecType< T, P > const &x)</div><div class="ttdoc">Returns a vector in the same direction as x but with length of 1. </div></div>
+<div class="ttc" id="a00146_html_ga015a1261ff23e12650211aa872863cce"><div class="ttname"><a href="a00146.html#ga015a1261ff23e12650211aa872863cce">glm::step</a></div><div class="ttdeci">GLM_FUNC_DECL genType step(genType edge, genType x)</div><div class="ttdoc">Returns 0.0 if x < edge, otherwise it returns 1.0 for each component of a genType. </div></div>
+<div class="ttc" id="a00148_html_ga7ca317dde0d7e94d920153554d4a02a8"><div class="ttname"><a href="a00148.html#ga7ca317dde0d7e94d920153554d4a02a8">glm::distance</a></div><div class="ttdeci">GLM_FUNC_DECL T distance(vecType< T, P > const &p0, vecType< T, P > const &p1)</div><div class="ttdoc">Returns the distance betwwen p0 and p1, i.e., length(p0 - p1). </div></div>
+<div class="ttc" id="a00148_html_ga18d45e3d4c7705e67ccfabd99e521604"><div class="ttname"><a href="a00148.html#ga18d45e3d4c7705e67ccfabd99e521604">glm::length</a></div><div class="ttdeci">GLM_FUNC_DECL T length(vecType< T, P > const &x)</div><div class="ttdoc">Returns the length of x, i.e., sqrt(x * x). </div></div>
+<div class="ttc" id="a00148_html_gab7e7cdf4403931a5f7b74560ad64159b"><div class="ttname"><a href="a00148.html#gab7e7cdf4403931a5f7b74560ad64159b">glm::refract</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > refract(vecType< T, P > const &I, vecType< T, P > const &N, T eta)</div><div class="ttdoc">For the incident vector I and surface normal N, and the ratio of indices of refraction eta...</div></div>
+<div class="ttc" id="a00146_html_ga2c2bde1cec025b7ddff83c74a1113719"><div class="ttname"><a href="a00146.html#ga2c2bde1cec025b7ddff83c74a1113719">glm::min</a></div><div class="ttdeci">GLM_FUNC_DECL genType min(genType x, genType y)</div><div class="ttdoc">Returns y if y < x; otherwise, it returns x. </div></div>
+<div class="ttc" id="a00157_html_gaa8ea2429bb3cb41a715258a447f39897"><div class="ttname"><a href="a00157.html#gaa8ea2429bb3cb41a715258a447f39897">glm::vec3</a></div><div class="ttdeci">highp_vec3 vec3</div><div class="ttdoc">3 components vector of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00461">type_vec.hpp:461</a></div></div>
+<div class="ttc" id="a00146_html_gad0f444d4b81cc53c3b6edf5aa25078c2"><div class="ttname"><a href="a00146.html#gad0f444d4b81cc53c3b6edf5aa25078c2">glm::fma</a></div><div class="ttdeci">GLM_FUNC_DECL genType fma(genType const &a, genType const &b, genType const &c)</div><div class="ttdoc">Computes and returns a * b + c. </div></div>
+<div class="ttc" id="a00157_html_ga09d0200e8ff86391d8804b4fefd5f1da"><div class="ttname"><a href="a00157.html#ga09d0200e8ff86391d8804b4fefd5f1da">glm::vec2</a></div><div class="ttdeci">highp_vec2 vec2</div><div class="ttdoc">2 components vector of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00456">type_vec.hpp:456</a></div></div>
+<div class="ttc" id="a00146_html_ga568b822b78f045f77c3325e165b44d5d"><div class="ttname"><a href="a00146.html#ga568b822b78f045f77c3325e165b44d5d">glm::floor</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > floor(vecType< T, P > const &x)</div><div class="ttdoc">Returns a value equal to the nearest integer that is less then or equal to x. </div></div>
+<div class="ttc" id="a00147_html_ga599103d4fe4ef2234761ba8da7268627"><div class="ttname"><a href="a00147.html#ga599103d4fe4ef2234761ba8da7268627">glm::inversesqrt</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > inversesqrt(vecType< T, P > const &v)</div><div class="ttdoc">Returns the reciprocal of the positive square root of v. </div></div>
+<div class="ttc" id="a00194_html_gafe697d6287719538346bbdf8b1367c59"><div class="ttname"><a href="a00194.html#gafe697d6287719538346bbdf8b1367c59">glm::fastLength</a></div><div class="ttdeci">GLM_FUNC_DECL genType fastLength(genType x)</div><div class="ttdoc">Faster than the common length function but less accurate. </div></div>
+<div class="ttc" id="a00146_html_ga93bce26c7d80d30a62f5c508f8498a6c"><div class="ttname"><a href="a00146.html#ga93bce26c7d80d30a62f5c508f8498a6c">glm::clamp</a></div><div class="ttdeci">GLM_FUNC_DECL genType clamp(genType x, genType minVal, genType maxVal)</div><div class="ttdoc">Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal an...</div></div>
+<div class="ttc" id="a00146_html_gac3446b4138e0b8757561c07cd19f084d"><div class="ttname"><a href="a00146.html#gac3446b4138e0b8757561c07cd19f084d">glm::sign</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< T, P > sign(vecType< T, P > const &x)</div><div class="ttdoc">Returns 1.0 if x > 0, 0.0 if x == 0, or -1.0 if x < 0. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00102.html b/src/third_party/glm/doc/api/a00102.html
new file mode 100644
index 0000000..223d558
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00102.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: spline.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">spline.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00102_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga8119c04f8210fd0d292757565cd6918d"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga8119c04f8210fd0d292757565cd6918d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00229.html#ga8119c04f8210fd0d292757565cd6918d">catmullRom</a> (genType const &v1, genType const &v2, genType const &v3, genType const &v4, typename genType::value_type const &s)</td></tr>
+<tr class="separator:ga8119c04f8210fd0d292757565cd6918d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6b867eb52e2fc933d2e0bf26aabc9a70"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga6b867eb52e2fc933d2e0bf26aabc9a70"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00229.html#ga6b867eb52e2fc933d2e0bf26aabc9a70">cubic</a> (genType const &v1, genType const &v2, genType const &v3, genType const &v4, typename genType::value_type const &s)</td></tr>
+<tr class="separator:ga6b867eb52e2fc933d2e0bf26aabc9a70"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa69e143f6374d32f934a8edeaa50bac9"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gaa69e143f6374d32f934a8edeaa50bac9"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00229.html#gaa69e143f6374d32f934a8edeaa50bac9">hermite</a> (genType const &v1, genType const &t1, genType const &v2, genType const &t2, typename genType::value_type const &s)</td></tr>
+<tr class="separator:gaa69e143f6374d32f934a8edeaa50bac9"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00229.html">GLM_GTX_spline</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00102_source.html">spline.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00102_source.html b/src/third_party/glm/doc/api/a00102_source.html
new file mode 100644
index 0000000..f8f3cb9
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00102_source.html
@@ -0,0 +1,105 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: spline.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">spline.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00102.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include "../glm.hpp"</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "../gtx/optimum_pow.hpp"</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_spline extension included")</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> {</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType> </div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  GLM_FUNC_DECL genType <a class="code" href="a00229.html#ga8119c04f8210fd0d292757565cd6918d">catmullRom</a>(</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  genType <span class="keyword">const</span> & v1, </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  genType <span class="keyword">const</span> & v2, </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  genType <span class="keyword">const</span> & v3, </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  genType <span class="keyword">const</span> & v4, </div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keyword">typename</span> genType::value_type <span class="keyword">const</span> & s);</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  GLM_FUNC_DECL genType <a class="code" href="a00229.html#gaa69e143f6374d32f934a8edeaa50bac9">hermite</a>(</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  genType <span class="keyword">const</span> & v1, </div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  genType <span class="keyword">const</span> & t1, </div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  genType <span class="keyword">const</span> & v2, </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  genType <span class="keyword">const</span> & t2, </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keyword">typename</span> genType::value_type <span class="keyword">const</span> & s);</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType> </div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  GLM_FUNC_DECL genType <a class="code" href="a00229.html#ga6b867eb52e2fc933d2e0bf26aabc9a70">cubic</a>(</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  genType <span class="keyword">const</span> & v1, </div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  genType <span class="keyword">const</span> & v2, </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  genType <span class="keyword">const</span> & v3, </div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  genType <span class="keyword">const</span> & v4, </div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keyword">typename</span> genType::value_type <span class="keyword">const</span> & s);</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="preprocessor">#include "spline.inl"</span></div>
+<div class="ttc" id="a00229_html_gaa69e143f6374d32f934a8edeaa50bac9"><div class="ttname"><a href="a00229.html#gaa69e143f6374d32f934a8edeaa50bac9">glm::hermite</a></div><div class="ttdeci">GLM_FUNC_DECL genType hermite(genType const &v1, genType const &t1, genType const &v2, genType const &t2, typename genType::value_type const &s)</div><div class="ttdoc">Return a point from a hermite curve. </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00229_html_ga8119c04f8210fd0d292757565cd6918d"><div class="ttname"><a href="a00229.html#ga8119c04f8210fd0d292757565cd6918d">glm::catmullRom</a></div><div class="ttdeci">GLM_FUNC_DECL genType catmullRom(genType const &v1, genType const &v2, genType const &v3, genType const &v4, typename genType::value_type const &s)</div><div class="ttdoc">Return a point from a catmull rom curve. </div></div>
+<div class="ttc" id="a00229_html_ga6b867eb52e2fc933d2e0bf26aabc9a70"><div class="ttname"><a href="a00229.html#ga6b867eb52e2fc933d2e0bf26aabc9a70">glm::cubic</a></div><div class="ttdeci">GLM_FUNC_DECL genType cubic(genType const &v1, genType const &v2, genType const &v3, genType const &v4, typename genType::value_type const &s)</div><div class="ttdoc">Return a point from a cubic curve. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00103.html b/src/third_party/glm/doc/api/a00103.html
new file mode 100644
index 0000000..c371382
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00103.html
@@ -0,0 +1,91 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: std_based_type.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#typedef-members">Typedefs</a> </div>
+ <div class="headertitle">
+<div class="title">std_based_type.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00103_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ga47c940f279a6b97ffc301eb4526a445a"><td class="memItemLeft" align="right" valign="top">typedef tvec1< std::size_t, defaultp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00230.html#ga47c940f279a6b97ffc301eb4526a445a">size1</a></td></tr>
+<tr class="separator:ga47c940f279a6b97ffc301eb4526a445a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga77d0b061efa41cb2ed2285d09294314e"><td class="memItemLeft" align="right" valign="top">typedef tvec1< std::size_t, defaultp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00230.html#ga77d0b061efa41cb2ed2285d09294314e">size1_t</a></td></tr>
+<tr class="separator:ga77d0b061efa41cb2ed2285d09294314e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac0ef172641a1555684da0beb735c2a79"><td class="memItemLeft" align="right" valign="top">typedef tvec2< std::size_t, defaultp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00230.html#gac0ef172641a1555684da0beb735c2a79">size2</a></td></tr>
+<tr class="separator:gac0ef172641a1555684da0beb735c2a79"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa7d72bbe318d27da9d30f27095e4c75e"><td class="memItemLeft" align="right" valign="top">typedef tvec2< std::size_t, defaultp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00230.html#gaa7d72bbe318d27da9d30f27095e4c75e">size2_t</a></td></tr>
+<tr class="separator:gaa7d72bbe318d27da9d30f27095e4c75e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga51b5e9650c459973134ffb4236ae88b6"><td class="memItemLeft" align="right" valign="top">typedef tvec3< std::size_t, defaultp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00230.html#ga51b5e9650c459973134ffb4236ae88b6">size3</a></td></tr>
+<tr class="separator:ga51b5e9650c459973134ffb4236ae88b6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad364e6c302642e3bb89d756df5d0c8c6"><td class="memItemLeft" align="right" valign="top">typedef tvec3< std::size_t, defaultp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00230.html#gad364e6c302642e3bb89d756df5d0c8c6">size3_t</a></td></tr>
+<tr class="separator:gad364e6c302642e3bb89d756df5d0c8c6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf07a3f432e328c99d35637225c988121"><td class="memItemLeft" align="right" valign="top">typedef tvec4< std::size_t, defaultp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00230.html#gaf07a3f432e328c99d35637225c988121">size4</a></td></tr>
+<tr class="separator:gaf07a3f432e328c99d35637225c988121"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga06862b7d59094244025d34407b2cb796"><td class="memItemLeft" align="right" valign="top">typedef tvec4< std::size_t, defaultp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00230.html#ga06862b7d59094244025d34407b2cb796">size4_t</a></td></tr>
+<tr class="separator:ga06862b7d59094244025d34407b2cb796"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00230.html">GLM_GTX_std_based_type</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd>
+<dd>
+<a class="el" href="a00192.html" title="Min and max functions for 3 to 4 parameters. ">GLM_GTX_extented_min_max</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00103_source.html">std_based_type.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00103_source.html b/src/third_party/glm/doc/api/a00103_source.html
new file mode 100644
index 0000000..bca72f4
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00103_source.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: std_based_type.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">std_based_type.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00103.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include "../glm.hpp"</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include <cstdlib></span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_std_based_type extension included")</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> {</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"><a class="line" href="a00230.html#ga47c940f279a6b97ffc301eb4526a445a"> 30</a></span>  <span class="keyword">typedef</span> tvec1<std::size_t, defaultp> <a class="code" href="a00230.html#ga47c940f279a6b97ffc301eb4526a445a">size1</a>;</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="a00230.html#gac0ef172641a1555684da0beb735c2a79"> 34</a></span>  <span class="keyword">typedef</span> tvec2<std::size_t, defaultp> <a class="code" href="a00230.html#gac0ef172641a1555684da0beb735c2a79">size2</a>;</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="a00230.html#ga51b5e9650c459973134ffb4236ae88b6"> 38</a></span>  <span class="keyword">typedef</span> tvec3<std::size_t, defaultp> <a class="code" href="a00230.html#ga51b5e9650c459973134ffb4236ae88b6">size3</a>;</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="a00230.html#gaf07a3f432e328c99d35637225c988121"> 42</a></span>  <span class="keyword">typedef</span> tvec4<std::size_t, defaultp> <a class="code" href="a00230.html#gaf07a3f432e328c99d35637225c988121">size4</a>;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno"><a class="line" href="a00230.html#ga77d0b061efa41cb2ed2285d09294314e"> 46</a></span>  <span class="keyword">typedef</span> tvec1<std::size_t, defaultp> <a class="code" href="a00230.html#ga77d0b061efa41cb2ed2285d09294314e">size1_t</a>;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="a00230.html#gaa7d72bbe318d27da9d30f27095e4c75e"> 50</a></span>  <span class="keyword">typedef</span> tvec2<std::size_t, defaultp> <a class="code" href="a00230.html#gaa7d72bbe318d27da9d30f27095e4c75e">size2_t</a>;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="a00230.html#gad364e6c302642e3bb89d756df5d0c8c6"> 54</a></span>  <span class="keyword">typedef</span> tvec3<std::size_t, defaultp> <a class="code" href="a00230.html#gad364e6c302642e3bb89d756df5d0c8c6">size3_t</a>;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="a00230.html#ga06862b7d59094244025d34407b2cb796"> 58</a></span>  <span class="keyword">typedef</span> tvec4<std::size_t, defaultp> <a class="code" href="a00230.html#ga06862b7d59094244025d34407b2cb796">size4_t</a>;</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="preprocessor">#include "std_based_type.inl"</span></div>
+<div class="ttc" id="a00230_html_ga06862b7d59094244025d34407b2cb796"><div class="ttname"><a href="a00230.html#ga06862b7d59094244025d34407b2cb796">glm::size4_t</a></div><div class="ttdeci">tvec4< std::size_t, defaultp > size4_t</div><div class="ttdoc">Vector type based of four std::size_t components. </div><div class="ttdef"><b>Definition:</b> <a href="a00103_source.html#l00058">std_based_type.hpp:58</a></div></div>
+<div class="ttc" id="a00230_html_gac0ef172641a1555684da0beb735c2a79"><div class="ttname"><a href="a00230.html#gac0ef172641a1555684da0beb735c2a79">glm::size2</a></div><div class="ttdeci">tvec2< std::size_t, defaultp > size2</div><div class="ttdoc">Vector type based of two std::size_t components. </div><div class="ttdef"><b>Definition:</b> <a href="a00103_source.html#l00034">std_based_type.hpp:34</a></div></div>
+<div class="ttc" id="a00230_html_ga77d0b061efa41cb2ed2285d09294314e"><div class="ttname"><a href="a00230.html#ga77d0b061efa41cb2ed2285d09294314e">glm::size1_t</a></div><div class="ttdeci">tvec1< std::size_t, defaultp > size1_t</div><div class="ttdoc">Vector type based of one std::size_t component. </div><div class="ttdef"><b>Definition:</b> <a href="a00103_source.html#l00046">std_based_type.hpp:46</a></div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00230_html_ga47c940f279a6b97ffc301eb4526a445a"><div class="ttname"><a href="a00230.html#ga47c940f279a6b97ffc301eb4526a445a">glm::size1</a></div><div class="ttdeci">tvec1< std::size_t, defaultp > size1</div><div class="ttdoc">Vector type based of one std::size_t component. </div><div class="ttdef"><b>Definition:</b> <a href="a00103_source.html#l00030">std_based_type.hpp:30</a></div></div>
+<div class="ttc" id="a00230_html_gaf07a3f432e328c99d35637225c988121"><div class="ttname"><a href="a00230.html#gaf07a3f432e328c99d35637225c988121">glm::size4</a></div><div class="ttdeci">tvec4< std::size_t, defaultp > size4</div><div class="ttdoc">Vector type based of four std::size_t components. </div><div class="ttdef"><b>Definition:</b> <a href="a00103_source.html#l00042">std_based_type.hpp:42</a></div></div>
+<div class="ttc" id="a00230_html_ga51b5e9650c459973134ffb4236ae88b6"><div class="ttname"><a href="a00230.html#ga51b5e9650c459973134ffb4236ae88b6">glm::size3</a></div><div class="ttdeci">tvec3< std::size_t, defaultp > size3</div><div class="ttdoc">Vector type based of three std::size_t components. </div><div class="ttdef"><b>Definition:</b> <a href="a00103_source.html#l00038">std_based_type.hpp:38</a></div></div>
+<div class="ttc" id="a00230_html_gaa7d72bbe318d27da9d30f27095e4c75e"><div class="ttname"><a href="a00230.html#gaa7d72bbe318d27da9d30f27095e4c75e">glm::size2_t</a></div><div class="ttdeci">tvec2< std::size_t, defaultp > size2_t</div><div class="ttdoc">Vector type based of two std::size_t components. </div><div class="ttdef"><b>Definition:</b> <a href="a00103_source.html#l00050">std_based_type.hpp:50</a></div></div>
+<div class="ttc" id="a00230_html_gad364e6c302642e3bb89d756df5d0c8c6"><div class="ttname"><a href="a00230.html#gad364e6c302642e3bb89d756df5d0c8c6">glm::size3_t</a></div><div class="ttdeci">tvec3< std::size_t, defaultp > size3_t</div><div class="ttdoc">Vector type based of three std::size_t components. </div><div class="ttdef"><b>Definition:</b> <a href="a00103_source.html#l00054">std_based_type.hpp:54</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00104.html b/src/third_party/glm/doc/api/a00104.html
new file mode 100644
index 0000000..79f48bb
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00104.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: string_cast.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">string_cast.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00104_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga7b4f9233593bbf1d53762f801ef56fe6"><td class="memTemplParams" colspan="2">template<template< typename, precision > class matType, typename T , precision P> </td></tr>
+<tr class="memitem:ga7b4f9233593bbf1d53762f801ef56fe6"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL std::string </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00231.html#ga7b4f9233593bbf1d53762f801ef56fe6">to_string</a> (matType< T, P > const &x)</td></tr>
+<tr class="separator:ga7b4f9233593bbf1d53762f801ef56fe6"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00231.html">GLM_GTX_string_cast</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd>
+<dd>
+gtc_half_float (dependence) </dd>
+<dd>
+<a class="el" href="a00199.html" title="Add support for integer for core functions. ">GLM_GTX_integer</a> (dependence) </dd>
+<dd>
+<a class="el" href="a00220.html" title="Extented quaternion types and functions. ">GLM_GTX_quaternion</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00104_source.html">string_cast.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00104_source.html b/src/third_party/glm/doc/api/a00104_source.html
new file mode 100644
index 0000000..47effc3
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00104_source.html
@@ -0,0 +1,89 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: string_cast.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">string_cast.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00104.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "../glm.hpp"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "../gtc/type_precision.hpp"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "../gtc/quaternion.hpp"</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "../gtx/dual_quaternion.hpp"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <string></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#if(GLM_COMPILER & GLM_COMPILER_CUDA)</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor"># error "GLM_GTX_string_cast is not supported on CUDA compiler"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_string_cast extension included")</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> {</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keyword">template</span> <<span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>matType, <span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  GLM_FUNC_DECL std::string <a class="code" href="a00231.html#ga7b4f9233593bbf1d53762f801ef56fe6">to_string</a>(matType<T, P> <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor">#include "string_cast.inl"</span></div>
+<div class="ttc" id="a00231_html_ga7b4f9233593bbf1d53762f801ef56fe6"><div class="ttname"><a href="a00231.html#ga7b4f9233593bbf1d53762f801ef56fe6">glm::to_string</a></div><div class="ttdeci">GLM_FUNC_DECL std::string to_string(matType< T, P > const &x)</div><div class="ttdoc">Create a string from a GLM vector or matrix typed variable. </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00105.html b/src/third_party/glm/doc/api/a00105.html
new file mode 100644
index 0000000..797ec54
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00105.html
@@ -0,0 +1,88 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: transform.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">transform.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00105_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga2020c91bf61e050882b3a5c18eada700"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga2020c91bf61e050882b3a5c18eada700"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00232.html#ga2020c91bf61e050882b3a5c18eada700">rotate</a> (T angle, tvec3< T, P > const &v)</td></tr>
+<tr class="separator:ga2020c91bf61e050882b3a5c18eada700"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1972d4a66a2e92637c8aaee598417a71"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga1972d4a66a2e92637c8aaee598417a71"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00232.html#ga1972d4a66a2e92637c8aaee598417a71">scale</a> (tvec3< T, P > const &v)</td></tr>
+<tr class="separator:ga1972d4a66a2e92637c8aaee598417a71"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga838c4505ef7f254ed05117b1ac9691fb"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga838c4505ef7f254ed05117b1ac9691fb"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00232.html#ga838c4505ef7f254ed05117b1ac9691fb">translate</a> (tvec3< T, P > const &v)</td></tr>
+<tr class="separator:ga838c4505ef7f254ed05117b1ac9691fb"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00232.html">GLM_GTX_transform</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd>
+<dd>
+<a class="el" href="a00169.html" title="Defines functions that generate common transformation matrices. ">GLM_GTC_matrix_transform</a> (dependence) </dd>
+<dd>
+<a class="el" href="a00232.html" title="Add transformation matrices. ">GLM_GTX_transform</a> </dd>
+<dd>
+<a class="el" href="a00233.html" title="Add extra transformation matrices. ">GLM_GTX_transform2</a> </dd></dl>
+
+<p>Definition in file <a class="el" href="a00105_source.html">transform.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00105_source.html b/src/third_party/glm/doc/api/a00105_source.html
new file mode 100644
index 0000000..efaf258
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00105_source.html
@@ -0,0 +1,95 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: transform.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">transform.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00105.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include "../glm.hpp"</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "../gtc/matrix_transform.hpp"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_transform extension included")</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> {</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  GLM_FUNC_DECL tmat4x4<T, P> <a class="code" href="a00232.html#ga838c4505ef7f254ed05117b1ac9691fb">translate</a>(</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  tvec3<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  GLM_FUNC_DECL tmat4x4<T, P> <a class="code" href="a00232.html#ga2020c91bf61e050882b3a5c18eada700">rotate</a>(</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  T <a class="code" href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">angle</a>, </div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  tvec3<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  GLM_FUNC_DECL tmat4x4<T, P> <a class="code" href="a00232.html#ga1972d4a66a2e92637c8aaee598417a71">scale</a>(</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  tvec3<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> }<span class="comment">// namespace glm</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="preprocessor">#include "transform.inl"</span></div>
+<div class="ttc" id="a00232_html_ga1972d4a66a2e92637c8aaee598417a71"><div class="ttname"><a href="a00232.html#ga1972d4a66a2e92637c8aaee598417a71">glm::scale</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, P > scale(tvec3< T, P > const &v)</div><div class="ttdoc">Transforms a matrix with a scale 4 * 4 matrix created from a vector of 3 components. </div></div>
+<div class="ttc" id="a00232_html_ga838c4505ef7f254ed05117b1ac9691fb"><div class="ttname"><a href="a00232.html#ga838c4505ef7f254ed05117b1ac9691fb">glm::translate</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, P > translate(tvec3< T, P > const &v)</div><div class="ttdoc">Transforms a matrix with a translation 4 * 4 matrix created from 3 scalars. </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00232_html_ga2020c91bf61e050882b3a5c18eada700"><div class="ttname"><a href="a00232.html#ga2020c91bf61e050882b3a5c18eada700">glm::rotate</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, P > rotate(T angle, tvec3< T, P > const &v)</div><div class="ttdoc">Builds a rotation 4 * 4 matrix created from an axis of 3 scalars and an angle expressed in radians...</div></div>
+<div class="ttc" id="a00172_html_gad4a4448baedb198b2b1e7880d2544dc9"><div class="ttname"><a href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">glm::angle</a></div><div class="ttdeci">GLM_FUNC_DECL T angle(tquat< T, P > const &x)</div><div class="ttdoc">Returns the quaternion rotation angle. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00106.html b/src/third_party/glm/doc/api/a00106.html
new file mode 100644
index 0000000..50974e8
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00106.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: transform2.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">transform2.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00106_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gacfce1085167a8bfb71a55ea14d22752f"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gacfce1085167a8bfb71a55ea14d22752f"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat3x3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#gacfce1085167a8bfb71a55ea14d22752f">proj2D</a> (const tmat3x3< T, P > &m, const tvec3< T, P > &normal)</td></tr>
+<tr class="separator:gacfce1085167a8bfb71a55ea14d22752f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafab0418f2503ec2133cb2de828cc482a"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gafab0418f2503ec2133cb2de828cc482a"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#gafab0418f2503ec2133cb2de828cc482a">proj3D</a> (const tmat4x4< T, P > &m, const tvec3< T, P > &normal)</td></tr>
+<tr class="separator:gafab0418f2503ec2133cb2de828cc482a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2874abd228989556d610a0bff993667a"><td class="memTemplParams" colspan="2">template<typename valType , precision P> </td></tr>
+<tr class="memitem:ga2874abd228989556d610a0bff993667a"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< valType, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#ga2874abd228989556d610a0bff993667a">scaleBias</a> (valType scale, valType bias)</td></tr>
+<tr class="separator:ga2874abd228989556d610a0bff993667a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac1a1139e2980021422d1fc1c42dc74f2"><td class="memTemplParams" colspan="2">template<typename valType , precision P> </td></tr>
+<tr class="memitem:gac1a1139e2980021422d1fc1c42dc74f2"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< valType, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#gac1a1139e2980021422d1fc1c42dc74f2">scaleBias</a> (tmat4x4< valType, P > const &m, valType scale, valType bias)</td></tr>
+<tr class="separator:gac1a1139e2980021422d1fc1c42dc74f2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga10f6c62d8f827c4cacedb71fd05e4ba2"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga10f6c62d8f827c4cacedb71fd05e4ba2"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat3x3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#ga10f6c62d8f827c4cacedb71fd05e4ba2">shearX2D</a> (tmat3x3< T, P > const &m, T y)</td></tr>
+<tr class="separator:ga10f6c62d8f827c4cacedb71fd05e4ba2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae06ce274e4754f925d5d68440e89452e"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gae06ce274e4754f925d5d68440e89452e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#gae06ce274e4754f925d5d68440e89452e">shearX3D</a> (const tmat4x4< T, P > &m, T y, T z)</td></tr>
+<tr class="separator:gae06ce274e4754f925d5d68440e89452e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga21ade82859e09a5cdaf4a01fbf8dc61b"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga21ade82859e09a5cdaf4a01fbf8dc61b"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat3x3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#ga21ade82859e09a5cdaf4a01fbf8dc61b">shearY2D</a> (tmat3x3< T, P > const &m, T x)</td></tr>
+<tr class="separator:ga21ade82859e09a5cdaf4a01fbf8dc61b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga31253ea18fdcdfde08c134c8b67688f7"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga31253ea18fdcdfde08c134c8b67688f7"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#ga31253ea18fdcdfde08c134c8b67688f7">shearY3D</a> (const tmat4x4< T, P > &m, T x, T z)</td></tr>
+<tr class="separator:ga31253ea18fdcdfde08c134c8b67688f7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5558ac64a7144685bf2eb4483a0e2f51"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga5558ac64a7144685bf2eb4483a0e2f51"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#ga5558ac64a7144685bf2eb4483a0e2f51">shearZ3D</a> (const tmat4x4< T, P > &m, T x, T y)</td></tr>
+<tr class="separator:ga5558ac64a7144685bf2eb4483a0e2f51"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00233.html">GLM_GTX_transform2</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd>
+<dd>
+<a class="el" href="a00232.html" title="Add transformation matrices. ">GLM_GTX_transform</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00106_source.html">transform2.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00106_source.html b/src/third_party/glm/doc/api/a00106_source.html
new file mode 100644
index 0000000..7365541
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00106_source.html
@@ -0,0 +1,144 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: transform2.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">transform2.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00106.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "../glm.hpp"</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "../gtx/transform.hpp"</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_transform2 extension included")</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> {</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  GLM_FUNC_DECL tmat3x3<T, P> <a class="code" href="a00233.html#ga10f6c62d8f827c4cacedb71fd05e4ba2">shearX2D</a>(</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  tmat3x3<T, P> <span class="keyword">const</span> & m, </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  T y);</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  GLM_FUNC_DECL tmat3x3<T, P> <a class="code" href="a00233.html#ga21ade82859e09a5cdaf4a01fbf8dc61b">shearY2D</a>(</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  tmat3x3<T, P> <span class="keyword">const</span> & m, </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  T x);</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  GLM_FUNC_DECL tmat4x4<T, P> <a class="code" href="a00233.html#gae06ce274e4754f925d5d68440e89452e">shearX3D</a>(</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keyword">const</span> tmat4x4<T, P> & m,</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  T y, </div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  T z);</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  GLM_FUNC_DECL tmat4x4<T, P> <a class="code" href="a00233.html#ga31253ea18fdcdfde08c134c8b67688f7">shearY3D</a>(</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keyword">const</span> tmat4x4<T, P> & m, </div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  T x, </div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  T z);</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> </div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  GLM_FUNC_DECL tmat4x4<T, P> <a class="code" href="a00233.html#ga5558ac64a7144685bf2eb4483a0e2f51">shearZ3D</a>(</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keyword">const</span> tmat4x4<T, P> & m, </div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  T x, </div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  T y);</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="comment">//template <typename T> GLM_FUNC_QUALIFIER tmat4x4<T, P> shear(const tmat4x4<T, P> & m, shearPlane, planePoint, angle)</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="comment">// Identity + tan(angle) * cross(Normal, OnPlaneVector) 0</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="comment">// - dot(PointOnPlane, normal) * OnPlaneVector 1</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="comment">// Reflect functions seem to don't work</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="comment">//template <typename T> tmat3x3<T, P> reflect2D(const tmat3x3<T, P> & m, const tvec3<T, P>& normal){return reflect2DGTX(m, normal);} //!< \brief Build a reflection matrix (from GLM_GTX_transform2 extension)</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="comment">//template <typename T> tmat4x4<T, P> reflect3D(const tmat4x4<T, P> & m, const tvec3<T, P>& normal){return reflect3DGTX(m, normal);} //!< \brief Build a reflection matrix (from GLM_GTX_transform2 extension)</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  </div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> </div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  GLM_FUNC_DECL tmat3x3<T, P> <a class="code" href="a00233.html#gacfce1085167a8bfb71a55ea14d22752f">proj2D</a>(</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keyword">const</span> tmat3x3<T, P> & m, </div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keyword">const</span> tvec3<T, P>& normal);</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> </div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  GLM_FUNC_DECL tmat4x4<T, P> <a class="code" href="a00233.html#gafab0418f2503ec2133cb2de828cc482a">proj3D</a>(</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="keyword">const</span> tmat4x4<T, P> & m, </div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="keyword">const</span> tvec3<T, P>& normal);</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> valType, precision P> </div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  GLM_FUNC_DECL tmat4x4<valType, P> <a class="code" href="a00233.html#gac1a1139e2980021422d1fc1c42dc74f2">scaleBias</a>(</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  valType <a class="code" href="a00169.html#ga8f062fcc07e2445500793f2803afebb0">scale</a>, </div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  valType bias);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> valType, precision P> </div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  GLM_FUNC_DECL tmat4x4<valType, P> <a class="code" href="a00233.html#gac1a1139e2980021422d1fc1c42dc74f2">scaleBias</a>(</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  tmat4x4<valType, P> <span class="keyword">const</span> & m, </div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  valType <a class="code" href="a00169.html#ga8f062fcc07e2445500793f2803afebb0">scale</a>, </div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  valType bias);</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> }<span class="comment">// namespace glm</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="preprocessor">#include "transform2.inl"</span></div>
+<div class="ttc" id="a00233_html_gac1a1139e2980021422d1fc1c42dc74f2"><div class="ttname"><a href="a00233.html#gac1a1139e2980021422d1fc1c42dc74f2">glm::scaleBias</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< valType, P > scaleBias(tmat4x4< valType, P > const &m, valType scale, valType bias)</div><div class="ttdoc">Build a scale bias matrix. </div></div>
+<div class="ttc" id="a00233_html_gacfce1085167a8bfb71a55ea14d22752f"><div class="ttname"><a href="a00233.html#gacfce1085167a8bfb71a55ea14d22752f">glm::proj2D</a></div><div class="ttdeci">GLM_FUNC_DECL tmat3x3< T, P > proj2D(const tmat3x3< T, P > &m, const tvec3< T, P > &normal)</div><div class="ttdoc">Build planar projection matrix along normal axis. </div></div>
+<div class="ttc" id="a00233_html_gafab0418f2503ec2133cb2de828cc482a"><div class="ttname"><a href="a00233.html#gafab0418f2503ec2133cb2de828cc482a">glm::proj3D</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, P > proj3D(const tmat4x4< T, P > &m, const tvec3< T, P > &normal)</div><div class="ttdoc">Build planar projection matrix along normal axis. </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00233_html_ga21ade82859e09a5cdaf4a01fbf8dc61b"><div class="ttname"><a href="a00233.html#ga21ade82859e09a5cdaf4a01fbf8dc61b">glm::shearY2D</a></div><div class="ttdeci">GLM_FUNC_DECL tmat3x3< T, P > shearY2D(tmat3x3< T, P > const &m, T x)</div><div class="ttdoc">Transforms a matrix with a shearing on Y axis. </div></div>
+<div class="ttc" id="a00233_html_ga31253ea18fdcdfde08c134c8b67688f7"><div class="ttname"><a href="a00233.html#ga31253ea18fdcdfde08c134c8b67688f7">glm::shearY3D</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, P > shearY3D(const tmat4x4< T, P > &m, T x, T z)</div><div class="ttdoc">Transforms a matrix with a shearing on Y axis. </div></div>
+<div class="ttc" id="a00233_html_ga10f6c62d8f827c4cacedb71fd05e4ba2"><div class="ttname"><a href="a00233.html#ga10f6c62d8f827c4cacedb71fd05e4ba2">glm::shearX2D</a></div><div class="ttdeci">GLM_FUNC_DECL tmat3x3< T, P > shearX2D(tmat3x3< T, P > const &m, T y)</div><div class="ttdoc">Transforms a matrix with a shearing on X axis. </div></div>
+<div class="ttc" id="a00233_html_gae06ce274e4754f925d5d68440e89452e"><div class="ttname"><a href="a00233.html#gae06ce274e4754f925d5d68440e89452e">glm::shearX3D</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, P > shearX3D(const tmat4x4< T, P > &m, T y, T z)</div><div class="ttdoc">Transforms a matrix with a shearing on X axis From GLM_GTX_transform2 extension. </div></div>
+<div class="ttc" id="a00169_html_ga8f062fcc07e2445500793f2803afebb0"><div class="ttname"><a href="a00169.html#ga8f062fcc07e2445500793f2803afebb0">glm::scale</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, P > scale(tmat4x4< T, P > const &m, tvec3< T, P > const &v)</div><div class="ttdoc">Builds a scale 4 * 4 matrix created from 3 scalars. </div></div>
+<div class="ttc" id="a00233_html_ga5558ac64a7144685bf2eb4483a0e2f51"><div class="ttname"><a href="a00233.html#ga5558ac64a7144685bf2eb4483a0e2f51">glm::shearZ3D</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, P > shearZ3D(const tmat4x4< T, P > &m, T x, T y)</div><div class="ttdoc">Transforms a matrix with a shearing on Z axis. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00107.html b/src/third_party/glm/doc/api/a00107.html
new file mode 100644
index 0000000..3850469
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00107.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: trigonometric.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">trigonometric.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00107_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+
+<p>Definition in file <a class="el" href="a00107_source.html">trigonometric.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00107_source.html b/src/third_party/glm/doc/api/a00107_source.html
new file mode 100644
index 0000000..4176ff0
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00107_source.html
@@ -0,0 +1,65 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: trigonometric.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">trigonometric.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00107.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include "<a class="code" href="a00035.html">detail/func_trigonometric.hpp</a>"</span></div>
+<div class="ttc" id="a00035_html"><div class="ttname"><a href="a00035.html">func_trigonometric.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00108.html b/src/third_party/glm/doc/api/a00108.html
new file mode 100644
index 0000000..cea3e32
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00108.html
@@ -0,0 +1,241 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: type_aligned.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_9440d7c11b99dcd7e5d369c7cf9802fe.html">gtc</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#typedef-members">Typedefs</a> </div>
+ <div class="headertitle">
+<div class="title">gtc/type_aligned.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00108_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ga780a35f764020f553a9601a3fcdcd059"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga780a35f764020f553a9601a3fcdcd059"></a>
+typedef aligned_highp_bvec1 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga780a35f764020f553a9601a3fcdcd059">aligned_bvec1</a></td></tr>
+<tr class="separator:ga780a35f764020f553a9601a3fcdcd059"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae766b317c5afec852bfb3d74a3c54bc8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae766b317c5afec852bfb3d74a3c54bc8"></a>
+typedef aligned_highp_bvec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#gae766b317c5afec852bfb3d74a3c54bc8">aligned_bvec2</a></td></tr>
+<tr class="separator:gae766b317c5afec852bfb3d74a3c54bc8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae1964ba70d15915e5b710926decbb3cb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae1964ba70d15915e5b710926decbb3cb"></a>
+typedef aligned_highp_bvec3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#gae1964ba70d15915e5b710926decbb3cb">aligned_bvec3</a></td></tr>
+<tr class="separator:gae1964ba70d15915e5b710926decbb3cb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae164a1f7879f828bc35e50b79d786b05"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae164a1f7879f828bc35e50b79d786b05"></a>
+typedef aligned_highp_bvec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#gae164a1f7879f828bc35e50b79d786b05">aligned_bvec4</a></td></tr>
+<tr class="separator:gae164a1f7879f828bc35e50b79d786b05"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4974f46ae5a19415d91316960a53617a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga4974f46ae5a19415d91316960a53617a"></a>
+typedef aligned_highp_dvec1 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga4974f46ae5a19415d91316960a53617a">aligned_dvec1</a></td></tr>
+<tr class="separator:ga4974f46ae5a19415d91316960a53617a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga18d859f87122b2b3b2992ffe86dbebc0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga18d859f87122b2b3b2992ffe86dbebc0"></a>
+typedef aligned_highp_dvec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga18d859f87122b2b3b2992ffe86dbebc0">aligned_dvec2</a></td></tr>
+<tr class="separator:ga18d859f87122b2b3b2992ffe86dbebc0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa37869eea77d28419b2fb0ff70b69bf0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaa37869eea77d28419b2fb0ff70b69bf0"></a>
+typedef aligned_highp_dvec3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#gaa37869eea77d28419b2fb0ff70b69bf0">aligned_dvec3</a></td></tr>
+<tr class="separator:gaa37869eea77d28419b2fb0ff70b69bf0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8a9f0a4795ccc442fa9901845026f9f5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga8a9f0a4795ccc442fa9901845026f9f5"></a>
+typedef aligned_highp_dvec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga8a9f0a4795ccc442fa9901845026f9f5">aligned_dvec4</a></td></tr>
+<tr class="separator:ga8a9f0a4795ccc442fa9901845026f9f5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac5ffd9396890b64e707ba47c76435dfe"><td class="memItemLeft" align="right" valign="top">typedef tvec2< bool, aligned_highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#gac5ffd9396890b64e707ba47c76435dfe">aligned_highp_bvec2</a></td></tr>
+<tr class="separator:gac5ffd9396890b64e707ba47c76435dfe"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3adba191018d2de1dc2834a2ff5597d7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3adba191018d2de1dc2834a2ff5597d7"></a>
+typedef tvec3< bool, aligned_highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga3adba191018d2de1dc2834a2ff5597d7">aligned_highp_bvec3</a></td></tr>
+<tr class="separator:ga3adba191018d2de1dc2834a2ff5597d7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga903a73cf8ae1f4bc24583b81adf024dc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga903a73cf8ae1f4bc24583b81adf024dc"></a>
+typedef tvec4< bool, aligned_highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga903a73cf8ae1f4bc24583b81adf024dc">aligned_highp_bvec4</a></td></tr>
+<tr class="separator:ga903a73cf8ae1f4bc24583b81adf024dc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga186b90f0ba86724e080d237f3f5f9417"><td class="memItemLeft" align="right" valign="top">typedef tvec2< double, aligned_highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga186b90f0ba86724e080d237f3f5f9417">aligned_highp_dvec2</a></td></tr>
+<tr class="separator:ga186b90f0ba86724e080d237f3f5f9417"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga54f6765716867706643bde03211d600f"><td class="memItemLeft" align="right" valign="top">typedef tvec3< double, aligned_highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga54f6765716867706643bde03211d600f">aligned_highp_dvec3</a></td></tr>
+<tr class="separator:ga54f6765716867706643bde03211d600f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8e5a90ed034e9e7414ff71e66a79139e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga8e5a90ed034e9e7414ff71e66a79139e"></a>
+typedef tvec4< double, aligned_highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga8e5a90ed034e9e7414ff71e66a79139e">aligned_highp_dvec4</a></td></tr>
+<tr class="separator:ga8e5a90ed034e9e7414ff71e66a79139e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab6ddd9d1421eb610ddeb32705fed7026"><td class="memItemLeft" align="right" valign="top">typedef tvec2< int, aligned_highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#gab6ddd9d1421eb610ddeb32705fed7026">aligned_highp_ivec2</a></td></tr>
+<tr class="separator:gab6ddd9d1421eb610ddeb32705fed7026"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae234a3a1c6288fa5e2d4c78c5e39002e"><td class="memItemLeft" align="right" valign="top">typedef tvec3< int, aligned_highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#gae234a3a1c6288fa5e2d4c78c5e39002e">aligned_highp_ivec3</a></td></tr>
+<tr class="separator:gae234a3a1c6288fa5e2d4c78c5e39002e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1e3286a27b19f25801fb435b6d1225fb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga1e3286a27b19f25801fb435b6d1225fb"></a>
+typedef tvec4< int, aligned_highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga1e3286a27b19f25801fb435b6d1225fb">aligned_highp_ivec4</a></td></tr>
+<tr class="separator:ga1e3286a27b19f25801fb435b6d1225fb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7366a38dc888164e623fc10663e97670"><td class="memItemLeft" align="right" valign="top">typedef tvec2< uint, aligned_highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga7366a38dc888164e623fc10663e97670">aligned_highp_uvec2</a></td></tr>
+<tr class="separator:ga7366a38dc888164e623fc10663e97670"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga967485a7e963365642ea17de62fe2a3f"><td class="memItemLeft" align="right" valign="top">typedef tvec3< uint, aligned_highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga967485a7e963365642ea17de62fe2a3f">aligned_highp_uvec3</a></td></tr>
+<tr class="separator:ga967485a7e963365642ea17de62fe2a3f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac56a4ce85b6233998139a7c1ac337440"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac56a4ce85b6233998139a7c1ac337440"></a>
+typedef tvec4< uint, aligned_highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#gac56a4ce85b6233998139a7c1ac337440">aligned_highp_uvec4</a></td></tr>
+<tr class="separator:gac56a4ce85b6233998139a7c1ac337440"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaea854184b9d574fc5e75b5709a4974e8"><td class="memItemLeft" align="right" valign="top">typedef tvec2< float, aligned_highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#gaea854184b9d574fc5e75b5709a4974e8">aligned_highp_vec2</a></td></tr>
+<tr class="separator:gaea854184b9d574fc5e75b5709a4974e8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga55fb20d4e73a65c834b5861fc6cf4c36"><td class="memItemLeft" align="right" valign="top">typedef tvec3< float, aligned_highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga55fb20d4e73a65c834b5861fc6cf4c36">aligned_highp_vec3</a></td></tr>
+<tr class="separator:ga55fb20d4e73a65c834b5861fc6cf4c36"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae2938d64c6a46f721681607c2ab3f884"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae2938d64c6a46f721681607c2ab3f884"></a>
+typedef tvec4< float, aligned_highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#gae2938d64c6a46f721681607c2ab3f884">aligned_highp_vec4</a></td></tr>
+<tr class="separator:gae2938d64c6a46f721681607c2ab3f884"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga76298aed82a439063c3d55980c84aa0b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga76298aed82a439063c3d55980c84aa0b"></a>
+typedef aligned_highp_ivec1 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga76298aed82a439063c3d55980c84aa0b">aligned_ivec1</a></td></tr>
+<tr class="separator:ga76298aed82a439063c3d55980c84aa0b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae4f38fd2c86cee6940986197777b3ca4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae4f38fd2c86cee6940986197777b3ca4"></a>
+typedef aligned_highp_ivec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#gae4f38fd2c86cee6940986197777b3ca4">aligned_ivec2</a></td></tr>
+<tr class="separator:gae4f38fd2c86cee6940986197777b3ca4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga32794322d294e5ace7fed4a61896f270"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga32794322d294e5ace7fed4a61896f270"></a>
+typedef aligned_highp_ivec3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga32794322d294e5ace7fed4a61896f270">aligned_ivec3</a></td></tr>
+<tr class="separator:ga32794322d294e5ace7fed4a61896f270"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7f79eae5927c9033d84617e49f6f34e4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7f79eae5927c9033d84617e49f6f34e4"></a>
+typedef aligned_highp_ivec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga7f79eae5927c9033d84617e49f6f34e4">aligned_ivec4</a></td></tr>
+<tr class="separator:ga7f79eae5927c9033d84617e49f6f34e4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga524c702b82ae7ccaca896d374808c6d7"><td class="memItemLeft" align="right" valign="top">typedef tvec2< bool, aligned_lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga524c702b82ae7ccaca896d374808c6d7">aligned_lowp_bvec2</a></td></tr>
+<tr class="separator:ga524c702b82ae7ccaca896d374808c6d7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga21fb6238997b4a21848411b16bc34e93"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga21fb6238997b4a21848411b16bc34e93"></a>
+typedef tvec3< bool, aligned_lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga21fb6238997b4a21848411b16bc34e93">aligned_lowp_bvec3</a></td></tr>
+<tr class="separator:ga21fb6238997b4a21848411b16bc34e93"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0b5e3c64f8dbadfc42a2aca5f2da9692"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga0b5e3c64f8dbadfc42a2aca5f2da9692"></a>
+typedef tvec4< bool, aligned_lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga0b5e3c64f8dbadfc42a2aca5f2da9692">aligned_lowp_bvec4</a></td></tr>
+<tr class="separator:ga0b5e3c64f8dbadfc42a2aca5f2da9692"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab70c189b4691715b3f7f0abb35c65b2f"><td class="memItemLeft" align="right" valign="top">typedef tvec2< double, aligned_lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#gab70c189b4691715b3f7f0abb35c65b2f">aligned_lowp_dvec2</a></td></tr>
+<tr class="separator:gab70c189b4691715b3f7f0abb35c65b2f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gabeec3d5ec99c196f4c0eb03b58d486ee"><td class="memItemLeft" align="right" valign="top">typedef tvec3< double, aligned_lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#gabeec3d5ec99c196f4c0eb03b58d486ee">aligned_lowp_dvec3</a></td></tr>
+<tr class="separator:gabeec3d5ec99c196f4c0eb03b58d486ee"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaab365ee7cfd19bab449daa8f7eb0ca71"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaab365ee7cfd19bab449daa8f7eb0ca71"></a>
+typedef tvec4< double, aligned_lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#gaab365ee7cfd19bab449daa8f7eb0ca71">aligned_lowp_dvec4</a></td></tr>
+<tr class="separator:gaab365ee7cfd19bab449daa8f7eb0ca71"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad69bf7c406a3cec994307473cb3da032"><td class="memItemLeft" align="right" valign="top">typedef tvec2< int, aligned_lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#gad69bf7c406a3cec994307473cb3da032">aligned_lowp_ivec2</a></td></tr>
+<tr class="separator:gad69bf7c406a3cec994307473cb3da032"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa8615b4ce4fdf176c631b34d2d31d81b"><td class="memItemLeft" align="right" valign="top">typedef tvec3< int, aligned_lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#gaa8615b4ce4fdf176c631b34d2d31d81b">aligned_lowp_ivec3</a></td></tr>
+<tr class="separator:gaa8615b4ce4fdf176c631b34d2d31d81b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad744848a2e4ddd2f041e6ec8d13600ae"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad744848a2e4ddd2f041e6ec8d13600ae"></a>
+typedef tvec4< int, aligned_lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#gad744848a2e4ddd2f041e6ec8d13600ae">aligned_lowp_ivec4</a></td></tr>
+<tr class="separator:gad744848a2e4ddd2f041e6ec8d13600ae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga15355ffc7ec7931b81ba76736b65e51a"><td class="memItemLeft" align="right" valign="top">typedef tvec2< uint, aligned_lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga15355ffc7ec7931b81ba76736b65e51a">aligned_lowp_uvec2</a></td></tr>
+<tr class="separator:ga15355ffc7ec7931b81ba76736b65e51a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga48c85299d98e8248f547a2c07ea609cf"><td class="memItemLeft" align="right" valign="top">typedef tvec3< uint, aligned_lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga48c85299d98e8248f547a2c07ea609cf">aligned_lowp_uvec3</a></td></tr>
+<tr class="separator:ga48c85299d98e8248f547a2c07ea609cf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga40b0e05306f666f835ac97c963302ecb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga40b0e05306f666f835ac97c963302ecb"></a>
+typedef tvec4< uint, aligned_lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga40b0e05306f666f835ac97c963302ecb">aligned_lowp_uvec4</a></td></tr>
+<tr class="separator:ga40b0e05306f666f835ac97c963302ecb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3cfc38b4ea9b9bd1e9f02dcc14eab367"><td class="memItemLeft" align="right" valign="top">typedef tvec2< float, aligned_lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga3cfc38b4ea9b9bd1e9f02dcc14eab367">aligned_lowp_vec2</a></td></tr>
+<tr class="separator:ga3cfc38b4ea9b9bd1e9f02dcc14eab367"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae003f8f3071a8bc734a70c6d4978f968"><td class="memItemLeft" align="right" valign="top">typedef tvec3< float, aligned_lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#gae003f8f3071a8bc734a70c6d4978f968">aligned_lowp_vec3</a></td></tr>
+<tr class="separator:gae003f8f3071a8bc734a70c6d4978f968"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga689f103781a795e919fddfa47d89170d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga689f103781a795e919fddfa47d89170d"></a>
+typedef tvec4< float, aligned_lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga689f103781a795e919fddfa47d89170d">aligned_lowp_vec4</a></td></tr>
+<tr class="separator:ga689f103781a795e919fddfa47d89170d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga77d37d7c80c7faa2eecb3eba7677750e"><td class="memItemLeft" align="right" valign="top">typedef tvec2< bool, aligned_mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga77d37d7c80c7faa2eecb3eba7677750e">aligned_mediump_bvec2</a></td></tr>
+<tr class="separator:ga77d37d7c80c7faa2eecb3eba7677750e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4f78cd6d9c5827771e35921b4a92855a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga4f78cd6d9c5827771e35921b4a92855a"></a>
+typedef tvec3< bool, aligned_mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga4f78cd6d9c5827771e35921b4a92855a">aligned_mediump_bvec3</a></td></tr>
+<tr class="separator:ga4f78cd6d9c5827771e35921b4a92855a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2cb80e2d4d351abeadac7b1676a91fd9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2cb80e2d4d351abeadac7b1676a91fd9"></a>
+typedef tvec4< bool, aligned_mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga2cb80e2d4d351abeadac7b1676a91fd9">aligned_mediump_bvec4</a></td></tr>
+<tr class="separator:ga2cb80e2d4d351abeadac7b1676a91fd9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaba56f2b76d320379cdf7c37e0d4b03bd"><td class="memItemLeft" align="right" valign="top">typedef tvec2< double, aligned_mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#gaba56f2b76d320379cdf7c37e0d4b03bd">aligned_mediump_dvec2</a></td></tr>
+<tr class="separator:gaba56f2b76d320379cdf7c37e0d4b03bd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga22efc7f84ab79eef640e00fc59d07478"><td class="memItemLeft" align="right" valign="top">typedef tvec3< double, aligned_mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga22efc7f84ab79eef640e00fc59d07478">aligned_mediump_dvec3</a></td></tr>
+<tr class="separator:ga22efc7f84ab79eef640e00fc59d07478"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad6f422f8871685ee467a575238e4ece4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad6f422f8871685ee467a575238e4ece4"></a>
+typedef tvec4< double, aligned_mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#gad6f422f8871685ee467a575238e4ece4">aligned_mediump_dvec4</a></td></tr>
+<tr class="separator:gad6f422f8871685ee467a575238e4ece4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga389d12dcc8d57a444944a72646d17efa"><td class="memItemLeft" align="right" valign="top">typedef tvec2< int, aligned_mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga389d12dcc8d57a444944a72646d17efa">aligned_mediump_ivec2</a></td></tr>
+<tr class="separator:ga389d12dcc8d57a444944a72646d17efa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5b16f7e81555819bf0f80f4db4bc0b26"><td class="memItemLeft" align="right" valign="top">typedef tvec3< int, aligned_mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga5b16f7e81555819bf0f80f4db4bc0b26">aligned_mediump_ivec3</a></td></tr>
+<tr class="separator:ga5b16f7e81555819bf0f80f4db4bc0b26"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae640082d0ffdb52fb2d658916c5815db"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae640082d0ffdb52fb2d658916c5815db"></a>
+typedef tvec4< int, aligned_mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#gae640082d0ffdb52fb2d658916c5815db">aligned_mediump_ivec4</a></td></tr>
+<tr class="separator:gae640082d0ffdb52fb2d658916c5815db"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga88c56fde67f035d80b2d0d6d568af30b"><td class="memItemLeft" align="right" valign="top">typedef tvec2< uint, aligned_mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga88c56fde67f035d80b2d0d6d568af30b">aligned_mediump_uvec2</a></td></tr>
+<tr class="separator:ga88c56fde67f035d80b2d0d6d568af30b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaee29d3a28f634b03f0a20e79e600f5df"><td class="memItemLeft" align="right" valign="top">typedef tvec3< uint, aligned_mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#gaee29d3a28f634b03f0a20e79e600f5df">aligned_mediump_uvec3</a></td></tr>
+<tr class="separator:gaee29d3a28f634b03f0a20e79e600f5df"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga717763c480dcf3ecf66121426287d08a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga717763c480dcf3ecf66121426287d08a"></a>
+typedef tvec4< uint, aligned_mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga717763c480dcf3ecf66121426287d08a">aligned_mediump_uvec4</a></td></tr>
+<tr class="separator:ga717763c480dcf3ecf66121426287d08a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga57549b1281d99ba1825b1ef0dae6227d"><td class="memItemLeft" align="right" valign="top">typedef tvec2< float, aligned_mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga57549b1281d99ba1825b1ef0dae6227d">aligned_mediump_vec2</a></td></tr>
+<tr class="separator:ga57549b1281d99ba1825b1ef0dae6227d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaed5d4dd2755cc5141a9533488edd9e82"><td class="memItemLeft" align="right" valign="top">typedef tvec3< float, aligned_mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#gaed5d4dd2755cc5141a9533488edd9e82">aligned_mediump_vec3</a></td></tr>
+<tr class="separator:gaed5d4dd2755cc5141a9533488edd9e82"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae4ab68a8c32574bff14e62f95185d295"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae4ab68a8c32574bff14e62f95185d295"></a>
+typedef tvec4< float, aligned_mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#gae4ab68a8c32574bff14e62f95185d295">aligned_mediump_vec4</a></td></tr>
+<tr class="separator:gae4ab68a8c32574bff14e62f95185d295"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1ff8ed402c93d280ff0597c1c5e7c548"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga1ff8ed402c93d280ff0597c1c5e7c548"></a>
+typedef aligned_highp_uvec1 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga1ff8ed402c93d280ff0597c1c5e7c548">aligned_uvec1</a></td></tr>
+<tr class="separator:ga1ff8ed402c93d280ff0597c1c5e7c548"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga074137e3be58528d67041c223d49f398"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga074137e3be58528d67041c223d49f398"></a>
+typedef aligned_highp_uvec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga074137e3be58528d67041c223d49f398">aligned_uvec2</a></td></tr>
+<tr class="separator:ga074137e3be58528d67041c223d49f398"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2a8d9c3046f89d854eb758adfa0811c0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2a8d9c3046f89d854eb758adfa0811c0"></a>
+typedef aligned_highp_uvec3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga2a8d9c3046f89d854eb758adfa0811c0">aligned_uvec3</a></td></tr>
+<tr class="separator:ga2a8d9c3046f89d854eb758adfa0811c0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gabf842c45eea186170c267a328e3f3b7d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gabf842c45eea186170c267a328e3f3b7d"></a>
+typedef aligned_highp_uvec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#gabf842c45eea186170c267a328e3f3b7d">aligned_uvec4</a></td></tr>
+<tr class="separator:gabf842c45eea186170c267a328e3f3b7d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga05e6d4c908965d04191c2070a8d0a65e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga05e6d4c908965d04191c2070a8d0a65e"></a>
+typedef aligned_highp_vec1 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga05e6d4c908965d04191c2070a8d0a65e">aligned_vec1</a></td></tr>
+<tr class="separator:ga05e6d4c908965d04191c2070a8d0a65e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0682462f8096a226773e20fac993cde5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga0682462f8096a226773e20fac993cde5"></a>
+typedef aligned_highp_vec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga0682462f8096a226773e20fac993cde5">aligned_vec2</a></td></tr>
+<tr class="separator:ga0682462f8096a226773e20fac993cde5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7cf643b66664e0cd3c48759ae66c2bd0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7cf643b66664e0cd3c48759ae66c2bd0"></a>
+typedef aligned_highp_vec3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga7cf643b66664e0cd3c48759ae66c2bd0">aligned_vec3</a></td></tr>
+<tr class="separator:ga7cf643b66664e0cd3c48759ae66c2bd0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga85d89e83cb8137e1be1446de8c3b643a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga85d89e83cb8137e1be1446de8c3b643a"></a>
+typedef aligned_highp_vec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga85d89e83cb8137e1be1446de8c3b643a">aligned_vec4</a></td></tr>
+<tr class="separator:ga85d89e83cb8137e1be1446de8c3b643a"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00176.html">GLM_GTC_type_aligned</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00108_source.html">gtc/type_aligned.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00108_source.html b/src/third_party/glm/doc/api/a00108_source.html
new file mode 100644
index 0000000..45a6c09
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00108_source.html
@@ -0,0 +1,383 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: type_aligned.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_9440d7c11b99dcd7e5d369c7cf9802fe.html">gtc</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">gtc/type_aligned.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00108.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> </div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#if !GLM_HAS_ALIGNED_TYPE</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor"># error "GLM: Aligned types are not supported on this platform"</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor"># pragma message("GLM: GLM_GTC_type_aligned extension included")</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "../vec2.hpp"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "../vec3.hpp"</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "../vec4.hpp"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "../gtc/vec1.hpp"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> {</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> <span class="keyword">struct </span>tvec1;</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> <span class="keyword">struct </span>tvec2;</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> <span class="keyword">struct </span>tvec3;</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> <span class="keyword">struct </span>tvec4;</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="comment">// -- *vec1 --</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keyword">typedef</span> tvec1<float, aligned_highp> aligned_highp_vec1;</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keyword">typedef</span> tvec1<float, aligned_mediump> aligned_mediump_vec1;</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keyword">typedef</span> tvec1<float, aligned_lowp> aligned_lowp_vec1;</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keyword">typedef</span> tvec1<double, aligned_highp> aligned_highp_dvec1;</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keyword">typedef</span> tvec1<double, aligned_mediump> aligned_mediump_dvec1;</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keyword">typedef</span> tvec1<double, aligned_lowp> aligned_lowp_dvec1;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keyword">typedef</span> tvec1<int, aligned_highp> aligned_highp_ivec1;</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keyword">typedef</span> tvec1<int, aligned_mediump> aligned_mediump_ivec1;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keyword">typedef</span> tvec1<int, aligned_lowp> aligned_lowp_ivec1;</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keyword">typedef</span> tvec1<uint, aligned_highp> aligned_highp_uvec1;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keyword">typedef</span> tvec1<uint, aligned_mediump> aligned_mediump_uvec1;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keyword">typedef</span> tvec1<uint, aligned_lowp> aligned_lowp_uvec1;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keyword">typedef</span> tvec1<bool, aligned_highp> aligned_highp_bvec1;</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keyword">typedef</span> tvec1<bool, aligned_mediump> aligned_mediump_bvec1;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keyword">typedef</span> tvec1<bool, aligned_lowp> aligned_lowp_bvec1;</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keyword">typedef</span> tvec1<float, packed_highp> packed_highp_vec1;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keyword">typedef</span> tvec1<float, packed_mediump> packed_mediump_vec1;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keyword">typedef</span> tvec1<float, packed_lowp> packed_lowp_vec1;</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keyword">typedef</span> tvec1<double, packed_highp> packed_highp_dvec1;</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keyword">typedef</span> tvec1<double, packed_mediump> packed_mediump_dvec1;</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keyword">typedef</span> tvec1<double, packed_lowp> packed_lowp_dvec1;</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keyword">typedef</span> tvec1<int, packed_highp> packed_highp_ivec1;</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keyword">typedef</span> tvec1<int, packed_mediump> packed_mediump_ivec1;</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keyword">typedef</span> tvec1<int, packed_lowp> packed_lowp_ivec1;</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keyword">typedef</span> tvec1<uint, packed_highp> packed_highp_uvec1;</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keyword">typedef</span> tvec1<uint, packed_mediump> packed_mediump_uvec1;</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keyword">typedef</span> tvec1<uint, packed_lowp> packed_lowp_uvec1;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keyword">typedef</span> tvec1<bool, packed_highp> packed_highp_bvec1;</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keyword">typedef</span> tvec1<bool, packed_mediump> packed_mediump_bvec1;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keyword">typedef</span> tvec1<bool, packed_lowp> packed_lowp_bvec1;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="comment">// -- *vec2 --</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno"><a class="line" href="a00176.html#gaea854184b9d574fc5e75b5709a4974e8"> 73</a></span>  <span class="keyword">typedef</span> tvec2<float, aligned_highp> <a class="code" href="a00176.html#gaea854184b9d574fc5e75b5709a4974e8">aligned_highp_vec2</a>;</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="a00176.html#ga57549b1281d99ba1825b1ef0dae6227d"> 77</a></span>  <span class="keyword">typedef</span> tvec2<float, aligned_mediump> <a class="code" href="a00176.html#ga57549b1281d99ba1825b1ef0dae6227d">aligned_mediump_vec2</a>;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno"><a class="line" href="a00176.html#ga3cfc38b4ea9b9bd1e9f02dcc14eab367"> 81</a></span>  <span class="keyword">typedef</span> tvec2<float, aligned_lowp> <a class="code" href="a00176.html#ga3cfc38b4ea9b9bd1e9f02dcc14eab367">aligned_lowp_vec2</a>;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="a00176.html#ga186b90f0ba86724e080d237f3f5f9417"> 85</a></span>  <span class="keyword">typedef</span> tvec2<double, aligned_highp> <a class="code" href="a00176.html#ga186b90f0ba86724e080d237f3f5f9417">aligned_highp_dvec2</a>;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="a00176.html#gaba56f2b76d320379cdf7c37e0d4b03bd"> 89</a></span>  <span class="keyword">typedef</span> tvec2<double, aligned_mediump> <a class="code" href="a00176.html#gaba56f2b76d320379cdf7c37e0d4b03bd">aligned_mediump_dvec2</a>;</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="a00176.html#gab70c189b4691715b3f7f0abb35c65b2f"> 93</a></span>  <span class="keyword">typedef</span> tvec2<double, aligned_lowp> <a class="code" href="a00176.html#gab70c189b4691715b3f7f0abb35c65b2f">aligned_lowp_dvec2</a>;</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno"><a class="line" href="a00176.html#gab6ddd9d1421eb610ddeb32705fed7026"> 97</a></span>  <span class="keyword">typedef</span> tvec2<int, aligned_highp> <a class="code" href="a00176.html#gab6ddd9d1421eb610ddeb32705fed7026">aligned_highp_ivec2</a>;</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno"><a class="line" href="a00176.html#ga389d12dcc8d57a444944a72646d17efa"> 101</a></span>  <span class="keyword">typedef</span> tvec2<int, aligned_mediump> <a class="code" href="a00176.html#ga389d12dcc8d57a444944a72646d17efa">aligned_mediump_ivec2</a>;</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno"><a class="line" href="a00176.html#gad69bf7c406a3cec994307473cb3da032"> 105</a></span>  <span class="keyword">typedef</span> tvec2<int, aligned_lowp> <a class="code" href="a00176.html#gad69bf7c406a3cec994307473cb3da032">aligned_lowp_ivec2</a>;</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="a00176.html#ga7366a38dc888164e623fc10663e97670"> 109</a></span>  <span class="keyword">typedef</span> tvec2<uint, aligned_highp> <a class="code" href="a00176.html#ga7366a38dc888164e623fc10663e97670">aligned_highp_uvec2</a>;</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno"><a class="line" href="a00176.html#ga88c56fde67f035d80b2d0d6d568af30b"> 113</a></span>  <span class="keyword">typedef</span> tvec2<uint, aligned_mediump> <a class="code" href="a00176.html#ga88c56fde67f035d80b2d0d6d568af30b">aligned_mediump_uvec2</a>;</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno"><a class="line" href="a00176.html#ga15355ffc7ec7931b81ba76736b65e51a"> 117</a></span>  <span class="keyword">typedef</span> tvec2<uint, aligned_lowp> <a class="code" href="a00176.html#ga15355ffc7ec7931b81ba76736b65e51a">aligned_lowp_uvec2</a>;</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno"><a class="line" href="a00176.html#gac5ffd9396890b64e707ba47c76435dfe"> 121</a></span>  <span class="keyword">typedef</span> tvec2<bool, aligned_highp> <a class="code" href="a00176.html#gac5ffd9396890b64e707ba47c76435dfe">aligned_highp_bvec2</a>;</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="a00176.html#ga77d37d7c80c7faa2eecb3eba7677750e"> 125</a></span>  <span class="keyword">typedef</span> tvec2<bool, aligned_mediump> <a class="code" href="a00176.html#ga77d37d7c80c7faa2eecb3eba7677750e">aligned_mediump_bvec2</a>;</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno"><a class="line" href="a00176.html#ga524c702b82ae7ccaca896d374808c6d7"> 129</a></span>  <span class="keyword">typedef</span> tvec2<bool, aligned_lowp> <a class="code" href="a00176.html#ga524c702b82ae7ccaca896d374808c6d7">aligned_lowp_bvec2</a>;</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="comment">// -- *vec3 --</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno"><a class="line" href="a00176.html#ga55fb20d4e73a65c834b5861fc6cf4c36"> 135</a></span>  <span class="keyword">typedef</span> tvec3<float, aligned_highp> <a class="code" href="a00176.html#ga55fb20d4e73a65c834b5861fc6cf4c36">aligned_highp_vec3</a>;</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno"><a class="line" href="a00176.html#gaed5d4dd2755cc5141a9533488edd9e82"> 139</a></span>  <span class="keyword">typedef</span> tvec3<float, aligned_mediump> <a class="code" href="a00176.html#gaed5d4dd2755cc5141a9533488edd9e82">aligned_mediump_vec3</a>;</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno"><a class="line" href="a00176.html#gae003f8f3071a8bc734a70c6d4978f968"> 143</a></span>  <span class="keyword">typedef</span> tvec3<float, aligned_lowp> <a class="code" href="a00176.html#gae003f8f3071a8bc734a70c6d4978f968">aligned_lowp_vec3</a>;</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno"><a class="line" href="a00176.html#ga54f6765716867706643bde03211d600f"> 147</a></span>  <span class="keyword">typedef</span> tvec3<double, aligned_highp> <a class="code" href="a00176.html#ga54f6765716867706643bde03211d600f">aligned_highp_dvec3</a>;</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno"><a class="line" href="a00176.html#ga22efc7f84ab79eef640e00fc59d07478"> 151</a></span>  <span class="keyword">typedef</span> tvec3<double, aligned_mediump> <a class="code" href="a00176.html#ga22efc7f84ab79eef640e00fc59d07478">aligned_mediump_dvec3</a>;</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno"><a class="line" href="a00176.html#gabeec3d5ec99c196f4c0eb03b58d486ee"> 155</a></span>  <span class="keyword">typedef</span> tvec3<double, aligned_lowp> <a class="code" href="a00176.html#gabeec3d5ec99c196f4c0eb03b58d486ee">aligned_lowp_dvec3</a>;</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno"><a class="line" href="a00176.html#gae234a3a1c6288fa5e2d4c78c5e39002e"> 159</a></span>  <span class="keyword">typedef</span> tvec3<int, aligned_highp> <a class="code" href="a00176.html#gae234a3a1c6288fa5e2d4c78c5e39002e">aligned_highp_ivec3</a>;</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno"><a class="line" href="a00176.html#ga5b16f7e81555819bf0f80f4db4bc0b26"> 163</a></span>  <span class="keyword">typedef</span> tvec3<int, aligned_mediump> <a class="code" href="a00176.html#ga5b16f7e81555819bf0f80f4db4bc0b26">aligned_mediump_ivec3</a>;</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno"><a class="line" href="a00176.html#gaa8615b4ce4fdf176c631b34d2d31d81b"> 167</a></span>  <span class="keyword">typedef</span> tvec3<int, aligned_lowp> <a class="code" href="a00176.html#gaa8615b4ce4fdf176c631b34d2d31d81b">aligned_lowp_ivec3</a>;</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div>
+<div class="line"><a name="l00171"></a><span class="lineno"><a class="line" href="a00176.html#ga967485a7e963365642ea17de62fe2a3f"> 171</a></span>  <span class="keyword">typedef</span> tvec3<uint, aligned_highp> <a class="code" href="a00176.html#ga967485a7e963365642ea17de62fe2a3f">aligned_highp_uvec3</a>;</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno"><a class="line" href="a00176.html#gaee29d3a28f634b03f0a20e79e600f5df"> 175</a></span>  <span class="keyword">typedef</span> tvec3<uint, aligned_mediump> <a class="code" href="a00176.html#gaee29d3a28f634b03f0a20e79e600f5df">aligned_mediump_uvec3</a>;</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno"><a class="line" href="a00176.html#ga48c85299d98e8248f547a2c07ea609cf"> 179</a></span>  <span class="keyword">typedef</span> tvec3<uint, aligned_lowp> <a class="code" href="a00176.html#ga48c85299d98e8248f547a2c07ea609cf">aligned_lowp_uvec3</a>;</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div>
+<div class="line"><a name="l00182"></a><span class="lineno"><a class="line" href="a00176.html#ga3adba191018d2de1dc2834a2ff5597d7"> 182</a></span>  <span class="keyword">typedef</span> tvec3<bool, aligned_highp> <a class="code" href="a00176.html#ga3adba191018d2de1dc2834a2ff5597d7">aligned_highp_bvec3</a>;</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div>
+<div class="line"><a name="l00185"></a><span class="lineno"><a class="line" href="a00176.html#ga4f78cd6d9c5827771e35921b4a92855a"> 185</a></span>  <span class="keyword">typedef</span> tvec3<bool, aligned_mediump> <a class="code" href="a00176.html#ga4f78cd6d9c5827771e35921b4a92855a">aligned_mediump_bvec3</a>;</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno"><a class="line" href="a00176.html#ga21fb6238997b4a21848411b16bc34e93"> 188</a></span>  <span class="keyword">typedef</span> tvec3<bool, aligned_lowp> <a class="code" href="a00176.html#ga21fb6238997b4a21848411b16bc34e93">aligned_lowp_bvec3</a>;</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <span class="comment">// -- *vec4 --</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno"><a class="line" href="a00176.html#gae2938d64c6a46f721681607c2ab3f884"> 193</a></span>  <span class="keyword">typedef</span> tvec4<float, aligned_highp> <a class="code" href="a00176.html#gae2938d64c6a46f721681607c2ab3f884">aligned_highp_vec4</a>;</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno"><a class="line" href="a00176.html#gae4ab68a8c32574bff14e62f95185d295"> 196</a></span>  <span class="keyword">typedef</span> tvec4<float, aligned_mediump> <a class="code" href="a00176.html#gae4ab68a8c32574bff14e62f95185d295">aligned_mediump_vec4</a>;</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno"><a class="line" href="a00176.html#ga689f103781a795e919fddfa47d89170d"> 199</a></span>  <span class="keyword">typedef</span> tvec4<float, aligned_lowp> <a class="code" href="a00176.html#ga689f103781a795e919fddfa47d89170d">aligned_lowp_vec4</a>;</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno"><a class="line" href="a00176.html#ga8e5a90ed034e9e7414ff71e66a79139e"> 202</a></span>  <span class="keyword">typedef</span> tvec4<double, aligned_highp> <a class="code" href="a00176.html#ga8e5a90ed034e9e7414ff71e66a79139e">aligned_highp_dvec4</a>;</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno"><a class="line" href="a00176.html#gad6f422f8871685ee467a575238e4ece4"> 205</a></span>  <span class="keyword">typedef</span> tvec4<double, aligned_mediump> <a class="code" href="a00176.html#gad6f422f8871685ee467a575238e4ece4">aligned_mediump_dvec4</a>;</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> </div>
+<div class="line"><a name="l00208"></a><span class="lineno"><a class="line" href="a00176.html#gaab365ee7cfd19bab449daa8f7eb0ca71"> 208</a></span>  <span class="keyword">typedef</span> tvec4<double, aligned_lowp> <a class="code" href="a00176.html#gaab365ee7cfd19bab449daa8f7eb0ca71">aligned_lowp_dvec4</a>;</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> </div>
+<div class="line"><a name="l00211"></a><span class="lineno"><a class="line" href="a00176.html#ga1e3286a27b19f25801fb435b6d1225fb"> 211</a></span>  <span class="keyword">typedef</span> tvec4<int, aligned_highp> <a class="code" href="a00176.html#ga1e3286a27b19f25801fb435b6d1225fb">aligned_highp_ivec4</a>;</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno"><a class="line" href="a00176.html#gae640082d0ffdb52fb2d658916c5815db"> 214</a></span>  <span class="keyword">typedef</span> tvec4<int, aligned_mediump> <a class="code" href="a00176.html#gae640082d0ffdb52fb2d658916c5815db">aligned_mediump_ivec4</a>;</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> </div>
+<div class="line"><a name="l00217"></a><span class="lineno"><a class="line" href="a00176.html#gad744848a2e4ddd2f041e6ec8d13600ae"> 217</a></span>  <span class="keyword">typedef</span> tvec4<int, aligned_lowp> <a class="code" href="a00176.html#gad744848a2e4ddd2f041e6ec8d13600ae">aligned_lowp_ivec4</a>;</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno"><a class="line" href="a00176.html#gac56a4ce85b6233998139a7c1ac337440"> 220</a></span>  <span class="keyword">typedef</span> tvec4<uint, aligned_highp> <a class="code" href="a00176.html#gac56a4ce85b6233998139a7c1ac337440">aligned_highp_uvec4</a>;</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> </div>
+<div class="line"><a name="l00223"></a><span class="lineno"><a class="line" href="a00176.html#ga717763c480dcf3ecf66121426287d08a"> 223</a></span>  <span class="keyword">typedef</span> tvec4<uint, aligned_mediump> <a class="code" href="a00176.html#ga717763c480dcf3ecf66121426287d08a">aligned_mediump_uvec4</a>;</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno"><a class="line" href="a00176.html#ga40b0e05306f666f835ac97c963302ecb"> 226</a></span>  <span class="keyword">typedef</span> tvec4<uint, aligned_lowp> <a class="code" href="a00176.html#ga40b0e05306f666f835ac97c963302ecb">aligned_lowp_uvec4</a>;</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> </div>
+<div class="line"><a name="l00229"></a><span class="lineno"><a class="line" href="a00176.html#ga903a73cf8ae1f4bc24583b81adf024dc"> 229</a></span>  <span class="keyword">typedef</span> tvec4<bool, aligned_highp> <a class="code" href="a00176.html#ga903a73cf8ae1f4bc24583b81adf024dc">aligned_highp_bvec4</a>;</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> </div>
+<div class="line"><a name="l00232"></a><span class="lineno"><a class="line" href="a00176.html#ga2cb80e2d4d351abeadac7b1676a91fd9"> 232</a></span>  <span class="keyword">typedef</span> tvec4<bool, aligned_mediump> <a class="code" href="a00176.html#ga2cb80e2d4d351abeadac7b1676a91fd9">aligned_mediump_bvec4</a>;</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> </div>
+<div class="line"><a name="l00235"></a><span class="lineno"><a class="line" href="a00176.html#ga0b5e3c64f8dbadfc42a2aca5f2da9692"> 235</a></span>  <span class="keyword">typedef</span> tvec4<bool, aligned_lowp> <a class="code" href="a00176.html#ga0b5e3c64f8dbadfc42a2aca5f2da9692">aligned_lowp_bvec4</a>;</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <span class="comment">// -- default --</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> </div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="preprocessor">#if(defined(GLM_PRECISION_LOWP_FLOAT))</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  <span class="keyword">typedef</span> aligned_lowp_vec1 <a class="code" href="a00176.html#ga05e6d4c908965d04191c2070a8d0a65e">aligned_vec1</a>;</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <span class="keyword">typedef</span> aligned_lowp_vec2 <a class="code" href="a00176.html#ga0682462f8096a226773e20fac993cde5">aligned_vec2</a>;</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <span class="keyword">typedef</span> aligned_lowp_vec3 <a class="code" href="a00176.html#ga7cf643b66664e0cd3c48759ae66c2bd0">aligned_vec3</a>;</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="keyword">typedef</span> aligned_lowp_vec4 <a class="code" href="a00176.html#ga85d89e83cb8137e1be1446de8c3b643a">aligned_vec4</a>;</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="preprocessor">#elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <span class="keyword">typedef</span> aligned_mediump_vec1 <a class="code" href="a00176.html#ga05e6d4c908965d04191c2070a8d0a65e">aligned_vec1</a>;</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="keyword">typedef</span> aligned_mediump_vec2 <a class="code" href="a00176.html#ga0682462f8096a226773e20fac993cde5">aligned_vec2</a>;</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <span class="keyword">typedef</span> aligned_mediump_vec3 <a class="code" href="a00176.html#ga7cf643b66664e0cd3c48759ae66c2bd0">aligned_vec3</a>;</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="keyword">typedef</span> aligned_mediump_vec4 <a class="code" href="a00176.html#ga85d89e83cb8137e1be1446de8c3b643a">aligned_vec4</a>;</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="preprocessor">#else //defined(GLM_PRECISION_HIGHP_FLOAT)</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  <span class="keyword">typedef</span> aligned_highp_vec1 <a class="code" href="a00176.html#ga05e6d4c908965d04191c2070a8d0a65e">aligned_vec1</a>;</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> </div>
+<div class="line"><a name="l00254"></a><span class="lineno"><a class="line" href="a00176.html#ga0682462f8096a226773e20fac993cde5"> 254</a></span>  <span class="keyword">typedef</span> aligned_highp_vec2 <a class="code" href="a00176.html#ga0682462f8096a226773e20fac993cde5">aligned_vec2</a>;</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> </div>
+<div class="line"><a name="l00257"></a><span class="lineno"><a class="line" href="a00176.html#ga7cf643b66664e0cd3c48759ae66c2bd0"> 257</a></span>  <span class="keyword">typedef</span> aligned_highp_vec3 <a class="code" href="a00176.html#ga7cf643b66664e0cd3c48759ae66c2bd0">aligned_vec3</a>;</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> </div>
+<div class="line"><a name="l00260"></a><span class="lineno"><a class="line" href="a00176.html#ga85d89e83cb8137e1be1446de8c3b643a"> 260</a></span>  <span class="keyword">typedef</span> aligned_highp_vec4 <a class="code" href="a00176.html#ga85d89e83cb8137e1be1446de8c3b643a">aligned_vec4</a>;</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="preprocessor">#endif//GLM_PRECISION</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> </div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="preprocessor">#if(defined(GLM_PRECISION_LOWP_DOUBLE))</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <span class="keyword">typedef</span> aligned_lowp_dvec1 <a class="code" href="a00176.html#ga4974f46ae5a19415d91316960a53617a">aligned_dvec1</a>;</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  <span class="keyword">typedef</span> aligned_lowp_dvec2 <a class="code" href="a00176.html#ga18d859f87122b2b3b2992ffe86dbebc0">aligned_dvec2</a>;</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  <span class="keyword">typedef</span> aligned_lowp_dvec3 <a class="code" href="a00176.html#gaa37869eea77d28419b2fb0ff70b69bf0">aligned_dvec3</a>;</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  <span class="keyword">typedef</span> aligned_lowp_dvec4 <a class="code" href="a00176.html#ga8a9f0a4795ccc442fa9901845026f9f5">aligned_dvec4</a>;</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> <span class="preprocessor">#elif(defined(GLM_PRECISION_MEDIUMP_DOUBLE))</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  <span class="keyword">typedef</span> aligned_mediump_dvec1 <a class="code" href="a00176.html#ga4974f46ae5a19415d91316960a53617a">aligned_dvec1</a>;</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  <span class="keyword">typedef</span> aligned_mediump_dvec2 <a class="code" href="a00176.html#ga18d859f87122b2b3b2992ffe86dbebc0">aligned_dvec2</a>;</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  <span class="keyword">typedef</span> aligned_mediump_dvec3 <a class="code" href="a00176.html#gaa37869eea77d28419b2fb0ff70b69bf0">aligned_dvec3</a>;</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keyword">typedef</span> aligned_mediump_dvec4 <a class="code" href="a00176.html#ga8a9f0a4795ccc442fa9901845026f9f5">aligned_dvec4</a>;</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <span class="preprocessor">#else //defined(GLM_PRECISION_HIGHP_DOUBLE)</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <span class="keyword">typedef</span> aligned_highp_dvec1 <a class="code" href="a00176.html#ga4974f46ae5a19415d91316960a53617a">aligned_dvec1</a>;</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> </div>
+<div class="line"><a name="l00278"></a><span class="lineno"><a class="line" href="a00176.html#ga18d859f87122b2b3b2992ffe86dbebc0"> 278</a></span>  <span class="keyword">typedef</span> aligned_highp_dvec2 <a class="code" href="a00176.html#ga18d859f87122b2b3b2992ffe86dbebc0">aligned_dvec2</a>;</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> </div>
+<div class="line"><a name="l00281"></a><span class="lineno"><a class="line" href="a00176.html#gaa37869eea77d28419b2fb0ff70b69bf0"> 281</a></span>  <span class="keyword">typedef</span> aligned_highp_dvec3 <a class="code" href="a00176.html#gaa37869eea77d28419b2fb0ff70b69bf0">aligned_dvec3</a>;</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> </div>
+<div class="line"><a name="l00284"></a><span class="lineno"><a class="line" href="a00176.html#ga8a9f0a4795ccc442fa9901845026f9f5"> 284</a></span>  <span class="keyword">typedef</span> aligned_highp_dvec4 <a class="code" href="a00176.html#ga8a9f0a4795ccc442fa9901845026f9f5">aligned_dvec4</a>;</div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="preprocessor">#endif//GLM_PRECISION</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> </div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> <span class="preprocessor">#if(defined(GLM_PRECISION_LOWP_INT))</span></div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <span class="keyword">typedef</span> aligned_lowp_ivec1 <a class="code" href="a00176.html#ga76298aed82a439063c3d55980c84aa0b">aligned_ivec1</a>;</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="keyword">typedef</span> aligned_lowp_ivec2 <a class="code" href="a00176.html#gae4f38fd2c86cee6940986197777b3ca4">aligned_ivec2</a>;</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  <span class="keyword">typedef</span> aligned_lowp_ivec3 <a class="code" href="a00176.html#ga32794322d294e5ace7fed4a61896f270">aligned_ivec3</a>;</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  <span class="keyword">typedef</span> aligned_lowp_ivec4 <a class="code" href="a00176.html#ga7f79eae5927c9033d84617e49f6f34e4">aligned_ivec4</a>;</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="preprocessor">#elif(defined(GLM_PRECISION_MEDIUMP_INT))</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  <span class="keyword">typedef</span> aligned_mediump_ivec1 <a class="code" href="a00176.html#ga76298aed82a439063c3d55980c84aa0b">aligned_ivec1</a>;</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  <span class="keyword">typedef</span> aligned_mediump_ivec2 <a class="code" href="a00176.html#gae4f38fd2c86cee6940986197777b3ca4">aligned_ivec2</a>;</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  <span class="keyword">typedef</span> aligned_mediump_ivec3 <a class="code" href="a00176.html#ga32794322d294e5ace7fed4a61896f270">aligned_ivec3</a>;</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  <span class="keyword">typedef</span> aligned_mediump_ivec4 <a class="code" href="a00176.html#ga7f79eae5927c9033d84617e49f6f34e4">aligned_ivec4</a>;</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> <span class="preprocessor">#else //defined(GLM_PRECISION_HIGHP_INT)</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  <span class="keyword">typedef</span> aligned_highp_ivec1 <a class="code" href="a00176.html#ga76298aed82a439063c3d55980c84aa0b">aligned_ivec1</a>;</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> </div>
+<div class="line"><a name="l00302"></a><span class="lineno"><a class="line" href="a00176.html#gae4f38fd2c86cee6940986197777b3ca4"> 302</a></span>  <span class="keyword">typedef</span> aligned_highp_ivec2 <a class="code" href="a00176.html#gae4f38fd2c86cee6940986197777b3ca4">aligned_ivec2</a>;</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> </div>
+<div class="line"><a name="l00305"></a><span class="lineno"><a class="line" href="a00176.html#ga32794322d294e5ace7fed4a61896f270"> 305</a></span>  <span class="keyword">typedef</span> aligned_highp_ivec3 <a class="code" href="a00176.html#ga32794322d294e5ace7fed4a61896f270">aligned_ivec3</a>;</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> </div>
+<div class="line"><a name="l00308"></a><span class="lineno"><a class="line" href="a00176.html#ga7f79eae5927c9033d84617e49f6f34e4"> 308</a></span>  <span class="keyword">typedef</span> aligned_highp_ivec4 <a class="code" href="a00176.html#ga7f79eae5927c9033d84617e49f6f34e4">aligned_ivec4</a>;</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <span class="preprocessor">#endif//GLM_PRECISION</span></div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> </div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <span class="comment">// -- Unsigned integer definition --</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> </div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="preprocessor">#if(defined(GLM_PRECISION_LOWP_UINT))</span></div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  <span class="keyword">typedef</span> aligned_lowp_uvec1 <a class="code" href="a00176.html#ga1ff8ed402c93d280ff0597c1c5e7c548">aligned_uvec1</a>;</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  <span class="keyword">typedef</span> aligned_lowp_uvec2 <a class="code" href="a00176.html#ga074137e3be58528d67041c223d49f398">aligned_uvec2</a>;</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  <span class="keyword">typedef</span> aligned_lowp_uvec3 <a class="code" href="a00176.html#ga2a8d9c3046f89d854eb758adfa0811c0">aligned_uvec3</a>;</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  <span class="keyword">typedef</span> aligned_lowp_uvec4 <a class="code" href="a00176.html#gabf842c45eea186170c267a328e3f3b7d">aligned_uvec4</a>;</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> <span class="preprocessor">#elif(defined(GLM_PRECISION_MEDIUMP_UINT))</span></div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  <span class="keyword">typedef</span> aligned_mediump_uvec1 <a class="code" href="a00176.html#ga1ff8ed402c93d280ff0597c1c5e7c548">aligned_uvec1</a>;</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  <span class="keyword">typedef</span> aligned_mediump_uvec2 <a class="code" href="a00176.html#ga074137e3be58528d67041c223d49f398">aligned_uvec2</a>;</div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  <span class="keyword">typedef</span> aligned_mediump_uvec3 <a class="code" href="a00176.html#ga2a8d9c3046f89d854eb758adfa0811c0">aligned_uvec3</a>;</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  <span class="keyword">typedef</span> aligned_mediump_uvec4 <a class="code" href="a00176.html#gabf842c45eea186170c267a328e3f3b7d">aligned_uvec4</a>;</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <span class="preprocessor">#else //defined(GLM_PRECISION_HIGHP_UINT)</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  <span class="keyword">typedef</span> aligned_highp_uvec1 <a class="code" href="a00176.html#ga1ff8ed402c93d280ff0597c1c5e7c548">aligned_uvec1</a>;</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> </div>
+<div class="line"><a name="l00328"></a><span class="lineno"><a class="line" href="a00176.html#ga074137e3be58528d67041c223d49f398"> 328</a></span>  <span class="keyword">typedef</span> aligned_highp_uvec2 <a class="code" href="a00176.html#ga074137e3be58528d67041c223d49f398">aligned_uvec2</a>;</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> </div>
+<div class="line"><a name="l00331"></a><span class="lineno"><a class="line" href="a00176.html#ga2a8d9c3046f89d854eb758adfa0811c0"> 331</a></span>  <span class="keyword">typedef</span> aligned_highp_uvec3 <a class="code" href="a00176.html#ga2a8d9c3046f89d854eb758adfa0811c0">aligned_uvec3</a>;</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> </div>
+<div class="line"><a name="l00334"></a><span class="lineno"><a class="line" href="a00176.html#gabf842c45eea186170c267a328e3f3b7d"> 334</a></span>  <span class="keyword">typedef</span> aligned_highp_uvec4 <a class="code" href="a00176.html#gabf842c45eea186170c267a328e3f3b7d">aligned_uvec4</a>;</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="preprocessor">#endif//GLM_PRECISION</span></div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> </div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> <span class="preprocessor">#if(defined(GLM_PRECISION_LOWP_BOOL))</span></div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  <span class="keyword">typedef</span> aligned_lowp_bvec1 <a class="code" href="a00176.html#ga780a35f764020f553a9601a3fcdcd059">aligned_bvec1</a>;</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  <span class="keyword">typedef</span> aligned_lowp_bvec2 <a class="code" href="a00176.html#gae766b317c5afec852bfb3d74a3c54bc8">aligned_bvec2</a>;</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  <span class="keyword">typedef</span> aligned_lowp_bvec3 <a class="code" href="a00176.html#gae1964ba70d15915e5b710926decbb3cb">aligned_bvec3</a>;</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  <span class="keyword">typedef</span> aligned_lowp_bvec4 <a class="code" href="a00176.html#gae164a1f7879f828bc35e50b79d786b05">aligned_bvec4</a>;</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> <span class="preprocessor">#elif(defined(GLM_PRECISION_MEDIUMP_BOOL))</span></div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  <span class="keyword">typedef</span> aligned_mediump_bvec1 <a class="code" href="a00176.html#ga780a35f764020f553a9601a3fcdcd059">aligned_bvec1</a>;</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  <span class="keyword">typedef</span> aligned_mediump_bvec2 <a class="code" href="a00176.html#gae766b317c5afec852bfb3d74a3c54bc8">aligned_bvec2</a>;</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  <span class="keyword">typedef</span> aligned_mediump_bvec3 <a class="code" href="a00176.html#gae1964ba70d15915e5b710926decbb3cb">aligned_bvec3</a>;</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  <span class="keyword">typedef</span> aligned_mediump_bvec4 <a class="code" href="a00176.html#gae164a1f7879f828bc35e50b79d786b05">aligned_bvec4</a>;</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> <span class="preprocessor">#else //defined(GLM_PRECISION_HIGHP_BOOL)</span></div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  <span class="keyword">typedef</span> aligned_highp_bvec1 <a class="code" href="a00176.html#ga780a35f764020f553a9601a3fcdcd059">aligned_bvec1</a>;</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> </div>
+<div class="line"><a name="l00352"></a><span class="lineno"><a class="line" href="a00176.html#gae766b317c5afec852bfb3d74a3c54bc8"> 352</a></span>  <span class="keyword">typedef</span> aligned_highp_bvec2 <a class="code" href="a00176.html#gae766b317c5afec852bfb3d74a3c54bc8">aligned_bvec2</a>;</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> </div>
+<div class="line"><a name="l00355"></a><span class="lineno"><a class="line" href="a00176.html#gae1964ba70d15915e5b710926decbb3cb"> 355</a></span>  <span class="keyword">typedef</span> aligned_highp_bvec3 <a class="code" href="a00176.html#gae1964ba70d15915e5b710926decbb3cb">aligned_bvec3</a>;</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> </div>
+<div class="line"><a name="l00358"></a><span class="lineno"><a class="line" href="a00176.html#gae164a1f7879f828bc35e50b79d786b05"> 358</a></span>  <span class="keyword">typedef</span> aligned_highp_bvec4 <a class="code" href="a00176.html#gae164a1f7879f828bc35e50b79d786b05">aligned_bvec4</a>;</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="preprocessor">#endif//GLM_PRECISION</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> </div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> }<span class="comment">//namespace glm</span></div>
+<div class="ttc" id="a00176_html_gae766b317c5afec852bfb3d74a3c54bc8"><div class="ttname"><a href="a00176.html#gae766b317c5afec852bfb3d74a3c54bc8">glm::aligned_bvec2</a></div><div class="ttdeci">aligned_highp_bvec2 aligned_bvec2</div><div class="ttdoc">2 components vector of boolean. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00352">gtc/type_aligned.hpp:352</a></div></div>
+<div class="ttc" id="a00176_html_gaba56f2b76d320379cdf7c37e0d4b03bd"><div class="ttname"><a href="a00176.html#gaba56f2b76d320379cdf7c37e0d4b03bd">glm::aligned_mediump_dvec2</a></div><div class="ttdeci">tvec2< double, aligned_mediump > aligned_mediump_dvec2</div><div class="ttdoc">2 components vector of medium double-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00089">gtc/type_aligned.hpp:89</a></div></div>
+<div class="ttc" id="a00176_html_ga903a73cf8ae1f4bc24583b81adf024dc"><div class="ttname"><a href="a00176.html#ga903a73cf8ae1f4bc24583b81adf024dc">glm::aligned_highp_bvec4</a></div><div class="ttdeci">tvec4< bool, aligned_highp > aligned_highp_bvec4</div><div class="ttdoc">4 components vector of high precision bool numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00229">gtc/type_aligned.hpp:229</a></div></div>
+<div class="ttc" id="a00176_html_ga967485a7e963365642ea17de62fe2a3f"><div class="ttname"><a href="a00176.html#ga967485a7e963365642ea17de62fe2a3f">glm::aligned_highp_uvec3</a></div><div class="ttdeci">tvec3< uint, aligned_highp > aligned_highp_uvec3</div><div class="ttdoc">3 components vector of high precision unsigned integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00171">gtc/type_aligned.hpp:171</a></div></div>
+<div class="ttc" id="a00176_html_ga8a9f0a4795ccc442fa9901845026f9f5"><div class="ttname"><a href="a00176.html#ga8a9f0a4795ccc442fa9901845026f9f5">glm::aligned_dvec4</a></div><div class="ttdeci">aligned_highp_dvec4 aligned_dvec4</div><div class="ttdoc">4 components vector of double-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00284">gtc/type_aligned.hpp:284</a></div></div>
+<div class="ttc" id="a00176_html_ga4974f46ae5a19415d91316960a53617a"><div class="ttname"><a href="a00176.html#ga4974f46ae5a19415d91316960a53617a">glm::aligned_dvec1</a></div><div class="ttdeci">aligned_highp_dvec1 aligned_dvec1</div><div class="ttdoc">1 component vector of double-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00275">gtc/type_aligned.hpp:275</a></div></div>
+<div class="ttc" id="a00176_html_gaa8615b4ce4fdf176c631b34d2d31d81b"><div class="ttname"><a href="a00176.html#gaa8615b4ce4fdf176c631b34d2d31d81b">glm::aligned_lowp_ivec3</a></div><div class="ttdeci">tvec3< int, aligned_lowp > aligned_lowp_ivec3</div><div class="ttdoc">3 components vector of low precision signed integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00167">gtc/type_aligned.hpp:167</a></div></div>
+<div class="ttc" id="a00176_html_ga22efc7f84ab79eef640e00fc59d07478"><div class="ttname"><a href="a00176.html#ga22efc7f84ab79eef640e00fc59d07478">glm::aligned_mediump_dvec3</a></div><div class="ttdeci">tvec3< double, aligned_mediump > aligned_mediump_dvec3</div><div class="ttdoc">3 components vector of medium double-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00151">gtc/type_aligned.hpp:151</a></div></div>
+<div class="ttc" id="a00176_html_gae003f8f3071a8bc734a70c6d4978f968"><div class="ttname"><a href="a00176.html#gae003f8f3071a8bc734a70c6d4978f968">glm::aligned_lowp_vec3</a></div><div class="ttdeci">tvec3< float, aligned_lowp > aligned_lowp_vec3</div><div class="ttdoc">3 components vector of low single-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00143">gtc/type_aligned.hpp:143</a></div></div>
+<div class="ttc" id="a00176_html_ga524c702b82ae7ccaca896d374808c6d7"><div class="ttname"><a href="a00176.html#ga524c702b82ae7ccaca896d374808c6d7">glm::aligned_lowp_bvec2</a></div><div class="ttdeci">tvec2< bool, aligned_lowp > aligned_lowp_bvec2</div><div class="ttdoc">2 components vector of low precision bool numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00129">gtc/type_aligned.hpp:129</a></div></div>
+<div class="ttc" id="a00176_html_gaee29d3a28f634b03f0a20e79e600f5df"><div class="ttname"><a href="a00176.html#gaee29d3a28f634b03f0a20e79e600f5df">glm::aligned_mediump_uvec3</a></div><div class="ttdeci">tvec3< uint, aligned_mediump > aligned_mediump_uvec3</div><div class="ttdoc">3 components vector of medium precision unsigned integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00175">gtc/type_aligned.hpp:175</a></div></div>
+<div class="ttc" id="a00176_html_ga689f103781a795e919fddfa47d89170d"><div class="ttname"><a href="a00176.html#ga689f103781a795e919fddfa47d89170d">glm::aligned_lowp_vec4</a></div><div class="ttdeci">tvec4< float, aligned_lowp > aligned_lowp_vec4</div><div class="ttdoc">4 components vector of low single-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00199">gtc/type_aligned.hpp:199</a></div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00176_html_gad6f422f8871685ee467a575238e4ece4"><div class="ttname"><a href="a00176.html#gad6f422f8871685ee467a575238e4ece4">glm::aligned_mediump_dvec4</a></div><div class="ttdeci">tvec4< double, aligned_mediump > aligned_mediump_dvec4</div><div class="ttdoc">4 components vector of medium double-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00205">gtc/type_aligned.hpp:205</a></div></div>
+<div class="ttc" id="a00176_html_ga88c56fde67f035d80b2d0d6d568af30b"><div class="ttname"><a href="a00176.html#ga88c56fde67f035d80b2d0d6d568af30b">glm::aligned_mediump_uvec2</a></div><div class="ttdeci">tvec2< uint, aligned_mediump > aligned_mediump_uvec2</div><div class="ttdoc">2 components vector of medium precision unsigned integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00113">gtc/type_aligned.hpp:113</a></div></div>
+<div class="ttc" id="a00176_html_ga389d12dcc8d57a444944a72646d17efa"><div class="ttname"><a href="a00176.html#ga389d12dcc8d57a444944a72646d17efa">glm::aligned_mediump_ivec2</a></div><div class="ttdeci">tvec2< int, aligned_mediump > aligned_mediump_ivec2</div><div class="ttdoc">2 components vector of medium precision signed integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00101">gtc/type_aligned.hpp:101</a></div></div>
+<div class="ttc" id="a00176_html_ga717763c480dcf3ecf66121426287d08a"><div class="ttname"><a href="a00176.html#ga717763c480dcf3ecf66121426287d08a">glm::aligned_mediump_uvec4</a></div><div class="ttdeci">tvec4< uint, aligned_mediump > aligned_mediump_uvec4</div><div class="ttdoc">4 components vector of medium precision unsigned integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00223">gtc/type_aligned.hpp:223</a></div></div>
+<div class="ttc" id="a00176_html_gae164a1f7879f828bc35e50b79d786b05"><div class="ttname"><a href="a00176.html#gae164a1f7879f828bc35e50b79d786b05">glm::aligned_bvec4</a></div><div class="ttdeci">aligned_highp_bvec4 aligned_bvec4</div><div class="ttdoc">4 components vector of boolean. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00358">gtc/type_aligned.hpp:358</a></div></div>
+<div class="ttc" id="a00176_html_gac5ffd9396890b64e707ba47c76435dfe"><div class="ttname"><a href="a00176.html#gac5ffd9396890b64e707ba47c76435dfe">glm::aligned_highp_bvec2</a></div><div class="ttdeci">tvec2< bool, aligned_highp > aligned_highp_bvec2</div><div class="ttdoc">2 components vector of high precision bool numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00121">gtc/type_aligned.hpp:121</a></div></div>
+<div class="ttc" id="a00176_html_ga76298aed82a439063c3d55980c84aa0b"><div class="ttname"><a href="a00176.html#ga76298aed82a439063c3d55980c84aa0b">glm::aligned_ivec1</a></div><div class="ttdeci">aligned_highp_ivec1 aligned_ivec1</div><div class="ttdoc">1 component vector of signed integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00299">gtc/type_aligned.hpp:299</a></div></div>
+<div class="ttc" id="a00176_html_ga48c85299d98e8248f547a2c07ea609cf"><div class="ttname"><a href="a00176.html#ga48c85299d98e8248f547a2c07ea609cf">glm::aligned_lowp_uvec3</a></div><div class="ttdeci">tvec3< uint, aligned_lowp > aligned_lowp_uvec3</div><div class="ttdoc">3 components vector of low precision unsigned integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00179">gtc/type_aligned.hpp:179</a></div></div>
+<div class="ttc" id="a00176_html_ga0b5e3c64f8dbadfc42a2aca5f2da9692"><div class="ttname"><a href="a00176.html#ga0b5e3c64f8dbadfc42a2aca5f2da9692">glm::aligned_lowp_bvec4</a></div><div class="ttdeci">tvec4< bool, aligned_lowp > aligned_lowp_bvec4</div><div class="ttdoc">4 components vector of low precision bool numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00235">gtc/type_aligned.hpp:235</a></div></div>
+<div class="ttc" id="a00176_html_gaa37869eea77d28419b2fb0ff70b69bf0"><div class="ttname"><a href="a00176.html#gaa37869eea77d28419b2fb0ff70b69bf0">glm::aligned_dvec3</a></div><div class="ttdeci">aligned_highp_dvec3 aligned_dvec3</div><div class="ttdoc">3 components vector of double-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00281">gtc/type_aligned.hpp:281</a></div></div>
+<div class="ttc" id="a00176_html_ga0682462f8096a226773e20fac993cde5"><div class="ttname"><a href="a00176.html#ga0682462f8096a226773e20fac993cde5">glm::aligned_vec2</a></div><div class="ttdeci">aligned_highp_vec2 aligned_vec2</div><div class="ttdoc">2 components vector of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00254">gtc/type_aligned.hpp:254</a></div></div>
+<div class="ttc" id="a00176_html_gae1964ba70d15915e5b710926decbb3cb"><div class="ttname"><a href="a00176.html#gae1964ba70d15915e5b710926decbb3cb">glm::aligned_bvec3</a></div><div class="ttdeci">aligned_highp_bvec3 aligned_bvec3</div><div class="ttdoc">3 components vector of boolean. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00355">gtc/type_aligned.hpp:355</a></div></div>
+<div class="ttc" id="a00176_html_gab70c189b4691715b3f7f0abb35c65b2f"><div class="ttname"><a href="a00176.html#gab70c189b4691715b3f7f0abb35c65b2f">glm::aligned_lowp_dvec2</a></div><div class="ttdeci">tvec2< double, aligned_lowp > aligned_lowp_dvec2</div><div class="ttdoc">2 components vector of low double-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00093">gtc/type_aligned.hpp:93</a></div></div>
+<div class="ttc" id="a00176_html_ga54f6765716867706643bde03211d600f"><div class="ttname"><a href="a00176.html#ga54f6765716867706643bde03211d600f">glm::aligned_highp_dvec3</a></div><div class="ttdeci">tvec3< double, aligned_highp > aligned_highp_dvec3</div><div class="ttdoc">3 components vector of high double-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00147">gtc/type_aligned.hpp:147</a></div></div>
+<div class="ttc" id="a00176_html_gabf842c45eea186170c267a328e3f3b7d"><div class="ttname"><a href="a00176.html#gabf842c45eea186170c267a328e3f3b7d">glm::aligned_uvec4</a></div><div class="ttdeci">aligned_highp_uvec4 aligned_uvec4</div><div class="ttdoc">4 components vector of unsigned integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00334">gtc/type_aligned.hpp:334</a></div></div>
+<div class="ttc" id="a00176_html_gae234a3a1c6288fa5e2d4c78c5e39002e"><div class="ttname"><a href="a00176.html#gae234a3a1c6288fa5e2d4c78c5e39002e">glm::aligned_highp_ivec3</a></div><div class="ttdeci">tvec3< int, aligned_highp > aligned_highp_ivec3</div><div class="ttdoc">3 components vector of high precision signed integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00159">gtc/type_aligned.hpp:159</a></div></div>
+<div class="ttc" id="a00176_html_gac56a4ce85b6233998139a7c1ac337440"><div class="ttname"><a href="a00176.html#gac56a4ce85b6233998139a7c1ac337440">glm::aligned_highp_uvec4</a></div><div class="ttdeci">tvec4< uint, aligned_highp > aligned_highp_uvec4</div><div class="ttdoc">4 components vector of high precision unsigned integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00220">gtc/type_aligned.hpp:220</a></div></div>
+<div class="ttc" id="a00176_html_ga15355ffc7ec7931b81ba76736b65e51a"><div class="ttname"><a href="a00176.html#ga15355ffc7ec7931b81ba76736b65e51a">glm::aligned_lowp_uvec2</a></div><div class="ttdeci">tvec2< uint, aligned_lowp > aligned_lowp_uvec2</div><div class="ttdoc">2 components vector of low precision unsigned integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00117">gtc/type_aligned.hpp:117</a></div></div>
+<div class="ttc" id="a00176_html_ga5b16f7e81555819bf0f80f4db4bc0b26"><div class="ttname"><a href="a00176.html#ga5b16f7e81555819bf0f80f4db4bc0b26">glm::aligned_mediump_ivec3</a></div><div class="ttdeci">tvec3< int, aligned_mediump > aligned_mediump_ivec3</div><div class="ttdoc">3 components vector of medium precision signed integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00163">gtc/type_aligned.hpp:163</a></div></div>
+<div class="ttc" id="a00176_html_ga3cfc38b4ea9b9bd1e9f02dcc14eab367"><div class="ttname"><a href="a00176.html#ga3cfc38b4ea9b9bd1e9f02dcc14eab367">glm::aligned_lowp_vec2</a></div><div class="ttdeci">tvec2< float, aligned_lowp > aligned_lowp_vec2</div><div class="ttdoc">2 components vector of low single-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00081">gtc/type_aligned.hpp:81</a></div></div>
+<div class="ttc" id="a00176_html_ga2a8d9c3046f89d854eb758adfa0811c0"><div class="ttname"><a href="a00176.html#ga2a8d9c3046f89d854eb758adfa0811c0">glm::aligned_uvec3</a></div><div class="ttdeci">aligned_highp_uvec3 aligned_uvec3</div><div class="ttdoc">3 components vector of unsigned integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00331">gtc/type_aligned.hpp:331</a></div></div>
+<div class="ttc" id="a00176_html_gae2938d64c6a46f721681607c2ab3f884"><div class="ttname"><a href="a00176.html#gae2938d64c6a46f721681607c2ab3f884">glm::aligned_highp_vec4</a></div><div class="ttdeci">tvec4< float, aligned_highp > aligned_highp_vec4</div><div class="ttdoc">4 components vector of high single-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00193">gtc/type_aligned.hpp:193</a></div></div>
+<div class="ttc" id="a00176_html_gae4ab68a8c32574bff14e62f95185d295"><div class="ttname"><a href="a00176.html#gae4ab68a8c32574bff14e62f95185d295">glm::aligned_mediump_vec4</a></div><div class="ttdeci">tvec4< float, aligned_mediump > aligned_mediump_vec4</div><div class="ttdoc">4 components vector of medium single-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00196">gtc/type_aligned.hpp:196</a></div></div>
+<div class="ttc" id="a00176_html_ga7366a38dc888164e623fc10663e97670"><div class="ttname"><a href="a00176.html#ga7366a38dc888164e623fc10663e97670">glm::aligned_highp_uvec2</a></div><div class="ttdeci">tvec2< uint, aligned_highp > aligned_highp_uvec2</div><div class="ttdoc">2 components vector of high precision unsigned integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00109">gtc/type_aligned.hpp:109</a></div></div>
+<div class="ttc" id="a00176_html_ga21fb6238997b4a21848411b16bc34e93"><div class="ttname"><a href="a00176.html#ga21fb6238997b4a21848411b16bc34e93">glm::aligned_lowp_bvec3</a></div><div class="ttdeci">tvec3< bool, aligned_lowp > aligned_lowp_bvec3</div><div class="ttdoc">3 components vector of low precision bool numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00188">gtc/type_aligned.hpp:188</a></div></div>
+<div class="ttc" id="a00176_html_ga780a35f764020f553a9601a3fcdcd059"><div class="ttname"><a href="a00176.html#ga780a35f764020f553a9601a3fcdcd059">glm::aligned_bvec1</a></div><div class="ttdeci">aligned_highp_bvec1 aligned_bvec1</div><div class="ttdoc">1 component vector of boolean. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00349">gtc/type_aligned.hpp:349</a></div></div>
+<div class="ttc" id="a00176_html_ga55fb20d4e73a65c834b5861fc6cf4c36"><div class="ttname"><a href="a00176.html#ga55fb20d4e73a65c834b5861fc6cf4c36">glm::aligned_highp_vec3</a></div><div class="ttdeci">tvec3< float, aligned_highp > aligned_highp_vec3</div><div class="ttdoc">3 components vector of high single-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00135">gtc/type_aligned.hpp:135</a></div></div>
+<div class="ttc" id="a00176_html_ga8e5a90ed034e9e7414ff71e66a79139e"><div class="ttname"><a href="a00176.html#ga8e5a90ed034e9e7414ff71e66a79139e">glm::aligned_highp_dvec4</a></div><div class="ttdeci">tvec4< double, aligned_highp > aligned_highp_dvec4</div><div class="ttdoc">4 components vector of high double-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00202">gtc/type_aligned.hpp:202</a></div></div>
+<div class="ttc" id="a00176_html_ga1ff8ed402c93d280ff0597c1c5e7c548"><div class="ttname"><a href="a00176.html#ga1ff8ed402c93d280ff0597c1c5e7c548">glm::aligned_uvec1</a></div><div class="ttdeci">aligned_highp_uvec1 aligned_uvec1</div><div class="ttdoc">1 component vector of unsigned integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00325">gtc/type_aligned.hpp:325</a></div></div>
+<div class="ttc" id="a00176_html_gaea854184b9d574fc5e75b5709a4974e8"><div class="ttname"><a href="a00176.html#gaea854184b9d574fc5e75b5709a4974e8">glm::aligned_highp_vec2</a></div><div class="ttdeci">tvec2< float, aligned_highp > aligned_highp_vec2</div><div class="ttdoc">2 components vector of high single-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00073">gtc/type_aligned.hpp:73</a></div></div>
+<div class="ttc" id="a00176_html_gaed5d4dd2755cc5141a9533488edd9e82"><div class="ttname"><a href="a00176.html#gaed5d4dd2755cc5141a9533488edd9e82">glm::aligned_mediump_vec3</a></div><div class="ttdeci">tvec3< float, aligned_mediump > aligned_mediump_vec3</div><div class="ttdoc">3 components vector of medium single-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00139">gtc/type_aligned.hpp:139</a></div></div>
+<div class="ttc" id="a00176_html_ga85d89e83cb8137e1be1446de8c3b643a"><div class="ttname"><a href="a00176.html#ga85d89e83cb8137e1be1446de8c3b643a">glm::aligned_vec4</a></div><div class="ttdeci">aligned_highp_vec4 aligned_vec4</div><div class="ttdoc">4 components vector of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00260">gtc/type_aligned.hpp:260</a></div></div>
+<div class="ttc" id="a00176_html_ga4f78cd6d9c5827771e35921b4a92855a"><div class="ttname"><a href="a00176.html#ga4f78cd6d9c5827771e35921b4a92855a">glm::aligned_mediump_bvec3</a></div><div class="ttdeci">tvec3< bool, aligned_mediump > aligned_mediump_bvec3</div><div class="ttdoc">3 components vector of medium precision bool numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00185">gtc/type_aligned.hpp:185</a></div></div>
+<div class="ttc" id="a00176_html_ga2cb80e2d4d351abeadac7b1676a91fd9"><div class="ttname"><a href="a00176.html#ga2cb80e2d4d351abeadac7b1676a91fd9">glm::aligned_mediump_bvec4</a></div><div class="ttdeci">tvec4< bool, aligned_mediump > aligned_mediump_bvec4</div><div class="ttdoc">4 components vector of medium precision bool numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00232">gtc/type_aligned.hpp:232</a></div></div>
+<div class="ttc" id="a00176_html_ga57549b1281d99ba1825b1ef0dae6227d"><div class="ttname"><a href="a00176.html#ga57549b1281d99ba1825b1ef0dae6227d">glm::aligned_mediump_vec2</a></div><div class="ttdeci">tvec2< float, aligned_mediump > aligned_mediump_vec2</div><div class="ttdoc">2 components vector of medium single-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00077">gtc/type_aligned.hpp:77</a></div></div>
+<div class="ttc" id="a00176_html_ga7f79eae5927c9033d84617e49f6f34e4"><div class="ttname"><a href="a00176.html#ga7f79eae5927c9033d84617e49f6f34e4">glm::aligned_ivec4</a></div><div class="ttdeci">aligned_highp_ivec4 aligned_ivec4</div><div class="ttdoc">4 components vector of signed integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00308">gtc/type_aligned.hpp:308</a></div></div>
+<div class="ttc" id="a00176_html_ga77d37d7c80c7faa2eecb3eba7677750e"><div class="ttname"><a href="a00176.html#ga77d37d7c80c7faa2eecb3eba7677750e">glm::aligned_mediump_bvec2</a></div><div class="ttdeci">tvec2< bool, aligned_mediump > aligned_mediump_bvec2</div><div class="ttdoc">2 components vector of medium precision bool numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00125">gtc/type_aligned.hpp:125</a></div></div>
+<div class="ttc" id="a00176_html_gabeec3d5ec99c196f4c0eb03b58d486ee"><div class="ttname"><a href="a00176.html#gabeec3d5ec99c196f4c0eb03b58d486ee">glm::aligned_lowp_dvec3</a></div><div class="ttdeci">tvec3< double, aligned_lowp > aligned_lowp_dvec3</div><div class="ttdoc">3 components vector of low double-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00155">gtc/type_aligned.hpp:155</a></div></div>
+<div class="ttc" id="a00176_html_ga40b0e05306f666f835ac97c963302ecb"><div class="ttname"><a href="a00176.html#ga40b0e05306f666f835ac97c963302ecb">glm::aligned_lowp_uvec4</a></div><div class="ttdeci">tvec4< uint, aligned_lowp > aligned_lowp_uvec4</div><div class="ttdoc">4 components vector of low precision unsigned integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00226">gtc/type_aligned.hpp:226</a></div></div>
+<div class="ttc" id="a00176_html_gab6ddd9d1421eb610ddeb32705fed7026"><div class="ttname"><a href="a00176.html#gab6ddd9d1421eb610ddeb32705fed7026">glm::aligned_highp_ivec2</a></div><div class="ttdeci">tvec2< int, aligned_highp > aligned_highp_ivec2</div><div class="ttdoc">2 components vector of high precision signed integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00097">gtc/type_aligned.hpp:97</a></div></div>
+<div class="ttc" id="a00176_html_ga18d859f87122b2b3b2992ffe86dbebc0"><div class="ttname"><a href="a00176.html#ga18d859f87122b2b3b2992ffe86dbebc0">glm::aligned_dvec2</a></div><div class="ttdeci">aligned_highp_dvec2 aligned_dvec2</div><div class="ttdoc">2 components vector of double-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00278">gtc/type_aligned.hpp:278</a></div></div>
+<div class="ttc" id="a00176_html_ga074137e3be58528d67041c223d49f398"><div class="ttname"><a href="a00176.html#ga074137e3be58528d67041c223d49f398">glm::aligned_uvec2</a></div><div class="ttdeci">aligned_highp_uvec2 aligned_uvec2</div><div class="ttdoc">2 components vector of unsigned integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00328">gtc/type_aligned.hpp:328</a></div></div>
+<div class="ttc" id="a00176_html_gad744848a2e4ddd2f041e6ec8d13600ae"><div class="ttname"><a href="a00176.html#gad744848a2e4ddd2f041e6ec8d13600ae">glm::aligned_lowp_ivec4</a></div><div class="ttdeci">tvec4< int, aligned_lowp > aligned_lowp_ivec4</div><div class="ttdoc">4 components vector of low precision signed integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00217">gtc/type_aligned.hpp:217</a></div></div>
+<div class="ttc" id="a00176_html_gad69bf7c406a3cec994307473cb3da032"><div class="ttname"><a href="a00176.html#gad69bf7c406a3cec994307473cb3da032">glm::aligned_lowp_ivec2</a></div><div class="ttdeci">tvec2< int, aligned_lowp > aligned_lowp_ivec2</div><div class="ttdoc">2 components vector of low precision signed integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00105">gtc/type_aligned.hpp:105</a></div></div>
+<div class="ttc" id="a00176_html_ga05e6d4c908965d04191c2070a8d0a65e"><div class="ttname"><a href="a00176.html#ga05e6d4c908965d04191c2070a8d0a65e">glm::aligned_vec1</a></div><div class="ttdeci">aligned_highp_vec1 aligned_vec1</div><div class="ttdoc">1 component vector of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00251">gtc/type_aligned.hpp:251</a></div></div>
+<div class="ttc" id="a00176_html_gaab365ee7cfd19bab449daa8f7eb0ca71"><div class="ttname"><a href="a00176.html#gaab365ee7cfd19bab449daa8f7eb0ca71">glm::aligned_lowp_dvec4</a></div><div class="ttdeci">tvec4< double, aligned_lowp > aligned_lowp_dvec4</div><div class="ttdoc">4 components vector of low double-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00208">gtc/type_aligned.hpp:208</a></div></div>
+<div class="ttc" id="a00176_html_gae640082d0ffdb52fb2d658916c5815db"><div class="ttname"><a href="a00176.html#gae640082d0ffdb52fb2d658916c5815db">glm::aligned_mediump_ivec4</a></div><div class="ttdeci">tvec4< int, aligned_mediump > aligned_mediump_ivec4</div><div class="ttdoc">4 components vector of medium precision signed integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00214">gtc/type_aligned.hpp:214</a></div></div>
+<div class="ttc" id="a00176_html_ga3adba191018d2de1dc2834a2ff5597d7"><div class="ttname"><a href="a00176.html#ga3adba191018d2de1dc2834a2ff5597d7">glm::aligned_highp_bvec3</a></div><div class="ttdeci">tvec3< bool, aligned_highp > aligned_highp_bvec3</div><div class="ttdoc">3 components vector of high precision bool numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00182">gtc/type_aligned.hpp:182</a></div></div>
+<div class="ttc" id="a00176_html_gae4f38fd2c86cee6940986197777b3ca4"><div class="ttname"><a href="a00176.html#gae4f38fd2c86cee6940986197777b3ca4">glm::aligned_ivec2</a></div><div class="ttdeci">aligned_highp_ivec2 aligned_ivec2</div><div class="ttdoc">2 components vector of signed integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00302">gtc/type_aligned.hpp:302</a></div></div>
+<div class="ttc" id="a00176_html_ga1e3286a27b19f25801fb435b6d1225fb"><div class="ttname"><a href="a00176.html#ga1e3286a27b19f25801fb435b6d1225fb">glm::aligned_highp_ivec4</a></div><div class="ttdeci">tvec4< int, aligned_highp > aligned_highp_ivec4</div><div class="ttdoc">4 components vector of high precision signed integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00211">gtc/type_aligned.hpp:211</a></div></div>
+<div class="ttc" id="a00176_html_ga32794322d294e5ace7fed4a61896f270"><div class="ttname"><a href="a00176.html#ga32794322d294e5ace7fed4a61896f270">glm::aligned_ivec3</a></div><div class="ttdeci">aligned_highp_ivec3 aligned_ivec3</div><div class="ttdoc">3 components vector of signed integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00305">gtc/type_aligned.hpp:305</a></div></div>
+<div class="ttc" id="a00176_html_ga186b90f0ba86724e080d237f3f5f9417"><div class="ttname"><a href="a00176.html#ga186b90f0ba86724e080d237f3f5f9417">glm::aligned_highp_dvec2</a></div><div class="ttdeci">tvec2< double, aligned_highp > aligned_highp_dvec2</div><div class="ttdoc">2 components vector of high double-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00085">gtc/type_aligned.hpp:85</a></div></div>
+<div class="ttc" id="a00176_html_ga7cf643b66664e0cd3c48759ae66c2bd0"><div class="ttname"><a href="a00176.html#ga7cf643b66664e0cd3c48759ae66c2bd0">glm::aligned_vec3</a></div><div class="ttdeci">aligned_highp_vec3 aligned_vec3</div><div class="ttdoc">3 components vector of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00257">gtc/type_aligned.hpp:257</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00109.html b/src/third_party/glm/doc/api/a00109.html
new file mode 100644
index 0000000..91e30c4
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00109.html
@@ -0,0 +1,493 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: type_aligned.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">gtx/type_aligned.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00109_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gab5cd5c5fad228b25c782084f1cc30114"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gab5cd5c5fad228b25c782084f1cc30114">GLM_ALIGNED_TYPEDEF</a> (lowp_int8, aligned_lowp_int8, 1)</td></tr>
+<tr class="separator:gab5cd5c5fad228b25c782084f1cc30114"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5bb5dd895ef625c1b113f2cf400186b0"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga5bb5dd895ef625c1b113f2cf400186b0">GLM_ALIGNED_TYPEDEF</a> (lowp_int16, aligned_lowp_int16, 2)</td></tr>
+<tr class="separator:ga5bb5dd895ef625c1b113f2cf400186b0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac6efa54cf7c6c86f7158922abdb1a430"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gac6efa54cf7c6c86f7158922abdb1a430">GLM_ALIGNED_TYPEDEF</a> (lowp_int32, aligned_lowp_int32, 4)</td></tr>
+<tr class="separator:gac6efa54cf7c6c86f7158922abdb1a430"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6612eb77c8607048e7552279a11eeb5f"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga6612eb77c8607048e7552279a11eeb5f">GLM_ALIGNED_TYPEDEF</a> (lowp_int64, aligned_lowp_int64, 8)</td></tr>
+<tr class="separator:ga6612eb77c8607048e7552279a11eeb5f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7ddc1848ff2223026db8968ce0c97497"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga7ddc1848ff2223026db8968ce0c97497">GLM_ALIGNED_TYPEDEF</a> (lowp_int8_t, aligned_lowp_int8_t, 1)</td></tr>
+<tr class="separator:ga7ddc1848ff2223026db8968ce0c97497"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga22240dd9458b0f8c11fbcc4f48714f68"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga22240dd9458b0f8c11fbcc4f48714f68">GLM_ALIGNED_TYPEDEF</a> (lowp_int16_t, aligned_lowp_int16_t, 2)</td></tr>
+<tr class="separator:ga22240dd9458b0f8c11fbcc4f48714f68"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8130ea381d76a2cc34a93ccbb6cf487d"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga8130ea381d76a2cc34a93ccbb6cf487d">GLM_ALIGNED_TYPEDEF</a> (lowp_int32_t, aligned_lowp_int32_t, 4)</td></tr>
+<tr class="separator:ga8130ea381d76a2cc34a93ccbb6cf487d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7ccb60f3215d293fd62b33b31ed0e7be"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga7ccb60f3215d293fd62b33b31ed0e7be">GLM_ALIGNED_TYPEDEF</a> (lowp_int64_t, aligned_lowp_int64_t, 8)</td></tr>
+<tr class="separator:ga7ccb60f3215d293fd62b33b31ed0e7be"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac20d508d2ef5cc95ad3daf083c57ec2a"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gac20d508d2ef5cc95ad3daf083c57ec2a">GLM_ALIGNED_TYPEDEF</a> (lowp_i8, aligned_lowp_i8, 1)</td></tr>
+<tr class="separator:gac20d508d2ef5cc95ad3daf083c57ec2a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga50257b48069a31d0c8d9c1f644d267de"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga50257b48069a31d0c8d9c1f644d267de">GLM_ALIGNED_TYPEDEF</a> (lowp_i16, aligned_lowp_i16, 2)</td></tr>
+<tr class="separator:ga50257b48069a31d0c8d9c1f644d267de"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa07e98e67b7a3435c0746018c7a2a839"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gaa07e98e67b7a3435c0746018c7a2a839">GLM_ALIGNED_TYPEDEF</a> (lowp_i32, aligned_lowp_i32, 4)</td></tr>
+<tr class="separator:gaa07e98e67b7a3435c0746018c7a2a839"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga62601fc6f8ca298b77285bedf03faffd"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga62601fc6f8ca298b77285bedf03faffd">GLM_ALIGNED_TYPEDEF</a> (lowp_i64, aligned_lowp_i64, 8)</td></tr>
+<tr class="separator:ga62601fc6f8ca298b77285bedf03faffd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac8cff825951aeb54dd846037113c72db"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gac8cff825951aeb54dd846037113c72db">GLM_ALIGNED_TYPEDEF</a> (mediump_int8, aligned_mediump_int8, 1)</td></tr>
+<tr class="separator:gac8cff825951aeb54dd846037113c72db"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga78f443d88f438575a62b5df497cdf66b"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga78f443d88f438575a62b5df497cdf66b">GLM_ALIGNED_TYPEDEF</a> (mediump_int16, aligned_mediump_int16, 2)</td></tr>
+<tr class="separator:ga78f443d88f438575a62b5df497cdf66b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0680cd3b5d4e8006985fb41a4f9b57af"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga0680cd3b5d4e8006985fb41a4f9b57af">GLM_ALIGNED_TYPEDEF</a> (mediump_int32, aligned_mediump_int32, 4)</td></tr>
+<tr class="separator:ga0680cd3b5d4e8006985fb41a4f9b57af"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad9e5babb1dd3e3531b42c37bf25dd951"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gad9e5babb1dd3e3531b42c37bf25dd951">GLM_ALIGNED_TYPEDEF</a> (mediump_int64, aligned_mediump_int64, 8)</td></tr>
+<tr class="separator:gad9e5babb1dd3e3531b42c37bf25dd951"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga353fd9fa8a9ad952fcabd0d53ad9a6dd"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga353fd9fa8a9ad952fcabd0d53ad9a6dd">GLM_ALIGNED_TYPEDEF</a> (mediump_int8_t, aligned_mediump_int8_t, 1)</td></tr>
+<tr class="separator:ga353fd9fa8a9ad952fcabd0d53ad9a6dd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2196442c0e5c5e8c77842de388c42521"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga2196442c0e5c5e8c77842de388c42521">GLM_ALIGNED_TYPEDEF</a> (mediump_int16_t, aligned_mediump_int16_t, 2)</td></tr>
+<tr class="separator:ga2196442c0e5c5e8c77842de388c42521"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1284488189daf897cf095c5eefad9744"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga1284488189daf897cf095c5eefad9744">GLM_ALIGNED_TYPEDEF</a> (mediump_int32_t, aligned_mediump_int32_t, 4)</td></tr>
+<tr class="separator:ga1284488189daf897cf095c5eefad9744"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga73fdc86a539808af58808b7c60a1c4d8"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga73fdc86a539808af58808b7c60a1c4d8">GLM_ALIGNED_TYPEDEF</a> (mediump_int64_t, aligned_mediump_int64_t, 8)</td></tr>
+<tr class="separator:ga73fdc86a539808af58808b7c60a1c4d8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafafeea923e1983262c972e2b83922d3b"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gafafeea923e1983262c972e2b83922d3b">GLM_ALIGNED_TYPEDEF</a> (mediump_i8, aligned_mediump_i8, 1)</td></tr>
+<tr class="separator:gafafeea923e1983262c972e2b83922d3b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4b35ca5fe8f55c9d2fe54fdb8d8896f4"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga4b35ca5fe8f55c9d2fe54fdb8d8896f4">GLM_ALIGNED_TYPEDEF</a> (mediump_i16, aligned_mediump_i16, 2)</td></tr>
+<tr class="separator:ga4b35ca5fe8f55c9d2fe54fdb8d8896f4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga63b882e29170d428463d99c3d630acc6"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga63b882e29170d428463d99c3d630acc6">GLM_ALIGNED_TYPEDEF</a> (mediump_i32, aligned_mediump_i32, 4)</td></tr>
+<tr class="separator:ga63b882e29170d428463d99c3d630acc6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8b20507bb048c1edea2d441cc953e6f0"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga8b20507bb048c1edea2d441cc953e6f0">GLM_ALIGNED_TYPEDEF</a> (mediump_i64, aligned_mediump_i64, 8)</td></tr>
+<tr class="separator:ga8b20507bb048c1edea2d441cc953e6f0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga56c5ca60813027b603c7b61425a0479d"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga56c5ca60813027b603c7b61425a0479d">GLM_ALIGNED_TYPEDEF</a> (highp_int8, aligned_highp_int8, 1)</td></tr>
+<tr class="separator:ga56c5ca60813027b603c7b61425a0479d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7a751b3aff24c0259f4a7357c2969089"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga7a751b3aff24c0259f4a7357c2969089">GLM_ALIGNED_TYPEDEF</a> (highp_int16, aligned_highp_int16, 2)</td></tr>
+<tr class="separator:ga7a751b3aff24c0259f4a7357c2969089"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga70cd2144351c556469ee6119e59971fc"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga70cd2144351c556469ee6119e59971fc">GLM_ALIGNED_TYPEDEF</a> (highp_int32, aligned_highp_int32, 4)</td></tr>
+<tr class="separator:ga70cd2144351c556469ee6119e59971fc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga46bbf08dc004d8c433041e0b5018a5d3"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga46bbf08dc004d8c433041e0b5018a5d3">GLM_ALIGNED_TYPEDEF</a> (highp_int64, aligned_highp_int64, 8)</td></tr>
+<tr class="separator:ga46bbf08dc004d8c433041e0b5018a5d3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab3e10c77a20d1abad2de1c561c7a5c18"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gab3e10c77a20d1abad2de1c561c7a5c18">GLM_ALIGNED_TYPEDEF</a> (highp_int8_t, aligned_highp_int8_t, 1)</td></tr>
+<tr class="separator:gab3e10c77a20d1abad2de1c561c7a5c18"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga968f30319ebeaca9ebcd3a25a8e139fb"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga968f30319ebeaca9ebcd3a25a8e139fb">GLM_ALIGNED_TYPEDEF</a> (highp_int16_t, aligned_highp_int16_t, 2)</td></tr>
+<tr class="separator:ga968f30319ebeaca9ebcd3a25a8e139fb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaae773c28e6390c6aa76f5b678b7098a3"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gaae773c28e6390c6aa76f5b678b7098a3">GLM_ALIGNED_TYPEDEF</a> (highp_int32_t, aligned_highp_int32_t, 4)</td></tr>
+<tr class="separator:gaae773c28e6390c6aa76f5b678b7098a3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga790cfff1ca39d0ed696ffed980809311"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga790cfff1ca39d0ed696ffed980809311">GLM_ALIGNED_TYPEDEF</a> (highp_int64_t, aligned_highp_int64_t, 8)</td></tr>
+<tr class="separator:ga790cfff1ca39d0ed696ffed980809311"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8265b91eb23c120a9b0c3e381bc37b96"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga8265b91eb23c120a9b0c3e381bc37b96">GLM_ALIGNED_TYPEDEF</a> (highp_i8, aligned_highp_i8, 1)</td></tr>
+<tr class="separator:ga8265b91eb23c120a9b0c3e381bc37b96"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae6d384de17588d8edb894fbe06e0d410"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gae6d384de17588d8edb894fbe06e0d410">GLM_ALIGNED_TYPEDEF</a> (highp_i16, aligned_highp_i16, 2)</td></tr>
+<tr class="separator:gae6d384de17588d8edb894fbe06e0d410"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9c8172b745ee03fc5b2b91c350c2922f"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga9c8172b745ee03fc5b2b91c350c2922f">GLM_ALIGNED_TYPEDEF</a> (highp_i32, aligned_highp_i32, 4)</td></tr>
+<tr class="separator:ga9c8172b745ee03fc5b2b91c350c2922f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga77e0dff12aa4020ddc3f8cabbea7b2e6"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga77e0dff12aa4020ddc3f8cabbea7b2e6">GLM_ALIGNED_TYPEDEF</a> (highp_i64, aligned_highp_i64, 8)</td></tr>
+<tr class="separator:ga77e0dff12aa4020ddc3f8cabbea7b2e6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gabd82b9faa9d4d618dbbe0fc8a1efee63"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gabd82b9faa9d4d618dbbe0fc8a1efee63">GLM_ALIGNED_TYPEDEF</a> (int8, aligned_int8, 1)</td></tr>
+<tr class="separator:gabd82b9faa9d4d618dbbe0fc8a1efee63"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga285649744560be21000cfd81bbb5d507"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga285649744560be21000cfd81bbb5d507">GLM_ALIGNED_TYPEDEF</a> (int16, aligned_int16, 2)</td></tr>
+<tr class="separator:ga285649744560be21000cfd81bbb5d507"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga07732da630b2deda428ce95c0ecaf3ff"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga07732da630b2deda428ce95c0ecaf3ff">GLM_ALIGNED_TYPEDEF</a> (int32, aligned_int32, 4)</td></tr>
+<tr class="separator:ga07732da630b2deda428ce95c0ecaf3ff"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1a8da2a8c51f69c07a2e7f473aa420f4"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga1a8da2a8c51f69c07a2e7f473aa420f4">GLM_ALIGNED_TYPEDEF</a> (int64, aligned_int64, 8)</td></tr>
+<tr class="separator:ga1a8da2a8c51f69c07a2e7f473aa420f4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga848aedf13e2d9738acf0bb482c590174"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga848aedf13e2d9738acf0bb482c590174">GLM_ALIGNED_TYPEDEF</a> (int8_t, aligned_int8_t, 1)</td></tr>
+<tr class="separator:ga848aedf13e2d9738acf0bb482c590174"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafd2803d39049dd45a37a63931e25d943"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gafd2803d39049dd45a37a63931e25d943">GLM_ALIGNED_TYPEDEF</a> (int16_t, aligned_int16_t, 2)</td></tr>
+<tr class="separator:gafd2803d39049dd45a37a63931e25d943"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae553b33349d6da832cf0724f1e024094"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gae553b33349d6da832cf0724f1e024094">GLM_ALIGNED_TYPEDEF</a> (int32_t, aligned_int32_t, 4)</td></tr>
+<tr class="separator:gae553b33349d6da832cf0724f1e024094"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga16d223a2b3409e812e1d3bd87f0e9e5c"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga16d223a2b3409e812e1d3bd87f0e9e5c">GLM_ALIGNED_TYPEDEF</a> (int64_t, aligned_int64_t, 8)</td></tr>
+<tr class="separator:ga16d223a2b3409e812e1d3bd87f0e9e5c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2de065d2ddfdb366bcd0febca79ae2ad"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga2de065d2ddfdb366bcd0febca79ae2ad">GLM_ALIGNED_TYPEDEF</a> (i8, aligned_i8, 1)</td></tr>
+<tr class="separator:ga2de065d2ddfdb366bcd0febca79ae2ad"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gabd786bdc20a11c8cb05c92c8212e28d3"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gabd786bdc20a11c8cb05c92c8212e28d3">GLM_ALIGNED_TYPEDEF</a> (i16, aligned_i16, 2)</td></tr>
+<tr class="separator:gabd786bdc20a11c8cb05c92c8212e28d3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad4aefe56691cdb640c72f0d46d3fb532"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gad4aefe56691cdb640c72f0d46d3fb532">GLM_ALIGNED_TYPEDEF</a> (i32, aligned_i32, 4)</td></tr>
+<tr class="separator:gad4aefe56691cdb640c72f0d46d3fb532"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8fe9745f7de24a8394518152ff9fccdc"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga8fe9745f7de24a8394518152ff9fccdc">GLM_ALIGNED_TYPEDEF</a> (i64, aligned_i64, 8)</td></tr>
+<tr class="separator:ga8fe9745f7de24a8394518152ff9fccdc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaaad735483450099f7f882d4e3a3569bd"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gaaad735483450099f7f882d4e3a3569bd">GLM_ALIGNED_TYPEDEF</a> (ivec1, aligned_ivec1, 4)</td></tr>
+<tr class="separator:gaaad735483450099f7f882d4e3a3569bd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac7b6f823802edbd6edbaf70ea25bf068"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gac7b6f823802edbd6edbaf70ea25bf068">GLM_ALIGNED_TYPEDEF</a> (ivec2, aligned_ivec2, 8)</td></tr>
+<tr class="separator:gac7b6f823802edbd6edbaf70ea25bf068"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3e235bcd2b8029613f25b8d40a2d3ef7"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga3e235bcd2b8029613f25b8d40a2d3ef7">GLM_ALIGNED_TYPEDEF</a> (ivec3, aligned_ivec3, 16)</td></tr>
+<tr class="separator:ga3e235bcd2b8029613f25b8d40a2d3ef7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga50d8a9523968c77f8325b4c9bfbff41e"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga50d8a9523968c77f8325b4c9bfbff41e">GLM_ALIGNED_TYPEDEF</a> (ivec4, aligned_ivec4, 16)</td></tr>
+<tr class="separator:ga50d8a9523968c77f8325b4c9bfbff41e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9ec20fdfb729c702032da9378c79679f"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga9ec20fdfb729c702032da9378c79679f">GLM_ALIGNED_TYPEDEF</a> (i8vec1, aligned_i8vec1, 1)</td></tr>
+<tr class="separator:ga9ec20fdfb729c702032da9378c79679f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga25b3fe1d9e8d0a5e86c1949c1acd8131"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga25b3fe1d9e8d0a5e86c1949c1acd8131">GLM_ALIGNED_TYPEDEF</a> (i8vec2, aligned_i8vec2, 2)</td></tr>
+<tr class="separator:ga25b3fe1d9e8d0a5e86c1949c1acd8131"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2958f907719d94d8109b562540c910e2"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga2958f907719d94d8109b562540c910e2">GLM_ALIGNED_TYPEDEF</a> (i8vec3, aligned_i8vec3, 4)</td></tr>
+<tr class="separator:ga2958f907719d94d8109b562540c910e2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1fe6fc032a978f1c845fac9aa0668714"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga1fe6fc032a978f1c845fac9aa0668714">GLM_ALIGNED_TYPEDEF</a> (i8vec4, aligned_i8vec4, 4)</td></tr>
+<tr class="separator:ga1fe6fc032a978f1c845fac9aa0668714"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa4161e7a496dc96972254143fe873e55"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gaa4161e7a496dc96972254143fe873e55">GLM_ALIGNED_TYPEDEF</a> (i16vec1, aligned_i16vec1, 2)</td></tr>
+<tr class="separator:gaa4161e7a496dc96972254143fe873e55"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9d7cb211ccda69b1c22ddeeb0f3e7aba"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga9d7cb211ccda69b1c22ddeeb0f3e7aba">GLM_ALIGNED_TYPEDEF</a> (i16vec2, aligned_i16vec2, 4)</td></tr>
+<tr class="separator:ga9d7cb211ccda69b1c22ddeeb0f3e7aba"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaaee91dd2ab34423bcc11072ef6bd0f02"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gaaee91dd2ab34423bcc11072ef6bd0f02">GLM_ALIGNED_TYPEDEF</a> (i16vec3, aligned_i16vec3, 8)</td></tr>
+<tr class="separator:gaaee91dd2ab34423bcc11072ef6bd0f02"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga49f047ccaa8b31fad9f26c67bf9b3510"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga49f047ccaa8b31fad9f26c67bf9b3510">GLM_ALIGNED_TYPEDEF</a> (i16vec4, aligned_i16vec4, 8)</td></tr>
+<tr class="separator:ga49f047ccaa8b31fad9f26c67bf9b3510"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga904e9c2436bb099397c0823506a0771f"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga904e9c2436bb099397c0823506a0771f">GLM_ALIGNED_TYPEDEF</a> (i32vec1, aligned_i32vec1, 4)</td></tr>
+<tr class="separator:ga904e9c2436bb099397c0823506a0771f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf90651cf2f5e7ee2b11cfdc5a6749534"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gaf90651cf2f5e7ee2b11cfdc5a6749534">GLM_ALIGNED_TYPEDEF</a> (i32vec2, aligned_i32vec2, 8)</td></tr>
+<tr class="separator:gaf90651cf2f5e7ee2b11cfdc5a6749534"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7354a4ead8cb17868aec36b9c30d6010"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga7354a4ead8cb17868aec36b9c30d6010">GLM_ALIGNED_TYPEDEF</a> (i32vec3, aligned_i32vec3, 16)</td></tr>
+<tr class="separator:ga7354a4ead8cb17868aec36b9c30d6010"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad2ecbdea18732163e2636e27b37981ee"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gad2ecbdea18732163e2636e27b37981ee">GLM_ALIGNED_TYPEDEF</a> (i32vec4, aligned_i32vec4, 16)</td></tr>
+<tr class="separator:gad2ecbdea18732163e2636e27b37981ee"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga965b1c9aa1800e93d4abc2eb2b5afcbf"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga965b1c9aa1800e93d4abc2eb2b5afcbf">GLM_ALIGNED_TYPEDEF</a> (i64vec1, aligned_i64vec1, 8)</td></tr>
+<tr class="separator:ga965b1c9aa1800e93d4abc2eb2b5afcbf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1f9e9c2ea2768675dff9bae5cde2d829"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga1f9e9c2ea2768675dff9bae5cde2d829">GLM_ALIGNED_TYPEDEF</a> (i64vec2, aligned_i64vec2, 16)</td></tr>
+<tr class="separator:ga1f9e9c2ea2768675dff9bae5cde2d829"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad77c317b7d942322cd5be4c8127b3187"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gad77c317b7d942322cd5be4c8127b3187">GLM_ALIGNED_TYPEDEF</a> (i64vec3, aligned_i64vec3, 32)</td></tr>
+<tr class="separator:gad77c317b7d942322cd5be4c8127b3187"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga716f8ea809bdb11b5b542d8b71aeb04f"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga716f8ea809bdb11b5b542d8b71aeb04f">GLM_ALIGNED_TYPEDEF</a> (i64vec4, aligned_i64vec4, 32)</td></tr>
+<tr class="separator:ga716f8ea809bdb11b5b542d8b71aeb04f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad46f8e9082d5878b1bc04f9c1471cdaa"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gad46f8e9082d5878b1bc04f9c1471cdaa">GLM_ALIGNED_TYPEDEF</a> (lowp_uint8, aligned_lowp_uint8, 1)</td></tr>
+<tr class="separator:gad46f8e9082d5878b1bc04f9c1471cdaa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1246094581af624aca6c7499aaabf801"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga1246094581af624aca6c7499aaabf801">GLM_ALIGNED_TYPEDEF</a> (lowp_uint16, aligned_lowp_uint16, 2)</td></tr>
+<tr class="separator:ga1246094581af624aca6c7499aaabf801"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7a5009a1d0196bbf21dd7518f61f0249"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga7a5009a1d0196bbf21dd7518f61f0249">GLM_ALIGNED_TYPEDEF</a> (lowp_uint32, aligned_lowp_uint32, 4)</td></tr>
+<tr class="separator:ga7a5009a1d0196bbf21dd7518f61f0249"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga45213fd18b3bb1df391671afefe4d1e7"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga45213fd18b3bb1df391671afefe4d1e7">GLM_ALIGNED_TYPEDEF</a> (lowp_uint64, aligned_lowp_uint64, 8)</td></tr>
+<tr class="separator:ga45213fd18b3bb1df391671afefe4d1e7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0ba26b4e3fd9ecbc25358efd68d8a4ca"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga0ba26b4e3fd9ecbc25358efd68d8a4ca">GLM_ALIGNED_TYPEDEF</a> (lowp_uint8_t, aligned_lowp_uint8_t, 1)</td></tr>
+<tr class="separator:ga0ba26b4e3fd9ecbc25358efd68d8a4ca"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf2b58f5fb6d4ec8ce7b76221d3af43e1"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gaf2b58f5fb6d4ec8ce7b76221d3af43e1">GLM_ALIGNED_TYPEDEF</a> (lowp_uint16_t, aligned_lowp_uint16_t, 2)</td></tr>
+<tr class="separator:gaf2b58f5fb6d4ec8ce7b76221d3af43e1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gadc246401847dcba155f0699425e49dcd"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gadc246401847dcba155f0699425e49dcd">GLM_ALIGNED_TYPEDEF</a> (lowp_uint32_t, aligned_lowp_uint32_t, 4)</td></tr>
+<tr class="separator:gadc246401847dcba155f0699425e49dcd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaace64bddf51a9def01498da9a94fb01c"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gaace64bddf51a9def01498da9a94fb01c">GLM_ALIGNED_TYPEDEF</a> (lowp_uint64_t, aligned_lowp_uint64_t, 8)</td></tr>
+<tr class="separator:gaace64bddf51a9def01498da9a94fb01c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad7bb97c29d664bd86ffb1bed4abc5534"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gad7bb97c29d664bd86ffb1bed4abc5534">GLM_ALIGNED_TYPEDEF</a> (lowp_u8, aligned_lowp_u8, 1)</td></tr>
+<tr class="separator:gad7bb97c29d664bd86ffb1bed4abc5534"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga404bba7785130e0b1384d695a9450b28"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga404bba7785130e0b1384d695a9450b28">GLM_ALIGNED_TYPEDEF</a> (lowp_u16, aligned_lowp_u16, 2)</td></tr>
+<tr class="separator:ga404bba7785130e0b1384d695a9450b28"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga31ba41fd896257536958ec6080203d2a"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga31ba41fd896257536958ec6080203d2a">GLM_ALIGNED_TYPEDEF</a> (lowp_u32, aligned_lowp_u32, 4)</td></tr>
+<tr class="separator:ga31ba41fd896257536958ec6080203d2a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gacca5f13627f57b3505676e40a6e43e5e"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gacca5f13627f57b3505676e40a6e43e5e">GLM_ALIGNED_TYPEDEF</a> (lowp_u64, aligned_lowp_u64, 8)</td></tr>
+<tr class="separator:gacca5f13627f57b3505676e40a6e43e5e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5faf1d3e70bf33174dd7f3d01d5b883b"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga5faf1d3e70bf33174dd7f3d01d5b883b">GLM_ALIGNED_TYPEDEF</a> (mediump_uint8, aligned_mediump_uint8, 1)</td></tr>
+<tr class="separator:ga5faf1d3e70bf33174dd7f3d01d5b883b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga727e2bf2c433bb3b0182605860a48363"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga727e2bf2c433bb3b0182605860a48363">GLM_ALIGNED_TYPEDEF</a> (mediump_uint16, aligned_mediump_uint16, 2)</td></tr>
+<tr class="separator:ga727e2bf2c433bb3b0182605860a48363"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga12566ca66d5962dadb4a5eb4c74e891e"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga12566ca66d5962dadb4a5eb4c74e891e">GLM_ALIGNED_TYPEDEF</a> (mediump_uint32, aligned_mediump_uint32, 4)</td></tr>
+<tr class="separator:ga12566ca66d5962dadb4a5eb4c74e891e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7b66a97a8acaa35c5a377b947318c6bc"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga7b66a97a8acaa35c5a377b947318c6bc">GLM_ALIGNED_TYPEDEF</a> (mediump_uint64, aligned_mediump_uint64, 8)</td></tr>
+<tr class="separator:ga7b66a97a8acaa35c5a377b947318c6bc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa9cde002439b74fa66120a16a9f55fcc"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gaa9cde002439b74fa66120a16a9f55fcc">GLM_ALIGNED_TYPEDEF</a> (mediump_uint8_t, aligned_mediump_uint8_t, 1)</td></tr>
+<tr class="separator:gaa9cde002439b74fa66120a16a9f55fcc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1ca98c67f7d1e975f7c5202f1da1df1f"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga1ca98c67f7d1e975f7c5202f1da1df1f">GLM_ALIGNED_TYPEDEF</a> (mediump_uint16_t, aligned_mediump_uint16_t, 2)</td></tr>
+<tr class="separator:ga1ca98c67f7d1e975f7c5202f1da1df1f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1dc8bc6199d785f235576948d80a597c"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga1dc8bc6199d785f235576948d80a597c">GLM_ALIGNED_TYPEDEF</a> (mediump_uint32_t, aligned_mediump_uint32_t, 4)</td></tr>
+<tr class="separator:ga1dc8bc6199d785f235576948d80a597c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad14a0f2ec93519682b73d70b8e401d81"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gad14a0f2ec93519682b73d70b8e401d81">GLM_ALIGNED_TYPEDEF</a> (mediump_uint64_t, aligned_mediump_uint64_t, 8)</td></tr>
+<tr class="separator:gad14a0f2ec93519682b73d70b8e401d81"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gada8b996eb6526dc1ead813bd49539d1b"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gada8b996eb6526dc1ead813bd49539d1b">GLM_ALIGNED_TYPEDEF</a> (mediump_u8, aligned_mediump_u8, 1)</td></tr>
+<tr class="separator:gada8b996eb6526dc1ead813bd49539d1b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga28948f6bfb52b42deb9d73ae1ea8d8b0"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga28948f6bfb52b42deb9d73ae1ea8d8b0">GLM_ALIGNED_TYPEDEF</a> (mediump_u16, aligned_mediump_u16, 2)</td></tr>
+<tr class="separator:ga28948f6bfb52b42deb9d73ae1ea8d8b0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad6a7c0b5630f89d3f1c5b4ef2919bb4c"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gad6a7c0b5630f89d3f1c5b4ef2919bb4c">GLM_ALIGNED_TYPEDEF</a> (mediump_u32, aligned_mediump_u32, 4)</td></tr>
+<tr class="separator:gad6a7c0b5630f89d3f1c5b4ef2919bb4c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa0fc531cbaa972ac3a0b86d21ef4a7fa"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gaa0fc531cbaa972ac3a0b86d21ef4a7fa">GLM_ALIGNED_TYPEDEF</a> (mediump_u64, aligned_mediump_u64, 8)</td></tr>
+<tr class="separator:gaa0fc531cbaa972ac3a0b86d21ef4a7fa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0ee829f7b754b262bbfe6317c0d678ac"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga0ee829f7b754b262bbfe6317c0d678ac">GLM_ALIGNED_TYPEDEF</a> (highp_uint8, aligned_highp_uint8, 1)</td></tr>
+<tr class="separator:ga0ee829f7b754b262bbfe6317c0d678ac"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga447848a817a626cae08cedc9778b331c"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga447848a817a626cae08cedc9778b331c">GLM_ALIGNED_TYPEDEF</a> (highp_uint16, aligned_highp_uint16, 2)</td></tr>
+<tr class="separator:ga447848a817a626cae08cedc9778b331c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6027ae13b2734f542a6e7beee11b8820"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga6027ae13b2734f542a6e7beee11b8820">GLM_ALIGNED_TYPEDEF</a> (highp_uint32, aligned_highp_uint32, 4)</td></tr>
+<tr class="separator:ga6027ae13b2734f542a6e7beee11b8820"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2aca46c8608c95ef991ee4c332acde5f"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga2aca46c8608c95ef991ee4c332acde5f">GLM_ALIGNED_TYPEDEF</a> (highp_uint64, aligned_highp_uint64, 8)</td></tr>
+<tr class="separator:ga2aca46c8608c95ef991ee4c332acde5f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaff50b10dd1c48be324fdaffd18e2c7ea"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gaff50b10dd1c48be324fdaffd18e2c7ea">GLM_ALIGNED_TYPEDEF</a> (highp_uint8_t, aligned_highp_uint8_t, 1)</td></tr>
+<tr class="separator:gaff50b10dd1c48be324fdaffd18e2c7ea"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9fc4421dbb833d5461e6d4e59dcfde55"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga9fc4421dbb833d5461e6d4e59dcfde55">GLM_ALIGNED_TYPEDEF</a> (highp_uint16_t, aligned_highp_uint16_t, 2)</td></tr>
+<tr class="separator:ga9fc4421dbb833d5461e6d4e59dcfde55"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga329f1e2b94b33ba5e3918197030bcf03"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga329f1e2b94b33ba5e3918197030bcf03">GLM_ALIGNED_TYPEDEF</a> (highp_uint32_t, aligned_highp_uint32_t, 4)</td></tr>
+<tr class="separator:ga329f1e2b94b33ba5e3918197030bcf03"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga71e646f7e301aa422328194162c9c998"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga71e646f7e301aa422328194162c9c998">GLM_ALIGNED_TYPEDEF</a> (highp_uint64_t, aligned_highp_uint64_t, 8)</td></tr>
+<tr class="separator:ga71e646f7e301aa422328194162c9c998"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8942e09f479489441a7a5004c6d8cb66"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga8942e09f479489441a7a5004c6d8cb66">GLM_ALIGNED_TYPEDEF</a> (highp_u8, aligned_highp_u8, 1)</td></tr>
+<tr class="separator:ga8942e09f479489441a7a5004c6d8cb66"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaab32497d6e4db16ee439dbedd64c5865"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gaab32497d6e4db16ee439dbedd64c5865">GLM_ALIGNED_TYPEDEF</a> (highp_u16, aligned_highp_u16, 2)</td></tr>
+<tr class="separator:gaab32497d6e4db16ee439dbedd64c5865"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaaadbb34952eca8e3d7fe122c3e167742"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gaaadbb34952eca8e3d7fe122c3e167742">GLM_ALIGNED_TYPEDEF</a> (highp_u32, aligned_highp_u32, 4)</td></tr>
+<tr class="separator:gaaadbb34952eca8e3d7fe122c3e167742"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga92024d27c74a3650afb55ec8e024ed25"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga92024d27c74a3650afb55ec8e024ed25">GLM_ALIGNED_TYPEDEF</a> (highp_u64, aligned_highp_u64, 8)</td></tr>
+<tr class="separator:ga92024d27c74a3650afb55ec8e024ed25"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gabde1d0b4072df35453db76075ab896a6"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gabde1d0b4072df35453db76075ab896a6">GLM_ALIGNED_TYPEDEF</a> (uint8, aligned_uint8, 1)</td></tr>
+<tr class="separator:gabde1d0b4072df35453db76075ab896a6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga06c296c9e398b294c8c9dd2a7693dcbb"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga06c296c9e398b294c8c9dd2a7693dcbb">GLM_ALIGNED_TYPEDEF</a> (uint16, aligned_uint16, 2)</td></tr>
+<tr class="separator:ga06c296c9e398b294c8c9dd2a7693dcbb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gacf1744488c96ebd33c9f36ad33b2010a"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gacf1744488c96ebd33c9f36ad33b2010a">GLM_ALIGNED_TYPEDEF</a> (uint32, aligned_uint32, 4)</td></tr>
+<tr class="separator:gacf1744488c96ebd33c9f36ad33b2010a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3328061a64c20ba59d5f9da24c2cd059"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga3328061a64c20ba59d5f9da24c2cd059">GLM_ALIGNED_TYPEDEF</a> (uint64, aligned_uint64, 8)</td></tr>
+<tr class="separator:ga3328061a64c20ba59d5f9da24c2cd059"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf6ced36f13bae57f377bafa6f5fcc299"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gaf6ced36f13bae57f377bafa6f5fcc299">GLM_ALIGNED_TYPEDEF</a> (uint8_t, aligned_uint8_t, 1)</td></tr>
+<tr class="separator:gaf6ced36f13bae57f377bafa6f5fcc299"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafbc7fb7847bfc78a339d1d371c915c73"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gafbc7fb7847bfc78a339d1d371c915c73">GLM_ALIGNED_TYPEDEF</a> (uint16_t, aligned_uint16_t, 2)</td></tr>
+<tr class="separator:gafbc7fb7847bfc78a339d1d371c915c73"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa86bc56a73fd8120b1121b5f5e6245ae"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gaa86bc56a73fd8120b1121b5f5e6245ae">GLM_ALIGNED_TYPEDEF</a> (uint32_t, aligned_uint32_t, 4)</td></tr>
+<tr class="separator:gaa86bc56a73fd8120b1121b5f5e6245ae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga68c0b9e669060d0eb5ab8c3ddeb483d8"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga68c0b9e669060d0eb5ab8c3ddeb483d8">GLM_ALIGNED_TYPEDEF</a> (uint64_t, aligned_uint64_t, 8)</td></tr>
+<tr class="separator:ga68c0b9e669060d0eb5ab8c3ddeb483d8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4f3bab577daf3343e99cc005134bce86"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga4f3bab577daf3343e99cc005134bce86">GLM_ALIGNED_TYPEDEF</a> (u8, aligned_u8, 1)</td></tr>
+<tr class="separator:ga4f3bab577daf3343e99cc005134bce86"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga13a2391339d0790d43b76d00a7611c4f"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga13a2391339d0790d43b76d00a7611c4f">GLM_ALIGNED_TYPEDEF</a> (u16, aligned_u16, 2)</td></tr>
+<tr class="separator:ga13a2391339d0790d43b76d00a7611c4f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga197570e03acbc3d18ab698e342971e8f"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga197570e03acbc3d18ab698e342971e8f">GLM_ALIGNED_TYPEDEF</a> (u32, aligned_u32, 4)</td></tr>
+<tr class="separator:ga197570e03acbc3d18ab698e342971e8f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0f033b21e145a1faa32c62ede5878993"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga0f033b21e145a1faa32c62ede5878993">GLM_ALIGNED_TYPEDEF</a> (u64, aligned_u64, 8)</td></tr>
+<tr class="separator:ga0f033b21e145a1faa32c62ede5878993"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga509af83527f5cd512e9a7873590663aa"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga509af83527f5cd512e9a7873590663aa">GLM_ALIGNED_TYPEDEF</a> (uvec1, aligned_uvec1, 4)</td></tr>
+<tr class="separator:ga509af83527f5cd512e9a7873590663aa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga94e86186978c502c6dc0c0d9c4a30679"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga94e86186978c502c6dc0c0d9c4a30679">GLM_ALIGNED_TYPEDEF</a> (uvec2, aligned_uvec2, 8)</td></tr>
+<tr class="separator:ga94e86186978c502c6dc0c0d9c4a30679"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5cec574686a7f3c8ed24bb195c5e2d0a"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga5cec574686a7f3c8ed24bb195c5e2d0a">GLM_ALIGNED_TYPEDEF</a> (uvec3, aligned_uvec3, 16)</td></tr>
+<tr class="separator:ga5cec574686a7f3c8ed24bb195c5e2d0a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga47edfdcee9c89b1ebdaf20450323b1d4"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga47edfdcee9c89b1ebdaf20450323b1d4">GLM_ALIGNED_TYPEDEF</a> (uvec4, aligned_uvec4, 16)</td></tr>
+<tr class="separator:ga47edfdcee9c89b1ebdaf20450323b1d4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5611d6718e3a00096918a64192e73a45"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga5611d6718e3a00096918a64192e73a45">GLM_ALIGNED_TYPEDEF</a> (u8vec1, aligned_u8vec1, 1)</td></tr>
+<tr class="separator:ga5611d6718e3a00096918a64192e73a45"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga19837e6f72b60d994a805ef564c6c326"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga19837e6f72b60d994a805ef564c6c326">GLM_ALIGNED_TYPEDEF</a> (u8vec2, aligned_u8vec2, 2)</td></tr>
+<tr class="separator:ga19837e6f72b60d994a805ef564c6c326"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9740cf8e34f068049b42a2753f9601c2"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga9740cf8e34f068049b42a2753f9601c2">GLM_ALIGNED_TYPEDEF</a> (u8vec3, aligned_u8vec3, 4)</td></tr>
+<tr class="separator:ga9740cf8e34f068049b42a2753f9601c2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8b8588bb221448f5541a858903822a57"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga8b8588bb221448f5541a858903822a57">GLM_ALIGNED_TYPEDEF</a> (u8vec4, aligned_u8vec4, 4)</td></tr>
+<tr class="separator:ga8b8588bb221448f5541a858903822a57"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga991abe990c16de26b2129d6bc2f4c051"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga991abe990c16de26b2129d6bc2f4c051">GLM_ALIGNED_TYPEDEF</a> (u16vec1, aligned_u16vec1, 2)</td></tr>
+<tr class="separator:ga991abe990c16de26b2129d6bc2f4c051"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac01bb9fc32a1cd76c2b80d030f71df4c"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gac01bb9fc32a1cd76c2b80d030f71df4c">GLM_ALIGNED_TYPEDEF</a> (u16vec2, aligned_u16vec2, 4)</td></tr>
+<tr class="separator:gac01bb9fc32a1cd76c2b80d030f71df4c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga09540dbca093793a36a8997e0d4bee77"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga09540dbca093793a36a8997e0d4bee77">GLM_ALIGNED_TYPEDEF</a> (u16vec3, aligned_u16vec3, 8)</td></tr>
+<tr class="separator:ga09540dbca093793a36a8997e0d4bee77"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaecafb5996f5a44f57e34d29c8670741e"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gaecafb5996f5a44f57e34d29c8670741e">GLM_ALIGNED_TYPEDEF</a> (u16vec4, aligned_u16vec4, 8)</td></tr>
+<tr class="separator:gaecafb5996f5a44f57e34d29c8670741e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac6b161a04d2f8408fe1c9d857e8daac0"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gac6b161a04d2f8408fe1c9d857e8daac0">GLM_ALIGNED_TYPEDEF</a> (u32vec1, aligned_u32vec1, 4)</td></tr>
+<tr class="separator:gac6b161a04d2f8408fe1c9d857e8daac0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1fa0dfc8feb0fa17dab2acd43e05342b"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga1fa0dfc8feb0fa17dab2acd43e05342b">GLM_ALIGNED_TYPEDEF</a> (u32vec2, aligned_u32vec2, 8)</td></tr>
+<tr class="separator:ga1fa0dfc8feb0fa17dab2acd43e05342b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0019500abbfa9c66eff61ca75eaaed94"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga0019500abbfa9c66eff61ca75eaaed94">GLM_ALIGNED_TYPEDEF</a> (u32vec3, aligned_u32vec3, 16)</td></tr>
+<tr class="separator:ga0019500abbfa9c66eff61ca75eaaed94"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga14fd29d01dae7b08a04e9facbcc18824"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga14fd29d01dae7b08a04e9facbcc18824">GLM_ALIGNED_TYPEDEF</a> (u32vec4, aligned_u32vec4, 16)</td></tr>
+<tr class="separator:ga14fd29d01dae7b08a04e9facbcc18824"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab253845f534a67136f9619843cade903"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gab253845f534a67136f9619843cade903">GLM_ALIGNED_TYPEDEF</a> (u64vec1, aligned_u64vec1, 8)</td></tr>
+<tr class="separator:gab253845f534a67136f9619843cade903"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga929427a7627940cdf3304f9c050b677d"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga929427a7627940cdf3304f9c050b677d">GLM_ALIGNED_TYPEDEF</a> (u64vec2, aligned_u64vec2, 16)</td></tr>
+<tr class="separator:ga929427a7627940cdf3304f9c050b677d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae373b6c04fdf9879f33d63e6949c037e"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gae373b6c04fdf9879f33d63e6949c037e">GLM_ALIGNED_TYPEDEF</a> (u64vec3, aligned_u64vec3, 32)</td></tr>
+<tr class="separator:gae373b6c04fdf9879f33d63e6949c037e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga53a8a03dca2015baec4584f45b8e9cdc"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga53a8a03dca2015baec4584f45b8e9cdc">GLM_ALIGNED_TYPEDEF</a> (u64vec4, aligned_u64vec4, 32)</td></tr>
+<tr class="separator:ga53a8a03dca2015baec4584f45b8e9cdc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab3301bae94ef5bf59fbdd9a24e7d2a01"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gab3301bae94ef5bf59fbdd9a24e7d2a01">GLM_ALIGNED_TYPEDEF</a> (float32, aligned_float32, 4)</td></tr>
+<tr class="separator:gab3301bae94ef5bf59fbdd9a24e7d2a01"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga75930684ff2233171c573e603f216162"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga75930684ff2233171c573e603f216162">GLM_ALIGNED_TYPEDEF</a> (float64, aligned_float64, 8)</td></tr>
+<tr class="separator:ga75930684ff2233171c573e603f216162"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gada9b0bea273d3ae0286f891533b9568f"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gada9b0bea273d3ae0286f891533b9568f">GLM_ALIGNED_TYPEDEF</a> (float32_t, aligned_float32_t, 4)</td></tr>
+<tr class="separator:gada9b0bea273d3ae0286f891533b9568f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6e3a2d83b131336219a0f4c7cbba2a48"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga6e3a2d83b131336219a0f4c7cbba2a48">GLM_ALIGNED_TYPEDEF</a> (float64_t, aligned_float64_t, 8)</td></tr>
+<tr class="separator:ga6e3a2d83b131336219a0f4c7cbba2a48"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gadbce23b9f23d77bb3884e289a574ebd5"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gadbce23b9f23d77bb3884e289a574ebd5">GLM_ALIGNED_TYPEDEF</a> (float32, aligned_f32, 4)</td></tr>
+<tr class="separator:gadbce23b9f23d77bb3884e289a574ebd5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa4deaa0dea930c393d55e7a4352b0a20"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gaa4deaa0dea930c393d55e7a4352b0a20">GLM_ALIGNED_TYPEDEF</a> (float64, aligned_f64, 8)</td></tr>
+<tr class="separator:gaa4deaa0dea930c393d55e7a4352b0a20"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga81bc497b2bfc6f80bab690c6ee28f0f9"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga81bc497b2bfc6f80bab690c6ee28f0f9">GLM_ALIGNED_TYPEDEF</a> (vec1, aligned_vec1, 4)</td></tr>
+<tr class="separator:ga81bc497b2bfc6f80bab690c6ee28f0f9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gada3e8f783e9d4b90006695a16c39d4d4"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gada3e8f783e9d4b90006695a16c39d4d4">GLM_ALIGNED_TYPEDEF</a> (vec2, aligned_vec2, 8)</td></tr>
+<tr class="separator:gada3e8f783e9d4b90006695a16c39d4d4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab8d081fac3a38d6f55fa552f32168d32"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gab8d081fac3a38d6f55fa552f32168d32">GLM_ALIGNED_TYPEDEF</a> (vec3, aligned_vec3, 16)</td></tr>
+<tr class="separator:gab8d081fac3a38d6f55fa552f32168d32"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga12fe7b9769c964c5b48dcfd8b7f40198"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga12fe7b9769c964c5b48dcfd8b7f40198">GLM_ALIGNED_TYPEDEF</a> (vec4, aligned_vec4, 16)</td></tr>
+<tr class="separator:ga12fe7b9769c964c5b48dcfd8b7f40198"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaefab04611c7f8fe1fd9be3071efea6cc"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gaefab04611c7f8fe1fd9be3071efea6cc">GLM_ALIGNED_TYPEDEF</a> (fvec1, aligned_fvec1, 4)</td></tr>
+<tr class="separator:gaefab04611c7f8fe1fd9be3071efea6cc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2543c05ba19b3bd19d45b1227390c5b4"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga2543c05ba19b3bd19d45b1227390c5b4">GLM_ALIGNED_TYPEDEF</a> (fvec2, aligned_fvec2, 8)</td></tr>
+<tr class="separator:ga2543c05ba19b3bd19d45b1227390c5b4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga009afd727fd657ef33a18754d6d28f60"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga009afd727fd657ef33a18754d6d28f60">GLM_ALIGNED_TYPEDEF</a> (fvec3, aligned_fvec3, 16)</td></tr>
+<tr class="separator:ga009afd727fd657ef33a18754d6d28f60"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2f26177e74bfb301a3d0e02ec3c3ef53"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga2f26177e74bfb301a3d0e02ec3c3ef53">GLM_ALIGNED_TYPEDEF</a> (fvec4, aligned_fvec4, 16)</td></tr>
+<tr class="separator:ga2f26177e74bfb301a3d0e02ec3c3ef53"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga309f495a1d6b75ddf195b674b65cb1e4"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga309f495a1d6b75ddf195b674b65cb1e4">GLM_ALIGNED_TYPEDEF</a> (f32vec1, aligned_f32vec1, 4)</td></tr>
+<tr class="separator:ga309f495a1d6b75ddf195b674b65cb1e4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5e185865a2217d0cd47187644683a8c3"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga5e185865a2217d0cd47187644683a8c3">GLM_ALIGNED_TYPEDEF</a> (f32vec2, aligned_f32vec2, 8)</td></tr>
+<tr class="separator:ga5e185865a2217d0cd47187644683a8c3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gade4458b27b039b9ca34f8ec049f3115a"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gade4458b27b039b9ca34f8ec049f3115a">GLM_ALIGNED_TYPEDEF</a> (f32vec3, aligned_f32vec3, 16)</td></tr>
+<tr class="separator:gade4458b27b039b9ca34f8ec049f3115a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2e8a12c5e6a9c4ae4ddaeda1d1cffe3b"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga2e8a12c5e6a9c4ae4ddaeda1d1cffe3b">GLM_ALIGNED_TYPEDEF</a> (f32vec4, aligned_f32vec4, 16)</td></tr>
+<tr class="separator:ga2e8a12c5e6a9c4ae4ddaeda1d1cffe3b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3e0f35fa0c626285a8bad41707e7316c"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga3e0f35fa0c626285a8bad41707e7316c">GLM_ALIGNED_TYPEDEF</a> (dvec1, aligned_dvec1, 8)</td></tr>
+<tr class="separator:ga3e0f35fa0c626285a8bad41707e7316c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga78bfec2f185d1d365ea0a9ef1e3d45b8"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga78bfec2f185d1d365ea0a9ef1e3d45b8">GLM_ALIGNED_TYPEDEF</a> (dvec2, aligned_dvec2, 16)</td></tr>
+<tr class="separator:ga78bfec2f185d1d365ea0a9ef1e3d45b8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga01fe6fee6db5df580b6724a7e681f069"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga01fe6fee6db5df580b6724a7e681f069">GLM_ALIGNED_TYPEDEF</a> (dvec3, aligned_dvec3, 32)</td></tr>
+<tr class="separator:ga01fe6fee6db5df580b6724a7e681f069"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga687d5b8f551d5af32425c0b2fba15e99"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga687d5b8f551d5af32425c0b2fba15e99">GLM_ALIGNED_TYPEDEF</a> (dvec4, aligned_dvec4, 32)</td></tr>
+<tr class="separator:ga687d5b8f551d5af32425c0b2fba15e99"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8e842371d46842ff8f1813419ba49d0f"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga8e842371d46842ff8f1813419ba49d0f">GLM_ALIGNED_TYPEDEF</a> (f64vec1, aligned_f64vec1, 8)</td></tr>
+<tr class="separator:ga8e842371d46842ff8f1813419ba49d0f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga32814aa0f19316b43134fc25f2aad2b9"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga32814aa0f19316b43134fc25f2aad2b9">GLM_ALIGNED_TYPEDEF</a> (f64vec2, aligned_f64vec2, 16)</td></tr>
+<tr class="separator:ga32814aa0f19316b43134fc25f2aad2b9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf3d3bbc1e93909b689123b085e177a14"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gaf3d3bbc1e93909b689123b085e177a14">GLM_ALIGNED_TYPEDEF</a> (f64vec3, aligned_f64vec3, 32)</td></tr>
+<tr class="separator:gaf3d3bbc1e93909b689123b085e177a14"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga804c654cead1139bd250f90f9bb01fad"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga804c654cead1139bd250f90f9bb01fad">GLM_ALIGNED_TYPEDEF</a> (f64vec4, aligned_f64vec4, 32)</td></tr>
+<tr class="separator:ga804c654cead1139bd250f90f9bb01fad"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafed7d010235a3aa7ea2f88646858f2ae"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gafed7d010235a3aa7ea2f88646858f2ae">GLM_ALIGNED_TYPEDEF</a> (mat2, aligned_mat2, 16)</td></tr>
+<tr class="separator:gafed7d010235a3aa7ea2f88646858f2ae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga17f911ee7b78ca6d1b91c4ab51ddb73c"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga17f911ee7b78ca6d1b91c4ab51ddb73c">GLM_ALIGNED_TYPEDEF</a> (mat3, aligned_mat3, 16)</td></tr>
+<tr class="separator:ga17f911ee7b78ca6d1b91c4ab51ddb73c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga31940e6012b72110e26fdb0f54805033"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga31940e6012b72110e26fdb0f54805033">GLM_ALIGNED_TYPEDEF</a> (mat4, aligned_mat4, 16)</td></tr>
+<tr class="separator:ga31940e6012b72110e26fdb0f54805033"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga01de96cd0b541c52d2b4a3faf65822e9"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga01de96cd0b541c52d2b4a3faf65822e9">GLM_ALIGNED_TYPEDEF</a> (mat2x2, aligned_mat2x2, 16)</td></tr>
+<tr class="separator:ga01de96cd0b541c52d2b4a3faf65822e9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac88a191b004bd341e64fc53b5a4d00e3"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gac88a191b004bd341e64fc53b5a4d00e3">GLM_ALIGNED_TYPEDEF</a> (mat3x3, aligned_mat3x3, 16)</td></tr>
+<tr class="separator:gac88a191b004bd341e64fc53b5a4d00e3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gabe8c745fa2ced44a600a6e3f19991161"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gabe8c745fa2ced44a600a6e3f19991161">GLM_ALIGNED_TYPEDEF</a> (mat4x4, aligned_mat4x4, 16)</td></tr>
+<tr class="separator:gabe8c745fa2ced44a600a6e3f19991161"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga719da577361541a4c43a2dd1d0e361e1"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga719da577361541a4c43a2dd1d0e361e1">GLM_ALIGNED_TYPEDEF</a> (fmat2x2, aligned_fmat2, 16)</td></tr>
+<tr class="separator:ga719da577361541a4c43a2dd1d0e361e1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6e7ee4f541e1d7db66cd1a224caacafb"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga6e7ee4f541e1d7db66cd1a224caacafb">GLM_ALIGNED_TYPEDEF</a> (fmat3x3, aligned_fmat3, 16)</td></tr>
+<tr class="separator:ga6e7ee4f541e1d7db66cd1a224caacafb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae5d672d359f2a39f63f98c7975057486"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gae5d672d359f2a39f63f98c7975057486">GLM_ALIGNED_TYPEDEF</a> (fmat4x4, aligned_fmat4, 16)</td></tr>
+<tr class="separator:gae5d672d359f2a39f63f98c7975057486"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6fa2df037dbfc5fe8c8e0b4db8a34953"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga6fa2df037dbfc5fe8c8e0b4db8a34953">GLM_ALIGNED_TYPEDEF</a> (fmat2x2, aligned_fmat2x2, 16)</td></tr>
+<tr class="separator:ga6fa2df037dbfc5fe8c8e0b4db8a34953"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0743b4f4f69a3227b82ff58f6abbad62"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga0743b4f4f69a3227b82ff58f6abbad62">GLM_ALIGNED_TYPEDEF</a> (fmat2x3, aligned_fmat2x3, 16)</td></tr>
+<tr class="separator:ga0743b4f4f69a3227b82ff58f6abbad62"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1a76b325fdf70f961d835edd182c63dd"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga1a76b325fdf70f961d835edd182c63dd">GLM_ALIGNED_TYPEDEF</a> (fmat2x4, aligned_fmat2x4, 16)</td></tr>
+<tr class="separator:ga1a76b325fdf70f961d835edd182c63dd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4b4e181cd041ba28c3163e7b8074aef0"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga4b4e181cd041ba28c3163e7b8074aef0">GLM_ALIGNED_TYPEDEF</a> (fmat3x2, aligned_fmat3x2, 16)</td></tr>
+<tr class="separator:ga4b4e181cd041ba28c3163e7b8074aef0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga27b13f465abc8a40705698145e222c3f"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga27b13f465abc8a40705698145e222c3f">GLM_ALIGNED_TYPEDEF</a> (fmat3x3, aligned_fmat3x3, 16)</td></tr>
+<tr class="separator:ga27b13f465abc8a40705698145e222c3f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2608d19cc275830a6f8c0b6405625a4f"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga2608d19cc275830a6f8c0b6405625a4f">GLM_ALIGNED_TYPEDEF</a> (fmat3x4, aligned_fmat3x4, 16)</td></tr>
+<tr class="separator:ga2608d19cc275830a6f8c0b6405625a4f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga93f09768241358a287c4cca538f1f7e7"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga93f09768241358a287c4cca538f1f7e7">GLM_ALIGNED_TYPEDEF</a> (fmat4x2, aligned_fmat4x2, 16)</td></tr>
+<tr class="separator:ga93f09768241358a287c4cca538f1f7e7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7c117e3ecca089e10247b1d41d88aff9"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga7c117e3ecca089e10247b1d41d88aff9">GLM_ALIGNED_TYPEDEF</a> (fmat4x3, aligned_fmat4x3, 16)</td></tr>
+<tr class="separator:ga7c117e3ecca089e10247b1d41d88aff9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga07c75cd04ba42dc37fa3e105f89455c5"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga07c75cd04ba42dc37fa3e105f89455c5">GLM_ALIGNED_TYPEDEF</a> (fmat4x4, aligned_fmat4x4, 16)</td></tr>
+<tr class="separator:ga07c75cd04ba42dc37fa3e105f89455c5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga65ff0d690a34a4d7f46f9b2eb51525ee"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga65ff0d690a34a4d7f46f9b2eb51525ee">GLM_ALIGNED_TYPEDEF</a> (f32mat2x2, aligned_f32mat2, 16)</td></tr>
+<tr class="separator:ga65ff0d690a34a4d7f46f9b2eb51525ee"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gadd8ddbe2bf65ccede865ba2f510176dc"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gadd8ddbe2bf65ccede865ba2f510176dc">GLM_ALIGNED_TYPEDEF</a> (f32mat3x3, aligned_f32mat3, 16)</td></tr>
+<tr class="separator:gadd8ddbe2bf65ccede865ba2f510176dc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf18dbff14bf13d3ff540c517659ec045"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gaf18dbff14bf13d3ff540c517659ec045">GLM_ALIGNED_TYPEDEF</a> (f32mat4x4, aligned_f32mat4, 16)</td></tr>
+<tr class="separator:gaf18dbff14bf13d3ff540c517659ec045"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga66339f6139bf7ff19e245beb33f61cc8"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga66339f6139bf7ff19e245beb33f61cc8">GLM_ALIGNED_TYPEDEF</a> (f32mat2x2, aligned_f32mat2x2, 16)</td></tr>
+<tr class="separator:ga66339f6139bf7ff19e245beb33f61cc8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1558a48b3934011b52612809f443e46d"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga1558a48b3934011b52612809f443e46d">GLM_ALIGNED_TYPEDEF</a> (f32mat2x3, aligned_f32mat2x3, 16)</td></tr>
+<tr class="separator:ga1558a48b3934011b52612809f443e46d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa52e5732daa62851627021ad551c7680"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gaa52e5732daa62851627021ad551c7680">GLM_ALIGNED_TYPEDEF</a> (f32mat2x4, aligned_f32mat2x4, 16)</td></tr>
+<tr class="separator:gaa52e5732daa62851627021ad551c7680"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac09663c42566bcb58d23c6781ac4e85a"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gac09663c42566bcb58d23c6781ac4e85a">GLM_ALIGNED_TYPEDEF</a> (f32mat3x2, aligned_f32mat3x2, 16)</td></tr>
+<tr class="separator:gac09663c42566bcb58d23c6781ac4e85a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3f510999e59e1b309113e1d561162b29"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga3f510999e59e1b309113e1d561162b29">GLM_ALIGNED_TYPEDEF</a> (f32mat3x3, aligned_f32mat3x3, 16)</td></tr>
+<tr class="separator:ga3f510999e59e1b309113e1d561162b29"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2c9c94f0c89cd71ce56551db6cf4aaec"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga2c9c94f0c89cd71ce56551db6cf4aaec">GLM_ALIGNED_TYPEDEF</a> (f32mat3x4, aligned_f32mat3x4, 16)</td></tr>
+<tr class="separator:ga2c9c94f0c89cd71ce56551db6cf4aaec"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga99ce8274c750fbfdf0e70c95946a2875"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga99ce8274c750fbfdf0e70c95946a2875">GLM_ALIGNED_TYPEDEF</a> (f32mat4x2, aligned_f32mat4x2, 16)</td></tr>
+<tr class="separator:ga99ce8274c750fbfdf0e70c95946a2875"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9476ef66790239df53dbe66f3989c3b5"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga9476ef66790239df53dbe66f3989c3b5">GLM_ALIGNED_TYPEDEF</a> (f32mat4x3, aligned_f32mat4x3, 16)</td></tr>
+<tr class="separator:ga9476ef66790239df53dbe66f3989c3b5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gacc429b3b0b49921e12713b6d31e14e1d"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gacc429b3b0b49921e12713b6d31e14e1d">GLM_ALIGNED_TYPEDEF</a> (f32mat4x4, aligned_f32mat4x4, 16)</td></tr>
+<tr class="separator:gacc429b3b0b49921e12713b6d31e14e1d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga88f6c6fa06e6e64479763e69444669cf"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga88f6c6fa06e6e64479763e69444669cf">GLM_ALIGNED_TYPEDEF</a> (f64mat2x2, aligned_f64mat2, 32)</td></tr>
+<tr class="separator:ga88f6c6fa06e6e64479763e69444669cf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaae8e4639c991e64754145ab8e4c32083"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gaae8e4639c991e64754145ab8e4c32083">GLM_ALIGNED_TYPEDEF</a> (f64mat3x3, aligned_f64mat3, 32)</td></tr>
+<tr class="separator:gaae8e4639c991e64754145ab8e4c32083"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6e9094f3feb3b5b49d0f83683a101fde"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga6e9094f3feb3b5b49d0f83683a101fde">GLM_ALIGNED_TYPEDEF</a> (f64mat4x4, aligned_f64mat4, 32)</td></tr>
+<tr class="separator:ga6e9094f3feb3b5b49d0f83683a101fde"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gadbd2c639c03de1c3e9591b5a39f65559"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gadbd2c639c03de1c3e9591b5a39f65559">GLM_ALIGNED_TYPEDEF</a> (f64mat2x2, aligned_f64mat2x2, 32)</td></tr>
+<tr class="separator:gadbd2c639c03de1c3e9591b5a39f65559"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab059d7b9fe2094acc563b7223987499f"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gab059d7b9fe2094acc563b7223987499f">GLM_ALIGNED_TYPEDEF</a> (f64mat2x3, aligned_f64mat2x3, 32)</td></tr>
+<tr class="separator:gab059d7b9fe2094acc563b7223987499f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gabbc811d1c52ed2b8cfcaff1378f75c69"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gabbc811d1c52ed2b8cfcaff1378f75c69">GLM_ALIGNED_TYPEDEF</a> (f64mat2x4, aligned_f64mat2x4, 32)</td></tr>
+<tr class="separator:gabbc811d1c52ed2b8cfcaff1378f75c69"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9ddf5212777734d2fd841a84439f3bdf"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga9ddf5212777734d2fd841a84439f3bdf">GLM_ALIGNED_TYPEDEF</a> (f64mat3x2, aligned_f64mat3x2, 32)</td></tr>
+<tr class="separator:ga9ddf5212777734d2fd841a84439f3bdf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad1dda32ed09f94bfcf0a7d8edfb6cf13"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gad1dda32ed09f94bfcf0a7d8edfb6cf13">GLM_ALIGNED_TYPEDEF</a> (f64mat3x3, aligned_f64mat3x3, 32)</td></tr>
+<tr class="separator:gad1dda32ed09f94bfcf0a7d8edfb6cf13"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5875e0fa72f07e271e7931811cbbf31a"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga5875e0fa72f07e271e7931811cbbf31a">GLM_ALIGNED_TYPEDEF</a> (f64mat3x4, aligned_f64mat3x4, 32)</td></tr>
+<tr class="separator:ga5875e0fa72f07e271e7931811cbbf31a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga41e82cd6ac07f912ba2a2d45799dcf0d"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga41e82cd6ac07f912ba2a2d45799dcf0d">GLM_ALIGNED_TYPEDEF</a> (f64mat4x2, aligned_f64mat4x2, 32)</td></tr>
+<tr class="separator:ga41e82cd6ac07f912ba2a2d45799dcf0d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0892638d6ba773043b3d63d1d092622e"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga0892638d6ba773043b3d63d1d092622e">GLM_ALIGNED_TYPEDEF</a> (f64mat4x3, aligned_f64mat4x3, 32)</td></tr>
+<tr class="separator:ga0892638d6ba773043b3d63d1d092622e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga912a16432608b822f1e13607529934c1"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga912a16432608b822f1e13607529934c1">GLM_ALIGNED_TYPEDEF</a> (f64mat4x4, aligned_f64mat4x4, 32)</td></tr>
+<tr class="separator:ga912a16432608b822f1e13607529934c1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafd945a8ea86b042aba410e0560df9a3d"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gafd945a8ea86b042aba410e0560df9a3d">GLM_ALIGNED_TYPEDEF</a> (quat, aligned_quat, 16)</td></tr>
+<tr class="separator:gafd945a8ea86b042aba410e0560df9a3d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad8c4bfacff70e57dc8303634c8bfce35"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gad8c4bfacff70e57dc8303634c8bfce35">GLM_ALIGNED_TYPEDEF</a> (fquat, aligned_fquat, 16)</td></tr>
+<tr class="separator:gad8c4bfacff70e57dc8303634c8bfce35"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaabc28c84a3288b697605d4688686f9a9"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gaabc28c84a3288b697605d4688686f9a9">GLM_ALIGNED_TYPEDEF</a> (dquat, aligned_dquat, 32)</td></tr>
+<tr class="separator:gaabc28c84a3288b697605d4688686f9a9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1ed8aeb5ca67fade269a46105f1bf273"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga1ed8aeb5ca67fade269a46105f1bf273">GLM_ALIGNED_TYPEDEF</a> (f32quat, aligned_f32quat, 16)</td></tr>
+<tr class="separator:ga1ed8aeb5ca67fade269a46105f1bf273"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga95cc03b8b475993fa50e05e38e203303"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a> (f64quat, aligned_f64quat, 32)</td></tr>
+<tr class="separator:ga95cc03b8b475993fa50e05e38e203303"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00234.html">GLM_GTX_type_aligned</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd>
+<dd>
+<a class="el" href="a00172.html" title="Defines a templated quaternion type and several quaternion operations. ">GLM_GTC_quaternion</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00109_source.html">gtx/type_aligned.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00109_source.html b/src/third_party/glm/doc/api/a00109_source.html
new file mode 100644
index 0000000..c9862ae
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00109_source.html
@@ -0,0 +1,769 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: type_aligned.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">gtx/type_aligned.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00109.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include "../gtc/type_precision.hpp"</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_type_aligned extension included")</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> {</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="comment">// Signed int vector types </span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga760bcf26fdb23a2c3ecad3c928a19ae6">lowp_int8</a>, aligned_lowp_int8, 1);</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga698e36b01167fc0f037889334dce8def">lowp_int16</a>, aligned_lowp_int16, 2);</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga864aabca5f3296e176e0c3ed9cc16b02">lowp_int32</a>, aligned_lowp_int32, 4);</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gaf645b1a60203b39c0207baff5e3d8c3c">lowp_int64</a>, aligned_lowp_int64, 8);</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga119c41d73fe9977358174eb3ac1035a3">lowp_int8_t</a>, aligned_lowp_int8_t, 1);</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga8b2cd8d31eb345b2d641d9261c38db1a">lowp_int16_t</a>, aligned_lowp_int16_t, 2);</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga0350631d35ff800e6133ac6243b13cbc">lowp_int32_t</a>, aligned_lowp_int32_t, 4);</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gaebf341fc4a5be233f7dde962c2e33847">lowp_int64_t</a>, aligned_lowp_int64_t, 8);</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga552a6bde5e75984efb0f863278da2e54">lowp_i8</a>, aligned_lowp_i8, 1);</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga392b673fd10847bfb78fb808c6cf8ff7">lowp_i16</a>, aligned_lowp_i16, 2);</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga7ff73a45cea9613ebf1a9fad0b9f82ac">lowp_i32</a>, aligned_lowp_i32, 4);</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga354736e0c645099cd44c42fb2f87c2b8">lowp_i64</a>, aligned_lowp_i64, 8);</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga6fbd69cbdaa44345bff923a2cf63de7e">mediump_int8</a>, aligned_mediump_int8, 1);</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gadff3608baa4b5bd3ed28f95c1c2c345d">mediump_int16</a>, aligned_mediump_int16, 2);</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga5244cef85d6e870e240c76428a262ae8">mediump_int32</a>, aligned_mediump_int32, 4);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga7b968f2b86a0442a89c7359171e1d866">mediump_int64</a>, aligned_mediump_int64, 8);</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga6d7b3789ecb932c26430009478cac7ae">mediump_int8_t</a>, aligned_mediump_int8_t, 1);</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga80e72fe94c88498537e8158ba7591c54">mediump_int16_t</a>, aligned_mediump_int16_t, 2);</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga26fc7ced1ad7ca5024f1c973c8dc9180">mediump_int32_t</a>, aligned_mediump_int32_t, 4);</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gac3bc41bcac61d1ba8f02a6f68ce23f64">mediump_int64_t</a>, aligned_mediump_int64_t, 8);</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gacf1ded173e1e2d049c511d095b259e21">mediump_i8</a>, aligned_mediump_i8, 1);</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga62a17cddeb4dffb4e18fe3aea23f051a">mediump_i16</a>, aligned_mediump_i16, 2);</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gaf5e94bf2a20af7601787c154751dc2e1">mediump_i32</a>, aligned_mediump_i32, 4);</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga3ebcb1f6d8d8387253de8bccb058d77f">mediump_i64</a>, aligned_mediump_i64, 8);</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gad0549c902a96a7164e4ac858d5f39dbf">highp_int8</a>, aligned_highp_int8, 1);</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga5fde0fa4a3852a9dd5d637a92ee74718">highp_int16</a>, aligned_highp_int16, 2);</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga84ed04b4e0de18c977e932d617e7c223">highp_int32</a>, aligned_highp_int32, 4);</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga226a8d52b4e3f77aaa6231135e886aac">highp_int64</a>, aligned_highp_int64, 8);</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga1085c50dd8fbeb5e7e609b1c127492a5">highp_int8_t</a>, aligned_highp_int8_t, 1);</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gacaea06d0a79ef3172e887a7a6ba434ff">highp_int16_t</a>, aligned_highp_int16_t, 2);</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga2c71c8bd9e2fe7d2e93ca250d8b6157f">highp_int32_t</a>, aligned_highp_int32_t, 4);</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga73c6abb280a45feeff60f9accaee91f3">highp_int64_t</a>, aligned_highp_int64_t, 8);</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> </div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gacb88796f2d08ef253d0345aff20c3aee">highp_i8</a>, aligned_highp_i8, 1);</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga0336abc2604dd2c20c30e036454b64f8">highp_i16</a>, aligned_highp_i16, 2);</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga727675ac6b5d2fc699520e0059735e25">highp_i32</a>, aligned_highp_i32, 4);</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gac25db6d2b1e2a0f351b77ba3409ac4cd">highp_i64</a>, aligned_highp_i64, 8);</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> </div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(int8, aligned_int8, 1);</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> </div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(int16, aligned_int16, 2);</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(int32, aligned_int32, 4);</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> </div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(int64, aligned_int64, 8);</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga4bf09d8838a86866b39ee6e109341645">int8_t</a>, aligned_int8_t, 1);</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gae8f5e3e964ca2ae240adc2c0d74adede">int16_t</a>, aligned_int16_t, 2);</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> </div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga042ef09ff2f0cb24a36f541bcb3a3710">int32_t</a>, aligned_int32_t, 4);</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> </div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga322a7d7d2c2c68994dc872a33de63c61">int64_t</a>, aligned_int64_t, 8);</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> </div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> </div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga302ec977b0c0c3ea245b6c9275495355">i8</a>, aligned_i8, 1);</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga3ab5fe184343d394fb6c2723c3ee3699">i16</a>, aligned_i16, 2);</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> </div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga96faea43ac5f875d2d3ffbf8d213e3eb">i32</a>, aligned_i32, 4);</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> </div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gadb997e409103d4da18abd837e636a496">i64</a>, aligned_i64, 8);</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> </div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> </div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(ivec1, <a class="code" href="a00176.html#ga76298aed82a439063c3d55980c84aa0b">aligned_ivec1</a>, 4);</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  </div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00157.html#ga2ab812bd103527e2d6c62c2e2f5ee78f">ivec2</a>, <a class="code" href="a00176.html#gae4f38fd2c86cee6940986197777b3ca4">aligned_ivec2</a>, 8);</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> </div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00157.html#ga34aee73784bcc247d426250540c1911c">ivec3</a>, <a class="code" href="a00176.html#ga32794322d294e5ace7fed4a61896f270">aligned_ivec3</a>, 16);</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00157.html#gaaa26c41d168dc00be0fe55f4d0a34224">ivec4</a>, <a class="code" href="a00176.html#ga7f79eae5927c9033d84617e49f6f34e4">aligned_ivec4</a>, 16);</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> </div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> </div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gab2329c5c14ff5a03b1ddec039e2c7409">i8vec1</a>, aligned_i8vec1, 1);</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> </div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga6414484477e4c1b4863cf91af8fd4185">i8vec2</a>, aligned_i8vec2, 2);</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> </div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gaf4b5993e794e252607f91535b62a7e0c">i8vec3</a>, aligned_i8vec3, 4);</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> </div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga50e58885aee2cf01bb3ba472c5b1697e">i8vec4</a>, aligned_i8vec4, 4);</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> </div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga28f03a39ac56c70f9bf3ada11cb60e3b">i16vec1</a>, aligned_i16vec1, 2);</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  </div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga110bec18ca44c41c76c3c9e4d7b5bd79">i16vec2</a>, aligned_i16vec2, 4);</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> </div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga973b226a9914db682c9372fc761fb535">i16vec3</a>, aligned_i16vec3, 8);</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> </div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gad73e5e905dcf2d8cab002b4ab46e9426">i16vec4</a>, aligned_i16vec4, 8);</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> </div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> </div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga4cca6bbd117c45f046291fc8e9d03765">i32vec1</a>, aligned_i32vec1, 4);</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  </div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga3c12cef4135603fd77d8fda85808730c">i32vec2</a>, aligned_i32vec2, 8);</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> </div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga40cd3f391c03512f158d10a70062264e">i32vec3</a>, aligned_i32vec3, 16);</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> </div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gae3364a8090e7e1408056e00403dfecab">i32vec4</a>, aligned_i32vec4, 16);</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> </div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> </div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga5b4a3e499ee165efc0dc05add9c48235">i64vec1</a>, aligned_i64vec1, 8);</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  </div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gade69872a31f066e5ae212f1af6008edb">i64vec2</a>, aligned_i64vec2, 16);</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> </div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga9ece7c77c7bca7a6b824ef9c600f5e5e">i64vec3</a>, aligned_i64vec3, 32);</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> </div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga9756e45c8f80329257f3cbdabc3bd73c">i64vec4</a>, aligned_i64vec4, 32);</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> </div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> </div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <span class="comment">// Unsigned int vector types</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> </div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gaf49470869e9be2c059629b250619804e">lowp_uint8</a>, aligned_lowp_uint8, 1);</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> </div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gad68bfd9f881856fc863a6ebca0b67f78">lowp_uint16</a>, aligned_lowp_uint16, 2);</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> </div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gaa6a5b461bbf5fe20982472aa51896d4b">lowp_uint32</a>, aligned_lowp_uint32, 4);</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> </div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gaa212b805736a759998e312cbdd550fae">lowp_uint64</a>, aligned_lowp_uint64, 8);</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> </div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> </div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga667b2ece2b258be898812dc2177995d1">lowp_uint8_t</a>, aligned_lowp_uint8_t, 1);</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> </div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga91c4815f93177eb423362fd296a87e9f">lowp_uint16_t</a>, aligned_lowp_uint16_t, 2);</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> </div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gaf1b735b4b1145174f4e4167d13778f9b">lowp_uint32_t</a>, aligned_lowp_uint32_t, 4);</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> </div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga8dd3a3281ae5c970ffe0c41d538aa153">lowp_uint64_t</a>, aligned_lowp_uint64_t, 8);</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> </div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> </div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga1b09f03da7ac43055c68a349d5445083">lowp_u8</a>, aligned_lowp_u8, 1);</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> </div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga504ce1631cb2ac02fcf1d44d8c2aa126">lowp_u16</a>, aligned_lowp_u16, 2);</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> </div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga4f072ada9552e1e480bbb3b1acde5250">lowp_u32</a>, aligned_lowp_u32, 4);</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> </div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga30069d1f02b19599cbfadf98c23ac6ed">lowp_u64</a>, aligned_lowp_u64, 8);</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> </div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> </div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga1fa92a233b9110861cdbc8c2ccf0b5a3">mediump_uint8</a>, aligned_mediump_uint8, 1);</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> </div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga2885a6c89916911e418c06bb76b9bdbb">mediump_uint16</a>, aligned_mediump_uint16, 2);</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> </div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga34dd5ec1988c443bae80f1b20a8ade5f">mediump_uint32</a>, aligned_mediump_uint32, 4);</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> </div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga30652709815ad9404272a31957daa59e">mediump_uint64</a>, aligned_mediump_uint64, 8);</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> </div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> </div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gadfe65c78231039e90507770db50c98c7">mediump_uint8_t</a>, aligned_mediump_uint8_t, 1);</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> </div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga3963b1050fc65a383ee28e3f827b6e3e">mediump_uint16_t</a>, aligned_mediump_uint16_t, 2);</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> </div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gaf4dae276fd29623950de14a6ca2586b5">mediump_uint32_t</a>, aligned_mediump_uint32_t, 4);</div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> </div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga9b170dd4a8f38448a2dc93987c7875e9">mediump_uint64_t</a>, aligned_mediump_uint64_t, 8);</div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> </div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> </div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gad1213a22bbb9e4107f07eaa4956f8281">mediump_u8</a>, aligned_mediump_u8, 1);</div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> </div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga9df98857be695d5a30cb30f5bfa38a80">mediump_u16</a>, aligned_mediump_u16, 2);</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> </div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga1bd0e914158bf03135f8a317de6debe9">mediump_u32</a>, aligned_mediump_u32, 4);</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> </div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga2af9490085ae3bdf36a544e9dd073610">mediump_u64</a>, aligned_mediump_u64, 8);</div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> </div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> </div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga97432f9979e73e66567361fd01e4cffb">highp_uint8</a>, aligned_highp_uint8, 1);</div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> </div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga746dc6da204f5622e395f492997dbf57">highp_uint16</a>, aligned_highp_uint16, 2);</div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> </div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga256b12b650c3f2fb86878fd1c5db8bc3">highp_uint32</a>, aligned_highp_uint32, 4);</div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> </div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gaa38d732f5d4a7bc42a1b43b9d3c141ce">highp_uint64</a>, aligned_highp_uint64, 8);</div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> </div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> </div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gac4e00a26a2adb5f2c0a7096810df29e5">highp_uint8_t</a>, aligned_highp_uint8_t, 1);</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> </div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gacf54c3330ef60aa3d16cb676c7bcb8c7">highp_uint16_t</a>, aligned_highp_uint16_t, 2);</div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> </div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gae978599c9711ac263ba732d4ac225b0e">highp_uint32_t</a>, aligned_highp_uint32_t, 4);</div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> </div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gaa46172d7dc1c7ffe3e78107ff88adf08">highp_uint64_t</a>, aligned_highp_uint64_t, 8);</div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> </div>
+<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> </div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gacd1259f3a9e8d2a9df5be2d74322ef9c">highp_u8</a>, aligned_highp_u8, 1);</div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> </div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga8e62c883d13f47015f3b70ed88751369">highp_u16</a>, aligned_highp_u16, 2);</div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> </div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga7a6f1929464dcc680b16381a4ee5f2cf">highp_u32</a>, aligned_highp_u32, 4);</div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> </div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga0c181fdf06a309691999926b6690c969">highp_u64</a>, aligned_highp_u64, 8);</div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> </div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> </div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(uint8, aligned_uint8, 1);</div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> </div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(uint16, aligned_uint16, 2);</div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> </div>
+<div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(uint32, aligned_uint32, 4);</div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> </div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(uint64, aligned_uint64, 8);</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> </div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> </div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga28d97808322d3c92186e4a0c067d7e8e">uint8_t</a>, aligned_uint8_t, 1);</div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> </div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga91f91f411080c37730856ff5887f5bcf">uint16_t</a>, aligned_uint16_t, 2);</div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> </div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga2171d9dc1fefb1c82e2817f45b622eac">uint32_t</a>, aligned_uint32_t, 4);</div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> </div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga3999d3e7ff22025c16ddb601e14dfdee">uint64_t</a>, aligned_uint64_t, 8);</div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> </div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> </div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gaecc7082561fc9028b844b6cf3d305d36">u8</a>, aligned_u8, 1);</div>
+<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> </div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gaa2d7acc0adb536fab71fe261232a40ff">u16</a>, aligned_u16, 2);</div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> </div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga8165913e068444f7842302d40ba897b9">u32</a>, aligned_u32, 4);</div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> </div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gaf3f312156984c365e9f65620354da70b">u64</a>, aligned_u64, 8);</div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> </div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> </div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(uvec1, <a class="code" href="a00176.html#ga1ff8ed402c93d280ff0597c1c5e7c548">aligned_uvec1</a>, 4);</div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  </div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00157.html#ga9bcffa2d49f28d16f680757b5c0e7c84">uvec2</a>, <a class="code" href="a00176.html#ga074137e3be58528d67041c223d49f398">aligned_uvec2</a>, 8);</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> </div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00157.html#gae85537b672ffe0b3218cbdf1823e1c72">uvec3</a>, <a class="code" href="a00176.html#ga2a8d9c3046f89d854eb758adfa0811c0">aligned_uvec3</a>, 16);</div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> </div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00157.html#gaa7c3a0e7ae50c34c3290415c115f251e">uvec4</a>, <a class="code" href="a00176.html#gabf842c45eea186170c267a328e3f3b7d">aligned_uvec4</a>, 16);</div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> </div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> </div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga92e0c191e5cc326255284d08be3af7c5">u8vec1</a>, aligned_u8vec1, 1);</div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> </div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga61667c99caf60ce6c48ebbbac72bd91d">u8vec2</a>, aligned_u8vec2, 2);</div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> </div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga8ca60d0ba6d438892be6017f43747661">u8vec3</a>, aligned_u8vec3, 4);</div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> </div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga114e005014d910bea07954eee24b7efb">u8vec4</a>, aligned_u8vec4, 4);</div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> </div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> </div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gaefa2ce8fbdbe89baffd262f46f2d5907">u16vec1</a>, aligned_u16vec1, 2);</div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  </div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga426030555085ed6c39a54e73afbef962">u16vec2</a>, aligned_u16vec2, 4);</div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> </div>
+<div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga7f5dbe417199277e449b8db0210acb71">u16vec3</a>, aligned_u16vec3, 8);</div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> </div>
+<div class="line"><a name="l00577"></a><span class="lineno"> 577</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gaf524c9059f0342668d8eea359bcceaae">u16vec4</a>, aligned_u16vec4, 8);</div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> </div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> </div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga913a8bd51e4ebccd30ad488de3c18da9">u32vec1</a>, aligned_u32vec1, 4);</div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  </div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga0741d40e2b0fea4f1c50cb325114f075">u32vec2</a>, aligned_u32vec2, 8);</div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> </div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gad9b52e1c271cb9c8bfae6365d3e38a23">u32vec3</a>, aligned_u32vec3, 16);</div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> </div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga155ac7e9e454e2b1f73d11e1e28a0fd6">u32vec4</a>, aligned_u32vec4, 16);</div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> </div>
+<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> </div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga793c9293cc687a0e342396a377c5df77">u64vec1</a>, aligned_u64vec1, 8);</div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  </div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga2204827de9d4ee7fa92ef497093f7d6e">u64vec2</a>, aligned_u64vec2, 16);</div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> </div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga3460933f040f59f0fedb29df1e9be71c">u64vec3</a>, aligned_u64vec3, 32);</div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> </div>
+<div class="line"><a name="l00611"></a><span class="lineno"> 611</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gafb6ca34df28889a5db9d244aed375411">u64vec4</a>, aligned_u64vec4, 32);</div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> </div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> </div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span>  <span class="comment">// Float vector types</span></div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> </div>
+<div class="line"><a name="l00619"></a><span class="lineno"> 619</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(float32, aligned_float32, 4);</div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> </div>
+<div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(float64, aligned_float64, 8);</div>
+<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> </div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> </div>
+<div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga41d579d81c3d98edd0532244fa02da77">float32_t</a>, aligned_float32_t, 4);</div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> </div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga6957c7b22f405683bb276554ca40dc37">float64_t</a>, aligned_float64_t, 8);</div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> </div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> </div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(float32, aligned_f32, 4);</div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> </div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(float64, aligned_f64, 8);</div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> </div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> </div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(vec1, <a class="code" href="a00176.html#ga05e6d4c908965d04191c2070a8d0a65e">aligned_vec1</a>, 4);</div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> </div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00157.html#ga09d0200e8ff86391d8804b4fefd5f1da">vec2</a>, <a class="code" href="a00176.html#ga0682462f8096a226773e20fac993cde5">aligned_vec2</a>, 8);</div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> </div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00157.html#gaa8ea2429bb3cb41a715258a447f39897">vec3</a>, <a class="code" href="a00176.html#ga7cf643b66664e0cd3c48759ae66c2bd0">aligned_vec3</a>, 16);</div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> </div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00157.html#gafbab23070ca47932487d25332adc7d7c">vec4</a>, <a class="code" href="a00176.html#ga85d89e83cb8137e1be1446de8c3b643a">aligned_vec4</a>, 16);</div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> </div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> </div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga10d8bd3c923a5386efcf25a4117fd84f">fvec1</a>, aligned_fvec1, 4);</div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> </div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gaf9f4173dd9e8b2d0b663c6f80ed09ff6">fvec2</a>, aligned_fvec2, 8);</div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> </div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga4ef2d77dcab241b1ef83f09edb2f1084">fvec3</a>, aligned_fvec3, 16);</div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span> </div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga981b63d5c5f7233a29364e0a968d139b">fvec4</a>, aligned_fvec4, 16);</div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span> </div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span>  </div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga3174a49dc84a977cad7012a62f4af02f">f32vec1</a>, aligned_f32vec1, 4);</div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span> </div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gae0cb53ea6fe3d977fe588ce423d57cc3">f32vec2</a>, aligned_f32vec2, 8);</div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span> </div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga19d5e0d4d3d6d226c9c6c0f39756f9ad">f32vec3</a>, aligned_f32vec3, 16);</div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span> </div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gaeb25dbb0261f82cb08da23e26d343704">f32vec4</a>, aligned_f32vec4, 16);</div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span> </div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span> </div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(dvec1, <a class="code" href="a00176.html#ga4974f46ae5a19415d91316960a53617a">aligned_dvec1</a>, 8);</div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span> </div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00157.html#ga15ade901680b29b78c1f9d1796db6e0e">dvec2</a>, <a class="code" href="a00176.html#ga18d859f87122b2b3b2992ffe86dbebc0">aligned_dvec2</a>, 16);</div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span> </div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00157.html#gabebd0c7e3c5cd337d95c313c5e8b8db4">dvec3</a>, <a class="code" href="a00176.html#gaa37869eea77d28419b2fb0ff70b69bf0">aligned_dvec3</a>, 32);</div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span> </div>
+<div class="line"><a name="l00709"></a><span class="lineno"> 709</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00157.html#ga9503f809789bda7e8852a6abde3ae5c1">dvec4</a>, <a class="code" href="a00176.html#ga8a9f0a4795ccc442fa9901845026f9f5">aligned_dvec4</a>, 32);</div>
+<div class="line"><a name="l00710"></a><span class="lineno"> 710</span> </div>
+<div class="line"><a name="l00711"></a><span class="lineno"> 711</span> </div>
+<div class="line"><a name="l00714"></a><span class="lineno"> 714</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gac5b04f32ae3084a9131a0851e7f4cfae">f64vec1</a>, aligned_f64vec1, 8);</div>
+<div class="line"><a name="l00715"></a><span class="lineno"> 715</span> </div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gafaad77b464b5a35626c31205ac6780e3">f64vec2</a>, aligned_f64vec2, 16);</div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span> </div>
+<div class="line"><a name="l00722"></a><span class="lineno"> 722</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gafacc3614bb1136a7756293e67d34de22">f64vec3</a>, aligned_f64vec3, 32);</div>
+<div class="line"><a name="l00723"></a><span class="lineno"> 723</span> </div>
+<div class="line"><a name="l00726"></a><span class="lineno"> 726</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga8723186104dc02eb85da386105fba75f">f64vec4</a>, aligned_f64vec4, 32);</div>
+<div class="line"><a name="l00727"></a><span class="lineno"> 727</span> </div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span> </div>
+<div class="line"><a name="l00730"></a><span class="lineno"> 730</span>  <span class="comment">// Float matrix types </span></div>
+<div class="line"><a name="l00731"></a><span class="lineno"> 731</span> </div>
+<div class="line"><a name="l00734"></a><span class="lineno"> 734</span>  <span class="comment">//typedef detail::tmat1<f32> mat1;</span></div>
+<div class="line"><a name="l00735"></a><span class="lineno"> 735</span> </div>
+<div class="line"><a name="l00738"></a><span class="lineno"> 738</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00157.html#ga6e30cfba068ebc3c71fe1f8b3110e450">mat2</a>, aligned_mat2, 16);</div>
+<div class="line"><a name="l00739"></a><span class="lineno"> 739</span> </div>
+<div class="line"><a name="l00742"></a><span class="lineno"> 742</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00157.html#ga6dd3ec98a548755676267e59142911f8">mat3</a>, aligned_mat3, 16);</div>
+<div class="line"><a name="l00743"></a><span class="lineno"> 743</span> </div>
+<div class="line"><a name="l00746"></a><span class="lineno"> 746</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00157.html#gade0eb47c01f79384a6f38017ede17446">mat4</a>, aligned_mat4, 16);</div>
+<div class="line"><a name="l00747"></a><span class="lineno"> 747</span> </div>
+<div class="line"><a name="l00748"></a><span class="lineno"> 748</span> </div>
+<div class="line"><a name="l00751"></a><span class="lineno"> 751</span>  <span class="comment">//typedef detail::tmat1x1<f32> mat1;</span></div>
+<div class="line"><a name="l00752"></a><span class="lineno"> 752</span> </div>
+<div class="line"><a name="l00755"></a><span class="lineno"> 755</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00157.html#ga0c84b211a5730357b63c6d2e4fb696d5">mat2x2</a>, aligned_mat2x2, 16);</div>
+<div class="line"><a name="l00756"></a><span class="lineno"> 756</span> </div>
+<div class="line"><a name="l00759"></a><span class="lineno"> 759</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00157.html#ga378921b6a07bcdad946858b340f69ab1">mat3x3</a>, aligned_mat3x3, 16);</div>
+<div class="line"><a name="l00760"></a><span class="lineno"> 760</span> </div>
+<div class="line"><a name="l00763"></a><span class="lineno"> 763</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00157.html#ga089315d5a0c20ac6eaa17a854bbd2e81">mat4x4</a>, aligned_mat4x4, 16);</div>
+<div class="line"><a name="l00764"></a><span class="lineno"> 764</span> </div>
+<div class="line"><a name="l00765"></a><span class="lineno"> 765</span> </div>
+<div class="line"><a name="l00768"></a><span class="lineno"> 768</span>  <span class="comment">//typedef detail::tmat1x1<f32> fmat1;</span></div>
+<div class="line"><a name="l00769"></a><span class="lineno"> 769</span> </div>
+<div class="line"><a name="l00772"></a><span class="lineno"> 772</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga74ac2e71b650162d8f7cb2a70c2f6711">fmat2x2</a>, aligned_fmat2, 16);</div>
+<div class="line"><a name="l00773"></a><span class="lineno"> 773</span> </div>
+<div class="line"><a name="l00776"></a><span class="lineno"> 776</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gad339e25c32fe6665acf028f26c1b3e22">fmat3x3</a>, aligned_fmat3, 16);</div>
+<div class="line"><a name="l00777"></a><span class="lineno"> 777</span> </div>
+<div class="line"><a name="l00780"></a><span class="lineno"> 780</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gabd79752ff357d83b49136b6299ea62d9">fmat4x4</a>, aligned_fmat4, 16);</div>
+<div class="line"><a name="l00781"></a><span class="lineno"> 781</span> </div>
+<div class="line"><a name="l00782"></a><span class="lineno"> 782</span> </div>
+<div class="line"><a name="l00785"></a><span class="lineno"> 785</span>  <span class="comment">//typedef f32 fmat1x1;</span></div>
+<div class="line"><a name="l00786"></a><span class="lineno"> 786</span> </div>
+<div class="line"><a name="l00789"></a><span class="lineno"> 789</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga74ac2e71b650162d8f7cb2a70c2f6711">fmat2x2</a>, aligned_fmat2x2, 16);</div>
+<div class="line"><a name="l00790"></a><span class="lineno"> 790</span> </div>
+<div class="line"><a name="l00793"></a><span class="lineno"> 793</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gaf17b2604c0d92bffb92375d8aa588756">fmat2x3</a>, aligned_fmat2x3, 16);</div>
+<div class="line"><a name="l00794"></a><span class="lineno"> 794</span> </div>
+<div class="line"><a name="l00797"></a><span class="lineno"> 797</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga709c97c20efa24ff1d9e83cd437b8ed5">fmat2x4</a>, aligned_fmat2x4, 16);</div>
+<div class="line"><a name="l00798"></a><span class="lineno"> 798</span> </div>
+<div class="line"><a name="l00801"></a><span class="lineno"> 801</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga9f20af6e8eca2abdcde08408948cc1ca">fmat3x2</a>, aligned_fmat3x2, 16);</div>
+<div class="line"><a name="l00802"></a><span class="lineno"> 802</span> </div>
+<div class="line"><a name="l00805"></a><span class="lineno"> 805</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gad339e25c32fe6665acf028f26c1b3e22">fmat3x3</a>, aligned_fmat3x3, 16);</div>
+<div class="line"><a name="l00806"></a><span class="lineno"> 806</span> </div>
+<div class="line"><a name="l00809"></a><span class="lineno"> 809</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gab04bc97371cb6b5f54b3688e0c81578b">fmat3x4</a>, aligned_fmat3x4, 16);</div>
+<div class="line"><a name="l00810"></a><span class="lineno"> 810</span> </div>
+<div class="line"><a name="l00813"></a><span class="lineno"> 813</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gab0082a25f19f02d2d0af0fcbe5ead732">fmat4x2</a>, aligned_fmat4x2, 16);</div>
+<div class="line"><a name="l00814"></a><span class="lineno"> 814</span> </div>
+<div class="line"><a name="l00817"></a><span class="lineno"> 817</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga1a11c170f030ab34ddf037714e936cba">fmat4x3</a>, aligned_fmat4x3, 16);</div>
+<div class="line"><a name="l00818"></a><span class="lineno"> 818</span> </div>
+<div class="line"><a name="l00821"></a><span class="lineno"> 821</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gabd79752ff357d83b49136b6299ea62d9">fmat4x4</a>, aligned_fmat4x4, 16);</div>
+<div class="line"><a name="l00822"></a><span class="lineno"> 822</span> </div>
+<div class="line"><a name="l00823"></a><span class="lineno"> 823</span> </div>
+<div class="line"><a name="l00826"></a><span class="lineno"> 826</span>  <span class="comment">//typedef detail::tmat1x1<f32, defaultp> f32mat1;</span></div>
+<div class="line"><a name="l00827"></a><span class="lineno"> 827</span> </div>
+<div class="line"><a name="l00830"></a><span class="lineno"> 830</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gaf3a5016bf360977ce114deb2e01ae10a">f32mat2x2</a>, aligned_f32mat2, 16);</div>
+<div class="line"><a name="l00831"></a><span class="lineno"> 831</span> </div>
+<div class="line"><a name="l00834"></a><span class="lineno"> 834</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga1e4c52bb824ca16c6e2e5b03635669d0">f32mat3x3</a>, aligned_f32mat3, 16);</div>
+<div class="line"><a name="l00835"></a><span class="lineno"> 835</span> </div>
+<div class="line"><a name="l00838"></a><span class="lineno"> 838</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gafe2e08549805a7ded26da2a868bedbf5">f32mat4x4</a>, aligned_f32mat4, 16);</div>
+<div class="line"><a name="l00839"></a><span class="lineno"> 839</span> </div>
+<div class="line"><a name="l00840"></a><span class="lineno"> 840</span> </div>
+<div class="line"><a name="l00843"></a><span class="lineno"> 843</span>  <span class="comment">//typedef f32 f32mat1x1;</span></div>
+<div class="line"><a name="l00844"></a><span class="lineno"> 844</span> </div>
+<div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gaf3a5016bf360977ce114deb2e01ae10a">f32mat2x2</a>, aligned_f32mat2x2, 16);</div>
+<div class="line"><a name="l00848"></a><span class="lineno"> 848</span> </div>
+<div class="line"><a name="l00851"></a><span class="lineno"> 851</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gad5f1043adbe803928fe7bf1a90a1f767">f32mat2x3</a>, aligned_f32mat2x3, 16);</div>
+<div class="line"><a name="l00852"></a><span class="lineno"> 852</span> </div>
+<div class="line"><a name="l00855"></a><span class="lineno"> 855</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga5ed667d0247cce477f013ea31982843d">f32mat2x4</a>, aligned_f32mat2x4, 16);</div>
+<div class="line"><a name="l00856"></a><span class="lineno"> 856</span> </div>
+<div class="line"><a name="l00859"></a><span class="lineno"> 859</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga8709a1ea268fa69bdf1e11616d7fbaf1">f32mat3x2</a>, aligned_f32mat3x2, 16);</div>
+<div class="line"><a name="l00860"></a><span class="lineno"> 860</span> </div>
+<div class="line"><a name="l00863"></a><span class="lineno"> 863</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga1e4c52bb824ca16c6e2e5b03635669d0">f32mat3x3</a>, aligned_f32mat3x3, 16);</div>
+<div class="line"><a name="l00864"></a><span class="lineno"> 864</span> </div>
+<div class="line"><a name="l00867"></a><span class="lineno"> 867</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga0100666c90176eaba80e49357d123c7f">f32mat3x4</a>, aligned_f32mat3x4, 16);</div>
+<div class="line"><a name="l00868"></a><span class="lineno"> 868</span> </div>
+<div class="line"><a name="l00871"></a><span class="lineno"> 871</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga27f897bdfe4bbded9481b8947553d1ff">f32mat4x2</a>, aligned_f32mat4x2, 16);</div>
+<div class="line"><a name="l00872"></a><span class="lineno"> 872</span> </div>
+<div class="line"><a name="l00875"></a><span class="lineno"> 875</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gaa69e73ffb01a52499071391d395908fb">f32mat4x3</a>, aligned_f32mat4x3, 16);</div>
+<div class="line"><a name="l00876"></a><span class="lineno"> 876</span> </div>
+<div class="line"><a name="l00879"></a><span class="lineno"> 879</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gafe2e08549805a7ded26da2a868bedbf5">f32mat4x4</a>, aligned_f32mat4x4, 16);</div>
+<div class="line"><a name="l00880"></a><span class="lineno"> 880</span> </div>
+<div class="line"><a name="l00881"></a><span class="lineno"> 881</span> </div>
+<div class="line"><a name="l00884"></a><span class="lineno"> 884</span>  <span class="comment">//typedef detail::tmat1x1<f64, defaultp> f64mat1;</span></div>
+<div class="line"><a name="l00885"></a><span class="lineno"> 885</span> </div>
+<div class="line"><a name="l00888"></a><span class="lineno"> 888</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gaeb817419c76a0766c88713d2754e6cb3">f64mat2x2</a>, aligned_f64mat2, 32);</div>
+<div class="line"><a name="l00889"></a><span class="lineno"> 889</span> </div>
+<div class="line"><a name="l00892"></a><span class="lineno"> 892</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gae1a5081181c96cc37ce9418f6e856cb6">f64mat3x3</a>, aligned_f64mat3, 32);</div>
+<div class="line"><a name="l00893"></a><span class="lineno"> 893</span> </div>
+<div class="line"><a name="l00896"></a><span class="lineno"> 896</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga489163773b021f1800a33cc2fa730c3b">f64mat4x4</a>, aligned_f64mat4, 32);</div>
+<div class="line"><a name="l00897"></a><span class="lineno"> 897</span> </div>
+<div class="line"><a name="l00898"></a><span class="lineno"> 898</span> </div>
+<div class="line"><a name="l00901"></a><span class="lineno"> 901</span>  <span class="comment">//typedef f64 f64mat1x1;</span></div>
+<div class="line"><a name="l00902"></a><span class="lineno"> 902</span> </div>
+<div class="line"><a name="l00905"></a><span class="lineno"> 905</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gaeb817419c76a0766c88713d2754e6cb3">f64mat2x2</a>, aligned_f64mat2x2, 32);</div>
+<div class="line"><a name="l00906"></a><span class="lineno"> 906</span> </div>
+<div class="line"><a name="l00909"></a><span class="lineno"> 909</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga87d256f4719417e311cd0ea14264678d">f64mat2x3</a>, aligned_f64mat2x3, 32);</div>
+<div class="line"><a name="l00910"></a><span class="lineno"> 910</span> </div>
+<div class="line"><a name="l00913"></a><span class="lineno"> 913</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gafb18822e2eac88fa861a76cefd25d550">f64mat2x4</a>, aligned_f64mat2x4, 32);</div>
+<div class="line"><a name="l00914"></a><span class="lineno"> 914</span> </div>
+<div class="line"><a name="l00917"></a><span class="lineno"> 917</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga11e5684b10e098f573ff484c1a569ae2">f64mat3x2</a>, aligned_f64mat3x2, 32);</div>
+<div class="line"><a name="l00918"></a><span class="lineno"> 918</span> </div>
+<div class="line"><a name="l00921"></a><span class="lineno"> 921</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gae1a5081181c96cc37ce9418f6e856cb6">f64mat3x3</a>, aligned_f64mat3x3, 32);</div>
+<div class="line"><a name="l00922"></a><span class="lineno"> 922</span> </div>
+<div class="line"><a name="l00925"></a><span class="lineno"> 925</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gad37a55a8ce1154083a721b4ecfd55293">f64mat3x4</a>, aligned_f64mat3x4, 32);</div>
+<div class="line"><a name="l00926"></a><span class="lineno"> 926</span> </div>
+<div class="line"><a name="l00929"></a><span class="lineno"> 929</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gaa669dfb59031a441de19b34a92704d57">f64mat4x2</a>, aligned_f64mat4x2, 32);</div>
+<div class="line"><a name="l00930"></a><span class="lineno"> 930</span> </div>
+<div class="line"><a name="l00933"></a><span class="lineno"> 933</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#gaba137814a509704937746cc1e82edc32">f64mat4x3</a>, aligned_f64mat4x3, 32);</div>
+<div class="line"><a name="l00934"></a><span class="lineno"> 934</span> </div>
+<div class="line"><a name="l00937"></a><span class="lineno"> 937</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga489163773b021f1800a33cc2fa730c3b">f64mat4x4</a>, aligned_f64mat4x4, 32);</div>
+<div class="line"><a name="l00938"></a><span class="lineno"> 938</span> </div>
+<div class="line"><a name="l00939"></a><span class="lineno"> 939</span> </div>
+<div class="line"><a name="l00941"></a><span class="lineno"> 941</span>  <span class="comment">// Quaternion types</span></div>
+<div class="line"><a name="l00942"></a><span class="lineno"> 942</span> </div>
+<div class="line"><a name="l00945"></a><span class="lineno"> 945</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(quat, aligned_quat, 16);</div>
+<div class="line"><a name="l00946"></a><span class="lineno"> 946</span> </div>
+<div class="line"><a name="l00949"></a><span class="lineno"> 949</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(fquat, aligned_fquat, 16);</div>
+<div class="line"><a name="l00950"></a><span class="lineno"> 950</span> </div>
+<div class="line"><a name="l00953"></a><span class="lineno"> 953</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(dquat, aligned_dquat, 32);</div>
+<div class="line"><a name="l00954"></a><span class="lineno"> 954</span> </div>
+<div class="line"><a name="l00957"></a><span class="lineno"> 957</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga6966c0cb4673928c9c9da2e91006d2c0">f32quat</a>, aligned_f32quat, 16);</div>
+<div class="line"><a name="l00958"></a><span class="lineno"> 958</span> </div>
+<div class="line"><a name="l00961"></a><span class="lineno"> 961</span>  <a class="code" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a>(<a class="code" href="a00177.html#ga14c583bd625eda8cf4935a14d5dd544d">f64quat</a>, aligned_f64quat, 32);</div>
+<div class="line"><a name="l00962"></a><span class="lineno"> 962</span> </div>
+<div class="line"><a name="l00964"></a><span class="lineno"> 964</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00965"></a><span class="lineno"> 965</span> </div>
+<div class="line"><a name="l00966"></a><span class="lineno"> 966</span> <span class="preprocessor">#include "type_aligned.inl"</span></div>
+<div class="ttc" id="a00157_html_ga34aee73784bcc247d426250540c1911c"><div class="ttname"><a href="a00157.html#ga34aee73784bcc247d426250540c1911c">glm::ivec3</a></div><div class="ttdeci">highp_ivec3 ivec3</div><div class="ttdoc">3 components vector of signed integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00515">type_vec.hpp:515</a></div></div>
+<div class="ttc" id="a00177_html_ga119c41d73fe9977358174eb3ac1035a3"><div class="ttname"><a href="a00177.html#ga119c41d73fe9977358174eb3ac1035a3">glm::lowp_int8_t</a></div><div class="ttdeci">detail::int8 lowp_int8_t</div><div class="ttdoc">Low precision 8 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00116">fwd.hpp:116</a></div></div>
+<div class="ttc" id="a00177_html_ga28f03a39ac56c70f9bf3ada11cb60e3b"><div class="ttname"><a href="a00177.html#ga28f03a39ac56c70f9bf3ada11cb60e3b">glm::i16vec1</a></div><div class="ttdeci">highp_i16vec1 i16vec1</div><div class="ttdoc">Default precision 16 bit signed integer scalar type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00444">fwd.hpp:444</a></div></div>
+<div class="ttc" id="a00177_html_ga3174a49dc84a977cad7012a62f4af02f"><div class="ttname"><a href="a00177.html#ga3174a49dc84a977cad7012a62f4af02f">glm::f32vec1</a></div><div class="ttdeci">highp_f32vec1 f32vec1</div><div class="ttdoc">Default single-precision floating-point vector of 1 components. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02397">fwd.hpp:2397</a></div></div>
+<div class="ttc" id="a00177_html_ga5ed667d0247cce477f013ea31982843d"><div class="ttname"><a href="a00177.html#ga5ed667d0247cce477f013ea31982843d">glm::f32mat2x4</a></div><div class="ttdeci">highp_f32mat2x4 f32mat2x4</div><div class="ttdoc">Default single-precision floating-point 2x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02421">fwd.hpp:2421</a></div></div>
+<div class="ttc" id="a00177_html_gaf49470869e9be2c059629b250619804e"><div class="ttname"><a href="a00177.html#gaf49470869e9be2c059629b250619804e">glm::lowp_uint8</a></div><div class="ttdeci">detail::uint8 lowp_uint8</div><div class="ttdoc">Low precision 8 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00703">fwd.hpp:703</a></div></div>
+<div class="ttc" id="a00177_html_ga8723186104dc02eb85da386105fba75f"><div class="ttname"><a href="a00177.html#ga8723186104dc02eb85da386105fba75f">glm::f64vec4</a></div><div class="ttdeci">highp_f64vec4 f64vec4</div><div class="ttdoc">Default double-precision floating-point vector of 4 components. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02515">fwd.hpp:2515</a></div></div>
+<div class="ttc" id="a00177_html_ga913a8bd51e4ebccd30ad488de3c18da9"><div class="ttname"><a href="a00177.html#ga913a8bd51e4ebccd30ad488de3c18da9">glm::u32vec1</a></div><div class="ttdeci">highp_u32vec1 u32vec1</div><div class="ttdoc">Default precision 32 bit unsigned integer scalar type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l01132">fwd.hpp:1132</a></div></div>
+<div class="ttc" id="a00177_html_ga6fbd69cbdaa44345bff923a2cf63de7e"><div class="ttname"><a href="a00177.html#ga6fbd69cbdaa44345bff923a2cf63de7e">glm::mediump_int8</a></div><div class="ttdeci">detail::int8 mediump_int8</div><div class="ttdoc">Medium precision 8 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00148">fwd.hpp:148</a></div></div>
+<div class="ttc" id="a00177_html_gacf1ded173e1e2d049c511d095b259e21"><div class="ttname"><a href="a00177.html#gacf1ded173e1e2d049c511d095b259e21">glm::mediump_i8</a></div><div class="ttdeci">detail::int8 mediump_i8</div><div class="ttdoc">Medium precision 8 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00180">fwd.hpp:180</a></div></div>
+<div class="ttc" id="a00177_html_gacd1259f3a9e8d2a9df5be2d74322ef9c"><div class="ttname"><a href="a00177.html#gacd1259f3a9e8d2a9df5be2d74322ef9c">glm::highp_u8</a></div><div class="ttdeci">detail::uint8 highp_u8</div><div class="ttdoc">Medium precision 8 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00837">fwd.hpp:837</a></div></div>
+<div class="ttc" id="a00177_html_ga6d7b3789ecb932c26430009478cac7ae"><div class="ttname"><a href="a00177.html#ga6d7b3789ecb932c26430009478cac7ae">glm::mediump_int8_t</a></div><div class="ttdeci">detail::int8 mediump_int8_t</div><div class="ttdoc">Medium precision 8 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00164">fwd.hpp:164</a></div></div>
+<div class="ttc" id="a00177_html_gaa46172d7dc1c7ffe3e78107ff88adf08"><div class="ttname"><a href="a00177.html#gaa46172d7dc1c7ffe3e78107ff88adf08">glm::highp_uint64_t</a></div><div class="ttdeci">detail::uint64 highp_uint64_t</div><div class="ttdoc">Medium precision 64 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00833">fwd.hpp:833</a></div></div>
+<div class="ttc" id="a00177_html_ga746dc6da204f5622e395f492997dbf57"><div class="ttname"><a href="a00177.html#ga746dc6da204f5622e395f492997dbf57">glm::highp_uint16</a></div><div class="ttdeci">detail::uint16 highp_uint16</div><div class="ttdoc">Medium precision 16 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00809">fwd.hpp:809</a></div></div>
+<div class="ttc" id="a00177_html_gae978599c9711ac263ba732d4ac225b0e"><div class="ttname"><a href="a00177.html#gae978599c9711ac263ba732d4ac225b0e">glm::highp_uint32_t</a></div><div class="ttdeci">detail::uint32 highp_uint32_t</div><div class="ttdoc">Medium precision 32 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00829">fwd.hpp:829</a></div></div>
+<div class="ttc" id="a00177_html_gaf5e94bf2a20af7601787c154751dc2e1"><div class="ttname"><a href="a00177.html#gaf5e94bf2a20af7601787c154751dc2e1">glm::mediump_i32</a></div><div class="ttdeci">detail::int32 mediump_i32</div><div class="ttdoc">Medium precision 32 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00188">fwd.hpp:188</a></div></div>
+<div class="ttc" id="a00177_html_gacb88796f2d08ef253d0345aff20c3aee"><div class="ttname"><a href="a00177.html#gacb88796f2d08ef253d0345aff20c3aee">glm::highp_i8</a></div><div class="ttdeci">detail::int8 highp_i8</div><div class="ttdoc">High precision 8 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00228">fwd.hpp:228</a></div></div>
+<div class="ttc" id="a00177_html_gade69872a31f066e5ae212f1af6008edb"><div class="ttname"><a href="a00177.html#gade69872a31f066e5ae212f1af6008edb">glm::i64vec2</a></div><div class="ttdeci">highp_i64vec2 i64vec2</div><div class="ttdoc">Default precision 64 bit signed integer vector of 2 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00686">fwd.hpp:686</a></div></div>
+<div class="ttc" id="a00177_html_gad9b52e1c271cb9c8bfae6365d3e38a23"><div class="ttname"><a href="a00177.html#gad9b52e1c271cb9c8bfae6365d3e38a23">glm::u32vec3</a></div><div class="ttdeci">highp_u32vec3 u32vec3</div><div class="ttdoc">Default precision 32 bit unsigned integer vector of 3 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l01140">fwd.hpp:1140</a></div></div>
+<div class="ttc" id="a00157_html_ga0c84b211a5730357b63c6d2e4fb696d5"><div class="ttname"><a href="a00157.html#ga0c84b211a5730357b63c6d2e4fb696d5">glm::mat2x2</a></div><div class="ttdeci">highp_mat2x2 mat2x2</div><div class="ttdoc">2 columns of 2 components matrix of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00359">type_mat.hpp:359</a></div></div>
+<div class="ttc" id="a00157_html_ga6e30cfba068ebc3c71fe1f8b3110e450"><div class="ttname"><a href="a00157.html#ga6e30cfba068ebc3c71fe1f8b3110e450">glm::mat2</a></div><div class="ttdeci">mat2x2 mat2</div><div class="ttdoc">2 columns of 2 components matrix of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00406">type_mat.hpp:406</a></div></div>
+<div class="ttc" id="a00177_html_gad68bfd9f881856fc863a6ebca0b67f78"><div class="ttname"><a href="a00177.html#gad68bfd9f881856fc863a6ebca0b67f78">glm::lowp_uint16</a></div><div class="ttdeci">detail::uint16 lowp_uint16</div><div class="ttdoc">Low precision 16 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00707">fwd.hpp:707</a></div></div>
+<div class="ttc" id="a00177_html_ga8ca60d0ba6d438892be6017f43747661"><div class="ttname"><a href="a00177.html#ga8ca60d0ba6d438892be6017f43747661">glm::u8vec3</a></div><div class="ttdeci">highp_u8vec3 u8vec3</div><div class="ttdoc">Default precision 8 bit unsigned integer vector of 3 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00981">fwd.hpp:981</a></div></div>
+<div class="ttc" id="a00177_html_ga1e4c52bb824ca16c6e2e5b03635669d0"><div class="ttname"><a href="a00177.html#ga1e4c52bb824ca16c6e2e5b03635669d0">glm::f32mat3x3</a></div><div class="ttdeci">highp_f32mat3x3 f32mat3x3</div><div class="ttdoc">Default single-precision floating-point 3x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02429">fwd.hpp:2429</a></div></div>
+<div class="ttc" id="a00177_html_ga3ebcb1f6d8d8387253de8bccb058d77f"><div class="ttname"><a href="a00177.html#ga3ebcb1f6d8d8387253de8bccb058d77f">glm::mediump_i64</a></div><div class="ttdeci">detail::int64 mediump_i64</div><div class="ttdoc">Medium precision 64 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00192">fwd.hpp:192</a></div></div>
+<div class="ttc" id="a00177_html_gaf524c9059f0342668d8eea359bcceaae"><div class="ttname"><a href="a00177.html#gaf524c9059f0342668d8eea359bcceaae">glm::u16vec4</a></div><div class="ttdeci">highp_u16vec4 u16vec4</div><div class="ttdoc">Default precision 16 bit unsigned integer vector of 4 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l01065">fwd.hpp:1065</a></div></div>
+<div class="ttc" id="a00177_html_ga0c181fdf06a309691999926b6690c969"><div class="ttname"><a href="a00177.html#ga0c181fdf06a309691999926b6690c969">glm::highp_u64</a></div><div class="ttdeci">detail::uint64 highp_u64</div><div class="ttdoc">Medium precision 64 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00849">fwd.hpp:849</a></div></div>
+<div class="ttc" id="a00177_html_gac5b04f32ae3084a9131a0851e7f4cfae"><div class="ttname"><a href="a00177.html#gac5b04f32ae3084a9131a0851e7f4cfae">glm::f64vec1</a></div><div class="ttdeci">highp_f64vec1 f64vec1</div><div class="ttdoc">Default double-precision floating-point vector of 1 components. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02503">fwd.hpp:2503</a></div></div>
+<div class="ttc" id="a00177_html_gafb6ca34df28889a5db9d244aed375411"><div class="ttname"><a href="a00177.html#gafb6ca34df28889a5db9d244aed375411">glm::u64vec4</a></div><div class="ttdeci">highp_u64vec4 u64vec4</div><div class="ttdoc">Default precision 64 bit unsigned integer vector of 4 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l01303">fwd.hpp:1303</a></div></div>
+<div class="ttc" id="a00177_html_ga760bcf26fdb23a2c3ecad3c928a19ae6"><div class="ttname"><a href="a00177.html#ga760bcf26fdb23a2c3ecad3c928a19ae6">glm::lowp_int8</a></div><div class="ttdeci">detail::int8 lowp_int8</div><div class="ttdoc">Low precision 8 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00100">fwd.hpp:100</a></div></div>
+<div class="ttc" id="a00177_html_ga698e36b01167fc0f037889334dce8def"><div class="ttname"><a href="a00177.html#ga698e36b01167fc0f037889334dce8def">glm::lowp_int16</a></div><div class="ttdeci">detail::int16 lowp_int16</div><div class="ttdoc">Low precision 16 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00104">fwd.hpp:104</a></div></div>
+<div class="ttc" id="a00176_html_ga8a9f0a4795ccc442fa9901845026f9f5"><div class="ttname"><a href="a00176.html#ga8a9f0a4795ccc442fa9901845026f9f5">glm::aligned_dvec4</a></div><div class="ttdeci">aligned_highp_dvec4 aligned_dvec4</div><div class="ttdoc">4 components vector of double-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00284">gtc/type_aligned.hpp:284</a></div></div>
+<div class="ttc" id="a00177_html_gad73e5e905dcf2d8cab002b4ab46e9426"><div class="ttname"><a href="a00177.html#gad73e5e905dcf2d8cab002b4ab46e9426">glm::i16vec4</a></div><div class="ttdeci">highp_i16vec4 i16vec4</div><div class="ttdoc">Default precision 16 bit signed integer vector of 4 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00456">fwd.hpp:456</a></div></div>
+<div class="ttc" id="a00177_html_ga3ab5fe184343d394fb6c2723c3ee3699"><div class="ttname"><a href="a00177.html#ga3ab5fe184343d394fb6c2723c3ee3699">glm::i16</a></div><div class="ttdeci">detail::int16 i16</div><div class="ttdoc">16 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00289">fwd.hpp:289</a></div></div>
+<div class="ttc" id="a00176_html_ga4974f46ae5a19415d91316960a53617a"><div class="ttname"><a href="a00176.html#ga4974f46ae5a19415d91316960a53617a">glm::aligned_dvec1</a></div><div class="ttdeci">aligned_highp_dvec1 aligned_dvec1</div><div class="ttdoc">1 component vector of double-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00275">gtc/type_aligned.hpp:275</a></div></div>
+<div class="ttc" id="a00177_html_ga11e5684b10e098f573ff484c1a569ae2"><div class="ttname"><a href="a00177.html#ga11e5684b10e098f573ff484c1a569ae2">glm::f64mat3x2</a></div><div class="ttdeci">highp_f64mat3x2 f64mat3x2</div><div class="ttdoc">Default double-precision floating-point 3x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02531">fwd.hpp:2531</a></div></div>
+<div class="ttc" id="a00177_html_ga7ff73a45cea9613ebf1a9fad0b9f82ac"><div class="ttname"><a href="a00177.html#ga7ff73a45cea9613ebf1a9fad0b9f82ac">glm::lowp_i32</a></div><div class="ttdeci">detail::int32 lowp_i32</div><div class="ttdoc">Low precision 32 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00140">fwd.hpp:140</a></div></div>
+<div class="ttc" id="a00177_html_ga28d97808322d3c92186e4a0c067d7e8e"><div class="ttname"><a href="a00177.html#ga28d97808322d3c92186e4a0c067d7e8e">glm::uint8_t</a></div><div class="ttdeci">detail::uint8 uint8_t</div><div class="ttdoc">8 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00877">fwd.hpp:877</a></div></div>
+<div class="ttc" id="a00177_html_ga0350631d35ff800e6133ac6243b13cbc"><div class="ttname"><a href="a00177.html#ga0350631d35ff800e6133ac6243b13cbc">glm::lowp_int32_t</a></div><div class="ttdeci">detail::int32 lowp_int32_t</div><div class="ttdoc">Low precision 32 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00124">fwd.hpp:124</a></div></div>
+<div class="ttc" id="a00177_html_ga97432f9979e73e66567361fd01e4cffb"><div class="ttname"><a href="a00177.html#ga97432f9979e73e66567361fd01e4cffb">glm::highp_uint8</a></div><div class="ttdeci">detail::uint8 highp_uint8</div><div class="ttdoc">Medium precision 8 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00805">fwd.hpp:805</a></div></div>
+<div class="ttc" id="a00177_html_ga727675ac6b5d2fc699520e0059735e25"><div class="ttname"><a href="a00177.html#ga727675ac6b5d2fc699520e0059735e25">glm::highp_i32</a></div><div class="ttdeci">detail::int32 highp_i32</div><div class="ttdoc">High precision 32 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00236">fwd.hpp:236</a></div></div>
+<div class="ttc" id="a00177_html_ga1fa92a233b9110861cdbc8c2ccf0b5a3"><div class="ttname"><a href="a00177.html#ga1fa92a233b9110861cdbc8c2ccf0b5a3">glm::mediump_uint8</a></div><div class="ttdeci">detail::uint8 mediump_uint8</div><div class="ttdoc">Medium precision 8 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00755">fwd.hpp:755</a></div></div>
+<div class="ttc" id="a00177_html_gad1213a22bbb9e4107f07eaa4956f8281"><div class="ttname"><a href="a00177.html#gad1213a22bbb9e4107f07eaa4956f8281">glm::mediump_u8</a></div><div class="ttdeci">detail::uint8 mediump_u8</div><div class="ttdoc">Medium precision 8 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00787">fwd.hpp:787</a></div></div>
+<div class="ttc" id="a00177_html_gaf17b2604c0d92bffb92375d8aa588756"><div class="ttname"><a href="a00177.html#gaf17b2604c0d92bffb92375d8aa588756">glm::fmat2x3</a></div><div class="ttdeci">highp_f32mat2x3 fmat2x3</div><div class="ttdoc">Default single-precision floating-point 2x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02347">fwd.hpp:2347</a></div></div>
+<div class="ttc" id="a00177_html_ga27f897bdfe4bbded9481b8947553d1ff"><div class="ttname"><a href="a00177.html#ga27f897bdfe4bbded9481b8947553d1ff">glm::f32mat4x2</a></div><div class="ttdeci">highp_f32mat4x2 f32mat4x2</div><div class="ttdoc">Default single-precision floating-point 4x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02437">fwd.hpp:2437</a></div></div>
+<div class="ttc" id="a00157_html_gafbab23070ca47932487d25332adc7d7c"><div class="ttname"><a href="a00157.html#gafbab23070ca47932487d25332adc7d7c">glm::vec4</a></div><div class="ttdeci">highp_vec4 vec4</div><div class="ttdoc">4 components vector of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00466">type_vec.hpp:466</a></div></div>
+<div class="ttc" id="a00177_html_ga8e62c883d13f47015f3b70ed88751369"><div class="ttname"><a href="a00177.html#ga8e62c883d13f47015f3b70ed88751369">glm::highp_u16</a></div><div class="ttdeci">detail::uint16 highp_u16</div><div class="ttdoc">Medium precision 16 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00841">fwd.hpp:841</a></div></div>
+<div class="ttc" id="a00177_html_ga7a6f1929464dcc680b16381a4ee5f2cf"><div class="ttname"><a href="a00177.html#ga7a6f1929464dcc680b16381a4ee5f2cf">glm::highp_u32</a></div><div class="ttdeci">detail::uint32 highp_u32</div><div class="ttdoc">Medium precision 32 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00845">fwd.hpp:845</a></div></div>
+<div class="ttc" id="a00177_html_ga8165913e068444f7842302d40ba897b9"><div class="ttname"><a href="a00177.html#ga8165913e068444f7842302d40ba897b9">glm::u32</a></div><div class="ttdeci">detail::uint32 u32</div><div class="ttdoc">32 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00902">fwd.hpp:902</a></div></div>
+<div class="ttc" id="a00177_html_ga489163773b021f1800a33cc2fa730c3b"><div class="ttname"><a href="a00177.html#ga489163773b021f1800a33cc2fa730c3b">glm::f64mat4x4</a></div><div class="ttdeci">highp_f64mat4x4 f64mat4x4</div><div class="ttdoc">Default double-precision floating-point 4x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02551">fwd.hpp:2551</a></div></div>
+<div class="ttc" id="a00157_html_ga2ab812bd103527e2d6c62c2e2f5ee78f"><div class="ttname"><a href="a00157.html#ga2ab812bd103527e2d6c62c2e2f5ee78f">glm::ivec2</a></div><div class="ttdeci">highp_ivec2 ivec2</div><div class="ttdoc">2 components vector of signed integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00510">type_vec.hpp:510</a></div></div>
+<div class="ttc" id="a00177_html_gad0549c902a96a7164e4ac858d5f39dbf"><div class="ttname"><a href="a00177.html#gad0549c902a96a7164e4ac858d5f39dbf">glm::highp_int8</a></div><div class="ttdeci">detail::int8 highp_int8</div><div class="ttdoc">High precision 8 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00196">fwd.hpp:196</a></div></div>
+<div class="ttc" id="a00177_html_ga87d256f4719417e311cd0ea14264678d"><div class="ttname"><a href="a00177.html#ga87d256f4719417e311cd0ea14264678d">glm::f64mat2x3</a></div><div class="ttdeci">highp_f64mat2x3 f64mat2x3</div><div class="ttdoc">Default double-precision floating-point 2x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02523">fwd.hpp:2523</a></div></div>
+<div class="ttc" id="a00177_html_ga7f5dbe417199277e449b8db0210acb71"><div class="ttname"><a href="a00177.html#ga7f5dbe417199277e449b8db0210acb71">glm::u16vec3</a></div><div class="ttdeci">highp_u16vec3 u16vec3</div><div class="ttdoc">Default precision 16 bit unsigned integer vector of 3 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l01061">fwd.hpp:1061</a></div></div>
+<div class="ttc" id="a00177_html_ga110bec18ca44c41c76c3c9e4d7b5bd79"><div class="ttname"><a href="a00177.html#ga110bec18ca44c41c76c3c9e4d7b5bd79">glm::i16vec2</a></div><div class="ttdeci">highp_i16vec2 i16vec2</div><div class="ttdoc">Default precision 16 bit signed integer vector of 2 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00448">fwd.hpp:448</a></div></div>
+<div class="ttc" id="a00177_html_gaa6a5b461bbf5fe20982472aa51896d4b"><div class="ttname"><a href="a00177.html#gaa6a5b461bbf5fe20982472aa51896d4b">glm::lowp_uint32</a></div><div class="ttdeci">detail::uint32 lowp_uint32</div><div class="ttdoc">Low precision 32 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00711">fwd.hpp:711</a></div></div>
+<div class="ttc" id="a00157_html_ga6dd3ec98a548755676267e59142911f8"><div class="ttname"><a href="a00157.html#ga6dd3ec98a548755676267e59142911f8">glm::mat3</a></div><div class="ttdeci">mat3x3 mat3</div><div class="ttdoc">3 columns of 3 components matrix of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00411">type_mat.hpp:411</a></div></div>
+<div class="ttc" id="a00177_html_ga80e72fe94c88498537e8158ba7591c54"><div class="ttname"><a href="a00177.html#ga80e72fe94c88498537e8158ba7591c54">glm::mediump_int16_t</a></div><div class="ttdeci">detail::int16 mediump_int16_t</div><div class="ttdoc">Medium precision 16 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00168">fwd.hpp:168</a></div></div>
+<div class="ttc" id="a00177_html_ga4bf09d8838a86866b39ee6e109341645"><div class="ttname"><a href="a00177.html#ga4bf09d8838a86866b39ee6e109341645">glm::int8_t</a></div><div class="ttdeci">detail::int8 int8_t</div><div class="ttdoc">8 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00268">fwd.hpp:268</a></div></div>
+<div class="ttc" id="a00177_html_ga30652709815ad9404272a31957daa59e"><div class="ttname"><a href="a00177.html#ga30652709815ad9404272a31957daa59e">glm::mediump_uint64</a></div><div class="ttdeci">detail::uint64 mediump_uint64</div><div class="ttdoc">Medium precision 64 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00767">fwd.hpp:767</a></div></div>
+<div class="ttc" id="a00177_html_ga1a11c170f030ab34ddf037714e936cba"><div class="ttname"><a href="a00177.html#ga1a11c170f030ab34ddf037714e936cba">glm::fmat4x3</a></div><div class="ttdeci">highp_f32mat4x3 fmat4x3</div><div class="ttdoc">Default single-precision floating-point 4x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02371">fwd.hpp:2371</a></div></div>
+<div class="ttc" id="a00177_html_gaa2d7acc0adb536fab71fe261232a40ff"><div class="ttname"><a href="a00177.html#gaa2d7acc0adb536fab71fe261232a40ff">glm::u16</a></div><div class="ttdeci">detail::uint16 u16</div><div class="ttdoc">16 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00898">fwd.hpp:898</a></div></div>
+<div class="ttc" id="a00177_html_ga981b63d5c5f7233a29364e0a968d139b"><div class="ttname"><a href="a00177.html#ga981b63d5c5f7233a29364e0a968d139b">glm::fvec4</a></div><div class="ttdeci">highp_f32vec4 fvec4</div><div class="ttdoc">Default single-precision floating-point vector of 4 components. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02339">fwd.hpp:2339</a></div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00177_html_ga0741d40e2b0fea4f1c50cb325114f075"><div class="ttname"><a href="a00177.html#ga0741d40e2b0fea4f1c50cb325114f075">glm::u32vec2</a></div><div class="ttdeci">highp_u32vec2 u32vec2</div><div class="ttdoc">Default precision 32 bit unsigned integer vector of 2 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l01136">fwd.hpp:1136</a></div></div>
+<div class="ttc" id="a00177_html_gaf3a5016bf360977ce114deb2e01ae10a"><div class="ttname"><a href="a00177.html#gaf3a5016bf360977ce114deb2e01ae10a">glm::f32mat2x2</a></div><div class="ttdeci">highp_f32mat2x2 f32mat2x2</div><div class="ttdoc">Default single-precision floating-point 2x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02413">fwd.hpp:2413</a></div></div>
+<div class="ttc" id="a00177_html_ga5244cef85d6e870e240c76428a262ae8"><div class="ttname"><a href="a00177.html#ga5244cef85d6e870e240c76428a262ae8">glm::mediump_int32</a></div><div class="ttdeci">detail::int32 mediump_int32</div><div class="ttdoc">Medium precision 32 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00156">fwd.hpp:156</a></div></div>
+<div class="ttc" id="a00177_html_ga0336abc2604dd2c20c30e036454b64f8"><div class="ttname"><a href="a00177.html#ga0336abc2604dd2c20c30e036454b64f8">glm::highp_i16</a></div><div class="ttdeci">detail::int16 highp_i16</div><div class="ttdoc">High precision 16 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00232">fwd.hpp:232</a></div></div>
+<div class="ttc" id="a00177_html_ga8709a1ea268fa69bdf1e11616d7fbaf1"><div class="ttname"><a href="a00177.html#ga8709a1ea268fa69bdf1e11616d7fbaf1">glm::f32mat3x2</a></div><div class="ttdeci">highp_f32mat3x2 f32mat3x2</div><div class="ttdoc">Default single-precision floating-point 3x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02425">fwd.hpp:2425</a></div></div>
+<div class="ttc" id="a00177_html_gac4e00a26a2adb5f2c0a7096810df29e5"><div class="ttname"><a href="a00177.html#gac4e00a26a2adb5f2c0a7096810df29e5">glm::highp_uint8_t</a></div><div class="ttdeci">detail::uint8 highp_uint8_t</div><div class="ttdoc">Medium precision 8 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00821">fwd.hpp:821</a></div></div>
+<div class="ttc" id="a00177_html_gaa669dfb59031a441de19b34a92704d57"><div class="ttname"><a href="a00177.html#gaa669dfb59031a441de19b34a92704d57">glm::f64mat4x2</a></div><div class="ttdeci">highp_f64mat4x2 f64mat4x2</div><div class="ttdoc">Default double-precision floating-point 4x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02543">fwd.hpp:2543</a></div></div>
+<div class="ttc" id="a00177_html_gad37a55a8ce1154083a721b4ecfd55293"><div class="ttname"><a href="a00177.html#gad37a55a8ce1154083a721b4ecfd55293">glm::f64mat3x4</a></div><div class="ttdeci">highp_f64mat3x4 f64mat3x4</div><div class="ttdoc">Default double-precision floating-point 3x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02539">fwd.hpp:2539</a></div></div>
+<div class="ttc" id="a00157_html_gade0eb47c01f79384a6f38017ede17446"><div class="ttname"><a href="a00157.html#gade0eb47c01f79384a6f38017ede17446">glm::mat4</a></div><div class="ttdeci">mat4x4 mat4</div><div class="ttdoc">4 columns of 4 components matrix of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00416">type_mat.hpp:416</a></div></div>
+<div class="ttc" id="a00177_html_gabd79752ff357d83b49136b6299ea62d9"><div class="ttname"><a href="a00177.html#gabd79752ff357d83b49136b6299ea62d9">glm::fmat4x4</a></div><div class="ttdeci">highp_f32mat4x4 fmat4x4</div><div class="ttdoc">Default single-precision floating-point 4x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02375">fwd.hpp:2375</a></div></div>
+<div class="ttc" id="a00177_html_ga41d579d81c3d98edd0532244fa02da77"><div class="ttname"><a href="a00177.html#ga41d579d81c3d98edd0532244fa02da77">glm::float32_t</a></div><div class="ttdeci">highp_float32_t float32_t</div><div class="ttdoc">Default 32 bit single-precision floating-point scalar. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l01497">fwd.hpp:1497</a></div></div>
+<div class="ttc" id="a00177_html_gaa38d732f5d4a7bc42a1b43b9d3c141ce"><div class="ttname"><a href="a00177.html#gaa38d732f5d4a7bc42a1b43b9d3c141ce">glm::highp_uint64</a></div><div class="ttdeci">detail::uint64 highp_uint64</div><div class="ttdoc">Medium precision 64 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00817">fwd.hpp:817</a></div></div>
+<div class="ttc" id="a00177_html_ga793c9293cc687a0e342396a377c5df77"><div class="ttname"><a href="a00177.html#ga793c9293cc687a0e342396a377c5df77">glm::u64vec1</a></div><div class="ttdeci">highp_u64vec1 u64vec1</div><div class="ttdoc">Default precision 64 bit unsigned integer scalar type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l01291">fwd.hpp:1291</a></div></div>
+<div class="ttc" id="a00177_html_ga354736e0c645099cd44c42fb2f87c2b8"><div class="ttname"><a href="a00177.html#ga354736e0c645099cd44c42fb2f87c2b8">glm::lowp_i64</a></div><div class="ttdeci">detail::int64 lowp_i64</div><div class="ttdoc">Low precision 64 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00144">fwd.hpp:144</a></div></div>
+<div class="ttc" id="a00177_html_gafacc3614bb1136a7756293e67d34de22"><div class="ttname"><a href="a00177.html#gafacc3614bb1136a7756293e67d34de22">glm::f64vec3</a></div><div class="ttdeci">highp_f64vec3 f64vec3</div><div class="ttdoc">Default double-precision floating-point vector of 3 components. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02511">fwd.hpp:2511</a></div></div>
+<div class="ttc" id="a00177_html_ga864aabca5f3296e176e0c3ed9cc16b02"><div class="ttname"><a href="a00177.html#ga864aabca5f3296e176e0c3ed9cc16b02">glm::lowp_int32</a></div><div class="ttdeci">detail::int32 lowp_int32</div><div class="ttdoc">Low precision 32 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00108">fwd.hpp:108</a></div></div>
+<div class="ttc" id="a00177_html_ga8dd3a3281ae5c970ffe0c41d538aa153"><div class="ttname"><a href="a00177.html#ga8dd3a3281ae5c970ffe0c41d538aa153">glm::lowp_uint64_t</a></div><div class="ttdeci">detail::uint64 lowp_uint64_t</div><div class="ttdoc">Low precision 64 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00732">fwd.hpp:732</a></div></div>
+<div class="ttc" id="a00177_html_ga4cca6bbd117c45f046291fc8e9d03765"><div class="ttname"><a href="a00177.html#ga4cca6bbd117c45f046291fc8e9d03765">glm::i32vec1</a></div><div class="ttdeci">highp_i32vec1 i32vec1</div><div class="ttdoc">Default precision 32 bit signed integer scalar type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00523">fwd.hpp:523</a></div></div>
+<div class="ttc" id="a00177_html_ga4f072ada9552e1e480bbb3b1acde5250"><div class="ttname"><a href="a00177.html#ga4f072ada9552e1e480bbb3b1acde5250">glm::lowp_u32</a></div><div class="ttdeci">detail::uint32 lowp_u32</div><div class="ttdoc">Low precision 32 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00745">fwd.hpp:745</a></div></div>
+<div class="ttc" id="a00177_html_ga61667c99caf60ce6c48ebbbac72bd91d"><div class="ttname"><a href="a00177.html#ga61667c99caf60ce6c48ebbbac72bd91d">glm::u8vec2</a></div><div class="ttdeci">highp_u8vec2 u8vec2</div><div class="ttdoc">Default precision 8 bit unsigned integer vector of 2 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00977">fwd.hpp:977</a></div></div>
+<div class="ttc" id="a00177_html_ga973b226a9914db682c9372fc761fb535"><div class="ttname"><a href="a00177.html#ga973b226a9914db682c9372fc761fb535">glm::i16vec3</a></div><div class="ttdeci">highp_i16vec3 i16vec3</div><div class="ttdoc">Default precision 16 bit signed integer vector of 3 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00452">fwd.hpp:452</a></div></div>
+<div class="ttc" id="a00177_html_gae0cb53ea6fe3d977fe588ce423d57cc3"><div class="ttname"><a href="a00177.html#gae0cb53ea6fe3d977fe588ce423d57cc3">glm::f32vec2</a></div><div class="ttdeci">highp_f32vec2 f32vec2</div><div class="ttdoc">Default single-precision floating-point vector of 2 components. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02401">fwd.hpp:2401</a></div></div>
+<div class="ttc" id="a00176_html_ga76298aed82a439063c3d55980c84aa0b"><div class="ttname"><a href="a00176.html#ga76298aed82a439063c3d55980c84aa0b">glm::aligned_ivec1</a></div><div class="ttdeci">aligned_highp_ivec1 aligned_ivec1</div><div class="ttdoc">1 component vector of signed integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00299">gtc/type_aligned.hpp:299</a></div></div>
+<div class="ttc" id="a00177_html_ga667b2ece2b258be898812dc2177995d1"><div class="ttname"><a href="a00177.html#ga667b2ece2b258be898812dc2177995d1">glm::lowp_uint8_t</a></div><div class="ttdeci">detail::uint8 lowp_uint8_t</div><div class="ttdoc">Low precision 8 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00720">fwd.hpp:720</a></div></div>
+<div class="ttc" id="a00177_html_ga9756e45c8f80329257f3cbdabc3bd73c"><div class="ttname"><a href="a00177.html#ga9756e45c8f80329257f3cbdabc3bd73c">glm::i64vec4</a></div><div class="ttdeci">highp_i64vec4 i64vec4</div><div class="ttdoc">Default precision 64 bit signed integer vector of 4 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00694">fwd.hpp:694</a></div></div>
+<div class="ttc" id="a00177_html_gaf9f4173dd9e8b2d0b663c6f80ed09ff6"><div class="ttname"><a href="a00177.html#gaf9f4173dd9e8b2d0b663c6f80ed09ff6">glm::fvec2</a></div><div class="ttdeci">highp_f32vec2 fvec2</div><div class="ttdoc">Default single-precision floating-point vector of 2 components. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02331">fwd.hpp:2331</a></div></div>
+<div class="ttc" id="a00157_html_ga089315d5a0c20ac6eaa17a854bbd2e81"><div class="ttname"><a href="a00157.html#ga089315d5a0c20ac6eaa17a854bbd2e81">glm::mat4x4</a></div><div class="ttdeci">highp_mat4x4 mat4x4</div><div class="ttdoc">4 columns of 4 components matrix of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00399">type_mat.hpp:399</a></div></div>
+<div class="ttc" id="a00176_html_gaa37869eea77d28419b2fb0ff70b69bf0"><div class="ttname"><a href="a00176.html#gaa37869eea77d28419b2fb0ff70b69bf0">glm::aligned_dvec3</a></div><div class="ttdeci">aligned_highp_dvec3 aligned_dvec3</div><div class="ttdoc">3 components vector of double-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00281">gtc/type_aligned.hpp:281</a></div></div>
+<div class="ttc" id="a00177_html_gaeb25dbb0261f82cb08da23e26d343704"><div class="ttname"><a href="a00177.html#gaeb25dbb0261f82cb08da23e26d343704">glm::f32vec4</a></div><div class="ttdeci">highp_f32vec4 f32vec4</div><div class="ttdoc">Default single-precision floating-point vector of 4 components. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02409">fwd.hpp:2409</a></div></div>
+<div class="ttc" id="a00177_html_ga30069d1f02b19599cbfadf98c23ac6ed"><div class="ttname"><a href="a00177.html#ga30069d1f02b19599cbfadf98c23ac6ed">glm::lowp_u64</a></div><div class="ttdeci">detail::uint64 lowp_u64</div><div class="ttdoc">Low precision 64 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00749">fwd.hpp:749</a></div></div>
+<div class="ttc" id="a00176_html_ga0682462f8096a226773e20fac993cde5"><div class="ttname"><a href="a00176.html#ga0682462f8096a226773e20fac993cde5">glm::aligned_vec2</a></div><div class="ttdeci">aligned_highp_vec2 aligned_vec2</div><div class="ttdoc">2 components vector of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00254">gtc/type_aligned.hpp:254</a></div></div>
+<div class="ttc" id="a00177_html_ga302ec977b0c0c3ea245b6c9275495355"><div class="ttname"><a href="a00177.html#ga302ec977b0c0c3ea245b6c9275495355">glm::i8</a></div><div class="ttdeci">detail::int8 i8</div><div class="ttdoc">8 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00285">fwd.hpp:285</a></div></div>
+<div class="ttc" id="a00177_html_ga74ac2e71b650162d8f7cb2a70c2f6711"><div class="ttname"><a href="a00177.html#ga74ac2e71b650162d8f7cb2a70c2f6711">glm::fmat2x2</a></div><div class="ttdeci">highp_f32mat2x2 fmat2x2</div><div class="ttdoc">Default single-precision floating-point 2x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02343">fwd.hpp:2343</a></div></div>
+<div class="ttc" id="a00177_html_ga9ece7c77c7bca7a6b824ef9c600f5e5e"><div class="ttname"><a href="a00177.html#ga9ece7c77c7bca7a6b824ef9c600f5e5e">glm::i64vec3</a></div><div class="ttdeci">highp_i64vec3 i64vec3</div><div class="ttdoc">Default precision 64 bit signed integer vector of 3 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00690">fwd.hpp:690</a></div></div>
+<div class="ttc" id="a00157_html_gae85537b672ffe0b3218cbdf1823e1c72"><div class="ttname"><a href="a00157.html#gae85537b672ffe0b3218cbdf1823e1c72">glm::uvec3</a></div><div class="ttdeci">highp_uvec3 uvec3</div><div class="ttdoc">3 components vector of unsigned integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00542">type_vec.hpp:542</a></div></div>
+<div class="ttc" id="a00177_html_ga392b673fd10847bfb78fb808c6cf8ff7"><div class="ttname"><a href="a00177.html#ga392b673fd10847bfb78fb808c6cf8ff7">glm::lowp_i16</a></div><div class="ttdeci">detail::int16 lowp_i16</div><div class="ttdoc">Low precision 16 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00136">fwd.hpp:136</a></div></div>
+<div class="ttc" id="a00177_html_gaa212b805736a759998e312cbdd550fae"><div class="ttname"><a href="a00177.html#gaa212b805736a759998e312cbdd550fae">glm::lowp_uint64</a></div><div class="ttdeci">detail::uint64 lowp_uint64</div><div class="ttdoc">Low precision 64 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00715">fwd.hpp:715</a></div></div>
+<div class="ttc" id="a00177_html_ga226a8d52b4e3f77aaa6231135e886aac"><div class="ttname"><a href="a00177.html#ga226a8d52b4e3f77aaa6231135e886aac">glm::highp_int64</a></div><div class="ttdeci">detail::int64 highp_int64</div><div class="ttdoc">High precision 64 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00208">fwd.hpp:208</a></div></div>
+<div class="ttc" id="a00177_html_gaecc7082561fc9028b844b6cf3d305d36"><div class="ttname"><a href="a00177.html#gaecc7082561fc9028b844b6cf3d305d36">glm::u8</a></div><div class="ttdeci">detail::uint8 u8</div><div class="ttdoc">8 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00894">fwd.hpp:894</a></div></div>
+<div class="ttc" id="a00177_html_ga1bd0e914158bf03135f8a317de6debe9"><div class="ttname"><a href="a00177.html#ga1bd0e914158bf03135f8a317de6debe9">glm::mediump_u32</a></div><div class="ttdeci">detail::uint32 mediump_u32</div><div class="ttdoc">Medium precision 32 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00795">fwd.hpp:795</a></div></div>
+<div class="ttc" id="a00177_html_gaeb817419c76a0766c88713d2754e6cb3"><div class="ttname"><a href="a00177.html#gaeb817419c76a0766c88713d2754e6cb3">glm::f64mat2x2</a></div><div class="ttdeci">highp_f64mat2x2 f64mat2x2</div><div class="ttdoc">Default double-precision floating-point 2x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02519">fwd.hpp:2519</a></div></div>
+<div class="ttc" id="a00177_html_gaebf341fc4a5be233f7dde962c2e33847"><div class="ttname"><a href="a00177.html#gaebf341fc4a5be233f7dde962c2e33847">glm::lowp_int64_t</a></div><div class="ttdeci">detail::int64 lowp_int64_t</div><div class="ttdoc">Low precision 64 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00128">fwd.hpp:128</a></div></div>
+<div class="ttc" id="a00177_html_ga504ce1631cb2ac02fcf1d44d8c2aa126"><div class="ttname"><a href="a00177.html#ga504ce1631cb2ac02fcf1d44d8c2aa126">glm::lowp_u16</a></div><div class="ttdeci">detail::uint16 lowp_u16</div><div class="ttdoc">Low precision 16 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00741">fwd.hpp:741</a></div></div>
+<div class="ttc" id="a00177_html_ga426030555085ed6c39a54e73afbef962"><div class="ttname"><a href="a00177.html#ga426030555085ed6c39a54e73afbef962">glm::u16vec2</a></div><div class="ttdeci">highp_u16vec2 u16vec2</div><div class="ttdoc">Default precision 16 bit unsigned integer vector of 2 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l01057">fwd.hpp:1057</a></div></div>
+<div class="ttc" id="a00176_html_gabf842c45eea186170c267a328e3f3b7d"><div class="ttname"><a href="a00176.html#gabf842c45eea186170c267a328e3f3b7d">glm::aligned_uvec4</a></div><div class="ttdeci">aligned_highp_uvec4 aligned_uvec4</div><div class="ttdoc">4 components vector of unsigned integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00334">gtc/type_aligned.hpp:334</a></div></div>
+<div class="ttc" id="a00177_html_gaf4dae276fd29623950de14a6ca2586b5"><div class="ttname"><a href="a00177.html#gaf4dae276fd29623950de14a6ca2586b5">glm::mediump_uint32_t</a></div><div class="ttdeci">detail::uint32 mediump_uint32_t</div><div class="ttdoc">Medium precision 32 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00779">fwd.hpp:779</a></div></div>
+<div class="ttc" id="a00177_html_gaefa2ce8fbdbe89baffd262f46f2d5907"><div class="ttname"><a href="a00177.html#gaefa2ce8fbdbe89baffd262f46f2d5907">glm::u16vec1</a></div><div class="ttdeci">highp_u16vec1 u16vec1</div><div class="ttdoc">Default precision 16 bit unsigned integer scalar type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l01053">fwd.hpp:1053</a></div></div>
+<div class="ttc" id="a00157_html_gaa7c3a0e7ae50c34c3290415c115f251e"><div class="ttname"><a href="a00157.html#gaa7c3a0e7ae50c34c3290415c115f251e">glm::uvec4</a></div><div class="ttdeci">highp_uvec4 uvec4</div><div class="ttdoc">4 components vector of unsigned integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00547">type_vec.hpp:547</a></div></div>
+<div class="ttc" id="a00177_html_ga14c583bd625eda8cf4935a14d5dd544d"><div class="ttname"><a href="a00177.html#ga14c583bd625eda8cf4935a14d5dd544d">glm::f64quat</a></div><div class="ttdeci">highp_f64quat f64quat</div><div class="ttdoc">Default double-precision floating-point quaternion. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02567">fwd.hpp:2567</a></div></div>
+<div class="ttc" id="a00177_html_ga91c4815f93177eb423362fd296a87e9f"><div class="ttname"><a href="a00177.html#ga91c4815f93177eb423362fd296a87e9f">glm::lowp_uint16_t</a></div><div class="ttdeci">detail::uint16 lowp_uint16_t</div><div class="ttdoc">Low precision 16 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00724">fwd.hpp:724</a></div></div>
+<div class="ttc" id="a00177_html_gac25db6d2b1e2a0f351b77ba3409ac4cd"><div class="ttname"><a href="a00177.html#gac25db6d2b1e2a0f351b77ba3409ac4cd">glm::highp_i64</a></div><div class="ttdeci">detail::int64 highp_i64</div><div class="ttdoc">High precision 64 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00240">fwd.hpp:240</a></div></div>
+<div class="ttc" id="a00177_html_ga62a17cddeb4dffb4e18fe3aea23f051a"><div class="ttname"><a href="a00177.html#ga62a17cddeb4dffb4e18fe3aea23f051a">glm::mediump_i16</a></div><div class="ttdeci">detail::int16 mediump_i16</div><div class="ttdoc">Medium precision 16 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00184">fwd.hpp:184</a></div></div>
+<div class="ttc" id="a00177_html_ga2204827de9d4ee7fa92ef497093f7d6e"><div class="ttname"><a href="a00177.html#ga2204827de9d4ee7fa92ef497093f7d6e">glm::u64vec2</a></div><div class="ttdeci">highp_u64vec2 u64vec2</div><div class="ttdoc">Default precision 64 bit unsigned integer vector of 2 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l01295">fwd.hpp:1295</a></div></div>
+<div class="ttc" id="a00177_html_ga84ed04b4e0de18c977e932d617e7c223"><div class="ttname"><a href="a00177.html#ga84ed04b4e0de18c977e932d617e7c223">glm::highp_int32</a></div><div class="ttdeci">detail::int32 highp_int32</div><div class="ttdoc">High precision 32 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00204">fwd.hpp:204</a></div></div>
+<div class="ttc" id="a00177_html_gad5f1043adbe803928fe7bf1a90a1f767"><div class="ttname"><a href="a00177.html#gad5f1043adbe803928fe7bf1a90a1f767">glm::f32mat2x3</a></div><div class="ttdeci">highp_f32mat2x3 f32mat2x3</div><div class="ttdoc">Default single-precision floating-point 2x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02417">fwd.hpp:2417</a></div></div>
+<div class="ttc" id="a00177_html_ga155ac7e9e454e2b1f73d11e1e28a0fd6"><div class="ttname"><a href="a00177.html#ga155ac7e9e454e2b1f73d11e1e28a0fd6">glm::u32vec4</a></div><div class="ttdeci">highp_u32vec4 u32vec4</div><div class="ttdoc">Default precision 32 bit unsigned integer vector of 4 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l01144">fwd.hpp:1144</a></div></div>
+<div class="ttc" id="a00176_html_ga2a8d9c3046f89d854eb758adfa0811c0"><div class="ttname"><a href="a00176.html#ga2a8d9c3046f89d854eb758adfa0811c0">glm::aligned_uvec3</a></div><div class="ttdeci">aligned_highp_uvec3 aligned_uvec3</div><div class="ttdoc">3 components vector of unsigned integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00331">gtc/type_aligned.hpp:331</a></div></div>
+<div class="ttc" id="a00177_html_ga26fc7ced1ad7ca5024f1c973c8dc9180"><div class="ttname"><a href="a00177.html#ga26fc7ced1ad7ca5024f1c973c8dc9180">glm::mediump_int32_t</a></div><div class="ttdeci">detail::int32 mediump_int32_t</div><div class="ttdoc">Medium precision 32 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00172">fwd.hpp:172</a></div></div>
+<div class="ttc" id="a00177_html_ga042ef09ff2f0cb24a36f541bcb3a3710"><div class="ttname"><a href="a00177.html#ga042ef09ff2f0cb24a36f541bcb3a3710">glm::int32_t</a></div><div class="ttdeci">detail::int32 int32_t</div><div class="ttdoc">32 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00276">fwd.hpp:276</a></div></div>
+<div class="ttc" id="a00177_html_ga9df98857be695d5a30cb30f5bfa38a80"><div class="ttname"><a href="a00177.html#ga9df98857be695d5a30cb30f5bfa38a80">glm::mediump_u16</a></div><div class="ttdeci">detail::uint16 mediump_u16</div><div class="ttdoc">Medium precision 16 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00791">fwd.hpp:791</a></div></div>
+<div class="ttc" id="a00177_html_gacf54c3330ef60aa3d16cb676c7bcb8c7"><div class="ttname"><a href="a00177.html#gacf54c3330ef60aa3d16cb676c7bcb8c7">glm::highp_uint16_t</a></div><div class="ttdeci">detail::uint16 highp_uint16_t</div><div class="ttdoc">Medium precision 16 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00825">fwd.hpp:825</a></div></div>
+<div class="ttc" id="a00157_html_ga378921b6a07bcdad946858b340f69ab1"><div class="ttname"><a href="a00157.html#ga378921b6a07bcdad946858b340f69ab1">glm::mat3x3</a></div><div class="ttdeci">highp_mat3x3 mat3x3</div><div class="ttdoc">3 columns of 3 components matrix of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00379">type_mat.hpp:379</a></div></div>
+<div class="ttc" id="a00177_html_ga34dd5ec1988c443bae80f1b20a8ade5f"><div class="ttname"><a href="a00177.html#ga34dd5ec1988c443bae80f1b20a8ade5f">glm::mediump_uint32</a></div><div class="ttdeci">detail::uint32 mediump_uint32</div><div class="ttdoc">Medium precision 32 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00763">fwd.hpp:763</a></div></div>
+<div class="ttc" id="a00177_html_ga3999d3e7ff22025c16ddb601e14dfdee"><div class="ttname"><a href="a00177.html#ga3999d3e7ff22025c16ddb601e14dfdee">glm::uint64_t</a></div><div class="ttdeci">detail::uint64 uint64_t</div><div class="ttdoc">64 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00889">fwd.hpp:889</a></div></div>
+<div class="ttc" id="a00177_html_ga6414484477e4c1b4863cf91af8fd4185"><div class="ttname"><a href="a00177.html#ga6414484477e4c1b4863cf91af8fd4185">glm::i8vec2</a></div><div class="ttdeci">highp_i8vec2 i8vec2</div><div class="ttdoc">Default precision 8 bit signed integer vector of 2 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00368">fwd.hpp:368</a></div></div>
+<div class="ttc" id="a00177_html_gaa69e73ffb01a52499071391d395908fb"><div class="ttname"><a href="a00177.html#gaa69e73ffb01a52499071391d395908fb">glm::f32mat4x3</a></div><div class="ttdeci">highp_f32mat4x3 f32mat4x3</div><div class="ttdoc">Default single-precision floating-point 4x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02441">fwd.hpp:2441</a></div></div>
+<div class="ttc" id="a00177_html_gaba137814a509704937746cc1e82edc32"><div class="ttname"><a href="a00177.html#gaba137814a509704937746cc1e82edc32">glm::f64mat4x3</a></div><div class="ttdeci">highp_f64mat4x3 f64mat4x3</div><div class="ttdoc">Default double-precision floating-point 4x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02547">fwd.hpp:2547</a></div></div>
+<div class="ttc" id="a00177_html_ga709c97c20efa24ff1d9e83cd437b8ed5"><div class="ttname"><a href="a00177.html#ga709c97c20efa24ff1d9e83cd437b8ed5">glm::fmat2x4</a></div><div class="ttdeci">highp_f32mat2x4 fmat2x4</div><div class="ttdoc">Default single-precision floating-point 2x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02351">fwd.hpp:2351</a></div></div>
+<div class="ttc" id="a00177_html_gadfe65c78231039e90507770db50c98c7"><div class="ttname"><a href="a00177.html#gadfe65c78231039e90507770db50c98c7">glm::mediump_uint8_t</a></div><div class="ttdeci">detail::uint8 mediump_uint8_t</div><div class="ttdoc">Medium precision 8 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00771">fwd.hpp:771</a></div></div>
+<div class="ttc" id="a00177_html_gab04bc97371cb6b5f54b3688e0c81578b"><div class="ttname"><a href="a00177.html#gab04bc97371cb6b5f54b3688e0c81578b">glm::fmat3x4</a></div><div class="ttdeci">highp_f32mat3x4 fmat3x4</div><div class="ttdoc">Default single-precision floating-point 3x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02363">fwd.hpp:2363</a></div></div>
+<div class="ttc" id="a00177_html_ga3c12cef4135603fd77d8fda85808730c"><div class="ttname"><a href="a00177.html#ga3c12cef4135603fd77d8fda85808730c">glm::i32vec2</a></div><div class="ttdeci">highp_i32vec2 i32vec2</div><div class="ttdoc">Default precision 32 bit signed integer vector of 2 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00527">fwd.hpp:527</a></div></div>
+<div class="ttc" id="a00177_html_ga6957c7b22f405683bb276554ca40dc37"><div class="ttname"><a href="a00177.html#ga6957c7b22f405683bb276554ca40dc37">glm::float64_t</a></div><div class="ttdeci">highp_float64_t float64_t</div><div class="ttdoc">Default 64 bit double-precision floating-point scalar. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l01501">fwd.hpp:1501</a></div></div>
+<div class="ttc" id="a00157_html_gabebd0c7e3c5cd337d95c313c5e8b8db4"><div class="ttname"><a href="a00157.html#gabebd0c7e3c5cd337d95c313c5e8b8db4">glm::dvec3</a></div><div class="ttdeci">highp_dvec3 dvec3</div><div class="ttdoc">3 components vector of double-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00488">type_vec.hpp:488</a></div></div>
+<div class="ttc" id="a00176_html_ga1ff8ed402c93d280ff0597c1c5e7c548"><div class="ttname"><a href="a00176.html#ga1ff8ed402c93d280ff0597c1c5e7c548">glm::aligned_uvec1</a></div><div class="ttdeci">aligned_highp_uvec1 aligned_uvec1</div><div class="ttdoc">1 component vector of unsigned integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00325">gtc/type_aligned.hpp:325</a></div></div>
+<div class="ttc" id="a00177_html_gaf4b5993e794e252607f91535b62a7e0c"><div class="ttname"><a href="a00177.html#gaf4b5993e794e252607f91535b62a7e0c">glm::i8vec3</a></div><div class="ttdeci">highp_i8vec3 i8vec3</div><div class="ttdoc">Default precision 8 bit signed integer vector of 3 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00372">fwd.hpp:372</a></div></div>
+<div class="ttc" id="a00177_html_gac3bc41bcac61d1ba8f02a6f68ce23f64"><div class="ttname"><a href="a00177.html#gac3bc41bcac61d1ba8f02a6f68ce23f64">glm::mediump_int64_t</a></div><div class="ttdeci">detail::int64 mediump_int64_t</div><div class="ttdoc">Medium precision 64 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00176">fwd.hpp:176</a></div></div>
+<div class="ttc" id="a00177_html_gafe2e08549805a7ded26da2a868bedbf5"><div class="ttname"><a href="a00177.html#gafe2e08549805a7ded26da2a868bedbf5">glm::f32mat4x4</a></div><div class="ttdeci">highp_f32mat4x4 f32mat4x4</div><div class="ttdoc">Default single-precision floating-point 4x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02445">fwd.hpp:2445</a></div></div>
+<div class="ttc" id="a00157_html_ga9bcffa2d49f28d16f680757b5c0e7c84"><div class="ttname"><a href="a00157.html#ga9bcffa2d49f28d16f680757b5c0e7c84">glm::uvec2</a></div><div class="ttdeci">highp_uvec2 uvec2</div><div class="ttdoc">2 components vector of unsigned integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00537">type_vec.hpp:537</a></div></div>
+<div class="ttc" id="a00177_html_gab2329c5c14ff5a03b1ddec039e2c7409"><div class="ttname"><a href="a00177.html#gab2329c5c14ff5a03b1ddec039e2c7409">glm::i8vec1</a></div><div class="ttdeci">highp_i8vec1 i8vec1</div><div class="ttdoc">Default precision 8 bit signed integer scalar type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00364">fwd.hpp:364</a></div></div>
+<div class="ttc" id="a00177_html_gae3364a8090e7e1408056e00403dfecab"><div class="ttname"><a href="a00177.html#gae3364a8090e7e1408056e00403dfecab">glm::i32vec4</a></div><div class="ttdeci">highp_i32vec4 i32vec4</div><div class="ttdoc">Default precision 32 bit signed integer vector of 4 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00535">fwd.hpp:535</a></div></div>
+<div class="ttc" id="a00176_html_ga85d89e83cb8137e1be1446de8c3b643a"><div class="ttname"><a href="a00176.html#ga85d89e83cb8137e1be1446de8c3b643a">glm::aligned_vec4</a></div><div class="ttdeci">aligned_highp_vec4 aligned_vec4</div><div class="ttdoc">4 components vector of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00260">gtc/type_aligned.hpp:260</a></div></div>
+<div class="ttc" id="a00157_html_ga9503f809789bda7e8852a6abde3ae5c1"><div class="ttname"><a href="a00157.html#ga9503f809789bda7e8852a6abde3ae5c1">glm::dvec4</a></div><div class="ttdeci">highp_dvec4 dvec4</div><div class="ttdoc">4 components vector of double-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00493">type_vec.hpp:493</a></div></div>
+<div class="ttc" id="a00177_html_ga552a6bde5e75984efb0f863278da2e54"><div class="ttname"><a href="a00177.html#ga552a6bde5e75984efb0f863278da2e54">glm::lowp_i8</a></div><div class="ttdeci">detail::int8 lowp_i8</div><div class="ttdoc">Low precision 8 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00132">fwd.hpp:132</a></div></div>
+<div class="ttc" id="a00177_html_ga19d5e0d4d3d6d226c9c6c0f39756f9ad"><div class="ttname"><a href="a00177.html#ga19d5e0d4d3d6d226c9c6c0f39756f9ad">glm::f32vec3</a></div><div class="ttdeci">highp_f32vec3 f32vec3</div><div class="ttdoc">Default single-precision floating-point vector of 3 components. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02405">fwd.hpp:2405</a></div></div>
+<div class="ttc" id="a00177_html_ga10d8bd3c923a5386efcf25a4117fd84f"><div class="ttname"><a href="a00177.html#ga10d8bd3c923a5386efcf25a4117fd84f">glm::fvec1</a></div><div class="ttdeci">highp_f32vec1 fvec1</div><div class="ttdoc">Default single-precision floating-point vector of 1 components. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02327">fwd.hpp:2327</a></div></div>
+<div class="ttc" id="a00177_html_ga2c71c8bd9e2fe7d2e93ca250d8b6157f"><div class="ttname"><a href="a00177.html#ga2c71c8bd9e2fe7d2e93ca250d8b6157f">glm::highp_int32_t</a></div><div class="ttdeci">detail::int32 highp_int32_t</div><div class="ttdoc">32 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00220">fwd.hpp:220</a></div></div>
+<div class="ttc" id="a00177_html_ga7b968f2b86a0442a89c7359171e1d866"><div class="ttname"><a href="a00177.html#ga7b968f2b86a0442a89c7359171e1d866">glm::mediump_int64</a></div><div class="ttdeci">detail::int64 mediump_int64</div><div class="ttdoc">Medium precision 64 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00160">fwd.hpp:160</a></div></div>
+<div class="ttc" id="a00177_html_ga2af9490085ae3bdf36a544e9dd073610"><div class="ttname"><a href="a00177.html#ga2af9490085ae3bdf36a544e9dd073610">glm::mediump_u64</a></div><div class="ttdeci">detail::uint64 mediump_u64</div><div class="ttdoc">Medium precision 64 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00799">fwd.hpp:799</a></div></div>
+<div class="ttc" id="a00177_html_ga3460933f040f59f0fedb29df1e9be71c"><div class="ttname"><a href="a00177.html#ga3460933f040f59f0fedb29df1e9be71c">glm::u64vec3</a></div><div class="ttdeci">highp_u64vec3 u64vec3</div><div class="ttdoc">Default precision 64 bit unsigned integer vector of 3 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l01299">fwd.hpp:1299</a></div></div>
+<div class="ttc" id="a00176_html_ga7f79eae5927c9033d84617e49f6f34e4"><div class="ttname"><a href="a00176.html#ga7f79eae5927c9033d84617e49f6f34e4">glm::aligned_ivec4</a></div><div class="ttdeci">aligned_highp_ivec4 aligned_ivec4</div><div class="ttdoc">4 components vector of signed integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00308">gtc/type_aligned.hpp:308</a></div></div>
+<div class="ttc" id="a00177_html_gad339e25c32fe6665acf028f26c1b3e22"><div class="ttname"><a href="a00177.html#gad339e25c32fe6665acf028f26c1b3e22">glm::fmat3x3</a></div><div class="ttdeci">highp_f32mat3x3 fmat3x3</div><div class="ttdoc">Default single-precision floating-point 3x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02359">fwd.hpp:2359</a></div></div>
+<div class="ttc" id="a00177_html_ga50e58885aee2cf01bb3ba472c5b1697e"><div class="ttname"><a href="a00177.html#ga50e58885aee2cf01bb3ba472c5b1697e">glm::i8vec4</a></div><div class="ttdeci">highp_i8vec4 i8vec4</div><div class="ttdoc">Default precision 8 bit signed integer vector of 4 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00376">fwd.hpp:376</a></div></div>
+<div class="ttc" id="a00177_html_ga4ef2d77dcab241b1ef83f09edb2f1084"><div class="ttname"><a href="a00177.html#ga4ef2d77dcab241b1ef83f09edb2f1084">glm::fvec3</a></div><div class="ttdeci">highp_f32vec3 fvec3</div><div class="ttdoc">Default single-precision floating-point vector of 3 components. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02335">fwd.hpp:2335</a></div></div>
+<div class="ttc" id="a00177_html_ga1b09f03da7ac43055c68a349d5445083"><div class="ttname"><a href="a00177.html#ga1b09f03da7ac43055c68a349d5445083">glm::lowp_u8</a></div><div class="ttdeci">detail::uint8 lowp_u8</div><div class="ttdoc">Low precision 8 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00737">fwd.hpp:737</a></div></div>
+<div class="ttc" id="a00177_html_ga256b12b650c3f2fb86878fd1c5db8bc3"><div class="ttname"><a href="a00177.html#ga256b12b650c3f2fb86878fd1c5db8bc3">glm::highp_uint32</a></div><div class="ttdeci">detail::uint32 highp_uint32</div><div class="ttdoc">Medium precision 32 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00813">fwd.hpp:813</a></div></div>
+<div class="ttc" id="a00177_html_gab0082a25f19f02d2d0af0fcbe5ead732"><div class="ttname"><a href="a00177.html#gab0082a25f19f02d2d0af0fcbe5ead732">glm::fmat4x2</a></div><div class="ttdeci">highp_f32mat4x2 fmat4x2</div><div class="ttdoc">Default single-precision floating-point 4x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02367">fwd.hpp:2367</a></div></div>
+<div class="ttc" id="a00177_html_ga3963b1050fc65a383ee28e3f827b6e3e"><div class="ttname"><a href="a00177.html#ga3963b1050fc65a383ee28e3f827b6e3e">glm::mediump_uint16_t</a></div><div class="ttdeci">detail::uint16 mediump_uint16_t</div><div class="ttdoc">Medium precision 16 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00775">fwd.hpp:775</a></div></div>
+<div class="ttc" id="a00177_html_ga2171d9dc1fefb1c82e2817f45b622eac"><div class="ttname"><a href="a00177.html#ga2171d9dc1fefb1c82e2817f45b622eac">glm::uint32_t</a></div><div class="ttdeci">detail::uint32 uint32_t</div><div class="ttdoc">32 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00885">fwd.hpp:885</a></div></div>
+<div class="ttc" id="a00177_html_ga9b170dd4a8f38448a2dc93987c7875e9"><div class="ttname"><a href="a00177.html#ga9b170dd4a8f38448a2dc93987c7875e9">glm::mediump_uint64_t</a></div><div class="ttdeci">detail::uint64 mediump_uint64_t</div><div class="ttdoc">Medium precision 64 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00783">fwd.hpp:783</a></div></div>
+<div class="ttc" id="a00157_html_gaa8ea2429bb3cb41a715258a447f39897"><div class="ttname"><a href="a00157.html#gaa8ea2429bb3cb41a715258a447f39897">glm::vec3</a></div><div class="ttdeci">highp_vec3 vec3</div><div class="ttdoc">3 components vector of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00461">type_vec.hpp:461</a></div></div>
+<div class="ttc" id="a00177_html_ga40cd3f391c03512f158d10a70062264e"><div class="ttname"><a href="a00177.html#ga40cd3f391c03512f158d10a70062264e">glm::i32vec3</a></div><div class="ttdeci">highp_i32vec3 i32vec3</div><div class="ttdoc">Default precision 32 bit signed integer vector of 3 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00531">fwd.hpp:531</a></div></div>
+<div class="ttc" id="a00177_html_ga0100666c90176eaba80e49357d123c7f"><div class="ttname"><a href="a00177.html#ga0100666c90176eaba80e49357d123c7f">glm::f32mat3x4</a></div><div class="ttdeci">highp_f32mat3x4 f32mat3x4</div><div class="ttdoc">Default single-precision floating-point 3x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02433">fwd.hpp:2433</a></div></div>
+<div class="ttc" id="a00176_html_ga18d859f87122b2b3b2992ffe86dbebc0"><div class="ttname"><a href="a00176.html#ga18d859f87122b2b3b2992ffe86dbebc0">glm::aligned_dvec2</a></div><div class="ttdeci">aligned_highp_dvec2 aligned_dvec2</div><div class="ttdoc">2 components vector of double-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00278">gtc/type_aligned.hpp:278</a></div></div>
+<div class="ttc" id="a00176_html_ga074137e3be58528d67041c223d49f398"><div class="ttname"><a href="a00176.html#ga074137e3be58528d67041c223d49f398">glm::aligned_uvec2</a></div><div class="ttdeci">aligned_highp_uvec2 aligned_uvec2</div><div class="ttdoc">2 components vector of unsigned integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00328">gtc/type_aligned.hpp:328</a></div></div>
+<div class="ttc" id="a00157_html_ga15ade901680b29b78c1f9d1796db6e0e"><div class="ttname"><a href="a00157.html#ga15ade901680b29b78c1f9d1796db6e0e">glm::dvec2</a></div><div class="ttdeci">highp_dvec2 dvec2</div><div class="ttdoc">2 components vector of double-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00483">type_vec.hpp:483</a></div></div>
+<div class="ttc" id="a00177_html_ga114e005014d910bea07954eee24b7efb"><div class="ttname"><a href="a00177.html#ga114e005014d910bea07954eee24b7efb">glm::u8vec4</a></div><div class="ttdeci">highp_u8vec4 u8vec4</div><div class="ttdoc">Default precision 8 bit unsigned integer vector of 4 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00985">fwd.hpp:985</a></div></div>
+<div class="ttc" id="a00177_html_ga73c6abb280a45feeff60f9accaee91f3"><div class="ttname"><a href="a00177.html#ga73c6abb280a45feeff60f9accaee91f3">glm::highp_int64_t</a></div><div class="ttdeci">detail::int64 highp_int64_t</div><div class="ttdoc">High precision 64 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00224">fwd.hpp:224</a></div></div>
+<div class="ttc" id="a00177_html_ga5b4a3e499ee165efc0dc05add9c48235"><div class="ttname"><a href="a00177.html#ga5b4a3e499ee165efc0dc05add9c48235">glm::i64vec1</a></div><div class="ttdeci">highp_i64vec1 i64vec1</div><div class="ttdoc">Default precision 64 bit signed integer scalar type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00682">fwd.hpp:682</a></div></div>
+<div class="ttc" id="a00177_html_ga2885a6c89916911e418c06bb76b9bdbb"><div class="ttname"><a href="a00177.html#ga2885a6c89916911e418c06bb76b9bdbb">glm::mediump_uint16</a></div><div class="ttdeci">detail::uint16 mediump_uint16</div><div class="ttdoc">Medium precision 16 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00759">fwd.hpp:759</a></div></div>
+<div class="ttc" id="a00157_html_ga09d0200e8ff86391d8804b4fefd5f1da"><div class="ttname"><a href="a00157.html#ga09d0200e8ff86391d8804b4fefd5f1da">glm::vec2</a></div><div class="ttdeci">highp_vec2 vec2</div><div class="ttdoc">2 components vector of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00456">type_vec.hpp:456</a></div></div>
+<div class="ttc" id="a00177_html_gaf3f312156984c365e9f65620354da70b"><div class="ttname"><a href="a00177.html#gaf3f312156984c365e9f65620354da70b">glm::u64</a></div><div class="ttdeci">detail::uint64 u64</div><div class="ttdoc">64 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00906">fwd.hpp:906</a></div></div>
+<div class="ttc" id="a00177_html_gaf645b1a60203b39c0207baff5e3d8c3c"><div class="ttname"><a href="a00177.html#gaf645b1a60203b39c0207baff5e3d8c3c">glm::lowp_int64</a></div><div class="ttdeci">detail::int64 lowp_int64</div><div class="ttdoc">Low precision 64 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00112">fwd.hpp:112</a></div></div>
+<div class="ttc" id="a00177_html_ga8b2cd8d31eb345b2d641d9261c38db1a"><div class="ttname"><a href="a00177.html#ga8b2cd8d31eb345b2d641d9261c38db1a">glm::lowp_int16_t</a></div><div class="ttdeci">detail::int16 lowp_int16_t</div><div class="ttdoc">Low precision 16 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00120">fwd.hpp:120</a></div></div>
+<div class="ttc" id="a00177_html_gadff3608baa4b5bd3ed28f95c1c2c345d"><div class="ttname"><a href="a00177.html#gadff3608baa4b5bd3ed28f95c1c2c345d">glm::mediump_int16</a></div><div class="ttdeci">detail::int16 mediump_int16</div><div class="ttdoc">Medium precision 16 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00152">fwd.hpp:152</a></div></div>
+<div class="ttc" id="a00176_html_ga05e6d4c908965d04191c2070a8d0a65e"><div class="ttname"><a href="a00176.html#ga05e6d4c908965d04191c2070a8d0a65e">glm::aligned_vec1</a></div><div class="ttdeci">aligned_highp_vec1 aligned_vec1</div><div class="ttdoc">1 component vector of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00251">gtc/type_aligned.hpp:251</a></div></div>
+<div class="ttc" id="a00177_html_gae8f5e3e964ca2ae240adc2c0d74adede"><div class="ttname"><a href="a00177.html#gae8f5e3e964ca2ae240adc2c0d74adede">glm::int16_t</a></div><div class="ttdeci">detail::int16 int16_t</div><div class="ttdoc">16 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00272">fwd.hpp:272</a></div></div>
+<div class="ttc" id="a00177_html_ga322a7d7d2c2c68994dc872a33de63c61"><div class="ttname"><a href="a00177.html#ga322a7d7d2c2c68994dc872a33de63c61">glm::int64_t</a></div><div class="ttdeci">detail::int64 int64_t</div><div class="ttdoc">64 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00280">fwd.hpp:280</a></div></div>
+<div class="ttc" id="a00177_html_ga96faea43ac5f875d2d3ffbf8d213e3eb"><div class="ttname"><a href="a00177.html#ga96faea43ac5f875d2d3ffbf8d213e3eb">glm::i32</a></div><div class="ttdeci">detail::int32 i32</div><div class="ttdoc">32 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00293">fwd.hpp:293</a></div></div>
+<div class="ttc" id="a00177_html_gaf1b735b4b1145174f4e4167d13778f9b"><div class="ttname"><a href="a00177.html#gaf1b735b4b1145174f4e4167d13778f9b">glm::lowp_uint32_t</a></div><div class="ttdeci">detail::uint32 lowp_uint32_t</div><div class="ttdoc">Low precision 32 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00728">fwd.hpp:728</a></div></div>
+<div class="ttc" id="a00176_html_gae4f38fd2c86cee6940986197777b3ca4"><div class="ttname"><a href="a00176.html#gae4f38fd2c86cee6940986197777b3ca4">glm::aligned_ivec2</a></div><div class="ttdeci">aligned_highp_ivec2 aligned_ivec2</div><div class="ttdoc">2 components vector of signed integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00302">gtc/type_aligned.hpp:302</a></div></div>
+<div class="ttc" id="a00176_html_ga32794322d294e5ace7fed4a61896f270"><div class="ttname"><a href="a00176.html#ga32794322d294e5ace7fed4a61896f270">glm::aligned_ivec3</a></div><div class="ttdeci">aligned_highp_ivec3 aligned_ivec3</div><div class="ttdoc">3 components vector of signed integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00305">gtc/type_aligned.hpp:305</a></div></div>
+<div class="ttc" id="a00177_html_ga5fde0fa4a3852a9dd5d637a92ee74718"><div class="ttname"><a href="a00177.html#ga5fde0fa4a3852a9dd5d637a92ee74718">glm::highp_int16</a></div><div class="ttdeci">detail::int16 highp_int16</div><div class="ttdoc">High precision 16 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00200">fwd.hpp:200</a></div></div>
+<div class="ttc" id="a00177_html_ga91f91f411080c37730856ff5887f5bcf"><div class="ttname"><a href="a00177.html#ga91f91f411080c37730856ff5887f5bcf">glm::uint16_t</a></div><div class="ttdeci">detail::uint16 uint16_t</div><div class="ttdoc">16 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00881">fwd.hpp:881</a></div></div>
+<div class="ttc" id="a00157_html_gaaa26c41d168dc00be0fe55f4d0a34224"><div class="ttname"><a href="a00157.html#gaaa26c41d168dc00be0fe55f4d0a34224">glm::ivec4</a></div><div class="ttdeci">highp_ivec4 ivec4</div><div class="ttdoc">4 components vector of signed integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00520">type_vec.hpp:520</a></div></div>
+<div class="ttc" id="a00177_html_ga6966c0cb4673928c9c9da2e91006d2c0"><div class="ttname"><a href="a00177.html#ga6966c0cb4673928c9c9da2e91006d2c0">glm::f32quat</a></div><div class="ttdeci">highp_f32quat f32quat</div><div class="ttdoc">Default single-precision floating-point quaternion. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02461">fwd.hpp:2461</a></div></div>
+<div class="ttc" id="a00177_html_gafaad77b464b5a35626c31205ac6780e3"><div class="ttname"><a href="a00177.html#gafaad77b464b5a35626c31205ac6780e3">glm::f64vec2</a></div><div class="ttdeci">highp_f64vec2 f64vec2</div><div class="ttdoc">Default double-precision floating-point vector of 2 components. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02507">fwd.hpp:2507</a></div></div>
+<div class="ttc" id="a00177_html_gadb997e409103d4da18abd837e636a496"><div class="ttname"><a href="a00177.html#gadb997e409103d4da18abd837e636a496">glm::i64</a></div><div class="ttdeci">detail::int64 i64</div><div class="ttdoc">64 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00297">fwd.hpp:297</a></div></div>
+<div class="ttc" id="a00234_html_ga95cc03b8b475993fa50e05e38e203303"><div class="ttname"><a href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">glm::GLM_ALIGNED_TYPEDEF</a></div><div class="ttdeci">GLM_ALIGNED_TYPEDEF(f64quat, aligned_f64quat, 32)</div><div class="ttdoc">Double-precision floating-point aligned quaternion. </div></div>
+<div class="ttc" id="a00177_html_gafb18822e2eac88fa861a76cefd25d550"><div class="ttname"><a href="a00177.html#gafb18822e2eac88fa861a76cefd25d550">glm::f64mat2x4</a></div><div class="ttdeci">highp_f64mat2x4 f64mat2x4</div><div class="ttdoc">Default double-precision floating-point 2x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02527">fwd.hpp:2527</a></div></div>
+<div class="ttc" id="a00177_html_gae1a5081181c96cc37ce9418f6e856cb6"><div class="ttname"><a href="a00177.html#gae1a5081181c96cc37ce9418f6e856cb6">glm::f64mat3x3</a></div><div class="ttdeci">highp_f64mat3x3 f64mat3x3</div><div class="ttdoc">Default double-precision floating-point 3x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02535">fwd.hpp:2535</a></div></div>
+<div class="ttc" id="a00177_html_gacaea06d0a79ef3172e887a7a6ba434ff"><div class="ttname"><a href="a00177.html#gacaea06d0a79ef3172e887a7a6ba434ff">glm::highp_int16_t</a></div><div class="ttdeci">detail::int16 highp_int16_t</div><div class="ttdoc">High precision 16 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00216">fwd.hpp:216</a></div></div>
+<div class="ttc" id="a00177_html_ga9f20af6e8eca2abdcde08408948cc1ca"><div class="ttname"><a href="a00177.html#ga9f20af6e8eca2abdcde08408948cc1ca">glm::fmat3x2</a></div><div class="ttdeci">highp_f32mat3x2 fmat3x2</div><div class="ttdoc">Default single-precision floating-point 3x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02355">fwd.hpp:2355</a></div></div>
+<div class="ttc" id="a00176_html_ga7cf643b66664e0cd3c48759ae66c2bd0"><div class="ttname"><a href="a00176.html#ga7cf643b66664e0cd3c48759ae66c2bd0">glm::aligned_vec3</a></div><div class="ttdeci">aligned_highp_vec3 aligned_vec3</div><div class="ttdoc">3 components vector of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00108_source.html#l00257">gtc/type_aligned.hpp:257</a></div></div>
+<div class="ttc" id="a00177_html_ga92e0c191e5cc326255284d08be3af7c5"><div class="ttname"><a href="a00177.html#ga92e0c191e5cc326255284d08be3af7c5">glm::u8vec1</a></div><div class="ttdeci">highp_u8vec1 u8vec1</div><div class="ttdoc">Default precision 8 bit unsigned integer scalar type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00973">fwd.hpp:973</a></div></div>
+<div class="ttc" id="a00177_html_ga1085c50dd8fbeb5e7e609b1c127492a5"><div class="ttname"><a href="a00177.html#ga1085c50dd8fbeb5e7e609b1c127492a5">glm::highp_int8_t</a></div><div class="ttdeci">detail::int8 highp_int8_t</div><div class="ttdoc">High precision 8 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00212">fwd.hpp:212</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00110.html b/src/third_party/glm/doc/api/a00110.html
new file mode 100644
index 0000000..8435092
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00110.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: type_float.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#typedef-members">Typedefs</a> </div>
+ <div class="headertitle">
+<div class="title">type_float.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00110_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:gad3c127f8bf8d7d4e738037c257abb5b1"><td class="memItemLeft" align="right" valign="top">typedef float </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gad3c127f8bf8d7d4e738037c257abb5b1">float32</a></td></tr>
+<tr class="separator:gad3c127f8bf8d7d4e738037c257abb5b1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab5596d48586414c91ccb270962dc14d3"><td class="memItemLeft" align="right" valign="top">typedef double </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gab5596d48586414c91ccb270962dc14d3">float64</a></td></tr>
+<tr class="separator:gab5596d48586414c91ccb270962dc14d3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6e95694987ba35af6f736638be39626a"><td class="memItemLeft" align="right" valign="top">typedef highp_float_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga6e95694987ba35af6f736638be39626a">highp_float</a></td></tr>
+<tr class="separator:ga6e95694987ba35af6f736638be39626a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga358d69e11b1c0f6c7c469e0d39ab7fd1"><td class="memItemLeft" align="right" valign="top">typedef lowp_float_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga358d69e11b1c0f6c7c469e0d39ab7fd1">lowp_float</a></td></tr>
+<tr class="separator:ga358d69e11b1c0f6c7c469e0d39ab7fd1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga280c68f537f4b1e03a00b23e62573b98"><td class="memItemLeft" align="right" valign="top">typedef mediump_float_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga280c68f537f4b1e03a00b23e62573b98">mediump_float</a></td></tr>
+<tr class="separator:ga280c68f537f4b1e03a00b23e62573b98"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+
+<p>Definition in file <a class="el" href="a00110_source.html">type_float.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00110_source.html b/src/third_party/glm/doc/api/a00110_source.html
new file mode 100644
index 0000000..a7947d3
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00110_source.html
@@ -0,0 +1,113 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: type_float.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">type_float.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00110.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include "<a class="code" href="a00098.html">setup.hpp</a>"</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> </div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a>{</div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="keyword">namespace </span>detail</div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> {</div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>  <span class="keyword">typedef</span> <span class="keywordtype">float</span> <a class="code" href="a00177.html#gad3c127f8bf8d7d4e738037c257abb5b1">float32</a>;</div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>  <span class="keyword">typedef</span> <span class="keywordtype">double</span> <a class="code" href="a00177.html#gab5596d48586414c91ccb270962dc14d3">float64</a>;</div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> }<span class="comment">//namespace detail</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>  </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>  <span class="keyword">typedef</span> <span class="keywordtype">float</span> lowp_float_t;</div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>  <span class="keyword">typedef</span> <span class="keywordtype">float</span> mediump_float_t;</div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>  <span class="keyword">typedef</span> <span class="keywordtype">double</span> highp_float_t;</div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"><a class="line" href="a00158.html#ga358d69e11b1c0f6c7c469e0d39ab7fd1"> 27</a></span>  <span class="keyword">typedef</span> lowp_float_t <a class="code" href="a00158.html#ga358d69e11b1c0f6c7c469e0d39ab7fd1">lowp_float</a>;</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="a00158.html#ga280c68f537f4b1e03a00b23e62573b98"> 34</a></span>  <span class="keyword">typedef</span> mediump_float_t <a class="code" href="a00158.html#ga280c68f537f4b1e03a00b23e62573b98">mediump_float</a>;</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="a00158.html#ga6e95694987ba35af6f736638be39626a"> 41</a></span>  <span class="keyword">typedef</span> highp_float_t <a class="code" href="a00158.html#ga6e95694987ba35af6f736638be39626a">highp_float</a>;</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor">#if(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keyword">typedef</span> mediump_float float_t;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor">#elif(defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keyword">typedef</span> highp_float float_t;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor">#elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keyword">typedef</span> mediump_float float_t;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="preprocessor">#elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && defined(GLM_PRECISION_LOWP_FLOAT))</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keyword">typedef</span> lowp_float float_t;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="preprocessor"># error "GLM error: multiple default precision requested for floating-point types"</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="a00177.html#gad3c127f8bf8d7d4e738037c257abb5b1"> 55</a></span>  <span class="keyword">typedef</span> <span class="keywordtype">float</span> <a class="code" href="a00177.html#gad3c127f8bf8d7d4e738037c257abb5b1">float32</a>;</div>
+<div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="a00177.html#gab5596d48586414c91ccb270962dc14d3"> 56</a></span>  <span class="keyword">typedef</span> <span class="keywordtype">double</span> <a class="code" href="a00177.html#gab5596d48586414c91ccb270962dc14d3">float64</a>;</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="comment">// check type sizes</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="preprocessor">#ifndef GLM_STATIC_ASSERT_NULL</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  GLM_STATIC_ASSERT(<span class="keyword">sizeof</span>(<a class="code" href="a00177.html#gad3c127f8bf8d7d4e738037c257abb5b1">glm::float32</a>) == 4, <span class="stringliteral">"float32 size isn't 4 bytes on this platform"</span>);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  GLM_STATIC_ASSERT(<span class="keyword">sizeof</span>(<a class="code" href="a00177.html#gab5596d48586414c91ccb270962dc14d3">glm::float64</a>) == 8, <span class="stringliteral">"float64 size isn't 8 bytes on this platform"</span>);</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="preprocessor">#endif//GLM_STATIC_ASSERT_NULL</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> }<span class="comment">//namespace glm</span></div>
+<div class="ttc" id="a00177_html_gad3c127f8bf8d7d4e738037c257abb5b1"><div class="ttname"><a href="a00177.html#gad3c127f8bf8d7d4e738037c257abb5b1">glm::float32</a></div><div class="ttdeci">float float32</div><div class="ttdoc">Default 32 bit single-precision floating-point scalar. </div><div class="ttdef"><b>Definition:</b> <a href="a00110_source.html#l00055">type_float.hpp:55</a></div></div>
+<div class="ttc" id="a00177_html_gab5596d48586414c91ccb270962dc14d3"><div class="ttname"><a href="a00177.html#gab5596d48586414c91ccb270962dc14d3">glm::float64</a></div><div class="ttdeci">double float64</div><div class="ttdoc">Default 64 bit double-precision floating-point scalar. </div><div class="ttdef"><b>Definition:</b> <a href="a00110_source.html#l00056">type_float.hpp:56</a></div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00158_html_ga358d69e11b1c0f6c7c469e0d39ab7fd1"><div class="ttname"><a href="a00158.html#ga358d69e11b1c0f6c7c469e0d39ab7fd1">glm::lowp_float</a></div><div class="ttdeci">lowp_float_t lowp_float</div><div class="ttdoc">Low precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00110_source.html#l00027">type_float.hpp:27</a></div></div>
+<div class="ttc" id="a00158_html_ga6e95694987ba35af6f736638be39626a"><div class="ttname"><a href="a00158.html#ga6e95694987ba35af6f736638be39626a">glm::highp_float</a></div><div class="ttdeci">highp_float_t highp_float</div><div class="ttdoc">High precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00110_source.html#l00041">type_float.hpp:41</a></div></div>
+<div class="ttc" id="a00098_html"><div class="ttname"><a href="a00098.html">setup.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00158_html_ga280c68f537f4b1e03a00b23e62573b98"><div class="ttname"><a href="a00158.html#ga280c68f537f4b1e03a00b23e62573b98">glm::mediump_float</a></div><div class="ttdeci">mediump_float_t mediump_float</div><div class="ttdoc">Medium precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00110_source.html#l00034">type_float.hpp:34</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00111.html b/src/third_party/glm/doc/api/a00111.html
new file mode 100644
index 0000000..7f942ba
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00111.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: type_gentype.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">type_gentype.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00111_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+
+<p>Definition in file <a class="el" href="a00111_source.html">type_gentype.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00111_source.html b/src/third_party/glm/doc/api/a00111_source.html
new file mode 100644
index 0000000..0ecc164
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00111_source.html
@@ -0,0 +1,248 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: type_gentype.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">type_gentype.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00111.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> {</div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>  <span class="keyword">enum</span> profile</div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>  {</div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>  nice,</div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>  fast,</div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>  simd</div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>  };</div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>  <span class="keyword">typedef</span> std::size_t sizeType;</div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>  </div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="keyword">namespace </span>detail</div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> {</div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <span class="keyword">template</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <span class="keyword">typename</span> VALTYPE, </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keyword">template</span> <<span class="keyword">typename</span>> <span class="keyword">class </span>TYPE</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  ></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="keyword">struct </span>genType</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  {</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keyword">enum</span> ctor{null};</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keyword">typedef</span> VALTYPE value_type;</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keyword">typedef</span> VALTYPE & value_reference;</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <span class="keyword">typedef</span> VALTYPE * value_pointer;</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keyword">typedef</span> VALTYPE <span class="keyword">const</span> * value_const_pointer;</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keyword">typedef</span> TYPE<bool> bool_type;</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keyword">typedef</span> sizeType size_type;</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> is_vector();</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> is_matrix();</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keyword">typedef</span> TYPE<VALTYPE> type;</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keyword">typedef</span> TYPE<VALTYPE> * pointer;</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keyword">typedef</span> TYPE<VALTYPE> <span class="keyword">const</span> * const_pointer;</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keyword">typedef</span> TYPE<VALTYPE> <span class="keyword">const</span> * <span class="keyword">const</span> const_pointer_const;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keyword">typedef</span> TYPE<VALTYPE> * <span class="keyword">const</span> pointer_const;</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keyword">typedef</span> TYPE<VALTYPE> & reference;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keyword">typedef</span> TYPE<VALTYPE> <span class="keyword">const</span> & const_reference;</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keyword">typedef</span> TYPE<VALTYPE> <span class="keyword">const</span> & param_type;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="comment">// Address (Implementation details)</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  value_const_pointer value_address()<span class="keyword"> const</span>{<span class="keywordflow">return</span> value_pointer(<span class="keyword">this</span>);}</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  value_pointer value_address(){<span class="keywordflow">return</span> value_pointer(<span class="keyword">this</span>);}</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="comment">//protected:</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="comment">// enum kind</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="comment">// {</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="comment">// GEN_TYPE,</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="comment">// VEC_TYPE,</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="comment">// MAT_TYPE</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="comment">// };</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="comment">// typedef typename TYPE::kind kind;</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  };</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keyword">template</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keyword">typename</span> VALTYPE, </div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keyword">template</span> <<span class="keyword">typename</span>> <span class="keyword">class </span>TYPE</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  ></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordtype">bool</span> genType<VALTYPE, TYPE>::is_vector()</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  {</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  }</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="comment"> template <typename valTypeT, unsigned int colT, unsigned int rowT, profile proT = nice></span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="comment"> class base</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="comment"> {</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="comment"> public:</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="comment"> // Traits</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="comment"></span></div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="comment"> typedef sizeType size_type;</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="comment"> typedef valTypeT value_type;</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="comment"></span></div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="comment"> typedef base<value_type, colT, rowT> class_type;</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="comment"></span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="comment"> typedef base<bool, colT, rowT> bool_type;</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="comment"> typedef base<value_type, rowT, 1> col_type;</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="comment"> typedef base<value_type, colT, 1> row_type;</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="comment"> typedef base<value_type, rowT, colT> transpose_type;</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="comment"></span></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="comment"> static size_type col_size();</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="comment"> static size_type row_size();</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="comment"> static size_type value_size();</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="comment"> static bool is_scalar();</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="comment"> static bool is_vector();</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="comment"> static bool is_matrix();</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="comment"></span></div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="comment"> private:</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="comment"> // Data </span></div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="comment"> col_type value[colT]; </span></div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="comment"></span></div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="comment"> public:</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="comment"> // Constructors</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="comment"> base();</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="comment"> base(class_type const & m);</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="comment"></span></div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="comment"> explicit base(T const & x);</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="comment"> explicit base(value_type const * const x);</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="comment"> explicit base(col_type const * const x);</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="comment"></span></div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="comment"> // Conversions</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="comment"> template <typename vU, uint cU, uint rU, profile pU></span></div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="comment"> explicit base(base<vU, cU, rU, pU> const & m);</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="comment"></span></div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="comment"> // Accesses</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="comment"> col_type& operator[](size_type i);</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="comment"> col_type const & operator[](size_type i) const;</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="comment"></span></div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="comment"> // Unary updatable operators</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="comment"> class_type& operator= (class_type const & x);</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="comment"> class_type& operator+= (T const & x);</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="comment"> class_type& operator+= (class_type const & x);</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="comment"> class_type& operator-= (T const & x);</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="comment"> class_type& operator-= (class_type const & x);</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="comment"> class_type& operator*= (T const & x);</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="comment"> class_type& operator*= (class_type const & x);</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="comment"> class_type& operator/= (T const & x);</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="comment"> class_type& operator/= (class_type const & x);</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="comment"> class_type& operator++ ();</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="comment"> class_type& operator-- ();</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="comment"> };</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  </div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="comment">//template <typename T></span></div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="comment">//struct traits</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <span class="comment">//{</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="comment">// static const bool is_signed = false;</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="comment">// static const bool is_float = false;</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="comment">// static const bool is_vector = false;</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="comment">// static const bool is_matrix = false;</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="comment">// static const bool is_genType = false;</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="comment">// static const bool is_genIType = false;</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <span class="comment">// static const bool is_genUType = false;</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <span class="comment">//};</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  </div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="comment">//template <></span></div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="comment">//struct traits<half></span></div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <span class="comment">//{</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <span class="comment">// static const bool is_float = true;</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="comment">// static const bool is_genType = true;</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="comment">//};</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  </div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <span class="comment">//template <></span></div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="comment">//struct traits<float></span></div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <span class="comment">//{</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="comment">// static const bool is_float = true;</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="comment">// static const bool is_genType = true;</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <span class="comment">//};</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  </div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="comment">//template <></span></div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="comment">//struct traits<double></span></div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="comment">//{</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <span class="comment">// static const bool is_float = true;</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <span class="comment">// static const bool is_genType = true;</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <span class="comment">//};</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  </div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <span class="comment">//template <typename genType></span></div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="comment">//struct desc</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  <span class="comment">//{</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  <span class="comment">// typedef genType type;</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="comment">// typedef genType * pointer;</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <span class="comment">// typedef genType const* const_pointer;</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <span class="comment">// typedef genType const *const const_pointer_const;</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  <span class="comment">// typedef genType *const pointer_const;</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  <span class="comment">// typedef genType & reference;</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <span class="comment">// typedef genType const& const_reference;</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="comment">// typedef genType const& param_type;</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  </div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  <span class="comment">// typedef typename genType::value_type value_type;</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <span class="comment">// typedef typename genType::size_type size_type;</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <span class="comment">// static const typename size_type value_size;</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <span class="comment">//};</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  </div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="comment">//template <typename genType></span></div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <span class="comment">//const typename desc<genType>::size_type desc<genType>::value_size = genType::value_size();</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  </div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> }<span class="comment">//namespace detail</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="comment">//#include "type_gentype.inl"</span></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00112.html b/src/third_party/glm/doc/api/a00112.html
new file mode 100644
index 0000000..1ed655d
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00112.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: type_half.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">type_half.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00112_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+
+<p>Definition in file <a class="el" href="a00112_source.html">type_half.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00112_source.html b/src/third_party/glm/doc/api/a00112_source.html
new file mode 100644
index 0000000..57e5b82
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00112_source.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: type_half.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">type_half.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00112.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include "<a class="code" href="a00098.html">setup.hpp</a>"</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> </div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a>{</div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="keyword">namespace </span>detail</div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> {</div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>  <span class="keyword">typedef</span> <span class="keywordtype">short</span> hdata;</div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> </div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>  GLM_FUNC_DECL <span class="keywordtype">float</span> toFloat32(hdata value);</div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>  GLM_FUNC_DECL hdata toFloat16(<span class="keywordtype">float</span> <span class="keyword">const</span> & value);</div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> }<span class="comment">//namespace detail</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include "type_half.inl"</span></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00098_html"><div class="ttname"><a href="a00098.html">setup.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00113.html b/src/third_party/glm/doc/api/a00113.html
new file mode 100644
index 0000000..3c0ef0b
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00113.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: type_int.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#typedef-members">Typedefs</a> </div>
+ <div class="headertitle">
+<div class="title">type_int.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00113_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:gaaabe7eb044941ebf308b53a447d692dc"><td class="memItemLeft" align="right" valign="top">typedef detail::highp_int_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gaaabe7eb044941ebf308b53a447d692dc">highp_int</a></td></tr>
+<tr class="separator:gaaabe7eb044941ebf308b53a447d692dc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga73e8a694d7fc69143cf25161d18d1dcf"><td class="memItemLeft" align="right" valign="top">typedef detail::highp_uint_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga73e8a694d7fc69143cf25161d18d1dcf">highp_uint</a></td></tr>
+<tr class="separator:ga73e8a694d7fc69143cf25161d18d1dcf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga302041c186d0d028bea31b711fe16759"><td class="memItemLeft" align="right" valign="top">typedef detail::int16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga302041c186d0d028bea31b711fe16759">int16</a></td></tr>
+<tr class="separator:ga302041c186d0d028bea31b711fe16759"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8df669f4e7698dfe0c0354d92578d74f"><td class="memItemLeft" align="right" valign="top">typedef detail::int32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga8df669f4e7698dfe0c0354d92578d74f">int32</a></td></tr>
+<tr class="separator:ga8df669f4e7698dfe0c0354d92578d74f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaff5189f97f9e842d9636a0f240001b2e"><td class="memItemLeft" align="right" valign="top">typedef detail::int64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaff5189f97f9e842d9636a0f240001b2e">int64</a></td></tr>
+<tr class="separator:gaff5189f97f9e842d9636a0f240001b2e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga41c6189f6485c2825d60fdc835b3a2b0"><td class="memItemLeft" align="right" valign="top">typedef detail::int8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga41c6189f6485c2825d60fdc835b3a2b0">int8</a></td></tr>
+<tr class="separator:ga41c6189f6485c2825d60fdc835b3a2b0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad0fa1e32e8b3552ed63556eca51c620e"><td class="memItemLeft" align="right" valign="top">typedef detail::lowp_int_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gad0fa1e32e8b3552ed63556eca51c620e">lowp_int</a></td></tr>
+<tr class="separator:gad0fa1e32e8b3552ed63556eca51c620e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga25ebc60727fc8b4a1167665f9ecdca97"><td class="memItemLeft" align="right" valign="top">typedef detail::lowp_uint_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga25ebc60727fc8b4a1167665f9ecdca97">lowp_uint</a></td></tr>
+<tr class="separator:ga25ebc60727fc8b4a1167665f9ecdca97"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga212ef8f883878cb7430228a279a7d866"><td class="memItemLeft" align="right" valign="top">typedef detail::mediump_int_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga212ef8f883878cb7430228a279a7d866">mediump_int</a></td></tr>
+<tr class="separator:ga212ef8f883878cb7430228a279a7d866"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0b7e01c52b9e5bf3369761b79b5f4f8e"><td class="memItemLeft" align="right" valign="top">typedef detail::mediump_uint_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga0b7e01c52b9e5bf3369761b79b5f4f8e">mediump_uint</a></td></tr>
+<tr class="separator:ga0b7e01c52b9e5bf3369761b79b5f4f8e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga91ad9478d81a7aaf2593e8d9c3d06a14"><td class="memItemLeft" align="right" valign="top">typedef unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a></td></tr>
+<tr class="separator:ga91ad9478d81a7aaf2593e8d9c3d06a14"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga13471cbbe74e4303a57f3743d007b74d"><td class="memItemLeft" align="right" valign="top">typedef detail::uint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga13471cbbe74e4303a57f3743d007b74d">uint16</a></td></tr>
+<tr class="separator:ga13471cbbe74e4303a57f3743d007b74d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5fa3ddcab56c789bc272ff5651faa12d"><td class="memItemLeft" align="right" valign="top">typedef detail::uint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga5fa3ddcab56c789bc272ff5651faa12d">uint32</a></td></tr>
+<tr class="separator:ga5fa3ddcab56c789bc272ff5651faa12d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab630f76c26b50298187f7889104d4b9c"><td class="memItemLeft" align="right" valign="top">typedef detail::uint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gab630f76c26b50298187f7889104d4b9c">uint64</a></td></tr>
+<tr class="separator:gab630f76c26b50298187f7889104d4b9c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga36475e31b1992cfde54c1a6f5a148865"><td class="memItemLeft" align="right" valign="top">typedef detail::uint8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga36475e31b1992cfde54c1a6f5a148865">uint8</a></td></tr>
+<tr class="separator:ga36475e31b1992cfde54c1a6f5a148865"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+
+<p>Definition in file <a class="el" href="a00113_source.html">type_int.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00113_source.html b/src/third_party/glm/doc/api/a00113_source.html
new file mode 100644
index 0000000..067f4a1
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00113_source.html
@@ -0,0 +1,352 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: type_int.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">type_int.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00113.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include "<a class="code" href="a00098.html">setup.hpp</a>"</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#if GLM_HAS_MAKE_SIGNED</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor"># include <type_traits></span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> </div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor">#if GLM_HAS_EXTENDED_INTEGER_TYPE</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor"># include <cstdint></span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a>{</div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="keyword">namespace </span>detail</div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> {</div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor"># if GLM_HAS_EXTENDED_INTEGER_TYPE</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <span class="keyword">typedef</span> <a class="code" href="a00177.html#ga4bf09d8838a86866b39ee6e109341645">std::int8_t</a> <a class="code" href="a00177.html#ga41c6189f6485c2825d60fdc835b3a2b0">int8</a>;</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <span class="keyword">typedef</span> <a class="code" href="a00177.html#gae8f5e3e964ca2ae240adc2c0d74adede">std::int16_t</a> <a class="code" href="a00177.html#ga302041c186d0d028bea31b711fe16759">int16</a>;</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <span class="keyword">typedef</span> <a class="code" href="a00177.html#ga042ef09ff2f0cb24a36f541bcb3a3710">std::int32_t</a> <a class="code" href="a00177.html#ga8df669f4e7698dfe0c0354d92578d74f">int32</a>;</div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keyword">typedef</span> <a class="code" href="a00177.html#ga322a7d7d2c2c68994dc872a33de63c61">std::int64_t</a> <a class="code" href="a00177.html#gaff5189f97f9e842d9636a0f240001b2e">int64</a>;</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  </div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="keyword">typedef</span> <a class="code" href="a00177.html#ga28d97808322d3c92186e4a0c067d7e8e">std::uint8_t</a> <a class="code" href="a00177.html#ga36475e31b1992cfde54c1a6f5a148865">uint8</a>;</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <span class="keyword">typedef</span> <a class="code" href="a00177.html#ga91f91f411080c37730856ff5887f5bcf">std::uint16_t</a> <a class="code" href="a00177.html#ga13471cbbe74e4303a57f3743d007b74d">uint16</a>;</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keyword">typedef</span> <a class="code" href="a00177.html#ga2171d9dc1fefb1c82e2817f45b622eac">std::uint32_t</a> <a class="code" href="a00177.html#ga5fa3ddcab56c789bc272ff5651faa12d">uint32</a>;</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keyword">typedef</span> <a class="code" href="a00177.html#ga3999d3e7ff22025c16ddb601e14dfdee">std::uint64_t</a> <a class="code" href="a00177.html#gab630f76c26b50298187f7889104d4b9c">uint64</a>;</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor"># else</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor"># if(defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) // C99 detected, 64 bit types available</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keyword">typedef</span> <a class="code" href="a00177.html#ga322a7d7d2c2c68994dc872a33de63c61">int64_t</a> sint64;</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <span class="keyword">typedef</span> <a class="code" href="a00177.html#ga3999d3e7ff22025c16ddb601e14dfdee">uint64_t</a> <a class="code" href="a00177.html#gab630f76c26b50298187f7889104d4b9c">uint64</a>;</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor"># elif GLM_COMPILER & GLM_COMPILER_VC</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keyword">typedef</span> <span class="keywordtype">signed</span> __int64 sint64;</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> __int64 <a class="code" href="a00177.html#gab630f76c26b50298187f7889104d4b9c">uint64</a>;</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  </div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor"># elif GLM_COMPILER & GLM_COMPILER_GCC</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor"># pragma GCC diagnostic ignored "-Wlong-long"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  __extension__ <span class="keyword">typedef</span> <span class="keywordtype">signed</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> sint64;</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  __extension__ <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> <a class="code" href="a00177.html#gab630f76c26b50298187f7889104d4b9c">uint64</a>;</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  </div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor"># elif (GLM_COMPILER & GLM_COMPILER_CLANG)</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor"># pragma clang diagnostic ignored "-Wc++11-long-long"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keyword">typedef</span> <span class="keywordtype">signed</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> sint64;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> <a class="code" href="a00177.html#gab630f76c26b50298187f7889104d4b9c">uint64</a>;</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  </div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor"># else//unknown compiler</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keyword">typedef</span> <span class="keywordtype">signed</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> sint64;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> <a class="code" href="a00177.html#gab630f76c26b50298187f7889104d4b9c">uint64</a>;</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="preprocessor"># endif//GLM_COMPILER</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keyword">typedef</span> <span class="keywordtype">signed</span> <span class="keywordtype">char</span> <a class="code" href="a00177.html#ga41c6189f6485c2825d60fdc835b3a2b0">int8</a>;</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keyword">typedef</span> <span class="keywordtype">signed</span> <span class="keywordtype">short</span> <a class="code" href="a00177.html#ga302041c186d0d028bea31b711fe16759">int16</a>;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keyword">typedef</span> <span class="keywordtype">signed</span> <span class="keywordtype">int</span> <a class="code" href="a00177.html#ga8df669f4e7698dfe0c0354d92578d74f">int32</a>;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keyword">typedef</span> sint64 <a class="code" href="a00177.html#gaff5189f97f9e842d9636a0f240001b2e">int64</a>;</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  </div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00177.html#ga36475e31b1992cfde54c1a6f5a148865">uint8</a>;</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> <a class="code" href="a00177.html#ga13471cbbe74e4303a57f3743d007b74d">uint16</a>;</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="a00177.html#ga5fa3ddcab56c789bc272ff5651faa12d">uint32</a>;</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keyword">typedef</span> uint64 <a class="code" href="a00177.html#gab630f76c26b50298187f7889104d4b9c">uint64</a>;</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="preprocessor">#endif//</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  </div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keyword">typedef</span> <span class="keywordtype">signed</span> <span class="keywordtype">int</span> lowp_int_t;</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keyword">typedef</span> <span class="keywordtype">signed</span> <span class="keywordtype">int</span> mediump_int_t;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keyword">typedef</span> <span class="keywordtype">signed</span> <span class="keywordtype">int</span> highp_int_t;</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  </div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> lowp_uint_t;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> mediump_uint_t;</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> highp_uint_t;</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="preprocessor"># if GLM_HAS_MAKE_SIGNED</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keyword">using</span> std::make_signed;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="keyword">using</span> std::make_unsigned;</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="preprocessor"># else//GLM_HAS_MAKE_SIGNED</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keyword">struct </span>make_signed</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  {};</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keyword">template</span> <></div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keyword">struct </span>make_signed<char></div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  {</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <span class="keyword">typedef</span> <span class="keywordtype">char</span> type;</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  };</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="keyword">template</span> <></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="keyword">struct </span>make_signed<short></div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  {</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keyword">typedef</span> <span class="keywordtype">short</span> type;</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  };</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keyword">template</span> <></div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="keyword">struct </span>make_signed<int></div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  {</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="keyword">typedef</span> <span class="keywordtype">int</span> type;</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  };</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="keyword">template</span> <></div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keyword">struct </span>make_signed<long></div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  {</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keyword">typedef</span> <span class="keywordtype">long</span> type;</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  };</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  </div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keyword">template</span> <></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="keyword">struct </span>make_signed<unsigned char></div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  {</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keyword">typedef</span> <span class="keywordtype">char</span> type;</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  };</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keyword">template</span> <></div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="keyword">struct </span>make_signed<unsigned short></div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  {</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="keyword">typedef</span> <span class="keywordtype">short</span> type;</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  };</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="keyword">template</span> <></div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="keyword">struct </span>make_signed<unsigned int></div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  {</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keyword">typedef</span> <span class="keywordtype">int</span> type;</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  };</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keyword">template</span> <></div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="keyword">struct </span>make_signed<unsigned long></div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  {</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="keyword">typedef</span> <span class="keywordtype">long</span> type;</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  };</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="keyword">struct </span>make_unsigned</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  {};</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="keyword">template</span> <></div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keyword">struct </span>make_unsigned<char></div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  {</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> type;</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  };</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <span class="keyword">template</span> <></div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="keyword">struct </span>make_unsigned<short></div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  {</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> type;</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  };</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="keyword">template</span> <></div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="keyword">struct </span>make_unsigned<int></div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  {</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> type;</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  };</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keyword">template</span> <></div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="keyword">struct </span>make_unsigned<long></div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  {</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> type;</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  };</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> </div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="keyword">template</span> <></div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <span class="keyword">struct </span>make_unsigned<unsigned char></div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  {</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> type;</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  };</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="keyword">template</span> <></div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <span class="keyword">struct </span>make_unsigned<unsigned short></div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  {</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> type;</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  };</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> </div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <span class="keyword">template</span> <></div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <span class="keyword">struct </span>make_unsigned<unsigned int></div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  {</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> type;</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  };</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  <span class="keyword">template</span> <></div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  <span class="keyword">struct </span>make_unsigned<unsigned long></div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  {</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> type;</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  };</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> </div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  <span class="keyword">template</span> <></div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <span class="keyword">struct </span>make_signed<long long></div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  {</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <span class="keyword">typedef</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> type;</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  };</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  </div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <span class="keyword">template</span> <></div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <span class="keyword">struct </span>make_signed<unsigned long long></div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  {</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="keyword">typedef</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> type;</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  };</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  </div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <span class="keyword">template</span> <></div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <span class="keyword">struct </span>make_unsigned<long long></div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  {</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> type;</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  };</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  </div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <span class="keyword">template</span> <></div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <span class="keyword">struct </span>make_unsigned<unsigned long long></div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  {</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> type;</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  };</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="preprocessor"># endif//GLM_HAS_MAKE_SIGNED</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> }<span class="comment">//namespace detail</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno"><a class="line" href="a00177.html#ga41c6189f6485c2825d60fdc835b3a2b0"> 206</a></span>  <span class="keyword">typedef</span> detail::int8 <a class="code" href="a00177.html#ga41c6189f6485c2825d60fdc835b3a2b0">int8</a>;</div>
+<div class="line"><a name="l00207"></a><span class="lineno"><a class="line" href="a00177.html#ga302041c186d0d028bea31b711fe16759"> 207</a></span>  <span class="keyword">typedef</span> detail::int16 <a class="code" href="a00177.html#ga302041c186d0d028bea31b711fe16759">int16</a>;</div>
+<div class="line"><a name="l00208"></a><span class="lineno"><a class="line" href="a00177.html#ga8df669f4e7698dfe0c0354d92578d74f"> 208</a></span>  <span class="keyword">typedef</span> detail::int32 <a class="code" href="a00177.html#ga8df669f4e7698dfe0c0354d92578d74f">int32</a>;</div>
+<div class="line"><a name="l00209"></a><span class="lineno"><a class="line" href="a00177.html#gaff5189f97f9e842d9636a0f240001b2e"> 209</a></span>  <span class="keyword">typedef</span> detail::int64 <a class="code" href="a00177.html#gaff5189f97f9e842d9636a0f240001b2e">int64</a>;</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  </div>
+<div class="line"><a name="l00211"></a><span class="lineno"><a class="line" href="a00177.html#ga36475e31b1992cfde54c1a6f5a148865"> 211</a></span>  <span class="keyword">typedef</span> detail::uint8 <a class="code" href="a00177.html#ga36475e31b1992cfde54c1a6f5a148865">uint8</a>;</div>
+<div class="line"><a name="l00212"></a><span class="lineno"><a class="line" href="a00177.html#ga13471cbbe74e4303a57f3743d007b74d"> 212</a></span>  <span class="keyword">typedef</span> detail::uint16 <a class="code" href="a00177.html#ga13471cbbe74e4303a57f3743d007b74d">uint16</a>;</div>
+<div class="line"><a name="l00213"></a><span class="lineno"><a class="line" href="a00177.html#ga5fa3ddcab56c789bc272ff5651faa12d"> 213</a></span>  <span class="keyword">typedef</span> detail::uint32 <a class="code" href="a00177.html#ga5fa3ddcab56c789bc272ff5651faa12d">uint32</a>;</div>
+<div class="line"><a name="l00214"></a><span class="lineno"><a class="line" href="a00177.html#gab630f76c26b50298187f7889104d4b9c"> 214</a></span>  <span class="keyword">typedef</span> detail::uint64 <a class="code" href="a00177.html#gab630f76c26b50298187f7889104d4b9c">uint64</a>;</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> </div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno"><a class="line" href="a00158.html#gad0fa1e32e8b3552ed63556eca51c620e"> 224</a></span>  <span class="keyword">typedef</span> detail::lowp_int_t <a class="code" href="a00158.html#gad0fa1e32e8b3552ed63556eca51c620e">lowp_int</a>;</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> </div>
+<div class="line"><a name="l00231"></a><span class="lineno"><a class="line" href="a00158.html#ga212ef8f883878cb7430228a279a7d866"> 231</a></span>  <span class="keyword">typedef</span> detail::mediump_int_t <a class="code" href="a00158.html#ga212ef8f883878cb7430228a279a7d866">mediump_int</a>;</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> </div>
+<div class="line"><a name="l00238"></a><span class="lineno"><a class="line" href="a00158.html#gaaabe7eb044941ebf308b53a447d692dc"> 238</a></span>  <span class="keyword">typedef</span> detail::highp_int_t <a class="code" href="a00158.html#gaaabe7eb044941ebf308b53a447d692dc">highp_int</a>;</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> </div>
+<div class="line"><a name="l00245"></a><span class="lineno"><a class="line" href="a00158.html#ga25ebc60727fc8b4a1167665f9ecdca97"> 245</a></span>  <span class="keyword">typedef</span> detail::lowp_uint_t <a class="code" href="a00158.html#ga25ebc60727fc8b4a1167665f9ecdca97">lowp_uint</a>;</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> </div>
+<div class="line"><a name="l00252"></a><span class="lineno"><a class="line" href="a00158.html#ga0b7e01c52b9e5bf3369761b79b5f4f8e"> 252</a></span>  <span class="keyword">typedef</span> detail::mediump_uint_t <a class="code" href="a00158.html#ga0b7e01c52b9e5bf3369761b79b5f4f8e">mediump_uint</a>;</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> </div>
+<div class="line"><a name="l00259"></a><span class="lineno"><a class="line" href="a00158.html#ga73e8a694d7fc69143cf25161d18d1dcf"> 259</a></span>  <span class="keyword">typedef</span> detail::highp_uint_t <a class="code" href="a00158.html#ga73e8a694d7fc69143cf25161d18d1dcf">highp_uint</a>;</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> </div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="preprocessor">#if(!defined(GLM_PRECISION_HIGHP_INT) && !defined(GLM_PRECISION_MEDIUMP_INT) && !defined(GLM_PRECISION_LOWP_INT))</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <span class="keyword">typedef</span> mediump_int int_t;</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="preprocessor">#elif(defined(GLM_PRECISION_HIGHP_INT) && !defined(GLM_PRECISION_MEDIUMP_INT) && !defined(GLM_PRECISION_LOWP_INT))</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <span class="keyword">typedef</span> highp_int int_t;</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <span class="preprocessor">#elif(!defined(GLM_PRECISION_HIGHP_INT) && defined(GLM_PRECISION_MEDIUMP_INT) && !defined(GLM_PRECISION_LOWP_INT))</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  <span class="keyword">typedef</span> mediump_int int_t;</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <span class="preprocessor">#elif(!defined(GLM_PRECISION_HIGHP_INT) && !defined(GLM_PRECISION_MEDIUMP_INT) && defined(GLM_PRECISION_LOWP_INT))</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <span class="keyword">typedef</span> lowp_int int_t;</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <span class="preprocessor"># error "GLM error: multiple default precision requested for signed integer types"</span></div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> </div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <span class="preprocessor">#if(!defined(GLM_PRECISION_HIGHP_UINT) && !defined(GLM_PRECISION_MEDIUMP_UINT) && !defined(GLM_PRECISION_LOWP_UINT))</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <span class="keyword">typedef</span> mediump_uint uint_t;</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="preprocessor">#elif(defined(GLM_PRECISION_HIGHP_UINT) && !defined(GLM_PRECISION_MEDIUMP_UINT) && !defined(GLM_PRECISION_LOWP_UINT))</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <span class="keyword">typedef</span> highp_uint uint_t;</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <span class="preprocessor">#elif(!defined(GLM_PRECISION_HIGHP_UINT) && defined(GLM_PRECISION_MEDIUMP_UINT) && !defined(GLM_PRECISION_LOWP_UINT))</span></div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <span class="keyword">typedef</span> mediump_uint uint_t;</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> <span class="preprocessor">#elif(!defined(GLM_PRECISION_HIGHP_UINT) && !defined(GLM_PRECISION_MEDIUMP_UINT) && defined(GLM_PRECISION_LOWP_UINT))</span></div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <span class="keyword">typedef</span> lowp_uint uint_t;</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> <span class="preprocessor"># error "GLM error: multiple default precision requested for unsigned integer types"</span></div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> </div>
+<div class="line"><a name="l00288"></a><span class="lineno"><a class="line" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14"> 288</a></span>  <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a>;</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> </div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> </div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <span class="comment">// check type sizes</span></div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="preprocessor">#ifndef GLM_STATIC_ASSERT_NULL</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  GLM_STATIC_ASSERT(<span class="keyword">sizeof</span>(<a class="code" href="a00177.html#ga41c6189f6485c2825d60fdc835b3a2b0">glm::int8</a>) == 1, <span class="stringliteral">"int8 size isn't 1 byte on this platform"</span>);</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  GLM_STATIC_ASSERT(<span class="keyword">sizeof</span>(<a class="code" href="a00177.html#ga302041c186d0d028bea31b711fe16759">glm::int16</a>) == 2, <span class="stringliteral">"int16 size isn't 2 bytes on this platform"</span>);</div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  GLM_STATIC_ASSERT(<span class="keyword">sizeof</span>(<a class="code" href="a00177.html#ga8df669f4e7698dfe0c0354d92578d74f">glm::int32</a>) == 4, <span class="stringliteral">"int32 size isn't 4 bytes on this platform"</span>);</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  GLM_STATIC_ASSERT(<span class="keyword">sizeof</span>(<a class="code" href="a00177.html#gaff5189f97f9e842d9636a0f240001b2e">glm::int64</a>) == 8, <span class="stringliteral">"int64 size isn't 8 bytes on this platform"</span>);</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> </div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  GLM_STATIC_ASSERT(<span class="keyword">sizeof</span>(<a class="code" href="a00177.html#ga36475e31b1992cfde54c1a6f5a148865">glm::uint8</a>) == 1, <span class="stringliteral">"uint8 size isn't 1 byte on this platform"</span>);</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  GLM_STATIC_ASSERT(<span class="keyword">sizeof</span>(<a class="code" href="a00177.html#ga13471cbbe74e4303a57f3743d007b74d">glm::uint16</a>) == 2, <span class="stringliteral">"uint16 size isn't 2 bytes on this platform"</span>);</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  GLM_STATIC_ASSERT(<span class="keyword">sizeof</span>(<a class="code" href="a00177.html#ga5fa3ddcab56c789bc272ff5651faa12d">glm::uint32</a>) == 4, <span class="stringliteral">"uint32 size isn't 4 bytes on this platform"</span>);</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  GLM_STATIC_ASSERT(<span class="keyword">sizeof</span>(<a class="code" href="a00177.html#gab630f76c26b50298187f7889104d4b9c">glm::uint64</a>) == 8, <span class="stringliteral">"uint64 size isn't 8 bytes on this platform"</span>);</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <span class="preprocessor">#endif//GLM_STATIC_ASSERT_NULL</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> </div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> }<span class="comment">//namespace glm</span></div>
+<div class="ttc" id="a00177_html_ga41c6189f6485c2825d60fdc835b3a2b0"><div class="ttname"><a href="a00177.html#ga41c6189f6485c2825d60fdc835b3a2b0">glm::int8</a></div><div class="ttdeci">detail::int8 int8</div><div class="ttdoc">8 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00113_source.html#l00206">type_int.hpp:206</a></div></div>
+<div class="ttc" id="a00177_html_ga28d97808322d3c92186e4a0c067d7e8e"><div class="ttname"><a href="a00177.html#ga28d97808322d3c92186e4a0c067d7e8e">glm::uint8_t</a></div><div class="ttdeci">detail::uint8 uint8_t</div><div class="ttdoc">8 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00877">fwd.hpp:877</a></div></div>
+<div class="ttc" id="a00177_html_gaff5189f97f9e842d9636a0f240001b2e"><div class="ttname"><a href="a00177.html#gaff5189f97f9e842d9636a0f240001b2e">glm::int64</a></div><div class="ttdeci">detail::int64 int64</div><div class="ttdoc">64 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00113_source.html#l00209">type_int.hpp:209</a></div></div>
+<div class="ttc" id="a00177_html_ga4bf09d8838a86866b39ee6e109341645"><div class="ttname"><a href="a00177.html#ga4bf09d8838a86866b39ee6e109341645">glm::int8_t</a></div><div class="ttdeci">detail::int8 int8_t</div><div class="ttdoc">8 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00268">fwd.hpp:268</a></div></div>
+<div class="ttc" id="a00158_html_ga91ad9478d81a7aaf2593e8d9c3d06a14"><div class="ttname"><a href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">glm::uint</a></div><div class="ttdeci">unsigned int uint</div><div class="ttdoc">Unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00113_source.html#l00288">type_int.hpp:288</a></div></div>
+<div class="ttc" id="a00177_html_ga13471cbbe74e4303a57f3743d007b74d"><div class="ttname"><a href="a00177.html#ga13471cbbe74e4303a57f3743d007b74d">glm::uint16</a></div><div class="ttdeci">detail::uint16 uint16</div><div class="ttdoc">16 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00113_source.html#l00212">type_int.hpp:212</a></div></div>
+<div class="ttc" id="a00158_html_gad0fa1e32e8b3552ed63556eca51c620e"><div class="ttname"><a href="a00158.html#gad0fa1e32e8b3552ed63556eca51c620e">glm::lowp_int</a></div><div class="ttdeci">detail::lowp_int_t lowp_int</div><div class="ttdoc">Low precision signed integer. </div><div class="ttdef"><b>Definition:</b> <a href="a00113_source.html#l00224">type_int.hpp:224</a></div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00177_html_ga302041c186d0d028bea31b711fe16759"><div class="ttname"><a href="a00177.html#ga302041c186d0d028bea31b711fe16759">glm::int16</a></div><div class="ttdeci">detail::int16 int16</div><div class="ttdoc">16 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00113_source.html#l00207">type_int.hpp:207</a></div></div>
+<div class="ttc" id="a00158_html_ga25ebc60727fc8b4a1167665f9ecdca97"><div class="ttname"><a href="a00158.html#ga25ebc60727fc8b4a1167665f9ecdca97">glm::lowp_uint</a></div><div class="ttdeci">detail::lowp_uint_t lowp_uint</div><div class="ttdoc">Low precision unsigned integer. </div><div class="ttdef"><b>Definition:</b> <a href="a00113_source.html#l00245">type_int.hpp:245</a></div></div>
+<div class="ttc" id="a00158_html_gaaabe7eb044941ebf308b53a447d692dc"><div class="ttname"><a href="a00158.html#gaaabe7eb044941ebf308b53a447d692dc">glm::highp_int</a></div><div class="ttdeci">detail::highp_int_t highp_int</div><div class="ttdoc">High precision signed integer. </div><div class="ttdef"><b>Definition:</b> <a href="a00113_source.html#l00238">type_int.hpp:238</a></div></div>
+<div class="ttc" id="a00177_html_ga36475e31b1992cfde54c1a6f5a148865"><div class="ttname"><a href="a00177.html#ga36475e31b1992cfde54c1a6f5a148865">glm::uint8</a></div><div class="ttdeci">detail::uint8 uint8</div><div class="ttdoc">8 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00113_source.html#l00211">type_int.hpp:211</a></div></div>
+<div class="ttc" id="a00177_html_ga5fa3ddcab56c789bc272ff5651faa12d"><div class="ttname"><a href="a00177.html#ga5fa3ddcab56c789bc272ff5651faa12d">glm::uint32</a></div><div class="ttdeci">detail::uint32 uint32</div><div class="ttdoc">32 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00113_source.html#l00213">type_int.hpp:213</a></div></div>
+<div class="ttc" id="a00177_html_ga042ef09ff2f0cb24a36f541bcb3a3710"><div class="ttname"><a href="a00177.html#ga042ef09ff2f0cb24a36f541bcb3a3710">glm::int32_t</a></div><div class="ttdeci">detail::int32 int32_t</div><div class="ttdoc">32 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00276">fwd.hpp:276</a></div></div>
+<div class="ttc" id="a00177_html_ga3999d3e7ff22025c16ddb601e14dfdee"><div class="ttname"><a href="a00177.html#ga3999d3e7ff22025c16ddb601e14dfdee">glm::uint64_t</a></div><div class="ttdeci">detail::uint64 uint64_t</div><div class="ttdoc">64 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00889">fwd.hpp:889</a></div></div>
+<div class="ttc" id="a00098_html"><div class="ttname"><a href="a00098.html">setup.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00177_html_gab630f76c26b50298187f7889104d4b9c"><div class="ttname"><a href="a00177.html#gab630f76c26b50298187f7889104d4b9c">glm::uint64</a></div><div class="ttdeci">detail::uint64 uint64</div><div class="ttdoc">64 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00113_source.html#l00214">type_int.hpp:214</a></div></div>
+<div class="ttc" id="a00158_html_ga212ef8f883878cb7430228a279a7d866"><div class="ttname"><a href="a00158.html#ga212ef8f883878cb7430228a279a7d866">glm::mediump_int</a></div><div class="ttdeci">detail::mediump_int_t mediump_int</div><div class="ttdoc">Medium precision signed integer. </div><div class="ttdef"><b>Definition:</b> <a href="a00113_source.html#l00231">type_int.hpp:231</a></div></div>
+<div class="ttc" id="a00158_html_ga73e8a694d7fc69143cf25161d18d1dcf"><div class="ttname"><a href="a00158.html#ga73e8a694d7fc69143cf25161d18d1dcf">glm::highp_uint</a></div><div class="ttdeci">detail::highp_uint_t highp_uint</div><div class="ttdoc">High precision unsigned integer. </div><div class="ttdef"><b>Definition:</b> <a href="a00113_source.html#l00259">type_int.hpp:259</a></div></div>
+<div class="ttc" id="a00158_html_ga0b7e01c52b9e5bf3369761b79b5f4f8e"><div class="ttname"><a href="a00158.html#ga0b7e01c52b9e5bf3369761b79b5f4f8e">glm::mediump_uint</a></div><div class="ttdeci">detail::mediump_uint_t mediump_uint</div><div class="ttdoc">Medium precision unsigned integer. </div><div class="ttdef"><b>Definition:</b> <a href="a00113_source.html#l00252">type_int.hpp:252</a></div></div>
+<div class="ttc" id="a00177_html_ga2171d9dc1fefb1c82e2817f45b622eac"><div class="ttname"><a href="a00177.html#ga2171d9dc1fefb1c82e2817f45b622eac">glm::uint32_t</a></div><div class="ttdeci">detail::uint32 uint32_t</div><div class="ttdoc">32 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00885">fwd.hpp:885</a></div></div>
+<div class="ttc" id="a00177_html_ga8df669f4e7698dfe0c0354d92578d74f"><div class="ttname"><a href="a00177.html#ga8df669f4e7698dfe0c0354d92578d74f">glm::int32</a></div><div class="ttdeci">detail::int32 int32</div><div class="ttdoc">32 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00113_source.html#l00208">type_int.hpp:208</a></div></div>
+<div class="ttc" id="a00177_html_gae8f5e3e964ca2ae240adc2c0d74adede"><div class="ttname"><a href="a00177.html#gae8f5e3e964ca2ae240adc2c0d74adede">glm::int16_t</a></div><div class="ttdeci">detail::int16 int16_t</div><div class="ttdoc">16 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00272">fwd.hpp:272</a></div></div>
+<div class="ttc" id="a00177_html_ga322a7d7d2c2c68994dc872a33de63c61"><div class="ttname"><a href="a00177.html#ga322a7d7d2c2c68994dc872a33de63c61">glm::int64_t</a></div><div class="ttdeci">detail::int64 int64_t</div><div class="ttdoc">64 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00280">fwd.hpp:280</a></div></div>
+<div class="ttc" id="a00177_html_ga91f91f411080c37730856ff5887f5bcf"><div class="ttname"><a href="a00177.html#ga91f91f411080c37730856ff5887f5bcf">glm::uint16_t</a></div><div class="ttdeci">detail::uint16 uint16_t</div><div class="ttdoc">16 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00881">fwd.hpp:881</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00114.html b/src/third_party/glm/doc/api/a00114.html
new file mode 100644
index 0000000..71626e3
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00114.html
@@ -0,0 +1,271 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: type_mat.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#typedef-members">Typedefs</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">type_mat.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00114_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:gac7f51e23c8802d867f564dfd146bdb44"><td class="memItemLeft" align="right" valign="top">typedef highp_dmat2x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#gac7f51e23c8802d867f564dfd146bdb44">dmat2</a></td></tr>
+<tr class="separator:gac7f51e23c8802d867f564dfd146bdb44"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gacc27b39853a2ecb538c8b3afc20c359e"><td class="memItemLeft" align="right" valign="top">typedef highp_dmat2x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#gacc27b39853a2ecb538c8b3afc20c359e">dmat2x2</a></td></tr>
+<tr class="separator:gacc27b39853a2ecb538c8b3afc20c359e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1cb3c561a32f0864733dfaf97c71f0c7"><td class="memItemLeft" align="right" valign="top">typedef highp_dmat2x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ga1cb3c561a32f0864733dfaf97c71f0c7">dmat2x3</a></td></tr>
+<tr class="separator:ga1cb3c561a32f0864733dfaf97c71f0c7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaddd230c88fbd6ec33242329be3a1b738"><td class="memItemLeft" align="right" valign="top">typedef highp_dmat2x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#gaddd230c88fbd6ec33242329be3a1b738">dmat2x4</a></td></tr>
+<tr class="separator:gaddd230c88fbd6ec33242329be3a1b738"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae174ff65e148bb7dec4bf10a63cb46ff"><td class="memItemLeft" align="right" valign="top">typedef highp_dmat3x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#gae174ff65e148bb7dec4bf10a63cb46ff">dmat3</a></td></tr>
+<tr class="separator:gae174ff65e148bb7dec4bf10a63cb46ff"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaec22f44dddbdadfe5dfca68eb3457ea8"><td class="memItemLeft" align="right" valign="top">typedef highp_dmat3x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#gaec22f44dddbdadfe5dfca68eb3457ea8">dmat3x2</a></td></tr>
+<tr class="separator:gaec22f44dddbdadfe5dfca68eb3457ea8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac44263f56ff3cbf0a9cc4e2405d5ecb8"><td class="memItemLeft" align="right" valign="top">typedef highp_dmat3x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#gac44263f56ff3cbf0a9cc4e2405d5ecb8">dmat3x3</a></td></tr>
+<tr class="separator:gac44263f56ff3cbf0a9cc4e2405d5ecb8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga38d9bfca882ec542b1928cf77b5c2091"><td class="memItemLeft" align="right" valign="top">typedef highp_dmat3x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ga38d9bfca882ec542b1928cf77b5c2091">dmat3x4</a></td></tr>
+<tr class="separator:ga38d9bfca882ec542b1928cf77b5c2091"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga97b38ea24e9ebf58eac04a8d99dc3e27"><td class="memItemLeft" align="right" valign="top">typedef highp_dmat4x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ga97b38ea24e9ebf58eac04a8d99dc3e27">dmat4</a></td></tr>
+<tr class="separator:ga97b38ea24e9ebf58eac04a8d99dc3e27"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6ddab280c735a2139133b4164b99a68a"><td class="memItemLeft" align="right" valign="top">typedef highp_dmat4x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ga6ddab280c735a2139133b4164b99a68a">dmat4x2</a></td></tr>
+<tr class="separator:ga6ddab280c735a2139133b4164b99a68a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab6c8974496fc7c72dad09219118ba89e"><td class="memItemLeft" align="right" valign="top">typedef highp_dmat4x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#gab6c8974496fc7c72dad09219118ba89e">dmat4x3</a></td></tr>
+<tr class="separator:gab6c8974496fc7c72dad09219118ba89e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga41c2da87ca627c1b2da5e895435a508e"><td class="memItemLeft" align="right" valign="top">typedef highp_dmat4x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ga41c2da87ca627c1b2da5e895435a508e">dmat4x4</a></td></tr>
+<tr class="separator:ga41c2da87ca627c1b2da5e895435a508e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga65ae7d3b23155712ed8cbd3300be4ec8"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga65ae7d3b23155712ed8cbd3300be4ec8">highp_dmat2</a></td></tr>
+<tr class="separator:ga65ae7d3b23155712ed8cbd3300be4ec8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga518f28c64881fafaaf14ec0d867a9bba"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga518f28c64881fafaaf14ec0d867a9bba">highp_dmat2x2</a></td></tr>
+<tr class="separator:ga518f28c64881fafaaf14ec0d867a9bba"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf98afd25f7e3e8f1d73bca020d0d8ea6"><td class="memItemLeft" align="right" valign="top">typedef tmat2x3< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gaf98afd25f7e3e8f1d73bca020d0d8ea6">highp_dmat2x3</a></td></tr>
+<tr class="separator:gaf98afd25f7e3e8f1d73bca020d0d8ea6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac1c87c16d6dcb7449bc3c779ccdc5c30"><td class="memItemLeft" align="right" valign="top">typedef tmat2x4< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gac1c87c16d6dcb7449bc3c779ccdc5c30">highp_dmat2x4</a></td></tr>
+<tr class="separator:gac1c87c16d6dcb7449bc3c779ccdc5c30"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga605c7863807ac2e9c2db4cf13405f34d"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga605c7863807ac2e9c2db4cf13405f34d">highp_dmat3</a></td></tr>
+<tr class="separator:ga605c7863807ac2e9c2db4cf13405f34d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab2d4fd5cd286baff8364a7a3f60c8a21"><td class="memItemLeft" align="right" valign="top">typedef tmat3x2< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gab2d4fd5cd286baff8364a7a3f60c8a21">highp_dmat3x2</a></td></tr>
+<tr class="separator:gab2d4fd5cd286baff8364a7a3f60c8a21"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2d7911a43241a5ce2472421255e5930f"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga2d7911a43241a5ce2472421255e5930f">highp_dmat3x3</a></td></tr>
+<tr class="separator:ga2d7911a43241a5ce2472421255e5930f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga51bfd2f3f5a12464d5934323db9116e7"><td class="memItemLeft" align="right" valign="top">typedef tmat3x4< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga51bfd2f3f5a12464d5934323db9116e7">highp_dmat3x4</a></td></tr>
+<tr class="separator:ga51bfd2f3f5a12464d5934323db9116e7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4607e33c40a3c03256e0bf9c586b456a"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga4607e33c40a3c03256e0bf9c586b456a">highp_dmat4</a></td></tr>
+<tr class="separator:ga4607e33c40a3c03256e0bf9c586b456a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5ee028f50629bf451973b3a910973357"><td class="memItemLeft" align="right" valign="top">typedef tmat4x2< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga5ee028f50629bf451973b3a910973357">highp_dmat4x2</a></td></tr>
+<tr class="separator:ga5ee028f50629bf451973b3a910973357"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafe7eea5b2a20477b5634e340ea5ec28a"><td class="memItemLeft" align="right" valign="top">typedef tmat4x3< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gafe7eea5b2a20477b5634e340ea5ec28a">highp_dmat4x3</a></td></tr>
+<tr class="separator:gafe7eea5b2a20477b5634e340ea5ec28a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga83ab0b8b8b50cbf945237dc8f5322432"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga83ab0b8b8b50cbf945237dc8f5322432">highp_dmat4x4</a></td></tr>
+<tr class="separator:ga83ab0b8b8b50cbf945237dc8f5322432"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga11c1eb1d307846d5bee7d7c0d8c386f0"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga11c1eb1d307846d5bee7d7c0d8c386f0">highp_mat2</a></td></tr>
+<tr class="separator:ga11c1eb1d307846d5bee7d7c0d8c386f0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae6a747cfc33928652abcb1347712b231"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gae6a747cfc33928652abcb1347712b231">highp_mat2x2</a></td></tr>
+<tr class="separator:gae6a747cfc33928652abcb1347712b231"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9dfd75b5b17b89ccbecbdd6201efc74b"><td class="memItemLeft" align="right" valign="top">typedef tmat2x3< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga9dfd75b5b17b89ccbecbdd6201efc74b">highp_mat2x3</a></td></tr>
+<tr class="separator:ga9dfd75b5b17b89ccbecbdd6201efc74b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga03fe2f9a84c61cc0f08b324a27d9b493"><td class="memItemLeft" align="right" valign="top">typedef tmat2x4< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga03fe2f9a84c61cc0f08b324a27d9b493">highp_mat2x4</a></td></tr>
+<tr class="separator:ga03fe2f9a84c61cc0f08b324a27d9b493"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaac1bde847d053902c27bad811b76e9fd"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gaac1bde847d053902c27bad811b76e9fd">highp_mat3</a></td></tr>
+<tr class="separator:gaac1bde847d053902c27bad811b76e9fd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6b00cd7956ac2ee3d4f3ab3b549b564a"><td class="memItemLeft" align="right" valign="top">typedef tmat3x2< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga6b00cd7956ac2ee3d4f3ab3b549b564a">highp_mat3x2</a></td></tr>
+<tr class="separator:ga6b00cd7956ac2ee3d4f3ab3b549b564a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga223de5d0549b215566dfb977d4bb45bd"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga223de5d0549b215566dfb977d4bb45bd">highp_mat3x3</a></td></tr>
+<tr class="separator:ga223de5d0549b215566dfb977d4bb45bd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga117d8a040e738396a3d60368605623d2"><td class="memItemLeft" align="right" valign="top">typedef tmat3x4< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga117d8a040e738396a3d60368605623d2">highp_mat3x4</a></td></tr>
+<tr class="separator:ga117d8a040e738396a3d60368605623d2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gabace1eeb2fac7d73a7faaecf33f352d0"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gabace1eeb2fac7d73a7faaecf33f352d0">highp_mat4</a></td></tr>
+<tr class="separator:gabace1eeb2fac7d73a7faaecf33f352d0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaeea75c96b308be4114e0badf49f58075"><td class="memItemLeft" align="right" valign="top">typedef tmat4x2< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gaeea75c96b308be4114e0badf49f58075">highp_mat4x2</a></td></tr>
+<tr class="separator:gaeea75c96b308be4114e0badf49f58075"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga046e59c57aaa185a8b0b012164ce707f"><td class="memItemLeft" align="right" valign="top">typedef tmat4x3< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga046e59c57aaa185a8b0b012164ce707f">highp_mat4x3</a></td></tr>
+<tr class="separator:ga046e59c57aaa185a8b0b012164ce707f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa72822d91f0dceb4dcaaec550cbfeead"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gaa72822d91f0dceb4dcaaec550cbfeead">highp_mat4x4</a></td></tr>
+<tr class="separator:gaa72822d91f0dceb4dcaaec550cbfeead"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae0a526a0143fc69d7b317c078d591654"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< double, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gae0a526a0143fc69d7b317c078d591654">lowp_dmat2</a></td></tr>
+<tr class="separator:gae0a526a0143fc69d7b317c078d591654"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga000c064e4eba15bf83f8e1e393a8e7fd"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< double, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga000c064e4eba15bf83f8e1e393a8e7fd">lowp_dmat2x2</a></td></tr>
+<tr class="separator:ga000c064e4eba15bf83f8e1e393a8e7fd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaaf2d7cf98b74a43fc432725887685dc0"><td class="memItemLeft" align="right" valign="top">typedef tmat2x3< double, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gaaf2d7cf98b74a43fc432725887685dc0">lowp_dmat2x3</a></td></tr>
+<tr class="separator:gaaf2d7cf98b74a43fc432725887685dc0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8ac69e9ed1addf122f51396f73cdbbf3"><td class="memItemLeft" align="right" valign="top">typedef tmat2x4< double, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga8ac69e9ed1addf122f51396f73cdbbf3">lowp_dmat2x4</a></td></tr>
+<tr class="separator:ga8ac69e9ed1addf122f51396f73cdbbf3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga19b0c9580b447443cf3fe589bd661e03"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< float, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga19b0c9580b447443cf3fe589bd661e03">lowp_dmat3</a></td></tr>
+<tr class="separator:ga19b0c9580b447443cf3fe589bd661e03"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga27ccd1bcb24920508a7b6a24bd9265ab"><td class="memItemLeft" align="right" valign="top">typedef tmat3x2< double, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga27ccd1bcb24920508a7b6a24bd9265ab">lowp_dmat3x2</a></td></tr>
+<tr class="separator:ga27ccd1bcb24920508a7b6a24bd9265ab"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae37a4275ffa68d0c3527a345e76598c0"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< double, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gae37a4275ffa68d0c3527a345e76598c0">lowp_dmat3x3</a></td></tr>
+<tr class="separator:gae37a4275ffa68d0c3527a345e76598c0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga813bff547772bcefebc026e5deba0fe3"><td class="memItemLeft" align="right" valign="top">typedef tmat3x4< double, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga813bff547772bcefebc026e5deba0fe3">lowp_dmat3x4</a></td></tr>
+<tr class="separator:ga813bff547772bcefebc026e5deba0fe3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaac3aee10bee5fa5206de8bf024a8b301"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< double, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gaac3aee10bee5fa5206de8bf024a8b301">lowp_dmat4</a></td></tr>
+<tr class="separator:gaac3aee10bee5fa5206de8bf024a8b301"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga05c2d27aeca091e369fca027e72177e8"><td class="memItemLeft" align="right" valign="top">typedef tmat4x2< double, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga05c2d27aeca091e369fca027e72177e8">lowp_dmat4x2</a></td></tr>
+<tr class="separator:ga05c2d27aeca091e369fca027e72177e8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2b5b1b810f3b9988f49f985387e35e03"><td class="memItemLeft" align="right" valign="top">typedef tmat4x3< double, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga2b5b1b810f3b9988f49f985387e35e03">lowp_dmat4x3</a></td></tr>
+<tr class="separator:ga2b5b1b810f3b9988f49f985387e35e03"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaea9e20c3668305cf0de5334d217408d9"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< double, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gaea9e20c3668305cf0de5334d217408d9">lowp_dmat4x4</a></td></tr>
+<tr class="separator:gaea9e20c3668305cf0de5334d217408d9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8ed94bfb5f4e0b2c3b0d49c5be478c85"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< float, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga8ed94bfb5f4e0b2c3b0d49c5be478c85">lowp_mat2</a></td></tr>
+<tr class="separator:ga8ed94bfb5f4e0b2c3b0d49c5be478c85"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab1a0d4d8fd3bb85f6616dac9dbef2981"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< float, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gab1a0d4d8fd3bb85f6616dac9dbef2981">lowp_mat2x2</a></td></tr>
+<tr class="separator:gab1a0d4d8fd3bb85f6616dac9dbef2981"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae8fe30d421bc141fa84ad414b803947d"><td class="memItemLeft" align="right" valign="top">typedef tmat2x3< float, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gae8fe30d421bc141fa84ad414b803947d">lowp_mat2x3</a></td></tr>
+<tr class="separator:gae8fe30d421bc141fa84ad414b803947d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad64a0179b75508142a72917854034b9b"><td class="memItemLeft" align="right" valign="top">typedef tmat2x4< float, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gad64a0179b75508142a72917854034b9b">lowp_mat2x4</a></td></tr>
+<tr class="separator:gad64a0179b75508142a72917854034b9b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6a66118df7e2398a36ca4a8e98ce6783"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< float, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga6a66118df7e2398a36ca4a8e98ce6783">lowp_mat3</a></td></tr>
+<tr class="separator:ga6a66118df7e2398a36ca4a8e98ce6783"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa2542e884ac7d05ada8ebb078b721924"><td class="memItemLeft" align="right" valign="top">typedef tmat3x2< float, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gaa2542e884ac7d05ada8ebb078b721924">lowp_mat3x2</a></td></tr>
+<tr class="separator:gaa2542e884ac7d05ada8ebb078b721924"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab7ca36023fa56d8006341a192ee09260"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< float, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gab7ca36023fa56d8006341a192ee09260">lowp_mat3x3</a></td></tr>
+<tr class="separator:gab7ca36023fa56d8006341a192ee09260"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2938621d14e70bc3dc576b4fc1547a7e"><td class="memItemLeft" align="right" valign="top">typedef tmat3x4< float, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga2938621d14e70bc3dc576b4fc1547a7e">lowp_mat3x4</a></td></tr>
+<tr class="separator:ga2938621d14e70bc3dc576b4fc1547a7e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gabb754302a1ff8736ec7814d860c9a3c0"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< float, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gabb754302a1ff8736ec7814d860c9a3c0">lowp_mat4</a></td></tr>
+<tr class="separator:gabb754302a1ff8736ec7814d860c9a3c0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac6d04a9590cb7ab62cbe29203dbb9b93"><td class="memItemLeft" align="right" valign="top">typedef tmat4x2< float, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gac6d04a9590cb7ab62cbe29203dbb9b93">lowp_mat4x2</a></td></tr>
+<tr class="separator:gac6d04a9590cb7ab62cbe29203dbb9b93"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafb3dbbc82f8b166867fd21c76eb8db4f"><td class="memItemLeft" align="right" valign="top">typedef tmat4x3< float, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gafb3dbbc82f8b166867fd21c76eb8db4f">lowp_mat4x3</a></td></tr>
+<tr class="separator:gafb3dbbc82f8b166867fd21c76eb8db4f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafff11cbd0abc762e8a340870a31d5bfa"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< float, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gafff11cbd0abc762e8a340870a31d5bfa">lowp_mat4x4</a></td></tr>
+<tr class="separator:gafff11cbd0abc762e8a340870a31d5bfa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6e30cfba068ebc3c71fe1f8b3110e450"><td class="memItemLeft" align="right" valign="top">typedef mat2x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ga6e30cfba068ebc3c71fe1f8b3110e450">mat2</a></td></tr>
+<tr class="separator:ga6e30cfba068ebc3c71fe1f8b3110e450"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0c84b211a5730357b63c6d2e4fb696d5"><td class="memItemLeft" align="right" valign="top">typedef highp_mat2x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ga0c84b211a5730357b63c6d2e4fb696d5">mat2x2</a></td></tr>
+<tr class="separator:ga0c84b211a5730357b63c6d2e4fb696d5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafb063d734266e92915d87f8943560471"><td class="memItemLeft" align="right" valign="top">typedef highp_mat2x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#gafb063d734266e92915d87f8943560471">mat2x3</a></td></tr>
+<tr class="separator:gafb063d734266e92915d87f8943560471"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4d2ac1a80c36fb5a1d15914035f792ac"><td class="memItemLeft" align="right" valign="top">typedef highp_mat2x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ga4d2ac1a80c36fb5a1d15914035f792ac">mat2x4</a></td></tr>
+<tr class="separator:ga4d2ac1a80c36fb5a1d15914035f792ac"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6dd3ec98a548755676267e59142911f8"><td class="memItemLeft" align="right" valign="top">typedef mat3x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ga6dd3ec98a548755676267e59142911f8">mat3</a></td></tr>
+<tr class="separator:ga6dd3ec98a548755676267e59142911f8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3839ca29d011a80ff3ede7f22ba602a4"><td class="memItemLeft" align="right" valign="top">typedef highp_mat3x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ga3839ca29d011a80ff3ede7f22ba602a4">mat3x2</a></td></tr>
+<tr class="separator:ga3839ca29d011a80ff3ede7f22ba602a4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga378921b6a07bcdad946858b340f69ab1"><td class="memItemLeft" align="right" valign="top">typedef highp_mat3x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ga378921b6a07bcdad946858b340f69ab1">mat3x3</a></td></tr>
+<tr class="separator:ga378921b6a07bcdad946858b340f69ab1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7876e0c3e3fcc3e2f4c0462c152e87cf"><td class="memItemLeft" align="right" valign="top">typedef highp_mat3x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ga7876e0c3e3fcc3e2f4c0462c152e87cf">mat3x4</a></td></tr>
+<tr class="separator:ga7876e0c3e3fcc3e2f4c0462c152e87cf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gade0eb47c01f79384a6f38017ede17446"><td class="memItemLeft" align="right" valign="top">typedef mat4x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#gade0eb47c01f79384a6f38017ede17446">mat4</a></td></tr>
+<tr class="separator:gade0eb47c01f79384a6f38017ede17446"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1b3f6a5cbc17362141f9781262ed838f"><td class="memItemLeft" align="right" valign="top">typedef highp_mat4x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ga1b3f6a5cbc17362141f9781262ed838f">mat4x2</a></td></tr>
+<tr class="separator:ga1b3f6a5cbc17362141f9781262ed838f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gacd9ff3b943b3d8bda4f4b388320420fd"><td class="memItemLeft" align="right" valign="top">typedef highp_mat4x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#gacd9ff3b943b3d8bda4f4b388320420fd">mat4x3</a></td></tr>
+<tr class="separator:gacd9ff3b943b3d8bda4f4b388320420fd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga089315d5a0c20ac6eaa17a854bbd2e81"><td class="memItemLeft" align="right" valign="top">typedef highp_mat4x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ga089315d5a0c20ac6eaa17a854bbd2e81">mat4x4</a></td></tr>
+<tr class="separator:ga089315d5a0c20ac6eaa17a854bbd2e81"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga330077a4cb3707329120b5bddcd7db2d"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< double, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga330077a4cb3707329120b5bddcd7db2d">mediump_dmat2</a></td></tr>
+<tr class="separator:ga330077a4cb3707329120b5bddcd7db2d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga78987759d40d7cb03ebe948fb1dcd879"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< double, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga78987759d40d7cb03ebe948fb1dcd879">mediump_dmat2x2</a></td></tr>
+<tr class="separator:ga78987759d40d7cb03ebe948fb1dcd879"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2569a68be3f1cf56e7e5e0920fe5a246"><td class="memItemLeft" align="right" valign="top">typedef tmat2x3< double, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga2569a68be3f1cf56e7e5e0920fe5a246">mediump_dmat2x3</a></td></tr>
+<tr class="separator:ga2569a68be3f1cf56e7e5e0920fe5a246"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaccf963b117beeadf8c5c057000762dd3"><td class="memItemLeft" align="right" valign="top">typedef tmat2x4< double, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gaccf963b117beeadf8c5c057000762dd3">mediump_dmat2x4</a></td></tr>
+<tr class="separator:gaccf963b117beeadf8c5c057000762dd3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8091edef9fdf54b1996ae5bd00f847e5"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< double, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga8091edef9fdf54b1996ae5bd00f847e5">mediump_dmat3</a></td></tr>
+<tr class="separator:ga8091edef9fdf54b1996ae5bd00f847e5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6b81830ed1ce3862bcbbf41eccc3890b"><td class="memItemLeft" align="right" valign="top">typedef tmat3x2< double, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga6b81830ed1ce3862bcbbf41eccc3890b">mediump_dmat3x2</a></td></tr>
+<tr class="separator:ga6b81830ed1ce3862bcbbf41eccc3890b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5e5de055b7af150796e1c017de84cdb1"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< double, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga5e5de055b7af150796e1c017de84cdb1">mediump_dmat3x3</a></td></tr>
+<tr class="separator:ga5e5de055b7af150796e1c017de84cdb1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga187d10ddab0492545b78ea1dd108f28d"><td class="memItemLeft" align="right" valign="top">typedef tmat3x4< double, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga187d10ddab0492545b78ea1dd108f28d">mediump_dmat3x4</a></td></tr>
+<tr class="separator:ga187d10ddab0492545b78ea1dd108f28d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga27be34d618d20fbd70d4c62c21256b0c"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< double, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga27be34d618d20fbd70d4c62c21256b0c">mediump_dmat4</a></td></tr>
+<tr class="separator:ga27be34d618d20fbd70d4c62c21256b0c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad4a5b294c54702b7c8e9ee32a451dea9"><td class="memItemLeft" align="right" valign="top">typedef tmat4x2< double, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gad4a5b294c54702b7c8e9ee32a451dea9">mediump_dmat4x2</a></td></tr>
+<tr class="separator:gad4a5b294c54702b7c8e9ee32a451dea9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga27b55deeb16fda7262d64dc1fd1a56bc"><td class="memItemLeft" align="right" valign="top">typedef tmat4x3< double, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga27b55deeb16fda7262d64dc1fd1a56bc">mediump_dmat4x3</a></td></tr>
+<tr class="separator:ga27b55deeb16fda7262d64dc1fd1a56bc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga857947b2eef2c9144c34b8e3031f2f12"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< double, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga857947b2eef2c9144c34b8e3031f2f12">mediump_dmat4x4</a></td></tr>
+<tr class="separator:ga857947b2eef2c9144c34b8e3031f2f12"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga57b1e6c49a1432cefa518f13a56c5d47"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< float, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga57b1e6c49a1432cefa518f13a56c5d47">mediump_mat2</a></td></tr>
+<tr class="separator:ga57b1e6c49a1432cefa518f13a56c5d47"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1b77963ca2812ac2653624fa0f81ba74"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< float, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga1b77963ca2812ac2653624fa0f81ba74">mediump_mat2x2</a></td></tr>
+<tr class="separator:ga1b77963ca2812ac2653624fa0f81ba74"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8c17198123baf6bfb59582ec42a3ca09"><td class="memItemLeft" align="right" valign="top">typedef tmat2x3< float, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga8c17198123baf6bfb59582ec42a3ca09">mediump_mat2x3</a></td></tr>
+<tr class="separator:ga8c17198123baf6bfb59582ec42a3ca09"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7e95e348c99ef3d56b87ede14bc90bfe"><td class="memItemLeft" align="right" valign="top">typedef tmat2x4< float, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga7e95e348c99ef3d56b87ede14bc90bfe">mediump_mat2x4</a></td></tr>
+<tr class="separator:ga7e95e348c99ef3d56b87ede14bc90bfe"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga29d313adfc82fd4179d29a9fd98b1b5b"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< float, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga29d313adfc82fd4179d29a9fd98b1b5b">mediump_mat3</a></td></tr>
+<tr class="separator:ga29d313adfc82fd4179d29a9fd98b1b5b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9fa569295a9bd6ce0825ccb832c8aac9"><td class="memItemLeft" align="right" valign="top">typedef tmat3x2< float, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga9fa569295a9bd6ce0825ccb832c8aac9">mediump_mat3x2</a></td></tr>
+<tr class="separator:ga9fa569295a9bd6ce0825ccb832c8aac9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2f02cb49e386f65817c10ead9bbe7dec"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< float, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga2f02cb49e386f65817c10ead9bbe7dec">mediump_mat3x3</a></td></tr>
+<tr class="separator:ga2f02cb49e386f65817c10ead9bbe7dec"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac7afc5b81d320dbd7bd6a6f07d587e24"><td class="memItemLeft" align="right" valign="top">typedef tmat3x4< float, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gac7afc5b81d320dbd7bd6a6f07d587e24">mediump_mat3x4</a></td></tr>
+<tr class="separator:gac7afc5b81d320dbd7bd6a6f07d587e24"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6259813853e4253f80c2a08672e9fb6a"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< float, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga6259813853e4253f80c2a08672e9fb6a">mediump_mat4</a></td></tr>
+<tr class="separator:ga6259813853e4253f80c2a08672e9fb6a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga22194c68bc3d798bb68a22f635558c8d"><td class="memItemLeft" align="right" valign="top">typedef tmat4x2< float, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga22194c68bc3d798bb68a22f635558c8d">mediump_mat4x2</a></td></tr>
+<tr class="separator:ga22194c68bc3d798bb68a22f635558c8d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga38a01cba69e3db9b1a1056b362519acb"><td class="memItemLeft" align="right" valign="top">typedef tmat4x3< float, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga38a01cba69e3db9b1a1056b362519acb">mediump_mat4x3</a></td></tr>
+<tr class="separator:ga38a01cba69e3db9b1a1056b362519acb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga535614d97234065ab44b2513667c8563"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< float, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga535614d97234065ab44b2513667c8563">mediump_mat4x4</a></td></tr>
+<tr class="separator:ga535614d97234065ab44b2513667c8563"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gaa7e1d5586cd499126cec76e0f11871e3"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class matType> </td></tr>
+<tr class="memitem:gaa7e1d5586cd499126cec76e0f11871e3"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL matType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00150.html#gaa7e1d5586cd499126cec76e0f11871e3">inverse</a> (matType< T, P > const &m)</td></tr>
+<tr class="separator:gaa7e1d5586cd499126cec76e0f11871e3"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+
+<p>Definition in file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00114_source.html b/src/third_party/glm/doc/api/a00114_source.html
new file mode 100644
index 0000000..5866ce8
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00114_source.html
@@ -0,0 +1,469 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: type_mat.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">type_mat.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00114.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include "<a class="code" href="a00085.html">precision.hpp</a>"</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> </div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a>{</div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="keyword">namespace </span>detail</div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> {</div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">class</span>, precision> <span class="keyword">class </span>colType, <span class="keyword">template</span> <<span class="keyword">class</span>, precision> <span class="keyword">class </span>rowType></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>  <span class="keyword">struct </span>outerProduct_trait{};</div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> }<span class="comment">//namespace detail</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> <span class="keyword">struct </span>tvec2;</div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> <span class="keyword">struct </span>tvec3;</div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> <span class="keyword">struct </span>tvec4;</div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> <span class="keyword">struct </span>tmat2x2;</div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> <span class="keyword">struct </span>tmat2x3;</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> <span class="keyword">struct </span>tmat2x4;</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> <span class="keyword">struct </span>tmat3x2;</div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> <span class="keyword">struct </span>tmat3x3;</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> <span class="keyword">struct </span>tmat3x4;</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> <span class="keyword">struct </span>tmat4x2;</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> <span class="keyword">struct </span>tmat4x3;</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> <span class="keyword">struct </span>tmat4x4;</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>matType></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  GLM_FUNC_DECL matType<T, P> <a class="code" href="a00150.html#gaa7e1d5586cd499126cec76e0f11871e3">inverse</a>(matType<T, P> <span class="keyword">const</span> & m);</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  </div>
+<div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="a00158.html#ga8ed94bfb5f4e0b2c3b0d49c5be478c85"> 39</a></span>  <span class="keyword">typedef</span> tmat2x2<float, lowp> <a class="code" href="a00158.html#ga8ed94bfb5f4e0b2c3b0d49c5be478c85">lowp_mat2</a>;</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  </div>
+<div class="line"><a name="l00046"></a><span class="lineno"><a class="line" href="a00158.html#ga57b1e6c49a1432cefa518f13a56c5d47"> 46</a></span>  <span class="keyword">typedef</span> tmat2x2<float, mediump> <a class="code" href="a00158.html#ga57b1e6c49a1432cefa518f13a56c5d47">mediump_mat2</a>;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  </div>
+<div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="a00158.html#ga11c1eb1d307846d5bee7d7c0d8c386f0"> 53</a></span>  <span class="keyword">typedef</span> tmat2x2<float, highp> <a class="code" href="a00158.html#ga11c1eb1d307846d5bee7d7c0d8c386f0">highp_mat2</a>;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  </div>
+<div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="a00158.html#gab1a0d4d8fd3bb85f6616dac9dbef2981"> 60</a></span>  <span class="keyword">typedef</span> tmat2x2<float, lowp> <a class="code" href="a00158.html#gab1a0d4d8fd3bb85f6616dac9dbef2981">lowp_mat2x2</a>;</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  </div>
+<div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="a00158.html#ga1b77963ca2812ac2653624fa0f81ba74"> 67</a></span>  <span class="keyword">typedef</span> tmat2x2<float, mediump> <a class="code" href="a00158.html#ga1b77963ca2812ac2653624fa0f81ba74">mediump_mat2x2</a>;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  </div>
+<div class="line"><a name="l00074"></a><span class="lineno"><a class="line" href="a00158.html#gae6a747cfc33928652abcb1347712b231"> 74</a></span>  <span class="keyword">typedef</span> tmat2x2<float, highp> <a class="code" href="a00158.html#gae6a747cfc33928652abcb1347712b231">highp_mat2x2</a>;</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  </div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  </div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  </div>
+<div class="line"><a name="l00086"></a><span class="lineno"><a class="line" href="a00158.html#gae8fe30d421bc141fa84ad414b803947d"> 86</a></span>  <span class="keyword">typedef</span> tmat2x3<float, lowp> <a class="code" href="a00158.html#gae8fe30d421bc141fa84ad414b803947d">lowp_mat2x3</a>;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  </div>
+<div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="a00158.html#ga8c17198123baf6bfb59582ec42a3ca09"> 93</a></span>  <span class="keyword">typedef</span> tmat2x3<float, mediump> <a class="code" href="a00158.html#ga8c17198123baf6bfb59582ec42a3ca09">mediump_mat2x3</a>;</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  </div>
+<div class="line"><a name="l00100"></a><span class="lineno"><a class="line" href="a00158.html#ga9dfd75b5b17b89ccbecbdd6201efc74b"> 100</a></span>  <span class="keyword">typedef</span> tmat2x3<float, highp> <a class="code" href="a00158.html#ga9dfd75b5b17b89ccbecbdd6201efc74b">highp_mat2x3</a>;</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  </div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  </div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  </div>
+<div class="line"><a name="l00112"></a><span class="lineno"><a class="line" href="a00158.html#gad64a0179b75508142a72917854034b9b"> 112</a></span>  <span class="keyword">typedef</span> tmat2x4<float, lowp> <a class="code" href="a00158.html#gad64a0179b75508142a72917854034b9b">lowp_mat2x4</a>;</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  </div>
+<div class="line"><a name="l00119"></a><span class="lineno"><a class="line" href="a00158.html#ga7e95e348c99ef3d56b87ede14bc90bfe"> 119</a></span>  <span class="keyword">typedef</span> tmat2x4<float, mediump> <a class="code" href="a00158.html#ga7e95e348c99ef3d56b87ede14bc90bfe">mediump_mat2x4</a>;</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  </div>
+<div class="line"><a name="l00126"></a><span class="lineno"><a class="line" href="a00158.html#ga03fe2f9a84c61cc0f08b324a27d9b493"> 126</a></span>  <span class="keyword">typedef</span> tmat2x4<float, highp> <a class="code" href="a00158.html#ga03fe2f9a84c61cc0f08b324a27d9b493">highp_mat2x4</a>;</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  </div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  </div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  </div>
+<div class="line"><a name="l00138"></a><span class="lineno"><a class="line" href="a00158.html#gaa2542e884ac7d05ada8ebb078b721924"> 138</a></span>  <span class="keyword">typedef</span> tmat3x2<float, lowp> <a class="code" href="a00158.html#gaa2542e884ac7d05ada8ebb078b721924">lowp_mat3x2</a>;</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  </div>
+<div class="line"><a name="l00145"></a><span class="lineno"><a class="line" href="a00158.html#ga9fa569295a9bd6ce0825ccb832c8aac9"> 145</a></span>  <span class="keyword">typedef</span> tmat3x2<float, mediump> <a class="code" href="a00158.html#ga9fa569295a9bd6ce0825ccb832c8aac9">mediump_mat3x2</a>;</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  </div>
+<div class="line"><a name="l00152"></a><span class="lineno"><a class="line" href="a00158.html#ga6b00cd7956ac2ee3d4f3ab3b549b564a"> 152</a></span>  <span class="keyword">typedef</span> tmat3x2<float, highp> <a class="code" href="a00158.html#ga6b00cd7956ac2ee3d4f3ab3b549b564a">highp_mat3x2</a>;</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  </div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  </div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  </div>
+<div class="line"><a name="l00164"></a><span class="lineno"><a class="line" href="a00158.html#ga6a66118df7e2398a36ca4a8e98ce6783"> 164</a></span>  <span class="keyword">typedef</span> tmat3x3<float, lowp> <a class="code" href="a00158.html#ga6a66118df7e2398a36ca4a8e98ce6783">lowp_mat3</a>;</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  </div>
+<div class="line"><a name="l00171"></a><span class="lineno"><a class="line" href="a00158.html#ga29d313adfc82fd4179d29a9fd98b1b5b"> 171</a></span>  <span class="keyword">typedef</span> tmat3x3<float, mediump> <a class="code" href="a00158.html#ga29d313adfc82fd4179d29a9fd98b1b5b">mediump_mat3</a>;</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  </div>
+<div class="line"><a name="l00178"></a><span class="lineno"><a class="line" href="a00158.html#gaac1bde847d053902c27bad811b76e9fd"> 178</a></span>  <span class="keyword">typedef</span> tmat3x3<float, highp> <a class="code" href="a00158.html#gaac1bde847d053902c27bad811b76e9fd">highp_mat3</a>;</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  </div>
+<div class="line"><a name="l00185"></a><span class="lineno"><a class="line" href="a00158.html#gab7ca36023fa56d8006341a192ee09260"> 185</a></span>  <span class="keyword">typedef</span> tmat3x3<float, lowp> <a class="code" href="a00158.html#gab7ca36023fa56d8006341a192ee09260">lowp_mat3x3</a>;</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  </div>
+<div class="line"><a name="l00192"></a><span class="lineno"><a class="line" href="a00158.html#ga2f02cb49e386f65817c10ead9bbe7dec"> 192</a></span>  <span class="keyword">typedef</span> tmat3x3<float, mediump> <a class="code" href="a00158.html#ga2f02cb49e386f65817c10ead9bbe7dec">mediump_mat3x3</a>;</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  </div>
+<div class="line"><a name="l00199"></a><span class="lineno"><a class="line" href="a00158.html#ga223de5d0549b215566dfb977d4bb45bd"> 199</a></span>  <span class="keyword">typedef</span> tmat3x3<float, highp> <a class="code" href="a00158.html#ga223de5d0549b215566dfb977d4bb45bd">highp_mat3x3</a>;</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  </div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  </div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  </div>
+<div class="line"><a name="l00211"></a><span class="lineno"><a class="line" href="a00158.html#ga2938621d14e70bc3dc576b4fc1547a7e"> 211</a></span>  <span class="keyword">typedef</span> tmat3x4<float, lowp> <a class="code" href="a00158.html#ga2938621d14e70bc3dc576b4fc1547a7e">lowp_mat3x4</a>;</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  </div>
+<div class="line"><a name="l00218"></a><span class="lineno"><a class="line" href="a00158.html#gac7afc5b81d320dbd7bd6a6f07d587e24"> 218</a></span>  <span class="keyword">typedef</span> tmat3x4<float, mediump> <a class="code" href="a00158.html#gac7afc5b81d320dbd7bd6a6f07d587e24">mediump_mat3x4</a>;</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  </div>
+<div class="line"><a name="l00225"></a><span class="lineno"><a class="line" href="a00158.html#ga117d8a040e738396a3d60368605623d2"> 225</a></span>  <span class="keyword">typedef</span> tmat3x4<float, highp> <a class="code" href="a00158.html#ga117d8a040e738396a3d60368605623d2">highp_mat3x4</a>;</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  </div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  </div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  </div>
+<div class="line"><a name="l00237"></a><span class="lineno"><a class="line" href="a00158.html#gac6d04a9590cb7ab62cbe29203dbb9b93"> 237</a></span>  <span class="keyword">typedef</span> tmat4x2<float, lowp> <a class="code" href="a00158.html#gac6d04a9590cb7ab62cbe29203dbb9b93">lowp_mat4x2</a>;</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  </div>
+<div class="line"><a name="l00244"></a><span class="lineno"><a class="line" href="a00158.html#ga22194c68bc3d798bb68a22f635558c8d"> 244</a></span>  <span class="keyword">typedef</span> tmat4x2<float, mediump> <a class="code" href="a00158.html#ga22194c68bc3d798bb68a22f635558c8d">mediump_mat4x2</a>;</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  </div>
+<div class="line"><a name="l00251"></a><span class="lineno"><a class="line" href="a00158.html#gaeea75c96b308be4114e0badf49f58075"> 251</a></span>  <span class="keyword">typedef</span> tmat4x2<float, highp> <a class="code" href="a00158.html#gaeea75c96b308be4114e0badf49f58075">highp_mat4x2</a>;</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  </div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  </div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  </div>
+<div class="line"><a name="l00263"></a><span class="lineno"><a class="line" href="a00158.html#gafb3dbbc82f8b166867fd21c76eb8db4f"> 263</a></span>  <span class="keyword">typedef</span> tmat4x3<float, lowp> <a class="code" href="a00158.html#gafb3dbbc82f8b166867fd21c76eb8db4f">lowp_mat4x3</a>;</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  </div>
+<div class="line"><a name="l00270"></a><span class="lineno"><a class="line" href="a00158.html#ga38a01cba69e3db9b1a1056b362519acb"> 270</a></span>  <span class="keyword">typedef</span> tmat4x3<float, mediump> <a class="code" href="a00158.html#ga38a01cba69e3db9b1a1056b362519acb">mediump_mat4x3</a>;</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  </div>
+<div class="line"><a name="l00277"></a><span class="lineno"><a class="line" href="a00158.html#ga046e59c57aaa185a8b0b012164ce707f"> 277</a></span>  <span class="keyword">typedef</span> tmat4x3<float, highp> <a class="code" href="a00158.html#ga046e59c57aaa185a8b0b012164ce707f">highp_mat4x3</a>;</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  </div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  </div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  </div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  </div>
+<div class="line"><a name="l00290"></a><span class="lineno"><a class="line" href="a00158.html#gabb754302a1ff8736ec7814d860c9a3c0"> 290</a></span>  <span class="keyword">typedef</span> tmat4x4<float, lowp> <a class="code" href="a00158.html#gabb754302a1ff8736ec7814d860c9a3c0">lowp_mat4</a>;</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  </div>
+<div class="line"><a name="l00297"></a><span class="lineno"><a class="line" href="a00158.html#ga6259813853e4253f80c2a08672e9fb6a"> 297</a></span>  <span class="keyword">typedef</span> tmat4x4<float, mediump> <a class="code" href="a00158.html#ga6259813853e4253f80c2a08672e9fb6a">mediump_mat4</a>;</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  </div>
+<div class="line"><a name="l00304"></a><span class="lineno"><a class="line" href="a00158.html#gabace1eeb2fac7d73a7faaecf33f352d0"> 304</a></span>  <span class="keyword">typedef</span> tmat4x4<float, highp> <a class="code" href="a00158.html#gabace1eeb2fac7d73a7faaecf33f352d0">highp_mat4</a>;</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  </div>
+<div class="line"><a name="l00311"></a><span class="lineno"><a class="line" href="a00158.html#gafff11cbd0abc762e8a340870a31d5bfa"> 311</a></span>  <span class="keyword">typedef</span> tmat4x4<float, lowp> <a class="code" href="a00158.html#gafff11cbd0abc762e8a340870a31d5bfa">lowp_mat4x4</a>;</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  </div>
+<div class="line"><a name="l00318"></a><span class="lineno"><a class="line" href="a00158.html#ga535614d97234065ab44b2513667c8563"> 318</a></span>  <span class="keyword">typedef</span> tmat4x4<float, mediump> <a class="code" href="a00158.html#ga535614d97234065ab44b2513667c8563">mediump_mat4x4</a>;</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  </div>
+<div class="line"><a name="l00325"></a><span class="lineno"><a class="line" href="a00158.html#gaa72822d91f0dceb4dcaaec550cbfeead"> 325</a></span>  <span class="keyword">typedef</span> tmat4x4<float, highp> <a class="code" href="a00158.html#gaa72822d91f0dceb4dcaaec550cbfeead">highp_mat4x4</a>;</div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  </div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  </div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  </div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  <span class="comment">// Float definition</span></div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  </div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="preprocessor">#if(defined(GLM_PRECISION_LOWP_FLOAT))</span></div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  <span class="keyword">typedef</span> lowp_mat2x2 <a class="code" href="a00157.html#ga0c84b211a5730357b63c6d2e4fb696d5">mat2x2</a>;</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  <span class="keyword">typedef</span> lowp_mat2x3 <a class="code" href="a00157.html#gafb063d734266e92915d87f8943560471">mat2x3</a>;</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  <span class="keyword">typedef</span> lowp_mat2x4 <a class="code" href="a00157.html#ga4d2ac1a80c36fb5a1d15914035f792ac">mat2x4</a>;</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  <span class="keyword">typedef</span> lowp_mat3x2 <a class="code" href="a00157.html#ga3839ca29d011a80ff3ede7f22ba602a4">mat3x2</a>;</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  <span class="keyword">typedef</span> lowp_mat3x3 <a class="code" href="a00157.html#ga378921b6a07bcdad946858b340f69ab1">mat3x3</a>;</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  <span class="keyword">typedef</span> lowp_mat3x4 <a class="code" href="a00157.html#ga7876e0c3e3fcc3e2f4c0462c152e87cf">mat3x4</a>;</div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  <span class="keyword">typedef</span> lowp_mat4x2 <a class="code" href="a00157.html#ga1b3f6a5cbc17362141f9781262ed838f">mat4x2</a>;</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  <span class="keyword">typedef</span> lowp_mat4x3 <a class="code" href="a00157.html#gacd9ff3b943b3d8bda4f4b388320420fd">mat4x3</a>;</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  <span class="keyword">typedef</span> lowp_mat4x4 <a class="code" href="a00157.html#ga089315d5a0c20ac6eaa17a854bbd2e81">mat4x4</a>;</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <span class="preprocessor">#elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))</span></div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  <span class="keyword">typedef</span> mediump_mat2x2 <a class="code" href="a00157.html#ga0c84b211a5730357b63c6d2e4fb696d5">mat2x2</a>;</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  <span class="keyword">typedef</span> mediump_mat2x3 <a class="code" href="a00157.html#gafb063d734266e92915d87f8943560471">mat2x3</a>;</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  <span class="keyword">typedef</span> mediump_mat2x4 <a class="code" href="a00157.html#ga4d2ac1a80c36fb5a1d15914035f792ac">mat2x4</a>;</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  <span class="keyword">typedef</span> mediump_mat3x2 <a class="code" href="a00157.html#ga3839ca29d011a80ff3ede7f22ba602a4">mat3x2</a>;</div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  <span class="keyword">typedef</span> mediump_mat3x3 <a class="code" href="a00157.html#ga378921b6a07bcdad946858b340f69ab1">mat3x3</a>;</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  <span class="keyword">typedef</span> mediump_mat3x4 <a class="code" href="a00157.html#ga7876e0c3e3fcc3e2f4c0462c152e87cf">mat3x4</a>;</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  <span class="keyword">typedef</span> mediump_mat4x2 <a class="code" href="a00157.html#ga1b3f6a5cbc17362141f9781262ed838f">mat4x2</a>;</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  <span class="keyword">typedef</span> mediump_mat4x3 <a class="code" href="a00157.html#gacd9ff3b943b3d8bda4f4b388320420fd">mat4x3</a>;</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  <span class="keyword">typedef</span> mediump_mat4x4 <a class="code" href="a00157.html#ga089315d5a0c20ac6eaa17a854bbd2e81">mat4x4</a>;</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> <span class="preprocessor">#else </span></div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <span class="keyword">typedef</span> highp_mat2x2 <a class="code" href="a00157.html#ga0c84b211a5730357b63c6d2e4fb696d5">mat2x2</a>;</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  </div>
+<div class="line"><a name="l00364"></a><span class="lineno"><a class="line" href="a00157.html#gafb063d734266e92915d87f8943560471"> 364</a></span>  <span class="keyword">typedef</span> highp_mat2x3 <a class="code" href="a00157.html#gafb063d734266e92915d87f8943560471">mat2x3</a>;</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  </div>
+<div class="line"><a name="l00369"></a><span class="lineno"><a class="line" href="a00157.html#ga4d2ac1a80c36fb5a1d15914035f792ac"> 369</a></span>  <span class="keyword">typedef</span> highp_mat2x4 <a class="code" href="a00157.html#ga4d2ac1a80c36fb5a1d15914035f792ac">mat2x4</a>;</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  </div>
+<div class="line"><a name="l00374"></a><span class="lineno"><a class="line" href="a00157.html#ga3839ca29d011a80ff3ede7f22ba602a4"> 374</a></span>  <span class="keyword">typedef</span> highp_mat3x2 <a class="code" href="a00157.html#ga3839ca29d011a80ff3ede7f22ba602a4">mat3x2</a>;</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  </div>
+<div class="line"><a name="l00379"></a><span class="lineno"><a class="line" href="a00157.html#ga378921b6a07bcdad946858b340f69ab1"> 379</a></span>  <span class="keyword">typedef</span> highp_mat3x3 <a class="code" href="a00157.html#ga378921b6a07bcdad946858b340f69ab1">mat3x3</a>;</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  </div>
+<div class="line"><a name="l00384"></a><span class="lineno"><a class="line" href="a00157.html#ga7876e0c3e3fcc3e2f4c0462c152e87cf"> 384</a></span>  <span class="keyword">typedef</span> highp_mat3x4 <a class="code" href="a00157.html#ga7876e0c3e3fcc3e2f4c0462c152e87cf">mat3x4</a>;</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  </div>
+<div class="line"><a name="l00389"></a><span class="lineno"><a class="line" href="a00157.html#ga1b3f6a5cbc17362141f9781262ed838f"> 389</a></span>  <span class="keyword">typedef</span> highp_mat4x2 <a class="code" href="a00157.html#ga1b3f6a5cbc17362141f9781262ed838f">mat4x2</a>;</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  </div>
+<div class="line"><a name="l00394"></a><span class="lineno"><a class="line" href="a00157.html#gacd9ff3b943b3d8bda4f4b388320420fd"> 394</a></span>  <span class="keyword">typedef</span> highp_mat4x3 <a class="code" href="a00157.html#gacd9ff3b943b3d8bda4f4b388320420fd">mat4x3</a>;</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  </div>
+<div class="line"><a name="l00399"></a><span class="lineno"><a class="line" href="a00157.html#ga089315d5a0c20ac6eaa17a854bbd2e81"> 399</a></span>  <span class="keyword">typedef</span> highp_mat4x4 <a class="code" href="a00157.html#ga089315d5a0c20ac6eaa17a854bbd2e81">mat4x4</a>;</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  </div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> <span class="preprocessor">#endif//GLM_PRECISION</span></div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  </div>
+<div class="line"><a name="l00406"></a><span class="lineno"><a class="line" href="a00157.html#ga6e30cfba068ebc3c71fe1f8b3110e450"> 406</a></span>  <span class="keyword">typedef</span> mat2x2 <a class="code" href="a00157.html#ga6e30cfba068ebc3c71fe1f8b3110e450">mat2</a>;</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  </div>
+<div class="line"><a name="l00411"></a><span class="lineno"><a class="line" href="a00157.html#ga6dd3ec98a548755676267e59142911f8"> 411</a></span>  <span class="keyword">typedef</span> mat3x3 <a class="code" href="a00157.html#ga6dd3ec98a548755676267e59142911f8">mat3</a>;</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  </div>
+<div class="line"><a name="l00416"></a><span class="lineno"><a class="line" href="a00157.html#gade0eb47c01f79384a6f38017ede17446"> 416</a></span>  <span class="keyword">typedef</span> mat4x4 <a class="code" href="a00157.html#gade0eb47c01f79384a6f38017ede17446">mat4</a>;</div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  </div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  <span class="comment">// Double definition</span></div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  </div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  </div>
+<div class="line"><a name="l00428"></a><span class="lineno"><a class="line" href="a00158.html#gae0a526a0143fc69d7b317c078d591654"> 428</a></span>  <span class="keyword">typedef</span> tmat2x2<double, lowp> <a class="code" href="a00158.html#gae0a526a0143fc69d7b317c078d591654">lowp_dmat2</a>;</div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  </div>
+<div class="line"><a name="l00434"></a><span class="lineno"><a class="line" href="a00158.html#ga330077a4cb3707329120b5bddcd7db2d"> 434</a></span>  <span class="keyword">typedef</span> tmat2x2<double, mediump> <a class="code" href="a00158.html#ga330077a4cb3707329120b5bddcd7db2d">mediump_dmat2</a>;</div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  </div>
+<div class="line"><a name="l00440"></a><span class="lineno"><a class="line" href="a00158.html#ga65ae7d3b23155712ed8cbd3300be4ec8"> 440</a></span>  <span class="keyword">typedef</span> tmat2x2<double, highp> <a class="code" href="a00158.html#ga65ae7d3b23155712ed8cbd3300be4ec8">highp_dmat2</a>;</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  </div>
+<div class="line"><a name="l00446"></a><span class="lineno"><a class="line" href="a00158.html#ga000c064e4eba15bf83f8e1e393a8e7fd"> 446</a></span>  <span class="keyword">typedef</span> tmat2x2<double, lowp> <a class="code" href="a00158.html#ga000c064e4eba15bf83f8e1e393a8e7fd">lowp_dmat2x2</a>;</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  </div>
+<div class="line"><a name="l00452"></a><span class="lineno"><a class="line" href="a00158.html#ga78987759d40d7cb03ebe948fb1dcd879"> 452</a></span>  <span class="keyword">typedef</span> tmat2x2<double, mediump> <a class="code" href="a00158.html#ga78987759d40d7cb03ebe948fb1dcd879">mediump_dmat2x2</a>;</div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  </div>
+<div class="line"><a name="l00458"></a><span class="lineno"><a class="line" href="a00158.html#ga518f28c64881fafaaf14ec0d867a9bba"> 458</a></span>  <span class="keyword">typedef</span> tmat2x2<double, highp> <a class="code" href="a00158.html#ga518f28c64881fafaaf14ec0d867a9bba">highp_dmat2x2</a>;</div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  </div>
+<div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  </div>
+<div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  </div>
+<div class="line"><a name="l00469"></a><span class="lineno"><a class="line" href="a00158.html#gaaf2d7cf98b74a43fc432725887685dc0"> 469</a></span>  <span class="keyword">typedef</span> tmat2x3<double, lowp> <a class="code" href="a00158.html#gaaf2d7cf98b74a43fc432725887685dc0">lowp_dmat2x3</a>;</div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  </div>
+<div class="line"><a name="l00475"></a><span class="lineno"><a class="line" href="a00158.html#ga2569a68be3f1cf56e7e5e0920fe5a246"> 475</a></span>  <span class="keyword">typedef</span> tmat2x3<double, mediump> <a class="code" href="a00158.html#ga2569a68be3f1cf56e7e5e0920fe5a246">mediump_dmat2x3</a>;</div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  </div>
+<div class="line"><a name="l00481"></a><span class="lineno"><a class="line" href="a00158.html#gaf98afd25f7e3e8f1d73bca020d0d8ea6"> 481</a></span>  <span class="keyword">typedef</span> tmat2x3<double, highp> <a class="code" href="a00158.html#gaf98afd25f7e3e8f1d73bca020d0d8ea6">highp_dmat2x3</a>;</div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  </div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  </div>
+<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  </div>
+<div class="line"><a name="l00492"></a><span class="lineno"><a class="line" href="a00158.html#ga8ac69e9ed1addf122f51396f73cdbbf3"> 492</a></span>  <span class="keyword">typedef</span> tmat2x4<double, lowp> <a class="code" href="a00158.html#ga8ac69e9ed1addf122f51396f73cdbbf3">lowp_dmat2x4</a>;</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  </div>
+<div class="line"><a name="l00498"></a><span class="lineno"><a class="line" href="a00158.html#gaccf963b117beeadf8c5c057000762dd3"> 498</a></span>  <span class="keyword">typedef</span> tmat2x4<double, mediump> <a class="code" href="a00158.html#gaccf963b117beeadf8c5c057000762dd3">mediump_dmat2x4</a>;</div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  </div>
+<div class="line"><a name="l00504"></a><span class="lineno"><a class="line" href="a00158.html#gac1c87c16d6dcb7449bc3c779ccdc5c30"> 504</a></span>  <span class="keyword">typedef</span> tmat2x4<double, highp> <a class="code" href="a00158.html#gac1c87c16d6dcb7449bc3c779ccdc5c30">highp_dmat2x4</a>;</div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  </div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  </div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  </div>
+<div class="line"><a name="l00515"></a><span class="lineno"><a class="line" href="a00158.html#ga27ccd1bcb24920508a7b6a24bd9265ab"> 515</a></span>  <span class="keyword">typedef</span> tmat3x2<double, lowp> <a class="code" href="a00158.html#ga27ccd1bcb24920508a7b6a24bd9265ab">lowp_dmat3x2</a>;</div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  </div>
+<div class="line"><a name="l00521"></a><span class="lineno"><a class="line" href="a00158.html#ga6b81830ed1ce3862bcbbf41eccc3890b"> 521</a></span>  <span class="keyword">typedef</span> tmat3x2<double, mediump> <a class="code" href="a00158.html#ga6b81830ed1ce3862bcbbf41eccc3890b">mediump_dmat3x2</a>;</div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  </div>
+<div class="line"><a name="l00527"></a><span class="lineno"><a class="line" href="a00158.html#gab2d4fd5cd286baff8364a7a3f60c8a21"> 527</a></span>  <span class="keyword">typedef</span> tmat3x2<double, highp> <a class="code" href="a00158.html#gab2d4fd5cd286baff8364a7a3f60c8a21">highp_dmat3x2</a>;</div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  </div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  </div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  </div>
+<div class="line"><a name="l00538"></a><span class="lineno"><a class="line" href="a00158.html#ga19b0c9580b447443cf3fe589bd661e03"> 538</a></span>  <span class="keyword">typedef</span> tmat3x3<float, lowp> <a class="code" href="a00158.html#ga19b0c9580b447443cf3fe589bd661e03">lowp_dmat3</a>;</div>
+<div class="line"><a name="l00539"></a><span class="lineno"> 539</span>  </div>
+<div class="line"><a name="l00544"></a><span class="lineno"><a class="line" href="a00158.html#ga8091edef9fdf54b1996ae5bd00f847e5"> 544</a></span>  <span class="keyword">typedef</span> tmat3x3<double, mediump> <a class="code" href="a00158.html#ga8091edef9fdf54b1996ae5bd00f847e5">mediump_dmat3</a>;</div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  </div>
+<div class="line"><a name="l00550"></a><span class="lineno"><a class="line" href="a00158.html#ga605c7863807ac2e9c2db4cf13405f34d"> 550</a></span>  <span class="keyword">typedef</span> tmat3x3<double, highp> <a class="code" href="a00158.html#ga605c7863807ac2e9c2db4cf13405f34d">highp_dmat3</a>;</div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  </div>
+<div class="line"><a name="l00556"></a><span class="lineno"><a class="line" href="a00158.html#gae37a4275ffa68d0c3527a345e76598c0"> 556</a></span>  <span class="keyword">typedef</span> tmat3x3<double, lowp> <a class="code" href="a00158.html#gae37a4275ffa68d0c3527a345e76598c0">lowp_dmat3x3</a>;</div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  </div>
+<div class="line"><a name="l00562"></a><span class="lineno"><a class="line" href="a00158.html#ga5e5de055b7af150796e1c017de84cdb1"> 562</a></span>  <span class="keyword">typedef</span> tmat3x3<double, mediump> <a class="code" href="a00158.html#ga5e5de055b7af150796e1c017de84cdb1">mediump_dmat3x3</a>;</div>
+<div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  </div>
+<div class="line"><a name="l00568"></a><span class="lineno"><a class="line" href="a00158.html#ga2d7911a43241a5ce2472421255e5930f"> 568</a></span>  <span class="keyword">typedef</span> tmat3x3<double, highp> <a class="code" href="a00158.html#ga2d7911a43241a5ce2472421255e5930f">highp_dmat3x3</a>;</div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  </div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span>  </div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span>  </div>
+<div class="line"><a name="l00579"></a><span class="lineno"><a class="line" href="a00158.html#ga813bff547772bcefebc026e5deba0fe3"> 579</a></span>  <span class="keyword">typedef</span> tmat3x4<double, lowp> <a class="code" href="a00158.html#ga813bff547772bcefebc026e5deba0fe3">lowp_dmat3x4</a>;</div>
+<div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  </div>
+<div class="line"><a name="l00585"></a><span class="lineno"><a class="line" href="a00158.html#ga187d10ddab0492545b78ea1dd108f28d"> 585</a></span>  <span class="keyword">typedef</span> tmat3x4<double, mediump> <a class="code" href="a00158.html#ga187d10ddab0492545b78ea1dd108f28d">mediump_dmat3x4</a>;</div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  </div>
+<div class="line"><a name="l00591"></a><span class="lineno"><a class="line" href="a00158.html#ga51bfd2f3f5a12464d5934323db9116e7"> 591</a></span>  <span class="keyword">typedef</span> tmat3x4<double, highp> <a class="code" href="a00158.html#ga51bfd2f3f5a12464d5934323db9116e7">highp_dmat3x4</a>;</div>
+<div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  </div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span>  </div>
+<div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  </div>
+<div class="line"><a name="l00602"></a><span class="lineno"><a class="line" href="a00158.html#ga05c2d27aeca091e369fca027e72177e8"> 602</a></span>  <span class="keyword">typedef</span> tmat4x2<double, lowp> <a class="code" href="a00158.html#ga05c2d27aeca091e369fca027e72177e8">lowp_dmat4x2</a>;</div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  </div>
+<div class="line"><a name="l00608"></a><span class="lineno"><a class="line" href="a00158.html#gad4a5b294c54702b7c8e9ee32a451dea9"> 608</a></span>  <span class="keyword">typedef</span> tmat4x2<double, mediump> <a class="code" href="a00158.html#gad4a5b294c54702b7c8e9ee32a451dea9">mediump_dmat4x2</a>;</div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span>  </div>
+<div class="line"><a name="l00614"></a><span class="lineno"><a class="line" href="a00158.html#ga5ee028f50629bf451973b3a910973357"> 614</a></span>  <span class="keyword">typedef</span> tmat4x2<double, highp> <a class="code" href="a00158.html#ga5ee028f50629bf451973b3a910973357">highp_dmat4x2</a>;</div>
+<div class="line"><a name="l00615"></a><span class="lineno"> 615</span>  </div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span>  </div>
+<div class="line"><a name="l00620"></a><span class="lineno"> 620</span>  </div>
+<div class="line"><a name="l00625"></a><span class="lineno"><a class="line" href="a00158.html#ga2b5b1b810f3b9988f49f985387e35e03"> 625</a></span>  <span class="keyword">typedef</span> tmat4x3<double, lowp> <a class="code" href="a00158.html#ga2b5b1b810f3b9988f49f985387e35e03">lowp_dmat4x3</a>;</div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span>  </div>
+<div class="line"><a name="l00631"></a><span class="lineno"><a class="line" href="a00158.html#ga27b55deeb16fda7262d64dc1fd1a56bc"> 631</a></span>  <span class="keyword">typedef</span> tmat4x3<double, mediump> <a class="code" href="a00158.html#ga27b55deeb16fda7262d64dc1fd1a56bc">mediump_dmat4x3</a>;</div>
+<div class="line"><a name="l00632"></a><span class="lineno"> 632</span>  </div>
+<div class="line"><a name="l00637"></a><span class="lineno"><a class="line" href="a00158.html#gafe7eea5b2a20477b5634e340ea5ec28a"> 637</a></span>  <span class="keyword">typedef</span> tmat4x3<double, highp> <a class="code" href="a00158.html#gafe7eea5b2a20477b5634e340ea5ec28a">highp_dmat4x3</a>;</div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  </div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span>  </div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span>  </div>
+<div class="line"><a name="l00648"></a><span class="lineno"><a class="line" href="a00158.html#gaac3aee10bee5fa5206de8bf024a8b301"> 648</a></span>  <span class="keyword">typedef</span> tmat4x4<double, lowp> <a class="code" href="a00158.html#gaac3aee10bee5fa5206de8bf024a8b301">lowp_dmat4</a>;</div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span>  </div>
+<div class="line"><a name="l00654"></a><span class="lineno"><a class="line" href="a00158.html#ga27be34d618d20fbd70d4c62c21256b0c"> 654</a></span>  <span class="keyword">typedef</span> tmat4x4<double, mediump> <a class="code" href="a00158.html#ga27be34d618d20fbd70d4c62c21256b0c">mediump_dmat4</a>;</div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  </div>
+<div class="line"><a name="l00660"></a><span class="lineno"><a class="line" href="a00158.html#ga4607e33c40a3c03256e0bf9c586b456a"> 660</a></span>  <span class="keyword">typedef</span> tmat4x4<double, highp> <a class="code" href="a00158.html#ga4607e33c40a3c03256e0bf9c586b456a">highp_dmat4</a>;</div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span>  </div>
+<div class="line"><a name="l00666"></a><span class="lineno"><a class="line" href="a00158.html#gaea9e20c3668305cf0de5334d217408d9"> 666</a></span>  <span class="keyword">typedef</span> tmat4x4<double, lowp> <a class="code" href="a00158.html#gaea9e20c3668305cf0de5334d217408d9">lowp_dmat4x4</a>;</div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  </div>
+<div class="line"><a name="l00672"></a><span class="lineno"><a class="line" href="a00158.html#ga857947b2eef2c9144c34b8e3031f2f12"> 672</a></span>  <span class="keyword">typedef</span> tmat4x4<double, mediump> <a class="code" href="a00158.html#ga857947b2eef2c9144c34b8e3031f2f12">mediump_dmat4x4</a>;</div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span>  </div>
+<div class="line"><a name="l00678"></a><span class="lineno"><a class="line" href="a00158.html#ga83ab0b8b8b50cbf945237dc8f5322432"> 678</a></span>  <span class="keyword">typedef</span> tmat4x4<double, highp> <a class="code" href="a00158.html#ga83ab0b8b8b50cbf945237dc8f5322432">highp_dmat4x4</a>;</div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  </div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  </div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span> <span class="preprocessor">#if(defined(GLM_PRECISION_LOWP_DOUBLE))</span></div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  <span class="keyword">typedef</span> lowp_dmat2x2 <a class="code" href="a00157.html#gacc27b39853a2ecb538c8b3afc20c359e">dmat2x2</a>;</div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  <span class="keyword">typedef</span> lowp_dmat2x3 <a class="code" href="a00157.html#ga1cb3c561a32f0864733dfaf97c71f0c7">dmat2x3</a>;</div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span>  <span class="keyword">typedef</span> lowp_dmat2x4 <a class="code" href="a00157.html#gaddd230c88fbd6ec33242329be3a1b738">dmat2x4</a>;</div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  <span class="keyword">typedef</span> lowp_dmat3x2 <a class="code" href="a00157.html#gaec22f44dddbdadfe5dfca68eb3457ea8">dmat3x2</a>;</div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  <span class="keyword">typedef</span> lowp_dmat3x3 <a class="code" href="a00157.html#gac44263f56ff3cbf0a9cc4e2405d5ecb8">dmat3x3</a>;</div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  <span class="keyword">typedef</span> lowp_dmat3x4 <a class="code" href="a00157.html#ga38d9bfca882ec542b1928cf77b5c2091">dmat3x4</a>;</div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span>  <span class="keyword">typedef</span> lowp_dmat4x2 <a class="code" href="a00157.html#ga6ddab280c735a2139133b4164b99a68a">dmat4x2</a>;</div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span>  <span class="keyword">typedef</span> lowp_dmat4x3 <a class="code" href="a00157.html#gab6c8974496fc7c72dad09219118ba89e">dmat4x3</a>;</div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span>  <span class="keyword">typedef</span> lowp_dmat4x4 <a class="code" href="a00157.html#ga41c2da87ca627c1b2da5e895435a508e">dmat4x4</a>;</div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span> <span class="preprocessor">#elif(defined(GLM_PRECISION_MEDIUMP_DOUBLE))</span></div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span>  <span class="keyword">typedef</span> mediump_dmat2x2 <a class="code" href="a00157.html#gacc27b39853a2ecb538c8b3afc20c359e">dmat2x2</a>;</div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span>  <span class="keyword">typedef</span> mediump_dmat2x3 <a class="code" href="a00157.html#ga1cb3c561a32f0864733dfaf97c71f0c7">dmat2x3</a>;</div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span>  <span class="keyword">typedef</span> mediump_dmat2x4 <a class="code" href="a00157.html#gaddd230c88fbd6ec33242329be3a1b738">dmat2x4</a>;</div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span>  <span class="keyword">typedef</span> mediump_dmat3x2 <a class="code" href="a00157.html#gaec22f44dddbdadfe5dfca68eb3457ea8">dmat3x2</a>;</div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span>  <span class="keyword">typedef</span> mediump_dmat3x3 <a class="code" href="a00157.html#gac44263f56ff3cbf0a9cc4e2405d5ecb8">dmat3x3</a>;</div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span>  <span class="keyword">typedef</span> mediump_dmat3x4 <a class="code" href="a00157.html#ga38d9bfca882ec542b1928cf77b5c2091">dmat3x4</a>;</div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span>  <span class="keyword">typedef</span> mediump_dmat4x2 <a class="code" href="a00157.html#ga6ddab280c735a2139133b4164b99a68a">dmat4x2</a>;</div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span>  <span class="keyword">typedef</span> mediump_dmat4x3 <a class="code" href="a00157.html#gab6c8974496fc7c72dad09219118ba89e">dmat4x3</a>;</div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span>  <span class="keyword">typedef</span> mediump_dmat4x4 <a class="code" href="a00157.html#ga41c2da87ca627c1b2da5e895435a508e">dmat4x4</a>;</div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span> <span class="preprocessor">#else //defined(GLM_PRECISION_HIGHP_DOUBLE)</span></div>
+<div class="line"><a name="l00703"></a><span class="lineno"> 703</span>  </div>
+<div class="line"><a name="l00707"></a><span class="lineno"><a class="line" href="a00157.html#gac7f51e23c8802d867f564dfd146bdb44"> 707</a></span>  <span class="keyword">typedef</span> highp_dmat2x2 <a class="code" href="a00157.html#gac7f51e23c8802d867f564dfd146bdb44">dmat2</a>;</div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span>  </div>
+<div class="line"><a name="l00712"></a><span class="lineno"><a class="line" href="a00157.html#gae174ff65e148bb7dec4bf10a63cb46ff"> 712</a></span>  <span class="keyword">typedef</span> highp_dmat3x3 <a class="code" href="a00157.html#gae174ff65e148bb7dec4bf10a63cb46ff">dmat3</a>;</div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span>  </div>
+<div class="line"><a name="l00717"></a><span class="lineno"><a class="line" href="a00157.html#ga97b38ea24e9ebf58eac04a8d99dc3e27"> 717</a></span>  <span class="keyword">typedef</span> highp_dmat4x4 <a class="code" href="a00157.html#ga97b38ea24e9ebf58eac04a8d99dc3e27">dmat4</a>;</div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span>  </div>
+<div class="line"><a name="l00722"></a><span class="lineno"><a class="line" href="a00157.html#gacc27b39853a2ecb538c8b3afc20c359e"> 722</a></span>  <span class="keyword">typedef</span> highp_dmat2x2 <a class="code" href="a00157.html#gacc27b39853a2ecb538c8b3afc20c359e">dmat2x2</a>;</div>
+<div class="line"><a name="l00723"></a><span class="lineno"> 723</span>  </div>
+<div class="line"><a name="l00727"></a><span class="lineno"><a class="line" href="a00157.html#ga1cb3c561a32f0864733dfaf97c71f0c7"> 727</a></span>  <span class="keyword">typedef</span> highp_dmat2x3 <a class="code" href="a00157.html#ga1cb3c561a32f0864733dfaf97c71f0c7">dmat2x3</a>;</div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span>  </div>
+<div class="line"><a name="l00732"></a><span class="lineno"><a class="line" href="a00157.html#gaddd230c88fbd6ec33242329be3a1b738"> 732</a></span>  <span class="keyword">typedef</span> highp_dmat2x4 <a class="code" href="a00157.html#gaddd230c88fbd6ec33242329be3a1b738">dmat2x4</a>;</div>
+<div class="line"><a name="l00733"></a><span class="lineno"> 733</span>  </div>
+<div class="line"><a name="l00737"></a><span class="lineno"><a class="line" href="a00157.html#gaec22f44dddbdadfe5dfca68eb3457ea8"> 737</a></span>  <span class="keyword">typedef</span> highp_dmat3x2 <a class="code" href="a00157.html#gaec22f44dddbdadfe5dfca68eb3457ea8">dmat3x2</a>;</div>
+<div class="line"><a name="l00738"></a><span class="lineno"> 738</span>  </div>
+<div class="line"><a name="l00742"></a><span class="lineno"><a class="line" href="a00157.html#gac44263f56ff3cbf0a9cc4e2405d5ecb8"> 742</a></span>  <span class="keyword">typedef</span> highp_dmat3x3 <a class="code" href="a00157.html#gac44263f56ff3cbf0a9cc4e2405d5ecb8">dmat3x3</a>;</div>
+<div class="line"><a name="l00743"></a><span class="lineno"> 743</span>  </div>
+<div class="line"><a name="l00747"></a><span class="lineno"><a class="line" href="a00157.html#ga38d9bfca882ec542b1928cf77b5c2091"> 747</a></span>  <span class="keyword">typedef</span> highp_dmat3x4 <a class="code" href="a00157.html#ga38d9bfca882ec542b1928cf77b5c2091">dmat3x4</a>;</div>
+<div class="line"><a name="l00748"></a><span class="lineno"> 748</span>  </div>
+<div class="line"><a name="l00752"></a><span class="lineno"><a class="line" href="a00157.html#ga6ddab280c735a2139133b4164b99a68a"> 752</a></span>  <span class="keyword">typedef</span> highp_dmat4x2 <a class="code" href="a00157.html#ga6ddab280c735a2139133b4164b99a68a">dmat4x2</a>;</div>
+<div class="line"><a name="l00753"></a><span class="lineno"> 753</span>  </div>
+<div class="line"><a name="l00757"></a><span class="lineno"><a class="line" href="a00157.html#gab6c8974496fc7c72dad09219118ba89e"> 757</a></span>  <span class="keyword">typedef</span> highp_dmat4x3 <a class="code" href="a00157.html#gab6c8974496fc7c72dad09219118ba89e">dmat4x3</a>;</div>
+<div class="line"><a name="l00758"></a><span class="lineno"> 758</span>  </div>
+<div class="line"><a name="l00762"></a><span class="lineno"><a class="line" href="a00157.html#ga41c2da87ca627c1b2da5e895435a508e"> 762</a></span>  <span class="keyword">typedef</span> highp_dmat4x4 <a class="code" href="a00157.html#ga41c2da87ca627c1b2da5e895435a508e">dmat4x4</a>;</div>
+<div class="line"><a name="l00763"></a><span class="lineno"> 763</span> </div>
+<div class="line"><a name="l00764"></a><span class="lineno"> 764</span> <span class="preprocessor">#endif//GLM_PRECISION</span></div>
+<div class="line"><a name="l00765"></a><span class="lineno"> 765</span>  </div>
+<div class="line"><a name="l00767"></a><span class="lineno"> 767</span> }<span class="comment">//namespace glm</span></div>
+<div class="ttc" id="a00158_html_ga2d7911a43241a5ce2472421255e5930f"><div class="ttname"><a href="a00158.html#ga2d7911a43241a5ce2472421255e5930f">glm::highp_dmat3x3</a></div><div class="ttdeci">tmat3x3< double, highp > highp_dmat3x3</div><div class="ttdoc">3 columns of 3 components matrix of high precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00568">type_mat.hpp:568</a></div></div>
+<div class="ttc" id="a00158_html_ga535614d97234065ab44b2513667c8563"><div class="ttname"><a href="a00158.html#ga535614d97234065ab44b2513667c8563">glm::mediump_mat4x4</a></div><div class="ttdeci">tmat4x4< float, mediump > mediump_mat4x4</div><div class="ttdoc">4 columns of 4 components matrix of medium precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00318">type_mat.hpp:318</a></div></div>
+<div class="ttc" id="a00158_html_ga5ee028f50629bf451973b3a910973357"><div class="ttname"><a href="a00158.html#ga5ee028f50629bf451973b3a910973357">glm::highp_dmat4x2</a></div><div class="ttdeci">tmat4x2< double, highp > highp_dmat4x2</div><div class="ttdoc">4 columns of 2 components matrix of high precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00614">type_mat.hpp:614</a></div></div>
+<div class="ttc" id="a00158_html_gac6d04a9590cb7ab62cbe29203dbb9b93"><div class="ttname"><a href="a00158.html#gac6d04a9590cb7ab62cbe29203dbb9b93">glm::lowp_mat4x2</a></div><div class="ttdeci">tmat4x2< float, lowp > lowp_mat4x2</div><div class="ttdoc">4 columns of 2 components matrix of low precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00237">type_mat.hpp:237</a></div></div>
+<div class="ttc" id="a00158_html_ga046e59c57aaa185a8b0b012164ce707f"><div class="ttname"><a href="a00158.html#ga046e59c57aaa185a8b0b012164ce707f">glm::highp_mat4x3</a></div><div class="ttdeci">tmat4x3< float, highp > highp_mat4x3</div><div class="ttdoc">4 columns of 3 components matrix of high precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00277">type_mat.hpp:277</a></div></div>
+<div class="ttc" id="a00158_html_gaeea75c96b308be4114e0badf49f58075"><div class="ttname"><a href="a00158.html#gaeea75c96b308be4114e0badf49f58075">glm::highp_mat4x2</a></div><div class="ttdeci">tmat4x2< float, highp > highp_mat4x2</div><div class="ttdoc">4 columns of 2 components matrix of high precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00251">type_mat.hpp:251</a></div></div>
+<div class="ttc" id="a00158_html_gafff11cbd0abc762e8a340870a31d5bfa"><div class="ttname"><a href="a00158.html#gafff11cbd0abc762e8a340870a31d5bfa">glm::lowp_mat4x4</a></div><div class="ttdeci">tmat4x4< float, lowp > lowp_mat4x4</div><div class="ttdoc">4 columns of 4 components matrix of low precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00311">type_mat.hpp:311</a></div></div>
+<div class="ttc" id="a00158_html_gaac3aee10bee5fa5206de8bf024a8b301"><div class="ttname"><a href="a00158.html#gaac3aee10bee5fa5206de8bf024a8b301">glm::lowp_dmat4</a></div><div class="ttdeci">tmat4x4< double, lowp > lowp_dmat4</div><div class="ttdoc">4 columns of 4 components matrix of low precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00648">type_mat.hpp:648</a></div></div>
+<div class="ttc" id="a00158_html_gab7ca36023fa56d8006341a192ee09260"><div class="ttname"><a href="a00158.html#gab7ca36023fa56d8006341a192ee09260">glm::lowp_mat3x3</a></div><div class="ttdeci">tmat3x3< float, lowp > lowp_mat3x3</div><div class="ttdoc">3 columns of 3 components matrix of low precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00185">type_mat.hpp:185</a></div></div>
+<div class="ttc" id="a00158_html_ga57b1e6c49a1432cefa518f13a56c5d47"><div class="ttname"><a href="a00158.html#ga57b1e6c49a1432cefa518f13a56c5d47">glm::mediump_mat2</a></div><div class="ttdeci">tmat2x2< float, mediump > mediump_mat2</div><div class="ttdoc">2 columns of 2 components matrix of medium precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00046">type_mat.hpp:46</a></div></div>
+<div class="ttc" id="a00157_html_ga4d2ac1a80c36fb5a1d15914035f792ac"><div class="ttname"><a href="a00157.html#ga4d2ac1a80c36fb5a1d15914035f792ac">glm::mat2x4</a></div><div class="ttdeci">highp_mat2x4 mat2x4</div><div class="ttdoc">2 columns of 4 components matrix of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00369">type_mat.hpp:369</a></div></div>
+<div class="ttc" id="a00158_html_ga000c064e4eba15bf83f8e1e393a8e7fd"><div class="ttname"><a href="a00158.html#ga000c064e4eba15bf83f8e1e393a8e7fd">glm::lowp_dmat2x2</a></div><div class="ttdeci">tmat2x2< double, lowp > lowp_dmat2x2</div><div class="ttdoc">2 columns of 2 components matrix of low precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00446">type_mat.hpp:446</a></div></div>
+<div class="ttc" id="a00158_html_ga83ab0b8b8b50cbf945237dc8f5322432"><div class="ttname"><a href="a00158.html#ga83ab0b8b8b50cbf945237dc8f5322432">glm::highp_dmat4x4</a></div><div class="ttdeci">tmat4x4< double, highp > highp_dmat4x4</div><div class="ttdoc">4 columns of 4 components matrix of high precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00678">type_mat.hpp:678</a></div></div>
+<div class="ttc" id="a00158_html_ga27be34d618d20fbd70d4c62c21256b0c"><div class="ttname"><a href="a00158.html#ga27be34d618d20fbd70d4c62c21256b0c">glm::mediump_dmat4</a></div><div class="ttdeci">tmat4x4< double, mediump > mediump_dmat4</div><div class="ttdoc">4 columns of 4 components matrix of medium precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00654">type_mat.hpp:654</a></div></div>
+<div class="ttc" id="a00157_html_gac7f51e23c8802d867f564dfd146bdb44"><div class="ttname"><a href="a00157.html#gac7f51e23c8802d867f564dfd146bdb44">glm::dmat2</a></div><div class="ttdeci">highp_dmat2x2 dmat2</div><div class="ttdoc">2 * 2 matrix of double-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00707">type_mat.hpp:707</a></div></div>
+<div class="ttc" id="a00157_html_ga0c84b211a5730357b63c6d2e4fb696d5"><div class="ttname"><a href="a00157.html#ga0c84b211a5730357b63c6d2e4fb696d5">glm::mat2x2</a></div><div class="ttdeci">highp_mat2x2 mat2x2</div><div class="ttdoc">2 columns of 2 components matrix of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00359">type_mat.hpp:359</a></div></div>
+<div class="ttc" id="a00157_html_ga6e30cfba068ebc3c71fe1f8b3110e450"><div class="ttname"><a href="a00157.html#ga6e30cfba068ebc3c71fe1f8b3110e450">glm::mat2</a></div><div class="ttdeci">mat2x2 mat2</div><div class="ttdoc">2 columns of 2 components matrix of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00406">type_mat.hpp:406</a></div></div>
+<div class="ttc" id="a00158_html_ga330077a4cb3707329120b5bddcd7db2d"><div class="ttname"><a href="a00158.html#ga330077a4cb3707329120b5bddcd7db2d">glm::mediump_dmat2</a></div><div class="ttdeci">tmat2x2< double, mediump > mediump_dmat2</div><div class="ttdoc">2 columns of 2 components matrix of medium precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00434">type_mat.hpp:434</a></div></div>
+<div class="ttc" id="a00158_html_ga8ed94bfb5f4e0b2c3b0d49c5be478c85"><div class="ttname"><a href="a00158.html#ga8ed94bfb5f4e0b2c3b0d49c5be478c85">glm::lowp_mat2</a></div><div class="ttdeci">tmat2x2< float, lowp > lowp_mat2</div><div class="ttdoc">2 columns of 2 components matrix of low precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00039">type_mat.hpp:39</a></div></div>
+<div class="ttc" id="a00157_html_gafb063d734266e92915d87f8943560471"><div class="ttname"><a href="a00157.html#gafb063d734266e92915d87f8943560471">glm::mat2x3</a></div><div class="ttdeci">highp_mat2x3 mat2x3</div><div class="ttdoc">2 columns of 3 components matrix of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00364">type_mat.hpp:364</a></div></div>
+<div class="ttc" id="a00157_html_ga6ddab280c735a2139133b4164b99a68a"><div class="ttname"><a href="a00157.html#ga6ddab280c735a2139133b4164b99a68a">glm::dmat4x2</a></div><div class="ttdeci">highp_dmat4x2 dmat4x2</div><div class="ttdoc">4 * 2 matrix of double-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00752">type_mat.hpp:752</a></div></div>
+<div class="ttc" id="a00158_html_ga65ae7d3b23155712ed8cbd3300be4ec8"><div class="ttname"><a href="a00158.html#ga65ae7d3b23155712ed8cbd3300be4ec8">glm::highp_dmat2</a></div><div class="ttdeci">tmat2x2< double, highp > highp_dmat2</div><div class="ttdoc">2 columns of 2 components matrix of high precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00440">type_mat.hpp:440</a></div></div>
+<div class="ttc" id="a00157_html_ga3839ca29d011a80ff3ede7f22ba602a4"><div class="ttname"><a href="a00157.html#ga3839ca29d011a80ff3ede7f22ba602a4">glm::mat3x2</a></div><div class="ttdeci">highp_mat3x2 mat3x2</div><div class="ttdoc">3 columns of 2 components matrix of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00374">type_mat.hpp:374</a></div></div>
+<div class="ttc" id="a00157_html_ga7876e0c3e3fcc3e2f4c0462c152e87cf"><div class="ttname"><a href="a00157.html#ga7876e0c3e3fcc3e2f4c0462c152e87cf">glm::mat3x4</a></div><div class="ttdeci">highp_mat3x4 mat3x4</div><div class="ttdoc">3 columns of 4 components matrix of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00384">type_mat.hpp:384</a></div></div>
+<div class="ttc" id="a00158_html_gaac1bde847d053902c27bad811b76e9fd"><div class="ttname"><a href="a00158.html#gaac1bde847d053902c27bad811b76e9fd">glm::highp_mat3</a></div><div class="ttdeci">tmat3x3< float, highp > highp_mat3</div><div class="ttdoc">3 columns of 3 components matrix of high precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00178">type_mat.hpp:178</a></div></div>
+<div class="ttc" id="a00157_html_gacc27b39853a2ecb538c8b3afc20c359e"><div class="ttname"><a href="a00157.html#gacc27b39853a2ecb538c8b3afc20c359e">glm::dmat2x2</a></div><div class="ttdeci">highp_dmat2x2 dmat2x2</div><div class="ttdoc">2 * 2 matrix of double-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00722">type_mat.hpp:722</a></div></div>
+<div class="ttc" id="a00157_html_ga6dd3ec98a548755676267e59142911f8"><div class="ttname"><a href="a00157.html#ga6dd3ec98a548755676267e59142911f8">glm::mat3</a></div><div class="ttdeci">mat3x3 mat3</div><div class="ttdoc">3 columns of 3 components matrix of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00411">type_mat.hpp:411</a></div></div>
+<div class="ttc" id="a00158_html_ga38a01cba69e3db9b1a1056b362519acb"><div class="ttname"><a href="a00158.html#ga38a01cba69e3db9b1a1056b362519acb">glm::mediump_mat4x3</a></div><div class="ttdeci">tmat4x3< float, mediump > mediump_mat4x3</div><div class="ttdoc">4 columns of 3 components matrix of medium precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00270">type_mat.hpp:270</a></div></div>
+<div class="ttc" id="a00158_html_gae0a526a0143fc69d7b317c078d591654"><div class="ttname"><a href="a00158.html#gae0a526a0143fc69d7b317c078d591654">glm::lowp_dmat2</a></div><div class="ttdeci">tmat2x2< double, lowp > lowp_dmat2</div><div class="ttdoc">2 columns of 2 components matrix of low precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00428">type_mat.hpp:428</a></div></div>
+<div class="ttc" id="a00158_html_gabace1eeb2fac7d73a7faaecf33f352d0"><div class="ttname"><a href="a00158.html#gabace1eeb2fac7d73a7faaecf33f352d0">glm::highp_mat4</a></div><div class="ttdeci">tmat4x4< float, highp > highp_mat4</div><div class="ttdoc">4 columns of 4 components matrix of high precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00304">type_mat.hpp:304</a></div></div>
+<div class="ttc" id="a00158_html_ga22194c68bc3d798bb68a22f635558c8d"><div class="ttname"><a href="a00158.html#ga22194c68bc3d798bb68a22f635558c8d">glm::mediump_mat4x2</a></div><div class="ttdeci">tmat4x2< float, mediump > mediump_mat4x2</div><div class="ttdoc">4 columns of 2 components matrix of medium precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00244">type_mat.hpp:244</a></div></div>
+<div class="ttc" id="a00158_html_ga117d8a040e738396a3d60368605623d2"><div class="ttname"><a href="a00158.html#ga117d8a040e738396a3d60368605623d2">glm::highp_mat3x4</a></div><div class="ttdeci">tmat3x4< float, highp > highp_mat3x4</div><div class="ttdoc">3 columns of 4 components matrix of high precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00225">type_mat.hpp:225</a></div></div>
+<div class="ttc" id="a00158_html_ga27b55deeb16fda7262d64dc1fd1a56bc"><div class="ttname"><a href="a00158.html#ga27b55deeb16fda7262d64dc1fd1a56bc">glm::mediump_dmat4x3</a></div><div class="ttdeci">tmat4x3< double, mediump > mediump_dmat4x3</div><div class="ttdoc">4 columns of 3 components matrix of medium precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00631">type_mat.hpp:631</a></div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00158_html_ga51bfd2f3f5a12464d5934323db9116e7"><div class="ttname"><a href="a00158.html#ga51bfd2f3f5a12464d5934323db9116e7">glm::highp_dmat3x4</a></div><div class="ttdeci">tmat3x4< double, highp > highp_dmat3x4</div><div class="ttdoc">3 columns of 4 components matrix of high precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00591">type_mat.hpp:591</a></div></div>
+<div class="ttc" id="a00158_html_ga2569a68be3f1cf56e7e5e0920fe5a246"><div class="ttname"><a href="a00158.html#ga2569a68be3f1cf56e7e5e0920fe5a246">glm::mediump_dmat2x3</a></div><div class="ttdeci">tmat2x3< double, mediump > mediump_dmat2x3</div><div class="ttdoc">2 columns of 3 components matrix of medium precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00475">type_mat.hpp:475</a></div></div>
+<div class="ttc" id="a00157_html_ga1cb3c561a32f0864733dfaf97c71f0c7"><div class="ttname"><a href="a00157.html#ga1cb3c561a32f0864733dfaf97c71f0c7">glm::dmat2x3</a></div><div class="ttdeci">highp_dmat2x3 dmat2x3</div><div class="ttdoc">2 * 3 matrix of double-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00727">type_mat.hpp:727</a></div></div>
+<div class="ttc" id="a00150_html_gaa7e1d5586cd499126cec76e0f11871e3"><div class="ttname"><a href="a00150.html#gaa7e1d5586cd499126cec76e0f11871e3">glm::inverse</a></div><div class="ttdeci">GLM_FUNC_DECL matType< T, P > inverse(matType< T, P > const &m)</div><div class="ttdoc">Return the inverse of a squared matrix. </div></div>
+<div class="ttc" id="a00158_html_gad64a0179b75508142a72917854034b9b"><div class="ttname"><a href="a00158.html#gad64a0179b75508142a72917854034b9b">glm::lowp_mat2x4</a></div><div class="ttdeci">tmat2x4< float, lowp > lowp_mat2x4</div><div class="ttdoc">2 columns of 4 components matrix of low precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00112">type_mat.hpp:112</a></div></div>
+<div class="ttc" id="a00157_html_gade0eb47c01f79384a6f38017ede17446"><div class="ttname"><a href="a00157.html#gade0eb47c01f79384a6f38017ede17446">glm::mat4</a></div><div class="ttdeci">mat4x4 mat4</div><div class="ttdoc">4 columns of 4 components matrix of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00416">type_mat.hpp:416</a></div></div>
+<div class="ttc" id="a00158_html_gae6a747cfc33928652abcb1347712b231"><div class="ttname"><a href="a00158.html#gae6a747cfc33928652abcb1347712b231">glm::highp_mat2x2</a></div><div class="ttdeci">tmat2x2< float, highp > highp_mat2x2</div><div class="ttdoc">2 columns of 2 components matrix of high precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00074">type_mat.hpp:74</a></div></div>
+<div class="ttc" id="a00158_html_ga187d10ddab0492545b78ea1dd108f28d"><div class="ttname"><a href="a00158.html#ga187d10ddab0492545b78ea1dd108f28d">glm::mediump_dmat3x4</a></div><div class="ttdeci">tmat3x4< double, mediump > mediump_dmat3x4</div><div class="ttdoc">3 columns of 4 components matrix of medium precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00585">type_mat.hpp:585</a></div></div>
+<div class="ttc" id="a00158_html_ga518f28c64881fafaaf14ec0d867a9bba"><div class="ttname"><a href="a00158.html#ga518f28c64881fafaaf14ec0d867a9bba">glm::highp_dmat2x2</a></div><div class="ttdeci">tmat2x2< double, highp > highp_dmat2x2</div><div class="ttdoc">2 columns of 2 components matrix of high precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00458">type_mat.hpp:458</a></div></div>
+<div class="ttc" id="a00158_html_ga2b5b1b810f3b9988f49f985387e35e03"><div class="ttname"><a href="a00158.html#ga2b5b1b810f3b9988f49f985387e35e03">glm::lowp_dmat4x3</a></div><div class="ttdeci">tmat4x3< double, lowp > lowp_dmat4x3</div><div class="ttdoc">4 columns of 3 components matrix of low precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00625">type_mat.hpp:625</a></div></div>
+<div class="ttc" id="a00158_html_ga9fa569295a9bd6ce0825ccb832c8aac9"><div class="ttname"><a href="a00158.html#ga9fa569295a9bd6ce0825ccb832c8aac9">glm::mediump_mat3x2</a></div><div class="ttdeci">tmat3x2< float, mediump > mediump_mat3x2</div><div class="ttdoc">3 columns of 2 components matrix of medium precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00145">type_mat.hpp:145</a></div></div>
+<div class="ttc" id="a00157_html_ga089315d5a0c20ac6eaa17a854bbd2e81"><div class="ttname"><a href="a00157.html#ga089315d5a0c20ac6eaa17a854bbd2e81">glm::mat4x4</a></div><div class="ttdeci">highp_mat4x4 mat4x4</div><div class="ttdoc">4 columns of 4 components matrix of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00399">type_mat.hpp:399</a></div></div>
+<div class="ttc" id="a00158_html_ga2938621d14e70bc3dc576b4fc1547a7e"><div class="ttname"><a href="a00158.html#ga2938621d14e70bc3dc576b4fc1547a7e">glm::lowp_mat3x4</a></div><div class="ttdeci">tmat3x4< float, lowp > lowp_mat3x4</div><div class="ttdoc">3 columns of 4 components matrix of low precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00211">type_mat.hpp:211</a></div></div>
+<div class="ttc" id="a00157_html_gaec22f44dddbdadfe5dfca68eb3457ea8"><div class="ttname"><a href="a00157.html#gaec22f44dddbdadfe5dfca68eb3457ea8">glm::dmat3x2</a></div><div class="ttdeci">highp_dmat3x2 dmat3x2</div><div class="ttdoc">3 * 2 matrix of double-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00737">type_mat.hpp:737</a></div></div>
+<div class="ttc" id="a00158_html_ga19b0c9580b447443cf3fe589bd661e03"><div class="ttname"><a href="a00158.html#ga19b0c9580b447443cf3fe589bd661e03">glm::lowp_dmat3</a></div><div class="ttdeci">tmat3x3< float, lowp > lowp_dmat3</div><div class="ttdoc">3 columns of 3 components matrix of low precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00538">type_mat.hpp:538</a></div></div>
+<div class="ttc" id="a00158_html_gaaf2d7cf98b74a43fc432725887685dc0"><div class="ttname"><a href="a00158.html#gaaf2d7cf98b74a43fc432725887685dc0">glm::lowp_dmat2x3</a></div><div class="ttdeci">tmat2x3< double, lowp > lowp_dmat2x3</div><div class="ttdoc">2 columns of 3 components matrix of low precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00469">type_mat.hpp:469</a></div></div>
+<div class="ttc" id="a00158_html_ga8091edef9fdf54b1996ae5bd00f847e5"><div class="ttname"><a href="a00158.html#ga8091edef9fdf54b1996ae5bd00f847e5">glm::mediump_dmat3</a></div><div class="ttdeci">tmat3x3< double, mediump > mediump_dmat3</div><div class="ttdoc">3 columns of 3 components matrix of medium precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00544">type_mat.hpp:544</a></div></div>
+<div class="ttc" id="a00158_html_gabb754302a1ff8736ec7814d860c9a3c0"><div class="ttname"><a href="a00158.html#gabb754302a1ff8736ec7814d860c9a3c0">glm::lowp_mat4</a></div><div class="ttdeci">tmat4x4< float, lowp > lowp_mat4</div><div class="ttdoc">4 columns of 4 components matrix of low precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00290">type_mat.hpp:290</a></div></div>
+<div class="ttc" id="a00158_html_gac7afc5b81d320dbd7bd6a6f07d587e24"><div class="ttname"><a href="a00158.html#gac7afc5b81d320dbd7bd6a6f07d587e24">glm::mediump_mat3x4</a></div><div class="ttdeci">tmat3x4< float, mediump > mediump_mat3x4</div><div class="ttdoc">3 columns of 4 components matrix of medium precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00218">type_mat.hpp:218</a></div></div>
+<div class="ttc" id="a00158_html_ga6b00cd7956ac2ee3d4f3ab3b549b564a"><div class="ttname"><a href="a00158.html#ga6b00cd7956ac2ee3d4f3ab3b549b564a">glm::highp_mat3x2</a></div><div class="ttdeci">tmat3x2< float, highp > highp_mat3x2</div><div class="ttdoc">3 columns of 2 components matrix of high precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00152">type_mat.hpp:152</a></div></div>
+<div class="ttc" id="a00158_html_ga6b81830ed1ce3862bcbbf41eccc3890b"><div class="ttname"><a href="a00158.html#ga6b81830ed1ce3862bcbbf41eccc3890b">glm::mediump_dmat3x2</a></div><div class="ttdeci">tmat3x2< double, mediump > mediump_dmat3x2</div><div class="ttdoc">3 columns of 2 components matrix of medium precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00521">type_mat.hpp:521</a></div></div>
+<div class="ttc" id="a00158_html_ga4607e33c40a3c03256e0bf9c586b456a"><div class="ttname"><a href="a00158.html#ga4607e33c40a3c03256e0bf9c586b456a">glm::highp_dmat4</a></div><div class="ttdeci">tmat4x4< double, highp > highp_dmat4</div><div class="ttdoc">4 columns of 4 components matrix of high precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00660">type_mat.hpp:660</a></div></div>
+<div class="ttc" id="a00158_html_ga8ac69e9ed1addf122f51396f73cdbbf3"><div class="ttname"><a href="a00158.html#ga8ac69e9ed1addf122f51396f73cdbbf3">glm::lowp_dmat2x4</a></div><div class="ttdeci">tmat2x4< double, lowp > lowp_dmat2x4</div><div class="ttdoc">2 columns of 4 components matrix of low precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00492">type_mat.hpp:492</a></div></div>
+<div class="ttc" id="a00158_html_ga29d313adfc82fd4179d29a9fd98b1b5b"><div class="ttname"><a href="a00158.html#ga29d313adfc82fd4179d29a9fd98b1b5b">glm::mediump_mat3</a></div><div class="ttdeci">tmat3x3< float, mediump > mediump_mat3</div><div class="ttdoc">3 columns of 3 components matrix of medium precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00171">type_mat.hpp:171</a></div></div>
+<div class="ttc" id="a00158_html_gaccf963b117beeadf8c5c057000762dd3"><div class="ttname"><a href="a00158.html#gaccf963b117beeadf8c5c057000762dd3">glm::mediump_dmat2x4</a></div><div class="ttdeci">tmat2x4< double, mediump > mediump_dmat2x4</div><div class="ttdoc">2 columns of 4 components matrix of medium precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00498">type_mat.hpp:498</a></div></div>
+<div class="ttc" id="a00158_html_ga1b77963ca2812ac2653624fa0f81ba74"><div class="ttname"><a href="a00158.html#ga1b77963ca2812ac2653624fa0f81ba74">glm::mediump_mat2x2</a></div><div class="ttdeci">tmat2x2< float, mediump > mediump_mat2x2</div><div class="ttdoc">2 columns of 2 components matrix of medium precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00067">type_mat.hpp:67</a></div></div>
+<div class="ttc" id="a00158_html_gab1a0d4d8fd3bb85f6616dac9dbef2981"><div class="ttname"><a href="a00158.html#gab1a0d4d8fd3bb85f6616dac9dbef2981">glm::lowp_mat2x2</a></div><div class="ttdeci">tmat2x2< float, lowp > lowp_mat2x2</div><div class="ttdoc">2 columns of 2 components matrix of low precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00060">type_mat.hpp:60</a></div></div>
+<div class="ttc" id="a00157_html_ga41c2da87ca627c1b2da5e895435a508e"><div class="ttname"><a href="a00157.html#ga41c2da87ca627c1b2da5e895435a508e">glm::dmat4x4</a></div><div class="ttdeci">highp_dmat4x4 dmat4x4</div><div class="ttdoc">4 * 4 matrix of double-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00762">type_mat.hpp:762</a></div></div>
+<div class="ttc" id="a00158_html_gae8fe30d421bc141fa84ad414b803947d"><div class="ttname"><a href="a00158.html#gae8fe30d421bc141fa84ad414b803947d">glm::lowp_mat2x3</a></div><div class="ttdeci">tmat2x3< float, lowp > lowp_mat2x3</div><div class="ttdoc">2 columns of 3 components matrix of low precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00086">type_mat.hpp:86</a></div></div>
+<div class="ttc" id="a00158_html_gaa72822d91f0dceb4dcaaec550cbfeead"><div class="ttname"><a href="a00158.html#gaa72822d91f0dceb4dcaaec550cbfeead">glm::highp_mat4x4</a></div><div class="ttdeci">tmat4x4< float, highp > highp_mat4x4</div><div class="ttdoc">4 columns of 4 components matrix of high precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00325">type_mat.hpp:325</a></div></div>
+<div class="ttc" id="a00157_html_gab6c8974496fc7c72dad09219118ba89e"><div class="ttname"><a href="a00157.html#gab6c8974496fc7c72dad09219118ba89e">glm::dmat4x3</a></div><div class="ttdeci">highp_dmat4x3 dmat4x3</div><div class="ttdoc">4 * 3 matrix of double-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00757">type_mat.hpp:757</a></div></div>
+<div class="ttc" id="a00158_html_ga5e5de055b7af150796e1c017de84cdb1"><div class="ttname"><a href="a00158.html#ga5e5de055b7af150796e1c017de84cdb1">glm::mediump_dmat3x3</a></div><div class="ttdeci">tmat3x3< double, mediump > mediump_dmat3x3</div><div class="ttdoc">3 columns of 3 components matrix of medium precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00562">type_mat.hpp:562</a></div></div>
+<div class="ttc" id="a00157_html_ga1b3f6a5cbc17362141f9781262ed838f"><div class="ttname"><a href="a00157.html#ga1b3f6a5cbc17362141f9781262ed838f">glm::mat4x2</a></div><div class="ttdeci">highp_mat4x2 mat4x2</div><div class="ttdoc">4 columns of 2 components matrix of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00389">type_mat.hpp:389</a></div></div>
+<div class="ttc" id="a00158_html_ga6259813853e4253f80c2a08672e9fb6a"><div class="ttname"><a href="a00158.html#ga6259813853e4253f80c2a08672e9fb6a">glm::mediump_mat4</a></div><div class="ttdeci">tmat4x4< float, mediump > mediump_mat4</div><div class="ttdoc">4 columns of 4 components matrix of medium precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00297">type_mat.hpp:297</a></div></div>
+<div class="ttc" id="a00158_html_ga05c2d27aeca091e369fca027e72177e8"><div class="ttname"><a href="a00158.html#ga05c2d27aeca091e369fca027e72177e8">glm::lowp_dmat4x2</a></div><div class="ttdeci">tmat4x2< double, lowp > lowp_dmat4x2</div><div class="ttdoc">4 columns of 2 components matrix of low precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00602">type_mat.hpp:602</a></div></div>
+<div class="ttc" id="a00158_html_gad4a5b294c54702b7c8e9ee32a451dea9"><div class="ttname"><a href="a00158.html#gad4a5b294c54702b7c8e9ee32a451dea9">glm::mediump_dmat4x2</a></div><div class="ttdeci">tmat4x2< double, mediump > mediump_dmat4x2</div><div class="ttdoc">4 columns of 2 components matrix of medium precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00608">type_mat.hpp:608</a></div></div>
+<div class="ttc" id="a00158_html_ga857947b2eef2c9144c34b8e3031f2f12"><div class="ttname"><a href="a00158.html#ga857947b2eef2c9144c34b8e3031f2f12">glm::mediump_dmat4x4</a></div><div class="ttdeci">tmat4x4< double, mediump > mediump_dmat4x4</div><div class="ttdoc">4 columns of 4 components matrix of medium precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00672">type_mat.hpp:672</a></div></div>
+<div class="ttc" id="a00158_html_ga8c17198123baf6bfb59582ec42a3ca09"><div class="ttname"><a href="a00158.html#ga8c17198123baf6bfb59582ec42a3ca09">glm::mediump_mat2x3</a></div><div class="ttdeci">tmat2x3< float, mediump > mediump_mat2x3</div><div class="ttdoc">2 columns of 3 components matrix of medium precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00093">type_mat.hpp:93</a></div></div>
+<div class="ttc" id="a00158_html_ga78987759d40d7cb03ebe948fb1dcd879"><div class="ttname"><a href="a00158.html#ga78987759d40d7cb03ebe948fb1dcd879">glm::mediump_dmat2x2</a></div><div class="ttdeci">tmat2x2< double, mediump > mediump_dmat2x2</div><div class="ttdoc">2 columns of 2 components matrix of medium precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00452">type_mat.hpp:452</a></div></div>
+<div class="ttc" id="a00158_html_gafe7eea5b2a20477b5634e340ea5ec28a"><div class="ttname"><a href="a00158.html#gafe7eea5b2a20477b5634e340ea5ec28a">glm::highp_dmat4x3</a></div><div class="ttdeci">tmat4x3< double, highp > highp_dmat4x3</div><div class="ttdoc">4 columns of 3 components matrix of high precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00637">type_mat.hpp:637</a></div></div>
+<div class="ttc" id="a00157_html_ga378921b6a07bcdad946858b340f69ab1"><div class="ttname"><a href="a00157.html#ga378921b6a07bcdad946858b340f69ab1">glm::mat3x3</a></div><div class="ttdeci">highp_mat3x3 mat3x3</div><div class="ttdoc">3 columns of 3 components matrix of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00379">type_mat.hpp:379</a></div></div>
+<div class="ttc" id="a00158_html_ga605c7863807ac2e9c2db4cf13405f34d"><div class="ttname"><a href="a00158.html#ga605c7863807ac2e9c2db4cf13405f34d">glm::highp_dmat3</a></div><div class="ttdeci">tmat3x3< double, highp > highp_dmat3</div><div class="ttdoc">3 columns of 3 components matrix of high precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00550">type_mat.hpp:550</a></div></div>
+<div class="ttc" id="a00158_html_ga03fe2f9a84c61cc0f08b324a27d9b493"><div class="ttname"><a href="a00158.html#ga03fe2f9a84c61cc0f08b324a27d9b493">glm::highp_mat2x4</a></div><div class="ttdeci">tmat2x4< float, highp > highp_mat2x4</div><div class="ttdoc">2 columns of 4 components matrix of high precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00126">type_mat.hpp:126</a></div></div>
+<div class="ttc" id="a00158_html_gaea9e20c3668305cf0de5334d217408d9"><div class="ttname"><a href="a00158.html#gaea9e20c3668305cf0de5334d217408d9">glm::lowp_dmat4x4</a></div><div class="ttdeci">tmat4x4< double, lowp > lowp_dmat4x4</div><div class="ttdoc">4 columns of 4 components matrix of low precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00666">type_mat.hpp:666</a></div></div>
+<div class="ttc" id="a00158_html_ga223de5d0549b215566dfb977d4bb45bd"><div class="ttname"><a href="a00158.html#ga223de5d0549b215566dfb977d4bb45bd">glm::highp_mat3x3</a></div><div class="ttdeci">tmat3x3< float, highp > highp_mat3x3</div><div class="ttdoc">3 columns of 3 components matrix of high precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00199">type_mat.hpp:199</a></div></div>
+<div class="ttc" id="a00158_html_gae37a4275ffa68d0c3527a345e76598c0"><div class="ttname"><a href="a00158.html#gae37a4275ffa68d0c3527a345e76598c0">glm::lowp_dmat3x3</a></div><div class="ttdeci">tmat3x3< double, lowp > lowp_dmat3x3</div><div class="ttdoc">3 columns of 3 components matrix of low precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00556">type_mat.hpp:556</a></div></div>
+<div class="ttc" id="a00158_html_ga813bff547772bcefebc026e5deba0fe3"><div class="ttname"><a href="a00158.html#ga813bff547772bcefebc026e5deba0fe3">glm::lowp_dmat3x4</a></div><div class="ttdeci">tmat3x4< double, lowp > lowp_dmat3x4</div><div class="ttdoc">3 columns of 4 components matrix of low precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00579">type_mat.hpp:579</a></div></div>
+<div class="ttc" id="a00158_html_ga2f02cb49e386f65817c10ead9bbe7dec"><div class="ttname"><a href="a00158.html#ga2f02cb49e386f65817c10ead9bbe7dec">glm::mediump_mat3x3</a></div><div class="ttdeci">tmat3x3< float, mediump > mediump_mat3x3</div><div class="ttdoc">3 columns of 3 components matrix of medium precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00192">type_mat.hpp:192</a></div></div>
+<div class="ttc" id="a00158_html_ga6a66118df7e2398a36ca4a8e98ce6783"><div class="ttname"><a href="a00158.html#ga6a66118df7e2398a36ca4a8e98ce6783">glm::lowp_mat3</a></div><div class="ttdeci">tmat3x3< float, lowp > lowp_mat3</div><div class="ttdoc">3 columns of 3 components matrix of low precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00164">type_mat.hpp:164</a></div></div>
+<div class="ttc" id="a00158_html_ga27ccd1bcb24920508a7b6a24bd9265ab"><div class="ttname"><a href="a00158.html#ga27ccd1bcb24920508a7b6a24bd9265ab">glm::lowp_dmat3x2</a></div><div class="ttdeci">tmat3x2< double, lowp > lowp_dmat3x2</div><div class="ttdoc">3 columns of 2 components matrix of low precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00515">type_mat.hpp:515</a></div></div>
+<div class="ttc" id="a00157_html_gac44263f56ff3cbf0a9cc4e2405d5ecb8"><div class="ttname"><a href="a00157.html#gac44263f56ff3cbf0a9cc4e2405d5ecb8">glm::dmat3x3</a></div><div class="ttdeci">highp_dmat3x3 dmat3x3</div><div class="ttdoc">3 * 3 matrix of double-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00742">type_mat.hpp:742</a></div></div>
+<div class="ttc" id="a00158_html_gab2d4fd5cd286baff8364a7a3f60c8a21"><div class="ttname"><a href="a00158.html#gab2d4fd5cd286baff8364a7a3f60c8a21">glm::highp_dmat3x2</a></div><div class="ttdeci">tmat3x2< double, highp > highp_dmat3x2</div><div class="ttdoc">3 columns of 2 components matrix of high precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00527">type_mat.hpp:527</a></div></div>
+<div class="ttc" id="a00158_html_ga11c1eb1d307846d5bee7d7c0d8c386f0"><div class="ttname"><a href="a00158.html#ga11c1eb1d307846d5bee7d7c0d8c386f0">glm::highp_mat2</a></div><div class="ttdeci">tmat2x2< float, highp > highp_mat2</div><div class="ttdoc">2 columns of 2 components matrix of high precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00053">type_mat.hpp:53</a></div></div>
+<div class="ttc" id="a00158_html_gac1c87c16d6dcb7449bc3c779ccdc5c30"><div class="ttname"><a href="a00158.html#gac1c87c16d6dcb7449bc3c779ccdc5c30">glm::highp_dmat2x4</a></div><div class="ttdeci">tmat2x4< double, highp > highp_dmat2x4</div><div class="ttdoc">2 columns of 4 components matrix of high precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00504">type_mat.hpp:504</a></div></div>
+<div class="ttc" id="a00158_html_gafb3dbbc82f8b166867fd21c76eb8db4f"><div class="ttname"><a href="a00158.html#gafb3dbbc82f8b166867fd21c76eb8db4f">glm::lowp_mat4x3</a></div><div class="ttdeci">tmat4x3< float, lowp > lowp_mat4x3</div><div class="ttdoc">4 columns of 3 components matrix of low precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00263">type_mat.hpp:263</a></div></div>
+<div class="ttc" id="a00157_html_ga38d9bfca882ec542b1928cf77b5c2091"><div class="ttname"><a href="a00157.html#ga38d9bfca882ec542b1928cf77b5c2091">glm::dmat3x4</a></div><div class="ttdeci">highp_dmat3x4 dmat3x4</div><div class="ttdoc">3 * 4 matrix of double-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00747">type_mat.hpp:747</a></div></div>
+<div class="ttc" id="a00157_html_gaddd230c88fbd6ec33242329be3a1b738"><div class="ttname"><a href="a00157.html#gaddd230c88fbd6ec33242329be3a1b738">glm::dmat2x4</a></div><div class="ttdeci">highp_dmat2x4 dmat2x4</div><div class="ttdoc">2 * 4 matrix of double-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00732">type_mat.hpp:732</a></div></div>
+<div class="ttc" id="a00157_html_gacd9ff3b943b3d8bda4f4b388320420fd"><div class="ttname"><a href="a00157.html#gacd9ff3b943b3d8bda4f4b388320420fd">glm::mat4x3</a></div><div class="ttdeci">highp_mat4x3 mat4x3</div><div class="ttdoc">4 columns of 3 components matrix of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00394">type_mat.hpp:394</a></div></div>
+<div class="ttc" id="a00158_html_ga9dfd75b5b17b89ccbecbdd6201efc74b"><div class="ttname"><a href="a00158.html#ga9dfd75b5b17b89ccbecbdd6201efc74b">glm::highp_mat2x3</a></div><div class="ttdeci">tmat2x3< float, highp > highp_mat2x3</div><div class="ttdoc">2 columns of 3 components matrix of high precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00100">type_mat.hpp:100</a></div></div>
+<div class="ttc" id="a00158_html_ga7e95e348c99ef3d56b87ede14bc90bfe"><div class="ttname"><a href="a00158.html#ga7e95e348c99ef3d56b87ede14bc90bfe">glm::mediump_mat2x4</a></div><div class="ttdeci">tmat2x4< float, mediump > mediump_mat2x4</div><div class="ttdoc">2 columns of 4 components matrix of medium precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00119">type_mat.hpp:119</a></div></div>
+<div class="ttc" id="a00085_html"><div class="ttname"><a href="a00085.html">precision.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00157_html_ga97b38ea24e9ebf58eac04a8d99dc3e27"><div class="ttname"><a href="a00157.html#ga97b38ea24e9ebf58eac04a8d99dc3e27">glm::dmat4</a></div><div class="ttdeci">highp_dmat4x4 dmat4</div><div class="ttdoc">4 * 4 matrix of double-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00717">type_mat.hpp:717</a></div></div>
+<div class="ttc" id="a00158_html_gaa2542e884ac7d05ada8ebb078b721924"><div class="ttname"><a href="a00158.html#gaa2542e884ac7d05ada8ebb078b721924">glm::lowp_mat3x2</a></div><div class="ttdeci">tmat3x2< float, lowp > lowp_mat3x2</div><div class="ttdoc">3 columns of 2 components matrix of low precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00138">type_mat.hpp:138</a></div></div>
+<div class="ttc" id="a00158_html_gaf98afd25f7e3e8f1d73bca020d0d8ea6"><div class="ttname"><a href="a00158.html#gaf98afd25f7e3e8f1d73bca020d0d8ea6">glm::highp_dmat2x3</a></div><div class="ttdeci">tmat2x3< double, highp > highp_dmat2x3</div><div class="ttdoc">2 columns of 3 components matrix of high precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00481">type_mat.hpp:481</a></div></div>
+<div class="ttc" id="a00157_html_gae174ff65e148bb7dec4bf10a63cb46ff"><div class="ttname"><a href="a00157.html#gae174ff65e148bb7dec4bf10a63cb46ff">glm::dmat3</a></div><div class="ttdeci">highp_dmat3x3 dmat3</div><div class="ttdoc">3 * 3 matrix of double-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00114_source.html#l00712">type_mat.hpp:712</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00115.html b/src/third_party/glm/doc/api/a00115.html
new file mode 100644
index 0000000..1d339c3
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00115.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: type_mat2x2.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">type_mat2x2.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00115_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+
+<p>Definition in file <a class="el" href="a00115_source.html">type_mat2x2.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00115_source.html b/src/third_party/glm/doc/api/a00115_source.html
new file mode 100644
index 0000000..3ec6500
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00115_source.html
@@ -0,0 +1,245 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: type_mat2x2.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">type_mat2x2.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00115.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include "../fwd.hpp"</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#include "<a class="code" href="a00129.html">type_vec2.hpp</a>"</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor">#include "<a class="code" href="a00114.html">type_mat.hpp</a>"</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#include <limits></span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor">#include <cstddef></span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> </div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> {</div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P = defaultp></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>  <span class="keyword">struct </span>tmat2x2</div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>  {</div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>  <span class="keyword">typedef</span> tvec2<T, P> col_type;</div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  <span class="keyword">typedef</span> tvec2<T, P> row_type;</div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <span class="keyword">typedef</span> tmat2x2<T, P> type;</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <span class="keyword">typedef</span> tmat2x2<T, P> transpose_type;</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <span class="keyword">typedef</span> T value_type;</div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  col_type value[2];</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="comment">// -- Constructors --</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  GLM_FUNC_DECL tmat2x2() GLM_DEFAULT_CTOR;</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  GLM_FUNC_DECL tmat2x2(tmat2x2<T, P> const & m) GLM_DEFAULT;</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  template <precision Q></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  GLM_FUNC_DECL tmat2x2(tmat2x2<T, Q> const & m);</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tmat2x2(ctor);</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  GLM_FUNC_DECL explicit tmat2x2(T scalar);</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  GLM_FUNC_DECL tmat2x2(</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  T const & x1, T const & y1,</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  T const & x2, T const & y2);</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  GLM_FUNC_DECL tmat2x2(</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  col_type const & v1,</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  col_type const & v2);</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="comment">// -- Conversions --</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  template <typename U, typename V, typename M, typename N></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  GLM_FUNC_DECL tmat2x2(</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  U const & x1, V const & y1,</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  M const & x2, N const & y2);</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  template <typename U, typename V></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  GLM_FUNC_DECL tmat2x2(</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  tvec2<U, P> const & v1,</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  tvec2<V, P> const & v2);</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="comment">// -- Matrix conversions --</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  template <typename U, precision Q></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat2x2(tmat2x2<U, Q> const & m);</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat2x2(tmat3x3<T, P> const & x);</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat2x2(tmat4x4<T, P> const & x);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat2x2(tmat2x3<T, P> const & x);</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat2x2(tmat3x2<T, P> const & x);</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat2x2(tmat2x4<T, P> const & x);</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat2x2(tmat4x2<T, P> const & x);</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat2x2(tmat3x4<T, P> const & x);</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat2x2(tmat4x3<T, P> const & x);</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="comment">// -- Accesses --</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  typedef length_t length_type;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  GLM_FUNC_DECL GLM_CONSTEXPR length_type <a class="code" href="a00148.html#ga18d45e3d4c7705e67ccfabd99e521604">length</a>() const;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  GLM_FUNC_DECL col_type & operator[](length_type i);</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  GLM_FUNC_DECL col_type const & operator[](length_type i) const;</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="comment">// -- Unary arithmetic operators --</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  GLM_FUNC_DECL tmat2x2<T, P> & operator=(tmat2x2<T, P> const & v) GLM_DEFAULT;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  template <typename U></div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  GLM_FUNC_DECL tmat2x2<T, P> & operator=(tmat2x2<U, P> const & m);</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  template <typename U></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  GLM_FUNC_DECL tmat2x2<T, P> & operator+=(U s);</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  template <typename U></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  GLM_FUNC_DECL tmat2x2<T, P> & operator+=(tmat2x2<U, P> const & m);</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  template <typename U></div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  GLM_FUNC_DECL tmat2x2<T, P> & operator-=(U s);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  template <typename U></div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  GLM_FUNC_DECL tmat2x2<T, P> & operator-=(tmat2x2<U, P> const & m);</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  template <typename U></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  GLM_FUNC_DECL tmat2x2<T, P> & operator*=(U s);</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  template <typename U></div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  GLM_FUNC_DECL tmat2x2<T, P> & operator*=(tmat2x2<U, P> const & m);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  template <typename U></div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  GLM_FUNC_DECL tmat2x2<T, P> & operator/=(U s);</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  template <typename U></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  GLM_FUNC_DECL tmat2x2<T, P> & operator/=(tmat2x2<U, P> const & m);</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="comment">// -- Increment and decrement operators --</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  GLM_FUNC_DECL tmat2x2<T, P> & operator++ ();</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  GLM_FUNC_DECL tmat2x2<T, P> & operator-- ();</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  GLM_FUNC_DECL tmat2x2<T, P> operator++(<span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  GLM_FUNC_DECL tmat2x2<T, P> operator--(<span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  };</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="comment">// -- Unary operators --</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  GLM_FUNC_DECL tmat2x2<T, P> operator+(tmat2x2<T, P> const & m);</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  GLM_FUNC_DECL tmat2x2<T, P> operator-(tmat2x2<T, P> const & m);</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="comment">// -- Binary operators --</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  GLM_FUNC_DECL tmat2x2<T, P> operator+(tmat2x2<T, P> const & m, T scalar);</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  GLM_FUNC_DECL tmat2x2<T, P> operator+(T scalar, tmat2x2<T, P> const & m);</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  GLM_FUNC_DECL tmat2x2<T, P> operator+(tmat2x2<T, P> const & m1, tmat2x2<T, P> const & m2);</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  GLM_FUNC_DECL tmat2x2<T, P> operator-(tmat2x2<T, P> const & m, T scalar);</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  GLM_FUNC_DECL tmat2x2<T, P> operator-(T scalar, tmat2x2<T, P> const & m);</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  GLM_FUNC_DECL tmat2x2<T, P> operator-(tmat2x2<T, P> const & m1, tmat2x2<T, P> const & m2);</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> </div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  GLM_FUNC_DECL tmat2x2<T, P> operator*(tmat2x2<T, P> const & m, T scalar);</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  GLM_FUNC_DECL tmat2x2<T, P> operator*(T scalar, tmat2x2<T, P> const & m);</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  GLM_FUNC_DECL typename tmat2x2<T, P>::col_type operator*(tmat2x2<T, P> const & m, typename tmat2x2<T, P>::row_type const & v);</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  GLM_FUNC_DECL typename tmat2x2<T, P>::row_type operator*(typename tmat2x2<T, P>::col_type const & v, tmat2x2<T, P> const & m);</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  GLM_FUNC_DECL tmat2x2<T, P> operator*(tmat2x2<T, P> const & m1, tmat2x2<T, P> const & m2);</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  GLM_FUNC_DECL tmat3x2<T, P> operator*(tmat2x2<T, P> const & m1, tmat3x2<T, P> const & m2);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  GLM_FUNC_DECL tmat4x2<T, P> operator*(tmat2x2<T, P> const & m1, tmat4x2<T, P> const & m2);</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  GLM_FUNC_DECL tmat2x2<T, P> operator/(tmat2x2<T, P> const & m, T scalar);</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  GLM_FUNC_DECL tmat2x2<T, P> operator/(T scalar, tmat2x2<T, P> const & m);</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  GLM_FUNC_DECL typename tmat2x2<T, P>::col_type operator/(tmat2x2<T, P> const & m, typename tmat2x2<T, P>::row_type const & v);</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  GLM_FUNC_DECL typename tmat2x2<T, P>::row_type operator/(typename tmat2x2<T, P>::col_type const & v, tmat2x2<T, P> const & m);</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  GLM_FUNC_DECL tmat2x2<T, P> operator/(tmat2x2<T, P> const & m1, tmat2x2<T, P> const & m2);</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <span class="comment">// -- Boolean operators --</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> operator==(tmat2x2<T, P> const & m1, tmat2x2<T, P> const & m2);</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> operator!=(tmat2x2<T, P> const & m1, tmat2x2<T, P> const & m2);</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> } <span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="preprocessor">#ifndef GLM_EXTERNAL_TEMPLATE</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="preprocessor">#include "type_mat2x2.inl"</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="preprocessor">#endif</span></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00114_html"><div class="ttname"><a href="a00114.html">type_mat.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00129_html"><div class="ttname"><a href="a00129.html">type_vec2.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00148_html_ga18d45e3d4c7705e67ccfabd99e521604"><div class="ttname"><a href="a00148.html#ga18d45e3d4c7705e67ccfabd99e521604">glm::length</a></div><div class="ttdeci">GLM_FUNC_DECL T length(vecType< T, P > const &x)</div><div class="ttdoc">Returns the length of x, i.e., sqrt(x * x). </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00116.html b/src/third_party/glm/doc/api/a00116.html
new file mode 100644
index 0000000..2d148c5
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00116.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: type_mat2x3.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">type_mat2x3.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00116_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+
+<p>Definition in file <a class="el" href="a00116_source.html">type_mat2x3.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00116_source.html b/src/third_party/glm/doc/api/a00116_source.html
new file mode 100644
index 0000000..5676b29
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00116_source.html
@@ -0,0 +1,228 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: type_mat2x3.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">type_mat2x3.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00116.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include "../fwd.hpp"</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#include "<a class="code" href="a00129.html">type_vec2.hpp</a>"</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor">#include "<a class="code" href="a00130.html">type_vec3.hpp</a>"</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#include "<a class="code" href="a00114.html">type_mat.hpp</a>"</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor">#include <limits></span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor">#include <cstddef></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> </div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> {</div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P = defaultp></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>  <span class="keyword">struct </span>tmat2x3</div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>  {</div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  <span class="keyword">typedef</span> tvec3<T, P> col_type;</div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <span class="keyword">typedef</span> tvec2<T, P> row_type;</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <span class="keyword">typedef</span> tmat2x3<T, P> type;</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <span class="keyword">typedef</span> tmat3x2<T, P> transpose_type;</div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keyword">typedef</span> T value_type;</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  col_type value[2];</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="comment">// -- Constructors --</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  GLM_FUNC_DECL tmat2x3() GLM_DEFAULT_CTOR;</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  GLM_FUNC_DECL tmat2x3(tmat2x3<T, P> const & m) GLM_DEFAULT;</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  template <precision Q></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  GLM_FUNC_DECL tmat2x3(tmat2x3<T, Q> const & m);</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tmat2x3(ctor);</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  GLM_FUNC_DECL explicit tmat2x3(T scalar);</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  GLM_FUNC_DECL tmat2x3(</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  T x0, T y0, T z0,</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  T x1, T y1, T z1);</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  GLM_FUNC_DECL tmat2x3(</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  col_type const & v0,</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  col_type const & v1);</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="comment">// -- Conversions --</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  template <typename X1, typename Y1, typename Z1, typename X2, typename Y2, typename Z2></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  GLM_FUNC_DECL tmat2x3(</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  X1 x1, Y1 y1, Z1 z1,</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  X2 x2, Y2 y2, Z2 z2);</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  template <typename U, typename V></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  GLM_FUNC_DECL tmat2x3(</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  tvec3<U, P> const & v1,</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  tvec3<V, P> const & v2);</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="comment">// -- Matrix conversions --</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  template <typename U, precision Q></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat2x3(tmat2x3<U, Q> const & m);</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat2x3(tmat2x2<T, P> const & x);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat2x3(tmat3x3<T, P> const & x);</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat2x3(tmat4x4<T, P> const & x);</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat2x3(tmat2x4<T, P> const & x);</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat2x3(tmat3x2<T, P> const & x);</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat2x3(tmat3x4<T, P> const & x);</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat2x3(tmat4x2<T, P> const & x);</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat2x3(tmat4x3<T, P> const & x);</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="comment">// -- Accesses --</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  typedef length_t length_type;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  GLM_FUNC_DECL GLM_CONSTEXPR length_type <a class="code" href="a00148.html#ga18d45e3d4c7705e67ccfabd99e521604">length</a>() const;</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  GLM_FUNC_DECL col_type & operator[](length_type i);</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  GLM_FUNC_DECL col_type const & operator[](length_type i) const;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="comment">// -- Unary arithmetic operators --</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  GLM_FUNC_DECL tmat2x3<T, P> & operator=(tmat2x3<T, P> const & m) GLM_DEFAULT;</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  template <typename U></div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  GLM_FUNC_DECL tmat2x3<T, P> & operator=(tmat2x3<U, P> const & m);</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  template <typename U></div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  GLM_FUNC_DECL tmat2x3<T, P> & operator+=(U s);</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  template <typename U></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  GLM_FUNC_DECL tmat2x3<T, P> & operator+=(tmat2x3<U, P> const & m);</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  template <typename U></div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  GLM_FUNC_DECL tmat2x3<T, P> & operator-=(U s);</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  template <typename U></div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  GLM_FUNC_DECL tmat2x3<T, P> & operator-=(tmat2x3<U, P> const & m);</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  template <typename U></div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  GLM_FUNC_DECL tmat2x3<T, P> & operator*=(U s);</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  template <typename U></div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  GLM_FUNC_DECL tmat2x3<T, P> & operator/=(U s);</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="comment">// -- Increment and decrement operators --</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  GLM_FUNC_DECL tmat2x3<T, P> & operator++ ();</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  GLM_FUNC_DECL tmat2x3<T, P> & operator-- ();</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  GLM_FUNC_DECL tmat2x3<T, P> operator++(<span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  GLM_FUNC_DECL tmat2x3<T, P> operator--(<span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  };</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="comment">// -- Unary operators --</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  GLM_FUNC_DECL tmat2x3<T, P> operator+(tmat2x3<T, P> const & m);</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  GLM_FUNC_DECL tmat2x3<T, P> operator-(tmat2x3<T, P> const & m);</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="comment">// -- Binary operators --</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  GLM_FUNC_DECL tmat2x3<T, P> operator+(tmat2x3<T, P> const & m, T scalar);</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  GLM_FUNC_DECL tmat2x3<T, P> operator+(tmat2x3<T, P> const & m1, tmat2x3<T, P> const & m2);</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  GLM_FUNC_DECL tmat2x3<T, P> operator-(tmat2x3<T, P> const & m, T scalar);</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  GLM_FUNC_DECL tmat2x3<T, P> operator-(tmat2x3<T, P> const & m1, tmat2x3<T, P> const & m2);</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  GLM_FUNC_DECL tmat2x3<T, P> operator*(tmat2x3<T, P> const & m, T scalar);</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  GLM_FUNC_DECL tmat2x3<T, P> operator*(T scalar, tmat2x3<T, P> const & m);</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  GLM_FUNC_DECL typename tmat2x3<T, P>::col_type operator*(tmat2x3<T, P> const & m, typename tmat2x3<T, P>::row_type const & v);</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> </div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  GLM_FUNC_DECL typename tmat2x3<T, P>::row_type operator*(typename tmat2x3<T, P>::col_type const & v, tmat2x3<T, P> const & m);</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  GLM_FUNC_DECL tmat2x3<T, P> operator*(tmat2x3<T, P> const & m1, tmat2x2<T, P> const & m2);</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  GLM_FUNC_DECL tmat3x3<T, P> operator*(tmat2x3<T, P> const & m1, tmat3x2<T, P> const & m2);</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  GLM_FUNC_DECL tmat4x3<T, P> operator*(tmat2x3<T, P> const & m1, tmat4x2<T, P> const & m2);</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  GLM_FUNC_DECL tmat2x3<T, P> operator/(tmat2x3<T, P> const & m, T scalar);</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  GLM_FUNC_DECL tmat2x3<T, P> operator/(T scalar, tmat2x3<T, P> const & m);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <span class="comment">// -- Boolean operators --</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> </div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> operator==(tmat2x3<T, P> const & m1, tmat2x3<T, P> const & m2);</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> operator!=(tmat2x3<T, P> const & m1, tmat2x3<T, P> const & m2);</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="preprocessor">#ifndef GLM_EXTERNAL_TEMPLATE</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="preprocessor">#include "type_mat2x3.inl"</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="preprocessor">#endif</span></div>
+<div class="ttc" id="a00130_html"><div class="ttname"><a href="a00130.html">type_vec3.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00114_html"><div class="ttname"><a href="a00114.html">type_mat.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00129_html"><div class="ttname"><a href="a00129.html">type_vec2.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00148_html_ga18d45e3d4c7705e67ccfabd99e521604"><div class="ttname"><a href="a00148.html#ga18d45e3d4c7705e67ccfabd99e521604">glm::length</a></div><div class="ttdeci">GLM_FUNC_DECL T length(vecType< T, P > const &x)</div><div class="ttdoc">Returns the length of x, i.e., sqrt(x * x). </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00117.html b/src/third_party/glm/doc/api/a00117.html
new file mode 100644
index 0000000..e3d9fb6
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00117.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: type_mat2x4.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">type_mat2x4.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00117_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+
+<p>Definition in file <a class="el" href="a00117_source.html">type_mat2x4.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00117_source.html b/src/third_party/glm/doc/api/a00117_source.html
new file mode 100644
index 0000000..2b52cab
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00117_source.html
@@ -0,0 +1,230 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: type_mat2x4.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">type_mat2x4.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00117.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include "../fwd.hpp"</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#include "<a class="code" href="a00129.html">type_vec2.hpp</a>"</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor">#include "<a class="code" href="a00131.html">type_vec4.hpp</a>"</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#include "<a class="code" href="a00114.html">type_mat.hpp</a>"</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor">#include <limits></span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor">#include <cstddef></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> </div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> {</div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P = defaultp></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>  <span class="keyword">struct </span>tmat2x4</div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>  {</div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  <span class="keyword">typedef</span> tvec4<T, P> col_type;</div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <span class="keyword">typedef</span> tvec2<T, P> row_type;</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <span class="keyword">typedef</span> tmat2x4<T, P> type;</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <span class="keyword">typedef</span> tmat4x2<T, P> transpose_type;</div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keyword">typedef</span> T value_type;</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  col_type value[2];</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="comment">// -- Constructors --</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  GLM_FUNC_DECL tmat2x4() GLM_DEFAULT_CTOR;</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  GLM_FUNC_DECL tmat2x4(tmat2x4<T, P> const & m) GLM_DEFAULT;</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  template <precision Q></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  GLM_FUNC_DECL tmat2x4(tmat2x4<T, Q> const & m);</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tmat2x4(ctor);</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  GLM_FUNC_DECL explicit tmat2x4(T scalar);</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  GLM_FUNC_DECL tmat2x4(</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  T x0, T y0, T z0, T w0,</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  T x1, T y1, T z1, T w1);</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  GLM_FUNC_DECL tmat2x4(</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  col_type const & v0,</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  col_type const & v1);</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="comment">// -- Conversions --</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  template <</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  typename X1, typename Y1, typename Z1, typename W1,</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  typename X2, typename Y2, typename Z2, typename W2></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  GLM_FUNC_DECL tmat2x4(</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  X1 x1, Y1 y1, Z1 z1, W1 w1,</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  X2 x2, Y2 y2, Z2 z2, W2 w2);</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  template <typename U, typename V></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  GLM_FUNC_DECL tmat2x4(</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  tvec4<U, P> const & v1,</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  tvec4<V, P> const & v2);</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="comment">// -- Matrix conversions --</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  template <typename U, precision Q></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat2x4(tmat2x4<U, Q> const & m);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat2x4(tmat2x2<T, P> const & x);</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat2x4(tmat3x3<T, P> const & x);</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat2x4(tmat4x4<T, P> const & x);</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat2x4(tmat2x3<T, P> const & x);</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat2x4(tmat3x2<T, P> const & x);</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat2x4(tmat3x4<T, P> const & x);</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat2x4(tmat4x2<T, P> const & x);</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat2x4(tmat4x3<T, P> const & x);</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="comment">// -- Accesses --</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  typedef length_t length_type;</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  GLM_FUNC_DECL GLM_CONSTEXPR length_type <a class="code" href="a00148.html#ga18d45e3d4c7705e67ccfabd99e521604">length</a>() const;</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  GLM_FUNC_DECL col_type & operator[](length_type i);</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  GLM_FUNC_DECL col_type const & operator[](length_type i) const;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="comment">// -- Unary arithmetic operators --</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  GLM_FUNC_DECL tmat2x4<T, P> & operator=(tmat2x4<T, P> const & m) GLM_DEFAULT;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  template <typename U></div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  GLM_FUNC_DECL tmat2x4<T, P> & operator=(tmat2x4<U, P> const & m);</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  template <typename U></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  GLM_FUNC_DECL tmat2x4<T, P> & operator+=(U s);</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  template <typename U></div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  GLM_FUNC_DECL tmat2x4<T, P> & operator+=(tmat2x4<U, P> const & m);</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  template <typename U></div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  GLM_FUNC_DECL tmat2x4<T, P> & operator-=(U s);</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  template <typename U></div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  GLM_FUNC_DECL tmat2x4<T, P> & operator-=(tmat2x4<U, P> const & m);</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  template <typename U></div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  GLM_FUNC_DECL tmat2x4<T, P> & operator*=(U s);</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  template <typename U></div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  GLM_FUNC_DECL tmat2x4<T, P> & operator/=(U s);</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="comment">// -- Increment and decrement operators --</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  GLM_FUNC_DECL tmat2x4<T, P> & operator++ ();</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  GLM_FUNC_DECL tmat2x4<T, P> & operator-- ();</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  GLM_FUNC_DECL tmat2x4<T, P> operator++(<span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  GLM_FUNC_DECL tmat2x4<T, P> operator--(<span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  };</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="comment">// -- Unary operators --</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  GLM_FUNC_DECL tmat2x4<T, P> operator+(tmat2x4<T, P> const & m);</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  GLM_FUNC_DECL tmat2x4<T, P> operator-(tmat2x4<T, P> const & m);</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="comment">// -- Binary operators --</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  GLM_FUNC_DECL tmat2x4<T, P> operator+(tmat2x4<T, P> const & m, T scalar);</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  GLM_FUNC_DECL tmat2x4<T, P> operator+(tmat2x4<T, P> const & m1, tmat2x4<T, P> const & m2);</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  GLM_FUNC_DECL tmat2x4<T, P> operator-(tmat2x4<T, P> const & m, T scalar);</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  GLM_FUNC_DECL tmat2x4<T, P> operator-(tmat2x4<T, P> const & m1, tmat2x4<T, P> const & m2);</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  GLM_FUNC_DECL tmat2x4<T, P> operator*(tmat2x4<T, P> const & m, T scalar);</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  GLM_FUNC_DECL tmat2x4<T, P> operator*(T scalar, tmat2x4<T, P> const & m);</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  GLM_FUNC_DECL typename tmat2x4<T, P>::col_type operator*(tmat2x4<T, P> const & m, typename tmat2x4<T, P>::row_type const & v);</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  GLM_FUNC_DECL typename tmat2x4<T, P>::row_type operator*(typename tmat2x4<T, P>::col_type const & v, tmat2x4<T, P> const & m);</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  GLM_FUNC_DECL tmat4x4<T, P> operator*(tmat2x4<T, P> const & m1, tmat4x2<T, P> const & m2);</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  GLM_FUNC_DECL tmat2x4<T, P> operator*(tmat2x4<T, P> const & m1, tmat2x2<T, P> const & m2);</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  GLM_FUNC_DECL tmat3x4<T, P> operator*(tmat2x4<T, P> const & m1, tmat3x2<T, P> const & m2);</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  GLM_FUNC_DECL tmat2x4<T, P> operator/(tmat2x4<T, P> const & m, T scalar);</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  GLM_FUNC_DECL tmat2x4<T, P> operator/(T scalar, tmat2x4<T, P> const & m);</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> </div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="comment">// -- Boolean operators --</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> operator==(tmat2x4<T, P> const & m1, tmat2x4<T, P> const & m2);</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> </div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> operator!=(tmat2x4<T, P> const & m1, tmat2x4<T, P> const & m2);</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="preprocessor">#ifndef GLM_EXTERNAL_TEMPLATE</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="preprocessor">#include "type_mat2x4.inl"</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="preprocessor">#endif</span></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00114_html"><div class="ttname"><a href="a00114.html">type_mat.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00129_html"><div class="ttname"><a href="a00129.html">type_vec2.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00131_html"><div class="ttname"><a href="a00131.html">type_vec4.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00148_html_ga18d45e3d4c7705e67ccfabd99e521604"><div class="ttname"><a href="a00148.html#ga18d45e3d4c7705e67ccfabd99e521604">glm::length</a></div><div class="ttdeci">GLM_FUNC_DECL T length(vecType< T, P > const &x)</div><div class="ttdoc">Returns the length of x, i.e., sqrt(x * x). </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00118.html b/src/third_party/glm/doc/api/a00118.html
new file mode 100644
index 0000000..b20072d
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00118.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: type_mat3x2.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">type_mat3x2.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00118_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+
+<p>Definition in file <a class="el" href="a00118_source.html">type_mat3x2.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00118_source.html b/src/third_party/glm/doc/api/a00118_source.html
new file mode 100644
index 0000000..6ad8609
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00118_source.html
@@ -0,0 +1,236 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: type_mat3x2.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">type_mat3x2.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00118.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include "../fwd.hpp"</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#include "<a class="code" href="a00129.html">type_vec2.hpp</a>"</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor">#include "<a class="code" href="a00130.html">type_vec3.hpp</a>"</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#include "<a class="code" href="a00114.html">type_mat.hpp</a>"</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor">#include <limits></span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor">#include <cstddef></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> </div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> {</div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P = defaultp></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>  <span class="keyword">struct </span>tmat3x2</div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>  {</div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  <span class="keyword">typedef</span> tvec2<T, P> col_type;</div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <span class="keyword">typedef</span> tvec3<T, P> row_type;</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <span class="keyword">typedef</span> tmat3x2<T, P> type;</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <span class="keyword">typedef</span> tmat2x3<T, P> transpose_type;</div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keyword">typedef</span> T value_type;</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  col_type value[3];</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="comment">// -- Constructors --</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  GLM_FUNC_DECL tmat3x2() GLM_DEFAULT_CTOR;</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  GLM_FUNC_DECL tmat3x2(tmat3x2<T, P> const & m) GLM_DEFAULT;</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  template <precision Q></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  GLM_FUNC_DECL tmat3x2(tmat3x2<T, Q> const & m);</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tmat3x2(ctor);</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  GLM_FUNC_DECL explicit tmat3x2(T scalar);</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  GLM_FUNC_DECL tmat3x2(</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  T x0, T y0,</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  T x1, T y1,</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  T x2, T y2);</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  GLM_FUNC_DECL tmat3x2(</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  col_type const & v0,</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  col_type const & v1,</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  col_type const & v2);</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="comment">// -- Conversions --</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  template<</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  typename X1, typename Y1,</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  typename X2, typename Y2,</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  typename X3, typename Y3></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  GLM_FUNC_DECL tmat3x2(</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  X1 x1, Y1 y1,</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  X2 x2, Y2 y2,</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  X3 x3, Y3 y3);</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  template <typename V1, typename V2, typename V3></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  GLM_FUNC_DECL tmat3x2(</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  tvec2<V1, P> const & v1,</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  tvec2<V2, P> const & v2,</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  tvec2<V3, P> const & v3);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="comment">// -- Matrix conversions --</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  template <typename U, precision Q></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat3x2(tmat3x2<U, Q> const & m);</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat3x2(tmat2x2<T, P> const & x);</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat3x2(tmat3x3<T, P> const & x);</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat3x2(tmat4x4<T, P> const & x);</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat3x2(tmat2x3<T, P> const & x);</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat3x2(tmat2x4<T, P> const & x);</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat3x2(tmat3x4<T, P> const & x);</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat3x2(tmat4x2<T, P> const & x);</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat3x2(tmat4x3<T, P> const & x);</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="comment">// -- Accesses --</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  typedef length_t length_type;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  GLM_FUNC_DECL GLM_CONSTEXPR length_type <a class="code" href="a00148.html#ga18d45e3d4c7705e67ccfabd99e521604">length</a>() const;</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  GLM_FUNC_DECL col_type & operator[](length_type i);</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  GLM_FUNC_DECL col_type const & operator[](length_type i) const;</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="comment">// -- Unary arithmetic operators --</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  GLM_FUNC_DECL tmat3x2<T, P> & operator=(tmat3x2<T, P> const & m) GLM_DEFAULT;</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  template <typename U></div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  GLM_FUNC_DECL tmat3x2<T, P> & operator=(tmat3x2<U, P> const & m);</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  template <typename U></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  GLM_FUNC_DECL tmat3x2<T, P> & operator+=(U s);</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  template <typename U></div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  GLM_FUNC_DECL tmat3x2<T, P> & operator+=(tmat3x2<U, P> const & m);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  template <typename U></div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  GLM_FUNC_DECL tmat3x2<T, P> & operator-=(U s);</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  template <typename U></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  GLM_FUNC_DECL tmat3x2<T, P> & operator-=(tmat3x2<U, P> const & m);</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  template <typename U></div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  GLM_FUNC_DECL tmat3x2<T, P> & operator*=(U s);</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  template <typename U></div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  GLM_FUNC_DECL tmat3x2<T, P> & operator/=(U s);</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="comment">// -- Increment and decrement operators --</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  GLM_FUNC_DECL tmat3x2<T, P> & operator++ ();</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  GLM_FUNC_DECL tmat3x2<T, P> & operator-- ();</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  GLM_FUNC_DECL tmat3x2<T, P> operator++(<span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  GLM_FUNC_DECL tmat3x2<T, P> operator--(<span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  };</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="comment">// -- Unary operators --</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  GLM_FUNC_DECL tmat3x2<T, P> operator+(tmat3x2<T, P> const & m);</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  GLM_FUNC_DECL tmat3x2<T, P> operator-(tmat3x2<T, P> const & m);</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="comment">// -- Binary operators --</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  GLM_FUNC_DECL tmat3x2<T, P> operator+(tmat3x2<T, P> const & m, T scalar);</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  GLM_FUNC_DECL tmat3x2<T, P> operator+(tmat3x2<T, P> const & m1, tmat3x2<T, P> const & m2);</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  GLM_FUNC_DECL tmat3x2<T, P> operator-(tmat3x2<T, P> const & m, T scalar);</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  GLM_FUNC_DECL tmat3x2<T, P> operator-(tmat3x2<T, P> const & m1, tmat3x2<T, P> const & m2);</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  GLM_FUNC_DECL tmat3x2<T, P> operator*(tmat3x2<T, P> const & m, T scalar);</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  GLM_FUNC_DECL tmat3x2<T, P> operator*(T scalar, tmat3x2<T, P> const & m);</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  GLM_FUNC_DECL typename tmat3x2<T, P>::col_type operator*(tmat3x2<T, P> const & m, typename tmat3x2<T, P>::row_type const & v);</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  GLM_FUNC_DECL typename tmat3x2<T, P>::row_type operator*(typename tmat3x2<T, P>::col_type const & v, tmat3x2<T, P> const & m);</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  GLM_FUNC_DECL tmat2x2<T, P> operator*(tmat3x2<T, P> const & m1, tmat2x3<T, P> const & m2);</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  GLM_FUNC_DECL tmat3x2<T, P> operator*(tmat3x2<T, P> const & m1, tmat3x3<T, P> const & m2);</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  GLM_FUNC_DECL tmat4x2<T, P> operator*(tmat3x2<T, P> const & m1, tmat4x3<T, P> const & m2);</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  GLM_FUNC_DECL tmat3x2<T, P> operator/(tmat3x2<T, P> const & m, T scalar);</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  GLM_FUNC_DECL tmat3x2<T, P> operator/(T scalar, tmat3x2<T, P> const & m);</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> </div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="comment">// -- Boolean operators --</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> operator==(tmat3x2<T, P> const & m1, tmat3x2<T, P> const & m2);</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> operator!=(tmat3x2<T, P> const & m1, tmat3x2<T, P> const & m2);</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> </div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="preprocessor">#ifndef GLM_EXTERNAL_TEMPLATE</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="preprocessor">#include "type_mat3x2.inl"</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="preprocessor">#endif</span></div>
+<div class="ttc" id="a00130_html"><div class="ttname"><a href="a00130.html">type_vec3.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00114_html"><div class="ttname"><a href="a00114.html">type_mat.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00129_html"><div class="ttname"><a href="a00129.html">type_vec2.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00148_html_ga18d45e3d4c7705e67ccfabd99e521604"><div class="ttname"><a href="a00148.html#ga18d45e3d4c7705e67ccfabd99e521604">glm::length</a></div><div class="ttdeci">GLM_FUNC_DECL T length(vecType< T, P > const &x)</div><div class="ttdoc">Returns the length of x, i.e., sqrt(x * x). </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00119.html b/src/third_party/glm/doc/api/a00119.html
new file mode 100644
index 0000000..e9913ca
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00119.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: type_mat3x3.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">type_mat3x3.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00119_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+
+<p>Definition in file <a class="el" href="a00119_source.html">type_mat3x3.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00119_source.html b/src/third_party/glm/doc/api/a00119_source.html
new file mode 100644
index 0000000..bb6b531
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00119_source.html
@@ -0,0 +1,252 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: type_mat3x3.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">type_mat3x3.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00119.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include "../fwd.hpp"</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#include "<a class="code" href="a00130.html">type_vec3.hpp</a>"</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor">#include "<a class="code" href="a00114.html">type_mat.hpp</a>"</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#include <limits></span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor">#include <cstddef></span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> </div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> {</div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P = defaultp></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>  <span class="keyword">struct </span>tmat3x3</div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>  {</div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>  <span class="keyword">typedef</span> tvec3<T, P> col_type;</div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  <span class="keyword">typedef</span> tvec3<T, P> row_type;</div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <span class="keyword">typedef</span> tmat3x3<T, P> type;</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <span class="keyword">typedef</span> tmat3x3<T, P> transpose_type;</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <span class="keyword">typedef</span> T value_type;</div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  col_type value[3];</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="comment">// -- Constructors --</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  GLM_FUNC_DECL tmat3x3() GLM_DEFAULT_CTOR;</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  GLM_FUNC_DECL tmat3x3(tmat3x3<T, P> const & m) GLM_DEFAULT;</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  template <precision Q></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  GLM_FUNC_DECL tmat3x3(tmat3x3<T, Q> const & m);</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tmat3x3(ctor);</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  GLM_FUNC_DECL explicit tmat3x3(T scalar);</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  GLM_FUNC_DECL tmat3x3(</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  T x0, T y0, T z0,</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  T x1, T y1, T z1,</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  T x2, T y2, T z2);</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  GLM_FUNC_DECL tmat3x3(</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  col_type const & v0,</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  col_type const & v1,</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  col_type const & v2);</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="comment">// -- Conversions --</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  template<</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  typename X1, typename Y1, typename Z1,</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  typename X2, typename Y2, typename Z2,</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  typename X3, typename Y3, typename Z3></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  GLM_FUNC_DECL tmat3x3(</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  X1 x1, Y1 y1, Z1 z1,</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  X2 x2, Y2 y2, Z2 z2,</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  X3 x3, Y3 y3, Z3 z3);</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  template <typename V1, typename V2, typename V3></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  GLM_FUNC_DECL tmat3x3(</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  tvec3<V1, P> const & v1,</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  tvec3<V2, P> const & v2,</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  tvec3<V3, P> const & v3);</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="comment">// -- Matrix conversions --</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  template <typename U, precision Q></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat3x3(tmat3x3<U, Q> const & m);</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat3x3(tmat2x2<T, P> const & x);</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat3x3(tmat4x4<T, P> const & x);</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat3x3(tmat2x3<T, P> const & x);</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat3x3(tmat3x2<T, P> const & x);</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat3x3(tmat2x4<T, P> const & x);</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat3x3(tmat4x2<T, P> const & x);</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat3x3(tmat3x4<T, P> const & x);</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat3x3(tmat4x3<T, P> const & x);</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="comment">// -- Accesses --</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  typedef length_t length_type;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  GLM_FUNC_DECL GLM_CONSTEXPR length_type <a class="code" href="a00148.html#ga18d45e3d4c7705e67ccfabd99e521604">length</a>() const;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  GLM_FUNC_DECL col_type & operator[](length_type i);</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  GLM_FUNC_DECL col_type const & operator[](length_type i) const;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="comment">// -- Unary arithmetic operators --</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  GLM_FUNC_DECL tmat3x3<T, P> & operator=(tmat3x3<T, P> const & m) GLM_DEFAULT;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  template <typename U></div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  GLM_FUNC_DECL tmat3x3<T, P> & operator=(tmat3x3<U, P> const & m);</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  template <typename U></div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  GLM_FUNC_DECL tmat3x3<T, P> & operator+=(U s);</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  template <typename U></div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  GLM_FUNC_DECL tmat3x3<T, P> & operator+=(tmat3x3<U, P> const & m);</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  template <typename U></div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  GLM_FUNC_DECL tmat3x3<T, P> & operator-=(U s);</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  template <typename U></div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  GLM_FUNC_DECL tmat3x3<T, P> & operator-=(tmat3x3<U, P> const & m);</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  template <typename U></div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  GLM_FUNC_DECL tmat3x3<T, P> & operator*=(U s);</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  template <typename U></div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  GLM_FUNC_DECL tmat3x3<T, P> & operator*=(tmat3x3<U, P> const & m);</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  template <typename U></div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  GLM_FUNC_DECL tmat3x3<T, P> & operator/=(U s);</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  template <typename U></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  GLM_FUNC_DECL tmat3x3<T, P> & operator/=(tmat3x3<U, P> const & m);</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="comment">// -- Increment and decrement operators --</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  GLM_FUNC_DECL tmat3x3<T, P> & operator++();</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  GLM_FUNC_DECL tmat3x3<T, P> & operator--();</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  GLM_FUNC_DECL tmat3x3<T, P> operator++(<span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  GLM_FUNC_DECL tmat3x3<T, P> operator--(<span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  };</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="comment">// -- Unary operators --</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  GLM_FUNC_DECL tmat3x3<T, P> operator+(tmat3x3<T, P> const & m);</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  GLM_FUNC_DECL tmat3x3<T, P> operator-(tmat3x3<T, P> const & m);</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="comment">// -- Binary operators --</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  GLM_FUNC_DECL tmat3x3<T, P> operator+(tmat3x3<T, P> const & m, T scalar);</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  GLM_FUNC_DECL tmat3x3<T, P> operator+(T scalar, tmat3x3<T, P> const & m);</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  GLM_FUNC_DECL tmat3x3<T, P> operator+(tmat3x3<T, P> const & m1, tmat3x3<T, P> const & m2);</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  GLM_FUNC_DECL tmat3x3<T, P> operator-(tmat3x3<T, P> const & m, T scalar);</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  GLM_FUNC_DECL tmat3x3<T, P> operator-(T scalar, tmat3x3<T, P> const & m);</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  GLM_FUNC_DECL tmat3x3<T, P> operator-(tmat3x3<T, P> const & m1, tmat3x3<T, P> const & m2);</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  GLM_FUNC_DECL tmat3x3<T, P> operator*(tmat3x3<T, P> const & m, T scalar);</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  GLM_FUNC_DECL tmat3x3<T, P> operator*(T scalar, tmat3x3<T, P> const & m);</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  GLM_FUNC_DECL typename tmat3x3<T, P>::col_type operator*(tmat3x3<T, P> const & m, typename tmat3x3<T, P>::row_type const & v);</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  GLM_FUNC_DECL typename tmat3x3<T, P>::row_type operator*(typename tmat3x3<T, P>::col_type const & v, tmat3x3<T, P> const & m);</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  GLM_FUNC_DECL tmat3x3<T, P> operator*(tmat3x3<T, P> const & m1, tmat3x3<T, P> const & m2);</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  GLM_FUNC_DECL tmat2x3<T, P> operator*(tmat3x3<T, P> const & m1, tmat2x3<T, P> const & m2);</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> </div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  GLM_FUNC_DECL tmat4x3<T, P> operator*(tmat3x3<T, P> const & m1, tmat4x3<T, P> const & m2);</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  GLM_FUNC_DECL tmat3x3<T, P> operator/(tmat3x3<T, P> const & m, T scalar);</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  GLM_FUNC_DECL tmat3x3<T, P> operator/(T scalar, tmat3x3<T, P> const & m);</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  GLM_FUNC_DECL typename tmat3x3<T, P>::col_type operator/(tmat3x3<T, P> const & m, typename tmat3x3<T, P>::row_type const & v);</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  GLM_FUNC_DECL typename tmat3x3<T, P>::row_type operator/(typename tmat3x3<T, P>::col_type const & v, tmat3x3<T, P> const & m);</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  GLM_FUNC_DECL tmat3x3<T, P> operator/(tmat3x3<T, P> const & m1, tmat3x3<T, P> const & m2);</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  <span class="comment">// -- Boolean operators --</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> operator==(tmat3x3<T, P> const & m1, tmat3x3<T, P> const & m2);</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> operator!=(tmat3x3<T, P> const & m1, tmat3x3<T, P> const & m2);</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="preprocessor">#ifndef GLM_EXTERNAL_TEMPLATE</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="preprocessor">#include "type_mat3x3.inl"</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="preprocessor">#endif</span></div>
+<div class="ttc" id="a00130_html"><div class="ttname"><a href="a00130.html">type_vec3.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00114_html"><div class="ttname"><a href="a00114.html">type_mat.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00148_html_ga18d45e3d4c7705e67ccfabd99e521604"><div class="ttname"><a href="a00148.html#ga18d45e3d4c7705e67ccfabd99e521604">glm::length</a></div><div class="ttdeci">GLM_FUNC_DECL T length(vecType< T, P > const &x)</div><div class="ttdoc">Returns the length of x, i.e., sqrt(x * x). </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00120.html b/src/third_party/glm/doc/api/a00120.html
new file mode 100644
index 0000000..b85df2e
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00120.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: type_mat3x4.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">type_mat3x4.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00120_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+
+<p>Definition in file <a class="el" href="a00120_source.html">type_mat3x4.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00120_source.html b/src/third_party/glm/doc/api/a00120_source.html
new file mode 100644
index 0000000..2b9a784
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00120_source.html
@@ -0,0 +1,235 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: type_mat3x4.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">type_mat3x4.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00120.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include "../fwd.hpp"</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#include "<a class="code" href="a00130.html">type_vec3.hpp</a>"</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor">#include "<a class="code" href="a00131.html">type_vec4.hpp</a>"</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#include "<a class="code" href="a00114.html">type_mat.hpp</a>"</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor">#include <limits></span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor">#include <cstddef></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> </div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> {</div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P = defaultp></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>  <span class="keyword">struct </span>tmat3x4</div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>  {</div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  <span class="keyword">typedef</span> tvec4<T, P> col_type;</div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <span class="keyword">typedef</span> tvec3<T, P> row_type;</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <span class="keyword">typedef</span> tmat3x4<T, P> type;</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <span class="keyword">typedef</span> tmat4x3<T, P> transpose_type;</div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keyword">typedef</span> T value_type;</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  col_type value[3];</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="comment">// -- Constructors --</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  GLM_FUNC_DECL tmat3x4() GLM_DEFAULT_CTOR;</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  GLM_FUNC_DECL tmat3x4(tmat3x4<T, P> const & m) GLM_DEFAULT;</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  template <precision Q></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  GLM_FUNC_DECL tmat3x4(tmat3x4<T, Q> const & m);</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tmat3x4(ctor);</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  GLM_FUNC_DECL explicit tmat3x4(T scalar);</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  GLM_FUNC_DECL tmat3x4(</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  T x0, T y0, T z0, T w0,</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  T x1, T y1, T z1, T w1,</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  T x2, T y2, T z2, T w2);</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  GLM_FUNC_DECL tmat3x4(</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  col_type const & v0,</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  col_type const & v1,</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  col_type const & v2);</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="comment">// -- Conversions --</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  template<</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  typename X1, typename Y1, typename Z1, typename W1,</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  typename X2, typename Y2, typename Z2, typename W2,</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  typename X3, typename Y3, typename Z3, typename W3></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  GLM_FUNC_DECL tmat3x4(</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  X1 x1, Y1 y1, Z1 z1, W1 w1,</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  X2 x2, Y2 y2, Z2 z2, W2 w2,</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  X3 x3, Y3 y3, Z3 z3, W3 w3);</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  template <typename V1, typename V2, typename V3></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  GLM_FUNC_DECL tmat3x4(</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  tvec4<V1, P> const & v1,</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  tvec4<V2, P> const & v2,</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  tvec4<V3, P> const & v3);</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="comment">// -- Matrix conversions --</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  template <typename U, precision Q></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat3x4(tmat3x4<U, Q> const & m);</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat3x4(tmat2x2<T, P> const & x);</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat3x4(tmat3x3<T, P> const & x);</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat3x4(tmat4x4<T, P> const & x);</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat3x4(tmat2x3<T, P> const & x);</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat3x4(tmat3x2<T, P> const & x);</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat3x4(tmat2x4<T, P> const & x);</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat3x4(tmat4x2<T, P> const & x);</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat3x4(tmat4x3<T, P> const & x);</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="comment">// -- Accesses --</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  typedef length_t length_type;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  GLM_FUNC_DECL GLM_CONSTEXPR length_type <a class="code" href="a00148.html#ga18d45e3d4c7705e67ccfabd99e521604">length</a>() const;</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  GLM_FUNC_DECL col_type & operator[](length_type i);</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  GLM_FUNC_DECL col_type const & operator[](length_type i) const;</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="comment">// -- Unary arithmetic operators --</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  GLM_FUNC_DECL tmat3x4<T, P> & operator=(tmat3x4<T, P> const & m) GLM_DEFAULT;</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  template <typename U></div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  GLM_FUNC_DECL tmat3x4<T, P> & operator=(tmat3x4<U, P> const & m);</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  template <typename U></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  GLM_FUNC_DECL tmat3x4<T, P> & operator+=(U s);</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  template <typename U></div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  GLM_FUNC_DECL tmat3x4<T, P> & operator+=(tmat3x4<U, P> const & m);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  template <typename U></div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  GLM_FUNC_DECL tmat3x4<T, P> & operator-=(U s);</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  template <typename U></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  GLM_FUNC_DECL tmat3x4<T, P> & operator-=(tmat3x4<U, P> const & m);</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  template <typename U></div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  GLM_FUNC_DECL tmat3x4<T, P> & operator*=(U s);</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  template <typename U></div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  GLM_FUNC_DECL tmat3x4<T, P> & operator/=(U s);</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="comment">// -- Increment and decrement operators --</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  GLM_FUNC_DECL tmat3x4<T, P> & operator++();</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  GLM_FUNC_DECL tmat3x4<T, P> & operator--();</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  GLM_FUNC_DECL tmat3x4<T, P> operator++(<span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  GLM_FUNC_DECL tmat3x4<T, P> operator--(<span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  };</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="comment">// -- Unary operators --</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  GLM_FUNC_DECL tmat3x4<T, P> operator+(tmat3x4<T, P> const & m);</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  GLM_FUNC_DECL tmat3x4<T, P> operator-(tmat3x4<T, P> const & m);</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="comment">// -- Binary operators --</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  GLM_FUNC_DECL tmat3x4<T, P> operator+(tmat3x4<T, P> const & m, T scalar);</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  GLM_FUNC_DECL tmat3x4<T, P> operator+(tmat3x4<T, P> const & m1, tmat3x4<T, P> const & m2);</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  GLM_FUNC_DECL tmat3x4<T, P> operator-(tmat3x4<T, P> const & m, T scalar);</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  GLM_FUNC_DECL tmat3x4<T, P> operator-(tmat3x4<T, P> const & m1, tmat3x4<T, P> const & m2);</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  GLM_FUNC_DECL tmat3x4<T, P> operator*(tmat3x4<T, P> const & m, T scalar);</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  GLM_FUNC_DECL tmat3x4<T, P> operator*(T scalar, tmat3x4<T, P> const & m);</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  GLM_FUNC_DECL typename tmat3x4<T, P>::col_type operator*(tmat3x4<T, P> const & m, typename tmat3x4<T, P>::row_type const & v);</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  GLM_FUNC_DECL typename tmat3x4<T, P>::row_type operator*(typename tmat3x4<T, P>::col_type const & v, tmat3x4<T, P> const & m);</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  GLM_FUNC_DECL tmat4x4<T, P> operator*(tmat3x4<T, P> const & m1, tmat4x3<T, P> const & m2);</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  GLM_FUNC_DECL tmat2x4<T, P> operator*(tmat3x4<T, P> const & m1, tmat2x3<T, P> const & m2);</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  GLM_FUNC_DECL tmat3x4<T, P> operator*(tmat3x4<T, P> const & m1, tmat3x3<T, P> const & m2);</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  GLM_FUNC_DECL tmat3x4<T, P> operator/(tmat3x4<T, P> const & m, T scalar);</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  GLM_FUNC_DECL tmat3x4<T, P> operator/(T scalar, tmat3x4<T, P> const & m);</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> </div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="comment">// -- Boolean operators --</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> operator==(tmat3x4<T, P> const & m1, tmat3x4<T, P> const & m2);</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> operator!=(tmat3x4<T, P> const & m1, tmat3x4<T, P> const & m2);</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="preprocessor">#ifndef GLM_EXTERNAL_TEMPLATE</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="preprocessor">#include "type_mat3x4.inl"</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="preprocessor">#endif</span></div>
+<div class="ttc" id="a00130_html"><div class="ttname"><a href="a00130.html">type_vec3.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00114_html"><div class="ttname"><a href="a00114.html">type_mat.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00131_html"><div class="ttname"><a href="a00131.html">type_vec4.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00148_html_ga18d45e3d4c7705e67ccfabd99e521604"><div class="ttname"><a href="a00148.html#ga18d45e3d4c7705e67ccfabd99e521604">glm::length</a></div><div class="ttdeci">GLM_FUNC_DECL T length(vecType< T, P > const &x)</div><div class="ttdoc">Returns the length of x, i.e., sqrt(x * x). </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00121.html b/src/third_party/glm/doc/api/a00121.html
new file mode 100644
index 0000000..7f716fb
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00121.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: type_mat4x2.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">type_mat4x2.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00121_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+
+<p>Definition in file <a class="el" href="a00121_source.html">type_mat4x2.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00121_source.html b/src/third_party/glm/doc/api/a00121_source.html
new file mode 100644
index 0000000..0e09dbe
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00121_source.html
@@ -0,0 +1,240 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: type_mat4x2.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">type_mat4x2.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00121.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include "../fwd.hpp"</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#include "<a class="code" href="a00129.html">type_vec2.hpp</a>"</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor">#include "<a class="code" href="a00131.html">type_vec4.hpp</a>"</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#include "<a class="code" href="a00114.html">type_mat.hpp</a>"</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor">#include <limits></span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor">#include <cstddef></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> </div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> {</div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P = defaultp></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>  <span class="keyword">struct </span>tmat4x2</div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>  {</div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  <span class="keyword">typedef</span> tvec2<T, P> col_type;</div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <span class="keyword">typedef</span> tvec4<T, P> row_type;</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <span class="keyword">typedef</span> tmat4x2<T, P> type;</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <span class="keyword">typedef</span> tmat2x4<T, P> transpose_type;</div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keyword">typedef</span> T value_type;</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  col_type value[4];</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="comment">// -- Constructors --</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  GLM_FUNC_DECL tmat4x2() GLM_DEFAULT_CTOR;</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  GLM_FUNC_DECL tmat4x2(tmat4x2<T, P> const & m) GLM_DEFAULT;</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  template <precision Q></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  GLM_FUNC_DECL tmat4x2(tmat4x2<T, Q> const & m);</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tmat4x2(ctor);</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  GLM_FUNC_DECL explicit tmat4x2(T scalar);</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  GLM_FUNC_DECL tmat4x2(</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  T x0, T y0,</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  T x1, T y1,</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  T x2, T y2,</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  T x3, T y3);</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  GLM_FUNC_DECL tmat4x2(</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  col_type const & v0,</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  col_type const & v1,</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  col_type const & v2,</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  col_type const & v3);</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="comment">// -- Conversions --</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  template <</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  typename X1, typename Y1,</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  typename X2, typename Y2,</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  typename X3, typename Y3,</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  typename X4, typename Y4></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  GLM_FUNC_DECL tmat4x2(</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  X1 x1, Y1 y1,</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  X2 x2, Y2 y2,</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  X3 x3, Y3 y3,</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  X4 x4, Y4 y4);</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  template <typename V1, typename V2, typename V3, typename V4></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  GLM_FUNC_DECL tmat4x2(</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  tvec2<V1, P> const & v1,</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  tvec2<V2, P> const & v2,</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  tvec2<V3, P> const & v3,</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  tvec2<V4, P> const & v4);</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="comment">// -- Matrix conversions --</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  template <typename U, precision Q></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat4x2(tmat4x2<U, Q> const & m);</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat4x2(tmat2x2<T, P> const & x);</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat4x2(tmat3x3<T, P> const & x);</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat4x2(tmat4x4<T, P> const & x);</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat4x2(tmat2x3<T, P> const & x);</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat4x2(tmat3x2<T, P> const & x);</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat4x2(tmat2x4<T, P> const & x);</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat4x2(tmat4x3<T, P> const & x);</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat4x2(tmat3x4<T, P> const & x);</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="comment">// -- Accesses --</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  typedef length_t length_type;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  GLM_FUNC_DECL GLM_CONSTEXPR length_type <a class="code" href="a00148.html#ga18d45e3d4c7705e67ccfabd99e521604">length</a>() const;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  GLM_FUNC_DECL col_type & operator[](length_type i);</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  GLM_FUNC_DECL col_type const & operator[](length_type i) const;</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="comment">// -- Unary arithmetic operators --</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  GLM_FUNC_DECL tmat4x2<T, P> & operator=(tmat4x2<T, P> const & m) GLM_DEFAULT;</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  template <typename U></div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  GLM_FUNC_DECL tmat4x2<T, P> & operator=(tmat4x2<U, P> const & m);</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  template <typename U></div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  GLM_FUNC_DECL tmat4x2<T, P> & operator+=(U s);</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  template <typename U></div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  GLM_FUNC_DECL tmat4x2<T, P> & operator+=(tmat4x2<U, P> const & m);</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  template <typename U></div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  GLM_FUNC_DECL tmat4x2<T, P> & operator-=(U s);</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  template <typename U></div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  GLM_FUNC_DECL tmat4x2<T, P> & operator-=(tmat4x2<U, P> const & m);</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  template <typename U></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  GLM_FUNC_DECL tmat4x2<T, P> & operator*=(U s);</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  template <typename U></div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  GLM_FUNC_DECL tmat4x2<T, P> & operator/=(U s);</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="comment">// -- Increment and decrement operators --</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  GLM_FUNC_DECL tmat4x2<T, P> & operator++ ();</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  GLM_FUNC_DECL tmat4x2<T, P> & operator-- ();</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  GLM_FUNC_DECL tmat4x2<T, P> operator++(<span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  GLM_FUNC_DECL tmat4x2<T, P> operator--(<span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  };</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="comment">// -- Unary operators --</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  GLM_FUNC_DECL tmat4x2<T, P> operator+(tmat4x2<T, P> const & m);</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  GLM_FUNC_DECL tmat4x2<T, P> operator-(tmat4x2<T, P> const & m);</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="comment">// -- Binary operators --</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  GLM_FUNC_DECL tmat4x2<T, P> operator+(tmat4x2<T, P> const & m, T scalar);</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  GLM_FUNC_DECL tmat4x2<T, P> operator+(tmat4x2<T, P> const & m1, tmat4x2<T, P> const & m2);</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  GLM_FUNC_DECL tmat4x2<T, P> operator-(tmat4x2<T, P> const & m, T scalar);</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> </div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  GLM_FUNC_DECL tmat4x2<T, P> operator-(tmat4x2<T, P> const & m1, tmat4x2<T, P> const & m2);</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  GLM_FUNC_DECL tmat4x2<T, P> operator*(tmat4x2<T, P> const & m, T scalar);</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  GLM_FUNC_DECL tmat4x2<T, P> operator*(T scalar, tmat4x2<T, P> const & m);</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  GLM_FUNC_DECL typename tmat4x2<T, P>::col_type operator*(tmat4x2<T, P> const & m, typename tmat4x2<T, P>::row_type const & v);</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  GLM_FUNC_DECL typename tmat4x2<T, P>::row_type operator*(typename tmat4x2<T, P>::col_type const & v, tmat4x2<T, P> const & m);</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  GLM_FUNC_DECL tmat2x2<T, P> operator*(tmat4x2<T, P> const & m1, tmat2x4<T, P> const & m2);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  GLM_FUNC_DECL tmat3x2<T, P> operator*(tmat4x2<T, P> const & m1, tmat3x4<T, P> const & m2);</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  GLM_FUNC_DECL tmat4x2<T, P> operator*(tmat4x2<T, P> const & m1, tmat4x4<T, P> const & m2);</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  GLM_FUNC_DECL tmat4x2<T, P> operator/(tmat4x2<T, P> const & m, T scalar);</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  GLM_FUNC_DECL tmat4x2<T, P> operator/(T scalar, tmat4x2<T, P> const & m);</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="comment">// -- Boolean operators --</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> </div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> operator==(tmat4x2<T, P> const & m1, tmat4x2<T, P> const & m2);</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> </div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> operator!=(tmat4x2<T, P> const & m1, tmat4x2<T, P> const & m2);</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="preprocessor">#ifndef GLM_EXTERNAL_TEMPLATE</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="preprocessor">#include "type_mat4x2.inl"</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="preprocessor">#endif</span></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00114_html"><div class="ttname"><a href="a00114.html">type_mat.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00129_html"><div class="ttname"><a href="a00129.html">type_vec2.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00131_html"><div class="ttname"><a href="a00131.html">type_vec4.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00148_html_ga18d45e3d4c7705e67ccfabd99e521604"><div class="ttname"><a href="a00148.html#ga18d45e3d4c7705e67ccfabd99e521604">glm::length</a></div><div class="ttdeci">GLM_FUNC_DECL T length(vecType< T, P > const &x)</div><div class="ttdoc">Returns the length of x, i.e., sqrt(x * x). </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00122.html b/src/third_party/glm/doc/api/a00122.html
new file mode 100644
index 0000000..1e66573
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00122.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: type_mat4x3.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">type_mat4x3.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00122_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+
+<p>Definition in file <a class="el" href="a00122_source.html">type_mat4x3.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00122_source.html b/src/third_party/glm/doc/api/a00122_source.html
new file mode 100644
index 0000000..16e205b
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00122_source.html
@@ -0,0 +1,240 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: type_mat4x3.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">type_mat4x3.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00122.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include "../fwd.hpp"</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#include "<a class="code" href="a00130.html">type_vec3.hpp</a>"</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor">#include "<a class="code" href="a00131.html">type_vec4.hpp</a>"</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#include "<a class="code" href="a00114.html">type_mat.hpp</a>"</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor">#include <limits></span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor">#include <cstddef></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> </div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> {</div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P = defaultp></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>  <span class="keyword">struct </span>tmat4x3</div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>  {</div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  <span class="keyword">typedef</span> tvec3<T, P> col_type;</div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <span class="keyword">typedef</span> tvec4<T, P> row_type;</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <span class="keyword">typedef</span> tmat4x3<T, P> type;</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <span class="keyword">typedef</span> tmat3x4<T, P> transpose_type;</div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keyword">typedef</span> T value_type;</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  col_type value[4];</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="comment">// -- Constructors --</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  GLM_FUNC_DECL tmat4x3() GLM_DEFAULT_CTOR;</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  GLM_FUNC_DECL tmat4x3(tmat4x3<T, P> const & m) GLM_DEFAULT;</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  template <precision Q></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  GLM_FUNC_DECL tmat4x3(tmat4x3<T, Q> const & m);</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tmat4x3(ctor);</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  GLM_FUNC_DECL explicit tmat4x3(T const & x);</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  GLM_FUNC_DECL tmat4x3(</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  T const & x0, T const & y0, T const & z0,</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  T const & x1, T const & y1, T const & z1,</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  T const & x2, T const & y2, T const & z2,</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  T const & x3, T const & y3, T const & z3);</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  GLM_FUNC_DECL tmat4x3(</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  col_type const & v0,</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  col_type const & v1,</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  col_type const & v2,</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  col_type const & v3);</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="comment">// -- Conversions --</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  template <</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  typename X1, typename Y1, typename Z1,</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  typename X2, typename Y2, typename Z2,</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  typename X3, typename Y3, typename Z3,</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  typename X4, typename Y4, typename Z4></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  GLM_FUNC_DECL tmat4x3(</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  X1 const & x1, Y1 const & y1, Z1 const & z1,</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  X2 const & x2, Y2 const & y2, Z2 const & z2,</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  X3 const & x3, Y3 const & y3, Z3 const & z3,</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  X4 const & x4, Y4 const & y4, Z4 const & z4);</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  template <typename V1, typename V2, typename V3, typename V4></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  GLM_FUNC_DECL tmat4x3(</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  tvec3<V1, P> const & v1,</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  tvec3<V2, P> const & v2,</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  tvec3<V3, P> const & v3,</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  tvec3<V4, P> const & v4);</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="comment">// -- Matrix conversions --</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  template <typename U, precision Q></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat4x3(tmat4x3<U, Q> const & m);</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat4x3(tmat2x2<T, P> const & x);</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat4x3(tmat3x3<T, P> const & x);</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat4x3(tmat4x4<T, P> const & x);</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat4x3(tmat2x3<T, P> const & x);</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat4x3(tmat3x2<T, P> const & x);</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat4x3(tmat2x4<T, P> const & x);</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat4x3(tmat4x2<T, P> const & x);</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat4x3(tmat3x4<T, P> const & x);</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="comment">// -- Accesses --</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  typedef length_t length_type;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  GLM_FUNC_DECL GLM_CONSTEXPR length_type <a class="code" href="a00148.html#ga18d45e3d4c7705e67ccfabd99e521604">length</a>() const;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  GLM_FUNC_DECL col_type & operator[](length_type i);</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  GLM_FUNC_DECL col_type const & operator[](length_type i) const;</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="comment">// -- Unary arithmetic operators --</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  GLM_FUNC_DECL tmat4x3<T, P> & operator=(tmat4x3<T, P> const & m) GLM_DEFAULT;</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  template <typename U></div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  GLM_FUNC_DECL tmat4x3<T, P> & operator=(tmat4x3<U, P> const & m);</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  template <typename U></div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  GLM_FUNC_DECL tmat4x3<T, P> & operator+=(U s);</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  template <typename U></div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  GLM_FUNC_DECL tmat4x3<T, P> & operator+=(tmat4x3<U, P> const & m);</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  template <typename U></div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  GLM_FUNC_DECL tmat4x3<T, P> & operator-=(U s);</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  template <typename U></div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  GLM_FUNC_DECL tmat4x3<T, P> & operator-=(tmat4x3<U, P> const & m);</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  template <typename U></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  GLM_FUNC_DECL tmat4x3<T, P> & operator*=(U s);</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  template <typename U></div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  GLM_FUNC_DECL tmat4x3<T, P> & operator/=(U s);</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="comment">// -- Increment and decrement operators --</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  GLM_FUNC_DECL tmat4x3<T, P> & operator++();</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  GLM_FUNC_DECL tmat4x3<T, P> & operator--();</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  GLM_FUNC_DECL tmat4x3<T, P> operator++(<span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  GLM_FUNC_DECL tmat4x3<T, P> operator--(<span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  };</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="comment">// -- Unary operators --</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  GLM_FUNC_DECL tmat4x3<T, P> operator+(tmat4x3<T, P> const & m);</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  GLM_FUNC_DECL tmat4x3<T, P> operator-(tmat4x3<T, P> const & m);</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="comment">// -- Binary operators --</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  GLM_FUNC_DECL tmat4x3<T, P> operator+(tmat4x3<T, P> const & m, T const & s);</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  GLM_FUNC_DECL tmat4x3<T, P> operator+(tmat4x3<T, P> const & m1, tmat4x3<T, P> const & m2);</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  GLM_FUNC_DECL tmat4x3<T, P> operator-(tmat4x3<T, P> const & m, T const & s);</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> </div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  GLM_FUNC_DECL tmat4x3<T, P> operator-(tmat4x3<T, P> const & m1, tmat4x3<T, P> const & m2);</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  GLM_FUNC_DECL tmat4x3<T, P> operator*(tmat4x3<T, P> const & m, T const & s);</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  GLM_FUNC_DECL tmat4x3<T, P> operator*(T const & s, tmat4x3<T, P> const & m);</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  GLM_FUNC_DECL typename tmat4x3<T, P>::col_type operator*(tmat4x3<T, P> const & m, typename tmat4x3<T, P>::row_type const & v);</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  GLM_FUNC_DECL typename tmat4x3<T, P>::row_type operator*(typename tmat4x3<T, P>::col_type const & v, tmat4x3<T, P> const & m);</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  GLM_FUNC_DECL tmat2x3<T, P> operator*(tmat4x3<T, P> const & m1, tmat2x4<T, P> const & m2);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  GLM_FUNC_DECL tmat3x3<T, P> operator*(tmat4x3<T, P> const & m1, tmat3x4<T, P> const & m2);</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  GLM_FUNC_DECL tmat4x3<T, P> operator*(tmat4x3<T, P> const & m1, tmat4x4<T, P> const & m2);</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  GLM_FUNC_DECL tmat4x3<T, P> operator/(tmat4x3<T, P> const & m, T const & s);</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  GLM_FUNC_DECL tmat4x3<T, P> operator/(T const & s, tmat4x3<T, P> const & m);</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="comment">// -- Boolean operators --</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> </div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> operator==(tmat4x3<T, P> const & m1, tmat4x3<T, P> const & m2);</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> </div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> operator!=(tmat4x3<T, P> const & m1, tmat4x3<T, P> const & m2);</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="preprocessor">#ifndef GLM_EXTERNAL_TEMPLATE</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="preprocessor">#include "type_mat4x3.inl"</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="preprocessor">#endif //GLM_EXTERNAL_TEMPLATE</span></div>
+<div class="ttc" id="a00130_html"><div class="ttname"><a href="a00130.html">type_vec3.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00114_html"><div class="ttname"><a href="a00114.html">type_mat.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00131_html"><div class="ttname"><a href="a00131.html">type_vec4.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00148_html_ga18d45e3d4c7705e67ccfabd99e521604"><div class="ttname"><a href="a00148.html#ga18d45e3d4c7705e67ccfabd99e521604">glm::length</a></div><div class="ttdeci">GLM_FUNC_DECL T length(vecType< T, P > const &x)</div><div class="ttdoc">Returns the length of x, i.e., sqrt(x * x). </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00123.html b/src/third_party/glm/doc/api/a00123.html
new file mode 100644
index 0000000..c19a85c
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00123.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: type_mat4x4.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">type_mat4x4.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00123_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+
+<p>Definition in file <a class="el" href="a00123_source.html">type_mat4x4.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00123_source.html b/src/third_party/glm/doc/api/a00123_source.html
new file mode 100644
index 0000000..7cd565d
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00123_source.html
@@ -0,0 +1,257 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: type_mat4x4.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">type_mat4x4.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00123.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include "../fwd.hpp"</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#include "<a class="code" href="a00131.html">type_vec4.hpp</a>"</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor">#include "<a class="code" href="a00114.html">type_mat.hpp</a>"</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#include <limits></span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor">#include <cstddef></span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> </div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> {</div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P = defaultp></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>  <span class="keyword">struct </span>tmat4x4</div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>  {</div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>  <span class="keyword">typedef</span> tvec4<T, P> col_type;</div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  <span class="keyword">typedef</span> tvec4<T, P> row_type;</div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <span class="keyword">typedef</span> tmat4x4<T, P> type;</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <span class="keyword">typedef</span> tmat4x4<T, P> transpose_type;</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <span class="keyword">typedef</span> T value_type;</div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  col_type value[4];</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="comment">// -- Constructors --</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  GLM_FUNC_DECL tmat4x4() GLM_DEFAULT_CTOR;</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  GLM_FUNC_DECL tmat4x4(tmat4x4<T, P> const & m) GLM_DEFAULT;</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  template <precision Q></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  GLM_FUNC_DECL tmat4x4(tmat4x4<T, Q> const & m);</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  GLM_FUNC_DECL explicit tmat4x4(ctor);</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  GLM_FUNC_DECL explicit tmat4x4(T const & x);</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  GLM_FUNC_DECL tmat4x4(</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  T const & x0, T const & y0, T const & z0, T const & w0,</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  T const & x1, T const & y1, T const & z1, T const & w1,</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  T const & x2, T const & y2, T const & z2, T const & w2,</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  T const & x3, T const & y3, T const & z3, T const & w3);</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  GLM_FUNC_DECL tmat4x4(</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  col_type const & v0,</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  col_type const & v1,</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  col_type const & v2,</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  col_type const & v3);</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="comment">// -- Conversions --</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  template <</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  typename X1, typename Y1, typename Z1, typename W1,</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  typename X2, typename Y2, typename Z2, typename W2,</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  typename X3, typename Y3, typename Z3, typename W3,</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  typename X4, typename Y4, typename Z4, typename W4></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  GLM_FUNC_DECL tmat4x4(</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  X1 const & x1, Y1 const & y1, Z1 const & z1, W1 const & w1,</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  X2 const & x2, Y2 const & y2, Z2 const & z2, W2 const & w2,</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  X3 const & x3, Y3 const & y3, Z3 const & z3, W3 const & w3,</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  X4 const & x4, Y4 const & y4, Z4 const & z4, W4 const & w4);</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  template <typename V1, typename V2, typename V3, typename V4></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  GLM_FUNC_DECL tmat4x4(</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  tvec4<V1, P> const & v1,</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  tvec4<V2, P> const & v2,</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  tvec4<V3, P> const & v3,</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  tvec4<V4, P> const & v4);</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="comment">// -- Matrix conversions --</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  template <typename U, precision Q></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat4x4(tmat4x4<U, Q> const & m);</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat4x4(tmat2x2<T, P> const & x);</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat4x4(tmat3x3<T, P> const & x);</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat4x4(tmat2x3<T, P> const & x);</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat4x4(tmat3x2<T, P> const & x);</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat4x4(tmat2x4<T, P> const & x);</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat4x4(tmat4x2<T, P> const & x);</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat4x4(tmat3x4<T, P> const & x);</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  GLM_FUNC_DECL GLM_EXPLICIT tmat4x4(tmat4x3<T, P> const & x);</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="comment">// -- Accesses --</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  typedef length_t length_type;</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  GLM_FUNC_DECL GLM_CONSTEXPR length_type <a class="code" href="a00148.html#ga18d45e3d4c7705e67ccfabd99e521604">length</a>() const;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  GLM_FUNC_DECL col_type & operator[](length_type i);</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  GLM_FUNC_DECL col_type const & operator[](length_type i) const;</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="comment">// -- Unary arithmetic operators --</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  GLM_FUNC_DECL tmat4x4<T, P> & operator=(tmat4x4<T, P> const & m) GLM_DEFAULT;</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  template <typename U></div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  GLM_FUNC_DECL tmat4x4<T, P> & operator=(tmat4x4<U, P> const & m);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  template <typename U></div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  GLM_FUNC_DECL tmat4x4<T, P> & operator+=(U s);</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  template <typename U></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  GLM_FUNC_DECL tmat4x4<T, P> & operator+=(tmat4x4<U, P> const & m);</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  template <typename U></div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  GLM_FUNC_DECL tmat4x4<T, P> & operator-=(U s);</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  template <typename U></div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  GLM_FUNC_DECL tmat4x4<T, P> & operator-=(tmat4x4<U, P> const & m);</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  template <typename U></div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  GLM_FUNC_DECL tmat4x4<T, P> & operator*=(U s);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  template <typename U></div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  GLM_FUNC_DECL tmat4x4<T, P> & operator*=(tmat4x4<U, P> const & m);</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  template <typename U></div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  GLM_FUNC_DECL tmat4x4<T, P> & operator/=(U s);</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  template <typename U></div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  GLM_FUNC_DECL tmat4x4<T, P> & operator/=(tmat4x4<U, P> const & m);</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="comment">// -- Increment and decrement operators --</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  GLM_FUNC_DECL tmat4x4<T, P> & operator++();</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  GLM_FUNC_DECL tmat4x4<T, P> & operator--();</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  GLM_FUNC_DECL tmat4x4<T, P> operator++(<span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  GLM_FUNC_DECL tmat4x4<T, P> operator--(<span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  };</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="comment">// -- Unary operators --</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  GLM_FUNC_DECL tmat4x4<T, P> operator+(tmat4x4<T, P> const & m);</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  GLM_FUNC_DECL tmat4x4<T, P> operator-(tmat4x4<T, P> const & m);</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="comment">// -- Binary operators --</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  GLM_FUNC_DECL tmat4x4<T, P> operator+(tmat4x4<T, P> const & m, T const & s);</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  GLM_FUNC_DECL tmat4x4<T, P> operator+(T const & s, tmat4x4<T, P> const & m);</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> </div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  GLM_FUNC_DECL tmat4x4<T, P> operator+(tmat4x4<T, P> const & m1, tmat4x4<T, P> const & m2);</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  GLM_FUNC_DECL tmat4x4<T, P> operator-(tmat4x4<T, P> const & m, T const & s);</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  GLM_FUNC_DECL tmat4x4<T, P> operator-(T const & s, tmat4x4<T, P> const & m);</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  GLM_FUNC_DECL tmat4x4<T, P> operator-(tmat4x4<T, P> const & m1, tmat4x4<T, P> const & m2);</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  GLM_FUNC_DECL tmat4x4<T, P> operator*(tmat4x4<T, P> const & m, T const & s);</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  GLM_FUNC_DECL tmat4x4<T, P> operator*(T const & s, tmat4x4<T, P> const & m);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  GLM_FUNC_DECL typename tmat4x4<T, P>::col_type operator*(tmat4x4<T, P> const & m, typename tmat4x4<T, P>::row_type const & v);</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  GLM_FUNC_DECL typename tmat4x4<T, P>::row_type operator*(typename tmat4x4<T, P>::col_type const & v, tmat4x4<T, P> const & m);</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  GLM_FUNC_DECL tmat2x4<T, P> operator*(tmat4x4<T, P> const & m1, tmat2x4<T, P> const & m2);</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  GLM_FUNC_DECL tmat3x4<T, P> operator*(tmat4x4<T, P> const & m1, tmat3x4<T, P> const & m2);</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  GLM_FUNC_DECL tmat4x4<T, P> operator*(tmat4x4<T, P> const & m1, tmat4x4<T, P> const & m2);</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  GLM_FUNC_DECL tmat4x4<T, P> operator/(tmat4x4<T, P> const & m, T const & s);</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  GLM_FUNC_DECL tmat4x4<T, P> operator/(T const & s, tmat4x4<T, P> const & m);</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  GLM_FUNC_DECL typename tmat4x4<T, P>::col_type operator/(tmat4x4<T, P> const & m, typename tmat4x4<T, P>::row_type const & v);</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> </div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  GLM_FUNC_DECL typename tmat4x4<T, P>::row_type operator/(typename tmat4x4<T, P>::col_type const & v, tmat4x4<T, P> const & m);</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  GLM_FUNC_DECL tmat4x4<T, P> operator/(tmat4x4<T, P> const & m1, tmat4x4<T, P> const & m2);</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  <span class="comment">// -- Boolean operators --</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> operator==(tmat4x4<T, P> const & m1, tmat4x4<T, P> const & m2);</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> operator!=(tmat4x4<T, P> const & m1, tmat4x4<T, P> const & m2);</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="preprocessor">#ifndef GLM_EXTERNAL_TEMPLATE</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="preprocessor">#include "type_mat4x4.inl"</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="preprocessor">#endif//GLM_EXTERNAL_TEMPLATE</span></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00114_html"><div class="ttname"><a href="a00114.html">type_mat.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00131_html"><div class="ttname"><a href="a00131.html">type_vec4.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00148_html_ga18d45e3d4c7705e67ccfabd99e521604"><div class="ttname"><a href="a00148.html#ga18d45e3d4c7705e67ccfabd99e521604">glm::length</a></div><div class="ttdeci">GLM_FUNC_DECL T length(vecType< T, P > const &x)</div><div class="ttdoc">Returns the length of x, i.e., sqrt(x * x). </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00124.html b/src/third_party/glm/doc/api/a00124.html
new file mode 100644
index 0000000..304e3f3
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00124.html
@@ -0,0 +1,71 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: type_precision.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_9440d7c11b99dcd7e5d369c7cf9802fe.html">gtc</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">type_precision.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00124_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00177.html">GLM_GTC_type_precision</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd>
+<dd>
+gtc_half_float (dependence) </dd>
+<dd>
+<a class="el" href="a00172.html" title="Defines a templated quaternion type and several quaternion operations. ">GLM_GTC_quaternion</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00124_source.html">type_precision.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00124_source.html b/src/third_party/glm/doc/api/a00124_source.html
new file mode 100644
index 0000000..b312800
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00124_source.html
@@ -0,0 +1,692 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: type_precision.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_9440d7c11b99dcd7e5d369c7cf9802fe.html">gtc</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">type_precision.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00124.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "../gtc/quaternion.hpp"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "../gtc/vec1.hpp"</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "../vec2.hpp"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "../vec3.hpp"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "../vec4.hpp"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "../mat2x2.hpp"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "../mat2x3.hpp"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include "../mat2x4.hpp"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "../mat3x2.hpp"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include "../mat3x3.hpp"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include "../mat3x4.hpp"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include "../mat4x2.hpp"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include "../mat4x3.hpp"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include "../mat4x4.hpp"</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor"># pragma message("GLM: GLM_GTC_type_precision extension included")</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> {</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="comment">// Signed int vector types </span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keyword">typedef</span> detail::int8 <a class="code" href="a00177.html#ga760bcf26fdb23a2c3ecad3c928a19ae6">lowp_int8</a>;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keyword">typedef</span> detail::int16 <a class="code" href="a00177.html#ga698e36b01167fc0f037889334dce8def">lowp_int16</a>;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keyword">typedef</span> detail::int32 <a class="code" href="a00177.html#ga864aabca5f3296e176e0c3ed9cc16b02">lowp_int32</a>;</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keyword">typedef</span> detail::int64 <a class="code" href="a00177.html#gaf645b1a60203b39c0207baff5e3d8c3c">lowp_int64</a>;</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keyword">typedef</span> detail::int8 <a class="code" href="a00177.html#ga119c41d73fe9977358174eb3ac1035a3">lowp_int8_t</a>;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  </div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keyword">typedef</span> detail::int16 <a class="code" href="a00177.html#ga8b2cd8d31eb345b2d641d9261c38db1a">lowp_int16_t</a>;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keyword">typedef</span> detail::int32 <a class="code" href="a00177.html#ga0350631d35ff800e6133ac6243b13cbc">lowp_int32_t</a>;</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keyword">typedef</span> detail::int64 <a class="code" href="a00177.html#gaebf341fc4a5be233f7dde962c2e33847">lowp_int64_t</a>;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keyword">typedef</span> detail::int8 <a class="code" href="a00177.html#ga552a6bde5e75984efb0f863278da2e54">lowp_i8</a>;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  </div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="keyword">typedef</span> detail::int16 <a class="code" href="a00177.html#ga392b673fd10847bfb78fb808c6cf8ff7">lowp_i16</a>;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="keyword">typedef</span> detail::int32 <a class="code" href="a00177.html#ga7ff73a45cea9613ebf1a9fad0b9f82ac">lowp_i32</a>;</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <span class="keyword">typedef</span> detail::int64 <a class="code" href="a00177.html#ga354736e0c645099cd44c42fb2f87c2b8">lowp_i64</a>;</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="keyword">typedef</span> detail::int8 <a class="code" href="a00177.html#ga6fbd69cbdaa44345bff923a2cf63de7e">mediump_int8</a>;</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  </div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <span class="keyword">typedef</span> detail::int16 <a class="code" href="a00177.html#gadff3608baa4b5bd3ed28f95c1c2c345d">mediump_int16</a>;</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <span class="keyword">typedef</span> detail::int32 <a class="code" href="a00177.html#ga5244cef85d6e870e240c76428a262ae8">mediump_int32</a>;</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keyword">typedef</span> detail::int64 <a class="code" href="a00177.html#ga7b968f2b86a0442a89c7359171e1d866">mediump_int64</a>;</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keyword">typedef</span> detail::int8 <a class="code" href="a00177.html#ga6d7b3789ecb932c26430009478cac7ae">mediump_int8_t</a>;</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  </div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="keyword">typedef</span> detail::int16 <a class="code" href="a00177.html#ga80e72fe94c88498537e8158ba7591c54">mediump_int16_t</a>;</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keyword">typedef</span> detail::int32 <a class="code" href="a00177.html#ga26fc7ced1ad7ca5024f1c973c8dc9180">mediump_int32_t</a>;</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keyword">typedef</span> detail::int64 <a class="code" href="a00177.html#gac3bc41bcac61d1ba8f02a6f68ce23f64">mediump_int64_t</a>;</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <span class="keyword">typedef</span> detail::int8 <a class="code" href="a00177.html#gacf1ded173e1e2d049c511d095b259e21">mediump_i8</a>;</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  </div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="keyword">typedef</span> detail::int16 <a class="code" href="a00177.html#ga62a17cddeb4dffb4e18fe3aea23f051a">mediump_i16</a>;</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <span class="keyword">typedef</span> detail::int32 <a class="code" href="a00177.html#gaf5e94bf2a20af7601787c154751dc2e1">mediump_i32</a>;</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="keyword">typedef</span> detail::int64 <a class="code" href="a00177.html#ga3ebcb1f6d8d8387253de8bccb058d77f">mediump_i64</a>;</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keyword">typedef</span> detail::int8 <a class="code" href="a00177.html#gad0549c902a96a7164e4ac858d5f39dbf">highp_int8</a>;</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  </div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keyword">typedef</span> detail::int16 <a class="code" href="a00177.html#ga5fde0fa4a3852a9dd5d637a92ee74718">highp_int16</a>;</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <span class="keyword">typedef</span> detail::int32 <a class="code" href="a00177.html#ga84ed04b4e0de18c977e932d617e7c223">highp_int32</a>;</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <span class="keyword">typedef</span> detail::int64 <a class="code" href="a00177.html#ga226a8d52b4e3f77aaa6231135e886aac">highp_int64</a>;</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="keyword">typedef</span> detail::int8 <a class="code" href="a00177.html#ga1085c50dd8fbeb5e7e609b1c127492a5">highp_int8_t</a>;</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  </div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="keyword">typedef</span> detail::int16 <a class="code" href="a00177.html#gacaea06d0a79ef3172e887a7a6ba434ff">highp_int16_t</a>;</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <span class="keyword">typedef</span> detail::int32 <a class="code" href="a00177.html#ga2c71c8bd9e2fe7d2e93ca250d8b6157f">highp_int32_t</a>;</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  <span class="keyword">typedef</span> detail::int64 <a class="code" href="a00177.html#ga73c6abb280a45feeff60f9accaee91f3">highp_int64_t</a>;</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <span class="keyword">typedef</span> detail::int8 <a class="code" href="a00177.html#gacb88796f2d08ef253d0345aff20c3aee">highp_i8</a>;</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  </div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="keyword">typedef</span> detail::int16 <a class="code" href="a00177.html#ga0336abc2604dd2c20c30e036454b64f8">highp_i16</a>;</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <span class="keyword">typedef</span> detail::int32 <a class="code" href="a00177.html#ga727675ac6b5d2fc699520e0059735e25">highp_i32</a>;</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <span class="keyword">typedef</span> detail::int64 <a class="code" href="a00177.html#gac25db6d2b1e2a0f351b77ba3409ac4cd">highp_i64</a>;</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  </div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <span class="keyword">typedef</span> detail::int8 int8;</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  </div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <span class="keyword">typedef</span> detail::int16 int16;</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> </div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  <span class="keyword">typedef</span> detail::int32 int32;</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <span class="keyword">typedef</span> detail::int64 int64;</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="preprocessor">#if GLM_HAS_EXTENDED_INTEGER_TYPE</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <span class="keyword">using</span> <a class="code" href="a00177.html#ga4bf09d8838a86866b39ee6e109341645">std::int8_t</a>;</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  <span class="keyword">using</span> <a class="code" href="a00177.html#gae8f5e3e964ca2ae240adc2c0d74adede">std::int16_t</a>;</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <span class="keyword">using</span> <a class="code" href="a00177.html#ga042ef09ff2f0cb24a36f541bcb3a3710">std::int32_t</a>;</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <span class="keyword">using</span> <a class="code" href="a00177.html#ga322a7d7d2c2c68994dc872a33de63c61">std::int64_t</a>;</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <span class="keyword">typedef</span> detail::int8 <a class="code" href="a00177.html#ga4bf09d8838a86866b39ee6e109341645">int8_t</a>;</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  </div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  <span class="keyword">typedef</span> detail::int16 <a class="code" href="a00177.html#gae8f5e3e964ca2ae240adc2c0d74adede">int16_t</a>;</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> </div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="keyword">typedef</span> detail::int32 <a class="code" href="a00177.html#ga042ef09ff2f0cb24a36f541bcb3a3710">int32_t</a>;</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> </div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <span class="keyword">typedef</span> detail::int64 <a class="code" href="a00177.html#ga322a7d7d2c2c68994dc872a33de63c61">int64_t</a>;</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> </div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="keyword">typedef</span> detail::int8 <a class="code" href="a00177.html#ga302ec977b0c0c3ea245b6c9275495355">i8</a>;</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  </div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="keyword">typedef</span> detail::int16 <a class="code" href="a00177.html#ga3ab5fe184343d394fb6c2723c3ee3699">i16</a>;</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> </div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <span class="keyword">typedef</span> detail::int32 <a class="code" href="a00177.html#ga96faea43ac5f875d2d3ffbf8d213e3eb">i32</a>;</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> </div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="keyword">typedef</span> detail::int64 <a class="code" href="a00177.html#gadb997e409103d4da18abd837e636a496">i64</a>;</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> </div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  <span class="keyword">typedef</span> tvec1<i8, defaultp> <a class="code" href="a00177.html#gab2329c5c14ff5a03b1ddec039e2c7409">i8vec1</a>;</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  </div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  <span class="keyword">typedef</span> tvec2<i8, defaultp> <a class="code" href="a00177.html#ga6414484477e4c1b4863cf91af8fd4185">i8vec2</a>;</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> </div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <span class="keyword">typedef</span> tvec3<i8, defaultp> <a class="code" href="a00177.html#gaf4b5993e794e252607f91535b62a7e0c">i8vec3</a>;</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> </div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <span class="keyword">typedef</span> tvec4<i8, defaultp> <a class="code" href="a00177.html#ga50e58885aee2cf01bb3ba472c5b1697e">i8vec4</a>;</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> </div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> </div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <span class="keyword">typedef</span> tvec1<i16, defaultp> <a class="code" href="a00177.html#ga28f03a39ac56c70f9bf3ada11cb60e3b">i16vec1</a>;</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  </div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keyword">typedef</span> tvec2<i16, defaultp> <a class="code" href="a00177.html#ga110bec18ca44c41c76c3c9e4d7b5bd79">i16vec2</a>;</div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> </div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <span class="keyword">typedef</span> tvec3<i16, defaultp> <a class="code" href="a00177.html#ga973b226a9914db682c9372fc761fb535">i16vec3</a>;</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> </div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <span class="keyword">typedef</span> tvec4<i16, defaultp> <a class="code" href="a00177.html#gad73e5e905dcf2d8cab002b4ab46e9426">i16vec4</a>;</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> </div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> </div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  <span class="keyword">typedef</span> tvec1<i32, defaultp> <a class="code" href="a00177.html#ga4cca6bbd117c45f046291fc8e9d03765">i32vec1</a>;</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  </div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="keyword">typedef</span> tvec2<i32, defaultp> <a class="code" href="a00177.html#ga3c12cef4135603fd77d8fda85808730c">i32vec2</a>;</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> </div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  <span class="keyword">typedef</span> tvec3<i32, defaultp> <a class="code" href="a00177.html#ga40cd3f391c03512f158d10a70062264e">i32vec3</a>;</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> </div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  <span class="keyword">typedef</span> tvec4<i32, defaultp> <a class="code" href="a00177.html#gae3364a8090e7e1408056e00403dfecab">i32vec4</a>;</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> </div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> </div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  <span class="keyword">typedef</span> tvec1<i64, defaultp> <a class="code" href="a00177.html#ga5b4a3e499ee165efc0dc05add9c48235">i64vec1</a>;</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  </div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <span class="keyword">typedef</span> tvec2<i64, defaultp> <a class="code" href="a00177.html#gade69872a31f066e5ae212f1af6008edb">i64vec2</a>;</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> </div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  <span class="keyword">typedef</span> tvec3<i64, defaultp> <a class="code" href="a00177.html#ga9ece7c77c7bca7a6b824ef9c600f5e5e">i64vec3</a>;</div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> </div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  <span class="keyword">typedef</span> tvec4<i64, defaultp> <a class="code" href="a00177.html#ga9756e45c8f80329257f3cbdabc3bd73c">i64vec4</a>;</div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> </div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> </div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  <span class="comment">// Unsigned int vector types</span></div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> </div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  <span class="keyword">typedef</span> detail::uint8 <a class="code" href="a00177.html#gaf49470869e9be2c059629b250619804e">lowp_uint8</a>;</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  </div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  <span class="keyword">typedef</span> detail::uint16 <a class="code" href="a00177.html#gad68bfd9f881856fc863a6ebca0b67f78">lowp_uint16</a>;</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> </div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  <span class="keyword">typedef</span> detail::uint32 <a class="code" href="a00177.html#gaa6a5b461bbf5fe20982472aa51896d4b">lowp_uint32</a>;</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> </div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  <span class="keyword">typedef</span> detail::uint64 <a class="code" href="a00177.html#gaa212b805736a759998e312cbdd550fae">lowp_uint64</a>;</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> </div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  <span class="keyword">typedef</span> detail::uint8 <a class="code" href="a00177.html#ga667b2ece2b258be898812dc2177995d1">lowp_uint8_t</a>;</div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  </div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  <span class="keyword">typedef</span> detail::uint16 <a class="code" href="a00177.html#ga91c4815f93177eb423362fd296a87e9f">lowp_uint16_t</a>;</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> </div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  <span class="keyword">typedef</span> detail::uint32 <a class="code" href="a00177.html#gaf1b735b4b1145174f4e4167d13778f9b">lowp_uint32_t</a>;</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> </div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  <span class="keyword">typedef</span> detail::uint64 <a class="code" href="a00177.html#ga8dd3a3281ae5c970ffe0c41d538aa153">lowp_uint64_t</a>;</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> </div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  <span class="keyword">typedef</span> detail::uint8 <a class="code" href="a00177.html#ga1b09f03da7ac43055c68a349d5445083">lowp_u8</a>;</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  </div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  <span class="keyword">typedef</span> detail::uint16 <a class="code" href="a00177.html#ga504ce1631cb2ac02fcf1d44d8c2aa126">lowp_u16</a>;</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> </div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  <span class="keyword">typedef</span> detail::uint32 <a class="code" href="a00177.html#ga4f072ada9552e1e480bbb3b1acde5250">lowp_u32</a>;</div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> </div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  <span class="keyword">typedef</span> detail::uint64 <a class="code" href="a00177.html#ga30069d1f02b19599cbfadf98c23ac6ed">lowp_u64</a>;</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  </div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  <span class="keyword">typedef</span> detail::uint8 <a class="code" href="a00177.html#ga1fa92a233b9110861cdbc8c2ccf0b5a3">mediump_uint8</a>;</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  </div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  <span class="keyword">typedef</span> detail::uint16 <a class="code" href="a00177.html#ga2885a6c89916911e418c06bb76b9bdbb">mediump_uint16</a>;</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> </div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  <span class="keyword">typedef</span> detail::uint32 <a class="code" href="a00177.html#ga34dd5ec1988c443bae80f1b20a8ade5f">mediump_uint32</a>;</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> </div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  <span class="keyword">typedef</span> detail::uint64 <a class="code" href="a00177.html#ga30652709815ad9404272a31957daa59e">mediump_uint64</a>;</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> </div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  <span class="keyword">typedef</span> detail::uint8 <a class="code" href="a00177.html#gadfe65c78231039e90507770db50c98c7">mediump_uint8_t</a>;</div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  </div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  <span class="keyword">typedef</span> detail::uint16 <a class="code" href="a00177.html#ga3963b1050fc65a383ee28e3f827b6e3e">mediump_uint16_t</a>;</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> </div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  <span class="keyword">typedef</span> detail::uint32 <a class="code" href="a00177.html#gaf4dae276fd29623950de14a6ca2586b5">mediump_uint32_t</a>;</div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> </div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  <span class="keyword">typedef</span> detail::uint64 <a class="code" href="a00177.html#ga9b170dd4a8f38448a2dc93987c7875e9">mediump_uint64_t</a>;</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> </div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  <span class="keyword">typedef</span> detail::uint8 <a class="code" href="a00177.html#gad1213a22bbb9e4107f07eaa4956f8281">mediump_u8</a>;</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  </div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  <span class="keyword">typedef</span> detail::uint16 <a class="code" href="a00177.html#ga9df98857be695d5a30cb30f5bfa38a80">mediump_u16</a>;</div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> </div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  <span class="keyword">typedef</span> detail::uint32 <a class="code" href="a00177.html#ga1bd0e914158bf03135f8a317de6debe9">mediump_u32</a>;</div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> </div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  <span class="keyword">typedef</span> detail::uint64 <a class="code" href="a00177.html#ga2af9490085ae3bdf36a544e9dd073610">mediump_u64</a>;</div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  </div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  <span class="keyword">typedef</span> detail::uint8 <a class="code" href="a00177.html#ga97432f9979e73e66567361fd01e4cffb">highp_uint8</a>;</div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  </div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  <span class="keyword">typedef</span> detail::uint16 <a class="code" href="a00177.html#ga746dc6da204f5622e395f492997dbf57">highp_uint16</a>;</div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> </div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  <span class="keyword">typedef</span> detail::uint32 <a class="code" href="a00177.html#ga256b12b650c3f2fb86878fd1c5db8bc3">highp_uint32</a>;</div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> </div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  <span class="keyword">typedef</span> detail::uint64 <a class="code" href="a00177.html#gaa38d732f5d4a7bc42a1b43b9d3c141ce">highp_uint64</a>;</div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> </div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  <span class="keyword">typedef</span> detail::uint8 <a class="code" href="a00177.html#gac4e00a26a2adb5f2c0a7096810df29e5">highp_uint8_t</a>;</div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  </div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  <span class="keyword">typedef</span> detail::uint16 <a class="code" href="a00177.html#gacf54c3330ef60aa3d16cb676c7bcb8c7">highp_uint16_t</a>;</div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> </div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  <span class="keyword">typedef</span> detail::uint32 <a class="code" href="a00177.html#gae978599c9711ac263ba732d4ac225b0e">highp_uint32_t</a>;</div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> </div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  <span class="keyword">typedef</span> detail::uint64 <a class="code" href="a00177.html#gaa46172d7dc1c7ffe3e78107ff88adf08">highp_uint64_t</a>;</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> </div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  <span class="keyword">typedef</span> detail::uint8 <a class="code" href="a00177.html#gacd1259f3a9e8d2a9df5be2d74322ef9c">highp_u8</a>;</div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  </div>
+<div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  <span class="keyword">typedef</span> detail::uint16 <a class="code" href="a00177.html#ga8e62c883d13f47015f3b70ed88751369">highp_u16</a>;</div>
+<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> </div>
+<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  <span class="keyword">typedef</span> detail::uint32 <a class="code" href="a00177.html#ga7a6f1929464dcc680b16381a4ee5f2cf">highp_u32</a>;</div>
+<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> </div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  <span class="keyword">typedef</span> detail::uint64 <a class="code" href="a00177.html#ga0c181fdf06a309691999926b6690c969">highp_u64</a>;</div>
+<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> </div>
+<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  <span class="keyword">typedef</span> detail::uint8 uint8;</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  </div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  <span class="keyword">typedef</span> detail::uint16 uint16;</div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> </div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  <span class="keyword">typedef</span> detail::uint32 uint32;</div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> </div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span>  <span class="keyword">typedef</span> detail::uint64 uint64;</div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> </div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> <span class="preprocessor">#if GLM_HAS_EXTENDED_INTEGER_TYPE</span></div>
+<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  <span class="keyword">using</span> <a class="code" href="a00177.html#ga28d97808322d3c92186e4a0c067d7e8e">std::uint8_t</a>;</div>
+<div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  <span class="keyword">using</span> <a class="code" href="a00177.html#ga91f91f411080c37730856ff5887f5bcf">std::uint16_t</a>;</div>
+<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  <span class="keyword">using</span> <a class="code" href="a00177.html#ga2171d9dc1fefb1c82e2817f45b622eac">std::uint32_t</a>;</div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  <span class="keyword">using</span> <a class="code" href="a00177.html#ga3999d3e7ff22025c16ddb601e14dfdee">std::uint64_t</a>;</div>
+<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  <span class="keyword">typedef</span> detail::uint8 <a class="code" href="a00177.html#ga28d97808322d3c92186e4a0c067d7e8e">uint8_t</a>;</div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  </div>
+<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  <span class="keyword">typedef</span> detail::uint16 <a class="code" href="a00177.html#ga91f91f411080c37730856ff5887f5bcf">uint16_t</a>;</div>
+<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> </div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  <span class="keyword">typedef</span> detail::uint32 <a class="code" href="a00177.html#ga2171d9dc1fefb1c82e2817f45b622eac">uint32_t</a>;</div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> </div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  <span class="keyword">typedef</span> detail::uint64 <a class="code" href="a00177.html#ga3999d3e7ff22025c16ddb601e14dfdee">uint64_t</a>;</div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> </div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  <span class="keyword">typedef</span> detail::uint8 <a class="code" href="a00177.html#gaecc7082561fc9028b844b6cf3d305d36">u8</a>;</div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span>  </div>
+<div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  <span class="keyword">typedef</span> detail::uint16 <a class="code" href="a00177.html#gaa2d7acc0adb536fab71fe261232a40ff">u16</a>;</div>
+<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> </div>
+<div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  <span class="keyword">typedef</span> detail::uint32 <a class="code" href="a00177.html#ga8165913e068444f7842302d40ba897b9">u32</a>;</div>
+<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> </div>
+<div class="line"><a name="l00517"></a><span class="lineno"> 517</span>  <span class="keyword">typedef</span> detail::uint64 <a class="code" href="a00177.html#gaf3f312156984c365e9f65620354da70b">u64</a>;</div>
+<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> </div>
+<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> </div>
+<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> </div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span>  <span class="keyword">typedef</span> tvec1<u8, defaultp> <a class="code" href="a00177.html#ga92e0c191e5cc326255284d08be3af7c5">u8vec1</a>;</div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span>  </div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  <span class="keyword">typedef</span> tvec2<u8, defaultp> <a class="code" href="a00177.html#ga61667c99caf60ce6c48ebbbac72bd91d">u8vec2</a>;</div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> </div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  <span class="keyword">typedef</span> tvec3<u8, defaultp> <a class="code" href="a00177.html#ga8ca60d0ba6d438892be6017f43747661">u8vec3</a>;</div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> </div>
+<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>  <span class="keyword">typedef</span> tvec4<u8, defaultp> <a class="code" href="a00177.html#ga114e005014d910bea07954eee24b7efb">u8vec4</a>;</div>
+<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> </div>
+<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> </div>
+<div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  <span class="keyword">typedef</span> tvec1<u16, defaultp> <a class="code" href="a00177.html#gaefa2ce8fbdbe89baffd262f46f2d5907">u16vec1</a>;</div>
+<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  </div>
+<div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  <span class="keyword">typedef</span> tvec2<u16, defaultp> <a class="code" href="a00177.html#ga426030555085ed6c39a54e73afbef962">u16vec2</a>;</div>
+<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> </div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  <span class="keyword">typedef</span> tvec3<u16, defaultp> <a class="code" href="a00177.html#ga7f5dbe417199277e449b8db0210acb71">u16vec3</a>;</div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> </div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  <span class="keyword">typedef</span> tvec4<u16, defaultp> <a class="code" href="a00177.html#gaf524c9059f0342668d8eea359bcceaae">u16vec4</a>;</div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> </div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> </div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  <span class="keyword">typedef</span> tvec1<u32, defaultp> <a class="code" href="a00177.html#ga913a8bd51e4ebccd30ad488de3c18da9">u32vec1</a>;</div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  </div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span>  <span class="keyword">typedef</span> tvec2<u32, defaultp> <a class="code" href="a00177.html#ga0741d40e2b0fea4f1c50cb325114f075">u32vec2</a>;</div>
+<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> </div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span>  <span class="keyword">typedef</span> tvec3<u32, defaultp> <a class="code" href="a00177.html#gad9b52e1c271cb9c8bfae6365d3e38a23">u32vec3</a>;</div>
+<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> </div>
+<div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  <span class="keyword">typedef</span> tvec4<u32, defaultp> <a class="code" href="a00177.html#ga155ac7e9e454e2b1f73d11e1e28a0fd6">u32vec4</a>;</div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> </div>
+<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> </div>
+<div class="line"><a name="l00574"></a><span class="lineno"> 574</span>  <span class="keyword">typedef</span> tvec1<u64, defaultp> <a class="code" href="a00177.html#ga793c9293cc687a0e342396a377c5df77">u64vec1</a>;</div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span>  </div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span>  <span class="keyword">typedef</span> tvec2<u64, defaultp> <a class="code" href="a00177.html#ga2204827de9d4ee7fa92ef497093f7d6e">u64vec2</a>;</div>
+<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> </div>
+<div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  <span class="keyword">typedef</span> tvec3<u64, defaultp> <a class="code" href="a00177.html#ga3460933f040f59f0fedb29df1e9be71c">u64vec3</a>;</div>
+<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> </div>
+<div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  <span class="keyword">typedef</span> tvec4<u64, defaultp> <a class="code" href="a00177.html#gafb6ca34df28889a5db9d244aed375411">u64vec4</a>;</div>
+<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> </div>
+<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> </div>
+<div class="line"><a name="l00590"></a><span class="lineno"> 590</span>  <span class="comment">// Float vector types</span></div>
+<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> </div>
+<div class="line"><a name="l00594"></a><span class="lineno"> 594</span>  <span class="keyword">typedef</span> detail::float32 float32;</div>
+<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> </div>
+<div class="line"><a name="l00598"></a><span class="lineno"> 598</span>  <span class="keyword">typedef</span> detail::float64 float64;</div>
+<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> </div>
+<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> </div>
+<div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  <span class="keyword">typedef</span> detail::float32 <a class="code" href="a00177.html#ga41d579d81c3d98edd0532244fa02da77">float32_t</a>;</div>
+<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> </div>
+<div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  <span class="keyword">typedef</span> detail::float64 <a class="code" href="a00177.html#ga6957c7b22f405683bb276554ca40dc37">float64_t</a>;</div>
+<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> </div>
+<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> </div>
+<div class="line"><a name="l00612"></a><span class="lineno"> 612</span>  <span class="keyword">typedef</span> float32 <a class="code" href="a00177.html#gabe6a542dd6c1d5ffd847f1b9b4c9c9b7">f32</a>;</div>
+<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> </div>
+<div class="line"><a name="l00616"></a><span class="lineno"> 616</span>  <span class="keyword">typedef</span> float64 <a class="code" href="a00177.html#ga1d794d240091678f602e8de225b8d8c9">f64</a>;</div>
+<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> </div>
+<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> </div>
+<div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  <span class="keyword">typedef</span> tvec1<float, defaultp> <a class="code" href="a00177.html#ga10d8bd3c923a5386efcf25a4117fd84f">fvec1</a>;</div>
+<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> </div>
+<div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  <span class="keyword">typedef</span> tvec2<float, defaultp> <a class="code" href="a00177.html#gaf9f4173dd9e8b2d0b663c6f80ed09ff6">fvec2</a>;</div>
+<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> </div>
+<div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  <span class="keyword">typedef</span> tvec3<float, defaultp> <a class="code" href="a00177.html#ga4ef2d77dcab241b1ef83f09edb2f1084">fvec3</a>;</div>
+<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> </div>
+<div class="line"><a name="l00633"></a><span class="lineno"> 633</span>  <span class="keyword">typedef</span> tvec4<float, defaultp> <a class="code" href="a00177.html#ga981b63d5c5f7233a29364e0a968d139b">fvec4</a>;</div>
+<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> </div>
+<div class="line"><a name="l00635"></a><span class="lineno"> 635</span>  </div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  <span class="keyword">typedef</span> tvec1<f32, defaultp> <a class="code" href="a00177.html#ga3174a49dc84a977cad7012a62f4af02f">f32vec1</a>;</div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> </div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span>  <span class="keyword">typedef</span> tvec2<f32, defaultp> <a class="code" href="a00177.html#gae0cb53ea6fe3d977fe588ce423d57cc3">f32vec2</a>;</div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> </div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  <span class="keyword">typedef</span> tvec3<f32, defaultp> <a class="code" href="a00177.html#ga19d5e0d4d3d6d226c9c6c0f39756f9ad">f32vec3</a>;</div>
+<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> </div>
+<div class="line"><a name="l00650"></a><span class="lineno"> 650</span>  <span class="keyword">typedef</span> tvec4<f32, defaultp> <a class="code" href="a00177.html#gaeb25dbb0261f82cb08da23e26d343704">f32vec4</a>;</div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> </div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> </div>
+<div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  <span class="keyword">typedef</span> tvec1<f64, defaultp> <a class="code" href="a00177.html#gac5b04f32ae3084a9131a0851e7f4cfae">f64vec1</a>;</div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> </div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span>  <span class="keyword">typedef</span> tvec2<f64, defaultp> <a class="code" href="a00177.html#gafaad77b464b5a35626c31205ac6780e3">f64vec2</a>;</div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> </div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  <span class="keyword">typedef</span> tvec3<f64, defaultp> <a class="code" href="a00177.html#gafacc3614bb1136a7756293e67d34de22">f64vec3</a>;</div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> </div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  <span class="keyword">typedef</span> tvec4<f64, defaultp> <a class="code" href="a00177.html#ga8723186104dc02eb85da386105fba75f">f64vec4</a>;</div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> </div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> </div>
+<div class="line"><a name="l00671"></a><span class="lineno"> 671</span>  <span class="comment">// Float matrix types </span></div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span> </div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span>  <span class="comment">//typedef detail::tmat1x1<f32> fmat1;</span></div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span> </div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  <span class="keyword">typedef</span> tmat2x2<f32, defaultp> <a class="code" href="a00177.html#gabb01d4ff646ee07241934b1a0cc0f985">fmat2</a>;</div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span> </div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  <span class="keyword">typedef</span> tmat3x3<f32, defaultp> <a class="code" href="a00177.html#ga5165fbee2d78f342950265b69a07353d">fmat3</a>;</div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span> </div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  <span class="keyword">typedef</span> tmat4x4<f32, defaultp> <a class="code" href="a00177.html#gab3f31d867df4874e42172ebf188a3ebd">fmat4</a>;</div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span> </div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span> </div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span>  <span class="comment">//typedef f32 fmat1x1;</span></div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span> </div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span>  <span class="keyword">typedef</span> tmat2x2<f32, defaultp> <a class="code" href="a00177.html#ga74ac2e71b650162d8f7cb2a70c2f6711">fmat2x2</a>;</div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span> </div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span>  <span class="keyword">typedef</span> tmat2x3<f32, defaultp> <a class="code" href="a00177.html#gaf17b2604c0d92bffb92375d8aa588756">fmat2x3</a>;</div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span> </div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span>  <span class="keyword">typedef</span> tmat2x4<f32, defaultp> <a class="code" href="a00177.html#ga709c97c20efa24ff1d9e83cd437b8ed5">fmat2x4</a>;</div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span> </div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span>  <span class="keyword">typedef</span> tmat3x2<f32, defaultp> <a class="code" href="a00177.html#ga9f20af6e8eca2abdcde08408948cc1ca">fmat3x2</a>;</div>
+<div class="line"><a name="l00709"></a><span class="lineno"> 709</span> </div>
+<div class="line"><a name="l00712"></a><span class="lineno"> 712</span>  <span class="keyword">typedef</span> tmat3x3<f32, defaultp> <a class="code" href="a00177.html#gad339e25c32fe6665acf028f26c1b3e22">fmat3x3</a>;</div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span> </div>
+<div class="line"><a name="l00716"></a><span class="lineno"> 716</span>  <span class="keyword">typedef</span> tmat3x4<f32, defaultp> <a class="code" href="a00177.html#gab04bc97371cb6b5f54b3688e0c81578b">fmat3x4</a>;</div>
+<div class="line"><a name="l00717"></a><span class="lineno"> 717</span> </div>
+<div class="line"><a name="l00720"></a><span class="lineno"> 720</span>  <span class="keyword">typedef</span> tmat4x2<f32, defaultp> <a class="code" href="a00177.html#gab0082a25f19f02d2d0af0fcbe5ead732">fmat4x2</a>;</div>
+<div class="line"><a name="l00721"></a><span class="lineno"> 721</span> </div>
+<div class="line"><a name="l00724"></a><span class="lineno"> 724</span>  <span class="keyword">typedef</span> tmat4x3<f32, defaultp> <a class="code" href="a00177.html#ga1a11c170f030ab34ddf037714e936cba">fmat4x3</a>;</div>
+<div class="line"><a name="l00725"></a><span class="lineno"> 725</span> </div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span>  <span class="keyword">typedef</span> tmat4x4<f32, defaultp> <a class="code" href="a00177.html#gabd79752ff357d83b49136b6299ea62d9">fmat4x4</a>;</div>
+<div class="line"><a name="l00729"></a><span class="lineno"> 729</span> </div>
+<div class="line"><a name="l00730"></a><span class="lineno"> 730</span> </div>
+<div class="line"><a name="l00733"></a><span class="lineno"> 733</span>  <span class="comment">//typedef detail::tmat1x1<f32, defaultp> f32mat1;</span></div>
+<div class="line"><a name="l00734"></a><span class="lineno"> 734</span> </div>
+<div class="line"><a name="l00737"></a><span class="lineno"> 737</span>  <span class="keyword">typedef</span> tmat2x2<f32, defaultp> <a class="code" href="a00177.html#ga1fedd5d29746afdaf2d3303a4442704e">f32mat2</a>;</div>
+<div class="line"><a name="l00738"></a><span class="lineno"> 738</span> </div>
+<div class="line"><a name="l00741"></a><span class="lineno"> 741</span>  <span class="keyword">typedef</span> tmat3x3<f32, defaultp> <a class="code" href="a00177.html#gaf4377997b299a287f7ab3358c9bd3e4c">f32mat3</a>;</div>
+<div class="line"><a name="l00742"></a><span class="lineno"> 742</span> </div>
+<div class="line"><a name="l00745"></a><span class="lineno"> 745</span>  <span class="keyword">typedef</span> tmat4x4<f32, defaultp> <a class="code" href="a00177.html#ga797fa3ab16e04456174c36238e091341">f32mat4</a>;</div>
+<div class="line"><a name="l00746"></a><span class="lineno"> 746</span> </div>
+<div class="line"><a name="l00747"></a><span class="lineno"> 747</span> </div>
+<div class="line"><a name="l00750"></a><span class="lineno"> 750</span>  <span class="comment">//typedef f32 f32mat1x1;</span></div>
+<div class="line"><a name="l00751"></a><span class="lineno"> 751</span> </div>
+<div class="line"><a name="l00754"></a><span class="lineno"> 754</span>  <span class="keyword">typedef</span> tmat2x2<f32, defaultp> <a class="code" href="a00177.html#gaf3a5016bf360977ce114deb2e01ae10a">f32mat2x2</a>;</div>
+<div class="line"><a name="l00755"></a><span class="lineno"> 755</span> </div>
+<div class="line"><a name="l00758"></a><span class="lineno"> 758</span>  <span class="keyword">typedef</span> tmat2x3<f32, defaultp> <a class="code" href="a00177.html#gad5f1043adbe803928fe7bf1a90a1f767">f32mat2x3</a>;</div>
+<div class="line"><a name="l00759"></a><span class="lineno"> 759</span> </div>
+<div class="line"><a name="l00762"></a><span class="lineno"> 762</span>  <span class="keyword">typedef</span> tmat2x4<f32, defaultp> <a class="code" href="a00177.html#ga5ed667d0247cce477f013ea31982843d">f32mat2x4</a>;</div>
+<div class="line"><a name="l00763"></a><span class="lineno"> 763</span> </div>
+<div class="line"><a name="l00766"></a><span class="lineno"> 766</span>  <span class="keyword">typedef</span> tmat3x2<f32, defaultp> <a class="code" href="a00177.html#ga8709a1ea268fa69bdf1e11616d7fbaf1">f32mat3x2</a>;</div>
+<div class="line"><a name="l00767"></a><span class="lineno"> 767</span> </div>
+<div class="line"><a name="l00770"></a><span class="lineno"> 770</span>  <span class="keyword">typedef</span> tmat3x3<f32, defaultp> <a class="code" href="a00177.html#ga1e4c52bb824ca16c6e2e5b03635669d0">f32mat3x3</a>;</div>
+<div class="line"><a name="l00771"></a><span class="lineno"> 771</span> </div>
+<div class="line"><a name="l00774"></a><span class="lineno"> 774</span>  <span class="keyword">typedef</span> tmat3x4<f32, defaultp> <a class="code" href="a00177.html#ga0100666c90176eaba80e49357d123c7f">f32mat3x4</a>;</div>
+<div class="line"><a name="l00775"></a><span class="lineno"> 775</span> </div>
+<div class="line"><a name="l00778"></a><span class="lineno"> 778</span>  <span class="keyword">typedef</span> tmat4x2<f32, defaultp> <a class="code" href="a00177.html#ga27f897bdfe4bbded9481b8947553d1ff">f32mat4x2</a>;</div>
+<div class="line"><a name="l00779"></a><span class="lineno"> 779</span> </div>
+<div class="line"><a name="l00782"></a><span class="lineno"> 782</span>  <span class="keyword">typedef</span> tmat4x3<f32, defaultp> <a class="code" href="a00177.html#gaa69e73ffb01a52499071391d395908fb">f32mat4x3</a>;</div>
+<div class="line"><a name="l00783"></a><span class="lineno"> 783</span> </div>
+<div class="line"><a name="l00786"></a><span class="lineno"> 786</span>  <span class="keyword">typedef</span> tmat4x4<f32, defaultp> <a class="code" href="a00177.html#gafe2e08549805a7ded26da2a868bedbf5">f32mat4x4</a>;</div>
+<div class="line"><a name="l00787"></a><span class="lineno"> 787</span> </div>
+<div class="line"><a name="l00788"></a><span class="lineno"> 788</span> </div>
+<div class="line"><a name="l00791"></a><span class="lineno"> 791</span>  <span class="comment">//typedef detail::tmat1x1<f64, defaultp> f64mat1;</span></div>
+<div class="line"><a name="l00792"></a><span class="lineno"> 792</span> </div>
+<div class="line"><a name="l00795"></a><span class="lineno"> 795</span>  <span class="keyword">typedef</span> tmat2x2<f64, defaultp> <a class="code" href="a00177.html#ga74b9918c90ea60ce58b3979cde963a38">f64mat2</a>;</div>
+<div class="line"><a name="l00796"></a><span class="lineno"> 796</span> </div>
+<div class="line"><a name="l00799"></a><span class="lineno"> 799</span>  <span class="keyword">typedef</span> tmat3x3<f64, defaultp> <a class="code" href="a00177.html#ga68894201dd511792a7af6cff7b5adf71">f64mat3</a>;</div>
+<div class="line"><a name="l00800"></a><span class="lineno"> 800</span> </div>
+<div class="line"><a name="l00803"></a><span class="lineno"> 803</span>  <span class="keyword">typedef</span> tmat4x4<f64, defaultp> <a class="code" href="a00177.html#ga219c683b0aa29f4f482f76d77d5c9e95">f64mat4</a>;</div>
+<div class="line"><a name="l00804"></a><span class="lineno"> 804</span> </div>
+<div class="line"><a name="l00805"></a><span class="lineno"> 805</span> </div>
+<div class="line"><a name="l00808"></a><span class="lineno"> 808</span>  <span class="comment">//typedef f64 f64mat1x1;</span></div>
+<div class="line"><a name="l00809"></a><span class="lineno"> 809</span> </div>
+<div class="line"><a name="l00812"></a><span class="lineno"> 812</span>  <span class="keyword">typedef</span> tmat2x2<f64, defaultp> <a class="code" href="a00177.html#gaeb817419c76a0766c88713d2754e6cb3">f64mat2x2</a>;</div>
+<div class="line"><a name="l00813"></a><span class="lineno"> 813</span> </div>
+<div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  <span class="keyword">typedef</span> tmat2x3<f64, defaultp> <a class="code" href="a00177.html#ga87d256f4719417e311cd0ea14264678d">f64mat2x3</a>;</div>
+<div class="line"><a name="l00817"></a><span class="lineno"> 817</span> </div>
+<div class="line"><a name="l00820"></a><span class="lineno"> 820</span>  <span class="keyword">typedef</span> tmat2x4<f64, defaultp> <a class="code" href="a00177.html#gafb18822e2eac88fa861a76cefd25d550">f64mat2x4</a>;</div>
+<div class="line"><a name="l00821"></a><span class="lineno"> 821</span> </div>
+<div class="line"><a name="l00824"></a><span class="lineno"> 824</span>  <span class="keyword">typedef</span> tmat3x2<f64, defaultp> <a class="code" href="a00177.html#ga11e5684b10e098f573ff484c1a569ae2">f64mat3x2</a>;</div>
+<div class="line"><a name="l00825"></a><span class="lineno"> 825</span> </div>
+<div class="line"><a name="l00828"></a><span class="lineno"> 828</span>  <span class="keyword">typedef</span> tmat3x3<f64, defaultp> <a class="code" href="a00177.html#gae1a5081181c96cc37ce9418f6e856cb6">f64mat3x3</a>;</div>
+<div class="line"><a name="l00829"></a><span class="lineno"> 829</span> </div>
+<div class="line"><a name="l00832"></a><span class="lineno"> 832</span>  <span class="keyword">typedef</span> tmat3x4<f64, defaultp> <a class="code" href="a00177.html#gad37a55a8ce1154083a721b4ecfd55293">f64mat3x4</a>;</div>
+<div class="line"><a name="l00833"></a><span class="lineno"> 833</span> </div>
+<div class="line"><a name="l00836"></a><span class="lineno"> 836</span>  <span class="keyword">typedef</span> tmat4x2<f64, defaultp> <a class="code" href="a00177.html#gaa669dfb59031a441de19b34a92704d57">f64mat4x2</a>;</div>
+<div class="line"><a name="l00837"></a><span class="lineno"> 837</span> </div>
+<div class="line"><a name="l00840"></a><span class="lineno"> 840</span>  <span class="keyword">typedef</span> tmat4x3<f64, defaultp> <a class="code" href="a00177.html#gaba137814a509704937746cc1e82edc32">f64mat4x3</a>;</div>
+<div class="line"><a name="l00841"></a><span class="lineno"> 841</span> </div>
+<div class="line"><a name="l00844"></a><span class="lineno"> 844</span>  <span class="keyword">typedef</span> tmat4x4<f64, defaultp> <a class="code" href="a00177.html#ga489163773b021f1800a33cc2fa730c3b">f64mat4x4</a>;</div>
+<div class="line"><a name="l00845"></a><span class="lineno"> 845</span> </div>
+<div class="line"><a name="l00846"></a><span class="lineno"> 846</span> </div>
+<div class="line"><a name="l00848"></a><span class="lineno"> 848</span>  <span class="comment">// Quaternion types</span></div>
+<div class="line"><a name="l00849"></a><span class="lineno"> 849</span> </div>
+<div class="line"><a name="l00852"></a><span class="lineno"> 852</span>  <span class="keyword">typedef</span> tquat<f32, defaultp> <a class="code" href="a00177.html#ga6966c0cb4673928c9c9da2e91006d2c0">f32quat</a>;</div>
+<div class="line"><a name="l00853"></a><span class="lineno"> 853</span> </div>
+<div class="line"><a name="l00856"></a><span class="lineno"> 856</span>  <span class="keyword">typedef</span> tquat<f64, defaultp> <a class="code" href="a00177.html#ga14c583bd625eda8cf4935a14d5dd544d">f64quat</a>;</div>
+<div class="line"><a name="l00857"></a><span class="lineno"> 857</span> </div>
+<div class="line"><a name="l00859"></a><span class="lineno"> 859</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00860"></a><span class="lineno"> 860</span> </div>
+<div class="line"><a name="l00861"></a><span class="lineno"> 861</span> <span class="preprocessor">#include "type_precision.inl"</span></div>
+<div class="ttc" id="a00177_html_ga119c41d73fe9977358174eb3ac1035a3"><div class="ttname"><a href="a00177.html#ga119c41d73fe9977358174eb3ac1035a3">glm::lowp_int8_t</a></div><div class="ttdeci">detail::int8 lowp_int8_t</div><div class="ttdoc">Low precision 8 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00116">fwd.hpp:116</a></div></div>
+<div class="ttc" id="a00177_html_ga797fa3ab16e04456174c36238e091341"><div class="ttname"><a href="a00177.html#ga797fa3ab16e04456174c36238e091341">glm::f32mat4</a></div><div class="ttdeci">f32mat4x4 f32mat4</div><div class="ttdoc">Default single-precision floating-point 4x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02457">fwd.hpp:2457</a></div></div>
+<div class="ttc" id="a00177_html_ga28f03a39ac56c70f9bf3ada11cb60e3b"><div class="ttname"><a href="a00177.html#ga28f03a39ac56c70f9bf3ada11cb60e3b">glm::i16vec1</a></div><div class="ttdeci">highp_i16vec1 i16vec1</div><div class="ttdoc">Default precision 16 bit signed integer scalar type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00444">fwd.hpp:444</a></div></div>
+<div class="ttc" id="a00177_html_ga3174a49dc84a977cad7012a62f4af02f"><div class="ttname"><a href="a00177.html#ga3174a49dc84a977cad7012a62f4af02f">glm::f32vec1</a></div><div class="ttdeci">highp_f32vec1 f32vec1</div><div class="ttdoc">Default single-precision floating-point vector of 1 components. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02397">fwd.hpp:2397</a></div></div>
+<div class="ttc" id="a00177_html_ga5ed667d0247cce477f013ea31982843d"><div class="ttname"><a href="a00177.html#ga5ed667d0247cce477f013ea31982843d">glm::f32mat2x4</a></div><div class="ttdeci">highp_f32mat2x4 f32mat2x4</div><div class="ttdoc">Default single-precision floating-point 2x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02421">fwd.hpp:2421</a></div></div>
+<div class="ttc" id="a00177_html_gaf49470869e9be2c059629b250619804e"><div class="ttname"><a href="a00177.html#gaf49470869e9be2c059629b250619804e">glm::lowp_uint8</a></div><div class="ttdeci">detail::uint8 lowp_uint8</div><div class="ttdoc">Low precision 8 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00703">fwd.hpp:703</a></div></div>
+<div class="ttc" id="a00177_html_ga8723186104dc02eb85da386105fba75f"><div class="ttname"><a href="a00177.html#ga8723186104dc02eb85da386105fba75f">glm::f64vec4</a></div><div class="ttdeci">highp_f64vec4 f64vec4</div><div class="ttdoc">Default double-precision floating-point vector of 4 components. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02515">fwd.hpp:2515</a></div></div>
+<div class="ttc" id="a00177_html_ga913a8bd51e4ebccd30ad488de3c18da9"><div class="ttname"><a href="a00177.html#ga913a8bd51e4ebccd30ad488de3c18da9">glm::u32vec1</a></div><div class="ttdeci">highp_u32vec1 u32vec1</div><div class="ttdoc">Default precision 32 bit unsigned integer scalar type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l01132">fwd.hpp:1132</a></div></div>
+<div class="ttc" id="a00177_html_ga6fbd69cbdaa44345bff923a2cf63de7e"><div class="ttname"><a href="a00177.html#ga6fbd69cbdaa44345bff923a2cf63de7e">glm::mediump_int8</a></div><div class="ttdeci">detail::int8 mediump_int8</div><div class="ttdoc">Medium precision 8 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00148">fwd.hpp:148</a></div></div>
+<div class="ttc" id="a00177_html_gacf1ded173e1e2d049c511d095b259e21"><div class="ttname"><a href="a00177.html#gacf1ded173e1e2d049c511d095b259e21">glm::mediump_i8</a></div><div class="ttdeci">detail::int8 mediump_i8</div><div class="ttdoc">Medium precision 8 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00180">fwd.hpp:180</a></div></div>
+<div class="ttc" id="a00177_html_gacd1259f3a9e8d2a9df5be2d74322ef9c"><div class="ttname"><a href="a00177.html#gacd1259f3a9e8d2a9df5be2d74322ef9c">glm::highp_u8</a></div><div class="ttdeci">detail::uint8 highp_u8</div><div class="ttdoc">Medium precision 8 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00837">fwd.hpp:837</a></div></div>
+<div class="ttc" id="a00177_html_ga6d7b3789ecb932c26430009478cac7ae"><div class="ttname"><a href="a00177.html#ga6d7b3789ecb932c26430009478cac7ae">glm::mediump_int8_t</a></div><div class="ttdeci">detail::int8 mediump_int8_t</div><div class="ttdoc">Medium precision 8 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00164">fwd.hpp:164</a></div></div>
+<div class="ttc" id="a00177_html_gaa46172d7dc1c7ffe3e78107ff88adf08"><div class="ttname"><a href="a00177.html#gaa46172d7dc1c7ffe3e78107ff88adf08">glm::highp_uint64_t</a></div><div class="ttdeci">detail::uint64 highp_uint64_t</div><div class="ttdoc">Medium precision 64 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00833">fwd.hpp:833</a></div></div>
+<div class="ttc" id="a00177_html_ga746dc6da204f5622e395f492997dbf57"><div class="ttname"><a href="a00177.html#ga746dc6da204f5622e395f492997dbf57">glm::highp_uint16</a></div><div class="ttdeci">detail::uint16 highp_uint16</div><div class="ttdoc">Medium precision 16 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00809">fwd.hpp:809</a></div></div>
+<div class="ttc" id="a00177_html_gae978599c9711ac263ba732d4ac225b0e"><div class="ttname"><a href="a00177.html#gae978599c9711ac263ba732d4ac225b0e">glm::highp_uint32_t</a></div><div class="ttdeci">detail::uint32 highp_uint32_t</div><div class="ttdoc">Medium precision 32 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00829">fwd.hpp:829</a></div></div>
+<div class="ttc" id="a00177_html_gaf5e94bf2a20af7601787c154751dc2e1"><div class="ttname"><a href="a00177.html#gaf5e94bf2a20af7601787c154751dc2e1">glm::mediump_i32</a></div><div class="ttdeci">detail::int32 mediump_i32</div><div class="ttdoc">Medium precision 32 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00188">fwd.hpp:188</a></div></div>
+<div class="ttc" id="a00177_html_gacb88796f2d08ef253d0345aff20c3aee"><div class="ttname"><a href="a00177.html#gacb88796f2d08ef253d0345aff20c3aee">glm::highp_i8</a></div><div class="ttdeci">detail::int8 highp_i8</div><div class="ttdoc">High precision 8 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00228">fwd.hpp:228</a></div></div>
+<div class="ttc" id="a00177_html_gade69872a31f066e5ae212f1af6008edb"><div class="ttname"><a href="a00177.html#gade69872a31f066e5ae212f1af6008edb">glm::i64vec2</a></div><div class="ttdeci">highp_i64vec2 i64vec2</div><div class="ttdoc">Default precision 64 bit signed integer vector of 2 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00686">fwd.hpp:686</a></div></div>
+<div class="ttc" id="a00177_html_gad9b52e1c271cb9c8bfae6365d3e38a23"><div class="ttname"><a href="a00177.html#gad9b52e1c271cb9c8bfae6365d3e38a23">glm::u32vec3</a></div><div class="ttdeci">highp_u32vec3 u32vec3</div><div class="ttdoc">Default precision 32 bit unsigned integer vector of 3 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l01140">fwd.hpp:1140</a></div></div>
+<div class="ttc" id="a00177_html_gad68bfd9f881856fc863a6ebca0b67f78"><div class="ttname"><a href="a00177.html#gad68bfd9f881856fc863a6ebca0b67f78">glm::lowp_uint16</a></div><div class="ttdeci">detail::uint16 lowp_uint16</div><div class="ttdoc">Low precision 16 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00707">fwd.hpp:707</a></div></div>
+<div class="ttc" id="a00177_html_ga8ca60d0ba6d438892be6017f43747661"><div class="ttname"><a href="a00177.html#ga8ca60d0ba6d438892be6017f43747661">glm::u8vec3</a></div><div class="ttdeci">highp_u8vec3 u8vec3</div><div class="ttdoc">Default precision 8 bit unsigned integer vector of 3 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00981">fwd.hpp:981</a></div></div>
+<div class="ttc" id="a00177_html_ga1e4c52bb824ca16c6e2e5b03635669d0"><div class="ttname"><a href="a00177.html#ga1e4c52bb824ca16c6e2e5b03635669d0">glm::f32mat3x3</a></div><div class="ttdeci">highp_f32mat3x3 f32mat3x3</div><div class="ttdoc">Default single-precision floating-point 3x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02429">fwd.hpp:2429</a></div></div>
+<div class="ttc" id="a00177_html_ga3ebcb1f6d8d8387253de8bccb058d77f"><div class="ttname"><a href="a00177.html#ga3ebcb1f6d8d8387253de8bccb058d77f">glm::mediump_i64</a></div><div class="ttdeci">detail::int64 mediump_i64</div><div class="ttdoc">Medium precision 64 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00192">fwd.hpp:192</a></div></div>
+<div class="ttc" id="a00177_html_gaf524c9059f0342668d8eea359bcceaae"><div class="ttname"><a href="a00177.html#gaf524c9059f0342668d8eea359bcceaae">glm::u16vec4</a></div><div class="ttdeci">highp_u16vec4 u16vec4</div><div class="ttdoc">Default precision 16 bit unsigned integer vector of 4 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l01065">fwd.hpp:1065</a></div></div>
+<div class="ttc" id="a00177_html_ga0c181fdf06a309691999926b6690c969"><div class="ttname"><a href="a00177.html#ga0c181fdf06a309691999926b6690c969">glm::highp_u64</a></div><div class="ttdeci">detail::uint64 highp_u64</div><div class="ttdoc">Medium precision 64 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00849">fwd.hpp:849</a></div></div>
+<div class="ttc" id="a00177_html_ga1d794d240091678f602e8de225b8d8c9"><div class="ttname"><a href="a00177.html#ga1d794d240091678f602e8de225b8d8c9">glm::f64</a></div><div class="ttdeci">highp_float64_t f64</div><div class="ttdoc">Default 64 bit double-precision floating-point scalar. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l01509">fwd.hpp:1509</a></div></div>
+<div class="ttc" id="a00177_html_gac5b04f32ae3084a9131a0851e7f4cfae"><div class="ttname"><a href="a00177.html#gac5b04f32ae3084a9131a0851e7f4cfae">glm::f64vec1</a></div><div class="ttdeci">highp_f64vec1 f64vec1</div><div class="ttdoc">Default double-precision floating-point vector of 1 components. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02503">fwd.hpp:2503</a></div></div>
+<div class="ttc" id="a00177_html_gafb6ca34df28889a5db9d244aed375411"><div class="ttname"><a href="a00177.html#gafb6ca34df28889a5db9d244aed375411">glm::u64vec4</a></div><div class="ttdeci">highp_u64vec4 u64vec4</div><div class="ttdoc">Default precision 64 bit unsigned integer vector of 4 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l01303">fwd.hpp:1303</a></div></div>
+<div class="ttc" id="a00177_html_ga760bcf26fdb23a2c3ecad3c928a19ae6"><div class="ttname"><a href="a00177.html#ga760bcf26fdb23a2c3ecad3c928a19ae6">glm::lowp_int8</a></div><div class="ttdeci">detail::int8 lowp_int8</div><div class="ttdoc">Low precision 8 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00100">fwd.hpp:100</a></div></div>
+<div class="ttc" id="a00177_html_ga698e36b01167fc0f037889334dce8def"><div class="ttname"><a href="a00177.html#ga698e36b01167fc0f037889334dce8def">glm::lowp_int16</a></div><div class="ttdeci">detail::int16 lowp_int16</div><div class="ttdoc">Low precision 16 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00104">fwd.hpp:104</a></div></div>
+<div class="ttc" id="a00177_html_gad73e5e905dcf2d8cab002b4ab46e9426"><div class="ttname"><a href="a00177.html#gad73e5e905dcf2d8cab002b4ab46e9426">glm::i16vec4</a></div><div class="ttdeci">highp_i16vec4 i16vec4</div><div class="ttdoc">Default precision 16 bit signed integer vector of 4 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00456">fwd.hpp:456</a></div></div>
+<div class="ttc" id="a00177_html_ga3ab5fe184343d394fb6c2723c3ee3699"><div class="ttname"><a href="a00177.html#ga3ab5fe184343d394fb6c2723c3ee3699">glm::i16</a></div><div class="ttdeci">detail::int16 i16</div><div class="ttdoc">16 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00289">fwd.hpp:289</a></div></div>
+<div class="ttc" id="a00177_html_ga11e5684b10e098f573ff484c1a569ae2"><div class="ttname"><a href="a00177.html#ga11e5684b10e098f573ff484c1a569ae2">glm::f64mat3x2</a></div><div class="ttdeci">highp_f64mat3x2 f64mat3x2</div><div class="ttdoc">Default double-precision floating-point 3x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02531">fwd.hpp:2531</a></div></div>
+<div class="ttc" id="a00177_html_ga5165fbee2d78f342950265b69a07353d"><div class="ttname"><a href="a00177.html#ga5165fbee2d78f342950265b69a07353d">glm::fmat3</a></div><div class="ttdeci">fmat3x3 fmat3</div><div class="ttdoc">Default single-precision floating-point 3x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02383">fwd.hpp:2383</a></div></div>
+<div class="ttc" id="a00177_html_ga7ff73a45cea9613ebf1a9fad0b9f82ac"><div class="ttname"><a href="a00177.html#ga7ff73a45cea9613ebf1a9fad0b9f82ac">glm::lowp_i32</a></div><div class="ttdeci">detail::int32 lowp_i32</div><div class="ttdoc">Low precision 32 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00140">fwd.hpp:140</a></div></div>
+<div class="ttc" id="a00177_html_ga28d97808322d3c92186e4a0c067d7e8e"><div class="ttname"><a href="a00177.html#ga28d97808322d3c92186e4a0c067d7e8e">glm::uint8_t</a></div><div class="ttdeci">detail::uint8 uint8_t</div><div class="ttdoc">8 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00877">fwd.hpp:877</a></div></div>
+<div class="ttc" id="a00177_html_ga0350631d35ff800e6133ac6243b13cbc"><div class="ttname"><a href="a00177.html#ga0350631d35ff800e6133ac6243b13cbc">glm::lowp_int32_t</a></div><div class="ttdeci">detail::int32 lowp_int32_t</div><div class="ttdoc">Low precision 32 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00124">fwd.hpp:124</a></div></div>
+<div class="ttc" id="a00177_html_ga97432f9979e73e66567361fd01e4cffb"><div class="ttname"><a href="a00177.html#ga97432f9979e73e66567361fd01e4cffb">glm::highp_uint8</a></div><div class="ttdeci">detail::uint8 highp_uint8</div><div class="ttdoc">Medium precision 8 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00805">fwd.hpp:805</a></div></div>
+<div class="ttc" id="a00177_html_ga727675ac6b5d2fc699520e0059735e25"><div class="ttname"><a href="a00177.html#ga727675ac6b5d2fc699520e0059735e25">glm::highp_i32</a></div><div class="ttdeci">detail::int32 highp_i32</div><div class="ttdoc">High precision 32 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00236">fwd.hpp:236</a></div></div>
+<div class="ttc" id="a00177_html_ga1fa92a233b9110861cdbc8c2ccf0b5a3"><div class="ttname"><a href="a00177.html#ga1fa92a233b9110861cdbc8c2ccf0b5a3">glm::mediump_uint8</a></div><div class="ttdeci">detail::uint8 mediump_uint8</div><div class="ttdoc">Medium precision 8 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00755">fwd.hpp:755</a></div></div>
+<div class="ttc" id="a00177_html_gad1213a22bbb9e4107f07eaa4956f8281"><div class="ttname"><a href="a00177.html#gad1213a22bbb9e4107f07eaa4956f8281">glm::mediump_u8</a></div><div class="ttdeci">detail::uint8 mediump_u8</div><div class="ttdoc">Medium precision 8 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00787">fwd.hpp:787</a></div></div>
+<div class="ttc" id="a00177_html_gaf17b2604c0d92bffb92375d8aa588756"><div class="ttname"><a href="a00177.html#gaf17b2604c0d92bffb92375d8aa588756">glm::fmat2x3</a></div><div class="ttdeci">highp_f32mat2x3 fmat2x3</div><div class="ttdoc">Default single-precision floating-point 2x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02347">fwd.hpp:2347</a></div></div>
+<div class="ttc" id="a00177_html_ga27f897bdfe4bbded9481b8947553d1ff"><div class="ttname"><a href="a00177.html#ga27f897bdfe4bbded9481b8947553d1ff">glm::f32mat4x2</a></div><div class="ttdeci">highp_f32mat4x2 f32mat4x2</div><div class="ttdoc">Default single-precision floating-point 4x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02437">fwd.hpp:2437</a></div></div>
+<div class="ttc" id="a00177_html_ga8e62c883d13f47015f3b70ed88751369"><div class="ttname"><a href="a00177.html#ga8e62c883d13f47015f3b70ed88751369">glm::highp_u16</a></div><div class="ttdeci">detail::uint16 highp_u16</div><div class="ttdoc">Medium precision 16 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00841">fwd.hpp:841</a></div></div>
+<div class="ttc" id="a00177_html_ga7a6f1929464dcc680b16381a4ee5f2cf"><div class="ttname"><a href="a00177.html#ga7a6f1929464dcc680b16381a4ee5f2cf">glm::highp_u32</a></div><div class="ttdeci">detail::uint32 highp_u32</div><div class="ttdoc">Medium precision 32 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00845">fwd.hpp:845</a></div></div>
+<div class="ttc" id="a00177_html_ga8165913e068444f7842302d40ba897b9"><div class="ttname"><a href="a00177.html#ga8165913e068444f7842302d40ba897b9">glm::u32</a></div><div class="ttdeci">detail::uint32 u32</div><div class="ttdoc">32 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00902">fwd.hpp:902</a></div></div>
+<div class="ttc" id="a00177_html_ga489163773b021f1800a33cc2fa730c3b"><div class="ttname"><a href="a00177.html#ga489163773b021f1800a33cc2fa730c3b">glm::f64mat4x4</a></div><div class="ttdeci">highp_f64mat4x4 f64mat4x4</div><div class="ttdoc">Default double-precision floating-point 4x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02551">fwd.hpp:2551</a></div></div>
+<div class="ttc" id="a00177_html_gad0549c902a96a7164e4ac858d5f39dbf"><div class="ttname"><a href="a00177.html#gad0549c902a96a7164e4ac858d5f39dbf">glm::highp_int8</a></div><div class="ttdeci">detail::int8 highp_int8</div><div class="ttdoc">High precision 8 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00196">fwd.hpp:196</a></div></div>
+<div class="ttc" id="a00177_html_ga87d256f4719417e311cd0ea14264678d"><div class="ttname"><a href="a00177.html#ga87d256f4719417e311cd0ea14264678d">glm::f64mat2x3</a></div><div class="ttdeci">highp_f64mat2x3 f64mat2x3</div><div class="ttdoc">Default double-precision floating-point 2x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02523">fwd.hpp:2523</a></div></div>
+<div class="ttc" id="a00177_html_ga7f5dbe417199277e449b8db0210acb71"><div class="ttname"><a href="a00177.html#ga7f5dbe417199277e449b8db0210acb71">glm::u16vec3</a></div><div class="ttdeci">highp_u16vec3 u16vec3</div><div class="ttdoc">Default precision 16 bit unsigned integer vector of 3 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l01061">fwd.hpp:1061</a></div></div>
+<div class="ttc" id="a00177_html_ga110bec18ca44c41c76c3c9e4d7b5bd79"><div class="ttname"><a href="a00177.html#ga110bec18ca44c41c76c3c9e4d7b5bd79">glm::i16vec2</a></div><div class="ttdeci">highp_i16vec2 i16vec2</div><div class="ttdoc">Default precision 16 bit signed integer vector of 2 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00448">fwd.hpp:448</a></div></div>
+<div class="ttc" id="a00177_html_ga1fedd5d29746afdaf2d3303a4442704e"><div class="ttname"><a href="a00177.html#ga1fedd5d29746afdaf2d3303a4442704e">glm::f32mat2</a></div><div class="ttdeci">f32mat2x2 f32mat2</div><div class="ttdoc">Default single-precision floating-point 2x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02449">fwd.hpp:2449</a></div></div>
+<div class="ttc" id="a00177_html_gaa6a5b461bbf5fe20982472aa51896d4b"><div class="ttname"><a href="a00177.html#gaa6a5b461bbf5fe20982472aa51896d4b">glm::lowp_uint32</a></div><div class="ttdeci">detail::uint32 lowp_uint32</div><div class="ttdoc">Low precision 32 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00711">fwd.hpp:711</a></div></div>
+<div class="ttc" id="a00177_html_ga80e72fe94c88498537e8158ba7591c54"><div class="ttname"><a href="a00177.html#ga80e72fe94c88498537e8158ba7591c54">glm::mediump_int16_t</a></div><div class="ttdeci">detail::int16 mediump_int16_t</div><div class="ttdoc">Medium precision 16 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00168">fwd.hpp:168</a></div></div>
+<div class="ttc" id="a00177_html_ga4bf09d8838a86866b39ee6e109341645"><div class="ttname"><a href="a00177.html#ga4bf09d8838a86866b39ee6e109341645">glm::int8_t</a></div><div class="ttdeci">detail::int8 int8_t</div><div class="ttdoc">8 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00268">fwd.hpp:268</a></div></div>
+<div class="ttc" id="a00177_html_ga30652709815ad9404272a31957daa59e"><div class="ttname"><a href="a00177.html#ga30652709815ad9404272a31957daa59e">glm::mediump_uint64</a></div><div class="ttdeci">detail::uint64 mediump_uint64</div><div class="ttdoc">Medium precision 64 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00767">fwd.hpp:767</a></div></div>
+<div class="ttc" id="a00177_html_ga1a11c170f030ab34ddf037714e936cba"><div class="ttname"><a href="a00177.html#ga1a11c170f030ab34ddf037714e936cba">glm::fmat4x3</a></div><div class="ttdeci">highp_f32mat4x3 fmat4x3</div><div class="ttdoc">Default single-precision floating-point 4x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02371">fwd.hpp:2371</a></div></div>
+<div class="ttc" id="a00177_html_gaa2d7acc0adb536fab71fe261232a40ff"><div class="ttname"><a href="a00177.html#gaa2d7acc0adb536fab71fe261232a40ff">glm::u16</a></div><div class="ttdeci">detail::uint16 u16</div><div class="ttdoc">16 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00898">fwd.hpp:898</a></div></div>
+<div class="ttc" id="a00177_html_ga981b63d5c5f7233a29364e0a968d139b"><div class="ttname"><a href="a00177.html#ga981b63d5c5f7233a29364e0a968d139b">glm::fvec4</a></div><div class="ttdeci">highp_f32vec4 fvec4</div><div class="ttdoc">Default single-precision floating-point vector of 4 components. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02339">fwd.hpp:2339</a></div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00177_html_ga0741d40e2b0fea4f1c50cb325114f075"><div class="ttname"><a href="a00177.html#ga0741d40e2b0fea4f1c50cb325114f075">glm::u32vec2</a></div><div class="ttdeci">highp_u32vec2 u32vec2</div><div class="ttdoc">Default precision 32 bit unsigned integer vector of 2 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l01136">fwd.hpp:1136</a></div></div>
+<div class="ttc" id="a00177_html_gaf3a5016bf360977ce114deb2e01ae10a"><div class="ttname"><a href="a00177.html#gaf3a5016bf360977ce114deb2e01ae10a">glm::f32mat2x2</a></div><div class="ttdeci">highp_f32mat2x2 f32mat2x2</div><div class="ttdoc">Default single-precision floating-point 2x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02413">fwd.hpp:2413</a></div></div>
+<div class="ttc" id="a00177_html_ga219c683b0aa29f4f482f76d77d5c9e95"><div class="ttname"><a href="a00177.html#ga219c683b0aa29f4f482f76d77d5c9e95">glm::f64mat4</a></div><div class="ttdeci">f64mat4x4 f64mat4</div><div class="ttdoc">Default double-precision floating-point 4x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02563">fwd.hpp:2563</a></div></div>
+<div class="ttc" id="a00177_html_ga5244cef85d6e870e240c76428a262ae8"><div class="ttname"><a href="a00177.html#ga5244cef85d6e870e240c76428a262ae8">glm::mediump_int32</a></div><div class="ttdeci">detail::int32 mediump_int32</div><div class="ttdoc">Medium precision 32 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00156">fwd.hpp:156</a></div></div>
+<div class="ttc" id="a00177_html_ga0336abc2604dd2c20c30e036454b64f8"><div class="ttname"><a href="a00177.html#ga0336abc2604dd2c20c30e036454b64f8">glm::highp_i16</a></div><div class="ttdeci">detail::int16 highp_i16</div><div class="ttdoc">High precision 16 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00232">fwd.hpp:232</a></div></div>
+<div class="ttc" id="a00177_html_ga8709a1ea268fa69bdf1e11616d7fbaf1"><div class="ttname"><a href="a00177.html#ga8709a1ea268fa69bdf1e11616d7fbaf1">glm::f32mat3x2</a></div><div class="ttdeci">highp_f32mat3x2 f32mat3x2</div><div class="ttdoc">Default single-precision floating-point 3x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02425">fwd.hpp:2425</a></div></div>
+<div class="ttc" id="a00177_html_gac4e00a26a2adb5f2c0a7096810df29e5"><div class="ttname"><a href="a00177.html#gac4e00a26a2adb5f2c0a7096810df29e5">glm::highp_uint8_t</a></div><div class="ttdeci">detail::uint8 highp_uint8_t</div><div class="ttdoc">Medium precision 8 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00821">fwd.hpp:821</a></div></div>
+<div class="ttc" id="a00177_html_gaa669dfb59031a441de19b34a92704d57"><div class="ttname"><a href="a00177.html#gaa669dfb59031a441de19b34a92704d57">glm::f64mat4x2</a></div><div class="ttdeci">highp_f64mat4x2 f64mat4x2</div><div class="ttdoc">Default double-precision floating-point 4x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02543">fwd.hpp:2543</a></div></div>
+<div class="ttc" id="a00177_html_gad37a55a8ce1154083a721b4ecfd55293"><div class="ttname"><a href="a00177.html#gad37a55a8ce1154083a721b4ecfd55293">glm::f64mat3x4</a></div><div class="ttdeci">highp_f64mat3x4 f64mat3x4</div><div class="ttdoc">Default double-precision floating-point 3x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02539">fwd.hpp:2539</a></div></div>
+<div class="ttc" id="a00177_html_gabd79752ff357d83b49136b6299ea62d9"><div class="ttname"><a href="a00177.html#gabd79752ff357d83b49136b6299ea62d9">glm::fmat4x4</a></div><div class="ttdeci">highp_f32mat4x4 fmat4x4</div><div class="ttdoc">Default single-precision floating-point 4x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02375">fwd.hpp:2375</a></div></div>
+<div class="ttc" id="a00177_html_ga41d579d81c3d98edd0532244fa02da77"><div class="ttname"><a href="a00177.html#ga41d579d81c3d98edd0532244fa02da77">glm::float32_t</a></div><div class="ttdeci">highp_float32_t float32_t</div><div class="ttdoc">Default 32 bit single-precision floating-point scalar. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l01497">fwd.hpp:1497</a></div></div>
+<div class="ttc" id="a00177_html_gaa38d732f5d4a7bc42a1b43b9d3c141ce"><div class="ttname"><a href="a00177.html#gaa38d732f5d4a7bc42a1b43b9d3c141ce">glm::highp_uint64</a></div><div class="ttdeci">detail::uint64 highp_uint64</div><div class="ttdoc">Medium precision 64 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00817">fwd.hpp:817</a></div></div>
+<div class="ttc" id="a00177_html_ga793c9293cc687a0e342396a377c5df77"><div class="ttname"><a href="a00177.html#ga793c9293cc687a0e342396a377c5df77">glm::u64vec1</a></div><div class="ttdeci">highp_u64vec1 u64vec1</div><div class="ttdoc">Default precision 64 bit unsigned integer scalar type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l01291">fwd.hpp:1291</a></div></div>
+<div class="ttc" id="a00177_html_ga354736e0c645099cd44c42fb2f87c2b8"><div class="ttname"><a href="a00177.html#ga354736e0c645099cd44c42fb2f87c2b8">glm::lowp_i64</a></div><div class="ttdeci">detail::int64 lowp_i64</div><div class="ttdoc">Low precision 64 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00144">fwd.hpp:144</a></div></div>
+<div class="ttc" id="a00177_html_gafacc3614bb1136a7756293e67d34de22"><div class="ttname"><a href="a00177.html#gafacc3614bb1136a7756293e67d34de22">glm::f64vec3</a></div><div class="ttdeci">highp_f64vec3 f64vec3</div><div class="ttdoc">Default double-precision floating-point vector of 3 components. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02511">fwd.hpp:2511</a></div></div>
+<div class="ttc" id="a00177_html_ga864aabca5f3296e176e0c3ed9cc16b02"><div class="ttname"><a href="a00177.html#ga864aabca5f3296e176e0c3ed9cc16b02">glm::lowp_int32</a></div><div class="ttdeci">detail::int32 lowp_int32</div><div class="ttdoc">Low precision 32 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00108">fwd.hpp:108</a></div></div>
+<div class="ttc" id="a00177_html_ga8dd3a3281ae5c970ffe0c41d538aa153"><div class="ttname"><a href="a00177.html#ga8dd3a3281ae5c970ffe0c41d538aa153">glm::lowp_uint64_t</a></div><div class="ttdeci">detail::uint64 lowp_uint64_t</div><div class="ttdoc">Low precision 64 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00732">fwd.hpp:732</a></div></div>
+<div class="ttc" id="a00177_html_ga4cca6bbd117c45f046291fc8e9d03765"><div class="ttname"><a href="a00177.html#ga4cca6bbd117c45f046291fc8e9d03765">glm::i32vec1</a></div><div class="ttdeci">highp_i32vec1 i32vec1</div><div class="ttdoc">Default precision 32 bit signed integer scalar type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00523">fwd.hpp:523</a></div></div>
+<div class="ttc" id="a00177_html_ga4f072ada9552e1e480bbb3b1acde5250"><div class="ttname"><a href="a00177.html#ga4f072ada9552e1e480bbb3b1acde5250">glm::lowp_u32</a></div><div class="ttdeci">detail::uint32 lowp_u32</div><div class="ttdoc">Low precision 32 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00745">fwd.hpp:745</a></div></div>
+<div class="ttc" id="a00177_html_ga61667c99caf60ce6c48ebbbac72bd91d"><div class="ttname"><a href="a00177.html#ga61667c99caf60ce6c48ebbbac72bd91d">glm::u8vec2</a></div><div class="ttdeci">highp_u8vec2 u8vec2</div><div class="ttdoc">Default precision 8 bit unsigned integer vector of 2 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00977">fwd.hpp:977</a></div></div>
+<div class="ttc" id="a00177_html_ga973b226a9914db682c9372fc761fb535"><div class="ttname"><a href="a00177.html#ga973b226a9914db682c9372fc761fb535">glm::i16vec3</a></div><div class="ttdeci">highp_i16vec3 i16vec3</div><div class="ttdoc">Default precision 16 bit signed integer vector of 3 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00452">fwd.hpp:452</a></div></div>
+<div class="ttc" id="a00177_html_gae0cb53ea6fe3d977fe588ce423d57cc3"><div class="ttname"><a href="a00177.html#gae0cb53ea6fe3d977fe588ce423d57cc3">glm::f32vec2</a></div><div class="ttdeci">highp_f32vec2 f32vec2</div><div class="ttdoc">Default single-precision floating-point vector of 2 components. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02401">fwd.hpp:2401</a></div></div>
+<div class="ttc" id="a00177_html_ga667b2ece2b258be898812dc2177995d1"><div class="ttname"><a href="a00177.html#ga667b2ece2b258be898812dc2177995d1">glm::lowp_uint8_t</a></div><div class="ttdeci">detail::uint8 lowp_uint8_t</div><div class="ttdoc">Low precision 8 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00720">fwd.hpp:720</a></div></div>
+<div class="ttc" id="a00177_html_ga9756e45c8f80329257f3cbdabc3bd73c"><div class="ttname"><a href="a00177.html#ga9756e45c8f80329257f3cbdabc3bd73c">glm::i64vec4</a></div><div class="ttdeci">highp_i64vec4 i64vec4</div><div class="ttdoc">Default precision 64 bit signed integer vector of 4 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00694">fwd.hpp:694</a></div></div>
+<div class="ttc" id="a00177_html_gaf9f4173dd9e8b2d0b663c6f80ed09ff6"><div class="ttname"><a href="a00177.html#gaf9f4173dd9e8b2d0b663c6f80ed09ff6">glm::fvec2</a></div><div class="ttdeci">highp_f32vec2 fvec2</div><div class="ttdoc">Default single-precision floating-point vector of 2 components. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02331">fwd.hpp:2331</a></div></div>
+<div class="ttc" id="a00177_html_gab3f31d867df4874e42172ebf188a3ebd"><div class="ttname"><a href="a00177.html#gab3f31d867df4874e42172ebf188a3ebd">glm::fmat4</a></div><div class="ttdeci">fmat4x4 fmat4</div><div class="ttdoc">Default single-precision floating-point 4x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02387">fwd.hpp:2387</a></div></div>
+<div class="ttc" id="a00177_html_gaeb25dbb0261f82cb08da23e26d343704"><div class="ttname"><a href="a00177.html#gaeb25dbb0261f82cb08da23e26d343704">glm::f32vec4</a></div><div class="ttdeci">highp_f32vec4 f32vec4</div><div class="ttdoc">Default single-precision floating-point vector of 4 components. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02409">fwd.hpp:2409</a></div></div>
+<div class="ttc" id="a00177_html_ga30069d1f02b19599cbfadf98c23ac6ed"><div class="ttname"><a href="a00177.html#ga30069d1f02b19599cbfadf98c23ac6ed">glm::lowp_u64</a></div><div class="ttdeci">detail::uint64 lowp_u64</div><div class="ttdoc">Low precision 64 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00749">fwd.hpp:749</a></div></div>
+<div class="ttc" id="a00177_html_ga302ec977b0c0c3ea245b6c9275495355"><div class="ttname"><a href="a00177.html#ga302ec977b0c0c3ea245b6c9275495355">glm::i8</a></div><div class="ttdeci">detail::int8 i8</div><div class="ttdoc">8 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00285">fwd.hpp:285</a></div></div>
+<div class="ttc" id="a00177_html_ga74ac2e71b650162d8f7cb2a70c2f6711"><div class="ttname"><a href="a00177.html#ga74ac2e71b650162d8f7cb2a70c2f6711">glm::fmat2x2</a></div><div class="ttdeci">highp_f32mat2x2 fmat2x2</div><div class="ttdoc">Default single-precision floating-point 2x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02343">fwd.hpp:2343</a></div></div>
+<div class="ttc" id="a00177_html_ga9ece7c77c7bca7a6b824ef9c600f5e5e"><div class="ttname"><a href="a00177.html#ga9ece7c77c7bca7a6b824ef9c600f5e5e">glm::i64vec3</a></div><div class="ttdeci">highp_i64vec3 i64vec3</div><div class="ttdoc">Default precision 64 bit signed integer vector of 3 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00690">fwd.hpp:690</a></div></div>
+<div class="ttc" id="a00177_html_ga392b673fd10847bfb78fb808c6cf8ff7"><div class="ttname"><a href="a00177.html#ga392b673fd10847bfb78fb808c6cf8ff7">glm::lowp_i16</a></div><div class="ttdeci">detail::int16 lowp_i16</div><div class="ttdoc">Low precision 16 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00136">fwd.hpp:136</a></div></div>
+<div class="ttc" id="a00177_html_gaa212b805736a759998e312cbdd550fae"><div class="ttname"><a href="a00177.html#gaa212b805736a759998e312cbdd550fae">glm::lowp_uint64</a></div><div class="ttdeci">detail::uint64 lowp_uint64</div><div class="ttdoc">Low precision 64 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00715">fwd.hpp:715</a></div></div>
+<div class="ttc" id="a00177_html_ga226a8d52b4e3f77aaa6231135e886aac"><div class="ttname"><a href="a00177.html#ga226a8d52b4e3f77aaa6231135e886aac">glm::highp_int64</a></div><div class="ttdeci">detail::int64 highp_int64</div><div class="ttdoc">High precision 64 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00208">fwd.hpp:208</a></div></div>
+<div class="ttc" id="a00177_html_gaecc7082561fc9028b844b6cf3d305d36"><div class="ttname"><a href="a00177.html#gaecc7082561fc9028b844b6cf3d305d36">glm::u8</a></div><div class="ttdeci">detail::uint8 u8</div><div class="ttdoc">8 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00894">fwd.hpp:894</a></div></div>
+<div class="ttc" id="a00177_html_ga1bd0e914158bf03135f8a317de6debe9"><div class="ttname"><a href="a00177.html#ga1bd0e914158bf03135f8a317de6debe9">glm::mediump_u32</a></div><div class="ttdeci">detail::uint32 mediump_u32</div><div class="ttdoc">Medium precision 32 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00795">fwd.hpp:795</a></div></div>
+<div class="ttc" id="a00177_html_ga74b9918c90ea60ce58b3979cde963a38"><div class="ttname"><a href="a00177.html#ga74b9918c90ea60ce58b3979cde963a38">glm::f64mat2</a></div><div class="ttdeci">f64mat2x2 f64mat2</div><div class="ttdoc">Default double-precision floating-point 2x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02555">fwd.hpp:2555</a></div></div>
+<div class="ttc" id="a00177_html_gaeb817419c76a0766c88713d2754e6cb3"><div class="ttname"><a href="a00177.html#gaeb817419c76a0766c88713d2754e6cb3">glm::f64mat2x2</a></div><div class="ttdeci">highp_f64mat2x2 f64mat2x2</div><div class="ttdoc">Default double-precision floating-point 2x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02519">fwd.hpp:2519</a></div></div>
+<div class="ttc" id="a00177_html_gaebf341fc4a5be233f7dde962c2e33847"><div class="ttname"><a href="a00177.html#gaebf341fc4a5be233f7dde962c2e33847">glm::lowp_int64_t</a></div><div class="ttdeci">detail::int64 lowp_int64_t</div><div class="ttdoc">Low precision 64 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00128">fwd.hpp:128</a></div></div>
+<div class="ttc" id="a00177_html_ga504ce1631cb2ac02fcf1d44d8c2aa126"><div class="ttname"><a href="a00177.html#ga504ce1631cb2ac02fcf1d44d8c2aa126">glm::lowp_u16</a></div><div class="ttdeci">detail::uint16 lowp_u16</div><div class="ttdoc">Low precision 16 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00741">fwd.hpp:741</a></div></div>
+<div class="ttc" id="a00177_html_ga426030555085ed6c39a54e73afbef962"><div class="ttname"><a href="a00177.html#ga426030555085ed6c39a54e73afbef962">glm::u16vec2</a></div><div class="ttdeci">highp_u16vec2 u16vec2</div><div class="ttdoc">Default precision 16 bit unsigned integer vector of 2 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l01057">fwd.hpp:1057</a></div></div>
+<div class="ttc" id="a00177_html_gaf4dae276fd29623950de14a6ca2586b5"><div class="ttname"><a href="a00177.html#gaf4dae276fd29623950de14a6ca2586b5">glm::mediump_uint32_t</a></div><div class="ttdeci">detail::uint32 mediump_uint32_t</div><div class="ttdoc">Medium precision 32 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00779">fwd.hpp:779</a></div></div>
+<div class="ttc" id="a00177_html_gaefa2ce8fbdbe89baffd262f46f2d5907"><div class="ttname"><a href="a00177.html#gaefa2ce8fbdbe89baffd262f46f2d5907">glm::u16vec1</a></div><div class="ttdeci">highp_u16vec1 u16vec1</div><div class="ttdoc">Default precision 16 bit unsigned integer scalar type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l01053">fwd.hpp:1053</a></div></div>
+<div class="ttc" id="a00177_html_ga14c583bd625eda8cf4935a14d5dd544d"><div class="ttname"><a href="a00177.html#ga14c583bd625eda8cf4935a14d5dd544d">glm::f64quat</a></div><div class="ttdeci">highp_f64quat f64quat</div><div class="ttdoc">Default double-precision floating-point quaternion. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02567">fwd.hpp:2567</a></div></div>
+<div class="ttc" id="a00177_html_ga91c4815f93177eb423362fd296a87e9f"><div class="ttname"><a href="a00177.html#ga91c4815f93177eb423362fd296a87e9f">glm::lowp_uint16_t</a></div><div class="ttdeci">detail::uint16 lowp_uint16_t</div><div class="ttdoc">Low precision 16 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00724">fwd.hpp:724</a></div></div>
+<div class="ttc" id="a00177_html_gac25db6d2b1e2a0f351b77ba3409ac4cd"><div class="ttname"><a href="a00177.html#gac25db6d2b1e2a0f351b77ba3409ac4cd">glm::highp_i64</a></div><div class="ttdeci">detail::int64 highp_i64</div><div class="ttdoc">High precision 64 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00240">fwd.hpp:240</a></div></div>
+<div class="ttc" id="a00177_html_ga62a17cddeb4dffb4e18fe3aea23f051a"><div class="ttname"><a href="a00177.html#ga62a17cddeb4dffb4e18fe3aea23f051a">glm::mediump_i16</a></div><div class="ttdeci">detail::int16 mediump_i16</div><div class="ttdoc">Medium precision 16 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00184">fwd.hpp:184</a></div></div>
+<div class="ttc" id="a00177_html_ga2204827de9d4ee7fa92ef497093f7d6e"><div class="ttname"><a href="a00177.html#ga2204827de9d4ee7fa92ef497093f7d6e">glm::u64vec2</a></div><div class="ttdeci">highp_u64vec2 u64vec2</div><div class="ttdoc">Default precision 64 bit unsigned integer vector of 2 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l01295">fwd.hpp:1295</a></div></div>
+<div class="ttc" id="a00177_html_ga84ed04b4e0de18c977e932d617e7c223"><div class="ttname"><a href="a00177.html#ga84ed04b4e0de18c977e932d617e7c223">glm::highp_int32</a></div><div class="ttdeci">detail::int32 highp_int32</div><div class="ttdoc">High precision 32 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00204">fwd.hpp:204</a></div></div>
+<div class="ttc" id="a00177_html_gad5f1043adbe803928fe7bf1a90a1f767"><div class="ttname"><a href="a00177.html#gad5f1043adbe803928fe7bf1a90a1f767">glm::f32mat2x3</a></div><div class="ttdeci">highp_f32mat2x3 f32mat2x3</div><div class="ttdoc">Default single-precision floating-point 2x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02417">fwd.hpp:2417</a></div></div>
+<div class="ttc" id="a00177_html_ga155ac7e9e454e2b1f73d11e1e28a0fd6"><div class="ttname"><a href="a00177.html#ga155ac7e9e454e2b1f73d11e1e28a0fd6">glm::u32vec4</a></div><div class="ttdeci">highp_u32vec4 u32vec4</div><div class="ttdoc">Default precision 32 bit unsigned integer vector of 4 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l01144">fwd.hpp:1144</a></div></div>
+<div class="ttc" id="a00177_html_ga26fc7ced1ad7ca5024f1c973c8dc9180"><div class="ttname"><a href="a00177.html#ga26fc7ced1ad7ca5024f1c973c8dc9180">glm::mediump_int32_t</a></div><div class="ttdeci">detail::int32 mediump_int32_t</div><div class="ttdoc">Medium precision 32 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00172">fwd.hpp:172</a></div></div>
+<div class="ttc" id="a00177_html_ga042ef09ff2f0cb24a36f541bcb3a3710"><div class="ttname"><a href="a00177.html#ga042ef09ff2f0cb24a36f541bcb3a3710">glm::int32_t</a></div><div class="ttdeci">detail::int32 int32_t</div><div class="ttdoc">32 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00276">fwd.hpp:276</a></div></div>
+<div class="ttc" id="a00177_html_gabb01d4ff646ee07241934b1a0cc0f985"><div class="ttname"><a href="a00177.html#gabb01d4ff646ee07241934b1a0cc0f985">glm::fmat2</a></div><div class="ttdeci">fmat2x2 fmat2</div><div class="ttdoc">Default single-precision floating-point 2x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02379">fwd.hpp:2379</a></div></div>
+<div class="ttc" id="a00177_html_ga9df98857be695d5a30cb30f5bfa38a80"><div class="ttname"><a href="a00177.html#ga9df98857be695d5a30cb30f5bfa38a80">glm::mediump_u16</a></div><div class="ttdeci">detail::uint16 mediump_u16</div><div class="ttdoc">Medium precision 16 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00791">fwd.hpp:791</a></div></div>
+<div class="ttc" id="a00177_html_gacf54c3330ef60aa3d16cb676c7bcb8c7"><div class="ttname"><a href="a00177.html#gacf54c3330ef60aa3d16cb676c7bcb8c7">glm::highp_uint16_t</a></div><div class="ttdeci">detail::uint16 highp_uint16_t</div><div class="ttdoc">Medium precision 16 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00825">fwd.hpp:825</a></div></div>
+<div class="ttc" id="a00177_html_ga34dd5ec1988c443bae80f1b20a8ade5f"><div class="ttname"><a href="a00177.html#ga34dd5ec1988c443bae80f1b20a8ade5f">glm::mediump_uint32</a></div><div class="ttdeci">detail::uint32 mediump_uint32</div><div class="ttdoc">Medium precision 32 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00763">fwd.hpp:763</a></div></div>
+<div class="ttc" id="a00177_html_ga3999d3e7ff22025c16ddb601e14dfdee"><div class="ttname"><a href="a00177.html#ga3999d3e7ff22025c16ddb601e14dfdee">glm::uint64_t</a></div><div class="ttdeci">detail::uint64 uint64_t</div><div class="ttdoc">64 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00889">fwd.hpp:889</a></div></div>
+<div class="ttc" id="a00177_html_ga6414484477e4c1b4863cf91af8fd4185"><div class="ttname"><a href="a00177.html#ga6414484477e4c1b4863cf91af8fd4185">glm::i8vec2</a></div><div class="ttdeci">highp_i8vec2 i8vec2</div><div class="ttdoc">Default precision 8 bit signed integer vector of 2 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00368">fwd.hpp:368</a></div></div>
+<div class="ttc" id="a00177_html_gaa69e73ffb01a52499071391d395908fb"><div class="ttname"><a href="a00177.html#gaa69e73ffb01a52499071391d395908fb">glm::f32mat4x3</a></div><div class="ttdeci">highp_f32mat4x3 f32mat4x3</div><div class="ttdoc">Default single-precision floating-point 4x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02441">fwd.hpp:2441</a></div></div>
+<div class="ttc" id="a00177_html_gaba137814a509704937746cc1e82edc32"><div class="ttname"><a href="a00177.html#gaba137814a509704937746cc1e82edc32">glm::f64mat4x3</a></div><div class="ttdeci">highp_f64mat4x3 f64mat4x3</div><div class="ttdoc">Default double-precision floating-point 4x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02547">fwd.hpp:2547</a></div></div>
+<div class="ttc" id="a00177_html_ga709c97c20efa24ff1d9e83cd437b8ed5"><div class="ttname"><a href="a00177.html#ga709c97c20efa24ff1d9e83cd437b8ed5">glm::fmat2x4</a></div><div class="ttdeci">highp_f32mat2x4 fmat2x4</div><div class="ttdoc">Default single-precision floating-point 2x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02351">fwd.hpp:2351</a></div></div>
+<div class="ttc" id="a00177_html_gadfe65c78231039e90507770db50c98c7"><div class="ttname"><a href="a00177.html#gadfe65c78231039e90507770db50c98c7">glm::mediump_uint8_t</a></div><div class="ttdeci">detail::uint8 mediump_uint8_t</div><div class="ttdoc">Medium precision 8 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00771">fwd.hpp:771</a></div></div>
+<div class="ttc" id="a00177_html_gab04bc97371cb6b5f54b3688e0c81578b"><div class="ttname"><a href="a00177.html#gab04bc97371cb6b5f54b3688e0c81578b">glm::fmat3x4</a></div><div class="ttdeci">highp_f32mat3x4 fmat3x4</div><div class="ttdoc">Default single-precision floating-point 3x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02363">fwd.hpp:2363</a></div></div>
+<div class="ttc" id="a00177_html_ga3c12cef4135603fd77d8fda85808730c"><div class="ttname"><a href="a00177.html#ga3c12cef4135603fd77d8fda85808730c">glm::i32vec2</a></div><div class="ttdeci">highp_i32vec2 i32vec2</div><div class="ttdoc">Default precision 32 bit signed integer vector of 2 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00527">fwd.hpp:527</a></div></div>
+<div class="ttc" id="a00177_html_ga6957c7b22f405683bb276554ca40dc37"><div class="ttname"><a href="a00177.html#ga6957c7b22f405683bb276554ca40dc37">glm::float64_t</a></div><div class="ttdeci">highp_float64_t float64_t</div><div class="ttdoc">Default 64 bit double-precision floating-point scalar. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l01501">fwd.hpp:1501</a></div></div>
+<div class="ttc" id="a00177_html_gaf4b5993e794e252607f91535b62a7e0c"><div class="ttname"><a href="a00177.html#gaf4b5993e794e252607f91535b62a7e0c">glm::i8vec3</a></div><div class="ttdeci">highp_i8vec3 i8vec3</div><div class="ttdoc">Default precision 8 bit signed integer vector of 3 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00372">fwd.hpp:372</a></div></div>
+<div class="ttc" id="a00177_html_gac3bc41bcac61d1ba8f02a6f68ce23f64"><div class="ttname"><a href="a00177.html#gac3bc41bcac61d1ba8f02a6f68ce23f64">glm::mediump_int64_t</a></div><div class="ttdeci">detail::int64 mediump_int64_t</div><div class="ttdoc">Medium precision 64 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00176">fwd.hpp:176</a></div></div>
+<div class="ttc" id="a00177_html_gafe2e08549805a7ded26da2a868bedbf5"><div class="ttname"><a href="a00177.html#gafe2e08549805a7ded26da2a868bedbf5">glm::f32mat4x4</a></div><div class="ttdeci">highp_f32mat4x4 f32mat4x4</div><div class="ttdoc">Default single-precision floating-point 4x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02445">fwd.hpp:2445</a></div></div>
+<div class="ttc" id="a00177_html_gab2329c5c14ff5a03b1ddec039e2c7409"><div class="ttname"><a href="a00177.html#gab2329c5c14ff5a03b1ddec039e2c7409">glm::i8vec1</a></div><div class="ttdeci">highp_i8vec1 i8vec1</div><div class="ttdoc">Default precision 8 bit signed integer scalar type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00364">fwd.hpp:364</a></div></div>
+<div class="ttc" id="a00177_html_gae3364a8090e7e1408056e00403dfecab"><div class="ttname"><a href="a00177.html#gae3364a8090e7e1408056e00403dfecab">glm::i32vec4</a></div><div class="ttdeci">highp_i32vec4 i32vec4</div><div class="ttdoc">Default precision 32 bit signed integer vector of 4 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00535">fwd.hpp:535</a></div></div>
+<div class="ttc" id="a00177_html_ga552a6bde5e75984efb0f863278da2e54"><div class="ttname"><a href="a00177.html#ga552a6bde5e75984efb0f863278da2e54">glm::lowp_i8</a></div><div class="ttdeci">detail::int8 lowp_i8</div><div class="ttdoc">Low precision 8 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00132">fwd.hpp:132</a></div></div>
+<div class="ttc" id="a00177_html_ga19d5e0d4d3d6d226c9c6c0f39756f9ad"><div class="ttname"><a href="a00177.html#ga19d5e0d4d3d6d226c9c6c0f39756f9ad">glm::f32vec3</a></div><div class="ttdeci">highp_f32vec3 f32vec3</div><div class="ttdoc">Default single-precision floating-point vector of 3 components. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02405">fwd.hpp:2405</a></div></div>
+<div class="ttc" id="a00177_html_ga10d8bd3c923a5386efcf25a4117fd84f"><div class="ttname"><a href="a00177.html#ga10d8bd3c923a5386efcf25a4117fd84f">glm::fvec1</a></div><div class="ttdeci">highp_f32vec1 fvec1</div><div class="ttdoc">Default single-precision floating-point vector of 1 components. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02327">fwd.hpp:2327</a></div></div>
+<div class="ttc" id="a00177_html_ga2c71c8bd9e2fe7d2e93ca250d8b6157f"><div class="ttname"><a href="a00177.html#ga2c71c8bd9e2fe7d2e93ca250d8b6157f">glm::highp_int32_t</a></div><div class="ttdeci">detail::int32 highp_int32_t</div><div class="ttdoc">32 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00220">fwd.hpp:220</a></div></div>
+<div class="ttc" id="a00177_html_ga7b968f2b86a0442a89c7359171e1d866"><div class="ttname"><a href="a00177.html#ga7b968f2b86a0442a89c7359171e1d866">glm::mediump_int64</a></div><div class="ttdeci">detail::int64 mediump_int64</div><div class="ttdoc">Medium precision 64 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00160">fwd.hpp:160</a></div></div>
+<div class="ttc" id="a00177_html_ga2af9490085ae3bdf36a544e9dd073610"><div class="ttname"><a href="a00177.html#ga2af9490085ae3bdf36a544e9dd073610">glm::mediump_u64</a></div><div class="ttdeci">detail::uint64 mediump_u64</div><div class="ttdoc">Medium precision 64 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00799">fwd.hpp:799</a></div></div>
+<div class="ttc" id="a00177_html_ga3460933f040f59f0fedb29df1e9be71c"><div class="ttname"><a href="a00177.html#ga3460933f040f59f0fedb29df1e9be71c">glm::u64vec3</a></div><div class="ttdeci">highp_u64vec3 u64vec3</div><div class="ttdoc">Default precision 64 bit unsigned integer vector of 3 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l01299">fwd.hpp:1299</a></div></div>
+<div class="ttc" id="a00177_html_gad339e25c32fe6665acf028f26c1b3e22"><div class="ttname"><a href="a00177.html#gad339e25c32fe6665acf028f26c1b3e22">glm::fmat3x3</a></div><div class="ttdeci">highp_f32mat3x3 fmat3x3</div><div class="ttdoc">Default single-precision floating-point 3x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02359">fwd.hpp:2359</a></div></div>
+<div class="ttc" id="a00177_html_ga50e58885aee2cf01bb3ba472c5b1697e"><div class="ttname"><a href="a00177.html#ga50e58885aee2cf01bb3ba472c5b1697e">glm::i8vec4</a></div><div class="ttdeci">highp_i8vec4 i8vec4</div><div class="ttdoc">Default precision 8 bit signed integer vector of 4 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00376">fwd.hpp:376</a></div></div>
+<div class="ttc" id="a00177_html_ga4ef2d77dcab241b1ef83f09edb2f1084"><div class="ttname"><a href="a00177.html#ga4ef2d77dcab241b1ef83f09edb2f1084">glm::fvec3</a></div><div class="ttdeci">highp_f32vec3 fvec3</div><div class="ttdoc">Default single-precision floating-point vector of 3 components. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02335">fwd.hpp:2335</a></div></div>
+<div class="ttc" id="a00177_html_ga1b09f03da7ac43055c68a349d5445083"><div class="ttname"><a href="a00177.html#ga1b09f03da7ac43055c68a349d5445083">glm::lowp_u8</a></div><div class="ttdeci">detail::uint8 lowp_u8</div><div class="ttdoc">Low precision 8 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00737">fwd.hpp:737</a></div></div>
+<div class="ttc" id="a00177_html_ga256b12b650c3f2fb86878fd1c5db8bc3"><div class="ttname"><a href="a00177.html#ga256b12b650c3f2fb86878fd1c5db8bc3">glm::highp_uint32</a></div><div class="ttdeci">detail::uint32 highp_uint32</div><div class="ttdoc">Medium precision 32 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00813">fwd.hpp:813</a></div></div>
+<div class="ttc" id="a00177_html_gab0082a25f19f02d2d0af0fcbe5ead732"><div class="ttname"><a href="a00177.html#gab0082a25f19f02d2d0af0fcbe5ead732">glm::fmat4x2</a></div><div class="ttdeci">highp_f32mat4x2 fmat4x2</div><div class="ttdoc">Default single-precision floating-point 4x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02367">fwd.hpp:2367</a></div></div>
+<div class="ttc" id="a00177_html_ga3963b1050fc65a383ee28e3f827b6e3e"><div class="ttname"><a href="a00177.html#ga3963b1050fc65a383ee28e3f827b6e3e">glm::mediump_uint16_t</a></div><div class="ttdeci">detail::uint16 mediump_uint16_t</div><div class="ttdoc">Medium precision 16 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00775">fwd.hpp:775</a></div></div>
+<div class="ttc" id="a00177_html_ga2171d9dc1fefb1c82e2817f45b622eac"><div class="ttname"><a href="a00177.html#ga2171d9dc1fefb1c82e2817f45b622eac">glm::uint32_t</a></div><div class="ttdeci">detail::uint32 uint32_t</div><div class="ttdoc">32 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00885">fwd.hpp:885</a></div></div>
+<div class="ttc" id="a00177_html_ga9b170dd4a8f38448a2dc93987c7875e9"><div class="ttname"><a href="a00177.html#ga9b170dd4a8f38448a2dc93987c7875e9">glm::mediump_uint64_t</a></div><div class="ttdeci">detail::uint64 mediump_uint64_t</div><div class="ttdoc">Medium precision 64 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00783">fwd.hpp:783</a></div></div>
+<div class="ttc" id="a00177_html_ga40cd3f391c03512f158d10a70062264e"><div class="ttname"><a href="a00177.html#ga40cd3f391c03512f158d10a70062264e">glm::i32vec3</a></div><div class="ttdeci">highp_i32vec3 i32vec3</div><div class="ttdoc">Default precision 32 bit signed integer vector of 3 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00531">fwd.hpp:531</a></div></div>
+<div class="ttc" id="a00177_html_ga0100666c90176eaba80e49357d123c7f"><div class="ttname"><a href="a00177.html#ga0100666c90176eaba80e49357d123c7f">glm::f32mat3x4</a></div><div class="ttdeci">highp_f32mat3x4 f32mat3x4</div><div class="ttdoc">Default single-precision floating-point 3x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02433">fwd.hpp:2433</a></div></div>
+<div class="ttc" id="a00177_html_ga114e005014d910bea07954eee24b7efb"><div class="ttname"><a href="a00177.html#ga114e005014d910bea07954eee24b7efb">glm::u8vec4</a></div><div class="ttdeci">highp_u8vec4 u8vec4</div><div class="ttdoc">Default precision 8 bit unsigned integer vector of 4 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00985">fwd.hpp:985</a></div></div>
+<div class="ttc" id="a00177_html_ga73c6abb280a45feeff60f9accaee91f3"><div class="ttname"><a href="a00177.html#ga73c6abb280a45feeff60f9accaee91f3">glm::highp_int64_t</a></div><div class="ttdeci">detail::int64 highp_int64_t</div><div class="ttdoc">High precision 64 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00224">fwd.hpp:224</a></div></div>
+<div class="ttc" id="a00177_html_ga5b4a3e499ee165efc0dc05add9c48235"><div class="ttname"><a href="a00177.html#ga5b4a3e499ee165efc0dc05add9c48235">glm::i64vec1</a></div><div class="ttdeci">highp_i64vec1 i64vec1</div><div class="ttdoc">Default precision 64 bit signed integer scalar type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00682">fwd.hpp:682</a></div></div>
+<div class="ttc" id="a00177_html_ga2885a6c89916911e418c06bb76b9bdbb"><div class="ttname"><a href="a00177.html#ga2885a6c89916911e418c06bb76b9bdbb">glm::mediump_uint16</a></div><div class="ttdeci">detail::uint16 mediump_uint16</div><div class="ttdoc">Medium precision 16 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00759">fwd.hpp:759</a></div></div>
+<div class="ttc" id="a00177_html_gaf3f312156984c365e9f65620354da70b"><div class="ttname"><a href="a00177.html#gaf3f312156984c365e9f65620354da70b">glm::u64</a></div><div class="ttdeci">detail::uint64 u64</div><div class="ttdoc">64 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00906">fwd.hpp:906</a></div></div>
+<div class="ttc" id="a00177_html_gaf645b1a60203b39c0207baff5e3d8c3c"><div class="ttname"><a href="a00177.html#gaf645b1a60203b39c0207baff5e3d8c3c">glm::lowp_int64</a></div><div class="ttdeci">detail::int64 lowp_int64</div><div class="ttdoc">Low precision 64 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00112">fwd.hpp:112</a></div></div>
+<div class="ttc" id="a00177_html_ga8b2cd8d31eb345b2d641d9261c38db1a"><div class="ttname"><a href="a00177.html#ga8b2cd8d31eb345b2d641d9261c38db1a">glm::lowp_int16_t</a></div><div class="ttdeci">detail::int16 lowp_int16_t</div><div class="ttdoc">Low precision 16 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00120">fwd.hpp:120</a></div></div>
+<div class="ttc" id="a00177_html_gadff3608baa4b5bd3ed28f95c1c2c345d"><div class="ttname"><a href="a00177.html#gadff3608baa4b5bd3ed28f95c1c2c345d">glm::mediump_int16</a></div><div class="ttdeci">detail::int16 mediump_int16</div><div class="ttdoc">Medium precision 16 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00152">fwd.hpp:152</a></div></div>
+<div class="ttc" id="a00177_html_gae8f5e3e964ca2ae240adc2c0d74adede"><div class="ttname"><a href="a00177.html#gae8f5e3e964ca2ae240adc2c0d74adede">glm::int16_t</a></div><div class="ttdeci">detail::int16 int16_t</div><div class="ttdoc">16 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00272">fwd.hpp:272</a></div></div>
+<div class="ttc" id="a00177_html_ga322a7d7d2c2c68994dc872a33de63c61"><div class="ttname"><a href="a00177.html#ga322a7d7d2c2c68994dc872a33de63c61">glm::int64_t</a></div><div class="ttdeci">detail::int64 int64_t</div><div class="ttdoc">64 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00280">fwd.hpp:280</a></div></div>
+<div class="ttc" id="a00177_html_ga96faea43ac5f875d2d3ffbf8d213e3eb"><div class="ttname"><a href="a00177.html#ga96faea43ac5f875d2d3ffbf8d213e3eb">glm::i32</a></div><div class="ttdeci">detail::int32 i32</div><div class="ttdoc">32 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00293">fwd.hpp:293</a></div></div>
+<div class="ttc" id="a00177_html_gaf1b735b4b1145174f4e4167d13778f9b"><div class="ttname"><a href="a00177.html#gaf1b735b4b1145174f4e4167d13778f9b">glm::lowp_uint32_t</a></div><div class="ttdeci">detail::uint32 lowp_uint32_t</div><div class="ttdoc">Low precision 32 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00728">fwd.hpp:728</a></div></div>
+<div class="ttc" id="a00177_html_ga5fde0fa4a3852a9dd5d637a92ee74718"><div class="ttname"><a href="a00177.html#ga5fde0fa4a3852a9dd5d637a92ee74718">glm::highp_int16</a></div><div class="ttdeci">detail::int16 highp_int16</div><div class="ttdoc">High precision 16 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00200">fwd.hpp:200</a></div></div>
+<div class="ttc" id="a00177_html_ga91f91f411080c37730856ff5887f5bcf"><div class="ttname"><a href="a00177.html#ga91f91f411080c37730856ff5887f5bcf">glm::uint16_t</a></div><div class="ttdeci">detail::uint16 uint16_t</div><div class="ttdoc">16 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00881">fwd.hpp:881</a></div></div>
+<div class="ttc" id="a00177_html_ga6966c0cb4673928c9c9da2e91006d2c0"><div class="ttname"><a href="a00177.html#ga6966c0cb4673928c9c9da2e91006d2c0">glm::f32quat</a></div><div class="ttdeci">highp_f32quat f32quat</div><div class="ttdoc">Default single-precision floating-point quaternion. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02461">fwd.hpp:2461</a></div></div>
+<div class="ttc" id="a00177_html_ga68894201dd511792a7af6cff7b5adf71"><div class="ttname"><a href="a00177.html#ga68894201dd511792a7af6cff7b5adf71">glm::f64mat3</a></div><div class="ttdeci">f64mat3x3 f64mat3</div><div class="ttdoc">Default double-precision floating-point 3x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02559">fwd.hpp:2559</a></div></div>
+<div class="ttc" id="a00177_html_gafaad77b464b5a35626c31205ac6780e3"><div class="ttname"><a href="a00177.html#gafaad77b464b5a35626c31205ac6780e3">glm::f64vec2</a></div><div class="ttdeci">highp_f64vec2 f64vec2</div><div class="ttdoc">Default double-precision floating-point vector of 2 components. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02507">fwd.hpp:2507</a></div></div>
+<div class="ttc" id="a00177_html_gadb997e409103d4da18abd837e636a496"><div class="ttname"><a href="a00177.html#gadb997e409103d4da18abd837e636a496">glm::i64</a></div><div class="ttdeci">detail::int64 i64</div><div class="ttdoc">64 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00297">fwd.hpp:297</a></div></div>
+<div class="ttc" id="a00177_html_gafb18822e2eac88fa861a76cefd25d550"><div class="ttname"><a href="a00177.html#gafb18822e2eac88fa861a76cefd25d550">glm::f64mat2x4</a></div><div class="ttdeci">highp_f64mat2x4 f64mat2x4</div><div class="ttdoc">Default double-precision floating-point 2x4 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02527">fwd.hpp:2527</a></div></div>
+<div class="ttc" id="a00177_html_gae1a5081181c96cc37ce9418f6e856cb6"><div class="ttname"><a href="a00177.html#gae1a5081181c96cc37ce9418f6e856cb6">glm::f64mat3x3</a></div><div class="ttdeci">highp_f64mat3x3 f64mat3x3</div><div class="ttdoc">Default double-precision floating-point 3x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02535">fwd.hpp:2535</a></div></div>
+<div class="ttc" id="a00177_html_gacaea06d0a79ef3172e887a7a6ba434ff"><div class="ttname"><a href="a00177.html#gacaea06d0a79ef3172e887a7a6ba434ff">glm::highp_int16_t</a></div><div class="ttdeci">detail::int16 highp_int16_t</div><div class="ttdoc">High precision 16 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00216">fwd.hpp:216</a></div></div>
+<div class="ttc" id="a00177_html_ga9f20af6e8eca2abdcde08408948cc1ca"><div class="ttname"><a href="a00177.html#ga9f20af6e8eca2abdcde08408948cc1ca">glm::fmat3x2</a></div><div class="ttdeci">highp_f32mat3x2 fmat3x2</div><div class="ttdoc">Default single-precision floating-point 3x2 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02355">fwd.hpp:2355</a></div></div>
+<div class="ttc" id="a00177_html_ga92e0c191e5cc326255284d08be3af7c5"><div class="ttname"><a href="a00177.html#ga92e0c191e5cc326255284d08be3af7c5">glm::u8vec1</a></div><div class="ttdeci">highp_u8vec1 u8vec1</div><div class="ttdoc">Default precision 8 bit unsigned integer scalar type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00973">fwd.hpp:973</a></div></div>
+<div class="ttc" id="a00177_html_gabe6a542dd6c1d5ffd847f1b9b4c9c9b7"><div class="ttname"><a href="a00177.html#gabe6a542dd6c1d5ffd847f1b9b4c9c9b7">glm::f32</a></div><div class="ttdeci">highp_float32_t f32</div><div class="ttdoc">Default 32 bit single-precision floating-point scalar. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l01505">fwd.hpp:1505</a></div></div>
+<div class="ttc" id="a00177_html_ga1085c50dd8fbeb5e7e609b1c127492a5"><div class="ttname"><a href="a00177.html#ga1085c50dd8fbeb5e7e609b1c127492a5">glm::highp_int8_t</a></div><div class="ttdeci">detail::int8 highp_int8_t</div><div class="ttdoc">High precision 8 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l00212">fwd.hpp:212</a></div></div>
+<div class="ttc" id="a00177_html_gaf4377997b299a287f7ab3358c9bd3e4c"><div class="ttname"><a href="a00177.html#gaf4377997b299a287f7ab3358c9bd3e4c">glm::f32mat3</a></div><div class="ttdeci">f32mat3x3 f32mat3</div><div class="ttdoc">Default single-precision floating-point 3x3 matrix. </div><div class="ttdef"><b>Definition:</b> <a href="a00038_source.html#l02453">fwd.hpp:2453</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00125.html b/src/third_party/glm/doc/api/a00125.html
new file mode 100644
index 0000000..a03dbdc
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00125.html
@@ -0,0 +1,128 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: type_ptr.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_9440d7c11b99dcd7e5d369c7cf9802fe.html">gtc</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">type_ptr.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00125_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga52a16e333fef7e33ca740779482a8693"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga52a16e333fef7e33ca740779482a8693"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat2x2< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00178.html#ga52a16e333fef7e33ca740779482a8693">make_mat2</a> (T const *const ptr)</td></tr>
+<tr class="separator:ga52a16e333fef7e33ca740779482a8693"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gadb29e510762e1042069cb28bf24ae990"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gadb29e510762e1042069cb28bf24ae990"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat2x2< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00178.html#gadb29e510762e1042069cb28bf24ae990">make_mat2x2</a> (T const *const ptr)</td></tr>
+<tr class="separator:gadb29e510762e1042069cb28bf24ae990"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga37988c6dd941f617cdfab86d54375fc1"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga37988c6dd941f617cdfab86d54375fc1"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat2x3< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00178.html#ga37988c6dd941f617cdfab86d54375fc1">make_mat2x3</a> (T const *const ptr)</td></tr>
+<tr class="separator:ga37988c6dd941f617cdfab86d54375fc1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6dfb2ac10859b0cc8e3893ea84fa95b5"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga6dfb2ac10859b0cc8e3893ea84fa95b5"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat2x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00178.html#ga6dfb2ac10859b0cc8e3893ea84fa95b5">make_mat2x4</a> (T const *const ptr)</td></tr>
+<tr class="separator:ga6dfb2ac10859b0cc8e3893ea84fa95b5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac2bc10c519ffc8db9e24f325f23787ea"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gac2bc10c519ffc8db9e24f325f23787ea"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat3x3< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00178.html#gac2bc10c519ffc8db9e24f325f23787ea">make_mat3</a> (T const *const ptr)</td></tr>
+<tr class="separator:gac2bc10c519ffc8db9e24f325f23787ea"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gabe1e5066608a66da7a94f802b57b4eed"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gabe1e5066608a66da7a94f802b57b4eed"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat3x2< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00178.html#gabe1e5066608a66da7a94f802b57b4eed">make_mat3x2</a> (T const *const ptr)</td></tr>
+<tr class="separator:gabe1e5066608a66da7a94f802b57b4eed"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3cbe7adf857c867cee77eae4617abadd"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga3cbe7adf857c867cee77eae4617abadd"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat3x3< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00178.html#ga3cbe7adf857c867cee77eae4617abadd">make_mat3x3</a> (T const *const ptr)</td></tr>
+<tr class="separator:ga3cbe7adf857c867cee77eae4617abadd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac083edd180ab4d4b817acc60c516209b"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gac083edd180ab4d4b817acc60c516209b"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat3x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00178.html#gac083edd180ab4d4b817acc60c516209b">make_mat3x4</a> (T const *const ptr)</td></tr>
+<tr class="separator:gac083edd180ab4d4b817acc60c516209b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2c6e6d457cb932e1ce683e4f690a6f60"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga2c6e6d457cb932e1ce683e4f690a6f60"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00178.html#ga2c6e6d457cb932e1ce683e4f690a6f60">make_mat4</a> (T const *const ptr)</td></tr>
+<tr class="separator:ga2c6e6d457cb932e1ce683e4f690a6f60"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga967a5b934e67ff9a6d1d0d27a377a264"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga967a5b934e67ff9a6d1d0d27a377a264"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x2< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00178.html#ga967a5b934e67ff9a6d1d0d27a377a264">make_mat4x2</a> (T const *const ptr)</td></tr>
+<tr class="separator:ga967a5b934e67ff9a6d1d0d27a377a264"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4d42daced532b33cc672280e48670a51"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga4d42daced532b33cc672280e48670a51"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x3< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00178.html#ga4d42daced532b33cc672280e48670a51">make_mat4x3</a> (T const *const ptr)</td></tr>
+<tr class="separator:ga4d42daced532b33cc672280e48670a51"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf605a5f5e2ff594e8d404b2855b09541"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gaf605a5f5e2ff594e8d404b2855b09541"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00178.html#gaf605a5f5e2ff594e8d404b2855b09541">make_mat4x4</a> (T const *const ptr)</td></tr>
+<tr class="separator:gaf605a5f5e2ff594e8d404b2855b09541"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaadafb6600af2633e4c98cc64c72f5269"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gaadafb6600af2633e4c98cc64c72f5269"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tquat< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00178.html#gaadafb6600af2633e4c98cc64c72f5269">make_quat</a> (T const *const ptr)</td></tr>
+<tr class="separator:gaadafb6600af2633e4c98cc64c72f5269"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5f7393c30970c5949be13ceb525093a6"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga5f7393c30970c5949be13ceb525093a6"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec2< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00178.html#ga5f7393c30970c5949be13ceb525093a6">make_vec2</a> (T const *const ptr)</td></tr>
+<tr class="separator:ga5f7393c30970c5949be13ceb525093a6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga86f4bc63570db86346db2e567fb760f6"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga86f4bc63570db86346db2e567fb760f6"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00178.html#ga86f4bc63570db86346db2e567fb760f6">make_vec3</a> (T const *const ptr)</td></tr>
+<tr class="separator:ga86f4bc63570db86346db2e567fb760f6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga152345176b8951c15711f6ed4f6fc237"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga152345176b8951c15711f6ed4f6fc237"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00178.html#ga152345176b8951c15711f6ed4f6fc237">make_vec4</a> (T const *const ptr)</td></tr>
+<tr class="separator:ga152345176b8951c15711f6ed4f6fc237"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf019636bb8bd7c9efb7c7ce3bb23bcfc"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gaf019636bb8bd7c9efb7c7ce3bb23bcfc"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType::value_type const * </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00178.html#gaf019636bb8bd7c9efb7c7ce3bb23bcfc">value_ptr</a> (genType const &vec)</td></tr>
+<tr class="separator:gaf019636bb8bd7c9efb7c7ce3bb23bcfc"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00178.html">GLM_GTC_type_ptr</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd>
+<dd>
+gtc_half_float (dependence) </dd>
+<dd>
+<a class="el" href="a00172.html" title="Defines a templated quaternion type and several quaternion operations. ">GLM_GTC_quaternion</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00125_source.html">type_ptr.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00125_source.html b/src/third_party/glm/doc/api/a00125_source.html
new file mode 100644
index 0000000..c0de66b
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00125_source.html
@@ -0,0 +1,158 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: type_ptr.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_9440d7c11b99dcd7e5d369c7cf9802fe.html">gtc</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">type_ptr.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00125.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#include "../gtc/quaternion.hpp"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#include "../vec2.hpp"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#include "../vec3.hpp"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor">#include "../vec4.hpp"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor">#include "../mat2x2.hpp"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor">#include "../mat2x3.hpp"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor">#include "../mat2x4.hpp"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor">#include "../mat3x2.hpp"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor">#include "../mat3x3.hpp"</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="preprocessor">#include "../mat3x4.hpp"</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor">#include "../mat4x2.hpp"</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor">#include "../mat4x3.hpp"</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="preprocessor">#include "../mat4x4.hpp"</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="preprocessor">#include <cstring></span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="preprocessor"># pragma message("GLM: GLM_GTC_type_ptr extension included")</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> {</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keyword">template</span><<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  GLM_FUNC_DECL <span class="keyword">typename</span> genType::value_type <span class="keyword">const</span> * <a class="code" href="a00178.html#gaf019636bb8bd7c9efb7c7ce3bb23bcfc">value_ptr</a>(genType <span class="keyword">const</span> & vec);</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  GLM_FUNC_DECL tvec2<T, defaultp> <a class="code" href="a00178.html#ga5f7393c30970c5949be13ceb525093a6">make_vec2</a>(T <span class="keyword">const</span> * <span class="keyword">const</span> ptr);</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  GLM_FUNC_DECL tvec3<T, defaultp> <a class="code" href="a00178.html#ga86f4bc63570db86346db2e567fb760f6">make_vec3</a>(T <span class="keyword">const</span> * <span class="keyword">const</span> ptr);</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  GLM_FUNC_DECL tvec4<T, defaultp> <a class="code" href="a00178.html#ga152345176b8951c15711f6ed4f6fc237">make_vec4</a>(T <span class="keyword">const</span> * <span class="keyword">const</span> ptr);</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  GLM_FUNC_DECL tmat2x2<T, defaultp> <a class="code" href="a00178.html#gadb29e510762e1042069cb28bf24ae990">make_mat2x2</a>(T <span class="keyword">const</span> * <span class="keyword">const</span> ptr);</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  GLM_FUNC_DECL tmat2x3<T, defaultp> <a class="code" href="a00178.html#ga37988c6dd941f617cdfab86d54375fc1">make_mat2x3</a>(T <span class="keyword">const</span> * <span class="keyword">const</span> ptr);</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  GLM_FUNC_DECL tmat2x4<T, defaultp> <a class="code" href="a00178.html#ga6dfb2ac10859b0cc8e3893ea84fa95b5">make_mat2x4</a>(T <span class="keyword">const</span> * <span class="keyword">const</span> ptr);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  GLM_FUNC_DECL tmat3x2<T, defaultp> <a class="code" href="a00178.html#gabe1e5066608a66da7a94f802b57b4eed">make_mat3x2</a>(T <span class="keyword">const</span> * <span class="keyword">const</span> ptr);</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  GLM_FUNC_DECL tmat3x3<T, defaultp> <a class="code" href="a00178.html#ga3cbe7adf857c867cee77eae4617abadd">make_mat3x3</a>(T <span class="keyword">const</span> * <span class="keyword">const</span> ptr);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  GLM_FUNC_DECL tmat3x4<T, defaultp> <a class="code" href="a00178.html#gac083edd180ab4d4b817acc60c516209b">make_mat3x4</a>(T <span class="keyword">const</span> * <span class="keyword">const</span> ptr);</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  GLM_FUNC_DECL tmat4x2<T, defaultp> <a class="code" href="a00178.html#ga967a5b934e67ff9a6d1d0d27a377a264">make_mat4x2</a>(T <span class="keyword">const</span> * <span class="keyword">const</span> ptr);</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  GLM_FUNC_DECL tmat4x3<T, defaultp> <a class="code" href="a00178.html#ga4d42daced532b33cc672280e48670a51">make_mat4x3</a>(T <span class="keyword">const</span> * <span class="keyword">const</span> ptr);</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  GLM_FUNC_DECL tmat4x4<T, defaultp> <a class="code" href="a00178.html#gaf605a5f5e2ff594e8d404b2855b09541">make_mat4x4</a>(T <span class="keyword">const</span> * <span class="keyword">const</span> ptr);</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  </div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  GLM_FUNC_DECL tmat2x2<T, defaultp> <a class="code" href="a00178.html#ga52a16e333fef7e33ca740779482a8693">make_mat2</a>(T <span class="keyword">const</span> * <span class="keyword">const</span> ptr);</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  GLM_FUNC_DECL tmat3x3<T, defaultp> <a class="code" href="a00178.html#gac2bc10c519ffc8db9e24f325f23787ea">make_mat3</a>(T <span class="keyword">const</span> * <span class="keyword">const</span> ptr);</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  </div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  GLM_FUNC_DECL tmat4x4<T, defaultp> <a class="code" href="a00178.html#ga2c6e6d457cb932e1ce683e4f690a6f60">make_mat4</a>(T <span class="keyword">const</span> * <span class="keyword">const</span> ptr);</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  GLM_FUNC_DECL tquat<T, defaultp> <a class="code" href="a00178.html#gaadafb6600af2633e4c98cc64c72f5269">make_quat</a>(T <span class="keyword">const</span> * <span class="keyword">const</span> ptr);</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="preprocessor">#include "type_ptr.inl"</span></div>
+<div class="ttc" id="a00178_html_gaf605a5f5e2ff594e8d404b2855b09541"><div class="ttname"><a href="a00178.html#gaf605a5f5e2ff594e8d404b2855b09541">glm::make_mat4x4</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, defaultp > make_mat4x4(T const *const ptr)</div><div class="ttdoc">Build a matrix from a pointer. </div></div>
+<div class="ttc" id="a00178_html_ga86f4bc63570db86346db2e567fb760f6"><div class="ttname"><a href="a00178.html#ga86f4bc63570db86346db2e567fb760f6">glm::make_vec3</a></div><div class="ttdeci">GLM_FUNC_DECL tvec3< T, defaultp > make_vec3(T const *const ptr)</div><div class="ttdoc">Build a vector from a pointer. </div></div>
+<div class="ttc" id="a00178_html_gac083edd180ab4d4b817acc60c516209b"><div class="ttname"><a href="a00178.html#gac083edd180ab4d4b817acc60c516209b">glm::make_mat3x4</a></div><div class="ttdeci">GLM_FUNC_DECL tmat3x4< T, defaultp > make_mat3x4(T const *const ptr)</div><div class="ttdoc">Build a matrix from a pointer. </div></div>
+<div class="ttc" id="a00178_html_ga967a5b934e67ff9a6d1d0d27a377a264"><div class="ttname"><a href="a00178.html#ga967a5b934e67ff9a6d1d0d27a377a264">glm::make_mat4x2</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x2< T, defaultp > make_mat4x2(T const *const ptr)</div><div class="ttdoc">Build a matrix from a pointer. </div></div>
+<div class="ttc" id="a00178_html_gaadafb6600af2633e4c98cc64c72f5269"><div class="ttname"><a href="a00178.html#gaadafb6600af2633e4c98cc64c72f5269">glm::make_quat</a></div><div class="ttdeci">GLM_FUNC_DECL tquat< T, defaultp > make_quat(T const *const ptr)</div><div class="ttdoc">Build a quaternion from a pointer. </div></div>
+<div class="ttc" id="a00178_html_ga152345176b8951c15711f6ed4f6fc237"><div class="ttname"><a href="a00178.html#ga152345176b8951c15711f6ed4f6fc237">glm::make_vec4</a></div><div class="ttdeci">GLM_FUNC_DECL tvec4< T, defaultp > make_vec4(T const *const ptr)</div><div class="ttdoc">Build a vector from a pointer. </div></div>
+<div class="ttc" id="a00178_html_ga6dfb2ac10859b0cc8e3893ea84fa95b5"><div class="ttname"><a href="a00178.html#ga6dfb2ac10859b0cc8e3893ea84fa95b5">glm::make_mat2x4</a></div><div class="ttdeci">GLM_FUNC_DECL tmat2x4< T, defaultp > make_mat2x4(T const *const ptr)</div><div class="ttdoc">Build a matrix from a pointer. </div></div>
+<div class="ttc" id="a00178_html_gac2bc10c519ffc8db9e24f325f23787ea"><div class="ttname"><a href="a00178.html#gac2bc10c519ffc8db9e24f325f23787ea">glm::make_mat3</a></div><div class="ttdeci">GLM_FUNC_DECL tmat3x3< T, defaultp > make_mat3(T const *const ptr)</div><div class="ttdoc">Build a matrix from a pointer. </div></div>
+<div class="ttc" id="a00178_html_ga52a16e333fef7e33ca740779482a8693"><div class="ttname"><a href="a00178.html#ga52a16e333fef7e33ca740779482a8693">glm::make_mat2</a></div><div class="ttdeci">GLM_FUNC_DECL tmat2x2< T, defaultp > make_mat2(T const *const ptr)</div><div class="ttdoc">Build a matrix from a pointer. </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00178_html_ga37988c6dd941f617cdfab86d54375fc1"><div class="ttname"><a href="a00178.html#ga37988c6dd941f617cdfab86d54375fc1">glm::make_mat2x3</a></div><div class="ttdeci">GLM_FUNC_DECL tmat2x3< T, defaultp > make_mat2x3(T const *const ptr)</div><div class="ttdoc">Build a matrix from a pointer. </div></div>
+<div class="ttc" id="a00178_html_gadb29e510762e1042069cb28bf24ae990"><div class="ttname"><a href="a00178.html#gadb29e510762e1042069cb28bf24ae990">glm::make_mat2x2</a></div><div class="ttdeci">GLM_FUNC_DECL tmat2x2< T, defaultp > make_mat2x2(T const *const ptr)</div><div class="ttdoc">Build a matrix from a pointer. </div></div>
+<div class="ttc" id="a00178_html_ga3cbe7adf857c867cee77eae4617abadd"><div class="ttname"><a href="a00178.html#ga3cbe7adf857c867cee77eae4617abadd">glm::make_mat3x3</a></div><div class="ttdeci">GLM_FUNC_DECL tmat3x3< T, defaultp > make_mat3x3(T const *const ptr)</div><div class="ttdoc">Build a matrix from a pointer. </div></div>
+<div class="ttc" id="a00178_html_ga5f7393c30970c5949be13ceb525093a6"><div class="ttname"><a href="a00178.html#ga5f7393c30970c5949be13ceb525093a6">glm::make_vec2</a></div><div class="ttdeci">GLM_FUNC_DECL tvec2< T, defaultp > make_vec2(T const *const ptr)</div><div class="ttdoc">Build a vector from a pointer. </div></div>
+<div class="ttc" id="a00178_html_gabe1e5066608a66da7a94f802b57b4eed"><div class="ttname"><a href="a00178.html#gabe1e5066608a66da7a94f802b57b4eed">glm::make_mat3x2</a></div><div class="ttdeci">GLM_FUNC_DECL tmat3x2< T, defaultp > make_mat3x2(T const *const ptr)</div><div class="ttdoc">Build a matrix from a pointer. </div></div>
+<div class="ttc" id="a00178_html_ga4d42daced532b33cc672280e48670a51"><div class="ttname"><a href="a00178.html#ga4d42daced532b33cc672280e48670a51">glm::make_mat4x3</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x3< T, defaultp > make_mat4x3(T const *const ptr)</div><div class="ttdoc">Build a matrix from a pointer. </div></div>
+<div class="ttc" id="a00178_html_ga2c6e6d457cb932e1ce683e4f690a6f60"><div class="ttname"><a href="a00178.html#ga2c6e6d457cb932e1ce683e4f690a6f60">glm::make_mat4</a></div><div class="ttdeci">GLM_FUNC_DECL tmat4x4< T, defaultp > make_mat4(T const *const ptr)</div><div class="ttdoc">Build a matrix from a pointer. </div></div>
+<div class="ttc" id="a00178_html_gaf019636bb8bd7c9efb7c7ce3bb23bcfc"><div class="ttname"><a href="a00178.html#gaf019636bb8bd7c9efb7c7ce3bb23bcfc">glm::value_ptr</a></div><div class="ttdeci">GLM_FUNC_DECL genType::value_type const * value_ptr(genType const &vec)</div><div class="ttdoc">Return the constant address to the data of the input parameter. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00126.html b/src/third_party/glm/doc/api/a00126.html
new file mode 100644
index 0000000..45617d6
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00126.html
@@ -0,0 +1,67 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: type_trait.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">type_trait.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00126_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00235.html">GLM_GTX_type_trait</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00126_source.html">type_trait.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00126_source.html b/src/third_party/glm/doc/api/a00126_source.html
new file mode 100644
index 0000000..952d517
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00126_source.html
@@ -0,0 +1,299 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: type_trait.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">type_trait.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00126.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include "../detail/type_vec2.hpp"</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "../detail/type_vec3.hpp"</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "../detail/type_vec4.hpp"</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include "../detail/type_mat2x2.hpp"</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "../detail/type_mat2x3.hpp"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "../detail/type_mat2x4.hpp"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "../detail/type_mat3x2.hpp"</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "../detail/type_mat3x3.hpp"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "../detail/type_mat3x4.hpp"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "../detail/type_mat4x2.hpp"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "../detail/type_mat4x3.hpp"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "../detail/type_mat4x4.hpp"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include "../gtc/quaternion.hpp"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "../gtx/dual_quaternion.hpp"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_type_trait extension included")</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> {</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keyword">template</span> <<span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>genType, <span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keyword">struct </span>type</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  {</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> is_vec = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> is_mat = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> is_quat = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keyword">static</span> length_t <span class="keyword">const</span> components = 0;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keyword">static</span> length_t <span class="keyword">const</span> cols = 0;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keyword">static</span> length_t <span class="keyword">const</span> rows = 0;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  };</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keyword">struct </span>type<tvec1, T, P></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  {</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> is_vec = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> is_mat = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> is_quat = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keyword">enum</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  {</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  components = 1</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  };</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  };</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keyword">struct </span>type<tvec2, T, P></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  {</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> is_vec = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> is_mat = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> is_quat = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keyword">enum</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  {</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  components = 2</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  };</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  };</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keyword">struct </span>type<tvec3, T, P></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  {</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> is_vec = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> is_mat = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> is_quat = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keyword">enum</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  {</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  components = 3</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  };</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  };</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keyword">struct </span>type<tvec4, T, P></div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  {</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> is_vec = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> is_mat = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> is_quat = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="keyword">enum</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  {</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  components = 4</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  };</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  };</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="keyword">struct </span>type<tmat2x2, T, P></div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  {</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> is_vec = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> is_mat = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> is_quat = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="keyword">enum</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  {</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  components = 2,</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  cols = 2,</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  rows = 2</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  };</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  };</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keyword">struct </span>type<tmat2x3, T, P></div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  {</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> is_vec = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> is_mat = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> is_quat = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keyword">enum</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  {</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  components = 2,</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  cols = 2,</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  rows = 3</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  };</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  };</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keyword">struct </span>type<tmat2x4, T, P></div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  {</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> is_vec = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> is_mat = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> is_quat = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keyword">enum</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  {</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  components = 2,</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  cols = 2,</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  rows = 4</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  };</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  };</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="keyword">struct </span>type<tmat3x2, T, P></div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  {</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> is_vec = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> is_mat = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> is_quat = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="keyword">enum</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  {</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  components = 3,</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  cols = 3,</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  rows = 2</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  };</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  };</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="keyword">struct </span>type<tmat3x3, T, P></div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  {</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> is_vec = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> is_mat = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> is_quat = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="keyword">enum</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  {</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  components = 3,</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  cols = 3,</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  rows = 3</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  };</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  };</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <span class="keyword">struct </span>type<tmat3x4, T, P></div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  {</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> is_vec = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> is_mat = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> is_quat = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  <span class="keyword">enum</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  {</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  components = 3,</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  cols = 3,</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  rows = 4</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  };</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  };</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  <span class="keyword">struct </span>type<tmat4x2, T, P></div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  {</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> is_vec = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> is_mat = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> is_quat = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="keyword">enum</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  {</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  components = 4,</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  cols = 4,</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  rows = 2</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  };</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  };</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <span class="keyword">struct </span>type<tmat4x3, T, P></div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  {</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> is_vec = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> is_mat = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> is_quat = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  <span class="keyword">enum</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  {</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  components = 4,</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  cols = 4,</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  rows = 3</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  };</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  };</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> </div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <span class="keyword">struct </span>type<tmat4x4, T, P></div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  {</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> is_vec = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> is_mat = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> is_quat = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <span class="keyword">enum</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  {</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  components = 4,</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  cols = 4,</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  rows = 4</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  };</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  };</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> </div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <span class="keyword">struct </span>type<tquat, T, P></div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  {</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> is_vec = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> is_mat = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> is_quat = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  <span class="keyword">enum</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  {</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  components = 4</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  };</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  };</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="keyword">struct </span>type<tdualquat, T, P></div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  {</div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> is_vec = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> is_mat = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> is_quat = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="keyword">enum</span></div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  {</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  components = 8</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  };</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  };</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> </div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> </div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <span class="preprocessor">#include "type_trait.inl"</span></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00127.html b/src/third_party/glm/doc/api/a00127.html
new file mode 100644
index 0000000..997816c
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00127.html
@@ -0,0 +1,192 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: type_vec.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#typedef-members">Typedefs</a> </div>
+ <div class="headertitle">
+<div class="title">type_vec.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00127_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ga0e46aaaccc5e713eac5bfbc8d6885a60"><td class="memItemLeft" align="right" valign="top">typedef highp_bvec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ga0e46aaaccc5e713eac5bfbc8d6885a60">bvec2</a></td></tr>
+<tr class="separator:ga0e46aaaccc5e713eac5bfbc8d6885a60"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga150731e2a148eff8752114a0e450505e"><td class="memItemLeft" align="right" valign="top">typedef highp_bvec3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ga150731e2a148eff8752114a0e450505e">bvec3</a></td></tr>
+<tr class="separator:ga150731e2a148eff8752114a0e450505e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga444e8f61bfb3a6f037d019ac6933f8c6"><td class="memItemLeft" align="right" valign="top">typedef highp_bvec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ga444e8f61bfb3a6f037d019ac6933f8c6">bvec4</a></td></tr>
+<tr class="separator:ga444e8f61bfb3a6f037d019ac6933f8c6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga15ade901680b29b78c1f9d1796db6e0e"><td class="memItemLeft" align="right" valign="top">typedef highp_dvec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ga15ade901680b29b78c1f9d1796db6e0e">dvec2</a></td></tr>
+<tr class="separator:ga15ade901680b29b78c1f9d1796db6e0e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gabebd0c7e3c5cd337d95c313c5e8b8db4"><td class="memItemLeft" align="right" valign="top">typedef highp_dvec3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#gabebd0c7e3c5cd337d95c313c5e8b8db4">dvec3</a></td></tr>
+<tr class="separator:gabebd0c7e3c5cd337d95c313c5e8b8db4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9503f809789bda7e8852a6abde3ae5c1"><td class="memItemLeft" align="right" valign="top">typedef highp_dvec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ga9503f809789bda7e8852a6abde3ae5c1">dvec4</a></td></tr>
+<tr class="separator:ga9503f809789bda7e8852a6abde3ae5c1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga829f39950549881a08c534946c0487e1"><td class="memItemLeft" align="right" valign="top">typedef tvec2< bool, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga829f39950549881a08c534946c0487e1">highp_bvec2</a></td></tr>
+<tr class="separator:ga829f39950549881a08c534946c0487e1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaca7c2a58eb926799c30ad547a290fccf"><td class="memItemLeft" align="right" valign="top">typedef tvec3< bool, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gaca7c2a58eb926799c30ad547a290fccf">highp_bvec3</a></td></tr>
+<tr class="separator:gaca7c2a58eb926799c30ad547a290fccf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae5f9c57d04b338c9a51a9af39e50795b"><td class="memItemLeft" align="right" valign="top">typedef tvec4< bool, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gae5f9c57d04b338c9a51a9af39e50795b">highp_bvec4</a></td></tr>
+<tr class="separator:gae5f9c57d04b338c9a51a9af39e50795b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga435eb408e8dfa4f7185368109d432c14"><td class="memItemLeft" align="right" valign="top">typedef tvec2< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga435eb408e8dfa4f7185368109d432c14">highp_dvec2</a></td></tr>
+<tr class="separator:ga435eb408e8dfa4f7185368109d432c14"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga01d2c9b292e27518e4d6f8442607e8aa"><td class="memItemLeft" align="right" valign="top">typedef tvec3< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga01d2c9b292e27518e4d6f8442607e8aa">highp_dvec3</a></td></tr>
+<tr class="separator:ga01d2c9b292e27518e4d6f8442607e8aa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5d454f34d819d90b9bbb30dcb9ed7b39"><td class="memItemLeft" align="right" valign="top">typedef tvec4< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga5d454f34d819d90b9bbb30dcb9ed7b39">highp_dvec4</a></td></tr>
+<tr class="separator:ga5d454f34d819d90b9bbb30dcb9ed7b39"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa015a3707413de20c03948308dba2f2e"><td class="memItemLeft" align="right" valign="top">typedef tvec2< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gaa015a3707413de20c03948308dba2f2e">highp_ivec2</a></td></tr>
+<tr class="separator:gaa015a3707413de20c03948308dba2f2e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8330bf0d7e6d03ca12ee2b1334c2c30f"><td class="memItemLeft" align="right" valign="top">typedef tvec3< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga8330bf0d7e6d03ca12ee2b1334c2c30f">highp_ivec3</a></td></tr>
+<tr class="separator:ga8330bf0d7e6d03ca12ee2b1334c2c30f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0424a75bb400571489b8528897f35258"><td class="memItemLeft" align="right" valign="top">typedef tvec4< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga0424a75bb400571489b8528897f35258">highp_ivec4</a></td></tr>
+<tr class="separator:ga0424a75bb400571489b8528897f35258"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa0eed70387a998c3eca2f4e45f3efaad"><td class="memItemLeft" align="right" valign="top">typedef tvec2< uint, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gaa0eed70387a998c3eca2f4e45f3efaad">highp_uvec2</a></td></tr>
+<tr class="separator:gaa0eed70387a998c3eca2f4e45f3efaad"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf564d5be1e65bd2204754043b218c9a4"><td class="memItemLeft" align="right" valign="top">typedef tvec3< uint, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gaf564d5be1e65bd2204754043b218c9a4">highp_uvec3</a></td></tr>
+<tr class="separator:gaf564d5be1e65bd2204754043b218c9a4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga61359f5531550e45871a97589d8dcce1"><td class="memItemLeft" align="right" valign="top">typedef tvec4< uint, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga61359f5531550e45871a97589d8dcce1">highp_uvec4</a></td></tr>
+<tr class="separator:ga61359f5531550e45871a97589d8dcce1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gabfc3e9f63cc3e2ee0521405277ef3997"><td class="memItemLeft" align="right" valign="top">typedef tvec2< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gabfc3e9f63cc3e2ee0521405277ef3997">highp_vec2</a></td></tr>
+<tr class="separator:gabfc3e9f63cc3e2ee0521405277ef3997"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7b31b02c5558e2f8e5d8439ae3803d3a"><td class="memItemLeft" align="right" valign="top">typedef tvec3< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga7b31b02c5558e2f8e5d8439ae3803d3a">highp_vec3</a></td></tr>
+<tr class="separator:ga7b31b02c5558e2f8e5d8439ae3803d3a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gade7cb496ed3d78b2a11f1651cce77239"><td class="memItemLeft" align="right" valign="top">typedef tvec4< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gade7cb496ed3d78b2a11f1651cce77239">highp_vec4</a></td></tr>
+<tr class="separator:gade7cb496ed3d78b2a11f1651cce77239"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2ab812bd103527e2d6c62c2e2f5ee78f"><td class="memItemLeft" align="right" valign="top">typedef highp_ivec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ga2ab812bd103527e2d6c62c2e2f5ee78f">ivec2</a></td></tr>
+<tr class="separator:ga2ab812bd103527e2d6c62c2e2f5ee78f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga34aee73784bcc247d426250540c1911c"><td class="memItemLeft" align="right" valign="top">typedef highp_ivec3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ga34aee73784bcc247d426250540c1911c">ivec3</a></td></tr>
+<tr class="separator:ga34aee73784bcc247d426250540c1911c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaaa26c41d168dc00be0fe55f4d0a34224"><td class="memItemLeft" align="right" valign="top">typedef highp_ivec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#gaaa26c41d168dc00be0fe55f4d0a34224">ivec4</a></td></tr>
+<tr class="separator:gaaa26c41d168dc00be0fe55f4d0a34224"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga28dcda102dd8c94ec500ee786af7a30a"><td class="memItemLeft" align="right" valign="top">typedef tvec2< bool, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga28dcda102dd8c94ec500ee786af7a30a">lowp_bvec2</a></td></tr>
+<tr class="separator:ga28dcda102dd8c94ec500ee786af7a30a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga76c0948546deeeb18bfda36f18b3e673"><td class="memItemLeft" align="right" valign="top">typedef tvec3< bool, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga76c0948546deeeb18bfda36f18b3e673">lowp_bvec3</a></td></tr>
+<tr class="separator:ga76c0948546deeeb18bfda36f18b3e673"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafa2087ead0d0e2a3c907e3fbd99f4d85"><td class="memItemLeft" align="right" valign="top">typedef tvec4< bool, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gafa2087ead0d0e2a3c907e3fbd99f4d85">lowp_bvec4</a></td></tr>
+<tr class="separator:gafa2087ead0d0e2a3c907e3fbd99f4d85"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga96eb13864627c7c832b5af36aa73bda6"><td class="memItemLeft" align="right" valign="top">typedef tvec2< double, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga96eb13864627c7c832b5af36aa73bda6">lowp_dvec2</a></td></tr>
+<tr class="separator:ga96eb13864627c7c832b5af36aa73bda6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf7ec7b1cefeeaf63659460ef52fd06a9"><td class="memItemLeft" align="right" valign="top">typedef tvec3< double, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gaf7ec7b1cefeeaf63659460ef52fd06a9">lowp_dvec3</a></td></tr>
+<tr class="separator:gaf7ec7b1cefeeaf63659460ef52fd06a9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab5d6a45e1bbb13314b47793865a4c072"><td class="memItemLeft" align="right" valign="top">typedef tvec4< double, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gab5d6a45e1bbb13314b47793865a4c072">lowp_dvec4</a></td></tr>
+<tr class="separator:gab5d6a45e1bbb13314b47793865a4c072"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3c6aeb4cd3e9a14c85dd4c6f311b1e57"><td class="memItemLeft" align="right" valign="top">typedef tvec2< int, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga3c6aeb4cd3e9a14c85dd4c6f311b1e57">lowp_ivec2</a></td></tr>
+<tr class="separator:ga3c6aeb4cd3e9a14c85dd4c6f311b1e57"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa040f25233c314adc9560dcdb9dadac2"><td class="memItemLeft" align="right" valign="top">typedef tvec3< int, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gaa040f25233c314adc9560dcdb9dadac2">lowp_ivec3</a></td></tr>
+<tr class="separator:gaa040f25233c314adc9560dcdb9dadac2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8b7483dc67dc332f9d874c6cf7172203"><td class="memItemLeft" align="right" valign="top">typedef tvec4< int, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga8b7483dc67dc332f9d874c6cf7172203">lowp_ivec4</a></td></tr>
+<tr class="separator:ga8b7483dc67dc332f9d874c6cf7172203"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6bfb90b936bbbc67e438bb9ac6910309"><td class="memItemLeft" align="right" valign="top">typedef tvec2< uint, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga6bfb90b936bbbc67e438bb9ac6910309">lowp_uvec2</a></td></tr>
+<tr class="separator:ga6bfb90b936bbbc67e438bb9ac6910309"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf0049c860a612da9bd3ba9ac9e49e820"><td class="memItemLeft" align="right" valign="top">typedef tvec3< uint, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gaf0049c860a612da9bd3ba9ac9e49e820">lowp_uvec3</a></td></tr>
+<tr class="separator:gaf0049c860a612da9bd3ba9ac9e49e820"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6efcd4574e112cfcda320db58e649ee3"><td class="memItemLeft" align="right" valign="top">typedef tvec4< uint, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga6efcd4574e112cfcda320db58e649ee3">lowp_uvec4</a></td></tr>
+<tr class="separator:ga6efcd4574e112cfcda320db58e649ee3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga51e835b2aa735782f0174328acffa521"><td class="memItemLeft" align="right" valign="top">typedef tvec2< float, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga51e835b2aa735782f0174328acffa521">lowp_vec2</a></td></tr>
+<tr class="separator:ga51e835b2aa735782f0174328acffa521"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf89f8fb5a06848ea4ec1c3a02813454e"><td class="memItemLeft" align="right" valign="top">typedef tvec3< float, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gaf89f8fb5a06848ea4ec1c3a02813454e">lowp_vec3</a></td></tr>
+<tr class="separator:gaf89f8fb5a06848ea4ec1c3a02813454e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8f9002d3ab660e3171f5cdea1aab8395"><td class="memItemLeft" align="right" valign="top">typedef tvec4< float, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga8f9002d3ab660e3171f5cdea1aab8395">lowp_vec4</a></td></tr>
+<tr class="separator:ga8f9002d3ab660e3171f5cdea1aab8395"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae1f4f68346474246eb4a9952af49e72b"><td class="memItemLeft" align="right" valign="top">typedef tvec2< bool, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gae1f4f68346474246eb4a9952af49e72b">mediump_bvec2</a></td></tr>
+<tr class="separator:gae1f4f68346474246eb4a9952af49e72b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0d1778766f17c4329a8c3f2b37f5fab0"><td class="memItemLeft" align="right" valign="top">typedef tvec3< bool, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga0d1778766f17c4329a8c3f2b37f5fab0">mediump_bvec3</a></td></tr>
+<tr class="separator:ga0d1778766f17c4329a8c3f2b37f5fab0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3f0c27f7ab42f004054a247c93a7bf57"><td class="memItemLeft" align="right" valign="top">typedef tvec4< bool, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga3f0c27f7ab42f004054a247c93a7bf57">mediump_bvec4</a></td></tr>
+<tr class="separator:ga3f0c27f7ab42f004054a247c93a7bf57"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga388fd99d9ffc7190a4732c35b0c7bfc9"><td class="memItemLeft" align="right" valign="top">typedef tvec2< double, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga388fd99d9ffc7190a4732c35b0c7bfc9">mediump_dvec2</a></td></tr>
+<tr class="separator:ga388fd99d9ffc7190a4732c35b0c7bfc9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0b4741d444b131ef1fc54b19c37f72be"><td class="memItemLeft" align="right" valign="top">typedef tvec3< double, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga0b4741d444b131ef1fc54b19c37f72be">mediump_dvec3</a></td></tr>
+<tr class="separator:ga0b4741d444b131ef1fc54b19c37f72be"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3e804226444dfe246133fc6ec4a3912f"><td class="memItemLeft" align="right" valign="top">typedef tvec4< double, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga3e804226444dfe246133fc6ec4a3912f">mediump_dvec4</a></td></tr>
+<tr class="separator:ga3e804226444dfe246133fc6ec4a3912f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga199cc7c4cfa7c7cadad0c74d2f059aef"><td class="memItemLeft" align="right" valign="top">typedef tvec2< int, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga199cc7c4cfa7c7cadad0c74d2f059aef">mediump_ivec2</a></td></tr>
+<tr class="separator:ga199cc7c4cfa7c7cadad0c74d2f059aef"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9b7843453f7ad6ebfa26e50408b8dcf0"><td class="memItemLeft" align="right" valign="top">typedef tvec3< int, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga9b7843453f7ad6ebfa26e50408b8dcf0">mediump_ivec3</a></td></tr>
+<tr class="separator:ga9b7843453f7ad6ebfa26e50408b8dcf0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga14614613c8e79772c8a6d25dd1c45995"><td class="memItemLeft" align="right" valign="top">typedef tvec4< int, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga14614613c8e79772c8a6d25dd1c45995">mediump_ivec4</a></td></tr>
+<tr class="separator:ga14614613c8e79772c8a6d25dd1c45995"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga392c0761c8bef616801e0d81a6867ed7"><td class="memItemLeft" align="right" valign="top">typedef tvec2< uint, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga392c0761c8bef616801e0d81a6867ed7">mediump_uvec2</a></td></tr>
+<tr class="separator:ga392c0761c8bef616801e0d81a6867ed7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga54ae0b7b207b8e7e88841d146d2de12e"><td class="memItemLeft" align="right" valign="top">typedef tvec3< uint, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga54ae0b7b207b8e7e88841d146d2de12e">mediump_uvec3</a></td></tr>
+<tr class="separator:ga54ae0b7b207b8e7e88841d146d2de12e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga631f5767b9d45c5cd3d0bcd67565b3f7"><td class="memItemLeft" align="right" valign="top">typedef tvec4< uint, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga631f5767b9d45c5cd3d0bcd67565b3f7">mediump_uvec4</a></td></tr>
+<tr class="separator:ga631f5767b9d45c5cd3d0bcd67565b3f7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac37a3fd0ecdcab044853c039409c9af7"><td class="memItemLeft" align="right" valign="top">typedef tvec2< float, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gac37a3fd0ecdcab044853c039409c9af7">mediump_vec2</a></td></tr>
+<tr class="separator:gac37a3fd0ecdcab044853c039409c9af7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga591478a77e4324e0836abc17cbb13e83"><td class="memItemLeft" align="right" valign="top">typedef tvec3< float, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga591478a77e4324e0836abc17cbb13e83">mediump_vec3</a></td></tr>
+<tr class="separator:ga591478a77e4324e0836abc17cbb13e83"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaae72e97529b8fa4e0341b425d4fe03ae"><td class="memItemLeft" align="right" valign="top">typedef tvec4< float, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gaae72e97529b8fa4e0341b425d4fe03ae">mediump_vec4</a></td></tr>
+<tr class="separator:gaae72e97529b8fa4e0341b425d4fe03ae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9bcffa2d49f28d16f680757b5c0e7c84"><td class="memItemLeft" align="right" valign="top">typedef highp_uvec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ga9bcffa2d49f28d16f680757b5c0e7c84">uvec2</a></td></tr>
+<tr class="separator:ga9bcffa2d49f28d16f680757b5c0e7c84"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae85537b672ffe0b3218cbdf1823e1c72"><td class="memItemLeft" align="right" valign="top">typedef highp_uvec3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#gae85537b672ffe0b3218cbdf1823e1c72">uvec3</a></td></tr>
+<tr class="separator:gae85537b672ffe0b3218cbdf1823e1c72"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa7c3a0e7ae50c34c3290415c115f251e"><td class="memItemLeft" align="right" valign="top">typedef highp_uvec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#gaa7c3a0e7ae50c34c3290415c115f251e">uvec4</a></td></tr>
+<tr class="separator:gaa7c3a0e7ae50c34c3290415c115f251e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga09d0200e8ff86391d8804b4fefd5f1da"><td class="memItemLeft" align="right" valign="top">typedef highp_vec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ga09d0200e8ff86391d8804b4fefd5f1da">vec2</a></td></tr>
+<tr class="separator:ga09d0200e8ff86391d8804b4fefd5f1da"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa8ea2429bb3cb41a715258a447f39897"><td class="memItemLeft" align="right" valign="top">typedef highp_vec3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#gaa8ea2429bb3cb41a715258a447f39897">vec3</a></td></tr>
+<tr class="separator:gaa8ea2429bb3cb41a715258a447f39897"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafbab23070ca47932487d25332adc7d7c"><td class="memItemLeft" align="right" valign="top">typedef highp_vec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#gafbab23070ca47932487d25332adc7d7c">vec4</a></td></tr>
+<tr class="separator:gafbab23070ca47932487d25332adc7d7c"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+
+<p>Definition in file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00127_source.html b/src/third_party/glm/doc/api/a00127_source.html
new file mode 100644
index 0000000..46fbfe7
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00127_source.html
@@ -0,0 +1,435 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: type_vec.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">type_vec.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00127.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include "<a class="code" href="a00085.html">precision.hpp</a>"</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#include "<a class="code" href="a00113.html">type_int.hpp</a>"</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> </div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a>{</div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="keyword">namespace </span>detail</div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> {</div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>  <span class="keyword">template</span><std::<span class="keywordtype">size_t</span> N> <span class="keyword">struct </span>aligned {};</div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>  <span class="keyword">template</span><> GLM_ALIGNED_STRUCT(1) aligned<1>{};</div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>  <span class="keyword">template</span><> GLM_ALIGNED_STRUCT(2) aligned<2>{};</div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>  <span class="keyword">template</span><> GLM_ALIGNED_STRUCT(4) aligned<4>{};</div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>  <span class="keyword">template</span><> GLM_ALIGNED_STRUCT(8) aligned<8>{};</div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>  <span class="keyword">template</span><> GLM_ALIGNED_STRUCT(16) aligned<16>{};</div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  <span class="keyword">template</span><> GLM_ALIGNED_STRUCT(32) aligned<32>{};</div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <span class="keyword">template</span><> GLM_ALIGNED_STRUCT(64) aligned<64>{};</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, std::<span class="keywordtype">size_t</span> size, <span class="keywordtype">bool</span> aligned></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keyword">struct </span>storage</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  {</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="keyword">typedef</span> <span class="keyword">struct </span>type {</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  uint8 data[size];</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  } type;</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  };</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, std::<span class="keywordtype">size_t</span> size></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keyword">struct </span>storage<T, size, true></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  {</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keyword">struct </span>type : aligned<size></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  {</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  uint8 data[size];</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  };</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  };</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor"># if GLM_ARCH & GLM_ARCH_SSE2_BIT</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keyword">template</span> <></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keyword">struct </span>storage<float, 16, true></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  {</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keyword">typedef</span> glm_vec4 type;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  };</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keyword">template</span> <></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keyword">struct </span>storage<int, 16, true></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  {</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keyword">typedef</span> glm_ivec4 type;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  };</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keyword">template</span> <></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keyword">struct </span>storage<unsigned int, 16, true></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  {</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keyword">typedef</span> glm_uvec4 type;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  };</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="comment"># else</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="comment"> typedef union __declspec(align(16)) glm_128</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="comment"> {</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="comment"> unsigned __int8 data[16];</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="comment"> } glm_128;</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="comment"></span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="comment"> template <></span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="comment"> struct storage<float, 16, true></span></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="comment"> {</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="comment"> typedef glm_128 type;</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="comment"> };</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="comment"></span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="comment"> template <></span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="comment"> struct storage<int, 16, true></span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="comment"> {</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="comment"> typedef glm_128 type;</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="comment"> };</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="comment"></span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="comment"> template <></span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="comment"> struct storage<unsigned int, 16, true></span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="comment"> {</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="comment"> typedef glm_128 type;</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="comment"> };</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="preprocessor"># if (GLM_ARCH & GLM_ARCH_AVX_BIT)</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keyword">template</span> <></div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keyword">struct </span>storage<double, 32, true></div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  {</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="keyword">typedef</span> glm_dvec4 type;</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  };</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="preprocessor"># if (GLM_ARCH & GLM_ARCH_AVX2_BIT)</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keyword">template</span> <></div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="keyword">struct </span>storage<int64, 32, true></div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  {</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="keyword">typedef</span> glm_i64vec4 type;</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  };</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="keyword">template</span> <></div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keyword">struct </span>storage<uint64, 32, true></div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  {</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keyword">typedef</span> glm_u64vec4 type;</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  };</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> }<span class="comment">//namespace detail</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> <span class="keyword">struct </span>tvec1;</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> <span class="keyword">struct </span>tvec2;</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> <span class="keyword">struct </span>tvec3;</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> <span class="keyword">struct </span>tvec4;</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="keyword">typedef</span> tvec1<float, highp> highp_vec1_t;</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keyword">typedef</span> tvec1<float, mediump> mediump_vec1_t;</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="keyword">typedef</span> tvec1<float, lowp> lowp_vec1_t;</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keyword">typedef</span> tvec1<double, highp> highp_dvec1_t;</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keyword">typedef</span> tvec1<double, mediump> mediump_dvec1_t;</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="keyword">typedef</span> tvec1<double, lowp> lowp_dvec1_t;</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="keyword">typedef</span> tvec1<int, highp> highp_ivec1_t;</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="keyword">typedef</span> tvec1<int, mediump> mediump_ivec1_t;</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keyword">typedef</span> tvec1<int, lowp> lowp_ivec1_t;</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="keyword">typedef</span> tvec1<uint, highp> highp_uvec1_t;</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keyword">typedef</span> tvec1<uint, mediump> mediump_uvec1_t;</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keyword">typedef</span> tvec1<uint, lowp> lowp_uvec1_t;</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="keyword">typedef</span> tvec1<bool, highp> highp_bvec1_t;</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="keyword">typedef</span> tvec1<bool, mediump> mediump_bvec1_t;</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="keyword">typedef</span> tvec1<bool, lowp> lowp_bvec1_t;</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno"><a class="line" href="a00158.html#gabfc3e9f63cc3e2ee0521405277ef3997"> 135</a></span>  <span class="keyword">typedef</span> tvec2<float, highp> <a class="code" href="a00158.html#gabfc3e9f63cc3e2ee0521405277ef3997">highp_vec2</a>;</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno"><a class="line" href="a00158.html#gac37a3fd0ecdcab044853c039409c9af7"> 142</a></span>  <span class="keyword">typedef</span> tvec2<float, mediump> <a class="code" href="a00158.html#gac37a3fd0ecdcab044853c039409c9af7">mediump_vec2</a>;</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno"><a class="line" href="a00158.html#ga51e835b2aa735782f0174328acffa521"> 149</a></span>  <span class="keyword">typedef</span> tvec2<float, lowp> <a class="code" href="a00158.html#ga51e835b2aa735782f0174328acffa521">lowp_vec2</a>;</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> </div>
+<div class="line"><a name="l00156"></a><span class="lineno"><a class="line" href="a00158.html#ga435eb408e8dfa4f7185368109d432c14"> 156</a></span>  <span class="keyword">typedef</span> tvec2<double, highp> <a class="code" href="a00158.html#ga435eb408e8dfa4f7185368109d432c14">highp_dvec2</a>;</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno"><a class="line" href="a00158.html#ga388fd99d9ffc7190a4732c35b0c7bfc9"> 163</a></span>  <span class="keyword">typedef</span> tvec2<double, mediump> <a class="code" href="a00158.html#ga388fd99d9ffc7190a4732c35b0c7bfc9">mediump_dvec2</a>;</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno"><a class="line" href="a00158.html#ga96eb13864627c7c832b5af36aa73bda6"> 170</a></span>  <span class="keyword">typedef</span> tvec2<double, lowp> <a class="code" href="a00158.html#ga96eb13864627c7c832b5af36aa73bda6">lowp_dvec2</a>;</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno"><a class="line" href="a00158.html#gaa015a3707413de20c03948308dba2f2e"> 177</a></span>  <span class="keyword">typedef</span> tvec2<int, highp> <a class="code" href="a00158.html#gaa015a3707413de20c03948308dba2f2e">highp_ivec2</a>;</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div>
+<div class="line"><a name="l00184"></a><span class="lineno"><a class="line" href="a00158.html#ga199cc7c4cfa7c7cadad0c74d2f059aef"> 184</a></span>  <span class="keyword">typedef</span> tvec2<int, mediump> <a class="code" href="a00158.html#ga199cc7c4cfa7c7cadad0c74d2f059aef">mediump_ivec2</a>;</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> </div>
+<div class="line"><a name="l00191"></a><span class="lineno"><a class="line" href="a00158.html#ga3c6aeb4cd3e9a14c85dd4c6f311b1e57"> 191</a></span>  <span class="keyword">typedef</span> tvec2<int, lowp> <a class="code" href="a00158.html#ga3c6aeb4cd3e9a14c85dd4c6f311b1e57">lowp_ivec2</a>;</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> </div>
+<div class="line"><a name="l00198"></a><span class="lineno"><a class="line" href="a00158.html#gaa0eed70387a998c3eca2f4e45f3efaad"> 198</a></span>  <span class="keyword">typedef</span> tvec2<uint, highp> <a class="code" href="a00158.html#gaa0eed70387a998c3eca2f4e45f3efaad">highp_uvec2</a>;</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno"><a class="line" href="a00158.html#ga392c0761c8bef616801e0d81a6867ed7"> 205</a></span>  <span class="keyword">typedef</span> tvec2<uint, mediump> <a class="code" href="a00158.html#ga392c0761c8bef616801e0d81a6867ed7">mediump_uvec2</a>;</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno"><a class="line" href="a00158.html#ga6bfb90b936bbbc67e438bb9ac6910309"> 212</a></span>  <span class="keyword">typedef</span> tvec2<uint, lowp> <a class="code" href="a00158.html#ga6bfb90b936bbbc67e438bb9ac6910309">lowp_uvec2</a>;</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> </div>
+<div class="line"><a name="l00219"></a><span class="lineno"><a class="line" href="a00158.html#ga829f39950549881a08c534946c0487e1"> 219</a></span>  <span class="keyword">typedef</span> tvec2<bool, highp> <a class="code" href="a00158.html#ga829f39950549881a08c534946c0487e1">highp_bvec2</a>;</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno"><a class="line" href="a00158.html#gae1f4f68346474246eb4a9952af49e72b"> 226</a></span>  <span class="keyword">typedef</span> tvec2<bool, mediump> <a class="code" href="a00158.html#gae1f4f68346474246eb4a9952af49e72b">mediump_bvec2</a>;</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> </div>
+<div class="line"><a name="l00233"></a><span class="lineno"><a class="line" href="a00158.html#ga28dcda102dd8c94ec500ee786af7a30a"> 233</a></span>  <span class="keyword">typedef</span> tvec2<bool, lowp> <a class="code" href="a00158.html#ga28dcda102dd8c94ec500ee786af7a30a">lowp_bvec2</a>;</div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> </div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> </div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> </div>
+<div class="line"><a name="l00245"></a><span class="lineno"><a class="line" href="a00158.html#ga7b31b02c5558e2f8e5d8439ae3803d3a"> 245</a></span>  <span class="keyword">typedef</span> tvec3<float, highp> <a class="code" href="a00158.html#ga7b31b02c5558e2f8e5d8439ae3803d3a">highp_vec3</a>;</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> </div>
+<div class="line"><a name="l00252"></a><span class="lineno"><a class="line" href="a00158.html#ga591478a77e4324e0836abc17cbb13e83"> 252</a></span>  <span class="keyword">typedef</span> tvec3<float, mediump> <a class="code" href="a00158.html#ga591478a77e4324e0836abc17cbb13e83">mediump_vec3</a>;</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> </div>
+<div class="line"><a name="l00259"></a><span class="lineno"><a class="line" href="a00158.html#gaf89f8fb5a06848ea4ec1c3a02813454e"> 259</a></span>  <span class="keyword">typedef</span> tvec3<float, lowp> <a class="code" href="a00158.html#gaf89f8fb5a06848ea4ec1c3a02813454e">lowp_vec3</a>;</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> </div>
+<div class="line"><a name="l00266"></a><span class="lineno"><a class="line" href="a00158.html#ga01d2c9b292e27518e4d6f8442607e8aa"> 266</a></span>  <span class="keyword">typedef</span> tvec3<double, highp> <a class="code" href="a00158.html#ga01d2c9b292e27518e4d6f8442607e8aa">highp_dvec3</a>;</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> </div>
+<div class="line"><a name="l00273"></a><span class="lineno"><a class="line" href="a00158.html#ga0b4741d444b131ef1fc54b19c37f72be"> 273</a></span>  <span class="keyword">typedef</span> tvec3<double, mediump> <a class="code" href="a00158.html#ga0b4741d444b131ef1fc54b19c37f72be">mediump_dvec3</a>;</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> </div>
+<div class="line"><a name="l00280"></a><span class="lineno"><a class="line" href="a00158.html#gaf7ec7b1cefeeaf63659460ef52fd06a9"> 280</a></span>  <span class="keyword">typedef</span> tvec3<double, lowp> <a class="code" href="a00158.html#gaf7ec7b1cefeeaf63659460ef52fd06a9">lowp_dvec3</a>;</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> </div>
+<div class="line"><a name="l00287"></a><span class="lineno"><a class="line" href="a00158.html#ga8330bf0d7e6d03ca12ee2b1334c2c30f"> 287</a></span>  <span class="keyword">typedef</span> tvec3<int, highp> <a class="code" href="a00158.html#ga8330bf0d7e6d03ca12ee2b1334c2c30f">highp_ivec3</a>;</div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> </div>
+<div class="line"><a name="l00294"></a><span class="lineno"><a class="line" href="a00158.html#ga9b7843453f7ad6ebfa26e50408b8dcf0"> 294</a></span>  <span class="keyword">typedef</span> tvec3<int, mediump> <a class="code" href="a00158.html#ga9b7843453f7ad6ebfa26e50408b8dcf0">mediump_ivec3</a>;</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> </div>
+<div class="line"><a name="l00301"></a><span class="lineno"><a class="line" href="a00158.html#gaa040f25233c314adc9560dcdb9dadac2"> 301</a></span>  <span class="keyword">typedef</span> tvec3<int, lowp> <a class="code" href="a00158.html#gaa040f25233c314adc9560dcdb9dadac2">lowp_ivec3</a>;</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> </div>
+<div class="line"><a name="l00308"></a><span class="lineno"><a class="line" href="a00158.html#gaf564d5be1e65bd2204754043b218c9a4"> 308</a></span>  <span class="keyword">typedef</span> tvec3<uint, highp> <a class="code" href="a00158.html#gaf564d5be1e65bd2204754043b218c9a4">highp_uvec3</a>;</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> </div>
+<div class="line"><a name="l00315"></a><span class="lineno"><a class="line" href="a00158.html#ga54ae0b7b207b8e7e88841d146d2de12e"> 315</a></span>  <span class="keyword">typedef</span> tvec3<uint, mediump> <a class="code" href="a00158.html#ga54ae0b7b207b8e7e88841d146d2de12e">mediump_uvec3</a>;</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> </div>
+<div class="line"><a name="l00322"></a><span class="lineno"><a class="line" href="a00158.html#gaf0049c860a612da9bd3ba9ac9e49e820"> 322</a></span>  <span class="keyword">typedef</span> tvec3<uint, lowp> <a class="code" href="a00158.html#gaf0049c860a612da9bd3ba9ac9e49e820">lowp_uvec3</a>;</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> </div>
+<div class="line"><a name="l00328"></a><span class="lineno"><a class="line" href="a00158.html#gaca7c2a58eb926799c30ad547a290fccf"> 328</a></span>  <span class="keyword">typedef</span> tvec3<bool, highp> <a class="code" href="a00158.html#gaca7c2a58eb926799c30ad547a290fccf">highp_bvec3</a>;</div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> </div>
+<div class="line"><a name="l00334"></a><span class="lineno"><a class="line" href="a00158.html#ga0d1778766f17c4329a8c3f2b37f5fab0"> 334</a></span>  <span class="keyword">typedef</span> tvec3<bool, mediump> <a class="code" href="a00158.html#ga0d1778766f17c4329a8c3f2b37f5fab0">mediump_bvec3</a>;</div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> </div>
+<div class="line"><a name="l00340"></a><span class="lineno"><a class="line" href="a00158.html#ga76c0948546deeeb18bfda36f18b3e673"> 340</a></span>  <span class="keyword">typedef</span> tvec3<bool, lowp> <a class="code" href="a00158.html#ga76c0948546deeeb18bfda36f18b3e673">lowp_bvec3</a>;</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> </div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> </div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> </div>
+<div class="line"><a name="l00351"></a><span class="lineno"><a class="line" href="a00158.html#gade7cb496ed3d78b2a11f1651cce77239"> 351</a></span>  <span class="keyword">typedef</span> tvec4<float, highp> <a class="code" href="a00158.html#gade7cb496ed3d78b2a11f1651cce77239">highp_vec4</a>;</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> </div>
+<div class="line"><a name="l00357"></a><span class="lineno"><a class="line" href="a00158.html#gaae72e97529b8fa4e0341b425d4fe03ae"> 357</a></span>  <span class="keyword">typedef</span> tvec4<float, mediump> <a class="code" href="a00158.html#gaae72e97529b8fa4e0341b425d4fe03ae">mediump_vec4</a>;</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> </div>
+<div class="line"><a name="l00363"></a><span class="lineno"><a class="line" href="a00158.html#ga8f9002d3ab660e3171f5cdea1aab8395"> 363</a></span>  <span class="keyword">typedef</span> tvec4<float, lowp> <a class="code" href="a00158.html#ga8f9002d3ab660e3171f5cdea1aab8395">lowp_vec4</a>;</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> </div>
+<div class="line"><a name="l00369"></a><span class="lineno"><a class="line" href="a00158.html#ga5d454f34d819d90b9bbb30dcb9ed7b39"> 369</a></span>  <span class="keyword">typedef</span> tvec4<double, highp> <a class="code" href="a00158.html#ga5d454f34d819d90b9bbb30dcb9ed7b39">highp_dvec4</a>;</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> </div>
+<div class="line"><a name="l00375"></a><span class="lineno"><a class="line" href="a00158.html#ga3e804226444dfe246133fc6ec4a3912f"> 375</a></span>  <span class="keyword">typedef</span> tvec4<double, mediump> <a class="code" href="a00158.html#ga3e804226444dfe246133fc6ec4a3912f">mediump_dvec4</a>;</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> </div>
+<div class="line"><a name="l00381"></a><span class="lineno"><a class="line" href="a00158.html#gab5d6a45e1bbb13314b47793865a4c072"> 381</a></span>  <span class="keyword">typedef</span> tvec4<double, lowp> <a class="code" href="a00158.html#gab5d6a45e1bbb13314b47793865a4c072">lowp_dvec4</a>;</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> </div>
+<div class="line"><a name="l00387"></a><span class="lineno"><a class="line" href="a00158.html#ga0424a75bb400571489b8528897f35258"> 387</a></span>  <span class="keyword">typedef</span> tvec4<int, highp> <a class="code" href="a00158.html#ga0424a75bb400571489b8528897f35258">highp_ivec4</a>;</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> </div>
+<div class="line"><a name="l00393"></a><span class="lineno"><a class="line" href="a00158.html#ga14614613c8e79772c8a6d25dd1c45995"> 393</a></span>  <span class="keyword">typedef</span> tvec4<int, mediump> <a class="code" href="a00158.html#ga14614613c8e79772c8a6d25dd1c45995">mediump_ivec4</a>;</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> </div>
+<div class="line"><a name="l00399"></a><span class="lineno"><a class="line" href="a00158.html#ga8b7483dc67dc332f9d874c6cf7172203"> 399</a></span>  <span class="keyword">typedef</span> tvec4<int, lowp> <a class="code" href="a00158.html#ga8b7483dc67dc332f9d874c6cf7172203">lowp_ivec4</a>;</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> </div>
+<div class="line"><a name="l00405"></a><span class="lineno"><a class="line" href="a00158.html#ga61359f5531550e45871a97589d8dcce1"> 405</a></span>  <span class="keyword">typedef</span> tvec4<uint, highp> <a class="code" href="a00158.html#ga61359f5531550e45871a97589d8dcce1">highp_uvec4</a>;</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> </div>
+<div class="line"><a name="l00411"></a><span class="lineno"><a class="line" href="a00158.html#ga631f5767b9d45c5cd3d0bcd67565b3f7"> 411</a></span>  <span class="keyword">typedef</span> tvec4<uint, mediump> <a class="code" href="a00158.html#ga631f5767b9d45c5cd3d0bcd67565b3f7">mediump_uvec4</a>;</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> </div>
+<div class="line"><a name="l00417"></a><span class="lineno"><a class="line" href="a00158.html#ga6efcd4574e112cfcda320db58e649ee3"> 417</a></span>  <span class="keyword">typedef</span> tvec4<uint, lowp> <a class="code" href="a00158.html#ga6efcd4574e112cfcda320db58e649ee3">lowp_uvec4</a>;</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> </div>
+<div class="line"><a name="l00423"></a><span class="lineno"><a class="line" href="a00158.html#gae5f9c57d04b338c9a51a9af39e50795b"> 423</a></span>  <span class="keyword">typedef</span> tvec4<bool, highp> <a class="code" href="a00158.html#gae5f9c57d04b338c9a51a9af39e50795b">highp_bvec4</a>;</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> </div>
+<div class="line"><a name="l00429"></a><span class="lineno"><a class="line" href="a00158.html#ga3f0c27f7ab42f004054a247c93a7bf57"> 429</a></span>  <span class="keyword">typedef</span> tvec4<bool, mediump> <a class="code" href="a00158.html#ga3f0c27f7ab42f004054a247c93a7bf57">mediump_bvec4</a>;</div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> </div>
+<div class="line"><a name="l00435"></a><span class="lineno"><a class="line" href="a00158.html#gafa2087ead0d0e2a3c907e3fbd99f4d85"> 435</a></span>  <span class="keyword">typedef</span> tvec4<bool, lowp> <a class="code" href="a00158.html#gafa2087ead0d0e2a3c907e3fbd99f4d85">lowp_bvec4</a>;</div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> </div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> </div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> </div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  <span class="comment">// -- Default float definition --</span></div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> </div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> <span class="preprocessor">#if(defined(GLM_PRECISION_LOWP_FLOAT))</span></div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  <span class="keyword">typedef</span> lowp_vec2 <a class="code" href="a00157.html#ga09d0200e8ff86391d8804b4fefd5f1da">vec2</a>;</div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  <span class="keyword">typedef</span> lowp_vec3 <a class="code" href="a00157.html#gaa8ea2429bb3cb41a715258a447f39897">vec3</a>;</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  <span class="keyword">typedef</span> lowp_vec4 <a class="code" href="a00157.html#gafbab23070ca47932487d25332adc7d7c">vec4</a>;</div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> <span class="preprocessor">#elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))</span></div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  <span class="keyword">typedef</span> mediump_vec2 <a class="code" href="a00157.html#ga09d0200e8ff86391d8804b4fefd5f1da">vec2</a>;</div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  <span class="keyword">typedef</span> mediump_vec3 <a class="code" href="a00157.html#gaa8ea2429bb3cb41a715258a447f39897">vec3</a>;</div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  <span class="keyword">typedef</span> mediump_vec4 <a class="code" href="a00157.html#gafbab23070ca47932487d25332adc7d7c">vec4</a>;</div>
+<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> <span class="preprocessor">#else //defined(GLM_PRECISION_HIGHP_FLOAT)</span></div>
+<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  <span class="keyword">typedef</span> highp_vec2 <a class="code" href="a00157.html#ga09d0200e8ff86391d8804b4fefd5f1da">vec2</a>;</div>
+<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> </div>
+<div class="line"><a name="l00461"></a><span class="lineno"><a class="line" href="a00157.html#gaa8ea2429bb3cb41a715258a447f39897"> 461</a></span>  <span class="keyword">typedef</span> highp_vec3 <a class="code" href="a00157.html#gaa8ea2429bb3cb41a715258a447f39897">vec3</a>;</div>
+<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> </div>
+<div class="line"><a name="l00466"></a><span class="lineno"><a class="line" href="a00157.html#gafbab23070ca47932487d25332adc7d7c"> 466</a></span>  <span class="keyword">typedef</span> highp_vec4 <a class="code" href="a00157.html#gafbab23070ca47932487d25332adc7d7c">vec4</a>;</div>
+<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> <span class="preprocessor">#endif//GLM_PRECISION</span></div>
+<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> </div>
+<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  <span class="comment">// -- Default double definition --</span></div>
+<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> </div>
+<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> <span class="preprocessor">#if(defined(GLM_PRECISION_LOWP_DOUBLE))</span></div>
+<div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  <span class="keyword">typedef</span> lowp_dvec2 <a class="code" href="a00157.html#ga15ade901680b29b78c1f9d1796db6e0e">dvec2</a>;</div>
+<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  <span class="keyword">typedef</span> lowp_dvec3 <a class="code" href="a00157.html#gabebd0c7e3c5cd337d95c313c5e8b8db4">dvec3</a>;</div>
+<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  <span class="keyword">typedef</span> lowp_dvec4 <a class="code" href="a00157.html#ga9503f809789bda7e8852a6abde3ae5c1">dvec4</a>;</div>
+<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> <span class="preprocessor">#elif(defined(GLM_PRECISION_MEDIUMP_DOUBLE))</span></div>
+<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  <span class="keyword">typedef</span> mediump_dvec2 <a class="code" href="a00157.html#ga15ade901680b29b78c1f9d1796db6e0e">dvec2</a>;</div>
+<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  <span class="keyword">typedef</span> mediump_dvec3 <a class="code" href="a00157.html#gabebd0c7e3c5cd337d95c313c5e8b8db4">dvec3</a>;</div>
+<div class="line"><a name="l00478"></a><span class="lineno"> 478</span>  <span class="keyword">typedef</span> mediump_dvec4 <a class="code" href="a00157.html#ga9503f809789bda7e8852a6abde3ae5c1">dvec4</a>;</div>
+<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> <span class="preprocessor">#else //defined(GLM_PRECISION_HIGHP_DOUBLE)</span></div>
+<div class="line"><a name="l00480"></a><span class="lineno"> 480</span>  <span class="keyword">typedef</span> highp_dvec2 <a class="code" href="a00157.html#ga15ade901680b29b78c1f9d1796db6e0e">dvec2</a>;</div>
+<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> </div>
+<div class="line"><a name="l00488"></a><span class="lineno"><a class="line" href="a00157.html#gabebd0c7e3c5cd337d95c313c5e8b8db4"> 488</a></span>  <span class="keyword">typedef</span> highp_dvec3 <a class="code" href="a00157.html#gabebd0c7e3c5cd337d95c313c5e8b8db4">dvec3</a>;</div>
+<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> </div>
+<div class="line"><a name="l00493"></a><span class="lineno"><a class="line" href="a00157.html#ga9503f809789bda7e8852a6abde3ae5c1"> 493</a></span>  <span class="keyword">typedef</span> highp_dvec4 <a class="code" href="a00157.html#ga9503f809789bda7e8852a6abde3ae5c1">dvec4</a>;</div>
+<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> <span class="preprocessor">#endif//GLM_PRECISION</span></div>
+<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> </div>
+<div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  <span class="comment">// -- Signed integer definition --</span></div>
+<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> </div>
+<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> <span class="preprocessor">#if(defined(GLM_PRECISION_LOWP_INT))</span></div>
+<div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  <span class="keyword">typedef</span> lowp_ivec2 <a class="code" href="a00157.html#ga2ab812bd103527e2d6c62c2e2f5ee78f">ivec2</a>;</div>
+<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  <span class="keyword">typedef</span> lowp_ivec3 <a class="code" href="a00157.html#ga34aee73784bcc247d426250540c1911c">ivec3</a>;</div>
+<div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  <span class="keyword">typedef</span> lowp_ivec4 <a class="code" href="a00157.html#gaaa26c41d168dc00be0fe55f4d0a34224">ivec4</a>;</div>
+<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> <span class="preprocessor">#elif(defined(GLM_PRECISION_MEDIUMP_INT))</span></div>
+<div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  <span class="keyword">typedef</span> mediump_ivec2 <a class="code" href="a00157.html#ga2ab812bd103527e2d6c62c2e2f5ee78f">ivec2</a>;</div>
+<div class="line"><a name="l00504"></a><span class="lineno"> 504</span>  <span class="keyword">typedef</span> mediump_ivec3 <a class="code" href="a00157.html#ga34aee73784bcc247d426250540c1911c">ivec3</a>;</div>
+<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  <span class="keyword">typedef</span> mediump_ivec4 <a class="code" href="a00157.html#gaaa26c41d168dc00be0fe55f4d0a34224">ivec4</a>;</div>
+<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> <span class="preprocessor">#else //defined(GLM_PRECISION_HIGHP_INT)</span></div>
+<div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  <span class="keyword">typedef</span> highp_ivec2 <a class="code" href="a00157.html#ga2ab812bd103527e2d6c62c2e2f5ee78f">ivec2</a>;</div>
+<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> </div>
+<div class="line"><a name="l00515"></a><span class="lineno"><a class="line" href="a00157.html#ga34aee73784bcc247d426250540c1911c"> 515</a></span>  <span class="keyword">typedef</span> highp_ivec3 <a class="code" href="a00157.html#ga34aee73784bcc247d426250540c1911c">ivec3</a>;</div>
+<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> </div>
+<div class="line"><a name="l00520"></a><span class="lineno"><a class="line" href="a00157.html#gaaa26c41d168dc00be0fe55f4d0a34224"> 520</a></span>  <span class="keyword">typedef</span> highp_ivec4 <a class="code" href="a00157.html#gaaa26c41d168dc00be0fe55f4d0a34224">ivec4</a>;</div>
+<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> <span class="preprocessor">#endif//GLM_PRECISION</span></div>
+<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> </div>
+<div class="line"><a name="l00523"></a><span class="lineno"> 523</span>  <span class="comment">// -- Unsigned integer definition --</span></div>
+<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> </div>
+<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> <span class="preprocessor">#if(defined(GLM_PRECISION_LOWP_UINT))</span></div>
+<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  <span class="keyword">typedef</span> lowp_uvec2 <a class="code" href="a00157.html#ga9bcffa2d49f28d16f680757b5c0e7c84">uvec2</a>;</div>
+<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  <span class="keyword">typedef</span> lowp_uvec3 <a class="code" href="a00157.html#gae85537b672ffe0b3218cbdf1823e1c72">uvec3</a>;</div>
+<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  <span class="keyword">typedef</span> lowp_uvec4 <a class="code" href="a00157.html#gaa7c3a0e7ae50c34c3290415c115f251e">uvec4</a>;</div>
+<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> <span class="preprocessor">#elif(defined(GLM_PRECISION_MEDIUMP_UINT))</span></div>
+<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  <span class="keyword">typedef</span> mediump_uvec2 <a class="code" href="a00157.html#ga9bcffa2d49f28d16f680757b5c0e7c84">uvec2</a>;</div>
+<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  <span class="keyword">typedef</span> mediump_uvec3 <a class="code" href="a00157.html#gae85537b672ffe0b3218cbdf1823e1c72">uvec3</a>;</div>
+<div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  <span class="keyword">typedef</span> mediump_uvec4 <a class="code" href="a00157.html#gaa7c3a0e7ae50c34c3290415c115f251e">uvec4</a>;</div>
+<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> <span class="preprocessor">#else //defined(GLM_PRECISION_HIGHP_UINT)</span></div>
+<div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  <span class="keyword">typedef</span> highp_uvec2 <a class="code" href="a00157.html#ga9bcffa2d49f28d16f680757b5c0e7c84">uvec2</a>;</div>
+<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> </div>
+<div class="line"><a name="l00542"></a><span class="lineno"><a class="line" href="a00157.html#gae85537b672ffe0b3218cbdf1823e1c72"> 542</a></span>  <span class="keyword">typedef</span> highp_uvec3 <a class="code" href="a00157.html#gae85537b672ffe0b3218cbdf1823e1c72">uvec3</a>;</div>
+<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> </div>
+<div class="line"><a name="l00547"></a><span class="lineno"><a class="line" href="a00157.html#gaa7c3a0e7ae50c34c3290415c115f251e"> 547</a></span>  <span class="keyword">typedef</span> highp_uvec4 <a class="code" href="a00157.html#gaa7c3a0e7ae50c34c3290415c115f251e">uvec4</a>;</div>
+<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> <span class="preprocessor">#endif//GLM_PRECISION</span></div>
+<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> </div>
+<div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  <span class="comment">// -- Boolean definition --</span></div>
+<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> </div>
+<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> <span class="preprocessor">#if(defined(GLM_PRECISION_LOWP_BOOL))</span></div>
+<div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  <span class="keyword">typedef</span> lowp_bvec2 <a class="code" href="a00157.html#ga0e46aaaccc5e713eac5bfbc8d6885a60">bvec2</a>;</div>
+<div class="line"><a name="l00554"></a><span class="lineno"> 554</span>  <span class="keyword">typedef</span> lowp_bvec3 <a class="code" href="a00157.html#ga150731e2a148eff8752114a0e450505e">bvec3</a>;</div>
+<div class="line"><a name="l00555"></a><span class="lineno"> 555</span>  <span class="keyword">typedef</span> lowp_bvec4 <a class="code" href="a00157.html#ga444e8f61bfb3a6f037d019ac6933f8c6">bvec4</a>;</div>
+<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> <span class="preprocessor">#elif(defined(GLM_PRECISION_MEDIUMP_BOOL))</span></div>
+<div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  <span class="keyword">typedef</span> mediump_bvec2 <a class="code" href="a00157.html#ga0e46aaaccc5e713eac5bfbc8d6885a60">bvec2</a>;</div>
+<div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  <span class="keyword">typedef</span> mediump_bvec3 <a class="code" href="a00157.html#ga150731e2a148eff8752114a0e450505e">bvec3</a>;</div>
+<div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  <span class="keyword">typedef</span> mediump_bvec4 <a class="code" href="a00157.html#ga444e8f61bfb3a6f037d019ac6933f8c6">bvec4</a>;</div>
+<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> <span class="preprocessor">#else //defined(GLM_PRECISION_HIGHP_BOOL)</span></div>
+<div class="line"><a name="l00561"></a><span class="lineno"> 561</span>  <span class="keyword">typedef</span> highp_bvec2 <a class="code" href="a00157.html#ga0e46aaaccc5e713eac5bfbc8d6885a60">bvec2</a>;</div>
+<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> </div>
+<div class="line"><a name="l00569"></a><span class="lineno"><a class="line" href="a00157.html#ga150731e2a148eff8752114a0e450505e"> 569</a></span>  <span class="keyword">typedef</span> highp_bvec3 <a class="code" href="a00157.html#ga150731e2a148eff8752114a0e450505e">bvec3</a>;</div>
+<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> </div>
+<div class="line"><a name="l00574"></a><span class="lineno"><a class="line" href="a00157.html#ga444e8f61bfb3a6f037d019ac6933f8c6"> 574</a></span>  <span class="keyword">typedef</span> highp_bvec4 <a class="code" href="a00157.html#ga444e8f61bfb3a6f037d019ac6933f8c6">bvec4</a>;</div>
+<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> <span class="preprocessor">#endif//GLM_PRECISION</span></div>
+<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> </div>
+<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> }<span class="comment">//namespace glm</span></div>
+<div class="ttc" id="a00157_html_ga34aee73784bcc247d426250540c1911c"><div class="ttname"><a href="a00157.html#ga34aee73784bcc247d426250540c1911c">glm::ivec3</a></div><div class="ttdeci">highp_ivec3 ivec3</div><div class="ttdoc">3 components vector of signed integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00515">type_vec.hpp:515</a></div></div>
+<div class="ttc" id="a00158_html_ga8b7483dc67dc332f9d874c6cf7172203"><div class="ttname"><a href="a00158.html#ga8b7483dc67dc332f9d874c6cf7172203">glm::lowp_ivec4</a></div><div class="ttdeci">tvec4< int, lowp > lowp_ivec4</div><div class="ttdoc">4 components vector of low precision signed integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00399">type_vec.hpp:399</a></div></div>
+<div class="ttc" id="a00157_html_ga150731e2a148eff8752114a0e450505e"><div class="ttname"><a href="a00157.html#ga150731e2a148eff8752114a0e450505e">glm::bvec3</a></div><div class="ttdeci">highp_bvec3 bvec3</div><div class="ttdoc">3 components vector of boolean. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00569">type_vec.hpp:569</a></div></div>
+<div class="ttc" id="a00158_html_ga0424a75bb400571489b8528897f35258"><div class="ttname"><a href="a00158.html#ga0424a75bb400571489b8528897f35258">glm::highp_ivec4</a></div><div class="ttdeci">tvec4< int, highp > highp_ivec4</div><div class="ttdoc">4 components vector of high precision signed integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00387">type_vec.hpp:387</a></div></div>
+<div class="ttc" id="a00158_html_ga8f9002d3ab660e3171f5cdea1aab8395"><div class="ttname"><a href="a00158.html#ga8f9002d3ab660e3171f5cdea1aab8395">glm::lowp_vec4</a></div><div class="ttdeci">tvec4< float, lowp > lowp_vec4</div><div class="ttdoc">4 components vector of low single-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00363">type_vec.hpp:363</a></div></div>
+<div class="ttc" id="a00158_html_ga51e835b2aa735782f0174328acffa521"><div class="ttname"><a href="a00158.html#ga51e835b2aa735782f0174328acffa521">glm::lowp_vec2</a></div><div class="ttdeci">tvec2< float, lowp > lowp_vec2</div><div class="ttdoc">2 components vector of low single-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00149">type_vec.hpp:149</a></div></div>
+<div class="ttc" id="a00158_html_ga7b31b02c5558e2f8e5d8439ae3803d3a"><div class="ttname"><a href="a00158.html#ga7b31b02c5558e2f8e5d8439ae3803d3a">glm::highp_vec3</a></div><div class="ttdeci">tvec3< float, highp > highp_vec3</div><div class="ttdoc">3 components vector of high single-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00245">type_vec.hpp:245</a></div></div>
+<div class="ttc" id="a00158_html_gaf7ec7b1cefeeaf63659460ef52fd06a9"><div class="ttname"><a href="a00158.html#gaf7ec7b1cefeeaf63659460ef52fd06a9">glm::lowp_dvec3</a></div><div class="ttdeci">tvec3< double, lowp > lowp_dvec3</div><div class="ttdoc">3 components vector of low double-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00280">type_vec.hpp:280</a></div></div>
+<div class="ttc" id="a00157_html_ga444e8f61bfb3a6f037d019ac6933f8c6"><div class="ttname"><a href="a00157.html#ga444e8f61bfb3a6f037d019ac6933f8c6">glm::bvec4</a></div><div class="ttdeci">highp_bvec4 bvec4</div><div class="ttdoc">4 components vector of boolean. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00574">type_vec.hpp:574</a></div></div>
+<div class="ttc" id="a00158_html_ga3c6aeb4cd3e9a14c85dd4c6f311b1e57"><div class="ttname"><a href="a00158.html#ga3c6aeb4cd3e9a14c85dd4c6f311b1e57">glm::lowp_ivec2</a></div><div class="ttdeci">tvec2< int, lowp > lowp_ivec2</div><div class="ttdoc">2 components vector of low precision signed integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00191">type_vec.hpp:191</a></div></div>
+<div class="ttc" id="a00158_html_gaae72e97529b8fa4e0341b425d4fe03ae"><div class="ttname"><a href="a00158.html#gaae72e97529b8fa4e0341b425d4fe03ae">glm::mediump_vec4</a></div><div class="ttdeci">tvec4< float, mediump > mediump_vec4</div><div class="ttdoc">4 components vector of medium single-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00357">type_vec.hpp:357</a></div></div>
+<div class="ttc" id="a00158_html_gaa0eed70387a998c3eca2f4e45f3efaad"><div class="ttname"><a href="a00158.html#gaa0eed70387a998c3eca2f4e45f3efaad">glm::highp_uvec2</a></div><div class="ttdeci">tvec2< uint, highp > highp_uvec2</div><div class="ttdoc">2 components vector of high precision unsigned integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00198">type_vec.hpp:198</a></div></div>
+<div class="ttc" id="a00157_html_gafbab23070ca47932487d25332adc7d7c"><div class="ttname"><a href="a00157.html#gafbab23070ca47932487d25332adc7d7c">glm::vec4</a></div><div class="ttdeci">highp_vec4 vec4</div><div class="ttdoc">4 components vector of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00466">type_vec.hpp:466</a></div></div>
+<div class="ttc" id="a00158_html_ga01d2c9b292e27518e4d6f8442607e8aa"><div class="ttname"><a href="a00158.html#ga01d2c9b292e27518e4d6f8442607e8aa">glm::highp_dvec3</a></div><div class="ttdeci">tvec3< double, highp > highp_dvec3</div><div class="ttdoc">3 components vector of high double-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00266">type_vec.hpp:266</a></div></div>
+<div class="ttc" id="a00157_html_ga2ab812bd103527e2d6c62c2e2f5ee78f"><div class="ttname"><a href="a00157.html#ga2ab812bd103527e2d6c62c2e2f5ee78f">glm::ivec2</a></div><div class="ttdeci">highp_ivec2 ivec2</div><div class="ttdoc">2 components vector of signed integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00510">type_vec.hpp:510</a></div></div>
+<div class="ttc" id="a00158_html_gaf89f8fb5a06848ea4ec1c3a02813454e"><div class="ttname"><a href="a00158.html#gaf89f8fb5a06848ea4ec1c3a02813454e">glm::lowp_vec3</a></div><div class="ttdeci">tvec3< float, lowp > lowp_vec3</div><div class="ttdoc">3 components vector of low single-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00259">type_vec.hpp:259</a></div></div>
+<div class="ttc" id="a00158_html_ga14614613c8e79772c8a6d25dd1c45995"><div class="ttname"><a href="a00158.html#ga14614613c8e79772c8a6d25dd1c45995">glm::mediump_ivec4</a></div><div class="ttdeci">tvec4< int, mediump > mediump_ivec4</div><div class="ttdoc">4 components vector of medium precision signed integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00393">type_vec.hpp:393</a></div></div>
+<div class="ttc" id="a00158_html_ga199cc7c4cfa7c7cadad0c74d2f059aef"><div class="ttname"><a href="a00158.html#ga199cc7c4cfa7c7cadad0c74d2f059aef">glm::mediump_ivec2</a></div><div class="ttdeci">tvec2< int, mediump > mediump_ivec2</div><div class="ttdoc">2 components vector of medium precision signed integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00184">type_vec.hpp:184</a></div></div>
+<div class="ttc" id="a00158_html_gaa040f25233c314adc9560dcdb9dadac2"><div class="ttname"><a href="a00158.html#gaa040f25233c314adc9560dcdb9dadac2">glm::lowp_ivec3</a></div><div class="ttdeci">tvec3< int, lowp > lowp_ivec3</div><div class="ttdoc">3 components vector of low precision signed integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00301">type_vec.hpp:301</a></div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00158_html_gae5f9c57d04b338c9a51a9af39e50795b"><div class="ttname"><a href="a00158.html#gae5f9c57d04b338c9a51a9af39e50795b">glm::highp_bvec4</a></div><div class="ttdeci">tvec4< bool, highp > highp_bvec4</div><div class="ttdoc">4 components vector of high precision bool numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00423">type_vec.hpp:423</a></div></div>
+<div class="ttc" id="a00157_html_ga0e46aaaccc5e713eac5bfbc8d6885a60"><div class="ttname"><a href="a00157.html#ga0e46aaaccc5e713eac5bfbc8d6885a60">glm::bvec2</a></div><div class="ttdeci">highp_bvec2 bvec2</div><div class="ttdoc">2 components vector of boolean. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00564">type_vec.hpp:564</a></div></div>
+<div class="ttc" id="a00158_html_gaca7c2a58eb926799c30ad547a290fccf"><div class="ttname"><a href="a00158.html#gaca7c2a58eb926799c30ad547a290fccf">glm::highp_bvec3</a></div><div class="ttdeci">tvec3< bool, highp > highp_bvec3</div><div class="ttdoc">3 components vector of high precision bool numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00328">type_vec.hpp:328</a></div></div>
+<div class="ttc" id="a00158_html_gade7cb496ed3d78b2a11f1651cce77239"><div class="ttname"><a href="a00158.html#gade7cb496ed3d78b2a11f1651cce77239">glm::highp_vec4</a></div><div class="ttdeci">tvec4< float, highp > highp_vec4</div><div class="ttdoc">4 components vector of high single-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00351">type_vec.hpp:351</a></div></div>
+<div class="ttc" id="a00158_html_ga28dcda102dd8c94ec500ee786af7a30a"><div class="ttname"><a href="a00158.html#ga28dcda102dd8c94ec500ee786af7a30a">glm::lowp_bvec2</a></div><div class="ttdeci">tvec2< bool, lowp > lowp_bvec2</div><div class="ttdoc">2 components vector of low precision bool numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00233">type_vec.hpp:233</a></div></div>
+<div class="ttc" id="a00158_html_ga5d454f34d819d90b9bbb30dcb9ed7b39"><div class="ttname"><a href="a00158.html#ga5d454f34d819d90b9bbb30dcb9ed7b39">glm::highp_dvec4</a></div><div class="ttdeci">tvec4< double, highp > highp_dvec4</div><div class="ttdoc">4 components vector of high double-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00369">type_vec.hpp:369</a></div></div>
+<div class="ttc" id="a00158_html_ga96eb13864627c7c832b5af36aa73bda6"><div class="ttname"><a href="a00158.html#ga96eb13864627c7c832b5af36aa73bda6">glm::lowp_dvec2</a></div><div class="ttdeci">tvec2< double, lowp > lowp_dvec2</div><div class="ttdoc">2 components vector of low double-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00170">type_vec.hpp:170</a></div></div>
+<div class="ttc" id="a00157_html_gae85537b672ffe0b3218cbdf1823e1c72"><div class="ttname"><a href="a00157.html#gae85537b672ffe0b3218cbdf1823e1c72">glm::uvec3</a></div><div class="ttdeci">highp_uvec3 uvec3</div><div class="ttdoc">3 components vector of unsigned integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00542">type_vec.hpp:542</a></div></div>
+<div class="ttc" id="a00158_html_ga591478a77e4324e0836abc17cbb13e83"><div class="ttname"><a href="a00158.html#ga591478a77e4324e0836abc17cbb13e83">glm::mediump_vec3</a></div><div class="ttdeci">tvec3< float, mediump > mediump_vec3</div><div class="ttdoc">3 components vector of medium single-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00252">type_vec.hpp:252</a></div></div>
+<div class="ttc" id="a00158_html_ga3f0c27f7ab42f004054a247c93a7bf57"><div class="ttname"><a href="a00158.html#ga3f0c27f7ab42f004054a247c93a7bf57">glm::mediump_bvec4</a></div><div class="ttdeci">tvec4< bool, mediump > mediump_bvec4</div><div class="ttdoc">4 components vector of medium precision bool numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00429">type_vec.hpp:429</a></div></div>
+<div class="ttc" id="a00158_html_gafa2087ead0d0e2a3c907e3fbd99f4d85"><div class="ttname"><a href="a00158.html#gafa2087ead0d0e2a3c907e3fbd99f4d85">glm::lowp_bvec4</a></div><div class="ttdeci">tvec4< bool, lowp > lowp_bvec4</div><div class="ttdoc">4 components vector of low precision bool numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00435">type_vec.hpp:435</a></div></div>
+<div class="ttc" id="a00158_html_ga631f5767b9d45c5cd3d0bcd67565b3f7"><div class="ttname"><a href="a00158.html#ga631f5767b9d45c5cd3d0bcd67565b3f7">glm::mediump_uvec4</a></div><div class="ttdeci">tvec4< uint, mediump > mediump_uvec4</div><div class="ttdoc">4 components vector of medium precision unsigned integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00411">type_vec.hpp:411</a></div></div>
+<div class="ttc" id="a00158_html_ga61359f5531550e45871a97589d8dcce1"><div class="ttname"><a href="a00158.html#ga61359f5531550e45871a97589d8dcce1">glm::highp_uvec4</a></div><div class="ttdeci">tvec4< uint, highp > highp_uvec4</div><div class="ttdoc">4 components vector of high precision unsigned integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00405">type_vec.hpp:405</a></div></div>
+<div class="ttc" id="a00158_html_gaf564d5be1e65bd2204754043b218c9a4"><div class="ttname"><a href="a00158.html#gaf564d5be1e65bd2204754043b218c9a4">glm::highp_uvec3</a></div><div class="ttdeci">tvec3< uint, highp > highp_uvec3</div><div class="ttdoc">3 components vector of high precision unsigned integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00308">type_vec.hpp:308</a></div></div>
+<div class="ttc" id="a00158_html_gab5d6a45e1bbb13314b47793865a4c072"><div class="ttname"><a href="a00158.html#gab5d6a45e1bbb13314b47793865a4c072">glm::lowp_dvec4</a></div><div class="ttdeci">tvec4< double, lowp > lowp_dvec4</div><div class="ttdoc">4 components vector of low double-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00381">type_vec.hpp:381</a></div></div>
+<div class="ttc" id="a00158_html_ga8330bf0d7e6d03ca12ee2b1334c2c30f"><div class="ttname"><a href="a00158.html#ga8330bf0d7e6d03ca12ee2b1334c2c30f">glm::highp_ivec3</a></div><div class="ttdeci">tvec3< int, highp > highp_ivec3</div><div class="ttdoc">3 components vector of high precision signed integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00287">type_vec.hpp:287</a></div></div>
+<div class="ttc" id="a00158_html_gac37a3fd0ecdcab044853c039409c9af7"><div class="ttname"><a href="a00158.html#gac37a3fd0ecdcab044853c039409c9af7">glm::mediump_vec2</a></div><div class="ttdeci">tvec2< float, mediump > mediump_vec2</div><div class="ttdoc">2 components vector of medium single-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00142">type_vec.hpp:142</a></div></div>
+<div class="ttc" id="a00157_html_gaa7c3a0e7ae50c34c3290415c115f251e"><div class="ttname"><a href="a00157.html#gaa7c3a0e7ae50c34c3290415c115f251e">glm::uvec4</a></div><div class="ttdeci">highp_uvec4 uvec4</div><div class="ttdoc">4 components vector of unsigned integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00547">type_vec.hpp:547</a></div></div>
+<div class="ttc" id="a00158_html_ga388fd99d9ffc7190a4732c35b0c7bfc9"><div class="ttname"><a href="a00158.html#ga388fd99d9ffc7190a4732c35b0c7bfc9">glm::mediump_dvec2</a></div><div class="ttdeci">tvec2< double, mediump > mediump_dvec2</div><div class="ttdoc">2 components vector of medium double-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00163">type_vec.hpp:163</a></div></div>
+<div class="ttc" id="a00158_html_gabfc3e9f63cc3e2ee0521405277ef3997"><div class="ttname"><a href="a00158.html#gabfc3e9f63cc3e2ee0521405277ef3997">glm::highp_vec2</a></div><div class="ttdeci">tvec2< float, highp > highp_vec2</div><div class="ttdoc">2 components vector of high single-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00135">type_vec.hpp:135</a></div></div>
+<div class="ttc" id="a00158_html_gae1f4f68346474246eb4a9952af49e72b"><div class="ttname"><a href="a00158.html#gae1f4f68346474246eb4a9952af49e72b">glm::mediump_bvec2</a></div><div class="ttdeci">tvec2< bool, mediump > mediump_bvec2</div><div class="ttdoc">2 components vector of medium precision bool numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00226">type_vec.hpp:226</a></div></div>
+<div class="ttc" id="a00158_html_ga0d1778766f17c4329a8c3f2b37f5fab0"><div class="ttname"><a href="a00158.html#ga0d1778766f17c4329a8c3f2b37f5fab0">glm::mediump_bvec3</a></div><div class="ttdeci">tvec3< bool, mediump > mediump_bvec3</div><div class="ttdoc">3 components vector of medium precision bool numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00334">type_vec.hpp:334</a></div></div>
+<div class="ttc" id="a00113_html"><div class="ttname"><a href="a00113.html">type_int.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00158_html_ga829f39950549881a08c534946c0487e1"><div class="ttname"><a href="a00158.html#ga829f39950549881a08c534946c0487e1">glm::highp_bvec2</a></div><div class="ttdeci">tvec2< bool, highp > highp_bvec2</div><div class="ttdoc">2 components vector of high precision bool numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00219">type_vec.hpp:219</a></div></div>
+<div class="ttc" id="a00157_html_gabebd0c7e3c5cd337d95c313c5e8b8db4"><div class="ttname"><a href="a00157.html#gabebd0c7e3c5cd337d95c313c5e8b8db4">glm::dvec3</a></div><div class="ttdeci">highp_dvec3 dvec3</div><div class="ttdoc">3 components vector of double-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00488">type_vec.hpp:488</a></div></div>
+<div class="ttc" id="a00158_html_ga392c0761c8bef616801e0d81a6867ed7"><div class="ttname"><a href="a00158.html#ga392c0761c8bef616801e0d81a6867ed7">glm::mediump_uvec2</a></div><div class="ttdeci">tvec2< uint, mediump > mediump_uvec2</div><div class="ttdoc">2 components vector of medium precision unsigned integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00205">type_vec.hpp:205</a></div></div>
+<div class="ttc" id="a00157_html_ga9bcffa2d49f28d16f680757b5c0e7c84"><div class="ttname"><a href="a00157.html#ga9bcffa2d49f28d16f680757b5c0e7c84">glm::uvec2</a></div><div class="ttdeci">highp_uvec2 uvec2</div><div class="ttdoc">2 components vector of unsigned integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00537">type_vec.hpp:537</a></div></div>
+<div class="ttc" id="a00157_html_ga9503f809789bda7e8852a6abde3ae5c1"><div class="ttname"><a href="a00157.html#ga9503f809789bda7e8852a6abde3ae5c1">glm::dvec4</a></div><div class="ttdeci">highp_dvec4 dvec4</div><div class="ttdoc">4 components vector of double-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00493">type_vec.hpp:493</a></div></div>
+<div class="ttc" id="a00158_html_ga3e804226444dfe246133fc6ec4a3912f"><div class="ttname"><a href="a00158.html#ga3e804226444dfe246133fc6ec4a3912f">glm::mediump_dvec4</a></div><div class="ttdeci">tvec4< double, mediump > mediump_dvec4</div><div class="ttdoc">4 components vector of medium double-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00375">type_vec.hpp:375</a></div></div>
+<div class="ttc" id="a00158_html_gaf0049c860a612da9bd3ba9ac9e49e820"><div class="ttname"><a href="a00158.html#gaf0049c860a612da9bd3ba9ac9e49e820">glm::lowp_uvec3</a></div><div class="ttdeci">tvec3< uint, lowp > lowp_uvec3</div><div class="ttdoc">3 components vector of low precision unsigned integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00322">type_vec.hpp:322</a></div></div>
+<div class="ttc" id="a00158_html_ga0b4741d444b131ef1fc54b19c37f72be"><div class="ttname"><a href="a00158.html#ga0b4741d444b131ef1fc54b19c37f72be">glm::mediump_dvec3</a></div><div class="ttdeci">tvec3< double, mediump > mediump_dvec3</div><div class="ttdoc">3 components vector of medium double-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00273">type_vec.hpp:273</a></div></div>
+<div class="ttc" id="a00158_html_ga6bfb90b936bbbc67e438bb9ac6910309"><div class="ttname"><a href="a00158.html#ga6bfb90b936bbbc67e438bb9ac6910309">glm::lowp_uvec2</a></div><div class="ttdeci">tvec2< uint, lowp > lowp_uvec2</div><div class="ttdoc">2 components vector of low precision unsigned integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00212">type_vec.hpp:212</a></div></div>
+<div class="ttc" id="a00158_html_gaa015a3707413de20c03948308dba2f2e"><div class="ttname"><a href="a00158.html#gaa015a3707413de20c03948308dba2f2e">glm::highp_ivec2</a></div><div class="ttdeci">tvec2< int, highp > highp_ivec2</div><div class="ttdoc">2 components vector of high precision signed integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00177">type_vec.hpp:177</a></div></div>
+<div class="ttc" id="a00158_html_ga76c0948546deeeb18bfda36f18b3e673"><div class="ttname"><a href="a00158.html#ga76c0948546deeeb18bfda36f18b3e673">glm::lowp_bvec3</a></div><div class="ttdeci">tvec3< bool, lowp > lowp_bvec3</div><div class="ttdoc">3 components vector of low precision bool numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00340">type_vec.hpp:340</a></div></div>
+<div class="ttc" id="a00158_html_ga9b7843453f7ad6ebfa26e50408b8dcf0"><div class="ttname"><a href="a00158.html#ga9b7843453f7ad6ebfa26e50408b8dcf0">glm::mediump_ivec3</a></div><div class="ttdeci">tvec3< int, mediump > mediump_ivec3</div><div class="ttdoc">3 components vector of medium precision signed integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00294">type_vec.hpp:294</a></div></div>
+<div class="ttc" id="a00157_html_gaa8ea2429bb3cb41a715258a447f39897"><div class="ttname"><a href="a00157.html#gaa8ea2429bb3cb41a715258a447f39897">glm::vec3</a></div><div class="ttdeci">highp_vec3 vec3</div><div class="ttdoc">3 components vector of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00461">type_vec.hpp:461</a></div></div>
+<div class="ttc" id="a00157_html_ga15ade901680b29b78c1f9d1796db6e0e"><div class="ttname"><a href="a00157.html#ga15ade901680b29b78c1f9d1796db6e0e">glm::dvec2</a></div><div class="ttdeci">highp_dvec2 dvec2</div><div class="ttdoc">2 components vector of double-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00483">type_vec.hpp:483</a></div></div>
+<div class="ttc" id="a00158_html_ga435eb408e8dfa4f7185368109d432c14"><div class="ttname"><a href="a00158.html#ga435eb408e8dfa4f7185368109d432c14">glm::highp_dvec2</a></div><div class="ttdeci">tvec2< double, highp > highp_dvec2</div><div class="ttdoc">2 components vector of high double-precision floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00156">type_vec.hpp:156</a></div></div>
+<div class="ttc" id="a00157_html_ga09d0200e8ff86391d8804b4fefd5f1da"><div class="ttname"><a href="a00157.html#ga09d0200e8ff86391d8804b4fefd5f1da">glm::vec2</a></div><div class="ttdeci">highp_vec2 vec2</div><div class="ttdoc">2 components vector of floating-point numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00456">type_vec.hpp:456</a></div></div>
+<div class="ttc" id="a00158_html_ga54ae0b7b207b8e7e88841d146d2de12e"><div class="ttname"><a href="a00158.html#ga54ae0b7b207b8e7e88841d146d2de12e">glm::mediump_uvec3</a></div><div class="ttdeci">tvec3< uint, mediump > mediump_uvec3</div><div class="ttdoc">3 components vector of medium precision unsigned integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00315">type_vec.hpp:315</a></div></div>
+<div class="ttc" id="a00158_html_ga6efcd4574e112cfcda320db58e649ee3"><div class="ttname"><a href="a00158.html#ga6efcd4574e112cfcda320db58e649ee3">glm::lowp_uvec4</a></div><div class="ttdeci">tvec4< uint, lowp > lowp_uvec4</div><div class="ttdoc">4 components vector of low precision unsigned integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00417">type_vec.hpp:417</a></div></div>
+<div class="ttc" id="a00085_html"><div class="ttname"><a href="a00085.html">precision.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00157_html_gaaa26c41d168dc00be0fe55f4d0a34224"><div class="ttname"><a href="a00157.html#gaaa26c41d168dc00be0fe55f4d0a34224">glm::ivec4</a></div><div class="ttdeci">highp_ivec4 ivec4</div><div class="ttdoc">4 components vector of signed integer numbers. </div><div class="ttdef"><b>Definition:</b> <a href="a00127_source.html#l00520">type_vec.hpp:520</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00128.html b/src/third_party/glm/doc/api/a00128.html
new file mode 100644
index 0000000..d59c9e0
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00128.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: type_vec1.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">type_vec1.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00128_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+
+<p>Definition in file <a class="el" href="a00128_source.html">type_vec1.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00128_source.html b/src/third_party/glm/doc/api/a00128_source.html
new file mode 100644
index 0000000..c62a74d
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00128_source.html
@@ -0,0 +1,357 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: type_vec1.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">type_vec1.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00128.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include "../fwd.hpp"</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#include "<a class="code" href="a00127.html">type_vec.hpp</a>"</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor">#if GLM_SWIZZLE == GLM_SWIZZLE_ENABLED</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor"># if GLM_HAS_UNRESTRICTED_UNIONS</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor"># include "<a class="code" href="a00004.html">_swizzle.hpp</a>"</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor"># else</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor"># include "<a class="code" href="a00005.html">_swizzle_func.hpp</a>"</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#endif //GLM_SWIZZLE</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#include <cstddef></span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> {</div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P = defaultp></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <span class="keyword">struct </span>tvec1</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  {</div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="comment">// -- Implementation detail --</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="keyword">typedef</span> T value_type;</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <span class="keyword">typedef</span> tvec1<T, P> type;</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keyword">typedef</span> tvec1<bool, P> bool_type;</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="comment">// -- Data --</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor"># if GLM_HAS_ALIGNED_TYPE</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor"># if GLM_COMPILER & GLM_COMPILER_GCC</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor"># pragma GCC diagnostic push</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor"># pragma GCC diagnostic ignored "-pedantic"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor"># if GLM_COMPILER & GLM_COMPILER_CLANG</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor"># pragma clang diagnostic push</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor"># pragma clang diagnostic ignored "-Wgnu-anonymous-struct"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor"># pragma clang diagnostic ignored "-Wnested-anon-types"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keyword">union</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  {</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  T x;</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  T r;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  T s;</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="comment"># if GLM_SWIZZLE == GLM_SWIZZLE_ENABLED</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="comment"> _GLM_SWIZZLE1_2_MEMBERS(T, P, tvec2, x)</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="comment"> _GLM_SWIZZLE1_2_MEMBERS(T, P, tvec2, r)</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="comment"> _GLM_SWIZZLE1_2_MEMBERS(T, P, tvec2, s)</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="comment"> _GLM_SWIZZLE1_3_MEMBERS(T, P, tvec3, x)</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="comment"> _GLM_SWIZZLE1_3_MEMBERS(T, P, tvec3, r)</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="comment"> _GLM_SWIZZLE1_3_MEMBERS(T, P, tvec3, s)</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="comment"> _GLM_SWIZZLE1_4_MEMBERS(T, P, tvec4, x)</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="comment"> _GLM_SWIZZLE1_4_MEMBERS(T, P, tvec4, r)</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="comment"> _GLM_SWIZZLE1_4_MEMBERS(T, P, tvec4, s)</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="comment"># endif//GLM_SWIZZLE*/</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  };</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  </div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="preprocessor"># if GLM_COMPILER & GLM_COMPILER_CLANG</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="preprocessor"># pragma clang diagnostic pop</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="preprocessor"># if GLM_COMPILER & GLM_COMPILER_GCC</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="preprocessor"># pragma GCC diagnostic pop</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="preprocessor"># else</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keyword">union </span>{T x, r, s;};</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="comment"># if GLM_SWIZZLE == GLM_SWIZZLE_ENABLED</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="comment"> GLM_SWIZZLE_GEN_VEC_FROM_VEC1(T, P, tvec2, tvec2, tvec3, tvec4)</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="comment"># endif//GLM_SWIZZLE*/</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="comment">// -- Component accesses --</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keyword">typedef</span> length_t length_type;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  GLM_FUNC_DECL GLM_CONSTEXPR length_type <a class="code" href="a00148.html#ga18d45e3d4c7705e67ccfabd99e521604">length</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  GLM_FUNC_DECL T & operator[](length_type i);</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  GLM_FUNC_DECL T <span class="keyword">const</span> & operator[](length_type i) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <span class="comment">// -- Implicit basic constructors --</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  GLM_FUNC_DECL GLM_CONSTEXPR tvec1() GLM_DEFAULT_CTOR;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  GLM_FUNC_DECL GLM_CONSTEXPR tvec1(tvec1<T, P> const & v) GLM_DEFAULT;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  template <precision Q></div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  GLM_FUNC_DECL GLM_CONSTEXPR tvec1(tvec1<T, Q> const & v);</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="comment">// -- Explicit basic constructors --</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tvec1(ctor);</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  GLM_FUNC_DECL GLM_CONSTEXPR explicit tvec1(T scalar);</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="comment">// -- Conversion vector constructors --</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  template <typename U, precision Q></div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT tvec1(tvec2<U, Q> const & v);</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  template <typename U, precision Q></div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT tvec1(tvec3<U, Q> const & v);</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  template <typename U, precision Q></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT tvec1(tvec4<U, Q> const & v);</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  template <typename U, precision Q></div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT tvec1(tvec1<U, Q> const & v);</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="comment">// -- Swizzle constructors --</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="comment"># if(GLM_HAS_UNRESTRICTED_UNIONS && (GLM_SWIZZLE == GLM_SWIZZLE_ENABLED))</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="comment"> template <int E0></span></div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="comment"> GLM_FUNC_DECL tvec1(detail::_swizzle<1, T, P, tvec1, E0, -1,-2,-3> const & that)</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="comment"> {</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="comment"> *this = that();</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="comment"> }</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="comment"># endif//(GLM_HAS_UNRESTRICTED_UNIONS && (GLM_SWIZZLE == GLM_SWIZZLE_ENABLED))</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="comment">// -- Unary arithmetic operators --</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  GLM_FUNC_DECL tvec1<T, P> & operator=(tvec1<T, P> const & v) GLM_DEFAULT;</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  template <typename U></div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  GLM_FUNC_DECL tvec1<T, P> & operator=(tvec1<U, P> const & v);</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  template <typename U></div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  GLM_FUNC_DECL tvec1<T, P> & operator+=(U scalar);</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  template <typename U></div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  GLM_FUNC_DECL tvec1<T, P> & operator+=(tvec1<U, P> const & v);</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  template <typename U></div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  GLM_FUNC_DECL tvec1<T, P> & operator-=(U scalar);</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  template <typename U></div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  GLM_FUNC_DECL tvec1<T, P> & operator-=(tvec1<U, P> const & v);</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  template <typename U></div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  GLM_FUNC_DECL tvec1<T, P> & operator*=(U scalar);</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  template <typename U></div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  GLM_FUNC_DECL tvec1<T, P> & operator*=(tvec1<U, P> const & v);</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  template <typename U></div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  GLM_FUNC_DECL tvec1<T, P> & operator/=(U scalar);</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  template <typename U></div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  GLM_FUNC_DECL tvec1<T, P> & operator/=(tvec1<U, P> const & v);</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="comment">// -- Increment and decrement operators --</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  GLM_FUNC_DECL tvec1<T, P> & operator++();</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  GLM_FUNC_DECL tvec1<T, P> & operator--();</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  GLM_FUNC_DECL tvec1<T, P> operator++(<span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  GLM_FUNC_DECL tvec1<T, P> operator--(<span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="comment">// -- Unary bit operators --</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  template <typename U></div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  GLM_FUNC_DECL tvec1<T, P> & operator%=(U scalar);</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  template <typename U></div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  GLM_FUNC_DECL tvec1<T, P> & operator%=(tvec1<U, P> const & v);</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  template <typename U></div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  GLM_FUNC_DECL tvec1<T, P> & operator&=(U scalar);</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  template <typename U></div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  GLM_FUNC_DECL tvec1<T, P> & operator&=(tvec1<U, P> const & v);</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  template <typename U></div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  GLM_FUNC_DECL tvec1<T, P> & operator|=(U scalar);</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  template <typename U></div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  GLM_FUNC_DECL tvec1<T, P> & operator|=(tvec1<U, P> const & v);</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  template <typename U></div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  GLM_FUNC_DECL tvec1<T, P> & operator^=(U scalar);</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  template <typename U></div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  GLM_FUNC_DECL tvec1<T, P> & operator^=(tvec1<U, P> const & v);</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  template <typename U></div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  GLM_FUNC_DECL tvec1<T, P> & operator<<=(U scalar);</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  template <typename U></div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  GLM_FUNC_DECL tvec1<T, P> & operator<<=(tvec1<U, P> const & v);</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  template <typename U></div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  GLM_FUNC_DECL tvec1<T, P> & operator>>=(U scalar);</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  template <typename U></div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  GLM_FUNC_DECL tvec1<T, P> & operator>>=(tvec1<U, P> const & v);</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  };</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  <span class="comment">// -- Unary operators --</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  GLM_FUNC_DECL tvec1<T, P> operator+(tvec1<T, P> const & v);</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  GLM_FUNC_DECL tvec1<T, P> operator-(tvec1<T, P> const & v);</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> </div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <span class="comment">// -- Binary operators --</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  GLM_FUNC_DECL tvec1<T, P> operator+(tvec1<T, P> const & v, T scalar);</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> </div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  GLM_FUNC_DECL tvec1<T, P> operator+(T scalar, tvec1<T, P> const & v);</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  GLM_FUNC_DECL tvec1<T, P> operator+(tvec1<T, P> const & v1, tvec1<T, P> const & v2);</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> </div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  GLM_FUNC_DECL tvec1<T, P> operator-(tvec1<T, P> const & v, T scalar);</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> </div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  GLM_FUNC_DECL tvec1<T, P> operator-(T scalar, tvec1<T, P> const & v);</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> </div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  GLM_FUNC_DECL tvec1<T, P> operator- (tvec1<T, P> const & v1, tvec1<T, P> const & v2);</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  GLM_FUNC_DECL tvec1<T, P> operator*(tvec1<T, P> const & v, T scalar);</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  GLM_FUNC_DECL tvec1<T, P> operator*(T scalar, tvec1<T, P> const & v);</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> </div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  GLM_FUNC_DECL tvec1<T, P> operator*(tvec1<T, P> const & v1, tvec1<T, P> const & v2);</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> </div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  GLM_FUNC_DECL tvec1<T, P> operator/(tvec1<T, P> const & v, T scalar);</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> </div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  GLM_FUNC_DECL tvec1<T, P> operator/(T scalar, tvec1<T, P> const & v);</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> </div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  GLM_FUNC_DECL tvec1<T, P> operator/(tvec1<T, P> const & v1, tvec1<T, P> const & v2);</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> </div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  GLM_FUNC_DECL tvec1<T, P> operator%(tvec1<T, P> const & v, T scalar);</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> </div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  GLM_FUNC_DECL tvec1<T, P> operator%(T scalar, tvec1<T, P> const & v);</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> </div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  GLM_FUNC_DECL tvec1<T, P> operator%(tvec1<T, P> const & v1, tvec1<T, P> const & v2);</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> </div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  GLM_FUNC_DECL tvec1<T, P> operator&(tvec1<T, P> const & v, T scalar);</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  GLM_FUNC_DECL tvec1<T, P> operator&(T scalar, tvec1<T, P> const & v);</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> </div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  GLM_FUNC_DECL tvec1<T, P> operator&(tvec1<T, P> const & v1, tvec1<T, P> const & v2);</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> </div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  GLM_FUNC_DECL tvec1<T, P> operator|(tvec1<T, P> const & v, T scalar);</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> </div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  GLM_FUNC_DECL tvec1<T, P> operator|(T scalar, tvec1<T, P> const & v);</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> </div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  GLM_FUNC_DECL tvec1<T, P> operator|(tvec1<T, P> const & v1, tvec1<T, P> const & v2);</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> </div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  GLM_FUNC_DECL tvec1<T, P> operator^(tvec1<T, P> const & v, T scalar);</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> </div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  GLM_FUNC_DECL tvec1<T, P> operator^(T scalar, tvec1<T, P> const & v);</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> </div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  GLM_FUNC_DECL tvec1<T, P> operator^(tvec1<T, P> const & v1, tvec1<T, P> const & v2);</div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> </div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  GLM_FUNC_DECL tvec1<T, P> operator<<(tvec1<T, P> const & v, T scalar);</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> </div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  GLM_FUNC_DECL tvec1<T, P> operator<<(T scalar, tvec1<T, P> const & v);</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> </div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  GLM_FUNC_DECL tvec1<T, P> operator<<(tvec1<T, P> const & v1, tvec1<T, P> const & v2);</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  GLM_FUNC_DECL tvec1<T, P> operator>>(tvec1<T, P> const & v, T scalar);</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> </div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  GLM_FUNC_DECL tvec1<T, P> operator>>(T scalar, tvec1<T, P> const & v);</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> </div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  GLM_FUNC_DECL tvec1<T, P> operator>>(tvec1<T, P> const & v1, tvec1<T, P> const & v2);</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> </div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  GLM_FUNC_DECL tvec1<T, P> operator~(tvec1<T, P> const & v);</div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> </div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <span class="comment">// -- Boolean operators --</span></div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> </div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> operator==(tvec1<T, P> const & v1, tvec1<T, P> const & v2);</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> </div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  template <typename T, precision P></div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> operator!=(tvec1<T, P> const & v1, tvec1<T, P> const & v2);</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> </div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  template <precision P></div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  GLM_FUNC_DECL tvec1<<span class="keywordtype">bool</span>, P> operator&&(tvec1<<span class="keywordtype">bool</span>, P> const & v1, tvec1<<span class="keywordtype">bool</span>, P> const & v2);</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> </div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  template <precision P></div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  GLM_FUNC_DECL tvec1<<span class="keywordtype">bool</span>, P> operator||(tvec1<<span class="keywordtype">bool</span>, P> const & v1, tvec1<<span class="keywordtype">bool</span>, P> const & v2);</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> </div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> <span class="preprocessor">#ifndef GLM_EXTERNAL_TEMPLATE</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> <span class="preprocessor">#include "type_vec1.inl"</span></div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> <span class="preprocessor">#endif//GLM_EXTERNAL_TEMPLATE</span></div>
+<div class="ttc" id="a00127_html"><div class="ttname"><a href="a00127.html">type_vec.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00005_html"><div class="ttname"><a href="a00005.html">_swizzle_func.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00148_html_ga18d45e3d4c7705e67ccfabd99e521604"><div class="ttname"><a href="a00148.html#ga18d45e3d4c7705e67ccfabd99e521604">glm::length</a></div><div class="ttdeci">GLM_FUNC_DECL T length(vecType< T, P > const &x)</div><div class="ttdoc">Returns the length of x, i.e., sqrt(x * x). </div></div>
+<div class="ttc" id="a00004_html"><div class="ttname"><a href="a00004.html">_swizzle.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00129.html b/src/third_party/glm/doc/api/a00129.html
new file mode 100644
index 0000000..c81a826
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00129.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: type_vec2.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">type_vec2.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00129_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+
+<p>Definition in file <a class="el" href="a00129_source.html">type_vec2.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00129_source.html b/src/third_party/glm/doc/api/a00129_source.html
new file mode 100644
index 0000000..35bff73
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00129_source.html
@@ -0,0 +1,443 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: type_vec2.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">type_vec2.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00129.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include "<a class="code" href="a00127.html">type_vec.hpp</a>"</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#if GLM_SWIZZLE == GLM_SWIZZLE_ENABLED</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor"># if GLM_HAS_UNRESTRICTED_UNIONS</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor"># include "<a class="code" href="a00004.html">_swizzle.hpp</a>"</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor"># else</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor"># include "<a class="code" href="a00005.html">_swizzle_func.hpp</a>"</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#endif //GLM_SWIZZLE</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#include <cstddef></span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> {</div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P = defaultp></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <span class="keyword">struct </span>tvec2</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  {</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <span class="comment">// -- Implementation detail --</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keyword">typedef</span> T value_type;</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="keyword">typedef</span> tvec2<T, P> type;</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <span class="keyword">typedef</span> tvec2<bool, P> bool_type;</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="comment">// -- Data --</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor"># if GLM_HAS_ALIGNED_TYPE</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor"># if GLM_COMPILER & GLM_COMPILER_GCC</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor"># pragma GCC diagnostic push</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor"># pragma GCC diagnostic ignored "-pedantic"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor"># if GLM_COMPILER & GLM_COMPILER_CLANG</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor"># pragma clang diagnostic push</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor"># pragma clang diagnostic ignored "-Wgnu-anonymous-struct"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor"># pragma clang diagnostic ignored "-Wnested-anon-types"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keyword">union</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  {</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keyword">struct</span>{ T x, y; };</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keyword">struct</span>{ T r, g; };</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keyword">struct</span>{ T s, t; };</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="preprocessor"># if GLM_SWIZZLE == GLM_SWIZZLE_ENABLED</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  _GLM_SWIZZLE2_2_MEMBERS(T, P, glm::tvec2, x, y)</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  _GLM_SWIZZLE2_2_MEMBERS(T, P, <a class="code" href="a00141.html">glm</a>::tvec2, r, g)</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  _GLM_SWIZZLE2_2_MEMBERS(T, P, <a class="code" href="a00141.html">glm</a>::tvec2, s, t)</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  _GLM_SWIZZLE2_3_MEMBERS(T, P, <a class="code" href="a00141.html">glm</a>::tvec3, x, y)</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  _GLM_SWIZZLE2_3_MEMBERS(T, P, <a class="code" href="a00141.html">glm</a>::tvec3, r, g)</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  _GLM_SWIZZLE2_3_MEMBERS(T, P, <a class="code" href="a00141.html">glm</a>::tvec3, s, t)</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  _GLM_SWIZZLE2_4_MEMBERS(T, P, <a class="code" href="a00141.html">glm</a>::tvec4, x, y)</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  _GLM_SWIZZLE2_4_MEMBERS(T, P, <a class="code" href="a00141.html">glm</a>::tvec4, r, g)</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  _GLM_SWIZZLE2_4_MEMBERS(T, P, <a class="code" href="a00141.html">glm</a>::tvec4, s, t)</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="preprocessor"># endif//GLM_SWIZZLE</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  };</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  </div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="preprocessor"># if GLM_COMPILER & GLM_COMPILER_CLANG</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="preprocessor"># pragma clang diagnostic pop</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="preprocessor"># if GLM_COMPILER & GLM_COMPILER_GCC</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="preprocessor"># pragma GCC diagnostic pop</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="preprocessor"># else</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keyword">union </span>{T x, r, s;};</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keyword">union </span>{T y, g, t;};</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="preprocessor"># if GLM_SWIZZLE == GLM_SWIZZLE_ENABLED</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  GLM_SWIZZLE_GEN_VEC_FROM_VEC2(T, P, tvec2, tvec2, tvec3, tvec4)</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="preprocessor"># endif//GLM_SWIZZLE</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="comment">// -- Component accesses --</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keyword">typedef</span> length_t length_type;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  GLM_FUNC_DECL GLM_CONSTEXPR length_type <a class="code" href="a00148.html#ga18d45e3d4c7705e67ccfabd99e521604">length</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  GLM_FUNC_DECL T & operator[](length_type i);</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  GLM_FUNC_DECL T <span class="keyword">const</span> & operator[](length_type i) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="comment">// -- Implicit basic constructors --</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  GLM_FUNC_DECL GLM_CONSTEXPR tvec2() GLM_DEFAULT_CTOR;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  GLM_FUNC_DECL GLM_CONSTEXPR tvec2(tvec2<T, P> const& v) GLM_DEFAULT;</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  template <precision Q></div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  GLM_FUNC_DECL GLM_CONSTEXPR tvec2(tvec2<T, Q> const& v);</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="comment">// -- Explicit basic constructors --</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tvec2(ctor);</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  GLM_FUNC_DECL GLM_CONSTEXPR explicit tvec2(T scalar);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  GLM_FUNC_DECL GLM_CONSTEXPR tvec2(T s1, T s2);</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="comment">// -- Conversion constructors --</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  template <typename A, typename B></div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  GLM_FUNC_DECL GLM_CONSTEXPR tvec2(A x, B y);</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  template <typename A, typename B></div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  GLM_FUNC_DECL GLM_CONSTEXPR tvec2(tvec1<A, P> const & v1, tvec1<B, P> const & v2);</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="comment">// -- Conversion vector constructors --</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  template <typename U, precision Q></div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT tvec2(tvec3<U, Q> const & v);</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  template <typename U, precision Q></div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT tvec2(tvec4<U, Q> const & v);</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  template <typename U, precision Q></div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT tvec2(tvec2<U, Q> const & v);</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="comment">// -- Swizzle constructors --</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="preprocessor"># if GLM_HAS_UNRESTRICTED_UNIONS && (GLM_SWIZZLE == GLM_SWIZZLE_ENABLED)</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="keyword">template</span> <<span class="keywordtype">int</span> E0, <span class="keywordtype">int</span> E1></div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  GLM_FUNC_DECL tvec2(detail::_swizzle<2, T, P, glm::tvec2, E0, E1,-1,-2> <span class="keyword">const</span>& that)</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  {</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  *<span class="keyword">this</span> = that();</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  }</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="preprocessor"># endif// GLM_HAS_UNRESTRICTED_UNIONS && (GLM_SWIZZLE == GLM_SWIZZLE_ENABLED)</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="comment">// -- Unary arithmetic operators --</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  GLM_FUNC_DECL tvec2<T, P>& operator=(tvec2<T, P> <span class="keyword">const</span> & v) GLM_DEFAULT;</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  GLM_FUNC_DECL tvec2<T, P>& operator=(tvec2<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  GLM_FUNC_DECL tvec2<T, P>& operator+=(U scalar);</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  GLM_FUNC_DECL tvec2<T, P>& operator+=(tvec1<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  GLM_FUNC_DECL tvec2<T, P>& operator+=(tvec2<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  GLM_FUNC_DECL tvec2<T, P>& operator-=(U scalar);</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  GLM_FUNC_DECL tvec2<T, P>& operator-=(tvec1<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  GLM_FUNC_DECL tvec2<T, P>& operator-=(tvec2<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  GLM_FUNC_DECL tvec2<T, P>& operator*=(U scalar);</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  GLM_FUNC_DECL tvec2<T, P>& operator*=(tvec1<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  GLM_FUNC_DECL tvec2<T, P>& operator*=(tvec2<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  GLM_FUNC_DECL tvec2<T, P>& operator/=(U scalar);</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  GLM_FUNC_DECL tvec2<T, P>& operator/=(tvec1<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  GLM_FUNC_DECL tvec2<T, P>& operator/=(tvec2<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <span class="comment">// -- Increment and decrement operators --</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  GLM_FUNC_DECL tvec2<T, P> & operator++();</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  GLM_FUNC_DECL tvec2<T, P> & operator--();</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  GLM_FUNC_DECL tvec2<T, P> operator++(<span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  GLM_FUNC_DECL tvec2<T, P> operator--(<span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="comment">// -- Unary bit operators --</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U> </div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  GLM_FUNC_DECL tvec2<T, P> & operator%=(U scalar);</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U> </div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  GLM_FUNC_DECL tvec2<T, P> & operator%=(tvec1<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U> </div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  GLM_FUNC_DECL tvec2<T, P> & operator%=(tvec2<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U> </div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  GLM_FUNC_DECL tvec2<T, P> & operator&=(U scalar);</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U> </div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  GLM_FUNC_DECL tvec2<T, P> & operator&=(tvec1<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U> </div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  GLM_FUNC_DECL tvec2<T, P> & operator&=(tvec2<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U> </div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  GLM_FUNC_DECL tvec2<T, P> & operator|=(U scalar);</div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U> </div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  GLM_FUNC_DECL tvec2<T, P> & operator|=(tvec1<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U> </div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  GLM_FUNC_DECL tvec2<T, P> & operator|=(tvec2<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U> </div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  GLM_FUNC_DECL tvec2<T, P> & operator^=(U scalar);</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U> </div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  GLM_FUNC_DECL tvec2<T, P> & operator^=(tvec1<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U> </div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  GLM_FUNC_DECL tvec2<T, P> & operator^=(tvec2<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U> </div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  GLM_FUNC_DECL tvec2<T, P> & operator<<=(U scalar);</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U> </div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  GLM_FUNC_DECL tvec2<T, P> & operator<<=(tvec1<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U> </div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  GLM_FUNC_DECL tvec2<T, P> & operator<<=(tvec2<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U> </div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  GLM_FUNC_DECL tvec2<T, P> & operator>>=(U scalar);</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U> </div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  GLM_FUNC_DECL tvec2<T, P> & operator>>=(tvec1<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U> </div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  GLM_FUNC_DECL tvec2<T, P> & operator>>=(tvec2<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  };</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <span class="comment">// -- Unary operators --</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  GLM_FUNC_DECL tvec2<T, P> operator+(tvec2<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  GLM_FUNC_DECL tvec2<T, P> operator-(tvec2<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> </div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <span class="comment">// -- Binary operators --</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> </div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  GLM_FUNC_DECL tvec2<T, P> operator+(tvec2<T, P> <span class="keyword">const</span> & v, T scalar);</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> </div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  GLM_FUNC_DECL tvec2<T, P> operator+(tvec2<T, P> <span class="keyword">const</span> & v1, tvec1<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> </div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  GLM_FUNC_DECL tvec2<T, P> operator+(T scalar, tvec2<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  GLM_FUNC_DECL tvec2<T, P> operator+(tvec1<T, P> <span class="keyword">const</span> & v1, tvec2<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> </div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  GLM_FUNC_DECL tvec2<T, P> operator+(tvec2<T, P> <span class="keyword">const</span> & v1, tvec2<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> </div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  GLM_FUNC_DECL tvec2<T, P> operator-(tvec2<T, P> <span class="keyword">const</span> & v, T scalar);</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> </div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  GLM_FUNC_DECL tvec2<T, P> operator-(tvec2<T, P> <span class="keyword">const</span> & v1, tvec1<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> </div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  GLM_FUNC_DECL tvec2<T, P> operator-(T scalar, tvec2<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> </div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  GLM_FUNC_DECL tvec2<T, P> operator-(tvec1<T, P> <span class="keyword">const</span> & v1, tvec2<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> </div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  GLM_FUNC_DECL tvec2<T, P> operator-(tvec2<T, P> <span class="keyword">const</span> & v1, tvec2<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> </div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  GLM_FUNC_DECL tvec2<T, P> operator*(tvec2<T, P> <span class="keyword">const</span> & v, T scalar);</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> </div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  GLM_FUNC_DECL tvec2<T, P> operator*(tvec2<T, P> <span class="keyword">const</span> & v1, tvec1<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  GLM_FUNC_DECL tvec2<T, P> operator*(T scalar, tvec2<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> </div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  GLM_FUNC_DECL tvec2<T, P> operator*(tvec1<T, P> <span class="keyword">const</span> & v1, tvec2<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> </div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  GLM_FUNC_DECL tvec2<T, P> operator*(tvec2<T, P> <span class="keyword">const</span> & v1, tvec2<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> </div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  GLM_FUNC_DECL tvec2<T, P> operator/(tvec2<T, P> <span class="keyword">const</span> & v, T scalar);</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> </div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  GLM_FUNC_DECL tvec2<T, P> operator/(tvec2<T, P> <span class="keyword">const</span> & v1, tvec1<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> </div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  GLM_FUNC_DECL tvec2<T, P> operator/(T scalar, tvec2<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> </div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  GLM_FUNC_DECL tvec2<T, P> operator/(tvec1<T, P> <span class="keyword">const</span> & v1, tvec2<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> </div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  GLM_FUNC_DECL tvec2<T, P> operator/(tvec2<T, P> <span class="keyword">const</span> & v1, tvec2<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> </div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  GLM_FUNC_DECL tvec2<T, P> operator%(tvec2<T, P> <span class="keyword">const</span> & v, T scalar);</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> </div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  GLM_FUNC_DECL tvec2<T, P> operator%(tvec2<T, P> <span class="keyword">const</span> & v1, tvec1<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> </div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  GLM_FUNC_DECL tvec2<T, P> operator%(T scalar, tvec2<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> </div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  GLM_FUNC_DECL tvec2<T, P> operator%(tvec1<T, P> <span class="keyword">const</span> & v1, tvec2<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> </div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  GLM_FUNC_DECL tvec2<T, P> operator%(tvec2<T, P> <span class="keyword">const</span> & v1, tvec2<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> </div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  GLM_FUNC_DECL tvec2<T, P> operator&(tvec2<T, P> <span class="keyword">const</span> & v, T scalar);</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> </div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  GLM_FUNC_DECL tvec2<T, P> operator&(tvec2<T, P> <span class="keyword">const</span> & v1, tvec1<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> </div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  GLM_FUNC_DECL tvec2<T, P> operator&(T scalar, tvec2<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> </div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  GLM_FUNC_DECL tvec2<T, P> operator&(tvec1<T, P> <span class="keyword">const</span> & v1, tvec2<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> </div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  GLM_FUNC_DECL tvec2<T, P> operator&(tvec2<T, P> <span class="keyword">const</span> & v1, tvec2<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> </div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  GLM_FUNC_DECL tvec2<T, P> operator|(tvec2<T, P> <span class="keyword">const</span> & v, T scalar);</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> </div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  GLM_FUNC_DECL tvec2<T, P> operator|(tvec2<T, P> <span class="keyword">const</span> & v1, tvec1<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> </div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  GLM_FUNC_DECL tvec2<T, P> operator|(T scalar, tvec2<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> </div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  GLM_FUNC_DECL tvec2<T, P> operator|(tvec1<T, P> <span class="keyword">const</span> & v1, tvec2<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> </div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  GLM_FUNC_DECL tvec2<T, P> operator|(tvec2<T, P> <span class="keyword">const</span> & v1, tvec2<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> </div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  GLM_FUNC_DECL tvec2<T, P> operator^(tvec2<T, P> <span class="keyword">const</span> & v, T scalar);</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> </div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  GLM_FUNC_DECL tvec2<T, P> operator^(tvec2<T, P> <span class="keyword">const</span> & v1, tvec1<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> </div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  GLM_FUNC_DECL tvec2<T, P> operator^(T scalar, tvec2<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> </div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  GLM_FUNC_DECL tvec2<T, P> operator^(tvec1<T, P> <span class="keyword">const</span> & v1, tvec2<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> </div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  GLM_FUNC_DECL tvec2<T, P> operator^(tvec2<T, P> <span class="keyword">const</span> & v1, tvec2<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> </div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  GLM_FUNC_DECL tvec2<T, P> operator<<(tvec2<T, P> <span class="keyword">const</span> & v, T scalar);</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> </div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  GLM_FUNC_DECL tvec2<T, P> operator<<(tvec2<T, P> <span class="keyword">const</span> & v1, tvec1<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> </div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  GLM_FUNC_DECL tvec2<T, P> operator<<(T scalar, tvec2<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> </div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  GLM_FUNC_DECL tvec2<T, P> operator<<(tvec1<T, P> <span class="keyword">const</span> & v1, tvec2<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> </div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  GLM_FUNC_DECL tvec2<T, P> operator<<(tvec2<T, P> <span class="keyword">const</span> & v1, tvec2<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> </div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  GLM_FUNC_DECL tvec2<T, P> operator>>(tvec2<T, P> <span class="keyword">const</span> & v, T scalar);</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> </div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  GLM_FUNC_DECL tvec2<T, P> operator>>(tvec2<T, P> <span class="keyword">const</span> & v1, tvec1<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> </div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  GLM_FUNC_DECL tvec2<T, P> operator>>(T scalar, tvec2<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> </div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  GLM_FUNC_DECL tvec2<T, P> operator>>(tvec1<T, P> <span class="keyword">const</span> & v1, tvec2<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> </div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  GLM_FUNC_DECL tvec2<T, P> operator>>(tvec2<T, P> <span class="keyword">const</span> & v1, tvec2<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> </div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  GLM_FUNC_DECL tvec2<T, P> operator~(tvec2<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> </div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  <span class="comment">// -- Boolean operators --</span></div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> </div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> operator==(tvec2<T, P> <span class="keyword">const</span> & v1, tvec2<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> </div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> operator!=(tvec2<T, P> <span class="keyword">const</span> & v1, tvec2<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> </div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  <span class="keyword">template</span> <precision P></div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  GLM_FUNC_DECL tvec2<bool, P> operator&&(tvec2<bool, P> <span class="keyword">const</span> & v1, tvec2<bool, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> </div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  <span class="keyword">template</span> <precision P></div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  GLM_FUNC_DECL tvec2<bool, P> operator||(tvec2<bool, P> <span class="keyword">const</span> & v1, tvec2<bool, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> </div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> <span class="preprocessor">#ifndef GLM_EXTERNAL_TEMPLATE</span></div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> <span class="preprocessor">#include "type_vec2.inl"</span></div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> <span class="preprocessor">#endif//GLM_EXTERNAL_TEMPLATE</span></div>
+<div class="ttc" id="a00127_html"><div class="ttname"><a href="a00127.html">type_vec.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00005_html"><div class="ttname"><a href="a00005.html">_swizzle_func.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00148_html_ga18d45e3d4c7705e67ccfabd99e521604"><div class="ttname"><a href="a00148.html#ga18d45e3d4c7705e67ccfabd99e521604">glm::length</a></div><div class="ttdeci">GLM_FUNC_DECL T length(vecType< T, P > const &x)</div><div class="ttdoc">Returns the length of x, i.e., sqrt(x * x). </div></div>
+<div class="ttc" id="a00004_html"><div class="ttname"><a href="a00004.html">_swizzle.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00130.html b/src/third_party/glm/doc/api/a00130.html
new file mode 100644
index 0000000..c06878a
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00130.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: type_vec3.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">type_vec3.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00130_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+
+<p>Definition in file <a class="el" href="a00130_source.html">type_vec3.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00130_source.html b/src/third_party/glm/doc/api/a00130_source.html
new file mode 100644
index 0000000..bc6af51
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00130_source.html
@@ -0,0 +1,461 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: type_vec3.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">type_vec3.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00130.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include "<a class="code" href="a00127.html">type_vec.hpp</a>"</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#if GLM_SWIZZLE == GLM_SWIZZLE_ENABLED</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor"># if GLM_HAS_UNRESTRICTED_UNIONS</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor"># include "<a class="code" href="a00004.html">_swizzle.hpp</a>"</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor"># else</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor"># include "<a class="code" href="a00005.html">_swizzle_func.hpp</a>"</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#endif //GLM_SWIZZLE == GLM_SWIZZLE_ENABLED</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#include <cstddef></span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> {</div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P = defaultp></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <span class="keyword">struct </span>tvec3</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  {</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <span class="comment">// -- Implementation detail --</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keyword">typedef</span> T value_type;</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="keyword">typedef</span> tvec3<T, P> type;</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <span class="keyword">typedef</span> tvec3<bool, P> bool_type;</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="comment">// -- Data --</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor"># if GLM_HAS_ALIGNED_TYPE</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor"># if GLM_COMPILER & GLM_COMPILER_GCC</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor"># pragma GCC diagnostic push</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor"># pragma GCC diagnostic ignored "-pedantic"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor"># if GLM_COMPILER & GLM_COMPILER_CLANG</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor"># pragma clang diagnostic push</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor"># pragma clang diagnostic ignored "-Wgnu-anonymous-struct"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor"># pragma clang diagnostic ignored "-Wnested-anon-types"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keyword">union</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  {</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keyword">struct</span>{ T x, y, z; };</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keyword">struct</span>{ T r, g, b; };</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keyword">struct</span>{ T s, t, p; };</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="preprocessor"># if GLM_SWIZZLE == GLM_SWIZZLE_ENABLED</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  _GLM_SWIZZLE3_2_MEMBERS(T, P, glm::tvec2, x, y, z)</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  _GLM_SWIZZLE3_2_MEMBERS(T, P, <a class="code" href="a00141.html">glm</a>::tvec2, r, g, b)</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  _GLM_SWIZZLE3_2_MEMBERS(T, P, <a class="code" href="a00141.html">glm</a>::tvec2, s, t, p)</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  _GLM_SWIZZLE3_3_MEMBERS(T, P, <a class="code" href="a00141.html">glm</a>::tvec3, x, y, z)</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  _GLM_SWIZZLE3_3_MEMBERS(T, P, <a class="code" href="a00141.html">glm</a>::tvec3, r, g, b)</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  _GLM_SWIZZLE3_3_MEMBERS(T, P, <a class="code" href="a00141.html">glm</a>::tvec3, s, t, p)</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  _GLM_SWIZZLE3_4_MEMBERS(T, P, <a class="code" href="a00141.html">glm</a>::tvec4, x, y, z)</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  _GLM_SWIZZLE3_4_MEMBERS(T, P, <a class="code" href="a00141.html">glm</a>::tvec4, r, g, b)</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  _GLM_SWIZZLE3_4_MEMBERS(T, P, <a class="code" href="a00141.html">glm</a>::tvec4, s, t, p)</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="preprocessor"># endif//GLM_SWIZZLE</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  };</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  </div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="preprocessor"># if GLM_COMPILER & GLM_COMPILER_CLANG</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="preprocessor"># pragma clang diagnostic pop</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="preprocessor"># if GLM_COMPILER & GLM_COMPILER_GCC</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="preprocessor"># pragma GCC diagnostic pop</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="preprocessor"># else</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keyword">union </span>{ T x, r, s; };</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keyword">union </span>{ T y, g, t; };</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keyword">union </span>{ T z, b, p; };</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="preprocessor"># if GLM_SWIZZLE == GLM_SWIZZLE_ENABLED</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  GLM_SWIZZLE_GEN_VEC_FROM_VEC3(T, P, tvec3, tvec2, tvec3, tvec4)</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="preprocessor"># endif//GLM_SWIZZLE</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="preprocessor"># endif//GLM_LANG</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="comment">// -- Component accesses --</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keyword">typedef</span> length_t length_type;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  GLM_FUNC_DECL GLM_CONSTEXPR length_type <a class="code" href="a00148.html#ga18d45e3d4c7705e67ccfabd99e521604">length</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  GLM_FUNC_DECL T & operator[](length_type i);</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  GLM_FUNC_DECL T <span class="keyword">const</span> & operator[](length_type i) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="comment">// -- Implicit basic constructors --</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  GLM_FUNC_DECL GLM_CONSTEXPR tvec3() GLM_DEFAULT_CTOR;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  GLM_FUNC_DECL GLM_CONSTEXPR tvec3(tvec3<T, P> const & v) GLM_DEFAULT;</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  template <precision Q></div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  GLM_FUNC_DECL GLM_CONSTEXPR tvec3(tvec3<T, Q> const & v);</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="comment">// -- Explicit basic constructors --</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tvec3(ctor);</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  GLM_FUNC_DECL GLM_CONSTEXPR explicit tvec3(T scalar);</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  GLM_FUNC_DECL GLM_CONSTEXPR tvec3(T a, T b, T c);</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="comment">// -- Conversion scalar constructors --</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  template <typename A, typename B, typename C></div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  GLM_FUNC_DECL GLM_CONSTEXPR tvec3(A a, B b, C c);</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  template <typename A, typename B, typename C></div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  GLM_FUNC_DECL GLM_CONSTEXPR tvec3(tvec1<A, P> const & a, tvec1<B, P> const & b, tvec1<C, P> const & c);</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="comment">// -- Conversion vector constructors --</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  template <typename A, typename B, precision Q></div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  GLM_FUNC_DECL GLM_CONSTEXPR tvec3(tvec2<A, Q> const & a, B b);</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  template <typename A, typename B, precision Q></div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  GLM_FUNC_DECL GLM_CONSTEXPR tvec3(tvec2<A, Q> const & a, tvec1<B, Q> const & b);</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  template <typename A, typename B, precision Q></div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  GLM_FUNC_DECL GLM_CONSTEXPR tvec3(A a, tvec2<B, Q> const & b);</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  template <typename A, typename B, precision Q></div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  GLM_FUNC_DECL GLM_CONSTEXPR tvec3(tvec1<A, Q> const & a, tvec2<B, Q> const & b);</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  template <typename U, precision Q></div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT tvec3(tvec4<U, Q> const & v);</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  template <typename U, precision Q></div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT tvec3(tvec3<U, Q> const & v);</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="comment">// -- Swizzle constructors --</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="preprocessor"># if GLM_HAS_UNRESTRICTED_UNIONS && (GLM_SWIZZLE == GLM_SWIZZLE_ENABLED)</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="keyword">template</span> <<span class="keywordtype">int</span> E0, <span class="keywordtype">int</span> E1, <span class="keywordtype">int</span> E2></div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  GLM_FUNC_DECL tvec3(detail::_swizzle<3, T, P, glm::tvec3, E0, E1, E2, -1> <span class="keyword">const</span> & that)</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  {</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  *<span class="keyword">this</span> = that();</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  }</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keyword">template</span> <<span class="keywordtype">int</span> E0, <span class="keywordtype">int</span> E1></div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  GLM_FUNC_DECL tvec3(detail::_swizzle<2, T, P, glm::tvec2, E0, E1, -1, -2> <span class="keyword">const</span> & v, T <span class="keyword">const</span> & scalar)</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  {</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  *<span class="keyword">this</span> = tvec3<T, P>(v(), scalar);</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  }</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <span class="keyword">template</span> <<span class="keywordtype">int</span> E0, <span class="keywordtype">int</span> E1></div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  GLM_FUNC_DECL tvec3(T <span class="keyword">const</span> & scalar, detail::_swizzle<2, T, P, glm::tvec2, E0, E1, -1, -2> <span class="keyword">const</span> & v)</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  {</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  *<span class="keyword">this</span> = tvec3<T, P>(scalar, v());</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  }</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="preprocessor"># endif// GLM_HAS_UNRESTRICTED_UNIONS && (GLM_SWIZZLE == GLM_SWIZZLE_ENABLED)</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <span class="comment">// -- Unary arithmetic operators --</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  GLM_FUNC_DECL tvec3<T, P> & operator=(tvec3<T, P> <span class="keyword">const</span> & v) GLM_DEFAULT;</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  GLM_FUNC_DECL tvec3<T, P> & operator=(tvec3<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  GLM_FUNC_DECL tvec3<T, P> & operator+=(U scalar);</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  GLM_FUNC_DECL tvec3<T, P> & operator+=(tvec1<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  GLM_FUNC_DECL tvec3<T, P> & operator+=(tvec3<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  GLM_FUNC_DECL tvec3<T, P> & operator-=(U scalar);</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  GLM_FUNC_DECL tvec3<T, P> & operator-=(tvec1<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  GLM_FUNC_DECL tvec3<T, P> & operator-=(tvec3<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  GLM_FUNC_DECL tvec3<T, P> & operator*=(U scalar);</div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  GLM_FUNC_DECL tvec3<T, P> & operator*=(tvec1<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  GLM_FUNC_DECL tvec3<T, P> & operator*=(tvec3<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  GLM_FUNC_DECL tvec3<T, P> & operator/=(U scalar);</div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  GLM_FUNC_DECL tvec3<T, P> & operator/=(tvec1<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  GLM_FUNC_DECL tvec3<T, P> & operator/=(tvec3<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  <span class="comment">// -- Increment and decrement operators --</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  GLM_FUNC_DECL tvec3<T, P> & operator++();</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  GLM_FUNC_DECL tvec3<T, P> & operator--();</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  GLM_FUNC_DECL tvec3<T, P> operator++(<span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  GLM_FUNC_DECL tvec3<T, P> operator--(<span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <span class="comment">// -- Unary bit operators --</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  GLM_FUNC_DECL tvec3<T, P> & operator%=(U scalar);</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  GLM_FUNC_DECL tvec3<T, P> & operator%=(tvec1<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  GLM_FUNC_DECL tvec3<T, P> & operator%=(tvec3<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  GLM_FUNC_DECL tvec3<T, P> & operator&=(U scalar);</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  GLM_FUNC_DECL tvec3<T, P> & operator&=(tvec1<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  GLM_FUNC_DECL tvec3<T, P> & operator&=(tvec3<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  GLM_FUNC_DECL tvec3<T, P> & operator|=(U scalar);</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  GLM_FUNC_DECL tvec3<T, P> & operator|=(tvec1<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  GLM_FUNC_DECL tvec3<T, P> & operator|=(tvec3<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  GLM_FUNC_DECL tvec3<T, P> & operator^=(U scalar);</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  GLM_FUNC_DECL tvec3<T, P> & operator^=(tvec1<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  GLM_FUNC_DECL tvec3<T, P> & operator^=(tvec3<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  GLM_FUNC_DECL tvec3<T, P> & operator<<=(U scalar);</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  GLM_FUNC_DECL tvec3<T, P> & operator<<=(tvec1<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  GLM_FUNC_DECL tvec3<T, P> & operator<<=(tvec3<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  GLM_FUNC_DECL tvec3<T, P> & operator>>=(U scalar);</div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  GLM_FUNC_DECL tvec3<T, P> & operator>>=(tvec1<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  GLM_FUNC_DECL tvec3<T, P> & operator>>=(tvec3<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  };</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <span class="comment">// -- Unary operators --</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> </div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  GLM_FUNC_DECL tvec3<T, P> operator+(tvec3<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> </div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  GLM_FUNC_DECL tvec3<T, P> operator-(tvec3<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> </div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="comment">// -- Binary operators --</span></div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> </div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  GLM_FUNC_DECL tvec3<T, P> operator+(tvec3<T, P> <span class="keyword">const</span> & v, T scalar);</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> </div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  GLM_FUNC_DECL tvec3<T, P> operator+(tvec3<T, P> <span class="keyword">const</span> & v, tvec1<T, P> <span class="keyword">const</span> & scalar);</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> </div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  GLM_FUNC_DECL tvec3<T, P> operator+(T scalar, tvec3<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> </div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  GLM_FUNC_DECL tvec3<T, P> operator+(tvec1<T, P> <span class="keyword">const</span> & v1, tvec3<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> </div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  GLM_FUNC_DECL tvec3<T, P> operator+(tvec3<T, P> <span class="keyword">const</span> & v1, tvec3<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  GLM_FUNC_DECL tvec3<T, P> operator-(tvec3<T, P> <span class="keyword">const</span> & v, T scalar);</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> </div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  GLM_FUNC_DECL tvec3<T, P> operator-(tvec3<T, P> <span class="keyword">const</span> & v1, tvec1<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> </div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  GLM_FUNC_DECL tvec3<T, P> operator-(T scalar, tvec3<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> </div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  GLM_FUNC_DECL tvec3<T, P> operator-(tvec1<T, P> <span class="keyword">const</span> & v1, tvec3<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> </div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  GLM_FUNC_DECL tvec3<T, P> operator-(tvec3<T, P> <span class="keyword">const</span> & v1, tvec3<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> </div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  GLM_FUNC_DECL tvec3<T, P> operator*(tvec3<T, P> <span class="keyword">const</span> & v, T scalar);</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> </div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  GLM_FUNC_DECL tvec3<T, P> operator*(tvec3<T, P> <span class="keyword">const</span> & v1, tvec1<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> </div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  GLM_FUNC_DECL tvec3<T, P> operator*(T scalar, tvec3<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> </div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  GLM_FUNC_DECL tvec3<T, P> operator*(tvec1<T, P> <span class="keyword">const</span> & v1, tvec3<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> </div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  GLM_FUNC_DECL tvec3<T, P> operator*(tvec3<T, P> <span class="keyword">const</span> & v1, tvec3<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> </div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  GLM_FUNC_DECL tvec3<T, P> operator/(tvec3<T, P> <span class="keyword">const</span> & v, T scalar);</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> </div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  GLM_FUNC_DECL tvec3<T, P> operator/(tvec3<T, P> <span class="keyword">const</span> & v1, tvec1<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> </div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  GLM_FUNC_DECL tvec3<T, P> operator/(T scalar, tvec3<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> </div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  GLM_FUNC_DECL tvec3<T, P> operator/(tvec1<T, P> <span class="keyword">const</span> & v1, tvec3<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> </div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  GLM_FUNC_DECL tvec3<T, P> operator/(tvec3<T, P> <span class="keyword">const</span> & v1, tvec3<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> </div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  GLM_FUNC_DECL tvec3<T, P> operator%(tvec3<T, P> <span class="keyword">const</span> & v, T scalar);</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> </div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  GLM_FUNC_DECL tvec3<T, P> operator%(tvec3<T, P> <span class="keyword">const</span> & v1, tvec1<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> </div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  GLM_FUNC_DECL tvec3<T, P> operator%(T <span class="keyword">const</span> & scalar, tvec3<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> </div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  GLM_FUNC_DECL tvec3<T, P> operator%(tvec1<T, P> <span class="keyword">const</span> & v1, tvec3<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> </div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  GLM_FUNC_DECL tvec3<T, P> operator%(tvec3<T, P> <span class="keyword">const</span> & v1, tvec3<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> </div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  GLM_FUNC_DECL tvec3<T, P> operator&(tvec3<T, P> <span class="keyword">const</span> & v1, T scalar);</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> </div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  GLM_FUNC_DECL tvec3<T, P> operator&(tvec3<T, P> <span class="keyword">const</span> & v1, tvec1<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> </div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  GLM_FUNC_DECL tvec3<T, P> operator&(T scalar, tvec3<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> </div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  GLM_FUNC_DECL tvec3<T, P> operator&(tvec1<T, P> <span class="keyword">const</span> & v1, tvec3<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> </div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  GLM_FUNC_DECL tvec3<T, P> operator&(tvec3<T, P> <span class="keyword">const</span> & v1, tvec3<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> </div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  GLM_FUNC_DECL tvec3<T, P> operator|(tvec3<T, P> <span class="keyword">const</span> & v, T scalar);</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> </div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  GLM_FUNC_DECL tvec3<T, P> operator|(tvec3<T, P> <span class="keyword">const</span> & v1, tvec1<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> </div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  GLM_FUNC_DECL tvec3<T, P> operator|(T scalar, tvec3<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> </div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  GLM_FUNC_DECL tvec3<T, P> operator|(tvec1<T, P> <span class="keyword">const</span> & v1, tvec3<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> </div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  GLM_FUNC_DECL tvec3<T, P> operator|(tvec3<T, P> <span class="keyword">const</span> & v1, tvec3<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> </div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  GLM_FUNC_DECL tvec3<T, P> operator^(tvec3<T, P> <span class="keyword">const</span> & v, T scalar);</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> </div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  GLM_FUNC_DECL tvec3<T, P> operator^(tvec3<T, P> <span class="keyword">const</span> & v1, tvec1<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> </div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  GLM_FUNC_DECL tvec3<T, P> operator^(T scalar, tvec3<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> </div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  GLM_FUNC_DECL tvec3<T, P> operator^(tvec1<T, P> <span class="keyword">const</span> & v1, tvec3<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> </div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  GLM_FUNC_DECL tvec3<T, P> operator^(tvec3<T, P> <span class="keyword">const</span> & v1, tvec3<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> </div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  GLM_FUNC_DECL tvec3<T, P> operator<<(tvec3<T, P> <span class="keyword">const</span> & v, T scalar);</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> </div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  GLM_FUNC_DECL tvec3<T, P> operator<<(tvec3<T, P> <span class="keyword">const</span> & v1, tvec1<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> </div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  GLM_FUNC_DECL tvec3<T, P> operator<<(T scalar, tvec3<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> </div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  GLM_FUNC_DECL tvec3<T, P> operator<<(tvec1<T, P> <span class="keyword">const</span> & v1, tvec3<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> </div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  GLM_FUNC_DECL tvec3<T, P> operator<<(tvec3<T, P> <span class="keyword">const</span> & v1, tvec3<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> </div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  GLM_FUNC_DECL tvec3<T, P> operator>>(tvec3<T, P> <span class="keyword">const</span> & v, T scalar);</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> </div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  GLM_FUNC_DECL tvec3<T, P> operator>>(tvec3<T, P> <span class="keyword">const</span> & v1, tvec1<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> </div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  GLM_FUNC_DECL tvec3<T, P> operator>>(T scalar, tvec3<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> </div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  GLM_FUNC_DECL tvec3<T, P> operator>>(tvec1<T, P> <span class="keyword">const</span> & v1, tvec3<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> </div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  GLM_FUNC_DECL tvec3<T, P> operator>>(tvec3<T, P> <span class="keyword">const</span> & v1, tvec3<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> </div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> </div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  GLM_FUNC_DECL tvec3<T, P> operator~(tvec3<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> </div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  <span class="comment">// -- Boolean operators --</span></div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> </div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> operator==(tvec3<T, P> <span class="keyword">const</span> & v1, tvec3<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> </div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> operator!=(tvec3<T, P> <span class="keyword">const</span> & v1, tvec3<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> </div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  <span class="keyword">template</span> <precision P></div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  GLM_FUNC_DECL tvec3<bool, P> operator&&(tvec3<bool, P> <span class="keyword">const</span> & v1, tvec3<bool, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> </div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  <span class="keyword">template</span> <precision P></div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  GLM_FUNC_DECL tvec3<bool, P> operator||(tvec3<bool, P> <span class="keyword">const</span> & v1, tvec3<bool, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> </div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> <span class="preprocessor">#ifndef GLM_EXTERNAL_TEMPLATE</span></div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="preprocessor">#include "type_vec3.inl"</span></div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> <span class="preprocessor">#endif//GLM_EXTERNAL_TEMPLATE</span></div>
+<div class="ttc" id="a00127_html"><div class="ttname"><a href="a00127.html">type_vec.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00005_html"><div class="ttname"><a href="a00005.html">_swizzle_func.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00148_html_ga18d45e3d4c7705e67ccfabd99e521604"><div class="ttname"><a href="a00148.html#ga18d45e3d4c7705e67ccfabd99e521604">glm::length</a></div><div class="ttdeci">GLM_FUNC_DECL T length(vecType< T, P > const &x)</div><div class="ttdoc">Returns the length of x, i.e., sqrt(x * x). </div></div>
+<div class="ttc" id="a00004_html"><div class="ttname"><a href="a00004.html">_swizzle.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00131.html b/src/third_party/glm/doc/api/a00131.html
new file mode 100644
index 0000000..6399536
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00131.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: type_vec4.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">type_vec4.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00131_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+
+<p>Definition in file <a class="el" href="a00131_source.html">type_vec4.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00131_source.html b/src/third_party/glm/doc/api/a00131_source.html
new file mode 100644
index 0000000..a1ad9aa
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00131_source.html
@@ -0,0 +1,500 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: type_vec4.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">type_vec4.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00131.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include "<a class="code" href="a00127.html">type_vec.hpp</a>"</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#if GLM_SWIZZLE == GLM_SWIZZLE_ENABLED</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor"># if GLM_HAS_UNRESTRICTED_UNIONS</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor"># include "<a class="code" href="a00004.html">_swizzle.hpp</a>"</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor"># else</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor"># include "<a class="code" href="a00005.html">_swizzle_func.hpp</a>"</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#endif //GLM_SWIZZLE</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#include <cstddef></span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> {</div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P = defaultp></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <span class="keyword">struct </span>tvec4</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  {</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <span class="comment">// -- Implementation detail --</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keyword">typedef</span> T value_type;</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="keyword">typedef</span> tvec4<T, P> type;</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <span class="keyword">typedef</span> tvec4<bool, P> bool_type;</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="comment">// -- Data --</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor"># if GLM_HAS_ALIGNED_TYPE</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor"># if GLM_COMPILER & GLM_COMPILER_GCC</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor"># pragma GCC diagnostic push</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor"># pragma GCC diagnostic ignored "-pedantic"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor"># if GLM_COMPILER & GLM_COMPILER_CLANG</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor"># pragma clang diagnostic push</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor"># pragma clang diagnostic ignored "-Wgnu-anonymous-struct"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor"># pragma clang diagnostic ignored "-Wnested-anon-types"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keyword">union</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  {</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keyword">struct </span>{ T x, y, z, w;};</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keyword">struct </span>{ T r, g, b, a; };</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keyword">struct </span>{ T s, t, p, q; };</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keyword">typename</span> detail::storage<T, sizeof(T) * 4, detail::is_aligned<P>::value>::type data;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor"># if GLM_SWIZZLE == GLM_SWIZZLE_ENABLED</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  _GLM_SWIZZLE4_2_MEMBERS(T, P, glm::tvec2, x, y, z, w)</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  _GLM_SWIZZLE4_2_MEMBERS(T, P, <a class="code" href="a00141.html">glm</a>::tvec2, r, g, b, a)</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  _GLM_SWIZZLE4_2_MEMBERS(T, P, <a class="code" href="a00141.html">glm</a>::tvec2, s, t, p, q)</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  _GLM_SWIZZLE4_3_MEMBERS(T, P, <a class="code" href="a00141.html">glm</a>::tvec3, x, y, z, w)</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  _GLM_SWIZZLE4_3_MEMBERS(T, P, <a class="code" href="a00141.html">glm</a>::tvec3, r, g, b, a)</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  _GLM_SWIZZLE4_3_MEMBERS(T, P, <a class="code" href="a00141.html">glm</a>::tvec3, s, t, p, q)</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  _GLM_SWIZZLE4_4_MEMBERS(T, P, <a class="code" href="a00141.html">glm</a>::tvec4, x, y, z, w)</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  _GLM_SWIZZLE4_4_MEMBERS(T, P, <a class="code" href="a00141.html">glm</a>::tvec4, r, g, b, a)</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  _GLM_SWIZZLE4_4_MEMBERS(T, P, <a class="code" href="a00141.html">glm</a>::tvec4, s, t, p, q)</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="preprocessor"># endif//GLM_SWIZZLE</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  };</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="preprocessor"># if GLM_COMPILER & GLM_COMPILER_CLANG</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="preprocessor"># pragma clang diagnostic pop</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="preprocessor"># if GLM_COMPILER & GLM_COMPILER_GCC</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="preprocessor"># pragma GCC diagnostic pop</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="preprocessor"># else</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keyword">union </span>{ T x, r, s; };</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keyword">union </span>{ T y, g, t; };</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keyword">union </span>{ T z, b, p; };</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="keyword">union </span>{ T w, a, q; };</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="preprocessor"># if GLM_SWIZZLE == GLM_SWIZZLE_ENABLED</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  GLM_SWIZZLE_GEN_VEC_FROM_VEC4(T, P, tvec4, tvec2, tvec3, tvec4)</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="preprocessor"># endif//GLM_SWIZZLE</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="preprocessor"># endif</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="comment">// -- Component accesses --</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keyword">typedef</span> length_t length_type;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  GLM_FUNC_DECL GLM_CONSTEXPR length_type <a class="code" href="a00148.html#ga18d45e3d4c7705e67ccfabd99e521604">length</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  GLM_FUNC_DECL T & operator[](length_type i);</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  GLM_FUNC_DECL T <span class="keyword">const</span> & operator[](length_type i) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="comment">// -- Implicit basic constructors --</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  GLM_FUNC_DECL GLM_CONSTEXPR tvec4() GLM_DEFAULT_CTOR;</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  GLM_FUNC_DECL GLM_CONSTEXPR tvec4(tvec4<T, P> const& v) GLM_DEFAULT;</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  template <precision Q></div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  GLM_FUNC_DECL GLM_CONSTEXPR tvec4(tvec4<T, Q> const& v);</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <span class="comment">// -- Explicit basic constructors --</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tvec4(ctor);</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  GLM_FUNC_DECL GLM_CONSTEXPR_SIMD explicit tvec4(T scalar);</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  GLM_FUNC_DECL GLM_CONSTEXPR_SIMD tvec4(T a, T b, T c, T d);</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="comment">// -- Conversion scalar constructors --</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  template <typename A, typename B, typename C, typename D></div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  GLM_FUNC_DECL GLM_CONSTEXPR tvec4(A a, B b, C c, D d);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  template <typename A, typename B, typename C, typename D></div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  GLM_FUNC_DECL GLM_CONSTEXPR tvec4(tvec1<A, P> const& a, tvec1<B, P> const& b, tvec1<C, P> const& c, tvec1<D, P> const& d);</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="comment">// -- Conversion vector constructors --</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  template <typename A, typename B, typename C, precision Q></div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  GLM_FUNC_DECL GLM_CONSTEXPR tvec4(tvec2<A, Q> const & a, B b, C c);</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  template <typename A, typename B, typename C, precision Q></div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  GLM_FUNC_DECL GLM_CONSTEXPR tvec4(tvec2<A, Q> const & a, tvec1<B, Q> const & b, tvec1<C, Q> const & c);</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  template <typename A, typename B, typename C, precision Q></div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  GLM_FUNC_DECL GLM_CONSTEXPR tvec4(A a, tvec2<B, Q> const & b, C c);</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  template <typename A, typename B, typename C, precision Q></div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  GLM_FUNC_DECL GLM_CONSTEXPR tvec4(tvec1<A, Q> const & a, tvec2<B, Q> const & b, tvec1<C, Q> const & c);</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  template <typename A, typename B, typename C, precision Q></div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  GLM_FUNC_DECL GLM_CONSTEXPR tvec4(A a, B b, tvec2<C, Q> const & c);</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  template <typename A, typename B, typename C, precision Q></div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  GLM_FUNC_DECL GLM_CONSTEXPR tvec4(tvec1<A, Q> const & a, tvec1<B, Q> const & b, tvec2<C, Q> const & c);</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  template <typename A, typename B, precision Q></div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  GLM_FUNC_DECL GLM_CONSTEXPR tvec4(tvec3<A, Q> const & a, B b);</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  template <typename A, typename B, precision Q></div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  GLM_FUNC_DECL GLM_CONSTEXPR tvec4(tvec3<A, Q> const & a, tvec1<B, Q> const & b);</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  template <typename A, typename B, precision Q></div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  GLM_FUNC_DECL GLM_CONSTEXPR tvec4(A a, tvec3<B, Q> const & b);</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  template <typename A, typename B, precision Q></div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  GLM_FUNC_DECL GLM_CONSTEXPR tvec4(tvec1<A, Q> const & a, tvec3<B, Q> const & b);</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  template <typename A, typename B, precision Q></div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  GLM_FUNC_DECL GLM_CONSTEXPR tvec4(tvec2<A, Q> const & a, tvec2<B, Q> const & b);</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  template <typename U, precision Q></div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT tvec4(tvec4<U, Q> const& v);</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <span class="comment">// -- Swizzle constructors --</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="preprocessor"># if GLM_HAS_UNRESTRICTED_UNIONS && (GLM_SWIZZLE == GLM_SWIZZLE_ENABLED)</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keyword">template</span> <<span class="keywordtype">int</span> E0, <span class="keywordtype">int</span> E1, <span class="keywordtype">int</span> E2, <span class="keywordtype">int</span> E3></div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  GLM_FUNC_DECL tvec4(detail::_swizzle<4, T, P, glm::tvec4, E0, E1, E2, E3> <span class="keyword">const</span> & that)</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  {</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  *<span class="keyword">this</span> = that();</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  }</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> </div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="keyword">template</span> <<span class="keywordtype">int</span> E0, <span class="keywordtype">int</span> E1, <span class="keywordtype">int</span> F0, <span class="keywordtype">int</span> F1></div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  GLM_FUNC_DECL tvec4(detail::_swizzle<2, T, P, glm::tvec2, E0, E1, -1, -2> <span class="keyword">const</span> & v, detail::_swizzle<2, T, P, glm::tvec2, F0, F1, -1, -2> <span class="keyword">const</span> & u)</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  {</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  *<span class="keyword">this</span> = tvec4<T, P>(v(), u());</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  }</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="keyword">template</span> <<span class="keywordtype">int</span> E0, <span class="keywordtype">int</span> E1></div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  GLM_FUNC_DECL tvec4(T <span class="keyword">const</span> & x, T <span class="keyword">const</span> & y, detail::_swizzle<2, T, P, glm::tvec2, E0, E1, -1, -2> <span class="keyword">const</span> & v)</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  {</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  *<span class="keyword">this</span> = tvec4<T, P>(x, y, v());</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  }</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> </div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <span class="keyword">template</span> <<span class="keywordtype">int</span> E0, <span class="keywordtype">int</span> E1></div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  GLM_FUNC_DECL tvec4(T <span class="keyword">const</span> & x, detail::_swizzle<2, T, P, glm::tvec2, E0, E1, -1, -2> <span class="keyword">const</span> & v, T <span class="keyword">const</span> & w)</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  {</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  *<span class="keyword">this</span> = tvec4<T, P>(x, v(), w);</div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  }</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  <span class="keyword">template</span> <<span class="keywordtype">int</span> E0, <span class="keywordtype">int</span> E1></div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  GLM_FUNC_DECL tvec4(detail::_swizzle<2, T, P, glm::tvec2, E0, E1, -1, -2> <span class="keyword">const</span> & v, T <span class="keyword">const</span> & z, T <span class="keyword">const</span> & w)</div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  {</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  *<span class="keyword">this</span> = tvec4<T, P>(v(), z, w);</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  }</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> </div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  <span class="keyword">template</span> <<span class="keywordtype">int</span> E0, <span class="keywordtype">int</span> E1, <span class="keywordtype">int</span> E2></div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  GLM_FUNC_DECL tvec4(detail::_swizzle<3, T, P, glm::tvec3, E0, E1, E2, -1> <span class="keyword">const</span> & v, T <span class="keyword">const</span> & w)</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  {</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  *<span class="keyword">this</span> = tvec4<T, P>(v(), w);</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  }</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <span class="keyword">template</span> <<span class="keywordtype">int</span> E0, <span class="keywordtype">int</span> E1, <span class="keywordtype">int</span> E2></div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  GLM_FUNC_DECL tvec4(T <span class="keyword">const</span> & x, detail::_swizzle<3, T, P, glm::tvec3, E0, E1, E2, -1> <span class="keyword">const</span> & v)</div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  {</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  *<span class="keyword">this</span> = tvec4<T, P>(x, v());</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  }</div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="preprocessor"># endif// GLM_HAS_UNRESTRICTED_UNIONS && (GLM_SWIZZLE == GLM_SWIZZLE_ENABLED)</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <span class="comment">// -- Unary arithmetic operators --</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  GLM_FUNC_DECL tvec4<T, P> & operator=(tvec4<T, P> <span class="keyword">const</span> & v) GLM_DEFAULT;</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  GLM_FUNC_DECL tvec4<T, P> & operator=(tvec4<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  GLM_FUNC_DECL tvec4<T, P> & operator+=(U scalar);</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  GLM_FUNC_DECL tvec4<T, P> & operator+=(tvec1<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  GLM_FUNC_DECL tvec4<T, P> & operator+=(tvec4<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  GLM_FUNC_DECL tvec4<T, P> & operator-=(U scalar);</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  GLM_FUNC_DECL tvec4<T, P> & operator-=(tvec1<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  GLM_FUNC_DECL tvec4<T, P> & operator-=(tvec4<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  GLM_FUNC_DECL tvec4<T, P> & operator*=(U scalar);</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  GLM_FUNC_DECL tvec4<T, P> & operator*=(tvec1<U, P> <span class="keyword">const</span>& v);</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  GLM_FUNC_DECL tvec4<T, P> & operator*=(tvec4<U, P> <span class="keyword">const</span>& v);</div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  GLM_FUNC_DECL tvec4<T, P> & operator/=(U scalar);</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  GLM_FUNC_DECL tvec4<T, P> & operator/=(tvec1<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  GLM_FUNC_DECL tvec4<T, P> & operator/=(tvec4<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  <span class="comment">// -- Increment and decrement operators --</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  GLM_FUNC_DECL tvec4<T, P> & operator++();</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  GLM_FUNC_DECL tvec4<T, P> & operator--();</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  GLM_FUNC_DECL tvec4<T, P> operator++(<span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  GLM_FUNC_DECL tvec4<T, P> operator--(<span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> </div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  <span class="comment">// -- Unary bit operators --</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> </div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  GLM_FUNC_DECL tvec4<T, P> & operator%=(U scalar);</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  GLM_FUNC_DECL tvec4<T, P> & operator%=(tvec1<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  GLM_FUNC_DECL tvec4<T, P> & operator%=(tvec4<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  GLM_FUNC_DECL tvec4<T, P> & operator&=(U scalar);</div>
+<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  GLM_FUNC_DECL tvec4<T, P> & operator&=(tvec1<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  GLM_FUNC_DECL tvec4<T, P> & operator&=(tvec4<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  GLM_FUNC_DECL tvec4<T, P> & operator|=(U scalar);</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  GLM_FUNC_DECL tvec4<T, P> & operator|=(tvec1<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  GLM_FUNC_DECL tvec4<T, P> & operator|=(tvec4<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  GLM_FUNC_DECL tvec4<T, P> & operator^=(U scalar);</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  GLM_FUNC_DECL tvec4<T, P> & operator^=(tvec1<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  GLM_FUNC_DECL tvec4<T, P> & operator^=(tvec4<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  GLM_FUNC_DECL tvec4<T, P> & operator<<=(U scalar);</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  GLM_FUNC_DECL tvec4<T, P> & operator<<=(tvec1<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  GLM_FUNC_DECL tvec4<T, P> & operator<<=(tvec4<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  GLM_FUNC_DECL tvec4<T, P> & operator>>=(U scalar);</div>
+<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  GLM_FUNC_DECL tvec4<T, P> & operator>>=(tvec1<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> U></div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  GLM_FUNC_DECL tvec4<T, P> & operator>>=(tvec4<U, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  };</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  <span class="comment">// -- Unary operators --</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> </div>
+<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  GLM_FUNC_DECL tvec4<T, P> operator+(tvec4<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> </div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  GLM_FUNC_DECL tvec4<T, P> operator-(tvec4<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> </div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  <span class="comment">// -- Binary operators --</span></div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> </div>
+<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  GLM_FUNC_DECL tvec4<T, P> operator+(tvec4<T, P> <span class="keyword">const</span> & v, T scalar);</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> </div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  GLM_FUNC_DECL tvec4<T, P> operator+(tvec4<T, P> <span class="keyword">const</span> & v1, tvec1<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> </div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  GLM_FUNC_DECL tvec4<T, P> operator+(T scalar, tvec4<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> </div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  GLM_FUNC_DECL tvec4<T, P> operator+(tvec1<T, P> <span class="keyword">const</span> & v1, tvec4<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> </div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  GLM_FUNC_DECL tvec4<T, P> operator+(tvec4<T, P> <span class="keyword">const</span> & v1, tvec4<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> </div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  GLM_FUNC_DECL tvec4<T, P> operator-(tvec4<T, P> <span class="keyword">const</span> & v, T scalar);</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> </div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  GLM_FUNC_DECL tvec4<T, P> operator-(tvec4<T, P> <span class="keyword">const</span> & v1, tvec1<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> </div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  GLM_FUNC_DECL tvec4<T, P> operator-(T scalar, tvec4<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> </div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  GLM_FUNC_DECL tvec4<T, P> operator-(tvec1<T, P> <span class="keyword">const</span> & v1, tvec4<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> </div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  GLM_FUNC_DECL tvec4<T, P> operator-(tvec4<T, P> <span class="keyword">const</span> & v1, tvec4<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> </div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  GLM_FUNC_DECL tvec4<T, P> operator*(tvec4<T, P> <span class="keyword">const</span> & v, T scalar);</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> </div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  GLM_FUNC_DECL tvec4<T, P> operator*(tvec4<T, P> <span class="keyword">const</span> & v1, tvec1<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> </div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  GLM_FUNC_DECL tvec4<T, P> operator*(T scalar, tvec4<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> </div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  GLM_FUNC_DECL tvec4<T, P> operator*(tvec1<T, P> <span class="keyword">const</span> & v1, tvec4<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> </div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  GLM_FUNC_DECL tvec4<T, P> operator*(tvec4<T, P> <span class="keyword">const</span> & v1, tvec4<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> </div>
+<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  GLM_FUNC_DECL tvec4<T, P> operator/(tvec4<T, P> <span class="keyword">const</span> & v, T scalar);</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> </div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  GLM_FUNC_DECL tvec4<T, P> operator/(tvec4<T, P> <span class="keyword">const</span> & v1, tvec1<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> </div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  GLM_FUNC_DECL tvec4<T, P> operator/(T scalar, tvec4<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> </div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  GLM_FUNC_DECL tvec4<T, P> operator/(tvec1<T, P> <span class="keyword">const</span> & v1, tvec4<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> </div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  GLM_FUNC_DECL tvec4<T, P> operator/(tvec4<T, P> <span class="keyword">const</span> & v1, tvec4<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> </div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  GLM_FUNC_DECL tvec4<T, P> operator%(tvec4<T, P> <span class="keyword">const</span> & v, T scalar);</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> </div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  GLM_FUNC_DECL tvec4<T, P> operator%(tvec4<T, P> <span class="keyword">const</span> & v, tvec1<T, P> <span class="keyword">const</span> & scalar);</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> </div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  GLM_FUNC_DECL tvec4<T, P> operator%(T scalar, tvec4<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> </div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  GLM_FUNC_DECL tvec4<T, P> operator%(tvec1<T, P> <span class="keyword">const</span> & scalar, tvec4<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> </div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  GLM_FUNC_DECL tvec4<T, P> operator%(tvec4<T, P> <span class="keyword">const</span> & v1, tvec4<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> </div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  GLM_FUNC_DECL tvec4<T, P> operator&(tvec4<T, P> <span class="keyword">const</span> & v, T scalar);</div>
+<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> </div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  GLM_FUNC_DECL tvec4<T, P> operator&(tvec4<T, P> <span class="keyword">const</span> & v, tvec1<T, P> <span class="keyword">const</span> & scalar);</div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> </div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  GLM_FUNC_DECL tvec4<T, P> operator&(T scalar, tvec4<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> </div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  GLM_FUNC_DECL tvec4<T, P> operator&(tvec1<T, P> <span class="keyword">const</span> & scalar, tvec4<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> </div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  GLM_FUNC_DECL tvec4<T, P> operator&(tvec4<T, P> <span class="keyword">const</span> & v1, tvec4<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> </div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  GLM_FUNC_DECL tvec4<T, P> operator|(tvec4<T, P> <span class="keyword">const</span> & v, T scalar);</div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> </div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  GLM_FUNC_DECL tvec4<T, P> operator|(tvec4<T, P> <span class="keyword">const</span> & v, tvec1<T, P> <span class="keyword">const</span> & scalar);</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> </div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  GLM_FUNC_DECL tvec4<T, P> operator|(T scalar, tvec4<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> </div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  GLM_FUNC_DECL tvec4<T, P> operator|(tvec1<T, P> <span class="keyword">const</span> & scalar, tvec4<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> </div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  GLM_FUNC_DECL tvec4<T, P> operator|(tvec4<T, P> <span class="keyword">const</span> & v1, tvec4<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> </div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  GLM_FUNC_DECL tvec4<T, P> operator^(tvec4<T, P> <span class="keyword">const</span> & v, T scalar);</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> </div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  GLM_FUNC_DECL tvec4<T, P> operator^(tvec4<T, P> <span class="keyword">const</span> & v, tvec1<T, P> <span class="keyword">const</span> & scalar);</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> </div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  GLM_FUNC_DECL tvec4<T, P> operator^(T scalar, tvec4<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> </div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  GLM_FUNC_DECL tvec4<T, P> operator^(tvec1<T, P> <span class="keyword">const</span> & scalar, tvec4<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> </div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  GLM_FUNC_DECL tvec4<T, P> operator^(tvec4<T, P> <span class="keyword">const</span> & v1, tvec4<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> </div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  GLM_FUNC_DECL tvec4<T, P> operator<<(tvec4<T, P> <span class="keyword">const</span> & v, T scalar);</div>
+<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> </div>
+<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  GLM_FUNC_DECL tvec4<T, P> operator<<(tvec4<T, P> <span class="keyword">const</span> & v, tvec1<T, P> <span class="keyword">const</span> & scalar);</div>
+<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> </div>
+<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  GLM_FUNC_DECL tvec4<T, P> operator<<(T scalar, tvec4<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> </div>
+<div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  GLM_FUNC_DECL tvec4<T, P> operator<<(tvec1<T, P> <span class="keyword">const</span> & scalar, tvec4<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> </div>
+<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  GLM_FUNC_DECL tvec4<T, P> operator<<(tvec4<T, P> <span class="keyword">const</span> & v1, tvec4<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> </div>
+<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  GLM_FUNC_DECL tvec4<T, P> operator>>(tvec4<T, P> <span class="keyword">const</span> & v, T scalar);</div>
+<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> </div>
+<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  GLM_FUNC_DECL tvec4<T, P> operator>>(tvec4<T, P> <span class="keyword">const</span> & v, tvec1<T, P> <span class="keyword">const</span> & scalar);</div>
+<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> </div>
+<div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  GLM_FUNC_DECL tvec4<T, P> operator>>(T scalar, tvec4<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> </div>
+<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  GLM_FUNC_DECL tvec4<T, P> operator>>(tvec1<T, P> <span class="keyword">const</span> & scalar, tvec4<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> </div>
+<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  GLM_FUNC_DECL tvec4<T, P> operator>>(tvec4<T, P> <span class="keyword">const</span> & v1, tvec4<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> </div>
+<div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P> </div>
+<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  GLM_FUNC_DECL tvec4<T, P> operator~(tvec4<T, P> <span class="keyword">const</span> & v);</div>
+<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> </div>
+<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  <span class="comment">// -- Boolean operators --</span></div>
+<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> </div>
+<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> operator==(tvec4<T, P> <span class="keyword">const</span> & v1, tvec4<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> </div>
+<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> operator!=(tvec4<T, P> <span class="keyword">const</span> & v1, tvec4<T, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> </div>
+<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  <span class="keyword">template</span> <precision P></div>
+<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  GLM_FUNC_DECL tvec4<bool, P> operator&&(tvec4<bool, P> <span class="keyword">const</span> & v1, tvec4<bool, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> </div>
+<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  <span class="keyword">template</span> <precision P></div>
+<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  GLM_FUNC_DECL tvec4<bool, P> operator||(tvec4<bool, P> <span class="keyword">const</span> & v1, tvec4<bool, P> <span class="keyword">const</span> & v2);</div>
+<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> }<span class="comment">//namespace glm</span></div>
+<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> </div>
+<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> <span class="preprocessor">#ifndef GLM_EXTERNAL_TEMPLATE</span></div>
+<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> <span class="preprocessor">#include "type_vec4.inl"</span></div>
+<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> <span class="preprocessor">#endif//GLM_EXTERNAL_TEMPLATE</span></div>
+<div class="ttc" id="a00127_html"><div class="ttname"><a href="a00127.html">type_vec.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00005_html"><div class="ttname"><a href="a00005.html">_swizzle_func.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+<div class="ttc" id="a00148_html_ga18d45e3d4c7705e67ccfabd99e521604"><div class="ttname"><a href="a00148.html#ga18d45e3d4c7705e67ccfabd99e521604">glm::length</a></div><div class="ttdeci">GLM_FUNC_DECL T length(vecType< T, P > const &x)</div><div class="ttdoc">Returns the length of x, i.e., sqrt(x * x). </div></div>
+<div class="ttc" id="a00004_html"><div class="ttname"><a href="a00004.html">_swizzle.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00132.html b/src/third_party/glm/doc/api/a00132.html
new file mode 100644
index 0000000..0b31c51
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00132.html
@@ -0,0 +1,91 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: ulp.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_9440d7c11b99dcd7e5d369c7cf9802fe.html">gtc</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">ulp.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00132_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga2e09bd6c8b0a9c91f6f5683d68245634"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga2e09bd6c8b0a9c91f6f5683d68245634"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL uint </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00179.html#ga2e09bd6c8b0a9c91f6f5683d68245634">float_distance</a> (T const &x, T const &y)</td></tr>
+<tr class="separator:ga2e09bd6c8b0a9c91f6f5683d68245634"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga85355f2549d75789eb66e5d565d8ad26"><td class="memTemplParams" colspan="2">template<typename T , template< typename > class vecType> </td></tr>
+<tr class="memitem:ga85355f2549d75789eb66e5d565d8ad26"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< uint > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00179.html#ga85355f2549d75789eb66e5d565d8ad26">float_distance</a> (vecType< T > const &x, vecType< T > const &y)</td></tr>
+<tr class="separator:ga85355f2549d75789eb66e5d565d8ad26"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae516ae554faa6117660828240e8bdaf0"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gae516ae554faa6117660828240e8bdaf0"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00179.html#gae516ae554faa6117660828240e8bdaf0">next_float</a> (genType const &x)</td></tr>
+<tr class="separator:gae516ae554faa6117660828240e8bdaf0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad107ec3d9697ef82032a33338a73ebdd"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gad107ec3d9697ef82032a33338a73ebdd"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00179.html#gad107ec3d9697ef82032a33338a73ebdd">next_float</a> (genType const &x, uint const &Distance)</td></tr>
+<tr class="separator:gad107ec3d9697ef82032a33338a73ebdd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2fcbb7bfbfc595712bfddc51b0715b07"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga2fcbb7bfbfc595712bfddc51b0715b07"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00179.html#ga2fcbb7bfbfc595712bfddc51b0715b07">prev_float</a> (genType const &x)</td></tr>
+<tr class="separator:ga2fcbb7bfbfc595712bfddc51b0715b07"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa399d5b6472a70e8952f9b26ecaacdec"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gaa399d5b6472a70e8952f9b26ecaacdec"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00179.html#gaa399d5b6472a70e8952f9b26ecaacdec">prev_float</a> (genType const &x, uint const &Distance)</td></tr>
+<tr class="separator:gaa399d5b6472a70e8952f9b26ecaacdec"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00179.html">GLM_GTC_ulp</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00132_source.html">ulp.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00132_source.html b/src/third_party/glm/doc/api/a00132_source.html
new file mode 100644
index 0000000..a8bd8ae
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00132_source.html
@@ -0,0 +1,101 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: ulp.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_9440d7c11b99dcd7e5d369c7cf9802fe.html">gtc</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">ulp.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00132.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// Dependencies</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "../detail/setup.hpp"</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "../detail/precision.hpp"</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include "../detail/type_int.hpp"</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"># pragma message("GLM: GLM_GTC_ulp extension included")</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> {</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  GLM_FUNC_DECL genType <a class="code" href="a00179.html#gad107ec3d9697ef82032a33338a73ebdd">next_float</a>(genType <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  GLM_FUNC_DECL genType <a class="code" href="a00179.html#gaa399d5b6472a70e8952f9b26ecaacdec">prev_float</a>(genType <span class="keyword">const</span> & x);</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  GLM_FUNC_DECL genType <a class="code" href="a00179.html#gad107ec3d9697ef82032a33338a73ebdd">next_float</a>(genType <span class="keyword">const</span> & x, <a class="code" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a> <span class="keyword">const</span> & Distance);</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  GLM_FUNC_DECL genType <a class="code" href="a00179.html#gaa399d5b6472a70e8952f9b26ecaacdec">prev_float</a>(genType <span class="keyword">const</span> & x, <a class="code" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a> <span class="keyword">const</span> & Distance);</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  GLM_FUNC_DECL <a class="code" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a> <a class="code" href="a00179.html#ga85355f2549d75789eb66e5d565d8ad26">float_distance</a>(T <span class="keyword">const</span> & x, T <span class="keyword">const</span> & y);</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">template</span><<span class="keyword">typename</span>> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  GLM_FUNC_DECL vecType<uint> <a class="code" href="a00179.html#ga85355f2549d75789eb66e5d565d8ad26">float_distance</a>(vecType<T> <span class="keyword">const</span> & x, vecType<T> <span class="keyword">const</span> & y);</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  </div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> }<span class="comment">// namespace glm</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="preprocessor">#include "ulp.inl"</span></div>
+<div class="ttc" id="a00158_html_ga91ad9478d81a7aaf2593e8d9c3d06a14"><div class="ttname"><a href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">glm::uint</a></div><div class="ttdeci">unsigned int uint</div><div class="ttdoc">Unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00113_source.html#l00288">type_int.hpp:288</a></div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00179_html_gaa399d5b6472a70e8952f9b26ecaacdec"><div class="ttname"><a href="a00179.html#gaa399d5b6472a70e8952f9b26ecaacdec">glm::prev_float</a></div><div class="ttdeci">GLM_FUNC_DECL genType prev_float(genType const &x, uint const &Distance)</div><div class="ttdoc">Return the value(s) ULP distance before the input value(s). </div></div>
+<div class="ttc" id="a00179_html_gad107ec3d9697ef82032a33338a73ebdd"><div class="ttname"><a href="a00179.html#gad107ec3d9697ef82032a33338a73ebdd">glm::next_float</a></div><div class="ttdeci">GLM_FUNC_DECL genType next_float(genType const &x, uint const &Distance)</div><div class="ttdoc">Return the value(s) ULP distance after the input value(s). </div></div>
+<div class="ttc" id="a00179_html_ga85355f2549d75789eb66e5d565d8ad26"><div class="ttname"><a href="a00179.html#ga85355f2549d75789eb66e5d565d8ad26">glm::float_distance</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< uint > float_distance(vecType< T > const &x, vecType< T > const &y)</div><div class="ttdoc">Return the distance in the number of ULP between 2 vectors. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00133.html b/src/third_party/glm/doc/api/a00133.html
new file mode 100644
index 0000000..dc90365
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00133.html
@@ -0,0 +1,107 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: vec1.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_9440d7c11b99dcd7e5d369c7cf9802fe.html">gtc</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#typedef-members">Typedefs</a> </div>
+ <div class="headertitle">
+<div class="title">vec1.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00133_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:a97f808440fd5411e2c46a55db01329f0"><td class="memItemLeft" align="right" valign="top">typedef highp_bvec1 </td><td class="memItemRight" valign="bottom"><b>bvec1</b></td></tr>
+<tr class="separator:a97f808440fd5411e2c46a55db01329f0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:af5895ca3a2b8ff8239bdcd5d153fa5ab"><td class="memItemLeft" align="right" valign="top">typedef highp_dvec1 </td><td class="memItemRight" valign="bottom"><b>dvec1</b></td></tr>
+<tr class="separator:af5895ca3a2b8ff8239bdcd5d153fa5ab"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:abb1dfdb295030ec2965eed463009d9aa"><td class="memItemLeft" align="right" valign="top">typedef highp_bvec1_t </td><td class="memItemRight" valign="bottom"><b>highp_bvec1</b></td></tr>
+<tr class="separator:abb1dfdb295030ec2965eed463009d9aa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae0b25a2a5d5abf7001aecefaf0ad8d0e"><td class="memItemLeft" align="right" valign="top">typedef highp_dvec1_t </td><td class="memItemRight" valign="bottom"><b>highp_dvec1</b></td></tr>
+<tr class="separator:ae0b25a2a5d5abf7001aecefaf0ad8d0e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aad38f7770219bb7a4b84a7d5c68d7f7d"><td class="memItemLeft" align="right" valign="top">typedef highp_ivec1_t </td><td class="memItemRight" valign="bottom"><b>highp_ivec1</b></td></tr>
+<tr class="separator:aad38f7770219bb7a4b84a7d5c68d7f7d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae38198c95c92d34875ca31f4b7c14d27"><td class="memItemLeft" align="right" valign="top">typedef highp_uvec1_t </td><td class="memItemRight" valign="bottom"><b>highp_uvec1</b></td></tr>
+<tr class="separator:ae38198c95c92d34875ca31f4b7c14d27"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac424dc0bcb8f78bb57f5f9350a36d9b5"><td class="memItemLeft" align="right" valign="top">typedef highp_ivec1 </td><td class="memItemRight" valign="bottom"><b>ivec1</b></td></tr>
+<tr class="separator:ac424dc0bcb8f78bb57f5f9350a36d9b5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ac42347907bf39ce2adc41f764c7e6c99"><td class="memItemLeft" align="right" valign="top">typedef lowp_bvec1_t </td><td class="memItemRight" valign="bottom"><b>lowp_bvec1</b></td></tr>
+<tr class="separator:ac42347907bf39ce2adc41f764c7e6c99"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a9a00665cc5ffd8bb7dea1262a421d07b"><td class="memItemLeft" align="right" valign="top">typedef lowp_dvec1_t </td><td class="memItemRight" valign="bottom"><b>lowp_dvec1</b></td></tr>
+<tr class="separator:a9a00665cc5ffd8bb7dea1262a421d07b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a62179513d4c3d38f5f7d73756220e568"><td class="memItemLeft" align="right" valign="top">typedef lowp_ivec1_t </td><td class="memItemRight" valign="bottom"><b>lowp_ivec1</b></td></tr>
+<tr class="separator:a62179513d4c3d38f5f7d73756220e568"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ab73c0a6f4fe24ce30e808b6c4f511935"><td class="memItemLeft" align="right" valign="top">typedef lowp_uvec1_t </td><td class="memItemRight" valign="bottom"><b>lowp_uvec1</b></td></tr>
+<tr class="separator:ab73c0a6f4fe24ce30e808b6c4f511935"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:aac363ee47ee16b0361db847c5a97e821"><td class="memItemLeft" align="right" valign="top">typedef mediump_bvec1_t </td><td class="memItemRight" valign="bottom"><b>mediump_bvec1</b></td></tr>
+<tr class="separator:aac363ee47ee16b0361db847c5a97e821"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a08d652d636a98a60782ac109f0273931"><td class="memItemLeft" align="right" valign="top">typedef mediump_dvec1_t </td><td class="memItemRight" valign="bottom"><b>mediump_dvec1</b></td></tr>
+<tr class="separator:a08d652d636a98a60782ac109f0273931"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ae2b635f944fd11622a4f23f783f0c01e"><td class="memItemLeft" align="right" valign="top">typedef mediump_ivec1_t </td><td class="memItemRight" valign="bottom"><b>mediump_ivec1</b></td></tr>
+<tr class="separator:ae2b635f944fd11622a4f23f783f0c01e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a265324081f85d36db159677d8ca35fd1"><td class="memItemLeft" align="right" valign="top">typedef mediump_uvec1_t </td><td class="memItemRight" valign="bottom"><b>mediump_uvec1</b></td></tr>
+<tr class="separator:a265324081f85d36db159677d8ca35fd1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a63e1e4312a97da0007db93d7f18d9687"><td class="memItemLeft" align="right" valign="top">typedef highp_uvec1 </td><td class="memItemRight" valign="bottom"><b>uvec1</b></td></tr>
+<tr class="separator:a63e1e4312a97da0007db93d7f18d9687"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a4df551da8fd418cf98951a3948390485"><td class="memItemLeft" align="right" valign="top">typedef highp_vec1 </td><td class="memItemRight" valign="bottom"><b>vec1</b></td></tr>
+<tr class="separator:a4df551da8fd418cf98951a3948390485"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00180.html">GLM_GTC_vec1</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00133_source.html">vec1.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00133_source.html b/src/third_party/glm/doc/api/a00133_source.html
new file mode 100644
index 0000000..7c20417
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00133_source.html
@@ -0,0 +1,159 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: vec1.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_9440d7c11b99dcd7e5d369c7cf9802fe.html">gtc</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">vec1.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00133.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> </div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#include "../glm.hpp"</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include "../detail/type_vec1.hpp"</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor"># pragma message("GLM: GLM_GTC_vec1 extension included")</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> {</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keyword">typedef</span> highp_vec1_t highp_vec1;</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keyword">typedef</span> mediump_vec1_t mediump_vec1;</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keyword">typedef</span> lowp_vec1_t lowp_vec1;</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keyword">typedef</span> highp_dvec1_t highp_dvec1;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keyword">typedef</span> mediump_dvec1_t mediump_dvec1;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keyword">typedef</span> lowp_dvec1_t lowp_dvec1;</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keyword">typedef</span> highp_ivec1_t highp_ivec1;</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keyword">typedef</span> mediump_ivec1_t mediump_ivec1;</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keyword">typedef</span> lowp_ivec1_t lowp_ivec1;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keyword">typedef</span> highp_uvec1_t highp_uvec1;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keyword">typedef</span> mediump_uvec1_t mediump_uvec1;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keyword">typedef</span> lowp_uvec1_t lowp_uvec1;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="keyword">typedef</span> highp_bvec1_t highp_bvec1;</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keyword">typedef</span> mediump_bvec1_t mediump_bvec1;</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keyword">typedef</span> lowp_bvec1_t lowp_bvec1;</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="comment">// vec1 definition</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="preprocessor">#if(defined(GLM_PRECISION_HIGHP_BOOL))</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keyword">typedef</span> highp_bvec1 bvec1;</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="preprocessor">#elif(defined(GLM_PRECISION_MEDIUMP_BOOL))</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="keyword">typedef</span> mediump_bvec1 bvec1;</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="preprocessor">#elif(defined(GLM_PRECISION_LOWP_BOOL))</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keyword">typedef</span> lowp_bvec1 bvec1;</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="keyword">typedef</span> highp_bvec1 bvec1;</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="preprocessor">#endif//GLM_PRECISION</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="preprocessor">#if(defined(GLM_PRECISION_HIGHP_FLOAT))</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keyword">typedef</span> highp_vec1 vec1;</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="preprocessor">#elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="keyword">typedef</span> mediump_vec1 vec1;</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="preprocessor">#elif(defined(GLM_PRECISION_LOWP_FLOAT))</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keyword">typedef</span> lowp_vec1 vec1;</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keyword">typedef</span> highp_vec1 vec1;</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="preprocessor">#endif//GLM_PRECISION</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="preprocessor">#if(defined(GLM_PRECISION_HIGHP_DOUBLE))</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keyword">typedef</span> highp_dvec1 dvec1;</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="preprocessor">#elif(defined(GLM_PRECISION_MEDIUMP_DOUBLE))</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="keyword">typedef</span> mediump_dvec1 dvec1;</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="preprocessor">#elif(defined(GLM_PRECISION_LOWP_DOUBLE))</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="keyword">typedef</span> lowp_dvec1 dvec1;</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keyword">typedef</span> highp_dvec1 dvec1;</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="preprocessor">#endif//GLM_PRECISION</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="preprocessor">#if(defined(GLM_PRECISION_HIGHP_INT))</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="keyword">typedef</span> highp_ivec1 ivec1;</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="preprocessor">#elif(defined(GLM_PRECISION_MEDIUMP_INT))</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <span class="keyword">typedef</span> mediump_ivec1 ivec1;</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="preprocessor">#elif(defined(GLM_PRECISION_LOWP_INT))</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="keyword">typedef</span> lowp_ivec1 ivec1;</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="keyword">typedef</span> highp_ivec1 ivec1;</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="preprocessor">#endif//GLM_PRECISION</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="preprocessor">#if(defined(GLM_PRECISION_HIGHP_UINT))</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="keyword">typedef</span> highp_uvec1 uvec1;</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="preprocessor">#elif(defined(GLM_PRECISION_MEDIUMP_UINT))</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <span class="keyword">typedef</span> mediump_uvec1 uvec1;</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="preprocessor">#elif(defined(GLM_PRECISION_LOWP_UINT))</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keyword">typedef</span> lowp_uvec1 uvec1;</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <span class="keyword">typedef</span> highp_uvec1 uvec1;</div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="preprocessor">#endif//GLM_PRECISION</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> }<span class="comment">// namespace glm</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="preprocessor">#include "vec1.inl"</span></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00134.html b/src/third_party/glm/doc/api/a00134.html
new file mode 100644
index 0000000..78d66ba
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00134.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: vec2.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">vec2.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00134_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+
+<p>Definition in file <a class="el" href="a00134_source.html">vec2.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00134_source.html b/src/third_party/glm/doc/api/a00134_source.html
new file mode 100644
index 0000000..9018d42
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00134_source.html
@@ -0,0 +1,65 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: vec2.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">vec2.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00134.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include "<a class="code" href="a00129.html">detail/type_vec2.hpp</a>"</span></div>
+<div class="ttc" id="a00129_html"><div class="ttname"><a href="a00129.html">type_vec2.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00135.html b/src/third_party/glm/doc/api/a00135.html
new file mode 100644
index 0000000..ee0ef42
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00135.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: vec3.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">vec3.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00135_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+
+<p>Definition in file <a class="el" href="a00135_source.html">vec3.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00135_source.html b/src/third_party/glm/doc/api/a00135_source.html
new file mode 100644
index 0000000..f7a3b5d
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00135_source.html
@@ -0,0 +1,65 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: vec3.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">vec3.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00135.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include "<a class="code" href="a00130.html">detail/type_vec3.hpp</a>"</span></div>
+<div class="ttc" id="a00130_html"><div class="ttname"><a href="a00130.html">type_vec3.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00136.html b/src/third_party/glm/doc/api/a00136.html
new file mode 100644
index 0000000..abae383
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00136.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: vec4.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">vec4.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00136_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+
+<p>Definition in file <a class="el" href="a00136_source.html">vec4.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00136_source.html b/src/third_party/glm/doc/api/a00136_source.html
new file mode 100644
index 0000000..6cd883f
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00136_source.html
@@ -0,0 +1,65 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: vec4.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">vec4.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00136.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include "<a class="code" href="a00131.html">detail/type_vec4.hpp</a>"</span></div>
+<div class="ttc" id="a00131_html"><div class="ttname"><a href="a00131.html">type_vec4.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00137.html b/src/third_party/glm/doc/api/a00137.html
new file mode 100644
index 0000000..e59e541
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00137.html
@@ -0,0 +1,86 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: vector_angle.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">vector_angle.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00137_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gab8691008a2536b681b711211816c14f7"><td class="memTemplParams" colspan="2">template<typename vecType > </td></tr>
+<tr class="memitem:gab8691008a2536b681b711211816c14f7"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType::value_type </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00236.html#gab8691008a2536b681b711211816c14f7">angle</a> (vecType const &x, vecType const &y)</td></tr>
+<tr class="separator:gab8691008a2536b681b711211816c14f7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga82a19d474be13c92c7b10caab42a5a72"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga82a19d474be13c92c7b10caab42a5a72"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00236.html#ga82a19d474be13c92c7b10caab42a5a72">orientedAngle</a> (tvec2< T, P > const &x, tvec2< T, P > const &y)</td></tr>
+<tr class="separator:ga82a19d474be13c92c7b10caab42a5a72"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7254dba112eff55f55f9544f41cb9ece"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga7254dba112eff55f55f9544f41cb9ece"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00236.html#ga7254dba112eff55f55f9544f41cb9ece">orientedAngle</a> (tvec3< T, P > const &x, tvec3< T, P > const &y, tvec3< T, P > const &ref)</td></tr>
+<tr class="separator:ga7254dba112eff55f55f9544f41cb9ece"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00236.html">GLM_GTX_vector_angle</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd>
+<dd>
+<a class="el" href="a00220.html" title="Extented quaternion types and functions. ">GLM_GTX_quaternion</a> (dependence) </dd>
+<dd>
+gtx_epsilon (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00137_source.html">vector_angle.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00137_source.html b/src/third_party/glm/doc/api/a00137_source.html
new file mode 100644
index 0000000..38af63a
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00137_source.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: vector_angle.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">vector_angle.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00137.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "../glm.hpp"</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include "../gtc/epsilon.hpp"</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "../gtx/quaternion.hpp"</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "../gtx/rotate_vector.hpp"</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_vector_angle extension included")</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> {</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> vecType></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  GLM_FUNC_DECL <span class="keyword">typename</span> vecType::value_type <a class="code" href="a00236.html#gab8691008a2536b681b711211816c14f7">angle</a>(</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  vecType <span class="keyword">const</span> & x, </div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  vecType <span class="keyword">const</span> & y);</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  GLM_FUNC_DECL T <a class="code" href="a00236.html#ga7254dba112eff55f55f9544f41cb9ece">orientedAngle</a>(</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  tvec2<T, P> <span class="keyword">const</span> & x,</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  tvec2<T, P> <span class="keyword">const</span> & y);</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  GLM_FUNC_DECL T <a class="code" href="a00236.html#ga7254dba112eff55f55f9544f41cb9ece">orientedAngle</a>(</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  tvec3<T, P> <span class="keyword">const</span> & x,</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  tvec3<T, P> <span class="keyword">const</span> & y,</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  tvec3<T, P> <span class="keyword">const</span> & ref);</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> }<span class="comment">// namespace glm</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="preprocessor">#include "vector_angle.inl"</span></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00236_html_gab8691008a2536b681b711211816c14f7"><div class="ttname"><a href="a00236.html#gab8691008a2536b681b711211816c14f7">glm::angle</a></div><div class="ttdeci">GLM_FUNC_DECL vecType::value_type angle(vecType const &x, vecType const &y)</div><div class="ttdoc">Returns the absolute angle between two vectors. </div></div>
+<div class="ttc" id="a00236_html_ga7254dba112eff55f55f9544f41cb9ece"><div class="ttname"><a href="a00236.html#ga7254dba112eff55f55f9544f41cb9ece">glm::orientedAngle</a></div><div class="ttdeci">GLM_FUNC_DECL T orientedAngle(tvec3< T, P > const &x, tvec3< T, P > const &y, tvec3< T, P > const &ref)</div><div class="ttdoc">Returns the oriented angle between two 3d vectors based from a reference axis. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00138.html b/src/third_party/glm/doc/api/a00138.html
new file mode 100644
index 0000000..00c85dd
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00138.html
@@ -0,0 +1,91 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: vector_query.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">vector_query.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00138_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga465b844190d1740051e45d780832ea4c"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga465b844190d1740051e45d780832ea4c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00237.html#ga465b844190d1740051e45d780832ea4c">areCollinear</a> (vecType< T, P > const &v0, vecType< T, P > const &v1, T const &epsilon)</td></tr>
+<tr class="separator:ga465b844190d1740051e45d780832ea4c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaee10acefed397c11e01f2862e837754c"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gaee10acefed397c11e01f2862e837754c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00237.html#gaee10acefed397c11e01f2862e837754c">areOrthogonal</a> (vecType< T, P > const &v0, vecType< T, P > const &v1, T const &epsilon)</td></tr>
+<tr class="separator:gaee10acefed397c11e01f2862e837754c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga89c82bc60e5b84e4489b74c15a134caf"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga89c82bc60e5b84e4489b74c15a134caf"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00237.html#ga89c82bc60e5b84e4489b74c15a134caf">areOrthonormal</a> (vecType< T, P > const &v0, vecType< T, P > const &v1, T const &epsilon)</td></tr>
+<tr class="separator:ga89c82bc60e5b84e4489b74c15a134caf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga93ecd4137480483ce1af0de8bbbf6546"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga93ecd4137480483ce1af0de8bbbf6546"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00237.html#ga93ecd4137480483ce1af0de8bbbf6546">isCompNull</a> (vecType< T, P > const &v, T const &epsilon)</td></tr>
+<tr class="separator:ga93ecd4137480483ce1af0de8bbbf6546"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6fa5fa2af67d14c205d24c49aad03270"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga6fa5fa2af67d14c205d24c49aad03270"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00237.html#ga6fa5fa2af67d14c205d24c49aad03270">isNormalized</a> (vecType< T, P > const &v, T const &epsilon)</td></tr>
+<tr class="separator:ga6fa5fa2af67d14c205d24c49aad03270"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga81a64edc1a2b470b82896592e89c523b"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga81a64edc1a2b470b82896592e89c523b"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00237.html#ga81a64edc1a2b470b82896592e89c523b">isNull</a> (vecType< T, P > const &v, T const &epsilon)</td></tr>
+<tr class="separator:ga81a64edc1a2b470b82896592e89c523b"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00237.html">GLM_GTX_vector_query</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00138_source.html">vector_query.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00138_source.html b/src/third_party/glm/doc/api/a00138_source.html
new file mode 100644
index 0000000..cbd24ba
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00138_source.html
@@ -0,0 +1,104 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: vector_query.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">vector_query.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00138.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include "../glm.hpp"</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include <cfloat></span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include <limits></span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_vector_query extension included")</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> {</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> <a class="code" href="a00237.html#ga465b844190d1740051e45d780832ea4c">areCollinear</a>(vecType<T, P> <span class="keyword">const</span> & v0, vecType<T, P> <span class="keyword">const</span> & v1, T <span class="keyword">const</span> & <a class="code" href="a00162.html#ga2a1e57fc5592b69cfae84174cbfc9429">epsilon</a>);</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  </div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> <a class="code" href="a00237.html#gaee10acefed397c11e01f2862e837754c">areOrthogonal</a>(vecType<T, P> <span class="keyword">const</span> & v0, vecType<T, P> <span class="keyword">const</span> & v1, T <span class="keyword">const</span> & <a class="code" href="a00162.html#ga2a1e57fc5592b69cfae84174cbfc9429">epsilon</a>);</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> <a class="code" href="a00237.html#ga6fa5fa2af67d14c205d24c49aad03270">isNormalized</a>(vecType<T, P> <span class="keyword">const</span> & v, T <span class="keyword">const</span> & <a class="code" href="a00162.html#ga2a1e57fc5592b69cfae84174cbfc9429">epsilon</a>);</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> <a class="code" href="a00237.html#ga81a64edc1a2b470b82896592e89c523b">isNull</a>(vecType<T, P> <span class="keyword">const</span> & v, T <span class="keyword">const</span> & <a class="code" href="a00162.html#ga2a1e57fc5592b69cfae84174cbfc9429">epsilon</a>);</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  GLM_FUNC_DECL vecType<bool, P> <a class="code" href="a00237.html#ga93ecd4137480483ce1af0de8bbbf6546">isCompNull</a>(vecType<T, P> <span class="keyword">const</span> & v, T <span class="keyword">const</span> & <a class="code" href="a00162.html#ga2a1e57fc5592b69cfae84174cbfc9429">epsilon</a>);</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> <a class="code" href="a00237.html#ga89c82bc60e5b84e4489b74c15a134caf">areOrthonormal</a>(vecType<T, P> <span class="keyword">const</span> & v0, vecType<T, P> <span class="keyword">const</span> & v1, T <span class="keyword">const</span> & <a class="code" href="a00162.html#ga2a1e57fc5592b69cfae84174cbfc9429">epsilon</a>);</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> }<span class="comment">// namespace glm</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="preprocessor">#include "vector_query.inl"</span></div>
+<div class="ttc" id="a00237_html_ga6fa5fa2af67d14c205d24c49aad03270"><div class="ttname"><a href="a00237.html#ga6fa5fa2af67d14c205d24c49aad03270">glm::isNormalized</a></div><div class="ttdeci">GLM_FUNC_DECL bool isNormalized(vecType< T, P > const &v, T const &epsilon)</div><div class="ttdoc">Check whether a vector is normalized. </div></div>
+<div class="ttc" id="a00162_html_ga2a1e57fc5592b69cfae84174cbfc9429"><div class="ttname"><a href="a00162.html#ga2a1e57fc5592b69cfae84174cbfc9429">glm::epsilon</a></div><div class="ttdeci">GLM_FUNC_DECL GLM_CONSTEXPR genType epsilon()</div><div class="ttdoc">Return the epsilon constant for floating point types. </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+<div class="ttc" id="a00237_html_ga89c82bc60e5b84e4489b74c15a134caf"><div class="ttname"><a href="a00237.html#ga89c82bc60e5b84e4489b74c15a134caf">glm::areOrthonormal</a></div><div class="ttdeci">GLM_FUNC_DECL bool areOrthonormal(vecType< T, P > const &v0, vecType< T, P > const &v1, T const &epsilon)</div><div class="ttdoc">Check whether two vectors are orthonormal. </div></div>
+<div class="ttc" id="a00237_html_gaee10acefed397c11e01f2862e837754c"><div class="ttname"><a href="a00237.html#gaee10acefed397c11e01f2862e837754c">glm::areOrthogonal</a></div><div class="ttdeci">GLM_FUNC_DECL bool areOrthogonal(vecType< T, P > const &v0, vecType< T, P > const &v1, T const &epsilon)</div><div class="ttdoc">Check whether two vectors are orthogonals. </div></div>
+<div class="ttc" id="a00237_html_ga93ecd4137480483ce1af0de8bbbf6546"><div class="ttname"><a href="a00237.html#ga93ecd4137480483ce1af0de8bbbf6546">glm::isCompNull</a></div><div class="ttdeci">GLM_FUNC_DECL vecType< bool, P > isCompNull(vecType< T, P > const &v, T const &epsilon)</div><div class="ttdoc">Check whether a each component of a vector is null. </div></div>
+<div class="ttc" id="a00237_html_ga465b844190d1740051e45d780832ea4c"><div class="ttname"><a href="a00237.html#ga465b844190d1740051e45d780832ea4c">glm::areCollinear</a></div><div class="ttdeci">GLM_FUNC_DECL bool areCollinear(vecType< T, P > const &v0, vecType< T, P > const &v1, T const &epsilon)</div><div class="ttdoc">Check whether two vectors are collinears. </div></div>
+<div class="ttc" id="a00237_html_ga81a64edc1a2b470b82896592e89c523b"><div class="ttname"><a href="a00237.html#ga81a64edc1a2b470b82896592e89c523b">glm::isNull</a></div><div class="ttdeci">GLM_FUNC_DECL bool isNull(vecType< T, P > const &v, T const &epsilon)</div><div class="ttdoc">Check whether a vector is null. </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00139.html b/src/third_party/glm/doc/api/a00139.html
new file mode 100644
index 0000000..584425c
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00139.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: vector_relational.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">vector_relational.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00139_source.html">Go to the source code of this file.</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00156.html">GLM Core</a> </p>
+
+<p>Definition in file <a class="el" href="a00139_source.html">vector_relational.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00139_source.html b/src/third_party/glm/doc/api/a00139_source.html
new file mode 100644
index 0000000..3ceca0c
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00139_source.html
@@ -0,0 +1,65 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: vector_relational.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">vector_relational.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00139.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include "<a class="code" href="a00036.html">detail/func_vector_relational.hpp</a>"</span></div>
+<div class="ttc" id="a00036_html"><div class="ttname"><a href="a00036.html">func_vector_relational.hpp</a></div><div class="ttdoc">GLM Core </div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00140.html b/src/third_party/glm/doc/api/a00140.html
new file mode 100644
index 0000000..d790d10
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00140.html
@@ -0,0 +1,85 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: wrap.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">wrap.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="a00140_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga6c0cc6bd1d67ea1008d2592e998bad33"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga6c0cc6bd1d67ea1008d2592e998bad33"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00238.html#ga6c0cc6bd1d67ea1008d2592e998bad33">clamp</a> (genType const &Texcoord)</td></tr>
+<tr class="separator:ga6c0cc6bd1d67ea1008d2592e998bad33"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa6856a0a048d2749252848da35e10c8b"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gaa6856a0a048d2749252848da35e10c8b"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00238.html#gaa6856a0a048d2749252848da35e10c8b">mirrorClamp</a> (genType const &Texcoord)</td></tr>
+<tr class="separator:gaa6856a0a048d2749252848da35e10c8b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga16a89b0661b60d5bea85137bbae74d73"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga16a89b0661b60d5bea85137bbae74d73"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00238.html#ga16a89b0661b60d5bea85137bbae74d73">mirrorRepeat</a> (genType const &Texcoord)</td></tr>
+<tr class="separator:ga16a89b0661b60d5bea85137bbae74d73"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga809650c6310ea7c42666e918c117fb6f"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga809650c6310ea7c42666e918c117fb6f"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00238.html#ga809650c6310ea7c42666e918c117fb6f">repeat</a> (genType const &Texcoord)</td></tr>
+<tr class="separator:ga809650c6310ea7c42666e918c117fb6f"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="a00238.html">GLM_GTX_wrap</a> </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00156.html" title="The core of GLM, which implements exactly and only the GLSL specification to the degree possible...">GLM Core</a> (dependence) </dd></dl>
+
+<p>Definition in file <a class="el" href="a00140_source.html">wrap.hpp</a>.</p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00140_source.html b/src/third_party/glm/doc/api/a00140_source.html
new file mode 100644
index 0000000..8c663e7
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00140_source.html
@@ -0,0 +1,94 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: wrap.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">wrap.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="a00140.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// Dependency:</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include "../glm.hpp"</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "../gtc/vec1.hpp"</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_wrap extension included")</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="keyword">namespace </span><a class="code" href="a00141.html">glm</a></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> {</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  GLM_FUNC_DECL genType <a class="code" href="a00238.html#ga6c0cc6bd1d67ea1008d2592e998bad33">clamp</a>(genType <span class="keyword">const</span>& Texcoord);</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  GLM_FUNC_DECL genType <a class="code" href="a00238.html#ga809650c6310ea7c42666e918c117fb6f">repeat</a>(genType <span class="keyword">const</span>& Texcoord);</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  GLM_FUNC_DECL genType <a class="code" href="a00238.html#gaa6856a0a048d2749252848da35e10c8b">mirrorClamp</a>(genType <span class="keyword">const</span>& Texcoord);</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  GLM_FUNC_DECL genType <a class="code" href="a00238.html#ga16a89b0661b60d5bea85137bbae74d73">mirrorRepeat</a>(genType <span class="keyword">const</span>& Texcoord);</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> }<span class="comment">// namespace glm</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="preprocessor">#include "wrap.inl"</span></div>
+<div class="ttc" id="a00238_html_ga6c0cc6bd1d67ea1008d2592e998bad33"><div class="ttname"><a href="a00238.html#ga6c0cc6bd1d67ea1008d2592e998bad33">glm::clamp</a></div><div class="ttdeci">GLM_FUNC_DECL genType clamp(genType const &Texcoord)</div><div class="ttdoc">Simulate GL_CLAMP OpenGL wrap mode. </div></div>
+<div class="ttc" id="a00238_html_ga809650c6310ea7c42666e918c117fb6f"><div class="ttname"><a href="a00238.html#ga809650c6310ea7c42666e918c117fb6f">glm::repeat</a></div><div class="ttdeci">GLM_FUNC_DECL genType repeat(genType const &Texcoord)</div><div class="ttdoc">Simulate GL_REPEAT OpenGL wrap mode. </div></div>
+<div class="ttc" id="a00238_html_ga16a89b0661b60d5bea85137bbae74d73"><div class="ttname"><a href="a00238.html#ga16a89b0661b60d5bea85137bbae74d73">glm::mirrorRepeat</a></div><div class="ttdeci">GLM_FUNC_DECL genType mirrorRepeat(genType const &Texcoord)</div><div class="ttdoc">Simulate GL_MIRROR_REPEAT OpenGL wrap mode. </div></div>
+<div class="ttc" id="a00238_html_gaa6856a0a048d2749252848da35e10c8b"><div class="ttname"><a href="a00238.html#gaa6856a0a048d2749252848da35e10c8b">glm::mirrorClamp</a></div><div class="ttdeci">GLM_FUNC_DECL genType mirrorClamp(genType const &Texcoord)</div><div class="ttdoc">Simulate GL_MIRRORED_REPEAT OpenGL wrap mode. </div></div>
+<div class="ttc" id="a00141_html"><div class="ttname"><a href="a00141.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00003_source.html#l00011">_noise.hpp:11</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00146.html b/src/third_party/glm/doc/api/a00146.html
new file mode 100644
index 0000000..429ee29
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00146.html
@@ -0,0 +1,1123 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: Common functions</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">Common functions<div class="ingroups"><a class="el" href="a00156.html">GLM Core</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga693d77696ff36572a0da79efec965acd"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga693d77696ff36572a0da79efec965acd"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#ga693d77696ff36572a0da79efec965acd">abs</a> (genType x)</td></tr>
+<tr class="separator:ga693d77696ff36572a0da79efec965acd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9189b2bec45ff301923ea8f8dd157fb8"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga9189b2bec45ff301923ea8f8dd157fb8"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#ga9189b2bec45ff301923ea8f8dd157fb8">ceil</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:ga9189b2bec45ff301923ea8f8dd157fb8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga93bce26c7d80d30a62f5c508f8498a6c"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga93bce26c7d80d30a62f5c508f8498a6c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#ga93bce26c7d80d30a62f5c508f8498a6c">clamp</a> (genType x, genType minVal, genType maxVal)</td></tr>
+<tr class="separator:ga93bce26c7d80d30a62f5c508f8498a6c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1425c1c3160ec51214b03a0469a3013d"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00146.html#ga1425c1c3160ec51214b03a0469a3013d">floatBitsToInt</a> (float const &v)</td></tr>
+<tr class="separator:ga1425c1c3160ec51214b03a0469a3013d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac4a0710238ae54c67931dd29a0b0f873"><td class="memTemplParams" colspan="2">template<template< typename, precision > class vecType, precision P> </td></tr>
+<tr class="memitem:gac4a0710238ae54c67931dd29a0b0f873"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< int, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#gac4a0710238ae54c67931dd29a0b0f873">floatBitsToInt</a> (vecType< float, P > const &v)</td></tr>
+<tr class="separator:gac4a0710238ae54c67931dd29a0b0f873"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga70e0271c34af52f3100c7960e18c3f2b"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint </td><td class="memItemRight" valign="bottom"><a class="el" href="a00146.html#ga70e0271c34af52f3100c7960e18c3f2b">floatBitsToUint</a> (float const &v)</td></tr>
+<tr class="separator:ga70e0271c34af52f3100c7960e18c3f2b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1804d4c443605d8a27be644aa461afe4"><td class="memTemplParams" colspan="2">template<template< typename, precision > class vecType, precision P> </td></tr>
+<tr class="memitem:ga1804d4c443605d8a27be644aa461afe4"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< uint, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#ga1804d4c443605d8a27be644aa461afe4">floatBitsToUint</a> (vecType< float, P > const &v)</td></tr>
+<tr class="separator:ga1804d4c443605d8a27be644aa461afe4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga568b822b78f045f77c3325e165b44d5d"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga568b822b78f045f77c3325e165b44d5d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#ga568b822b78f045f77c3325e165b44d5d">floor</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:ga568b822b78f045f77c3325e165b44d5d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad0f444d4b81cc53c3b6edf5aa25078c2"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gad0f444d4b81cc53c3b6edf5aa25078c2"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#gad0f444d4b81cc53c3b6edf5aa25078c2">fma</a> (genType const &a, genType const &b, genType const &c)</td></tr>
+<tr class="separator:gad0f444d4b81cc53c3b6edf5aa25078c2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8ba89e40e55ae5cdf228548f9b7639c7"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga8ba89e40e55ae5cdf228548f9b7639c7"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#ga8ba89e40e55ae5cdf228548f9b7639c7">fract</a> (genType x)</td></tr>
+<tr class="separator:ga8ba89e40e55ae5cdf228548f9b7639c7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga20620e83544d1a988857a3bc4ebe0e1d"><td class="memTemplParams" colspan="2">template<typename genType , typename genIType > </td></tr>
+<tr class="memitem:ga20620e83544d1a988857a3bc4ebe0e1d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#ga20620e83544d1a988857a3bc4ebe0e1d">frexp</a> (genType const &x, genIType &exp)</td></tr>
+<tr class="separator:ga20620e83544d1a988857a3bc4ebe0e1d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4fb7c21c2dce064b26fd9ccdaf9adcd4"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL float </td><td class="memItemRight" valign="bottom"><a class="el" href="a00146.html#ga4fb7c21c2dce064b26fd9ccdaf9adcd4">intBitsToFloat</a> (int const &v)</td></tr>
+<tr class="separator:ga4fb7c21c2dce064b26fd9ccdaf9adcd4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad21ab176dd0e6b59d923db5efca87f4e"><td class="memTemplParams" colspan="2">template<template< typename, precision > class vecType, precision P> </td></tr>
+<tr class="memitem:gad21ab176dd0e6b59d923db5efca87f4e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< float, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#gad21ab176dd0e6b59d923db5efca87f4e">intBitsToFloat</a> (vecType< int, P > const &v)</td></tr>
+<tr class="separator:gad21ab176dd0e6b59d923db5efca87f4e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf28f7a4696746f081685c9fd05c7e2de"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gaf28f7a4696746f081685c9fd05c7e2de"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#gaf28f7a4696746f081685c9fd05c7e2de">isinf</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:gaf28f7a4696746f081685c9fd05c7e2de"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6cb8f202a52eed2331724a3800198ebf"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga6cb8f202a52eed2331724a3800198ebf"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#ga6cb8f202a52eed2331724a3800198ebf">isnan</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:ga6cb8f202a52eed2331724a3800198ebf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga52e319d7289b849ec92055abd4830533"><td class="memTemplParams" colspan="2">template<typename genType , typename genIType > </td></tr>
+<tr class="memitem:ga52e319d7289b849ec92055abd4830533"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#ga52e319d7289b849ec92055abd4830533">ldexp</a> (genType const &x, genIType const &exp)</td></tr>
+<tr class="separator:ga52e319d7289b849ec92055abd4830533"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga98caa7f95a94c86a86ebce893a45326c"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga98caa7f95a94c86a86ebce893a45326c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#ga98caa7f95a94c86a86ebce893a45326c">max</a> (genType x, genType y)</td></tr>
+<tr class="separator:ga98caa7f95a94c86a86ebce893a45326c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2c2bde1cec025b7ddff83c74a1113719"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga2c2bde1cec025b7ddff83c74a1113719"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#ga2c2bde1cec025b7ddff83c74a1113719">min</a> (genType x, genType y)</td></tr>
+<tr class="separator:ga2c2bde1cec025b7ddff83c74a1113719"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gadccbaffe46f369cf1a96b2aef92cbfdd"><td class="memTemplParams" colspan="2">template<typename T , typename U , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gadccbaffe46f369cf1a96b2aef92cbfdd"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#gadccbaffe46f369cf1a96b2aef92cbfdd">mix</a> (vecType< T, P > const &x, vecType< T, P > const &y, vecType< U, P > const &a)</td></tr>
+<tr class="separator:gadccbaffe46f369cf1a96b2aef92cbfdd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga12201563ef902e3b07e0d1d7656efdb1"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga12201563ef902e3b07e0d1d7656efdb1"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#ga12201563ef902e3b07e0d1d7656efdb1">mod</a> (genType x, genType y)</td></tr>
+<tr class="separator:ga12201563ef902e3b07e0d1d7656efdb1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga85e33f139b8db1b39b590a5713b9e679"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga85e33f139b8db1b39b590a5713b9e679"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#ga85e33f139b8db1b39b590a5713b9e679">modf</a> (genType x, genType &i)</td></tr>
+<tr class="separator:ga85e33f139b8db1b39b590a5713b9e679"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gada0165544c0618d634c8056a88082ce9"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gada0165544c0618d634c8056a88082ce9"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#gada0165544c0618d634c8056a88082ce9">round</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:gada0165544c0618d634c8056a88082ce9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga655598104195a60a950291485e84a97e"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga655598104195a60a950291485e84a97e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#ga655598104195a60a950291485e84a97e">roundEven</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:ga655598104195a60a950291485e84a97e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac3446b4138e0b8757561c07cd19f084d"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gac3446b4138e0b8757561c07cd19f084d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#gac3446b4138e0b8757561c07cd19f084d">sign</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:gac3446b4138e0b8757561c07cd19f084d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga562edf7eca082cc5b7a0aaf180436daf"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga562edf7eca082cc5b7a0aaf180436daf"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#ga562edf7eca082cc5b7a0aaf180436daf">smoothstep</a> (genType edge0, genType edge1, genType x)</td></tr>
+<tr class="separator:ga562edf7eca082cc5b7a0aaf180436daf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga015a1261ff23e12650211aa872863cce"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga015a1261ff23e12650211aa872863cce"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#ga015a1261ff23e12650211aa872863cce">step</a> (genType edge, genType x)</td></tr>
+<tr class="separator:ga015a1261ff23e12650211aa872863cce"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf15b74ab672af2c7d7b535a9b4803700"><td class="memTemplParams" colspan="2">template<template< typename, precision > class vecType, typename T , precision P> </td></tr>
+<tr class="memitem:gaf15b74ab672af2c7d7b535a9b4803700"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#gaf15b74ab672af2c7d7b535a9b4803700">step</a> (T edge, vecType< T, P > const &x)</td></tr>
+<tr class="separator:gaf15b74ab672af2c7d7b535a9b4803700"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6d84170051fb87c183c38883ec85b411"><td class="memTemplParams" colspan="2">template<template< typename, precision > class vecType, typename T , precision P> </td></tr>
+<tr class="memitem:ga6d84170051fb87c183c38883ec85b411"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#ga6d84170051fb87c183c38883ec85b411">step</a> (vecType< T, P > const &edge, vecType< T, P > const &x)</td></tr>
+<tr class="separator:ga6d84170051fb87c183c38883ec85b411"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga634cdbf8b37edca03f2248450570fd54"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga634cdbf8b37edca03f2248450570fd54"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#ga634cdbf8b37edca03f2248450570fd54">trunc</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:ga634cdbf8b37edca03f2248450570fd54"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab2bae0d15dcdca6093f88f76b3975d97"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL float </td><td class="memItemRight" valign="bottom"><a class="el" href="a00146.html#gab2bae0d15dcdca6093f88f76b3975d97">uintBitsToFloat</a> (uint const &v)</td></tr>
+<tr class="separator:gab2bae0d15dcdca6093f88f76b3975d97"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3acab37650ecd792dc84548094b58684"><td class="memTemplParams" colspan="2">template<template< typename, precision > class vecType, precision P> </td></tr>
+<tr class="memitem:ga3acab37650ecd792dc84548094b58684"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< float, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00146.html#ga3acab37650ecd792dc84548094b58684">uintBitsToFloat</a> (vecType< uint, P > const &v)</td></tr>
+<tr class="separator:ga3acab37650ecd792dc84548094b58684"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>These all operate component-wise. </p>
+<p>The description is per component. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga693d77696ff36572a0da79efec965acd"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::abs </td>
+ <td>(</td>
+ <td class="paramtype">genType </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns x if x >= 0; otherwise, it returns -x. </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>floating-point or signed integer; scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/abs.xml">GLSL abs man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga9189b2bec45ff301923ea8f8dd157fb8"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::ceil </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns a value equal to the nearest integer that is greater than or equal to x. </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/ceil.xml">GLSL ceil man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga93bce26c7d80d30a62f5c508f8498a6c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::clamp </td>
+ <td>(</td>
+ <td class="paramtype">genType </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType </td>
+ <td class="paramname"><em>minVal</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType </td>
+ <td class="paramname"><em>maxVal</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal and maxVal. </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point or integer; scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/clamp.xml">GLSL clamp man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>
+
+<p>Referenced by <a class="el" href="a00016_source.html#l00047">glm::saturate()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga1425c1c3160ec51214b03a0469a3013d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL int glm::floatBitsToInt </td>
+ <td>(</td>
+ <td class="paramtype">float const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns a signed integer value representing the encoding of a floating-point value. </p>
+<p>The floating-point value's bit-level representation is preserved.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/floatBitsToInt.xml">GLSL floatBitsToInt man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gac4a0710238ae54c67931dd29a0b0f873"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<int, P> glm::floatBitsToInt </td>
+ <td>(</td>
+ <td class="paramtype">vecType< float, P > const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns a signed integer value representing the encoding of a floating-point value. </p>
+<p>The floatingpoint value's bit-level representation is preserved.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/floatBitsToInt.xml">GLSL floatBitsToInt man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga70e0271c34af52f3100c7960e18c3f2b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL uint glm::floatBitsToUint </td>
+ <td>(</td>
+ <td class="paramtype">float const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns a unsigned integer value representing the encoding of a floating-point value. </p>
+<p>The floatingpoint value's bit-level representation is preserved.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/floatBitsToUint.xml">GLSL floatBitsToUint man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga1804d4c443605d8a27be644aa461afe4"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<uint, P> glm::floatBitsToUint </td>
+ <td>(</td>
+ <td class="paramtype">vecType< float, P > const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns a unsigned integer value representing the encoding of a floating-point value. </p>
+<p>The floatingpoint value's bit-level representation is preserved.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/floatBitsToUint.xml">GLSL floatBitsToUint man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga568b822b78f045f77c3325e165b44d5d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::floor </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns a value equal to the nearest integer that is less then or equal to x. </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/floor.xml">GLSL floor man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gad0f444d4b81cc53c3b6edf5aa25078c2"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::fma </td>
+ <td>(</td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>a</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>b</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>c</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Computes and returns a * b + c. </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/fma.xml">GLSL fma man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga8ba89e40e55ae5cdf228548f9b7639c7"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::fract </td>
+ <td>(</td>
+ <td class="paramtype">genType </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return x - floor(x). </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/fract.xml">GLSL fract man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga20620e83544d1a988857a3bc4ebe0e1d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::frexp </td>
+ <td>(</td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genIType & </td>
+ <td class="paramname"><em>exp</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Splits x into a floating-point significand in the range [0.5, 1.0) and an integral exponent of two, such that: x = significand * exp(2, exponent) </p>
+<p>The significand is returned by the function and the exponent is returned in the parameter exp. For a floating-point value of zero, the significant and exponent are both zero. For a floating-point value that is an infinity or is not a number, the results are undefined.</p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/frexp.xml">GLSL frexp man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga4fb7c21c2dce064b26fd9ccdaf9adcd4"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL float glm::intBitsToFloat </td>
+ <td>(</td>
+ <td class="paramtype">int const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns a floating-point value corresponding to a signed integer encoding of a floating-point value. </p>
+<p>If an inf or NaN is passed in, it will not signal, and the resulting floating point value is unspecified. Otherwise, the bit-level representation is preserved.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/intBitsToFloat.xml">GLSL intBitsToFloat man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gad21ab176dd0e6b59d923db5efca87f4e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<float, P> glm::intBitsToFloat </td>
+ <td>(</td>
+ <td class="paramtype">vecType< int, P > const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns a floating-point value corresponding to a signed integer encoding of a floating-point value. </p>
+<p>If an inf or NaN is passed in, it will not signal, and the resulting floating point value is unspecified. Otherwise, the bit-level representation is preserved.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/intBitsToFloat.xml">GLSL intBitsToFloat man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaf28f7a4696746f081685c9fd05c7e2de"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<bool, P> glm::isinf </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns true if x holds a positive infinity or negative infinity representation in the underlying implementation's set of floating point representations. </p>
+<p>Returns false otherwise, including for implementations with no infinity representations.</p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/isinf.xml">GLSL isinf man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga6cb8f202a52eed2331724a3800198ebf"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<bool, P> glm::isnan </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns true if x holds a NaN (not a number) representation in the underlying implementation's set of floating point representations. </p>
+<p>Returns false otherwise, including for implementations with no NaN representations.</p>
+<p>/!\ When using compiler fast math, this function may fail.</p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/isnan.xml">GLSL isnan man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga52e319d7289b849ec92055abd4830533"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::ldexp </td>
+ <td>(</td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genIType const & </td>
+ <td class="paramname"><em>exp</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Builds a floating-point number from x and the corresponding integral exponent of two in exp, returning: significand * exp(2, exponent) </p>
+<p>If this product is too large to be represented in the floating-point type, the result is undefined.</p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/ldexp.xml">GLSL ldexp man page</a>; </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga98caa7f95a94c86a86ebce893a45326c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::max </td>
+ <td>(</td>
+ <td class="paramtype">genType </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns y if x < y; otherwise, it returns x. </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point or integer; scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/max.xml">GLSL max man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga2c2bde1cec025b7ddff83c74a1113719"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::min </td>
+ <td>(</td>
+ <td class="paramtype">genType </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns y if y < x; otherwise, it returns x. </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point or integer; scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/min.xml">GLSL min man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gadccbaffe46f369cf1a96b2aef92cbfdd"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::mix </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< U, P > const & </td>
+ <td class="paramname"><em>a</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>If genTypeU is a floating scalar or vector: Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. </p>
+<p>The value for a is not restricted to the range [0, 1].</p>
+<p>If genTypeU is a boolean scalar or vector: Selects which vector each returned component comes from. For a component of that is false, the corresponding component of x is returned. For a component of a that is true, the corresponding component of y is returned. Components of x and y that are not selected are allowed to be invalid floating point values and will have no effect on the results. Thus, this provides different functionality than genType mix(genType x, genType y, genType(a)) where a is a Boolean vector.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/mix.xml">GLSL mix man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a></dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td>Value to interpolate. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">y</td><td>Value to interpolate. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">a</td><td>Interpolant.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genTypeT</td><td>Floating point scalar or vector. </td></tr>
+ <tr><td class="paramname">genTypeU</td><td>Floating point or boolean scalar or vector. It can't be a vector if it is the length of genTypeT.</td></tr>
+ </table>
+ </dd>
+</dl>
+<div class="fragment"><div class="line"><span class="preprocessor">#include <<a class="code" href="a00040.html">glm/glm.hpp</a>></span></div>
+<div class="line">...</div>
+<div class="line">float a;</div>
+<div class="line"><span class="keywordtype">bool</span> b;</div>
+<div class="line"><a class="code" href="a00157.html#gabebd0c7e3c5cd337d95c313c5e8b8db4">glm::dvec3</a> <a class="code" href="a00162.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139">e</a>;</div>
+<div class="line"><a class="code" href="a00157.html#gabebd0c7e3c5cd337d95c313c5e8b8db4">glm::dvec3</a> f;</div>
+<div class="line"><a class="code" href="a00157.html#gafbab23070ca47932487d25332adc7d7c">glm::vec4</a> g;</div>
+<div class="line"><a class="code" href="a00157.html#gafbab23070ca47932487d25332adc7d7c">glm::vec4</a> h;</div>
+<div class="line">...</div>
+<div class="line">glm::vec4 r = <a class="code" href="a00146.html#gadccbaffe46f369cf1a96b2aef92cbfdd">glm::mix</a>(g, h, a); <span class="comment">// Interpolate with a floating-point scalar two vectors. </span></div>
+<div class="line"><a class="code" href="a00157.html#gafbab23070ca47932487d25332adc7d7c">glm::vec4</a> s = <a class="code" href="a00146.html#gadccbaffe46f369cf1a96b2aef92cbfdd">glm::mix</a>(g, h, b); <span class="comment">// Teturns g or h;</span></div>
+<div class="line"><a class="code" href="a00157.html#gabebd0c7e3c5cd337d95c313c5e8b8db4">glm::dvec3</a> t = <a class="code" href="a00146.html#gadccbaffe46f369cf1a96b2aef92cbfdd">glm::mix</a>(<a class="code" href="a00162.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139">e</a>, f, a); <span class="comment">// Types of the third parameter is not required to match with the first and the second.</span></div>
+<div class="line"><a class="code" href="a00157.html#gafbab23070ca47932487d25332adc7d7c">glm::vec4</a> u = <a class="code" href="a00146.html#gadccbaffe46f369cf1a96b2aef92cbfdd">glm::mix</a>(g, h, r); <span class="comment">// Interpolations can be perform per component with a vector for the last parameter.</span></div>
+</div><!-- fragment -->
+<p>Referenced by <a class="el" href="a00016_source.html#l00038">glm::lerp()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga12201563ef902e3b07e0d1d7656efdb1"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::mod </td>
+ <td>(</td>
+ <td class="paramtype">genType </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Modulus. </p>
+<p>Returns x - y * floor(x / y) for each component in x using the floating point value y.</p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/mod.xml">GLSL mod man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga85e33f139b8db1b39b590a5713b9e679"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::modf </td>
+ <td>(</td>
+ <td class="paramtype">genType </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType & </td>
+ <td class="paramname"><em>i</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the fractional part of x and sets i to the integer part (as a whole number floating point value). </p>
+<p>Both the return value and the output parameter will have the same sign as x.</p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/modf.xml">GLSL modf man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gada0165544c0618d634c8056a88082ce9"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::round </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns a value equal to the nearest integer to x. </p>
+<p>The fraction 0.5 will round in a direction chosen by the implementation, presumably the direction that is fastest. This includes the possibility that round(x) returns the same value as roundEven(x) for all values of x.</p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/round.xml">GLSL round man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga655598104195a60a950291485e84a97e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::roundEven </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns a value equal to the nearest integer to x. </p>
+<p>A fractional part of 0.5 will round toward the nearest even integer. (Both 3.5 and 4.5 for x will return 4.0.)</p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/roundEven.xml">GLSL roundEven man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd>
+<dd>
+<a href="http://developer.amd.com/documentation/articles/pages/New-Round-to-Even-Technique.aspx">New round to even technique</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gac3446b4138e0b8757561c07cd19f084d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::sign </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns 1.0 if x > 0, 0.0 if x == 0, or -1.0 if x < 0. </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point or signed integer; scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/sign.xml">GLSL sign man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga562edf7eca082cc5b7a0aaf180436daf"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::smoothstep </td>
+ <td>(</td>
+ <td class="paramtype">genType </td>
+ <td class="paramname"><em>edge0</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType </td>
+ <td class="paramname"><em>edge1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType </td>
+ <td class="paramname"><em>x</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns 0.0 if x <= edge0 and 1.0 if x >= edge1 and performs smooth Hermite interpolation between 0 and 1 when edge0 < x < edge1. </p>
+<p>This is useful in cases where you would want a threshold function with a smooth transition. This is equivalent to: genType t; t = clamp ((x - edge0) / (edge1 - edge0), 0, 1); return t * t * (3 - 2 * t); Results are undefined if edge0 >= edge1.</p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/smoothstep.xml">GLSL smoothstep man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga015a1261ff23e12650211aa872863cce"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::step </td>
+ <td>(</td>
+ <td class="paramtype">genType </td>
+ <td class="paramname"><em>edge</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType </td>
+ <td class="paramname"><em>x</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns 0.0 if x < edge, otherwise it returns 1.0 for each component of a genType. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/step.xml">GLSL step man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaf15b74ab672af2c7d7b535a9b4803700"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::step </td>
+ <td>(</td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>edge</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns 0.0 if x < edge, otherwise it returns 1.0. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/step.xml">GLSL step man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga6d84170051fb87c183c38883ec85b411"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::step </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>edge</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns 0.0 if x < edge, otherwise it returns 1.0. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/step.xml">GLSL step man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga634cdbf8b37edca03f2248450570fd54"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::trunc </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns a value equal to the nearest integer to x whose absolute value is not larger than the absolute value of x. </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/trunc.xml">GLSL trunc man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gab2bae0d15dcdca6093f88f76b3975d97"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL float glm::uintBitsToFloat </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a> const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns a floating-point value corresponding to a unsigned integer encoding of a floating-point value. </p>
+<p>If an inf or NaN is passed in, it will not signal, and the resulting floating point value is unspecified. Otherwise, the bit-level representation is preserved.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/uintBitsToFloat.xml">GLSL uintBitsToFloat man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga3acab37650ecd792dc84548094b58684"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<float, P> glm::uintBitsToFloat </td>
+ <td>(</td>
+ <td class="paramtype">vecType< <a class="el" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a>, P > const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns a floating-point value corresponding to a unsigned integer encoding of a floating-point value. </p>
+<p>If an inf or NaN is passed in, it will not signal, and the resulting floating point value is unspecified. Otherwise, the bit-level representation is preserved.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/uintBitsToFloat.xml">GLSL uintBitsToFloat man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00147.html b/src/third_party/glm/doc/api/a00147.html
new file mode 100644
index 0000000..2e27dd8
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00147.html
@@ -0,0 +1,325 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: Exponential functions</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">Exponential functions<div class="ingroups"><a class="el" href="a00156.html">GLM Core</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga25e54a7f44fc49ec6ac6ffc7675cf04a"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga25e54a7f44fc49ec6ac6ffc7675cf04a"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00147.html#ga25e54a7f44fc49ec6ac6ffc7675cf04a">exp</a> (vecType< T, P > const &v)</td></tr>
+<tr class="separator:ga25e54a7f44fc49ec6ac6ffc7675cf04a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga42ca440d9062f1f456f5a9e896378f9c"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga42ca440d9062f1f456f5a9e896378f9c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00147.html#ga42ca440d9062f1f456f5a9e896378f9c">exp2</a> (vecType< T, P > const &v)</td></tr>
+<tr class="separator:ga42ca440d9062f1f456f5a9e896378f9c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga599103d4fe4ef2234761ba8da7268627"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga599103d4fe4ef2234761ba8da7268627"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00147.html#ga599103d4fe4ef2234761ba8da7268627">inversesqrt</a> (vecType< T, P > const &v)</td></tr>
+<tr class="separator:ga599103d4fe4ef2234761ba8da7268627"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga21efca311e62d233de0ae96bab126b83"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga21efca311e62d233de0ae96bab126b83"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00147.html#ga21efca311e62d233de0ae96bab126b83">log</a> (vecType< T, P > const &v)</td></tr>
+<tr class="separator:ga21efca311e62d233de0ae96bab126b83"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gabae30945338a555a03733f00dad95d0d"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gabae30945338a555a03733f00dad95d0d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00147.html#gabae30945338a555a03733f00dad95d0d">log2</a> (vecType< T, P > const &v)</td></tr>
+<tr class="separator:gabae30945338a555a03733f00dad95d0d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga082b332a4b7c6ad1d43e09ff19e214dd"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga082b332a4b7c6ad1d43e09ff19e214dd"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00147.html#ga082b332a4b7c6ad1d43e09ff19e214dd">pow</a> (vecType< T, P > const &base, vecType< T, P > const &exponent)</td></tr>
+<tr class="separator:ga082b332a4b7c6ad1d43e09ff19e214dd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae7ac2e44c14d4e8004098d0bfba6e2b8"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gae7ac2e44c14d4e8004098d0bfba6e2b8"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00147.html#gae7ac2e44c14d4e8004098d0bfba6e2b8">sqrt</a> (vecType< T, P > const &v)</td></tr>
+<tr class="separator:gae7ac2e44c14d4e8004098d0bfba6e2b8"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>These all operate component-wise. </p>
+<p>The description is per component. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga25e54a7f44fc49ec6ac6ffc7675cf04a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::exp </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the natural exponentiation of x, i.e., e^x. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">v</td><td>exp function is defined for input values of v defined in the range (inf-, inf+) in the limit of the type precision. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/exp.xml">GLSL exp man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga42ca440d9062f1f456f5a9e896378f9c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::exp2 </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns 2 raised to the v power. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">v</td><td>exp2 function is defined for input values of v defined in the range (inf-, inf+) in the limit of the type precision. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/exp2.xml">GLSL exp2 man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga599103d4fe4ef2234761ba8da7268627"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::inversesqrt </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the reciprocal of the positive square root of v. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">v</td><td>inversesqrt function is defined for input values of v defined in the range [0, inf+) in the limit of the type precision. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/inversesqrt.xml">GLSL inversesqrt man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga21efca311e62d233de0ae96bab126b83"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::log </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the natural logarithm of v, i.e., returns the value y which satisfies the equation x = e^y. </p>
+<p>Results are undefined if v <= 0.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">v</td><td>log function is defined for input values of v defined in the range (0, inf+) in the limit of the type precision. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/log.xml">GLSL log man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gabae30945338a555a03733f00dad95d0d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::log2 </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the base 2 log of x, i.e., returns the value y, which satisfies the equation x = 2 ^ y. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">v</td><td>log2 function is defined for input values of v defined in the range (0, inf+) in the limit of the type precision. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/log2.xml">GLSL log2 man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga082b332a4b7c6ad1d43e09ff19e214dd"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::pow </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>base</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>exponent</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns 'base' raised to the power 'exponent'. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">base</td><td>Floating point value. pow function is defined for input values of 'base' defined in the range (inf-, inf+) in the limit of the type precision. </td></tr>
+ <tr><td class="paramname">exponent</td><td>Floating point value representing the 'exponent'. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/pow.xml">GLSL pow man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gae7ac2e44c14d4e8004098d0bfba6e2b8"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::sqrt </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the positive square root of v. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">v</td><td>sqrt function is defined for input values of v defined in the range [0, inf+) in the limit of the type precision. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/sqrt.xml">GLSL sqrt man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a> </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00148.html b/src/third_party/glm/doc/api/a00148.html
new file mode 100644
index 0000000..5d0a081
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00148.html
@@ -0,0 +1,367 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: Geometric functions</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">Geometric functions<div class="ingroups"><a class="el" href="a00156.html">GLM Core</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gafe2cae8cb26fd44be62aee97369d0af8"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gafe2cae8cb26fd44be62aee97369d0af8"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00148.html#gafe2cae8cb26fd44be62aee97369d0af8">cross</a> (tvec3< T, P > const &x, tvec3< T, P > const &y)</td></tr>
+<tr class="separator:gafe2cae8cb26fd44be62aee97369d0af8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7ca317dde0d7e94d920153554d4a02a8"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga7ca317dde0d7e94d920153554d4a02a8"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00148.html#ga7ca317dde0d7e94d920153554d4a02a8">distance</a> (vecType< T, P > const &p0, vecType< T, P > const &p1)</td></tr>
+<tr class="separator:ga7ca317dde0d7e94d920153554d4a02a8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7dada304da2ba7dd3376ab4f178c3f6b"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga7dada304da2ba7dd3376ab4f178c3f6b"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00148.html#ga7dada304da2ba7dd3376ab4f178c3f6b">dot</a> (vecType< T, P > const &x, vecType< T, P > const &y)</td></tr>
+<tr class="separator:ga7dada304da2ba7dd3376ab4f178c3f6b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaea854e5aec1b5839832ac2dfc7cd3c0d"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gaea854e5aec1b5839832ac2dfc7cd3c0d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00148.html#gaea854e5aec1b5839832ac2dfc7cd3c0d">faceforward</a> (vecType< T, P > const &N, vecType< T, P > const &I, vecType< T, P > const &Nref)</td></tr>
+<tr class="separator:gaea854e5aec1b5839832ac2dfc7cd3c0d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga18d45e3d4c7705e67ccfabd99e521604"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga18d45e3d4c7705e67ccfabd99e521604"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00148.html#ga18d45e3d4c7705e67ccfabd99e521604">length</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:ga18d45e3d4c7705e67ccfabd99e521604"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gada9451ec170a36fe53552812b9c03a68"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gada9451ec170a36fe53552812b9c03a68"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00148.html#gada9451ec170a36fe53552812b9c03a68">normalize</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:gada9451ec170a36fe53552812b9c03a68"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab63646fc36b81cf69d3ce123a72f76f2"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gab63646fc36b81cf69d3ce123a72f76f2"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00148.html#gab63646fc36b81cf69d3ce123a72f76f2">reflect</a> (genType const &I, genType const &N)</td></tr>
+<tr class="separator:gab63646fc36b81cf69d3ce123a72f76f2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab7e7cdf4403931a5f7b74560ad64159b"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gab7e7cdf4403931a5f7b74560ad64159b"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00148.html#gab7e7cdf4403931a5f7b74560ad64159b">refract</a> (vecType< T, P > const &I, vecType< T, P > const &N, T eta)</td></tr>
+<tr class="separator:gab7e7cdf4403931a5f7b74560ad64159b"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>These operate on vectors as vectors, not component-wise. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="gafe2cae8cb26fd44be62aee97369d0af8"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tvec3<T, P> glm::cross </td>
+ <td>(</td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the cross product of x and y. </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">valType</td><td>Floating-point scalar types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/cross.xml">GLSL cross man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga7ca317dde0d7e94d920153554d4a02a8"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL T glm::distance </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>p0</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>p1</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the distance betwwen p0 and p1, i.e., length(p0 - p1). </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/distance.xml">GLSL distance man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga7dada304da2ba7dd3376ab4f178c3f6b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL T glm::dot </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the dot product of x and y, i.e., result = x * y. </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/dot.xml">GLSL dot man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaea854e5aec1b5839832ac2dfc7cd3c0d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::faceforward </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>N</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>I</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>Nref</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>If dot(Nref, I) < 0.0, return N, otherwise, return -N. </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/faceforward.xml">GLSL faceforward man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga18d45e3d4c7705e67ccfabd99e521604"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL T glm::length </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the length of x, i.e., sqrt(x * x). </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/length.xml">GLSL length man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gada9451ec170a36fe53552812b9c03a68"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::normalize </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns a vector in the same direction as x but with length of 1. </p>
+<p>According to issue 10 GLSL 1.10 specification, if length(x) == 0 then result is undefined and generate an error.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/normalize.xml">GLSL normalize man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gab63646fc36b81cf69d3ce123a72f76f2"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::reflect </td>
+ <td>(</td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>I</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>N</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>For the incident vector I and surface orientation N, returns the reflection direction : result = I - 2.0 * dot(N, I) * N. </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/reflect.xml">GLSL reflect man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gab7e7cdf4403931a5f7b74560ad64159b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::refract </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>I</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>N</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>eta</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>For the incident vector I and surface normal N, and the ratio of indices of refraction eta, return the refraction vector. </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/refract.xml">GLSL refract man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a> </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00149.html b/src/third_party/glm/doc/api/a00149.html
new file mode 100644
index 0000000..e2bee04
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00149.html
@@ -0,0 +1,577 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: Integer functions</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">Integer functions<div class="ingroups"><a class="el" href="a00156.html">GLM Core</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga44abfe3379e11cbd29425a843420d0d6"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga44abfe3379e11cbd29425a843420d0d6"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL int </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00149.html#ga44abfe3379e11cbd29425a843420d0d6">bitCount</a> (genType v)</td></tr>
+<tr class="separator:ga44abfe3379e11cbd29425a843420d0d6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1f29640969a3c54564da06ac67a5392e"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga1f29640969a3c54564da06ac67a5392e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< int, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00149.html#ga1f29640969a3c54564da06ac67a5392e">bitCount</a> (vecType< T, P > const &v)</td></tr>
+<tr class="separator:ga1f29640969a3c54564da06ac67a5392e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab84b88f3a8e367774e5dd1c618c353cf"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gab84b88f3a8e367774e5dd1c618c353cf"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00149.html#gab84b88f3a8e367774e5dd1c618c353cf">bitfieldExtract</a> (vecType< T, P > const &Value, int Offset, int Bits)</td></tr>
+<tr class="separator:gab84b88f3a8e367774e5dd1c618c353cf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5681dfac9239beb1b8bd995e3c6496d7"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga5681dfac9239beb1b8bd995e3c6496d7"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00149.html#ga5681dfac9239beb1b8bd995e3c6496d7">bitfieldInsert</a> (vecType< T, P > const &Base, vecType< T, P > const &Insert, int Offset, int Bits)</td></tr>
+<tr class="separator:ga5681dfac9239beb1b8bd995e3c6496d7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga153e7e8d0c035f83cce50fc3e580930f"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga153e7e8d0c035f83cce50fc3e580930f"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00149.html#ga153e7e8d0c035f83cce50fc3e580930f">bitfieldReverse</a> (vecType< T, P > const &v)</td></tr>
+<tr class="separator:ga153e7e8d0c035f83cce50fc3e580930f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf74c4d969fa34ab8acb9d390f5ca5274"><td class="memTemplParams" colspan="2">template<typename genIUType > </td></tr>
+<tr class="memitem:gaf74c4d969fa34ab8acb9d390f5ca5274"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL int </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00149.html#gaf74c4d969fa34ab8acb9d390f5ca5274">findLSB</a> (genIUType x)</td></tr>
+<tr class="separator:gaf74c4d969fa34ab8acb9d390f5ca5274"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga014a72009e68233c34c06a6dc2251b8c"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga014a72009e68233c34c06a6dc2251b8c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< int, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00149.html#ga014a72009e68233c34c06a6dc2251b8c">findLSB</a> (vecType< T, P > const &v)</td></tr>
+<tr class="separator:ga014a72009e68233c34c06a6dc2251b8c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7e4a794d766861c70bc961630f8ef621"><td class="memTemplParams" colspan="2">template<typename genIUType > </td></tr>
+<tr class="memitem:ga7e4a794d766861c70bc961630f8ef621"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL int </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00149.html#ga7e4a794d766861c70bc961630f8ef621">findMSB</a> (genIUType x)</td></tr>
+<tr class="separator:ga7e4a794d766861c70bc961630f8ef621"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga433104d77ec2ba58888aaefb77e9183f"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga433104d77ec2ba58888aaefb77e9183f"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< int, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00149.html#ga433104d77ec2ba58888aaefb77e9183f">findMSB</a> (vecType< T, P > const &v)</td></tr>
+<tr class="separator:ga433104d77ec2ba58888aaefb77e9183f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6e6e8b29ca40d8ca2df10b58ed17d426"><td class="memTemplParams" colspan="2">template<precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga6e6e8b29ca40d8ca2df10b58ed17d426"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00149.html#ga6e6e8b29ca40d8ca2df10b58ed17d426">imulExtended</a> (vecType< int, P > const &x, vecType< int, P > const &y, vecType< int, P > &msb, vecType< int, P > &lsb)</td></tr>
+<tr class="separator:ga6e6e8b29ca40d8ca2df10b58ed17d426"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2fc1a46e7b7e9fbbd8fa444fbacaa2aa"><td class="memTemplParams" colspan="2">template<precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga2fc1a46e7b7e9fbbd8fa444fbacaa2aa"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< uint, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00149.html#ga2fc1a46e7b7e9fbbd8fa444fbacaa2aa">uaddCarry</a> (vecType< uint, P > const &x, vecType< uint, P > const &y, vecType< uint, P > &carry)</td></tr>
+<tr class="separator:ga2fc1a46e7b7e9fbbd8fa444fbacaa2aa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga456ff9dcec42f6769a9ae2a2af7f1ce1"><td class="memTemplParams" colspan="2">template<precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga456ff9dcec42f6769a9ae2a2af7f1ce1"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00149.html#ga456ff9dcec42f6769a9ae2a2af7f1ce1">umulExtended</a> (vecType< uint, P > const &x, vecType< uint, P > const &y, vecType< uint, P > &msb, vecType< uint, P > &lsb)</td></tr>
+<tr class="separator:ga456ff9dcec42f6769a9ae2a2af7f1ce1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga22a889bf08313b7e547e2cdb8bb15ee4"><td class="memTemplParams" colspan="2">template<precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga22a889bf08313b7e547e2cdb8bb15ee4"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< uint, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00149.html#ga22a889bf08313b7e547e2cdb8bb15ee4">usubBorrow</a> (vecType< uint, P > const &x, vecType< uint, P > const &y, vecType< uint, P > &borrow)</td></tr>
+<tr class="separator:ga22a889bf08313b7e547e2cdb8bb15ee4"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>These all operate component-wise. </p>
+<p>The description is per component. The notation [a, b] means the set of bits from bit-number a through bit-number b, inclusive. The lowest-order bit is bit 0. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga44abfe3379e11cbd29425a843420d0d6"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL int glm::bitCount </td>
+ <td>(</td>
+ <td class="paramtype">genType </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the number of bits set to 1 in the binary representation of value. </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">T</td><td>Signed or unsigned integer scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/bitCount.xml">GLSL bitCount man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga1f29640969a3c54564da06ac67a5392e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<int, P> glm::bitCount </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the number of bits set to 1 in the binary representation of value. </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">T</td><td>Signed or unsigned integer scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/bitCount.xml">GLSL bitCount man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gab84b88f3a8e367774e5dd1c618c353cf"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::bitfieldExtract </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>Value</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>Offset</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>Bits</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Extracts bits [offset, offset + bits - 1] from value, returning them in the least significant bits of the result. </p>
+<p>For unsigned data types, the most significant bits of the result will be set to zero. For signed data types, the most significant bits will be set to the value of bit offset + base - 1.</p>
+<p>If bits is zero, the result will be zero. The result will be undefined if offset or bits is negative, or if the sum of offset and bits is greater than the number of bits used to store the operand.</p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">T</td><td>Signed or unsigned integer scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/bitfieldExtract.xml">GLSL bitfieldExtract man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga5681dfac9239beb1b8bd995e3c6496d7"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::bitfieldInsert </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>Base</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>Insert</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>Offset</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>Bits</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the insertion the bits least-significant bits of insert into base. </p>
+<p>The result will have bits [offset, offset + bits - 1] taken from bits [0, bits - 1] of insert, and all other bits taken directly from the corresponding bits of base. If bits is zero, the result will simply be base. The result will be undefined if offset or bits is negative, or if the sum of offset and bits is greater than the number of bits used to store the operand.</p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">T</td><td>Signed or unsigned integer scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/bitfieldInsert.xml">GLSL bitfieldInsert man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga153e7e8d0c035f83cce50fc3e580930f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::bitfieldReverse </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the reversal of the bits of value. </p>
+<p>The bit numbered n of the result will be taken from bit (bits - 1) - n of value, where bits is the total number of bits used to represent value.</p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">T</td><td>Signed or unsigned integer scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/bitfieldReverse.xml">GLSL bitfieldReverse man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaf74c4d969fa34ab8acb9d390f5ca5274"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL int glm::findLSB </td>
+ <td>(</td>
+ <td class="paramtype">genIUType </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the bit number of the least significant bit set to 1 in the binary representation of value. </p>
+<p>If value is zero, -1 will be returned.</p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">T</td><td>Signed or unsigned integer scalar types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/findLSB.xml">GLSL findLSB man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga014a72009e68233c34c06a6dc2251b8c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<int, P> glm::findLSB </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the bit number of the least significant bit set to 1 in the binary representation of value. </p>
+<p>If value is zero, -1 will be returned.</p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">T</td><td>Signed or unsigned integer scalar types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/findLSB.xml">GLSL findLSB man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga7e4a794d766861c70bc961630f8ef621"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL int glm::findMSB </td>
+ <td>(</td>
+ <td class="paramtype">genIUType </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the bit number of the most significant bit in the binary representation of value. </p>
+<p>For positive integers, the result will be the bit number of the most significant bit set to 1. For negative integers, the result will be the bit number of the most significant bit set to 0. For a value of zero or negative one, -1 will be returned.</p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">T</td><td>Signed or unsigned integer scalar types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/findMSB.xml">GLSL findMSB man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga433104d77ec2ba58888aaefb77e9183f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<int, P> glm::findMSB </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the bit number of the most significant bit in the binary representation of value. </p>
+<p>For positive integers, the result will be the bit number of the most significant bit set to 1. For negative integers, the result will be the bit number of the most significant bit set to 0. For a value of zero or negative one, -1 will be returned.</p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">T</td><td>Signed or unsigned integer scalar types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/findMSB.xml">GLSL findMSB man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga6e6e8b29ca40d8ca2df10b58ed17d426"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL void glm::imulExtended </td>
+ <td>(</td>
+ <td class="paramtype">vecType< int, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< int, P > const & </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< int, P > & </td>
+ <td class="paramname"><em>msb</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< int, P > & </td>
+ <td class="paramname"><em>lsb</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Multiplies 32-bit integers x and y, producing a 64-bit result. </p>
+<p>The 32 least-significant bits are returned in lsb. The 32 most-significant bits are returned in msb.</p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genIType</td><td>Signed integer scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/imulExtended.xml">GLSL imulExtended man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga2fc1a46e7b7e9fbbd8fa444fbacaa2aa"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<uint, P> glm::uaddCarry </td>
+ <td>(</td>
+ <td class="paramtype">vecType< <a class="el" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a>, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< <a class="el" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a>, P > const & </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< <a class="el" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a>, P > & </td>
+ <td class="paramname"><em>carry</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Adds 32-bit unsigned integer x and y, returning the sum modulo pow(2, 32). </p>
+<p>The value carry is set to 0 if the sum was less than pow(2, 32), or to 1 otherwise.</p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genUType</td><td>Unsigned integer scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/uaddCarry.xml">GLSL uaddCarry man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga456ff9dcec42f6769a9ae2a2af7f1ce1"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL void glm::umulExtended </td>
+ <td>(</td>
+ <td class="paramtype">vecType< <a class="el" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a>, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< <a class="el" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a>, P > const & </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< <a class="el" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a>, P > & </td>
+ <td class="paramname"><em>msb</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< <a class="el" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a>, P > & </td>
+ <td class="paramname"><em>lsb</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Multiplies 32-bit integers x and y, producing a 64-bit result. </p>
+<p>The 32 least-significant bits are returned in lsb. The 32 most-significant bits are returned in msb.</p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genUType</td><td>Unsigned integer scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/umulExtended.xml">GLSL umulExtended man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga22a889bf08313b7e547e2cdb8bb15ee4"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<uint, P> glm::usubBorrow </td>
+ <td>(</td>
+ <td class="paramtype">vecType< <a class="el" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a>, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< <a class="el" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a>, P > const & </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< <a class="el" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a>, P > & </td>
+ <td class="paramname"><em>borrow</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Subtracts the 32-bit unsigned integer y from x, returning the difference if non-negative, or pow(2, 32) plus the difference otherwise. </p>
+<p>The value borrow is set to 0 if x >= y, or to 1 otherwise.</p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genUType</td><td>Unsigned integer scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/usubBorrow.xml">GLSL usubBorrow man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00150.html b/src/third_party/glm/doc/api/a00150.html
new file mode 100644
index 0000000..8ea665d
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00150.html
@@ -0,0 +1,210 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: Matrix functions</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">Matrix functions<div class="ingroups"><a class="el" href="a00156.html">GLM Core</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga26ea77c574802bc6fc193c40478718d2"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class matType> </td></tr>
+<tr class="memitem:ga26ea77c574802bc6fc193c40478718d2"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00150.html#ga26ea77c574802bc6fc193c40478718d2">determinant</a> (matType< T, P > const &m)</td></tr>
+<tr class="separator:ga26ea77c574802bc6fc193c40478718d2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa7e1d5586cd499126cec76e0f11871e3"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class matType> </td></tr>
+<tr class="memitem:gaa7e1d5586cd499126cec76e0f11871e3"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL matType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00150.html#gaa7e1d5586cd499126cec76e0f11871e3">inverse</a> (matType< T, P > const &m)</td></tr>
+<tr class="separator:gaa7e1d5586cd499126cec76e0f11871e3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4a54992e4741188ee624b21e3ba91814"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class matType> </td></tr>
+<tr class="memitem:ga4a54992e4741188ee624b21e3ba91814"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL matType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00150.html#ga4a54992e4741188ee624b21e3ba91814">matrixCompMult</a> (matType< T, P > const &x, matType< T, P > const &y)</td></tr>
+<tr class="separator:ga4a54992e4741188ee624b21e3ba91814"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae9f513dc8e4f3ceb993669321b6d0f09"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecTypeA, template< typename, precision > class vecTypeB> </td></tr>
+<tr class="memitem:gae9f513dc8e4f3ceb993669321b6d0f09"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL detail::outerProduct_trait< T, P, vecTypeA, vecTypeB >::type </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00150.html#gae9f513dc8e4f3ceb993669321b6d0f09">outerProduct</a> (vecTypeA< T, P > const &c, vecTypeB< T, P > const &r)</td></tr>
+<tr class="separator:gae9f513dc8e4f3ceb993669321b6d0f09"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>For each of the following built-in matrix functions, there is both a single-precision floating point version, where all arguments and return values are single precision, and a double-precision floating version, where all arguments and return values are double precision. </p>
+<p>Only the single-precision floating point version is shown. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga26ea77c574802bc6fc193c40478718d2"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL T glm::determinant </td>
+ <td>(</td>
+ <td class="paramtype">matType< T, P > const & </td>
+ <td class="paramname"><em>m</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the transposed matrix of x. </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">matType</td><td>Floating-point matrix types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/transpose.xml">GLSL transpose man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a> Return the determinant of a squared matrix.</dd></dl>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">valType</td><td>Floating-point scalar types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/determinant.xml">GLSL determinant man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaa7e1d5586cd499126cec76e0f11871e3"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL matType< T, P > inverse </td>
+ <td>(</td>
+ <td class="paramtype">matType< T, P > const & </td>
+ <td class="paramname"><em>m</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return the inverse of a squared matrix. </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">valType</td><td>Floating-point scalar types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/inverse.xml">GLSL inverse man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga4a54992e4741188ee624b21e3ba91814"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL matType<T, P> glm::matrixCompMult </td>
+ <td>(</td>
+ <td class="paramtype">matType< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">matType< T, P > const & </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Multiply matrix x by matrix y component-wise, i.e., result[i][j] is the scalar product of x[i][j] and y[i][j]. </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">matType</td><td>Floating-point matrix types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/matrixCompMult.xml">GLSL matrixCompMult man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gae9f513dc8e4f3ceb993669321b6d0f09"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL detail::outerProduct_trait<T, P, vecTypeA, vecTypeB>::type glm::outerProduct </td>
+ <td>(</td>
+ <td class="paramtype">vecTypeA< T, P > const & </td>
+ <td class="paramname"><em>c</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecTypeB< T, P > const & </td>
+ <td class="paramname"><em>r</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Treats the first parameter c as a column vector and the second parameter r as a row vector and does a linear algebraic matrix multiply c * r. </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">matType</td><td>Floating-point matrix types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/outerProduct.xml">GLSL outerProduct man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a> </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00151.html b/src/third_party/glm/doc/api/a00151.html
new file mode 100644
index 0000000..8c7f982
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00151.html
@@ -0,0 +1,364 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: Floating-Point Pack and Unpack Functions</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">Floating-Point Pack and Unpack Functions<div class="ingroups"><a class="el" href="a00156.html">GLM Core</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gaa916ca426b2bb0343ba17e3753e245c2"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL double </td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html#gaa916ca426b2bb0343ba17e3753e245c2">packDouble2x32</a> (uvec2 const &v)</td></tr>
+<tr class="separator:gaa916ca426b2bb0343ba17e3753e245c2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga20f134b07db3a3d3a38efb2617388c92"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint </td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html#ga20f134b07db3a3d3a38efb2617388c92">packHalf2x16</a> (vec2 const &v)</td></tr>
+<tr class="separator:ga20f134b07db3a3d3a38efb2617388c92"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga977ab172da5494e5ac63e952afacfbe2"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint </td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html#ga977ab172da5494e5ac63e952afacfbe2">packSnorm2x16</a> (vec2 const &v)</td></tr>
+<tr class="separator:ga977ab172da5494e5ac63e952afacfbe2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga85e8f17627516445026ab7a9c2e3531a"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint </td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html#ga85e8f17627516445026ab7a9c2e3531a">packSnorm4x8</a> (vec4 const &v)</td></tr>
+<tr class="separator:ga85e8f17627516445026ab7a9c2e3531a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0e2d107039fe608a209497af867b85fb"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint </td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html#ga0e2d107039fe608a209497af867b85fb">packUnorm2x16</a> (vec2 const &v)</td></tr>
+<tr class="separator:ga0e2d107039fe608a209497af867b85fb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf7d2f7341a9eeb4a436929d6f9ad08f2"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint </td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html#gaf7d2f7341a9eeb4a436929d6f9ad08f2">packUnorm4x8</a> (vec4 const &v)</td></tr>
+<tr class="separator:gaf7d2f7341a9eeb4a436929d6f9ad08f2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5f4296dc5f12f0aa67ac05b8bb322483"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uvec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html#ga5f4296dc5f12f0aa67ac05b8bb322483">unpackDouble2x32</a> (double v)</td></tr>
+<tr class="separator:ga5f4296dc5f12f0aa67ac05b8bb322483"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf59b52e6b28da9335322c4ae19b5d745"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL vec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html#gaf59b52e6b28da9335322c4ae19b5d745">unpackHalf2x16</a> (uint v)</td></tr>
+<tr class="separator:gaf59b52e6b28da9335322c4ae19b5d745"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gacd8f8971a3fe28418be0d0fa1f786b38"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL vec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html#gacd8f8971a3fe28418be0d0fa1f786b38">unpackSnorm2x16</a> (uint p)</td></tr>
+<tr class="separator:gacd8f8971a3fe28418be0d0fa1f786b38"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2db488646d48b7c43d3218954523fe82"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL vec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html#ga2db488646d48b7c43d3218954523fe82">unpackSnorm4x8</a> (uint p)</td></tr>
+<tr class="separator:ga2db488646d48b7c43d3218954523fe82"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1f66188e5d65afeb9ffba1ad971e4007"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL vec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html#ga1f66188e5d65afeb9ffba1ad971e4007">unpackUnorm2x16</a> (uint p)</td></tr>
+<tr class="separator:ga1f66188e5d65afeb9ffba1ad971e4007"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7f903259150b67e9466f5f8edffcd197"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL vec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html#ga7f903259150b67e9466f5f8edffcd197">unpackUnorm4x8</a> (uint p)</td></tr>
+<tr class="separator:ga7f903259150b67e9466f5f8edffcd197"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>These functions do not operate component-wise, rather as described in each case. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="gaa916ca426b2bb0343ba17e3753e245c2"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL double glm::packDouble2x32 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00157.html#ga9bcffa2d49f28d16f680757b5c0e7c84">uvec2</a> const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns a double-precision value obtained by packing the components of v into a 64-bit value. </p>
+<p>If an IEEE 754 Inf or NaN is created, it will not signal, and the resulting floating point value is unspecified. Otherwise, the bit- level representation of v is preserved. The first vector component specifies the 32 least significant bits; the second component specifies the 32 most significant bits.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packDouble2x32.xml">GLSL packDouble2x32 man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga20f134b07db3a3d3a38efb2617388c92"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL uint glm::packHalf2x16 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00157.html#ga09d0200e8ff86391d8804b4fefd5f1da">vec2</a> const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns an unsigned integer obtained by converting the components of a two-component floating-point vector to the 16-bit floating-point representation found in the OpenGL Specification, and then packing these two 16- bit integers into a 32-bit unsigned integer. </p>
+<p>The first vector component specifies the 16 least-significant bits of the result; the second component specifies the 16 most-significant bits.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packHalf2x16.xml">GLSL packHalf2x16 man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga977ab172da5494e5ac63e952afacfbe2"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL uint glm::packSnorm2x16 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00157.html#ga09d0200e8ff86391d8804b4fefd5f1da">vec2</a> const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. </p>
+<p>Then, the results are packed into the returned 32-bit unsigned integer.</p>
+<p>The conversion for component c of v to fixed point is done as follows: packSnorm2x16: round(clamp(v, -1, +1) * 32767.0)</p>
+<p>The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packSnorm2x16.xml">GLSL packSnorm2x16 man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga85e8f17627516445026ab7a9c2e3531a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL uint glm::packSnorm4x8 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00157.html#gafbab23070ca47932487d25332adc7d7c">vec4</a> const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. </p>
+<p>Then, the results are packed into the returned 32-bit unsigned integer.</p>
+<p>The conversion for component c of v to fixed point is done as follows: packSnorm4x8: round(clamp(c, -1, +1) * 127.0)</p>
+<p>The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packSnorm4x8.xml">GLSL packSnorm4x8 man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga0e2d107039fe608a209497af867b85fb"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL uint glm::packUnorm2x16 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00157.html#ga09d0200e8ff86391d8804b4fefd5f1da">vec2</a> const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. </p>
+<p>Then, the results are packed into the returned 32-bit unsigned integer.</p>
+<p>The conversion for component c of v to fixed point is done as follows: packUnorm2x16: round(clamp(c, 0, +1) * 65535.0)</p>
+<p>The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packUnorm2x16.xml">GLSL packUnorm2x16 man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaf7d2f7341a9eeb4a436929d6f9ad08f2"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL uint glm::packUnorm4x8 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00157.html#gafbab23070ca47932487d25332adc7d7c">vec4</a> const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. </p>
+<p>Then, the results are packed into the returned 32-bit unsigned integer.</p>
+<p>The conversion for component c of v to fixed point is done as follows: packUnorm4x8: round(clamp(c, 0, +1) * 255.0)</p>
+<p>The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packUnorm4x8.xml">GLSL packUnorm4x8 man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga5f4296dc5f12f0aa67ac05b8bb322483"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL uvec2 glm::unpackDouble2x32 </td>
+ <td>(</td>
+ <td class="paramtype">double </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns a two-component unsigned integer vector representation of v. </p>
+<p>The bit-level representation of v is preserved. The first component of the vector contains the 32 least significant bits of the double; the second component consists the 32 most significant bits.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackDouble2x32.xml">GLSL unpackDouble2x32 man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaf59b52e6b28da9335322c4ae19b5d745"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vec2 glm::unpackHalf2x16 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a> </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns a two-component floating-point vector with components obtained by unpacking a 32-bit unsigned integer into a pair of 16-bit values, interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification, and converting them to 32-bit floating-point values. </p>
+<p>The first component of the vector is obtained from the 16 least-significant bits of v; the second component is obtained from the 16 most-significant bits of v.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackHalf2x16.xml">GLSL unpackHalf2x16 man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gacd8f8971a3fe28418be0d0fa1f786b38"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vec2 glm::unpackSnorm2x16 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a> </td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. </p>
+<p>Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.</p>
+<p>The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm2x16: clamp(f / 32767.0, -1, +1)</p>
+<p>The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackSnorm2x16.xml">GLSL unpackSnorm2x16 man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga2db488646d48b7c43d3218954523fe82"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vec4 glm::unpackSnorm4x8 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a> </td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. </p>
+<p>Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.</p>
+<p>The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm4x8: clamp(f / 127.0, -1, +1)</p>
+<p>The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackSnorm4x8.xml">GLSL unpackSnorm4x8 man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga1f66188e5d65afeb9ffba1ad971e4007"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vec2 glm::unpackUnorm2x16 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a> </td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. </p>
+<p>Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.</p>
+<p>The conversion for unpacked fixed-point value f to floating point is done as follows: unpackUnorm2x16: f / 65535.0</p>
+<p>The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackUnorm2x16.xml">GLSL unpackUnorm2x16 man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga7f903259150b67e9466f5f8edffcd197"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vec4 glm::unpackUnorm4x8 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a> </td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. </p>
+<p>Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.</p>
+<p>The conversion for unpacked fixed-point value f to floating point is done as follows: unpackUnorm4x8: f / 255.0</p>
+<p>The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackUnorm4x8.xml">GLSL unpackUnorm4x8 man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00152.html b/src/third_party/glm/doc/api/a00152.html
new file mode 100644
index 0000000..a7cc702
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00152.html
@@ -0,0 +1,532 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: Angle and Trigonometry Functions</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">Angle and Trigonometry Functions<div class="ingroups"><a class="el" href="a00156.html">GLM Core</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga58ad259b788528fe0a4bd2eeb5e381cc"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga58ad259b788528fe0a4bd2eeb5e381cc"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00152.html#ga58ad259b788528fe0a4bd2eeb5e381cc">acos</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:ga58ad259b788528fe0a4bd2eeb5e381cc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3f368ad3e1883b60748ca2634d816104"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga3f368ad3e1883b60748ca2634d816104"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00152.html#ga3f368ad3e1883b60748ca2634d816104">acosh</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:ga3f368ad3e1883b60748ca2634d816104"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga88e29b8289e882859d76a25798dd9490"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga88e29b8289e882859d76a25798dd9490"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00152.html#ga88e29b8289e882859d76a25798dd9490">asin</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:ga88e29b8289e882859d76a25798dd9490"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga72bf44c1984e1afb63acf821ba33cac7"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga72bf44c1984e1afb63acf821ba33cac7"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00152.html#ga72bf44c1984e1afb63acf821ba33cac7">asinh</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:ga72bf44c1984e1afb63acf821ba33cac7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga461e769acb8b8cb695a5a89334546611"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga461e769acb8b8cb695a5a89334546611"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00152.html#ga461e769acb8b8cb695a5a89334546611">atan</a> (vecType< T, P > const &y, vecType< T, P > const &x)</td></tr>
+<tr class="separator:ga461e769acb8b8cb695a5a89334546611"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae8f22458bba8f2321ceb1bfc4a543216"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gae8f22458bba8f2321ceb1bfc4a543216"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00152.html#gae8f22458bba8f2321ceb1bfc4a543216">atan</a> (vecType< T, P > const &y_over_x)</td></tr>
+<tr class="separator:gae8f22458bba8f2321ceb1bfc4a543216"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaffa8decdd8620759f4e6fe4834768b87"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gaffa8decdd8620759f4e6fe4834768b87"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00152.html#gaffa8decdd8620759f4e6fe4834768b87">atanh</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:gaffa8decdd8620759f4e6fe4834768b87"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga728fd86f14609e37d83f82429995b7b3"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga728fd86f14609e37d83f82429995b7b3"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00152.html#ga728fd86f14609e37d83f82429995b7b3">cos</a> (vecType< T, P > const &angle)</td></tr>
+<tr class="separator:ga728fd86f14609e37d83f82429995b7b3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga660582a4e5e843b6c1cd535777e8c295"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga660582a4e5e843b6c1cd535777e8c295"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00152.html#ga660582a4e5e843b6c1cd535777e8c295">cosh</a> (vecType< T, P > const &angle)</td></tr>
+<tr class="separator:ga660582a4e5e843b6c1cd535777e8c295"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gabccdcc282134fd62af0ff3d6e4bb21f1"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gabccdcc282134fd62af0ff3d6e4bb21f1"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00152.html#gabccdcc282134fd62af0ff3d6e4bb21f1">degrees</a> (vecType< T, P > const &radians)</td></tr>
+<tr class="separator:gabccdcc282134fd62af0ff3d6e4bb21f1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafffb5e533f75318bdf4e0967d8a6c05c"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gafffb5e533f75318bdf4e0967d8a6c05c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00152.html#gafffb5e533f75318bdf4e0967d8a6c05c">radians</a> (vecType< T, P > const &degrees)</td></tr>
+<tr class="separator:gafffb5e533f75318bdf4e0967d8a6c05c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4a0ddceb6b1e64ce0e4da209dcb021d5"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga4a0ddceb6b1e64ce0e4da209dcb021d5"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00152.html#ga4a0ddceb6b1e64ce0e4da209dcb021d5">sin</a> (vecType< T, P > const &angle)</td></tr>
+<tr class="separator:ga4a0ddceb6b1e64ce0e4da209dcb021d5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad8f89c12efe6f8d3ae8046625b266254"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gad8f89c12efe6f8d3ae8046625b266254"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00152.html#gad8f89c12efe6f8d3ae8046625b266254">sinh</a> (vecType< T, P > const &angle)</td></tr>
+<tr class="separator:gad8f89c12efe6f8d3ae8046625b266254"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab3ae890c38b7d3aa4d5e00998fd296b2"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gab3ae890c38b7d3aa4d5e00998fd296b2"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00152.html#gab3ae890c38b7d3aa4d5e00998fd296b2">tan</a> (vecType< T, P > const &angle)</td></tr>
+<tr class="separator:gab3ae890c38b7d3aa4d5e00998fd296b2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga234e904a0075f88654a594b5f837711f"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga234e904a0075f88654a594b5f837711f"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00152.html#ga234e904a0075f88654a594b5f837711f">tanh</a> (vecType< T, P > const &angle)</td></tr>
+<tr class="separator:ga234e904a0075f88654a594b5f837711f"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Function parameters specified as angle are assumed to be in units of radians. </p>
+<p>In no case will any of these functions result in a divide by zero error. If the divisor of a ratio is 0, then results will be undefined.</p>
+<p>These all operate component-wise. The description is per component. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga58ad259b788528fe0a4bd2eeb5e381cc"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::acos </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Arc cosine. </p>
+<p>Returns an angle whose sine is x. The range of values returned by this function is [0, PI]. Results are undefined if |x| > 1.</p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/acos.xml">GLSL acos man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga3f368ad3e1883b60748ca2634d816104"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::acosh </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Arc hyperbolic cosine; returns the non-negative inverse of cosh. </p>
+<p>Results are undefined if x < 1.</p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/acosh.xml">GLSL acosh man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga88e29b8289e882859d76a25798dd9490"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::asin </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Arc sine. </p>
+<p>Returns an angle whose sine is x. The range of values returned by this function is [-PI/2, PI/2]. Results are undefined if |x| > 1.</p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/asin.xml">GLSL asin man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga72bf44c1984e1afb63acf821ba33cac7"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::asinh </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Arc hyperbolic sine; returns the inverse of sinh. </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/asinh.xml">GLSL asinh man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga461e769acb8b8cb695a5a89334546611"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::atan </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Arc tangent. </p>
+<p>Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0.</p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/atan.xml">GLSL atan man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> </dd></dl>
+
+<p>Referenced by <a class="el" href="a00016_source.html#l00052">glm::atan2()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gae8f22458bba8f2321ceb1bfc4a543216"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::atan </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>y_over_x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Arc tangent. </p>
+<p>Returns an angle whose tangent is y_over_x. The range of values returned by this function is [-PI/2, PI/2].</p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/atan.xml">GLSL atan man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaffa8decdd8620759f4e6fe4834768b87"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::atanh </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Arc hyperbolic tangent; returns the inverse of tanh. </p>
+<p>Results are undefined if abs(x) >= 1.</p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/atanh.xml">GLSL atanh man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga728fd86f14609e37d83f82429995b7b3"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::cos </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>angle</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>The standard trigonometric cosine function. </p>
+<p>The values returned by this function will range from [-1, 1].</p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/cos.xml">GLSL cos man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga660582a4e5e843b6c1cd535777e8c295"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::cosh </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>angle</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the hyperbolic cosine function, (exp(x) + exp(-x)) / 2. </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/cosh.xml">GLSL cosh man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gabccdcc282134fd62af0ff3d6e4bb21f1"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL GLM_CONSTEXPR vecType<T, P> glm::degrees </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>radians</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Converts radians to degrees and returns the result. </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/degrees.xml">GLSL degrees man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gafffb5e533f75318bdf4e0967d8a6c05c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL GLM_CONSTEXPR vecType<T, P> glm::radians </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>degrees</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Converts degrees to radians and returns the result. </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/radians.xml">GLSL radians man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga4a0ddceb6b1e64ce0e4da209dcb021d5"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::sin </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>angle</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>The standard trigonometric sine function. </p>
+<p>The values returned by this function will range from [-1, 1].</p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/sin.xml">GLSL sin man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gad8f89c12efe6f8d3ae8046625b266254"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::sinh </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>angle</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the hyperbolic sine function, (exp(x) - exp(-x)) / 2. </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/sinh.xml">GLSL sinh man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gab3ae890c38b7d3aa4d5e00998fd296b2"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::tan </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>angle</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>The standard trigonometric tangent function. </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/tan.xml">GLSL tan man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga234e904a0075f88654a594b5f837711f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::tanh </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>angle</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the hyperbolic tangent function, sinh(angle) / cosh(angle) </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/tanh.xml">GLSL tanh man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00153.html b/src/third_party/glm/doc/api/a00153.html
new file mode 100644
index 0000000..f915e30
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00153.html
@@ -0,0 +1,393 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: Vector Relational Functions</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">Vector Relational Functions<div class="ingroups"><a class="el" href="a00156.html">GLM Core</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga14bbc94f2ae2774a1d64d91f8767773e"><td class="memTemplParams" colspan="2">template<precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga14bbc94f2ae2774a1d64d91f8767773e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00153.html#ga14bbc94f2ae2774a1d64d91f8767773e">all</a> (vecType< bool, P > const &v)</td></tr>
+<tr class="separator:ga14bbc94f2ae2774a1d64d91f8767773e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga632a2644532d9332011c8860400d30b2"><td class="memTemplParams" colspan="2">template<precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga632a2644532d9332011c8860400d30b2"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00153.html#ga632a2644532d9332011c8860400d30b2">any</a> (vecType< bool, P > const &v)</td></tr>
+<tr class="separator:ga632a2644532d9332011c8860400d30b2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga39c80d8baf49b0ce69f2bb22d45b3801"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga39c80d8baf49b0ce69f2bb22d45b3801"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00153.html#ga39c80d8baf49b0ce69f2bb22d45b3801">equal</a> (vecType< T, P > const &x, vecType< T, P > const &y)</td></tr>
+<tr class="separator:ga39c80d8baf49b0ce69f2bb22d45b3801"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gadd80263161a308462d3e3e287e79cccd"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gadd80263161a308462d3e3e287e79cccd"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00153.html#gadd80263161a308462d3e3e287e79cccd">greaterThan</a> (vecType< T, P > const &x, vecType< T, P > const &y)</td></tr>
+<tr class="separator:gadd80263161a308462d3e3e287e79cccd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaee7e101f8cc4ea43924f14dcdeb2ef26"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gaee7e101f8cc4ea43924f14dcdeb2ef26"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00153.html#gaee7e101f8cc4ea43924f14dcdeb2ef26">greaterThanEqual</a> (vecType< T, P > const &x, vecType< T, P > const &y)</td></tr>
+<tr class="separator:gaee7e101f8cc4ea43924f14dcdeb2ef26"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6261970937a70b0b747ae0d3ade1c188"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga6261970937a70b0b747ae0d3ade1c188"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00153.html#ga6261970937a70b0b747ae0d3ade1c188">lessThan</a> (vecType< T, P > const &x, vecType< T, P > const &y)</td></tr>
+<tr class="separator:ga6261970937a70b0b747ae0d3ade1c188"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaaf1d88119f11200c32011de7c5ec0102"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gaaf1d88119f11200c32011de7c5ec0102"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00153.html#gaaf1d88119f11200c32011de7c5ec0102">lessThanEqual</a> (vecType< T, P > const &x, vecType< T, P > const &y)</td></tr>
+<tr class="separator:gaaf1d88119f11200c32011de7c5ec0102"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4329ecbc2ef012c9ec704bd09da1f177"><td class="memTemplParams" colspan="2">template<precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga4329ecbc2ef012c9ec704bd09da1f177"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00153.html#ga4329ecbc2ef012c9ec704bd09da1f177">not_</a> (vecType< bool, P > const &v)</td></tr>
+<tr class="separator:ga4329ecbc2ef012c9ec704bd09da1f177"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5aca2b745e5eb0096716bbc394846309"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga5aca2b745e5eb0096716bbc394846309"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00153.html#ga5aca2b745e5eb0096716bbc394846309">notEqual</a> (vecType< T, P > const &x, vecType< T, P > const &y)</td></tr>
+<tr class="separator:ga5aca2b745e5eb0096716bbc394846309"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Relational and equality operators (<, <=, >, >=, ==, !=) are defined to operate on scalars and produce scalar Boolean results. </p>
+<p>For vector results, use the following built-in functions.</p>
+<p>In all cases, the sizes of all the input and return vectors for any particular call must match. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga14bbc94f2ae2774a1d64d91f8767773e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL bool glm::all </td>
+ <td>(</td>
+ <td class="paramtype">vecType< bool, P > const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns true if all components of x are true. </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">vecType</td><td>Boolean vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/all.xml">GLSL all man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga632a2644532d9332011c8860400d30b2"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL bool glm::any </td>
+ <td>(</td>
+ <td class="paramtype">vecType< bool, P > const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns true if any component of x is true. </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">vecType</td><td>Boolean vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/any.xml">GLSL any man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga39c80d8baf49b0ce69f2bb22d45b3801"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<bool, P> glm::equal </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the component-wise comparison of result x == y. </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">vecType</td><td>Floating-point, integer or boolean vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/equal.xml">GLSL equal man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gadd80263161a308462d3e3e287e79cccd"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<bool, P> glm::greaterThan </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the component-wise comparison of result x > y. </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">vecType</td><td>Floating-point or integer vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/greaterThan.xml">GLSL greaterThan man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaee7e101f8cc4ea43924f14dcdeb2ef26"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<bool, P> glm::greaterThanEqual </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the component-wise comparison of result x >= y. </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">vecType</td><td>Floating-point or integer vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/greaterThanEqual.xml">GLSL greaterThanEqual man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga6261970937a70b0b747ae0d3ade1c188"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<bool, P> glm::lessThan </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the component-wise comparison result of x < y. </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">vecType</td><td>Floating-point or integer vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/lessThan.xml">GLSL lessThan man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaaf1d88119f11200c32011de7c5ec0102"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<bool, P> glm::lessThanEqual </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the component-wise comparison of result x <= y. </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">vecType</td><td>Floating-point or integer vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/lessThanEqual.xml">GLSL lessThanEqual man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga4329ecbc2ef012c9ec704bd09da1f177"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<bool, P> glm::not_ </td>
+ <td>(</td>
+ <td class="paramtype">vecType< bool, P > const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the component-wise logical complement of x. </p>
+<p>/!\ Because of language incompatibilities between C++ and GLSL, GLM defines the function not but not_ instead.</p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">vecType</td><td>Boolean vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/not.xml">GLSL not man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga5aca2b745e5eb0096716bbc394846309"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<bool, P> glm::notEqual </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the component-wise comparison of result x != y. </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">vecType</td><td>Floating-point, integer or boolean vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/notEqual.xml">GLSL notEqual man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a> </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00154.html b/src/third_party/glm/doc/api/a00154.html
new file mode 100644
index 0000000..b6254a9
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00154.html
@@ -0,0 +1,103 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GTC Extensions (Stable)</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#groups">Modules</a> </div>
+ <div class="headertitle">
+<div class="title">GTC Extensions (Stable)</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:a00160"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html">GLM_GTC_bitfield</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00161"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00161.html">GLM_GTC_color_space</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00162"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00162.html">GLM_GTC_constants</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00163"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00163.html">GLM_GTC_epsilon</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00164"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00164.html">GLM_GTC_functions</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00165"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00165.html">GLM_GTC_integer</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00166"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00166.html">GLM_GTC_matrix_access</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00167"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html">GLM_GTC_matrix_integer</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00168"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00168.html">GLM_GTC_matrix_inverse</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00169"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00169.html">GLM_GTC_matrix_transform</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00170"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00170.html">GLM_GTC_noise</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00171"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html">GLM_GTC_packing</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00172"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00172.html">GLM_GTC_quaternion</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00173"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00173.html">GLM_GTC_random</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00174"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00174.html">GLM_GTC_reciprocal</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00175"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00175.html">GLM_GTC_round</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00176"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html">GLM_GTC_type_aligned</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00177"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html">GLM_GTC_type_precision</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00178"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00178.html">GLM_GTC_type_ptr</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00179"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00179.html">GLM_GTC_ulp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00180"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00180.html">GLM_GTC_vec1</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Functions and types that the GLSL specification doesn't define, but useful to have for a C++ program. </p>
+<p>GTC extensions aim to be stable.</p>
+<p>Even if it's highly unrecommended, it's possible to include all the extensions at once by including <<a class="el" href="a00023.html" title="GLM Core (Dependence) ">glm/ext.hpp</a>>. Otherwise, each extension needs to be included a specific file. </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00155.html b/src/third_party/glm/doc/api/a00155.html
new file mode 100644
index 0000000..f8d1cca
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00155.html
@@ -0,0 +1,177 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GTX Extensions (Experimental)</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#groups">Modules</a> </div>
+ <div class="headertitle">
+<div class="title">GTX Extensions (Experimental)</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:a00181"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00181.html">GLM_GTX_associated_min_max</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00182"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00182.html">GLM_GTX_bit</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00183"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00183.html">GLM_GTX_closest_point</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00184"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00184.html">GLM_GTX_color_space</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00185"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00185.html">GLM_GTX_color_space_YCoCg</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00186"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00186.html">GLM_GTX_common</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00187"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html">GLM_GTX_compatibility</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00188"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00188.html">GLM_GTX_component_wise</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00189"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00189.html">GLM_GTX_dual_quaternion</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00190"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00190.html">GLM_GTX_euler_angles</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00191"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00191.html">GLM_GTX_extend</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00192"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00192.html">GLM_GTX_extented_min_max</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00193"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00193.html">GLM_GTX_fast_exponential</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00194"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00194.html">GLM_GTX_fast_square_root</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00195"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00195.html">GLM_GTX_fast_trigonometry</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00196"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00196.html">GLM_GTX_gradient_paint</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00197"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00197.html">GLM_GTX_handed_coordinate_space</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00198"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00198.html">GLM_GTX_hash</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00199"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html">GLM_GTX_integer</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00200"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00200.html">GLM_GTX_intersect</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00201"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00201.html">GLM_GTX_io</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00202"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00202.html">GLM_GTX_log_base</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00203"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00203.html">GLM_GTX_matrix_cross_product</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00204"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html">GLM_GTX_matrix_decompose</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00205"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00205.html">GLM_GTX_matrix_interpolation</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00206"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00206.html">GLM_GTX_matrix_major_storage</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00207"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00207.html">GLM_GTX_matrix_operation</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00208"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00208.html">GLM_GTX_matrix_query</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00209"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html">GLM_GTX_matrix_transform_2d</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00210"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00210.html">GLM_GTX_mixed_producte</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00211"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html">GLM_GTX_norm</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00212"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00212.html">GLM_GTX_normal</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00213"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00213.html">GLM_GTX_normalize_dot</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00214"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html">GLM_GTX_number_precision</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00215"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00215.html">GLM_GTX_optimum_pow</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00216"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00216.html">GLM_GTX_orthonormalize</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00217"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html">GLM_GTX_perpendicular</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00218"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00218.html">GLM_GTX_polar_coordinates</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00219"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00219.html">GLM_GTX_projection</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00220"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00220.html">GLM_GTX_quaternion</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00221"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00221.html">GLM_GTX_range</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00222"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00222.html">GLM_GTX_raw_data</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00223"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00223.html">GLM_GTX_rotate_normalized_axis</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00224"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00224.html">GLM_GTX_rotate_vector</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00225"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00225.html">GLM_GTX_scalar_relational</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00226"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00226.html">GLM_GTX_simd_mat4</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00227"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00227.html">GLM_GTX_simd_quat</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00228"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html">GLM_GTX_simd_vec4</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00229"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00229.html">GLM_GTX_spline</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00230"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00230.html">GLM_GTX_std_based_type</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00231"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00231.html">GLM_GTX_string_cast</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00232"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00232.html">GLM_GTX_transform</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00233"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00233.html">GLM_GTX_transform2</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00234"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html">GLM_GTX_type_aligned</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00235"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00235.html">GLM_GTX_type_trait</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00236"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00236.html">GLM_GTX_vector_angle</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00237"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html">GLM_GTX_vector_query</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00238"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00238.html">GLM_GTX_wrap</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Functions and types that the GLSL specification doesn't define, but useful to have for a C++ program. </p>
+<p>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.</p>
+<p>Even if it's highly unrecommended, it's possible to include all the extensions at once by including <<a class="el" href="a00023.html" title="GLM Core (Dependence) ">glm/ext.hpp</a>>. Otherwise, each extension needs to be included a specific file. </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00156.html b/src/third_party/glm/doc/api/a00156.html
new file mode 100644
index 0000000..dfbc638
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00156.html
@@ -0,0 +1,84 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM Core</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#groups">Modules</a> </div>
+ <div class="headertitle">
+<div class="title">GLM Core</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:a00146"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00146.html">Common functions</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00147"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00147.html">Exponential functions</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00148"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00148.html">Geometric functions</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00149"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00149.html">Integer functions</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00150"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00150.html">Matrix functions</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00151"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00151.html">Floating-Point Pack and Unpack Functions</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00152"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html">Angle and Trigonometry Functions</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00153"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00153.html">Vector Relational Functions</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00157"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html">Types</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00158"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html">Precision types</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00159"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00159.html">Template types</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>The core of GLM, which implements exactly and only the GLSL specification to the degree possible. </p>
+<p>The GLM core consists of <a class="el" href="a00157.html">C++ types that mirror GLSL types</a> and C++ functions that mirror the GLSL functions. It also includes <a class="el" href="a00158.html">a set of precision-based types</a> that can be used in the appropriate functions. The C++ types are all based on a basic set of <a class="el" href="a00159.html">template types</a>.</p>
+<p>The best documentation for GLM Core is the current GLSL specification, <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.clean.pdf">version 4.2 (pdf file)</a>.</p>
+<p>GLM core functionnalities require <<a class="el" href="a00040.html" title="GLM Core ">glm/glm.hpp</a>> to be included to be used. </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00157.html b/src/third_party/glm/doc/api/a00157.html
new file mode 100644
index 0000000..8696d9e
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00157.html
@@ -0,0 +1,808 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: Types</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#groups">Modules</a> |
+<a href="#typedef-members">Typedefs</a> </div>
+ <div class="headertitle">
+<div class="title">Types<div class="ingroups"><a class="el" href="a00156.html">GLM Core</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:a00158"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html">Precision types</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ga0e46aaaccc5e713eac5bfbc8d6885a60"><td class="memItemLeft" align="right" valign="top">typedef highp_bvec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ga0e46aaaccc5e713eac5bfbc8d6885a60">bvec2</a></td></tr>
+<tr class="separator:ga0e46aaaccc5e713eac5bfbc8d6885a60"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga150731e2a148eff8752114a0e450505e"><td class="memItemLeft" align="right" valign="top">typedef highp_bvec3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ga150731e2a148eff8752114a0e450505e">bvec3</a></td></tr>
+<tr class="separator:ga150731e2a148eff8752114a0e450505e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga444e8f61bfb3a6f037d019ac6933f8c6"><td class="memItemLeft" align="right" valign="top">typedef highp_bvec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ga444e8f61bfb3a6f037d019ac6933f8c6">bvec4</a></td></tr>
+<tr class="separator:ga444e8f61bfb3a6f037d019ac6933f8c6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac7f51e23c8802d867f564dfd146bdb44"><td class="memItemLeft" align="right" valign="top">typedef highp_dmat2x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#gac7f51e23c8802d867f564dfd146bdb44">dmat2</a></td></tr>
+<tr class="separator:gac7f51e23c8802d867f564dfd146bdb44"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gacc27b39853a2ecb538c8b3afc20c359e"><td class="memItemLeft" align="right" valign="top">typedef highp_dmat2x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#gacc27b39853a2ecb538c8b3afc20c359e">dmat2x2</a></td></tr>
+<tr class="separator:gacc27b39853a2ecb538c8b3afc20c359e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1cb3c561a32f0864733dfaf97c71f0c7"><td class="memItemLeft" align="right" valign="top">typedef highp_dmat2x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ga1cb3c561a32f0864733dfaf97c71f0c7">dmat2x3</a></td></tr>
+<tr class="separator:ga1cb3c561a32f0864733dfaf97c71f0c7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaddd230c88fbd6ec33242329be3a1b738"><td class="memItemLeft" align="right" valign="top">typedef highp_dmat2x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#gaddd230c88fbd6ec33242329be3a1b738">dmat2x4</a></td></tr>
+<tr class="separator:gaddd230c88fbd6ec33242329be3a1b738"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae174ff65e148bb7dec4bf10a63cb46ff"><td class="memItemLeft" align="right" valign="top">typedef highp_dmat3x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#gae174ff65e148bb7dec4bf10a63cb46ff">dmat3</a></td></tr>
+<tr class="separator:gae174ff65e148bb7dec4bf10a63cb46ff"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaec22f44dddbdadfe5dfca68eb3457ea8"><td class="memItemLeft" align="right" valign="top">typedef highp_dmat3x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#gaec22f44dddbdadfe5dfca68eb3457ea8">dmat3x2</a></td></tr>
+<tr class="separator:gaec22f44dddbdadfe5dfca68eb3457ea8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac44263f56ff3cbf0a9cc4e2405d5ecb8"><td class="memItemLeft" align="right" valign="top">typedef highp_dmat3x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#gac44263f56ff3cbf0a9cc4e2405d5ecb8">dmat3x3</a></td></tr>
+<tr class="separator:gac44263f56ff3cbf0a9cc4e2405d5ecb8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga38d9bfca882ec542b1928cf77b5c2091"><td class="memItemLeft" align="right" valign="top">typedef highp_dmat3x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ga38d9bfca882ec542b1928cf77b5c2091">dmat3x4</a></td></tr>
+<tr class="separator:ga38d9bfca882ec542b1928cf77b5c2091"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga97b38ea24e9ebf58eac04a8d99dc3e27"><td class="memItemLeft" align="right" valign="top">typedef highp_dmat4x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ga97b38ea24e9ebf58eac04a8d99dc3e27">dmat4</a></td></tr>
+<tr class="separator:ga97b38ea24e9ebf58eac04a8d99dc3e27"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6ddab280c735a2139133b4164b99a68a"><td class="memItemLeft" align="right" valign="top">typedef highp_dmat4x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ga6ddab280c735a2139133b4164b99a68a">dmat4x2</a></td></tr>
+<tr class="separator:ga6ddab280c735a2139133b4164b99a68a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab6c8974496fc7c72dad09219118ba89e"><td class="memItemLeft" align="right" valign="top">typedef highp_dmat4x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#gab6c8974496fc7c72dad09219118ba89e">dmat4x3</a></td></tr>
+<tr class="separator:gab6c8974496fc7c72dad09219118ba89e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga41c2da87ca627c1b2da5e895435a508e"><td class="memItemLeft" align="right" valign="top">typedef highp_dmat4x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ga41c2da87ca627c1b2da5e895435a508e">dmat4x4</a></td></tr>
+<tr class="separator:ga41c2da87ca627c1b2da5e895435a508e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga15ade901680b29b78c1f9d1796db6e0e"><td class="memItemLeft" align="right" valign="top">typedef highp_dvec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ga15ade901680b29b78c1f9d1796db6e0e">dvec2</a></td></tr>
+<tr class="separator:ga15ade901680b29b78c1f9d1796db6e0e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gabebd0c7e3c5cd337d95c313c5e8b8db4"><td class="memItemLeft" align="right" valign="top">typedef highp_dvec3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#gabebd0c7e3c5cd337d95c313c5e8b8db4">dvec3</a></td></tr>
+<tr class="separator:gabebd0c7e3c5cd337d95c313c5e8b8db4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9503f809789bda7e8852a6abde3ae5c1"><td class="memItemLeft" align="right" valign="top">typedef highp_dvec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ga9503f809789bda7e8852a6abde3ae5c1">dvec4</a></td></tr>
+<tr class="separator:ga9503f809789bda7e8852a6abde3ae5c1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2ab812bd103527e2d6c62c2e2f5ee78f"><td class="memItemLeft" align="right" valign="top">typedef highp_ivec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ga2ab812bd103527e2d6c62c2e2f5ee78f">ivec2</a></td></tr>
+<tr class="separator:ga2ab812bd103527e2d6c62c2e2f5ee78f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga34aee73784bcc247d426250540c1911c"><td class="memItemLeft" align="right" valign="top">typedef highp_ivec3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ga34aee73784bcc247d426250540c1911c">ivec3</a></td></tr>
+<tr class="separator:ga34aee73784bcc247d426250540c1911c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaaa26c41d168dc00be0fe55f4d0a34224"><td class="memItemLeft" align="right" valign="top">typedef highp_ivec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#gaaa26c41d168dc00be0fe55f4d0a34224">ivec4</a></td></tr>
+<tr class="separator:gaaa26c41d168dc00be0fe55f4d0a34224"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6e30cfba068ebc3c71fe1f8b3110e450"><td class="memItemLeft" align="right" valign="top">typedef mat2x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ga6e30cfba068ebc3c71fe1f8b3110e450">mat2</a></td></tr>
+<tr class="separator:ga6e30cfba068ebc3c71fe1f8b3110e450"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0c84b211a5730357b63c6d2e4fb696d5"><td class="memItemLeft" align="right" valign="top">typedef highp_mat2x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ga0c84b211a5730357b63c6d2e4fb696d5">mat2x2</a></td></tr>
+<tr class="separator:ga0c84b211a5730357b63c6d2e4fb696d5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafb063d734266e92915d87f8943560471"><td class="memItemLeft" align="right" valign="top">typedef highp_mat2x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#gafb063d734266e92915d87f8943560471">mat2x3</a></td></tr>
+<tr class="separator:gafb063d734266e92915d87f8943560471"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4d2ac1a80c36fb5a1d15914035f792ac"><td class="memItemLeft" align="right" valign="top">typedef highp_mat2x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ga4d2ac1a80c36fb5a1d15914035f792ac">mat2x4</a></td></tr>
+<tr class="separator:ga4d2ac1a80c36fb5a1d15914035f792ac"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6dd3ec98a548755676267e59142911f8"><td class="memItemLeft" align="right" valign="top">typedef mat3x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ga6dd3ec98a548755676267e59142911f8">mat3</a></td></tr>
+<tr class="separator:ga6dd3ec98a548755676267e59142911f8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3839ca29d011a80ff3ede7f22ba602a4"><td class="memItemLeft" align="right" valign="top">typedef highp_mat3x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ga3839ca29d011a80ff3ede7f22ba602a4">mat3x2</a></td></tr>
+<tr class="separator:ga3839ca29d011a80ff3ede7f22ba602a4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga378921b6a07bcdad946858b340f69ab1"><td class="memItemLeft" align="right" valign="top">typedef highp_mat3x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ga378921b6a07bcdad946858b340f69ab1">mat3x3</a></td></tr>
+<tr class="separator:ga378921b6a07bcdad946858b340f69ab1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7876e0c3e3fcc3e2f4c0462c152e87cf"><td class="memItemLeft" align="right" valign="top">typedef highp_mat3x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ga7876e0c3e3fcc3e2f4c0462c152e87cf">mat3x4</a></td></tr>
+<tr class="separator:ga7876e0c3e3fcc3e2f4c0462c152e87cf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gade0eb47c01f79384a6f38017ede17446"><td class="memItemLeft" align="right" valign="top">typedef mat4x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#gade0eb47c01f79384a6f38017ede17446">mat4</a></td></tr>
+<tr class="separator:gade0eb47c01f79384a6f38017ede17446"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1b3f6a5cbc17362141f9781262ed838f"><td class="memItemLeft" align="right" valign="top">typedef highp_mat4x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ga1b3f6a5cbc17362141f9781262ed838f">mat4x2</a></td></tr>
+<tr class="separator:ga1b3f6a5cbc17362141f9781262ed838f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gacd9ff3b943b3d8bda4f4b388320420fd"><td class="memItemLeft" align="right" valign="top">typedef highp_mat4x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#gacd9ff3b943b3d8bda4f4b388320420fd">mat4x3</a></td></tr>
+<tr class="separator:gacd9ff3b943b3d8bda4f4b388320420fd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga089315d5a0c20ac6eaa17a854bbd2e81"><td class="memItemLeft" align="right" valign="top">typedef highp_mat4x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ga089315d5a0c20ac6eaa17a854bbd2e81">mat4x4</a></td></tr>
+<tr class="separator:ga089315d5a0c20ac6eaa17a854bbd2e81"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9bcffa2d49f28d16f680757b5c0e7c84"><td class="memItemLeft" align="right" valign="top">typedef highp_uvec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ga9bcffa2d49f28d16f680757b5c0e7c84">uvec2</a></td></tr>
+<tr class="separator:ga9bcffa2d49f28d16f680757b5c0e7c84"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae85537b672ffe0b3218cbdf1823e1c72"><td class="memItemLeft" align="right" valign="top">typedef highp_uvec3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#gae85537b672ffe0b3218cbdf1823e1c72">uvec3</a></td></tr>
+<tr class="separator:gae85537b672ffe0b3218cbdf1823e1c72"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa7c3a0e7ae50c34c3290415c115f251e"><td class="memItemLeft" align="right" valign="top">typedef highp_uvec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#gaa7c3a0e7ae50c34c3290415c115f251e">uvec4</a></td></tr>
+<tr class="separator:gaa7c3a0e7ae50c34c3290415c115f251e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga09d0200e8ff86391d8804b4fefd5f1da"><td class="memItemLeft" align="right" valign="top">typedef highp_vec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ga09d0200e8ff86391d8804b4fefd5f1da">vec2</a></td></tr>
+<tr class="separator:ga09d0200e8ff86391d8804b4fefd5f1da"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa8ea2429bb3cb41a715258a447f39897"><td class="memItemLeft" align="right" valign="top">typedef highp_vec3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#gaa8ea2429bb3cb41a715258a447f39897">vec3</a></td></tr>
+<tr class="separator:gaa8ea2429bb3cb41a715258a447f39897"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafbab23070ca47932487d25332adc7d7c"><td class="memItemLeft" align="right" valign="top">typedef highp_vec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#gafbab23070ca47932487d25332adc7d7c">vec4</a></td></tr>
+<tr class="separator:gafbab23070ca47932487d25332adc7d7c"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>The standard types defined by the specification. </p>
+<p>These types are all typedefs of more generalized, template types. To see the definition of these template types, go to <a class="el" href="a00159.html">Template types</a>. </p>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a class="anchor" id="ga0e46aaaccc5e713eac5bfbc8d6885a60"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef highp_bvec2 bvec2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 components vector of boolean. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00564">564</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga150731e2a148eff8752114a0e450505e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef highp_bvec3 bvec3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 components vector of boolean. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00569">569</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga444e8f61bfb3a6f037d019ac6933f8c6"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef highp_bvec4 bvec4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 components vector of boolean. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00574">574</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gac7f51e23c8802d867f564dfd146bdb44"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef highp_dmat2x2 dmat2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 * 2 matrix of double-precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00707">707</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gacc27b39853a2ecb538c8b3afc20c359e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef highp_dmat2x2 dmat2x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 * 2 matrix of double-precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00722">722</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga1cb3c561a32f0864733dfaf97c71f0c7"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef highp_dmat2x3 dmat2x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 * 3 matrix of double-precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00727">727</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaddd230c88fbd6ec33242329be3a1b738"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef highp_dmat2x4 dmat2x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 * 4 matrix of double-precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00732">732</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gae174ff65e148bb7dec4bf10a63cb46ff"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef highp_dmat3x3 dmat3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 * 3 matrix of double-precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00712">712</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaec22f44dddbdadfe5dfca68eb3457ea8"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef highp_dmat3x2 dmat3x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 * 2 matrix of double-precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00737">737</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gac44263f56ff3cbf0a9cc4e2405d5ecb8"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef highp_dmat3x3 dmat3x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 * 3 matrix of double-precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00742">742</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga38d9bfca882ec542b1928cf77b5c2091"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef highp_dmat3x4 dmat3x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 * 4 matrix of double-precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00747">747</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga97b38ea24e9ebf58eac04a8d99dc3e27"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef highp_dmat4x4 dmat4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 * 4 matrix of double-precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00717">717</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga6ddab280c735a2139133b4164b99a68a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef highp_dmat4x2 dmat4x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 * 2 matrix of double-precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00752">752</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gab6c8974496fc7c72dad09219118ba89e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef highp_dmat4x3 dmat4x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 * 3 matrix of double-precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00757">757</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga41c2da87ca627c1b2da5e895435a508e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef highp_dmat4x4 dmat4x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 * 4 matrix of double-precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00762">762</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga15ade901680b29b78c1f9d1796db6e0e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef highp_dvec2 dvec2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 components vector of double-precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00483">483</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gabebd0c7e3c5cd337d95c313c5e8b8db4"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef highp_dvec3 dvec3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 components vector of double-precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00488">488</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga9503f809789bda7e8852a6abde3ae5c1"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef highp_dvec4 dvec4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 components vector of double-precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00493">493</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga2ab812bd103527e2d6c62c2e2f5ee78f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef highp_ivec2 ivec2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 components vector of signed integer numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00510">510</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga34aee73784bcc247d426250540c1911c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef highp_ivec3 ivec3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 components vector of signed integer numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00515">515</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaaa26c41d168dc00be0fe55f4d0a34224"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef highp_ivec4 ivec4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 components vector of signed integer numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00520">520</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga6e30cfba068ebc3c71fe1f8b3110e450"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef mat2x2 mat2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 columns of 2 components matrix of floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00406">406</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga0c84b211a5730357b63c6d2e4fb696d5"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef highp_mat2x2 mat2x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 columns of 2 components matrix of floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00359">359</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gafb063d734266e92915d87f8943560471"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef highp_mat2x3 mat2x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 columns of 3 components matrix of floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00364">364</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga4d2ac1a80c36fb5a1d15914035f792ac"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef highp_mat2x4 mat2x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 columns of 4 components matrix of floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00369">369</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga6dd3ec98a548755676267e59142911f8"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef mat3x3 mat3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 columns of 3 components matrix of floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00411">411</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga3839ca29d011a80ff3ede7f22ba602a4"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef highp_mat3x2 mat3x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 columns of 2 components matrix of floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00374">374</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga378921b6a07bcdad946858b340f69ab1"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef highp_mat3x3 mat3x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 columns of 3 components matrix of floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00379">379</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga7876e0c3e3fcc3e2f4c0462c152e87cf"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef highp_mat3x4 mat3x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 columns of 4 components matrix of floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00384">384</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gade0eb47c01f79384a6f38017ede17446"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef mat4x4 mat4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 columns of 4 components matrix of floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00416">416</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga1b3f6a5cbc17362141f9781262ed838f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef highp_mat4x2 mat4x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 columns of 2 components matrix of floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00389">389</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gacd9ff3b943b3d8bda4f4b388320420fd"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef highp_mat4x3 mat4x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 columns of 3 components matrix of floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00394">394</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga089315d5a0c20ac6eaa17a854bbd2e81"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef highp_mat4x4 mat4x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 columns of 4 components matrix of floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00399">399</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga9bcffa2d49f28d16f680757b5c0e7c84"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef highp_uvec2 uvec2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 components vector of unsigned integer numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00537">537</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gae85537b672ffe0b3218cbdf1823e1c72"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef highp_uvec3 uvec3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 components vector of unsigned integer numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00542">542</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaa7c3a0e7ae50c34c3290415c115f251e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef highp_uvec4 uvec4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 components vector of unsigned integer numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00547">547</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga09d0200e8ff86391d8804b4fefd5f1da"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef highp_vec2 vec2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 components vector of floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00456">456</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaa8ea2429bb3cb41a715258a447f39897"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef highp_vec3 vec3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 components vector of floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00461">461</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gafbab23070ca47932487d25332adc7d7c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef highp_vec4 vec4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 components vector of floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00466">466</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00158.html b/src/third_party/glm/doc/api/a00158.html
new file mode 100644
index 0000000..9e10add
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00158.html
@@ -0,0 +1,2827 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: Precision types</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#typedef-members">Typedefs</a> </div>
+ <div class="headertitle">
+<div class="title">Precision types<div class="ingroups"><a class="el" href="a00156.html">GLM Core</a><a class="el" href="a00156.html">GLM Core</a> » | <a class="el" href="a00157.html">Types</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ga829f39950549881a08c534946c0487e1"><td class="memItemLeft" align="right" valign="top">typedef tvec2< bool, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga829f39950549881a08c534946c0487e1">highp_bvec2</a></td></tr>
+<tr class="separator:ga829f39950549881a08c534946c0487e1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaca7c2a58eb926799c30ad547a290fccf"><td class="memItemLeft" align="right" valign="top">typedef tvec3< bool, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gaca7c2a58eb926799c30ad547a290fccf">highp_bvec3</a></td></tr>
+<tr class="separator:gaca7c2a58eb926799c30ad547a290fccf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae5f9c57d04b338c9a51a9af39e50795b"><td class="memItemLeft" align="right" valign="top">typedef tvec4< bool, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gae5f9c57d04b338c9a51a9af39e50795b">highp_bvec4</a></td></tr>
+<tr class="separator:gae5f9c57d04b338c9a51a9af39e50795b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga65ae7d3b23155712ed8cbd3300be4ec8"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga65ae7d3b23155712ed8cbd3300be4ec8">highp_dmat2</a></td></tr>
+<tr class="separator:ga65ae7d3b23155712ed8cbd3300be4ec8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga518f28c64881fafaaf14ec0d867a9bba"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga518f28c64881fafaaf14ec0d867a9bba">highp_dmat2x2</a></td></tr>
+<tr class="separator:ga518f28c64881fafaaf14ec0d867a9bba"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf98afd25f7e3e8f1d73bca020d0d8ea6"><td class="memItemLeft" align="right" valign="top">typedef tmat2x3< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gaf98afd25f7e3e8f1d73bca020d0d8ea6">highp_dmat2x3</a></td></tr>
+<tr class="separator:gaf98afd25f7e3e8f1d73bca020d0d8ea6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac1c87c16d6dcb7449bc3c779ccdc5c30"><td class="memItemLeft" align="right" valign="top">typedef tmat2x4< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gac1c87c16d6dcb7449bc3c779ccdc5c30">highp_dmat2x4</a></td></tr>
+<tr class="separator:gac1c87c16d6dcb7449bc3c779ccdc5c30"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga605c7863807ac2e9c2db4cf13405f34d"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga605c7863807ac2e9c2db4cf13405f34d">highp_dmat3</a></td></tr>
+<tr class="separator:ga605c7863807ac2e9c2db4cf13405f34d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab2d4fd5cd286baff8364a7a3f60c8a21"><td class="memItemLeft" align="right" valign="top">typedef tmat3x2< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gab2d4fd5cd286baff8364a7a3f60c8a21">highp_dmat3x2</a></td></tr>
+<tr class="separator:gab2d4fd5cd286baff8364a7a3f60c8a21"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2d7911a43241a5ce2472421255e5930f"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga2d7911a43241a5ce2472421255e5930f">highp_dmat3x3</a></td></tr>
+<tr class="separator:ga2d7911a43241a5ce2472421255e5930f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga51bfd2f3f5a12464d5934323db9116e7"><td class="memItemLeft" align="right" valign="top">typedef tmat3x4< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga51bfd2f3f5a12464d5934323db9116e7">highp_dmat3x4</a></td></tr>
+<tr class="separator:ga51bfd2f3f5a12464d5934323db9116e7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4607e33c40a3c03256e0bf9c586b456a"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga4607e33c40a3c03256e0bf9c586b456a">highp_dmat4</a></td></tr>
+<tr class="separator:ga4607e33c40a3c03256e0bf9c586b456a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5ee028f50629bf451973b3a910973357"><td class="memItemLeft" align="right" valign="top">typedef tmat4x2< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga5ee028f50629bf451973b3a910973357">highp_dmat4x2</a></td></tr>
+<tr class="separator:ga5ee028f50629bf451973b3a910973357"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafe7eea5b2a20477b5634e340ea5ec28a"><td class="memItemLeft" align="right" valign="top">typedef tmat4x3< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gafe7eea5b2a20477b5634e340ea5ec28a">highp_dmat4x3</a></td></tr>
+<tr class="separator:gafe7eea5b2a20477b5634e340ea5ec28a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga83ab0b8b8b50cbf945237dc8f5322432"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga83ab0b8b8b50cbf945237dc8f5322432">highp_dmat4x4</a></td></tr>
+<tr class="separator:ga83ab0b8b8b50cbf945237dc8f5322432"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga435eb408e8dfa4f7185368109d432c14"><td class="memItemLeft" align="right" valign="top">typedef tvec2< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga435eb408e8dfa4f7185368109d432c14">highp_dvec2</a></td></tr>
+<tr class="separator:ga435eb408e8dfa4f7185368109d432c14"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga01d2c9b292e27518e4d6f8442607e8aa"><td class="memItemLeft" align="right" valign="top">typedef tvec3< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga01d2c9b292e27518e4d6f8442607e8aa">highp_dvec3</a></td></tr>
+<tr class="separator:ga01d2c9b292e27518e4d6f8442607e8aa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5d454f34d819d90b9bbb30dcb9ed7b39"><td class="memItemLeft" align="right" valign="top">typedef tvec4< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga5d454f34d819d90b9bbb30dcb9ed7b39">highp_dvec4</a></td></tr>
+<tr class="separator:ga5d454f34d819d90b9bbb30dcb9ed7b39"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6e95694987ba35af6f736638be39626a"><td class="memItemLeft" align="right" valign="top">typedef highp_float_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga6e95694987ba35af6f736638be39626a">highp_float</a></td></tr>
+<tr class="separator:ga6e95694987ba35af6f736638be39626a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaaabe7eb044941ebf308b53a447d692dc"><td class="memItemLeft" align="right" valign="top">typedef detail::highp_int_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gaaabe7eb044941ebf308b53a447d692dc">highp_int</a></td></tr>
+<tr class="separator:gaaabe7eb044941ebf308b53a447d692dc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa015a3707413de20c03948308dba2f2e"><td class="memItemLeft" align="right" valign="top">typedef tvec2< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gaa015a3707413de20c03948308dba2f2e">highp_ivec2</a></td></tr>
+<tr class="separator:gaa015a3707413de20c03948308dba2f2e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8330bf0d7e6d03ca12ee2b1334c2c30f"><td class="memItemLeft" align="right" valign="top">typedef tvec3< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga8330bf0d7e6d03ca12ee2b1334c2c30f">highp_ivec3</a></td></tr>
+<tr class="separator:ga8330bf0d7e6d03ca12ee2b1334c2c30f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0424a75bb400571489b8528897f35258"><td class="memItemLeft" align="right" valign="top">typedef tvec4< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga0424a75bb400571489b8528897f35258">highp_ivec4</a></td></tr>
+<tr class="separator:ga0424a75bb400571489b8528897f35258"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga11c1eb1d307846d5bee7d7c0d8c386f0"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga11c1eb1d307846d5bee7d7c0d8c386f0">highp_mat2</a></td></tr>
+<tr class="separator:ga11c1eb1d307846d5bee7d7c0d8c386f0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae6a747cfc33928652abcb1347712b231"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gae6a747cfc33928652abcb1347712b231">highp_mat2x2</a></td></tr>
+<tr class="separator:gae6a747cfc33928652abcb1347712b231"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9dfd75b5b17b89ccbecbdd6201efc74b"><td class="memItemLeft" align="right" valign="top">typedef tmat2x3< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga9dfd75b5b17b89ccbecbdd6201efc74b">highp_mat2x3</a></td></tr>
+<tr class="separator:ga9dfd75b5b17b89ccbecbdd6201efc74b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga03fe2f9a84c61cc0f08b324a27d9b493"><td class="memItemLeft" align="right" valign="top">typedef tmat2x4< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga03fe2f9a84c61cc0f08b324a27d9b493">highp_mat2x4</a></td></tr>
+<tr class="separator:ga03fe2f9a84c61cc0f08b324a27d9b493"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaac1bde847d053902c27bad811b76e9fd"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gaac1bde847d053902c27bad811b76e9fd">highp_mat3</a></td></tr>
+<tr class="separator:gaac1bde847d053902c27bad811b76e9fd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6b00cd7956ac2ee3d4f3ab3b549b564a"><td class="memItemLeft" align="right" valign="top">typedef tmat3x2< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga6b00cd7956ac2ee3d4f3ab3b549b564a">highp_mat3x2</a></td></tr>
+<tr class="separator:ga6b00cd7956ac2ee3d4f3ab3b549b564a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga223de5d0549b215566dfb977d4bb45bd"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga223de5d0549b215566dfb977d4bb45bd">highp_mat3x3</a></td></tr>
+<tr class="separator:ga223de5d0549b215566dfb977d4bb45bd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga117d8a040e738396a3d60368605623d2"><td class="memItemLeft" align="right" valign="top">typedef tmat3x4< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga117d8a040e738396a3d60368605623d2">highp_mat3x4</a></td></tr>
+<tr class="separator:ga117d8a040e738396a3d60368605623d2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gabace1eeb2fac7d73a7faaecf33f352d0"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gabace1eeb2fac7d73a7faaecf33f352d0">highp_mat4</a></td></tr>
+<tr class="separator:gabace1eeb2fac7d73a7faaecf33f352d0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaeea75c96b308be4114e0badf49f58075"><td class="memItemLeft" align="right" valign="top">typedef tmat4x2< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gaeea75c96b308be4114e0badf49f58075">highp_mat4x2</a></td></tr>
+<tr class="separator:gaeea75c96b308be4114e0badf49f58075"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga046e59c57aaa185a8b0b012164ce707f"><td class="memItemLeft" align="right" valign="top">typedef tmat4x3< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga046e59c57aaa185a8b0b012164ce707f">highp_mat4x3</a></td></tr>
+<tr class="separator:ga046e59c57aaa185a8b0b012164ce707f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa72822d91f0dceb4dcaaec550cbfeead"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gaa72822d91f0dceb4dcaaec550cbfeead">highp_mat4x4</a></td></tr>
+<tr class="separator:gaa72822d91f0dceb4dcaaec550cbfeead"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga73e8a694d7fc69143cf25161d18d1dcf"><td class="memItemLeft" align="right" valign="top">typedef detail::highp_uint_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga73e8a694d7fc69143cf25161d18d1dcf">highp_uint</a></td></tr>
+<tr class="separator:ga73e8a694d7fc69143cf25161d18d1dcf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa0eed70387a998c3eca2f4e45f3efaad"><td class="memItemLeft" align="right" valign="top">typedef tvec2< uint, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gaa0eed70387a998c3eca2f4e45f3efaad">highp_uvec2</a></td></tr>
+<tr class="separator:gaa0eed70387a998c3eca2f4e45f3efaad"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf564d5be1e65bd2204754043b218c9a4"><td class="memItemLeft" align="right" valign="top">typedef tvec3< uint, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gaf564d5be1e65bd2204754043b218c9a4">highp_uvec3</a></td></tr>
+<tr class="separator:gaf564d5be1e65bd2204754043b218c9a4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga61359f5531550e45871a97589d8dcce1"><td class="memItemLeft" align="right" valign="top">typedef tvec4< uint, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga61359f5531550e45871a97589d8dcce1">highp_uvec4</a></td></tr>
+<tr class="separator:ga61359f5531550e45871a97589d8dcce1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gabfc3e9f63cc3e2ee0521405277ef3997"><td class="memItemLeft" align="right" valign="top">typedef tvec2< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gabfc3e9f63cc3e2ee0521405277ef3997">highp_vec2</a></td></tr>
+<tr class="separator:gabfc3e9f63cc3e2ee0521405277ef3997"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7b31b02c5558e2f8e5d8439ae3803d3a"><td class="memItemLeft" align="right" valign="top">typedef tvec3< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga7b31b02c5558e2f8e5d8439ae3803d3a">highp_vec3</a></td></tr>
+<tr class="separator:ga7b31b02c5558e2f8e5d8439ae3803d3a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gade7cb496ed3d78b2a11f1651cce77239"><td class="memItemLeft" align="right" valign="top">typedef tvec4< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gade7cb496ed3d78b2a11f1651cce77239">highp_vec4</a></td></tr>
+<tr class="separator:gade7cb496ed3d78b2a11f1651cce77239"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga28dcda102dd8c94ec500ee786af7a30a"><td class="memItemLeft" align="right" valign="top">typedef tvec2< bool, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga28dcda102dd8c94ec500ee786af7a30a">lowp_bvec2</a></td></tr>
+<tr class="separator:ga28dcda102dd8c94ec500ee786af7a30a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga76c0948546deeeb18bfda36f18b3e673"><td class="memItemLeft" align="right" valign="top">typedef tvec3< bool, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga76c0948546deeeb18bfda36f18b3e673">lowp_bvec3</a></td></tr>
+<tr class="separator:ga76c0948546deeeb18bfda36f18b3e673"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafa2087ead0d0e2a3c907e3fbd99f4d85"><td class="memItemLeft" align="right" valign="top">typedef tvec4< bool, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gafa2087ead0d0e2a3c907e3fbd99f4d85">lowp_bvec4</a></td></tr>
+<tr class="separator:gafa2087ead0d0e2a3c907e3fbd99f4d85"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae0a526a0143fc69d7b317c078d591654"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< double, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gae0a526a0143fc69d7b317c078d591654">lowp_dmat2</a></td></tr>
+<tr class="separator:gae0a526a0143fc69d7b317c078d591654"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga000c064e4eba15bf83f8e1e393a8e7fd"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< double, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga000c064e4eba15bf83f8e1e393a8e7fd">lowp_dmat2x2</a></td></tr>
+<tr class="separator:ga000c064e4eba15bf83f8e1e393a8e7fd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaaf2d7cf98b74a43fc432725887685dc0"><td class="memItemLeft" align="right" valign="top">typedef tmat2x3< double, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gaaf2d7cf98b74a43fc432725887685dc0">lowp_dmat2x3</a></td></tr>
+<tr class="separator:gaaf2d7cf98b74a43fc432725887685dc0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8ac69e9ed1addf122f51396f73cdbbf3"><td class="memItemLeft" align="right" valign="top">typedef tmat2x4< double, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga8ac69e9ed1addf122f51396f73cdbbf3">lowp_dmat2x4</a></td></tr>
+<tr class="separator:ga8ac69e9ed1addf122f51396f73cdbbf3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga19b0c9580b447443cf3fe589bd661e03"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< float, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga19b0c9580b447443cf3fe589bd661e03">lowp_dmat3</a></td></tr>
+<tr class="separator:ga19b0c9580b447443cf3fe589bd661e03"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga27ccd1bcb24920508a7b6a24bd9265ab"><td class="memItemLeft" align="right" valign="top">typedef tmat3x2< double, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga27ccd1bcb24920508a7b6a24bd9265ab">lowp_dmat3x2</a></td></tr>
+<tr class="separator:ga27ccd1bcb24920508a7b6a24bd9265ab"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae37a4275ffa68d0c3527a345e76598c0"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< double, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gae37a4275ffa68d0c3527a345e76598c0">lowp_dmat3x3</a></td></tr>
+<tr class="separator:gae37a4275ffa68d0c3527a345e76598c0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga813bff547772bcefebc026e5deba0fe3"><td class="memItemLeft" align="right" valign="top">typedef tmat3x4< double, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga813bff547772bcefebc026e5deba0fe3">lowp_dmat3x4</a></td></tr>
+<tr class="separator:ga813bff547772bcefebc026e5deba0fe3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaac3aee10bee5fa5206de8bf024a8b301"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< double, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gaac3aee10bee5fa5206de8bf024a8b301">lowp_dmat4</a></td></tr>
+<tr class="separator:gaac3aee10bee5fa5206de8bf024a8b301"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga05c2d27aeca091e369fca027e72177e8"><td class="memItemLeft" align="right" valign="top">typedef tmat4x2< double, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga05c2d27aeca091e369fca027e72177e8">lowp_dmat4x2</a></td></tr>
+<tr class="separator:ga05c2d27aeca091e369fca027e72177e8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2b5b1b810f3b9988f49f985387e35e03"><td class="memItemLeft" align="right" valign="top">typedef tmat4x3< double, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga2b5b1b810f3b9988f49f985387e35e03">lowp_dmat4x3</a></td></tr>
+<tr class="separator:ga2b5b1b810f3b9988f49f985387e35e03"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaea9e20c3668305cf0de5334d217408d9"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< double, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gaea9e20c3668305cf0de5334d217408d9">lowp_dmat4x4</a></td></tr>
+<tr class="separator:gaea9e20c3668305cf0de5334d217408d9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga96eb13864627c7c832b5af36aa73bda6"><td class="memItemLeft" align="right" valign="top">typedef tvec2< double, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga96eb13864627c7c832b5af36aa73bda6">lowp_dvec2</a></td></tr>
+<tr class="separator:ga96eb13864627c7c832b5af36aa73bda6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf7ec7b1cefeeaf63659460ef52fd06a9"><td class="memItemLeft" align="right" valign="top">typedef tvec3< double, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gaf7ec7b1cefeeaf63659460ef52fd06a9">lowp_dvec3</a></td></tr>
+<tr class="separator:gaf7ec7b1cefeeaf63659460ef52fd06a9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab5d6a45e1bbb13314b47793865a4c072"><td class="memItemLeft" align="right" valign="top">typedef tvec4< double, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gab5d6a45e1bbb13314b47793865a4c072">lowp_dvec4</a></td></tr>
+<tr class="separator:gab5d6a45e1bbb13314b47793865a4c072"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga358d69e11b1c0f6c7c469e0d39ab7fd1"><td class="memItemLeft" align="right" valign="top">typedef lowp_float_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga358d69e11b1c0f6c7c469e0d39ab7fd1">lowp_float</a></td></tr>
+<tr class="separator:ga358d69e11b1c0f6c7c469e0d39ab7fd1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad0fa1e32e8b3552ed63556eca51c620e"><td class="memItemLeft" align="right" valign="top">typedef detail::lowp_int_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gad0fa1e32e8b3552ed63556eca51c620e">lowp_int</a></td></tr>
+<tr class="separator:gad0fa1e32e8b3552ed63556eca51c620e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3c6aeb4cd3e9a14c85dd4c6f311b1e57"><td class="memItemLeft" align="right" valign="top">typedef tvec2< int, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga3c6aeb4cd3e9a14c85dd4c6f311b1e57">lowp_ivec2</a></td></tr>
+<tr class="separator:ga3c6aeb4cd3e9a14c85dd4c6f311b1e57"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa040f25233c314adc9560dcdb9dadac2"><td class="memItemLeft" align="right" valign="top">typedef tvec3< int, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gaa040f25233c314adc9560dcdb9dadac2">lowp_ivec3</a></td></tr>
+<tr class="separator:gaa040f25233c314adc9560dcdb9dadac2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8b7483dc67dc332f9d874c6cf7172203"><td class="memItemLeft" align="right" valign="top">typedef tvec4< int, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga8b7483dc67dc332f9d874c6cf7172203">lowp_ivec4</a></td></tr>
+<tr class="separator:ga8b7483dc67dc332f9d874c6cf7172203"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8ed94bfb5f4e0b2c3b0d49c5be478c85"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< float, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga8ed94bfb5f4e0b2c3b0d49c5be478c85">lowp_mat2</a></td></tr>
+<tr class="separator:ga8ed94bfb5f4e0b2c3b0d49c5be478c85"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab1a0d4d8fd3bb85f6616dac9dbef2981"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< float, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gab1a0d4d8fd3bb85f6616dac9dbef2981">lowp_mat2x2</a></td></tr>
+<tr class="separator:gab1a0d4d8fd3bb85f6616dac9dbef2981"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae8fe30d421bc141fa84ad414b803947d"><td class="memItemLeft" align="right" valign="top">typedef tmat2x3< float, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gae8fe30d421bc141fa84ad414b803947d">lowp_mat2x3</a></td></tr>
+<tr class="separator:gae8fe30d421bc141fa84ad414b803947d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad64a0179b75508142a72917854034b9b"><td class="memItemLeft" align="right" valign="top">typedef tmat2x4< float, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gad64a0179b75508142a72917854034b9b">lowp_mat2x4</a></td></tr>
+<tr class="separator:gad64a0179b75508142a72917854034b9b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6a66118df7e2398a36ca4a8e98ce6783"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< float, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga6a66118df7e2398a36ca4a8e98ce6783">lowp_mat3</a></td></tr>
+<tr class="separator:ga6a66118df7e2398a36ca4a8e98ce6783"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa2542e884ac7d05ada8ebb078b721924"><td class="memItemLeft" align="right" valign="top">typedef tmat3x2< float, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gaa2542e884ac7d05ada8ebb078b721924">lowp_mat3x2</a></td></tr>
+<tr class="separator:gaa2542e884ac7d05ada8ebb078b721924"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab7ca36023fa56d8006341a192ee09260"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< float, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gab7ca36023fa56d8006341a192ee09260">lowp_mat3x3</a></td></tr>
+<tr class="separator:gab7ca36023fa56d8006341a192ee09260"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2938621d14e70bc3dc576b4fc1547a7e"><td class="memItemLeft" align="right" valign="top">typedef tmat3x4< float, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga2938621d14e70bc3dc576b4fc1547a7e">lowp_mat3x4</a></td></tr>
+<tr class="separator:ga2938621d14e70bc3dc576b4fc1547a7e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gabb754302a1ff8736ec7814d860c9a3c0"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< float, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gabb754302a1ff8736ec7814d860c9a3c0">lowp_mat4</a></td></tr>
+<tr class="separator:gabb754302a1ff8736ec7814d860c9a3c0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac6d04a9590cb7ab62cbe29203dbb9b93"><td class="memItemLeft" align="right" valign="top">typedef tmat4x2< float, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gac6d04a9590cb7ab62cbe29203dbb9b93">lowp_mat4x2</a></td></tr>
+<tr class="separator:gac6d04a9590cb7ab62cbe29203dbb9b93"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafb3dbbc82f8b166867fd21c76eb8db4f"><td class="memItemLeft" align="right" valign="top">typedef tmat4x3< float, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gafb3dbbc82f8b166867fd21c76eb8db4f">lowp_mat4x3</a></td></tr>
+<tr class="separator:gafb3dbbc82f8b166867fd21c76eb8db4f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafff11cbd0abc762e8a340870a31d5bfa"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< float, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gafff11cbd0abc762e8a340870a31d5bfa">lowp_mat4x4</a></td></tr>
+<tr class="separator:gafff11cbd0abc762e8a340870a31d5bfa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga25ebc60727fc8b4a1167665f9ecdca97"><td class="memItemLeft" align="right" valign="top">typedef detail::lowp_uint_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga25ebc60727fc8b4a1167665f9ecdca97">lowp_uint</a></td></tr>
+<tr class="separator:ga25ebc60727fc8b4a1167665f9ecdca97"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6bfb90b936bbbc67e438bb9ac6910309"><td class="memItemLeft" align="right" valign="top">typedef tvec2< uint, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga6bfb90b936bbbc67e438bb9ac6910309">lowp_uvec2</a></td></tr>
+<tr class="separator:ga6bfb90b936bbbc67e438bb9ac6910309"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf0049c860a612da9bd3ba9ac9e49e820"><td class="memItemLeft" align="right" valign="top">typedef tvec3< uint, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gaf0049c860a612da9bd3ba9ac9e49e820">lowp_uvec3</a></td></tr>
+<tr class="separator:gaf0049c860a612da9bd3ba9ac9e49e820"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6efcd4574e112cfcda320db58e649ee3"><td class="memItemLeft" align="right" valign="top">typedef tvec4< uint, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga6efcd4574e112cfcda320db58e649ee3">lowp_uvec4</a></td></tr>
+<tr class="separator:ga6efcd4574e112cfcda320db58e649ee3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga51e835b2aa735782f0174328acffa521"><td class="memItemLeft" align="right" valign="top">typedef tvec2< float, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga51e835b2aa735782f0174328acffa521">lowp_vec2</a></td></tr>
+<tr class="separator:ga51e835b2aa735782f0174328acffa521"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf89f8fb5a06848ea4ec1c3a02813454e"><td class="memItemLeft" align="right" valign="top">typedef tvec3< float, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gaf89f8fb5a06848ea4ec1c3a02813454e">lowp_vec3</a></td></tr>
+<tr class="separator:gaf89f8fb5a06848ea4ec1c3a02813454e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8f9002d3ab660e3171f5cdea1aab8395"><td class="memItemLeft" align="right" valign="top">typedef tvec4< float, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga8f9002d3ab660e3171f5cdea1aab8395">lowp_vec4</a></td></tr>
+<tr class="separator:ga8f9002d3ab660e3171f5cdea1aab8395"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae1f4f68346474246eb4a9952af49e72b"><td class="memItemLeft" align="right" valign="top">typedef tvec2< bool, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gae1f4f68346474246eb4a9952af49e72b">mediump_bvec2</a></td></tr>
+<tr class="separator:gae1f4f68346474246eb4a9952af49e72b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0d1778766f17c4329a8c3f2b37f5fab0"><td class="memItemLeft" align="right" valign="top">typedef tvec3< bool, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga0d1778766f17c4329a8c3f2b37f5fab0">mediump_bvec3</a></td></tr>
+<tr class="separator:ga0d1778766f17c4329a8c3f2b37f5fab0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3f0c27f7ab42f004054a247c93a7bf57"><td class="memItemLeft" align="right" valign="top">typedef tvec4< bool, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga3f0c27f7ab42f004054a247c93a7bf57">mediump_bvec4</a></td></tr>
+<tr class="separator:ga3f0c27f7ab42f004054a247c93a7bf57"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga330077a4cb3707329120b5bddcd7db2d"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< double, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga330077a4cb3707329120b5bddcd7db2d">mediump_dmat2</a></td></tr>
+<tr class="separator:ga330077a4cb3707329120b5bddcd7db2d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga78987759d40d7cb03ebe948fb1dcd879"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< double, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga78987759d40d7cb03ebe948fb1dcd879">mediump_dmat2x2</a></td></tr>
+<tr class="separator:ga78987759d40d7cb03ebe948fb1dcd879"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2569a68be3f1cf56e7e5e0920fe5a246"><td class="memItemLeft" align="right" valign="top">typedef tmat2x3< double, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga2569a68be3f1cf56e7e5e0920fe5a246">mediump_dmat2x3</a></td></tr>
+<tr class="separator:ga2569a68be3f1cf56e7e5e0920fe5a246"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaccf963b117beeadf8c5c057000762dd3"><td class="memItemLeft" align="right" valign="top">typedef tmat2x4< double, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gaccf963b117beeadf8c5c057000762dd3">mediump_dmat2x4</a></td></tr>
+<tr class="separator:gaccf963b117beeadf8c5c057000762dd3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8091edef9fdf54b1996ae5bd00f847e5"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< double, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga8091edef9fdf54b1996ae5bd00f847e5">mediump_dmat3</a></td></tr>
+<tr class="separator:ga8091edef9fdf54b1996ae5bd00f847e5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6b81830ed1ce3862bcbbf41eccc3890b"><td class="memItemLeft" align="right" valign="top">typedef tmat3x2< double, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga6b81830ed1ce3862bcbbf41eccc3890b">mediump_dmat3x2</a></td></tr>
+<tr class="separator:ga6b81830ed1ce3862bcbbf41eccc3890b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5e5de055b7af150796e1c017de84cdb1"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< double, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga5e5de055b7af150796e1c017de84cdb1">mediump_dmat3x3</a></td></tr>
+<tr class="separator:ga5e5de055b7af150796e1c017de84cdb1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga187d10ddab0492545b78ea1dd108f28d"><td class="memItemLeft" align="right" valign="top">typedef tmat3x4< double, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga187d10ddab0492545b78ea1dd108f28d">mediump_dmat3x4</a></td></tr>
+<tr class="separator:ga187d10ddab0492545b78ea1dd108f28d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga27be34d618d20fbd70d4c62c21256b0c"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< double, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga27be34d618d20fbd70d4c62c21256b0c">mediump_dmat4</a></td></tr>
+<tr class="separator:ga27be34d618d20fbd70d4c62c21256b0c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad4a5b294c54702b7c8e9ee32a451dea9"><td class="memItemLeft" align="right" valign="top">typedef tmat4x2< double, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gad4a5b294c54702b7c8e9ee32a451dea9">mediump_dmat4x2</a></td></tr>
+<tr class="separator:gad4a5b294c54702b7c8e9ee32a451dea9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga27b55deeb16fda7262d64dc1fd1a56bc"><td class="memItemLeft" align="right" valign="top">typedef tmat4x3< double, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga27b55deeb16fda7262d64dc1fd1a56bc">mediump_dmat4x3</a></td></tr>
+<tr class="separator:ga27b55deeb16fda7262d64dc1fd1a56bc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga857947b2eef2c9144c34b8e3031f2f12"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< double, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga857947b2eef2c9144c34b8e3031f2f12">mediump_dmat4x4</a></td></tr>
+<tr class="separator:ga857947b2eef2c9144c34b8e3031f2f12"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga388fd99d9ffc7190a4732c35b0c7bfc9"><td class="memItemLeft" align="right" valign="top">typedef tvec2< double, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga388fd99d9ffc7190a4732c35b0c7bfc9">mediump_dvec2</a></td></tr>
+<tr class="separator:ga388fd99d9ffc7190a4732c35b0c7bfc9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0b4741d444b131ef1fc54b19c37f72be"><td class="memItemLeft" align="right" valign="top">typedef tvec3< double, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga0b4741d444b131ef1fc54b19c37f72be">mediump_dvec3</a></td></tr>
+<tr class="separator:ga0b4741d444b131ef1fc54b19c37f72be"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3e804226444dfe246133fc6ec4a3912f"><td class="memItemLeft" align="right" valign="top">typedef tvec4< double, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga3e804226444dfe246133fc6ec4a3912f">mediump_dvec4</a></td></tr>
+<tr class="separator:ga3e804226444dfe246133fc6ec4a3912f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga280c68f537f4b1e03a00b23e62573b98"><td class="memItemLeft" align="right" valign="top">typedef mediump_float_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga280c68f537f4b1e03a00b23e62573b98">mediump_float</a></td></tr>
+<tr class="separator:ga280c68f537f4b1e03a00b23e62573b98"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga212ef8f883878cb7430228a279a7d866"><td class="memItemLeft" align="right" valign="top">typedef detail::mediump_int_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga212ef8f883878cb7430228a279a7d866">mediump_int</a></td></tr>
+<tr class="separator:ga212ef8f883878cb7430228a279a7d866"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga199cc7c4cfa7c7cadad0c74d2f059aef"><td class="memItemLeft" align="right" valign="top">typedef tvec2< int, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga199cc7c4cfa7c7cadad0c74d2f059aef">mediump_ivec2</a></td></tr>
+<tr class="separator:ga199cc7c4cfa7c7cadad0c74d2f059aef"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9b7843453f7ad6ebfa26e50408b8dcf0"><td class="memItemLeft" align="right" valign="top">typedef tvec3< int, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga9b7843453f7ad6ebfa26e50408b8dcf0">mediump_ivec3</a></td></tr>
+<tr class="separator:ga9b7843453f7ad6ebfa26e50408b8dcf0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga14614613c8e79772c8a6d25dd1c45995"><td class="memItemLeft" align="right" valign="top">typedef tvec4< int, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga14614613c8e79772c8a6d25dd1c45995">mediump_ivec4</a></td></tr>
+<tr class="separator:ga14614613c8e79772c8a6d25dd1c45995"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga57b1e6c49a1432cefa518f13a56c5d47"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< float, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga57b1e6c49a1432cefa518f13a56c5d47">mediump_mat2</a></td></tr>
+<tr class="separator:ga57b1e6c49a1432cefa518f13a56c5d47"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1b77963ca2812ac2653624fa0f81ba74"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< float, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga1b77963ca2812ac2653624fa0f81ba74">mediump_mat2x2</a></td></tr>
+<tr class="separator:ga1b77963ca2812ac2653624fa0f81ba74"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8c17198123baf6bfb59582ec42a3ca09"><td class="memItemLeft" align="right" valign="top">typedef tmat2x3< float, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga8c17198123baf6bfb59582ec42a3ca09">mediump_mat2x3</a></td></tr>
+<tr class="separator:ga8c17198123baf6bfb59582ec42a3ca09"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7e95e348c99ef3d56b87ede14bc90bfe"><td class="memItemLeft" align="right" valign="top">typedef tmat2x4< float, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga7e95e348c99ef3d56b87ede14bc90bfe">mediump_mat2x4</a></td></tr>
+<tr class="separator:ga7e95e348c99ef3d56b87ede14bc90bfe"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga29d313adfc82fd4179d29a9fd98b1b5b"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< float, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga29d313adfc82fd4179d29a9fd98b1b5b">mediump_mat3</a></td></tr>
+<tr class="separator:ga29d313adfc82fd4179d29a9fd98b1b5b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9fa569295a9bd6ce0825ccb832c8aac9"><td class="memItemLeft" align="right" valign="top">typedef tmat3x2< float, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga9fa569295a9bd6ce0825ccb832c8aac9">mediump_mat3x2</a></td></tr>
+<tr class="separator:ga9fa569295a9bd6ce0825ccb832c8aac9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2f02cb49e386f65817c10ead9bbe7dec"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< float, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga2f02cb49e386f65817c10ead9bbe7dec">mediump_mat3x3</a></td></tr>
+<tr class="separator:ga2f02cb49e386f65817c10ead9bbe7dec"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac7afc5b81d320dbd7bd6a6f07d587e24"><td class="memItemLeft" align="right" valign="top">typedef tmat3x4< float, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gac7afc5b81d320dbd7bd6a6f07d587e24">mediump_mat3x4</a></td></tr>
+<tr class="separator:gac7afc5b81d320dbd7bd6a6f07d587e24"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6259813853e4253f80c2a08672e9fb6a"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< float, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga6259813853e4253f80c2a08672e9fb6a">mediump_mat4</a></td></tr>
+<tr class="separator:ga6259813853e4253f80c2a08672e9fb6a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga22194c68bc3d798bb68a22f635558c8d"><td class="memItemLeft" align="right" valign="top">typedef tmat4x2< float, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga22194c68bc3d798bb68a22f635558c8d">mediump_mat4x2</a></td></tr>
+<tr class="separator:ga22194c68bc3d798bb68a22f635558c8d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga38a01cba69e3db9b1a1056b362519acb"><td class="memItemLeft" align="right" valign="top">typedef tmat4x3< float, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga38a01cba69e3db9b1a1056b362519acb">mediump_mat4x3</a></td></tr>
+<tr class="separator:ga38a01cba69e3db9b1a1056b362519acb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga535614d97234065ab44b2513667c8563"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< float, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga535614d97234065ab44b2513667c8563">mediump_mat4x4</a></td></tr>
+<tr class="separator:ga535614d97234065ab44b2513667c8563"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0b7e01c52b9e5bf3369761b79b5f4f8e"><td class="memItemLeft" align="right" valign="top">typedef detail::mediump_uint_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga0b7e01c52b9e5bf3369761b79b5f4f8e">mediump_uint</a></td></tr>
+<tr class="separator:ga0b7e01c52b9e5bf3369761b79b5f4f8e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga392c0761c8bef616801e0d81a6867ed7"><td class="memItemLeft" align="right" valign="top">typedef tvec2< uint, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga392c0761c8bef616801e0d81a6867ed7">mediump_uvec2</a></td></tr>
+<tr class="separator:ga392c0761c8bef616801e0d81a6867ed7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga54ae0b7b207b8e7e88841d146d2de12e"><td class="memItemLeft" align="right" valign="top">typedef tvec3< uint, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga54ae0b7b207b8e7e88841d146d2de12e">mediump_uvec3</a></td></tr>
+<tr class="separator:ga54ae0b7b207b8e7e88841d146d2de12e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga631f5767b9d45c5cd3d0bcd67565b3f7"><td class="memItemLeft" align="right" valign="top">typedef tvec4< uint, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga631f5767b9d45c5cd3d0bcd67565b3f7">mediump_uvec4</a></td></tr>
+<tr class="separator:ga631f5767b9d45c5cd3d0bcd67565b3f7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac37a3fd0ecdcab044853c039409c9af7"><td class="memItemLeft" align="right" valign="top">typedef tvec2< float, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gac37a3fd0ecdcab044853c039409c9af7">mediump_vec2</a></td></tr>
+<tr class="separator:gac37a3fd0ecdcab044853c039409c9af7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga591478a77e4324e0836abc17cbb13e83"><td class="memItemLeft" align="right" valign="top">typedef tvec3< float, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga591478a77e4324e0836abc17cbb13e83">mediump_vec3</a></td></tr>
+<tr class="separator:ga591478a77e4324e0836abc17cbb13e83"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaae72e97529b8fa4e0341b425d4fe03ae"><td class="memItemLeft" align="right" valign="top">typedef tvec4< float, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#gaae72e97529b8fa4e0341b425d4fe03ae">mediump_vec4</a></td></tr>
+<tr class="separator:gaae72e97529b8fa4e0341b425d4fe03ae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga91ad9478d81a7aaf2593e8d9c3d06a14"><td class="memItemLeft" align="right" valign="top">typedef unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a></td></tr>
+<tr class="separator:ga91ad9478d81a7aaf2593e8d9c3d06a14"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Non-GLSL types that are used to define precision-based types. </p>
+<p>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</em> have an effect.</p>
+<p>C++ has no language equivalent to precision qualifiers. So GLM provides the next-best thing: a number of typedefs of the <a class="el" href="a00159.html">Template types</a> that use a particular precision.</p>
+<p>None of these types make any guarantees about the actual precision used. </p>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a class="anchor" id="ga829f39950549881a08c534946c0487e1"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec2<bool, highp> highp_bvec2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 components vector of high precision bool numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00219">219</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaca7c2a58eb926799c30ad547a290fccf"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec3<bool, highp> highp_bvec3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 components vector of high precision bool numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00328">328</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gae5f9c57d04b338c9a51a9af39e50795b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec4<bool, highp> highp_bvec4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 components vector of high precision bool numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00423">423</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga65ae7d3b23155712ed8cbd3300be4ec8"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x2<double, highp> highp_dmat2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 columns of 2 components matrix of high precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00440">440</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga518f28c64881fafaaf14ec0d867a9bba"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x2<double, highp> highp_dmat2x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 columns of 2 components matrix of high precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00458">458</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaf98afd25f7e3e8f1d73bca020d0d8ea6"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x3<double, highp> highp_dmat2x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 columns of 3 components matrix of high precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00481">481</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gac1c87c16d6dcb7449bc3c779ccdc5c30"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x4<double, highp> highp_dmat2x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 columns of 4 components matrix of high precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00504">504</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga605c7863807ac2e9c2db4cf13405f34d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x3<double, highp> highp_dmat3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 columns of 3 components matrix of high precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00550">550</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gab2d4fd5cd286baff8364a7a3f60c8a21"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x2<double, highp> highp_dmat3x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 columns of 2 components matrix of high precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00527">527</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga2d7911a43241a5ce2472421255e5930f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x3<double, highp> highp_dmat3x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 columns of 3 components matrix of high precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00568">568</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga51bfd2f3f5a12464d5934323db9116e7"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x4<double, highp> highp_dmat3x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 columns of 4 components matrix of high precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00591">591</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga4607e33c40a3c03256e0bf9c586b456a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x4<double, highp> highp_dmat4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 columns of 4 components matrix of high precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00660">660</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga5ee028f50629bf451973b3a910973357"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x2<double, highp> highp_dmat4x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 columns of 2 components matrix of high precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00614">614</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gafe7eea5b2a20477b5634e340ea5ec28a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x3<double, highp> highp_dmat4x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 columns of 3 components matrix of high precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00637">637</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga83ab0b8b8b50cbf945237dc8f5322432"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x4<double, highp> highp_dmat4x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 columns of 4 components matrix of high precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00678">678</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga435eb408e8dfa4f7185368109d432c14"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec2<double, highp> highp_dvec2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 components vector of high double-precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00156">156</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga01d2c9b292e27518e4d6f8442607e8aa"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec3<double, highp> highp_dvec3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 components vector of high double-precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00266">266</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga5d454f34d819d90b9bbb30dcb9ed7b39"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec4<double, highp> highp_dvec4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 components vector of high double-precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00369">369</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga6e95694987ba35af6f736638be39626a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef highp_float_t highp_float</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.4 Floats</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00110_source.html#l00041">41</a> of file <a class="el" href="a00110_source.html">type_float.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaaabe7eb044941ebf308b53a447d692dc"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::highp_int_t highp_int</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High precision signed integer. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.3 Integers</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00113_source.html#l00238">238</a> of file <a class="el" href="a00113_source.html">type_int.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaa015a3707413de20c03948308dba2f2e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec2<int, highp> highp_ivec2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 components vector of high precision signed integer numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00177">177</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga8330bf0d7e6d03ca12ee2b1334c2c30f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec3<int, highp> highp_ivec3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 components vector of high precision signed integer numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00287">287</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga0424a75bb400571489b8528897f35258"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec4<int, highp> highp_ivec4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 components vector of high precision signed integer numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00387">387</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga11c1eb1d307846d5bee7d7c0d8c386f0"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x2< float, highp > highp_mat2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 columns of 2 components matrix of high precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00053">53</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gae6a747cfc33928652abcb1347712b231"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x2< float, highp > highp_mat2x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 columns of 2 components matrix of high precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00074">74</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga9dfd75b5b17b89ccbecbdd6201efc74b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x3< float, highp > highp_mat2x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 columns of 3 components matrix of high precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00100">100</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga03fe2f9a84c61cc0f08b324a27d9b493"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x4< float, highp > highp_mat2x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 columns of 4 components matrix of high precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00126">126</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaac1bde847d053902c27bad811b76e9fd"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x3< float, highp > highp_mat3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 columns of 3 components matrix of high precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00178">178</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga6b00cd7956ac2ee3d4f3ab3b549b564a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x2< float, highp > highp_mat3x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 columns of 2 components matrix of high precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00152">152</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga223de5d0549b215566dfb977d4bb45bd"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x3< float, highp > highp_mat3x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 columns of 3 components matrix of high precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00199">199</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga117d8a040e738396a3d60368605623d2"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x4< float, highp > highp_mat3x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 columns of 4 components matrix of high precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00225">225</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gabace1eeb2fac7d73a7faaecf33f352d0"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x4< float, highp > highp_mat4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 columns of 4 components matrix of high precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00304">304</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaeea75c96b308be4114e0badf49f58075"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x2< float, highp > highp_mat4x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 columns of 2 components matrix of high precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00251">251</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga046e59c57aaa185a8b0b012164ce707f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x3< float, highp > highp_mat4x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 columns of 3 components matrix of high precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00277">277</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaa72822d91f0dceb4dcaaec550cbfeead"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x4< float, highp > highp_mat4x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 columns of 4 components matrix of high precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00325">325</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga73e8a694d7fc69143cf25161d18d1dcf"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::highp_uint_t highp_uint</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High precision unsigned integer. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.3 Integers</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00113_source.html#l00259">259</a> of file <a class="el" href="a00113_source.html">type_int.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaa0eed70387a998c3eca2f4e45f3efaad"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec2<uint, highp> highp_uvec2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 components vector of high precision unsigned integer numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00198">198</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaf564d5be1e65bd2204754043b218c9a4"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec3<uint, highp> highp_uvec3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 components vector of high precision unsigned integer numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00308">308</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga61359f5531550e45871a97589d8dcce1"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec4<uint, highp> highp_uvec4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 components vector of high precision unsigned integer numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00405">405</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gabfc3e9f63cc3e2ee0521405277ef3997"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec2< float, highp > highp_vec2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 components vector of high single-precision floating-point numbers. </p>
+<p>High Single-precision floating-point vector of 2 components.</p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a></dd>
+<dd>
+<a class="el" href="a00158.html" title="Non-GLSL types that are used to define precision-based types. ">Precision types</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00135">135</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga7b31b02c5558e2f8e5d8439ae3803d3a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec3< float, highp > highp_vec3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 components vector of high single-precision floating-point numbers. </p>
+<p>High Single-precision floating-point vector of 3 components.</p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a></dd>
+<dd>
+<a class="el" href="a00158.html" title="Non-GLSL types that are used to define precision-based types. ">Precision types</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00245">245</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gade7cb496ed3d78b2a11f1651cce77239"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec4< float, highp > highp_vec4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 components vector of high single-precision floating-point numbers. </p>
+<p>High Single-precision floating-point vector of 4 components.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a></dd>
+<dd>
+<a class="el" href="a00158.html" title="Non-GLSL types that are used to define precision-based types. ">Precision types</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00351">351</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga28dcda102dd8c94ec500ee786af7a30a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec2<bool, lowp> lowp_bvec2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 components vector of low precision bool numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00233">233</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga76c0948546deeeb18bfda36f18b3e673"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec3<bool, lowp> lowp_bvec3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 components vector of low precision bool numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00340">340</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gafa2087ead0d0e2a3c907e3fbd99f4d85"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec4<bool, lowp> lowp_bvec4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 components vector of low precision bool numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00435">435</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gae0a526a0143fc69d7b317c078d591654"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x2<double, lowp> lowp_dmat2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 columns of 2 components matrix of low precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00428">428</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga000c064e4eba15bf83f8e1e393a8e7fd"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x2<double, lowp> lowp_dmat2x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 columns of 2 components matrix of low precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00446">446</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaaf2d7cf98b74a43fc432725887685dc0"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x3<double, lowp> lowp_dmat2x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 columns of 3 components matrix of low precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00469">469</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga8ac69e9ed1addf122f51396f73cdbbf3"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x4<double, lowp> lowp_dmat2x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 columns of 4 components matrix of low precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00492">492</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga19b0c9580b447443cf3fe589bd661e03"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x3<float, lowp> lowp_dmat3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 columns of 3 components matrix of low precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00538">538</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga27ccd1bcb24920508a7b6a24bd9265ab"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x2<double, lowp> lowp_dmat3x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 columns of 2 components matrix of low precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00515">515</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gae37a4275ffa68d0c3527a345e76598c0"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x3<double, lowp> lowp_dmat3x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 columns of 3 components matrix of low precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00556">556</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga813bff547772bcefebc026e5deba0fe3"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x4<double, lowp> lowp_dmat3x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 columns of 4 components matrix of low precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00579">579</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaac3aee10bee5fa5206de8bf024a8b301"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x4<double, lowp> lowp_dmat4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 columns of 4 components matrix of low precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00648">648</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga05c2d27aeca091e369fca027e72177e8"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x2<double, lowp> lowp_dmat4x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 columns of 2 components matrix of low precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00602">602</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga2b5b1b810f3b9988f49f985387e35e03"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x3<double, lowp> lowp_dmat4x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 columns of 3 components matrix of low precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00625">625</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaea9e20c3668305cf0de5334d217408d9"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x4<double, lowp> lowp_dmat4x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 columns of 4 components matrix of low precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00666">666</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga96eb13864627c7c832b5af36aa73bda6"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec2<double, lowp> lowp_dvec2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 components vector of low double-precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00170">170</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaf7ec7b1cefeeaf63659460ef52fd06a9"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec3<double, lowp> lowp_dvec3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 components vector of low double-precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00280">280</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gab5d6a45e1bbb13314b47793865a4c072"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec4<double, lowp> lowp_dvec4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 components vector of low double-precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00381">381</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga358d69e11b1c0f6c7c469e0d39ab7fd1"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef lowp_float_t lowp_float</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.4 Floats</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00110_source.html#l00027">27</a> of file <a class="el" href="a00110_source.html">type_float.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gad0fa1e32e8b3552ed63556eca51c620e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::lowp_int_t lowp_int</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision signed integer. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.3 Integers</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00113_source.html#l00224">224</a> of file <a class="el" href="a00113_source.html">type_int.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga3c6aeb4cd3e9a14c85dd4c6f311b1e57"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec2<int, lowp> lowp_ivec2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 components vector of low precision signed integer numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00191">191</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaa040f25233c314adc9560dcdb9dadac2"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec3<int, lowp> lowp_ivec3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 components vector of low precision signed integer numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00301">301</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga8b7483dc67dc332f9d874c6cf7172203"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec4<int, lowp> lowp_ivec4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 components vector of low precision signed integer numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00399">399</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga8ed94bfb5f4e0b2c3b0d49c5be478c85"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x2< float, lowp > lowp_mat2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 columns of 2 components matrix of low precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00039">39</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gab1a0d4d8fd3bb85f6616dac9dbef2981"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x2< float, lowp > lowp_mat2x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 columns of 2 components matrix of low precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00060">60</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gae8fe30d421bc141fa84ad414b803947d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x3< float, lowp > lowp_mat2x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 columns of 3 components matrix of low precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00086">86</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gad64a0179b75508142a72917854034b9b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x4< float, lowp > lowp_mat2x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 columns of 4 components matrix of low precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00112">112</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga6a66118df7e2398a36ca4a8e98ce6783"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x3< float, lowp > lowp_mat3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 columns of 3 components matrix of low precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00164">164</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaa2542e884ac7d05ada8ebb078b721924"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x2< float, lowp > lowp_mat3x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 columns of 2 components matrix of low precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00138">138</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gab7ca36023fa56d8006341a192ee09260"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x3< float, lowp > lowp_mat3x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 columns of 3 components matrix of low precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00185">185</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga2938621d14e70bc3dc576b4fc1547a7e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x4< float, lowp > lowp_mat3x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 columns of 4 components matrix of low precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00211">211</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gabb754302a1ff8736ec7814d860c9a3c0"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x4< float, lowp > lowp_mat4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 columns of 4 components matrix of low precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00290">290</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gac6d04a9590cb7ab62cbe29203dbb9b93"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x2< float, lowp > lowp_mat4x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 columns of 2 components matrix of low precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00237">237</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gafb3dbbc82f8b166867fd21c76eb8db4f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x3< float, lowp > lowp_mat4x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 columns of 3 components matrix of low precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00263">263</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gafff11cbd0abc762e8a340870a31d5bfa"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x4< float, lowp > lowp_mat4x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 columns of 4 components matrix of low precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00311">311</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga25ebc60727fc8b4a1167665f9ecdca97"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::lowp_uint_t lowp_uint</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision unsigned integer. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.3 Integers</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00113_source.html#l00245">245</a> of file <a class="el" href="a00113_source.html">type_int.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga6bfb90b936bbbc67e438bb9ac6910309"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec2<uint, lowp> lowp_uvec2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 components vector of low precision unsigned integer numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00212">212</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaf0049c860a612da9bd3ba9ac9e49e820"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec3<uint, lowp> lowp_uvec3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 components vector of low precision unsigned integer numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00322">322</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga6efcd4574e112cfcda320db58e649ee3"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec4<uint, lowp> lowp_uvec4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 components vector of low precision unsigned integer numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00417">417</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga51e835b2aa735782f0174328acffa521"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec2< float, lowp > lowp_vec2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 components vector of low single-precision floating-point numbers. </p>
+<p>Low single-precision floating-point vector of 2 components.</p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a></dd>
+<dd>
+<a class="el" href="a00158.html" title="Non-GLSL types that are used to define precision-based types. ">Precision types</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00149">149</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaf89f8fb5a06848ea4ec1c3a02813454e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec3< float, lowp > lowp_vec3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 components vector of low single-precision floating-point numbers. </p>
+<p>Low single-precision floating-point vector of 3 components.</p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a></dd>
+<dd>
+<a class="el" href="a00158.html" title="Non-GLSL types that are used to define precision-based types. ">Precision types</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00259">259</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga8f9002d3ab660e3171f5cdea1aab8395"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec4< float, lowp > lowp_vec4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 components vector of low single-precision floating-point numbers. </p>
+<p>Low single-precision floating-point vector of 4 components.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a></dd>
+<dd>
+<a class="el" href="a00158.html" title="Non-GLSL types that are used to define precision-based types. ">Precision types</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00363">363</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gae1f4f68346474246eb4a9952af49e72b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec2<bool, mediump> mediump_bvec2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 components vector of medium precision bool numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00226">226</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga0d1778766f17c4329a8c3f2b37f5fab0"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec3<bool, mediump> mediump_bvec3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 components vector of medium precision bool numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00334">334</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga3f0c27f7ab42f004054a247c93a7bf57"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec4<bool, mediump> mediump_bvec4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 components vector of medium precision bool numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00429">429</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga330077a4cb3707329120b5bddcd7db2d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x2<double, mediump> mediump_dmat2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 columns of 2 components matrix of medium precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00434">434</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga78987759d40d7cb03ebe948fb1dcd879"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x2<double, mediump> mediump_dmat2x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 columns of 2 components matrix of medium precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00452">452</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga2569a68be3f1cf56e7e5e0920fe5a246"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x3<double, mediump> mediump_dmat2x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 columns of 3 components matrix of medium precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00475">475</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaccf963b117beeadf8c5c057000762dd3"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x4<double, mediump> mediump_dmat2x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 columns of 4 components matrix of medium precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00498">498</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga8091edef9fdf54b1996ae5bd00f847e5"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x3<double, mediump> mediump_dmat3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 columns of 3 components matrix of medium precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00544">544</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga6b81830ed1ce3862bcbbf41eccc3890b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x2<double, mediump> mediump_dmat3x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 columns of 2 components matrix of medium precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00521">521</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga5e5de055b7af150796e1c017de84cdb1"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x3<double, mediump> mediump_dmat3x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 columns of 3 components matrix of medium precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00562">562</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga187d10ddab0492545b78ea1dd108f28d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x4<double, mediump> mediump_dmat3x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 columns of 4 components matrix of medium precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00585">585</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga27be34d618d20fbd70d4c62c21256b0c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x4<double, mediump> mediump_dmat4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 columns of 4 components matrix of medium precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00654">654</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gad4a5b294c54702b7c8e9ee32a451dea9"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x2<double, mediump> mediump_dmat4x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 columns of 2 components matrix of medium precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00608">608</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga27b55deeb16fda7262d64dc1fd1a56bc"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x3<double, mediump> mediump_dmat4x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 columns of 3 components matrix of medium precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00631">631</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga857947b2eef2c9144c34b8e3031f2f12"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x4<double, mediump> mediump_dmat4x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 columns of 4 components matrix of medium precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00672">672</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga388fd99d9ffc7190a4732c35b0c7bfc9"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec2<double, mediump> mediump_dvec2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 components vector of medium double-precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00163">163</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga0b4741d444b131ef1fc54b19c37f72be"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec3<double, mediump> mediump_dvec3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 components vector of medium double-precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00273">273</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga3e804226444dfe246133fc6ec4a3912f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec4<double, mediump> mediump_dvec4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 components vector of medium double-precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00375">375</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga280c68f537f4b1e03a00b23e62573b98"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef mediump_float_t mediump_float</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.4 Floats</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00110_source.html#l00034">34</a> of file <a class="el" href="a00110_source.html">type_float.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga212ef8f883878cb7430228a279a7d866"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::mediump_int_t mediump_int</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision signed integer. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.3 Integers</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00113_source.html#l00231">231</a> of file <a class="el" href="a00113_source.html">type_int.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga199cc7c4cfa7c7cadad0c74d2f059aef"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec2<int, mediump> mediump_ivec2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 components vector of medium precision signed integer numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00184">184</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga9b7843453f7ad6ebfa26e50408b8dcf0"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec3<int, mediump> mediump_ivec3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 components vector of medium precision signed integer numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00294">294</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga14614613c8e79772c8a6d25dd1c45995"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec4<int, mediump> mediump_ivec4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 components vector of medium precision signed integer numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00393">393</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga57b1e6c49a1432cefa518f13a56c5d47"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x2< float, mediump > mediump_mat2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 columns of 2 components matrix of medium precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00046">46</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga1b77963ca2812ac2653624fa0f81ba74"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x2< float, mediump > mediump_mat2x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 columns of 2 components matrix of medium precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00067">67</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga8c17198123baf6bfb59582ec42a3ca09"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x3< float, mediump > mediump_mat2x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 columns of 3 components matrix of medium precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00093">93</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga7e95e348c99ef3d56b87ede14bc90bfe"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x4< float, mediump > mediump_mat2x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 columns of 4 components matrix of medium precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00119">119</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga29d313adfc82fd4179d29a9fd98b1b5b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x3< float, mediump > mediump_mat3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 columns of 3 components matrix of medium precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00171">171</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga9fa569295a9bd6ce0825ccb832c8aac9"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x2< float, mediump > mediump_mat3x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 columns of 2 components matrix of medium precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00145">145</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga2f02cb49e386f65817c10ead9bbe7dec"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x3< float, mediump > mediump_mat3x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 columns of 3 components matrix of medium precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00192">192</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gac7afc5b81d320dbd7bd6a6f07d587e24"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x4< float, mediump > mediump_mat3x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 columns of 4 components matrix of medium precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00218">218</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga6259813853e4253f80c2a08672e9fb6a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x4< float, mediump > mediump_mat4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 columns of 4 components matrix of medium precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00297">297</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga22194c68bc3d798bb68a22f635558c8d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x2< float, mediump > mediump_mat4x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 columns of 2 components matrix of medium precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00244">244</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga38a01cba69e3db9b1a1056b362519acb"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x3< float, mediump > mediump_mat4x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 columns of 3 components matrix of medium precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00270">270</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga535614d97234065ab44b2513667c8563"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x4< float, mediump > mediump_mat4x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 columns of 4 components matrix of medium precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00114_source.html#l00318">318</a> of file <a class="el" href="a00114_source.html">type_mat.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga0b7e01c52b9e5bf3369761b79b5f4f8e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::mediump_uint_t mediump_uint</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision unsigned integer. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.3 Integers</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00113_source.html#l00252">252</a> of file <a class="el" href="a00113_source.html">type_int.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga392c0761c8bef616801e0d81a6867ed7"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec2<uint, mediump> mediump_uvec2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 components vector of medium precision unsigned integer numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00205">205</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga54ae0b7b207b8e7e88841d146d2de12e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec3<uint, mediump> mediump_uvec3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 components vector of medium precision unsigned integer numbers. </p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00315">315</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga631f5767b9d45c5cd3d0bcd67565b3f7"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec4<uint, mediump> mediump_uvec4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 components vector of medium precision unsigned integer numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00411">411</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gac37a3fd0ecdcab044853c039409c9af7"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec2< float, mediump > mediump_vec2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 components vector of medium single-precision floating-point numbers. </p>
+<p>Medium Single-precision floating-point vector of 2 components.</p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a></dd>
+<dd>
+<a class="el" href="a00158.html" title="Non-GLSL types that are used to define precision-based types. ">Precision types</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00142">142</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga591478a77e4324e0836abc17cbb13e83"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec3< float, mediump > mediump_vec3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 components vector of medium single-precision floating-point numbers. </p>
+<p>Medium Single-precision floating-point vector of 3 components.</p>
+<p>There is no guarantee on the actual precision.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a></dd>
+<dd>
+<a class="el" href="a00158.html" title="Non-GLSL types that are used to define precision-based types. ">Precision types</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00252">252</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaae72e97529b8fa4e0341b425d4fe03ae"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec4< float, mediump > mediump_vec4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>4 components vector of medium single-precision floating-point numbers. </p>
+<p>Medium Single-precision floating-point vector of 4 components.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a></dd>
+<dd>
+<a class="el" href="a00158.html" title="Non-GLSL types that are used to define precision-based types. ">Precision types</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00127_source.html#l00357">357</a> of file <a class="el" href="a00127_source.html">type_vec.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga91ad9478d81a7aaf2593e8d9c3d06a14"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef unsigned int uint</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Unsigned integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.3 Integers</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00113_source.html#l00288">288</a> of file <a class="el" href="a00113_source.html">type_int.hpp</a>.</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00159.html b/src/third_party/glm/doc/api/a00159.html
new file mode 100644
index 0000000..a72c289
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00159.html
@@ -0,0 +1,53 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: Template types</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">Template types<div class="ingroups"><a class="el" href="a00156.html">GLM Core</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<p>The generic template types used as the basis for the core types. </p>
+<p>These types are all templates used to define the actual <a class="el" href="a00157.html">Types</a>. These templetes are implementation details of GLM types and should not be used explicitly. </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00160.html b/src/third_party/glm/doc/api/a00160.html
new file mode 100644
index 0000000..7b2271f
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00160.html
@@ -0,0 +1,985 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTC_bitfield</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTC_bitfield<div class="ingroups"><a class="el" href="a00154.html">GTC Extensions (Stable)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga46f9295abe3b5c7658f5b13c7f819f0a"><td class="memTemplParams" colspan="2">template<typename genIUType > </td></tr>
+<tr class="memitem:ga46f9295abe3b5c7658f5b13c7f819f0a"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genIUType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00160.html#ga46f9295abe3b5c7658f5b13c7f819f0a">bitfieldFillOne</a> (genIUType Value, int FirstBit, int BitCount)</td></tr>
+<tr class="separator:ga46f9295abe3b5c7658f5b13c7f819f0a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad789042e84e8292ae95dc1af856f2ad5"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gad789042e84e8292ae95dc1af856f2ad5"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00160.html#gad789042e84e8292ae95dc1af856f2ad5">bitfieldFillOne</a> (vecType< T, P > const &Value, int FirstBit, int BitCount)</td></tr>
+<tr class="separator:gad789042e84e8292ae95dc1af856f2ad5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga697b86998b7d74ee0a69d8e9f8819fee"><td class="memTemplParams" colspan="2">template<typename genIUType > </td></tr>
+<tr class="memitem:ga697b86998b7d74ee0a69d8e9f8819fee"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genIUType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00160.html#ga697b86998b7d74ee0a69d8e9f8819fee">bitfieldFillZero</a> (genIUType Value, int FirstBit, int BitCount)</td></tr>
+<tr class="separator:ga697b86998b7d74ee0a69d8e9f8819fee"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaddba3196316b0bd240295b09b43c2958"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gaddba3196316b0bd240295b09b43c2958"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00160.html#gaddba3196316b0bd240295b09b43c2958">bitfieldFillZero</a> (vecType< T, P > const &Value, int FirstBit, int BitCount)</td></tr>
+<tr class="separator:gaddba3196316b0bd240295b09b43c2958"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga24cad0069f9a0450abd80b3e89501adf"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL int16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#ga24cad0069f9a0450abd80b3e89501adf">bitfieldInterleave</a> (int8 x, int8 y)</td></tr>
+<tr class="separator:ga24cad0069f9a0450abd80b3e89501adf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9a4976a529aec2cee56525e1165da484"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#ga9a4976a529aec2cee56525e1165da484">bitfieldInterleave</a> (uint8 x, uint8 y)</td></tr>
+<tr class="separator:ga9a4976a529aec2cee56525e1165da484"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac51c33a394593f0631fa3aa5bb778809"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL int32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#gac51c33a394593f0631fa3aa5bb778809">bitfieldInterleave</a> (int16 x, int16 y)</td></tr>
+<tr class="separator:gac51c33a394593f0631fa3aa5bb778809"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga94f3646a5667f4be56f8dcf3310e963f"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#ga94f3646a5667f4be56f8dcf3310e963f">bitfieldInterleave</a> (uint16 x, uint16 y)</td></tr>
+<tr class="separator:ga94f3646a5667f4be56f8dcf3310e963f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaebb756a24a0784e3d6fba8bd011ab77a"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL int64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#gaebb756a24a0784e3d6fba8bd011ab77a">bitfieldInterleave</a> (int32 x, int32 y)</td></tr>
+<tr class="separator:gaebb756a24a0784e3d6fba8bd011ab77a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2f1e2b3fe699e7d897ae38b2115ddcbd"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#ga2f1e2b3fe699e7d897ae38b2115ddcbd">bitfieldInterleave</a> (uint32 x, uint32 y)</td></tr>
+<tr class="separator:ga2f1e2b3fe699e7d897ae38b2115ddcbd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8fdb724dccd4a07d57efc01147102137"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL int32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#ga8fdb724dccd4a07d57efc01147102137">bitfieldInterleave</a> (int8 x, int8 y, int8 z)</td></tr>
+<tr class="separator:ga8fdb724dccd4a07d57efc01147102137"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9fc2a0dd5dcf8b00e113f272a5feca93"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#ga9fc2a0dd5dcf8b00e113f272a5feca93">bitfieldInterleave</a> (uint8 x, uint8 y, uint8 z)</td></tr>
+<tr class="separator:ga9fc2a0dd5dcf8b00e113f272a5feca93"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa901c36a842fa5d126ea650549f17b24"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL int64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#gaa901c36a842fa5d126ea650549f17b24">bitfieldInterleave</a> (int16 x, int16 y, int16 z)</td></tr>
+<tr class="separator:gaa901c36a842fa5d126ea650549f17b24"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3afd6d38881fe3948c53d4214d2197fd"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#ga3afd6d38881fe3948c53d4214d2197fd">bitfieldInterleave</a> (uint16 x, uint16 y, uint16 z)</td></tr>
+<tr class="separator:ga3afd6d38881fe3948c53d4214d2197fd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad2075d96a6640121edaa98ea534102ca"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL int64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#gad2075d96a6640121edaa98ea534102ca">bitfieldInterleave</a> (int32 x, int32 y, int32 z)</td></tr>
+<tr class="separator:gad2075d96a6640121edaa98ea534102ca"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab19fbc739fc0cf7247978602c36f7da8"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#gab19fbc739fc0cf7247978602c36f7da8">bitfieldInterleave</a> (uint32 x, uint32 y, uint32 z)</td></tr>
+<tr class="separator:gab19fbc739fc0cf7247978602c36f7da8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8a44ae22f5c953b296c42d067dccbe6d"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL int32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#ga8a44ae22f5c953b296c42d067dccbe6d">bitfieldInterleave</a> (int8 x, int8 y, int8 z, int8 w)</td></tr>
+<tr class="separator:ga8a44ae22f5c953b296c42d067dccbe6d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga14bb274d54a3c26f4919dd7ed0dd0c36"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#ga14bb274d54a3c26f4919dd7ed0dd0c36">bitfieldInterleave</a> (uint8 x, uint8 y, uint8 z, uint8 w)</td></tr>
+<tr class="separator:ga14bb274d54a3c26f4919dd7ed0dd0c36"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga180a63161e1319fbd5a53c84d0429c7a"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL int64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#ga180a63161e1319fbd5a53c84d0429c7a">bitfieldInterleave</a> (int16 x, int16 y, int16 z, int16 w)</td></tr>
+<tr class="separator:ga180a63161e1319fbd5a53c84d0429c7a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafca8768671a14c8016facccb66a89f26"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00160.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a> (uint16 x, uint16 y, uint16 z, uint16 w)</td></tr>
+<tr class="separator:gafca8768671a14c8016facccb66a89f26"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2eb49678a344ce1495bdb5586d9896b9"><td class="memTemplParams" colspan="2">template<typename genIUType > </td></tr>
+<tr class="memitem:ga2eb49678a344ce1495bdb5586d9896b9"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genIUType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00160.html#ga2eb49678a344ce1495bdb5586d9896b9">bitfieldRotateLeft</a> (genIUType In, int Shift)</td></tr>
+<tr class="separator:ga2eb49678a344ce1495bdb5586d9896b9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga410d130917d85b865718e3ebc32cf0ef"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga410d130917d85b865718e3ebc32cf0ef"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00160.html#ga410d130917d85b865718e3ebc32cf0ef">bitfieldRotateLeft</a> (vecType< T, P > const &In, int Shift)</td></tr>
+<tr class="separator:ga410d130917d85b865718e3ebc32cf0ef"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1c33d075c5fb8bd8dbfd5092bfc851ca"><td class="memTemplParams" colspan="2">template<typename genIUType > </td></tr>
+<tr class="memitem:ga1c33d075c5fb8bd8dbfd5092bfc851ca"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genIUType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00160.html#ga1c33d075c5fb8bd8dbfd5092bfc851ca">bitfieldRotateRight</a> (genIUType In, int Shift)</td></tr>
+<tr class="separator:ga1c33d075c5fb8bd8dbfd5092bfc851ca"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga96b56fd2adad1eeaee9e10dfe83904ba"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga96b56fd2adad1eeaee9e10dfe83904ba"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00160.html#ga96b56fd2adad1eeaee9e10dfe83904ba">bitfieldRotateRight</a> (vecType< T, P > const &In, int Shift)</td></tr>
+<tr class="separator:ga96b56fd2adad1eeaee9e10dfe83904ba"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad7eba518a0b71662114571ee76939f8a"><td class="memTemplParams" colspan="2">template<typename genIUType > </td></tr>
+<tr class="memitem:gad7eba518a0b71662114571ee76939f8a"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genIUType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00160.html#gad7eba518a0b71662114571ee76939f8a">mask</a> (genIUType Bits)</td></tr>
+<tr class="separator:gad7eba518a0b71662114571ee76939f8a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga073dbd8642f550b51da3572541431c1c"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecIUType> </td></tr>
+<tr class="memitem:ga073dbd8642f550b51da3572541431c1c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecIUType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00160.html#ga073dbd8642f550b51da3572541431c1c">mask</a> (vecIUType< T, P > const &v)</td></tr>
+<tr class="separator:ga073dbd8642f550b51da3572541431c1c"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Allow to perform bit operations on integer values. </p>
+<p><<a class="el" href="a00009.html" title="GLM_GTC_bitfield ">glm/gtc/bitfield.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga46f9295abe3b5c7658f5b13c7f819f0a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genIUType glm::bitfieldFillOne </td>
+ <td>(</td>
+ <td class="paramtype">genIUType </td>
+ <td class="paramname"><em>Value</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>FirstBit</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>BitCount</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Set to 1 a range of bits. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00160.html" title="Allow to perform bit operations on integer values. ">GLM_GTC_bitfield</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gad789042e84e8292ae95dc1af856f2ad5"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::bitfieldFillOne </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>Value</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>FirstBit</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>BitCount</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Set to 1 a range of bits. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00160.html" title="Allow to perform bit operations on integer values. ">GLM_GTC_bitfield</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga697b86998b7d74ee0a69d8e9f8819fee"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genIUType glm::bitfieldFillZero </td>
+ <td>(</td>
+ <td class="paramtype">genIUType </td>
+ <td class="paramname"><em>Value</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>FirstBit</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>BitCount</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Set to 0 a range of bits. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00160.html" title="Allow to perform bit operations on integer values. ">GLM_GTC_bitfield</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaddba3196316b0bd240295b09b43c2958"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::bitfieldFillZero </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>Value</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>FirstBit</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>BitCount</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Set to 0 a range of bits. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00160.html" title="Allow to perform bit operations on integer values. ">GLM_GTC_bitfield</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga24cad0069f9a0450abd80b3e89501adf"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL int16 glm::bitfieldInterleave </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga41c6189f6485c2825d60fdc835b3a2b0">int8</a> </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga41c6189f6485c2825d60fdc835b3a2b0">int8</a> </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Interleaves the bits of x and y. </p>
+<p>The first bit is the first bit of x followed by the first bit of y. The other bits are interleaved following the previous sequence.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00160.html" title="Allow to perform bit operations on integer values. ">GLM_GTC_bitfield</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga9a4976a529aec2cee56525e1165da484"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL uint16 glm::bitfieldInterleave </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga36475e31b1992cfde54c1a6f5a148865">uint8</a> </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga36475e31b1992cfde54c1a6f5a148865">uint8</a> </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Interleaves the bits of x and y. </p>
+<p>The first bit is the first bit of x followed by the first bit of y. The other bits are interleaved following the previous sequence.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00160.html" title="Allow to perform bit operations on integer values. ">GLM_GTC_bitfield</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gac51c33a394593f0631fa3aa5bb778809"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL int32 glm::bitfieldInterleave </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga302041c186d0d028bea31b711fe16759">int16</a> </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga302041c186d0d028bea31b711fe16759">int16</a> </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Interleaves the bits of x and y. </p>
+<p>The first bit is the first bit of x followed by the first bit of y. The other bits are interleaved following the previous sequence.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00160.html" title="Allow to perform bit operations on integer values. ">GLM_GTC_bitfield</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga94f3646a5667f4be56f8dcf3310e963f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL uint32 glm::bitfieldInterleave </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga13471cbbe74e4303a57f3743d007b74d">uint16</a> </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga13471cbbe74e4303a57f3743d007b74d">uint16</a> </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Interleaves the bits of x and y. </p>
+<p>The first bit is the first bit of x followed by the first bit of y. The other bits are interleaved following the previous sequence.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00160.html" title="Allow to perform bit operations on integer values. ">GLM_GTC_bitfield</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaebb756a24a0784e3d6fba8bd011ab77a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL int64 glm::bitfieldInterleave </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga8df669f4e7698dfe0c0354d92578d74f">int32</a> </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga8df669f4e7698dfe0c0354d92578d74f">int32</a> </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Interleaves the bits of x and y. </p>
+<p>The first bit is the first bit of x followed by the first bit of y. The other bits are interleaved following the previous sequence.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00160.html" title="Allow to perform bit operations on integer values. ">GLM_GTC_bitfield</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga2f1e2b3fe699e7d897ae38b2115ddcbd"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL uint64 glm::bitfieldInterleave </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga5fa3ddcab56c789bc272ff5651faa12d">uint32</a> </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga5fa3ddcab56c789bc272ff5651faa12d">uint32</a> </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Interleaves the bits of x and y. </p>
+<p>The first bit is the first bit of x followed by the first bit of y. The other bits are interleaved following the previous sequence.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00160.html" title="Allow to perform bit operations on integer values. ">GLM_GTC_bitfield</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga8fdb724dccd4a07d57efc01147102137"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL int32 glm::bitfieldInterleave </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga41c6189f6485c2825d60fdc835b3a2b0">int8</a> </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga41c6189f6485c2825d60fdc835b3a2b0">int8</a> </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga41c6189f6485c2825d60fdc835b3a2b0">int8</a> </td>
+ <td class="paramname"><em>z</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Interleaves the bits of x, y and z. </p>
+<p>The first bit is the first bit of x followed by the first bit of y and the first bit of z. The other bits are interleaved following the previous sequence.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00160.html" title="Allow to perform bit operations on integer values. ">GLM_GTC_bitfield</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga9fc2a0dd5dcf8b00e113f272a5feca93"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL uint32 glm::bitfieldInterleave </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga36475e31b1992cfde54c1a6f5a148865">uint8</a> </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga36475e31b1992cfde54c1a6f5a148865">uint8</a> </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga36475e31b1992cfde54c1a6f5a148865">uint8</a> </td>
+ <td class="paramname"><em>z</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Interleaves the bits of x, y and z. </p>
+<p>The first bit is the first bit of x followed by the first bit of y and the first bit of z. The other bits are interleaved following the previous sequence.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00160.html" title="Allow to perform bit operations on integer values. ">GLM_GTC_bitfield</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaa901c36a842fa5d126ea650549f17b24"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL int64 glm::bitfieldInterleave </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga302041c186d0d028bea31b711fe16759">int16</a> </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga302041c186d0d028bea31b711fe16759">int16</a> </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga302041c186d0d028bea31b711fe16759">int16</a> </td>
+ <td class="paramname"><em>z</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Interleaves the bits of x, y and z. </p>
+<p>The first bit is the first bit of x followed by the first bit of y and the first bit of z. The other bits are interleaved following the previous sequence.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00160.html" title="Allow to perform bit operations on integer values. ">GLM_GTC_bitfield</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga3afd6d38881fe3948c53d4214d2197fd"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL uint64 glm::bitfieldInterleave </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga13471cbbe74e4303a57f3743d007b74d">uint16</a> </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga13471cbbe74e4303a57f3743d007b74d">uint16</a> </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga13471cbbe74e4303a57f3743d007b74d">uint16</a> </td>
+ <td class="paramname"><em>z</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Interleaves the bits of x, y and z. </p>
+<p>The first bit is the first bit of x followed by the first bit of y and the first bit of z. The other bits are interleaved following the previous sequence.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00160.html" title="Allow to perform bit operations on integer values. ">GLM_GTC_bitfield</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gad2075d96a6640121edaa98ea534102ca"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL int64 glm::bitfieldInterleave </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga8df669f4e7698dfe0c0354d92578d74f">int32</a> </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga8df669f4e7698dfe0c0354d92578d74f">int32</a> </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga8df669f4e7698dfe0c0354d92578d74f">int32</a> </td>
+ <td class="paramname"><em>z</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Interleaves the bits of x, y and z. </p>
+<p>The first bit is the first bit of x followed by the first bit of y and the first bit of z. The other bits are interleaved following the previous sequence.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00160.html" title="Allow to perform bit operations on integer values. ">GLM_GTC_bitfield</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gab19fbc739fc0cf7247978602c36f7da8"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL uint64 glm::bitfieldInterleave </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga5fa3ddcab56c789bc272ff5651faa12d">uint32</a> </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga5fa3ddcab56c789bc272ff5651faa12d">uint32</a> </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga5fa3ddcab56c789bc272ff5651faa12d">uint32</a> </td>
+ <td class="paramname"><em>z</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Interleaves the bits of x, y and z. </p>
+<p>The first bit is the first bit of x followed by the first bit of y and the first bit of z. The other bits are interleaved following the previous sequence.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00160.html" title="Allow to perform bit operations on integer values. ">GLM_GTC_bitfield</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga8a44ae22f5c953b296c42d067dccbe6d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL int32 glm::bitfieldInterleave </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga41c6189f6485c2825d60fdc835b3a2b0">int8</a> </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga41c6189f6485c2825d60fdc835b3a2b0">int8</a> </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga41c6189f6485c2825d60fdc835b3a2b0">int8</a> </td>
+ <td class="paramname"><em>z</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga41c6189f6485c2825d60fdc835b3a2b0">int8</a> </td>
+ <td class="paramname"><em>w</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Interleaves the bits of x, y, z and w. </p>
+<p>The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w. The other bits are interleaved following the previous sequence.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00160.html" title="Allow to perform bit operations on integer values. ">GLM_GTC_bitfield</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga14bb274d54a3c26f4919dd7ed0dd0c36"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL uint32 glm::bitfieldInterleave </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga36475e31b1992cfde54c1a6f5a148865">uint8</a> </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga36475e31b1992cfde54c1a6f5a148865">uint8</a> </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga36475e31b1992cfde54c1a6f5a148865">uint8</a> </td>
+ <td class="paramname"><em>z</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga36475e31b1992cfde54c1a6f5a148865">uint8</a> </td>
+ <td class="paramname"><em>w</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Interleaves the bits of x, y, z and w. </p>
+<p>The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w. The other bits are interleaved following the previous sequence.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00160.html" title="Allow to perform bit operations on integer values. ">GLM_GTC_bitfield</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga180a63161e1319fbd5a53c84d0429c7a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL int64 glm::bitfieldInterleave </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga302041c186d0d028bea31b711fe16759">int16</a> </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga302041c186d0d028bea31b711fe16759">int16</a> </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga302041c186d0d028bea31b711fe16759">int16</a> </td>
+ <td class="paramname"><em>z</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga302041c186d0d028bea31b711fe16759">int16</a> </td>
+ <td class="paramname"><em>w</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Interleaves the bits of x, y, z and w. </p>
+<p>The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w. The other bits are interleaved following the previous sequence.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00160.html" title="Allow to perform bit operations on integer values. ">GLM_GTC_bitfield</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gafca8768671a14c8016facccb66a89f26"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL uint64 glm::bitfieldInterleave </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga13471cbbe74e4303a57f3743d007b74d">uint16</a> </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga13471cbbe74e4303a57f3743d007b74d">uint16</a> </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga13471cbbe74e4303a57f3743d007b74d">uint16</a> </td>
+ <td class="paramname"><em>z</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga13471cbbe74e4303a57f3743d007b74d">uint16</a> </td>
+ <td class="paramname"><em>w</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Interleaves the bits of x, y, z and w. </p>
+<p>The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w. The other bits are interleaved following the previous sequence.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00160.html" title="Allow to perform bit operations on integer values. ">GLM_GTC_bitfield</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga2eb49678a344ce1495bdb5586d9896b9"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genIUType glm::bitfieldRotateLeft </td>
+ <td>(</td>
+ <td class="paramtype">genIUType </td>
+ <td class="paramname"><em>In</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>Shift</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Rotate all bits to the left. </p>
+<p>All the bits dropped in the left side are inserted back on the right side.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00160.html" title="Allow to perform bit operations on integer values. ">GLM_GTC_bitfield</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga410d130917d85b865718e3ebc32cf0ef"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::bitfieldRotateLeft </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>In</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>Shift</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Rotate all bits to the left. </p>
+<p>All the bits dropped in the left side are inserted back on the right side.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00160.html" title="Allow to perform bit operations on integer values. ">GLM_GTC_bitfield</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga1c33d075c5fb8bd8dbfd5092bfc851ca"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genIUType glm::bitfieldRotateRight </td>
+ <td>(</td>
+ <td class="paramtype">genIUType </td>
+ <td class="paramname"><em>In</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>Shift</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Rotate all bits to the right. </p>
+<p>All the bits dropped in the right side are inserted back on the left side.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00160.html" title="Allow to perform bit operations on integer values. ">GLM_GTC_bitfield</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga96b56fd2adad1eeaee9e10dfe83904ba"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::bitfieldRotateRight </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>In</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>Shift</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Rotate all bits to the right. </p>
+<p>All the bits dropped in the right side are inserted back on the left side.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00160.html" title="Allow to perform bit operations on integer values. ">GLM_GTC_bitfield</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gad7eba518a0b71662114571ee76939f8a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genIUType glm::mask </td>
+ <td>(</td>
+ <td class="paramtype">genIUType </td>
+ <td class="paramname"><em>Bits</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a mask of 'count' bits. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00160.html" title="Allow to perform bit operations on integer values. ">GLM_GTC_bitfield</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga073dbd8642f550b51da3572541431c1c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecIUType<T, P> glm::mask </td>
+ <td>(</td>
+ <td class="paramtype">vecIUType< T, P > const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a mask of 'count' bits. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00160.html" title="Allow to perform bit operations on integer values. ">GLM_GTC_bitfield</a> </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00161.html b/src/third_party/glm/doc/api/a00161.html
new file mode 100644
index 0000000..f3a3a64
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00161.html
@@ -0,0 +1,141 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTC_color_space</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTC_color_space<div class="ingroups"><a class="el" href="a00154.html">GTC Extensions (Stable)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gad813dcd99644cafc775e83d6504ccb93"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gad813dcd99644cafc775e83d6504ccb93"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00161.html#gad813dcd99644cafc775e83d6504ccb93">convertLinearToSRGB</a> (vecType< T, P > const &ColorLinear)</td></tr>
+<tr class="separator:gad813dcd99644cafc775e83d6504ccb93"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga63f8b003da7acf44370eb47bfb8b3d42"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga63f8b003da7acf44370eb47bfb8b3d42"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00161.html#ga63f8b003da7acf44370eb47bfb8b3d42">convertLinearToSRGB</a> (vecType< T, P > const &ColorLinear, T Gamma)</td></tr>
+<tr class="separator:ga63f8b003da7acf44370eb47bfb8b3d42"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga28e98e64347cf385cadc1ceb4def55c9"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga28e98e64347cf385cadc1ceb4def55c9"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00161.html#ga28e98e64347cf385cadc1ceb4def55c9">convertSRGBToLinear</a> (vecType< T, P > const &ColorSRGB)</td></tr>
+<tr class="separator:ga28e98e64347cf385cadc1ceb4def55c9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga61c4f0efdf55c29d9cfbd26141fddef8"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga61c4f0efdf55c29d9cfbd26141fddef8"></a>
+template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga61c4f0efdf55c29d9cfbd26141fddef8"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00161.html#ga61c4f0efdf55c29d9cfbd26141fddef8">convertSRGBToLinear</a> (vecType< T, P > const &ColorSRGB, T Gamma)</td></tr>
+<tr class="separator:ga61c4f0efdf55c29d9cfbd26141fddef8"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Allow to perform bit operations on integer values. </p>
+<p><glm/gtc/color.hpp> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="gad813dcd99644cafc775e83d6504ccb93"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::convertLinearToSRGB </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>ColorLinear</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Convert a linear color to sRGB color using a standard gamma correction. </p>
+<p>IEC 61966-2-1:1999 specification <a href="https://www.w3.org/Graphics/Color/srgb">https://www.w3.org/Graphics/Color/srgb</a> </p>
+
+</div>
+</div>
+<a class="anchor" id="ga63f8b003da7acf44370eb47bfb8b3d42"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::convertLinearToSRGB </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>ColorLinear</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>Gamma</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Convert a linear color to sRGB color using a custom gamma correction. </p>
+<p>IEC 61966-2-1:1999 specification <a href="https://www.w3.org/Graphics/Color/srgb">https://www.w3.org/Graphics/Color/srgb</a> </p>
+
+</div>
+</div>
+<a class="anchor" id="ga28e98e64347cf385cadc1ceb4def55c9"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::convertSRGBToLinear </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>ColorSRGB</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Convert a sRGB color to linear color using a standard gamma correction. </p>
+<p>IEC 61966-2-1:1999 specification <a href="https://www.w3.org/Graphics/Color/srgb">https://www.w3.org/Graphics/Color/srgb</a> </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00162.html b/src/third_party/glm/doc/api/a00162.html
new file mode 100644
index 0000000..d9e0338
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00162.html
@@ -0,0 +1,670 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTC_constants</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTC_constants<div class="ingroups"><a class="el" href="a00154.html">GTC Extensions (Stable)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga4b7956eb6e2fbedfc7cf2e46e85c5139"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga4b7956eb6e2fbedfc7cf2e46e85c5139"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139">e</a> ()</td></tr>
+<tr class="separator:ga4b7956eb6e2fbedfc7cf2e46e85c5139"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2a1e57fc5592b69cfae84174cbfc9429"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga2a1e57fc5592b69cfae84174cbfc9429"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#ga2a1e57fc5592b69cfae84174cbfc9429">epsilon</a> ()</td></tr>
+<tr class="separator:ga2a1e57fc5592b69cfae84174cbfc9429"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad8fe2e6f90bce9d829e9723b649fbd42"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gad8fe2e6f90bce9d829e9723b649fbd42"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#gad8fe2e6f90bce9d829e9723b649fbd42">euler</a> ()</td></tr>
+<tr class="separator:gad8fe2e6f90bce9d829e9723b649fbd42"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga753950e5140e4ea6a88e4a18ba61dc09"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga753950e5140e4ea6a88e4a18ba61dc09"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#ga753950e5140e4ea6a88e4a18ba61dc09">four_over_pi</a> ()</td></tr>
+<tr class="separator:ga753950e5140e4ea6a88e4a18ba61dc09"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga748cf8642830657c5b7eae04d0a80899"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga748cf8642830657c5b7eae04d0a80899"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#ga748cf8642830657c5b7eae04d0a80899">golden_ratio</a> ()</td></tr>
+<tr class="separator:ga748cf8642830657c5b7eae04d0a80899"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0c36b41d462e45641faf7d7938948bac"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga0c36b41d462e45641faf7d7938948bac"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#ga0c36b41d462e45641faf7d7938948bac">half_pi</a> ()</td></tr>
+<tr class="separator:ga0c36b41d462e45641faf7d7938948bac"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaca94292c839ed31a405ab7a81ae7e850"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gaca94292c839ed31a405ab7a81ae7e850"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#gaca94292c839ed31a405ab7a81ae7e850">ln_ln_two</a> ()</td></tr>
+<tr class="separator:gaca94292c839ed31a405ab7a81ae7e850"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf97ebc6c059ffd788e6c4946f71ef66c"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gaf97ebc6c059ffd788e6c4946f71ef66c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#gaf97ebc6c059ffd788e6c4946f71ef66c">ln_ten</a> ()</td></tr>
+<tr class="separator:gaf97ebc6c059ffd788e6c4946f71ef66c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga24f4d27765678116f41a2f336ab7975c"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga24f4d27765678116f41a2f336ab7975c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#ga24f4d27765678116f41a2f336ab7975c">ln_two</a> ()</td></tr>
+<tr class="separator:ga24f4d27765678116f41a2f336ab7975c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga39c2fb227631ca25894326529bdd1ee5"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga39c2fb227631ca25894326529bdd1ee5"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#ga39c2fb227631ca25894326529bdd1ee5">one</a> ()</td></tr>
+<tr class="separator:ga39c2fb227631ca25894326529bdd1ee5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga555150da2b06d23c8738981d5013e0eb"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga555150da2b06d23c8738981d5013e0eb"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#ga555150da2b06d23c8738981d5013e0eb">one_over_pi</a> ()</td></tr>
+<tr class="separator:ga555150da2b06d23c8738981d5013e0eb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga788fa23a0939bac4d1d0205fb4f35818"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga788fa23a0939bac4d1d0205fb4f35818"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#ga788fa23a0939bac4d1d0205fb4f35818">one_over_root_two</a> ()</td></tr>
+<tr class="separator:ga788fa23a0939bac4d1d0205fb4f35818"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7c922b427986cbb2e4c6ac69874eefbc"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga7c922b427986cbb2e4c6ac69874eefbc"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#ga7c922b427986cbb2e4c6ac69874eefbc">one_over_two_pi</a> ()</td></tr>
+<tr class="separator:ga7c922b427986cbb2e4c6ac69874eefbc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga94bafeb2a0f23ab6450fed1f98ee4e45"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga94bafeb2a0f23ab6450fed1f98ee4e45"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#ga94bafeb2a0f23ab6450fed1f98ee4e45">pi</a> ()</td></tr>
+<tr class="separator:ga94bafeb2a0f23ab6450fed1f98ee4e45"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3c9df42bd73c519a995c43f0f99e77e0"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga3c9df42bd73c519a995c43f0f99e77e0"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#ga3c9df42bd73c519a995c43f0f99e77e0">quarter_pi</a> ()</td></tr>
+<tr class="separator:ga3c9df42bd73c519a995c43f0f99e77e0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae9ebbded75b53d4faeb1e4ef8b3347a2"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gae9ebbded75b53d4faeb1e4ef8b3347a2"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#gae9ebbded75b53d4faeb1e4ef8b3347a2">root_five</a> ()</td></tr>
+<tr class="separator:gae9ebbded75b53d4faeb1e4ef8b3347a2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4e276cb823cc5e612d4f89ed99c75039"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga4e276cb823cc5e612d4f89ed99c75039"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#ga4e276cb823cc5e612d4f89ed99c75039">root_half_pi</a> ()</td></tr>
+<tr class="separator:ga4e276cb823cc5e612d4f89ed99c75039"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4129412e96b33707a77c1a07652e23e2"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga4129412e96b33707a77c1a07652e23e2"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#ga4129412e96b33707a77c1a07652e23e2">root_ln_four</a> ()</td></tr>
+<tr class="separator:ga4129412e96b33707a77c1a07652e23e2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga261380796b2cd496f68d2cf1d08b8eb9"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga261380796b2cd496f68d2cf1d08b8eb9"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#ga261380796b2cd496f68d2cf1d08b8eb9">root_pi</a> ()</td></tr>
+<tr class="separator:ga261380796b2cd496f68d2cf1d08b8eb9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4f286be4abe88be1eed7d2a9f6cb193e"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga4f286be4abe88be1eed7d2a9f6cb193e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#ga4f286be4abe88be1eed7d2a9f6cb193e">root_three</a> ()</td></tr>
+<tr class="separator:ga4f286be4abe88be1eed7d2a9f6cb193e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga74e607d29020f100c0d0dc46ce2ca950"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga74e607d29020f100c0d0dc46ce2ca950"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#ga74e607d29020f100c0d0dc46ce2ca950">root_two</a> ()</td></tr>
+<tr class="separator:ga74e607d29020f100c0d0dc46ce2ca950"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2bcedc575039fe0cd765742f8bbb0bd3"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga2bcedc575039fe0cd765742f8bbb0bd3"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#ga2bcedc575039fe0cd765742f8bbb0bd3">root_two_pi</a> ()</td></tr>
+<tr class="separator:ga2bcedc575039fe0cd765742f8bbb0bd3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3077c6311010a214b69ddc8214ec13b5"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga3077c6311010a214b69ddc8214ec13b5"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#ga3077c6311010a214b69ddc8214ec13b5">third</a> ()</td></tr>
+<tr class="separator:ga3077c6311010a214b69ddc8214ec13b5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae94950df74b0ce382b1fc1d978ef7394"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gae94950df74b0ce382b1fc1d978ef7394"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#gae94950df74b0ce382b1fc1d978ef7394">three_over_two_pi</a> ()</td></tr>
+<tr class="separator:gae94950df74b0ce382b1fc1d978ef7394"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga74eadc8a211253079683219a3ea0462a"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga74eadc8a211253079683219a3ea0462a"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#ga74eadc8a211253079683219a3ea0462a">two_over_pi</a> ()</td></tr>
+<tr class="separator:ga74eadc8a211253079683219a3ea0462a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5827301817640843cf02026a8d493894"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga5827301817640843cf02026a8d493894"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#ga5827301817640843cf02026a8d493894">two_over_root_pi</a> ()</td></tr>
+<tr class="separator:ga5827301817640843cf02026a8d493894"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa5276a4617566abcfe49286f40e3a256"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gaa5276a4617566abcfe49286f40e3a256"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#gaa5276a4617566abcfe49286f40e3a256">two_pi</a> ()</td></tr>
+<tr class="separator:gaa5276a4617566abcfe49286f40e3a256"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9b4d2f4322edcf63a6737b92a29dd1f5"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga9b4d2f4322edcf63a6737b92a29dd1f5"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#ga9b4d2f4322edcf63a6737b92a29dd1f5">two_thirds</a> ()</td></tr>
+<tr class="separator:ga9b4d2f4322edcf63a6737b92a29dd1f5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga788f5a421fc0f40a1296ebc094cbaa8a"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga788f5a421fc0f40a1296ebc094cbaa8a"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00162.html#ga788f5a421fc0f40a1296ebc094cbaa8a">zero</a> ()</td></tr>
+<tr class="separator:ga788f5a421fc0f40a1296ebc094cbaa8a"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Provide a list of constants and precomputed useful values. </p>
+<p><<a class="el" href="a00018.html" title="GLM_GTC_constants ">glm/gtc/constants.hpp</a>> need to be included to use these features. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga4b7956eb6e2fbedfc7cf2e46e85c5139"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::e </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return e constant. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00162.html" title="Provide a list of constants and precomputed useful values. ">GLM_GTC_constants</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga2a1e57fc5592b69cfae84174cbfc9429"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::epsilon </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return the epsilon constant for floating point types. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00162.html" title="Provide a list of constants and precomputed useful values. ">GLM_GTC_constants</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gad8fe2e6f90bce9d829e9723b649fbd42"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::euler </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return Euler's constant. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00162.html" title="Provide a list of constants and precomputed useful values. ">GLM_GTC_constants</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga753950e5140e4ea6a88e4a18ba61dc09"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::four_over_pi </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return 4 / pi. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00162.html" title="Provide a list of constants and precomputed useful values. ">GLM_GTC_constants</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga748cf8642830657c5b7eae04d0a80899"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::golden_ratio </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return the golden ratio constant. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00162.html" title="Provide a list of constants and precomputed useful values. ">GLM_GTC_constants</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga0c36b41d462e45641faf7d7938948bac"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::half_pi </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return pi / 2. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00162.html" title="Provide a list of constants and precomputed useful values. ">GLM_GTC_constants</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaca94292c839ed31a405ab7a81ae7e850"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::ln_ln_two </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return ln(ln(2)). </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00162.html" title="Provide a list of constants and precomputed useful values. ">GLM_GTC_constants</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaf97ebc6c059ffd788e6c4946f71ef66c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::ln_ten </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return ln(10). </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00162.html" title="Provide a list of constants and precomputed useful values. ">GLM_GTC_constants</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga24f4d27765678116f41a2f336ab7975c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::ln_two </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return ln(2). </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00162.html" title="Provide a list of constants and precomputed useful values. ">GLM_GTC_constants</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga39c2fb227631ca25894326529bdd1ee5"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::one </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return 1. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00162.html" title="Provide a list of constants and precomputed useful values. ">GLM_GTC_constants</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga555150da2b06d23c8738981d5013e0eb"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::one_over_pi </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return 1 / pi. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00162.html" title="Provide a list of constants and precomputed useful values. ">GLM_GTC_constants</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga788fa23a0939bac4d1d0205fb4f35818"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::one_over_root_two </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return 1 / sqrt(2). </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00162.html" title="Provide a list of constants and precomputed useful values. ">GLM_GTC_constants</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga7c922b427986cbb2e4c6ac69874eefbc"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::one_over_two_pi </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return 1 / (pi * 2). </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00162.html" title="Provide a list of constants and precomputed useful values. ">GLM_GTC_constants</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga94bafeb2a0f23ab6450fed1f98ee4e45"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::pi </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return the pi constant. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00162.html" title="Provide a list of constants and precomputed useful values. ">GLM_GTC_constants</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga3c9df42bd73c519a995c43f0f99e77e0"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::quarter_pi </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return pi / 4. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00162.html" title="Provide a list of constants and precomputed useful values. ">GLM_GTC_constants</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gae9ebbded75b53d4faeb1e4ef8b3347a2"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::root_five </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return sqrt(5). </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00162.html" title="Provide a list of constants and precomputed useful values. ">GLM_GTC_constants</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga4e276cb823cc5e612d4f89ed99c75039"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::root_half_pi </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return sqrt(pi / 2). </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00162.html" title="Provide a list of constants and precomputed useful values. ">GLM_GTC_constants</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga4129412e96b33707a77c1a07652e23e2"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::root_ln_four </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return sqrt(ln(4)). </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00162.html" title="Provide a list of constants and precomputed useful values. ">GLM_GTC_constants</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga261380796b2cd496f68d2cf1d08b8eb9"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::root_pi </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return square root of pi. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00162.html" title="Provide a list of constants and precomputed useful values. ">GLM_GTC_constants</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga4f286be4abe88be1eed7d2a9f6cb193e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::root_three </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return sqrt(3). </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00162.html" title="Provide a list of constants and precomputed useful values. ">GLM_GTC_constants</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga74e607d29020f100c0d0dc46ce2ca950"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::root_two </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return sqrt(2). </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00162.html" title="Provide a list of constants and precomputed useful values. ">GLM_GTC_constants</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga2bcedc575039fe0cd765742f8bbb0bd3"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::root_two_pi </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return sqrt(2 * pi). </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00162.html" title="Provide a list of constants and precomputed useful values. ">GLM_GTC_constants</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga3077c6311010a214b69ddc8214ec13b5"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::third </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return 1 / 3. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00162.html" title="Provide a list of constants and precomputed useful values. ">GLM_GTC_constants</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gae94950df74b0ce382b1fc1d978ef7394"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::three_over_two_pi </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return pi / 2 * 3. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00162.html" title="Provide a list of constants and precomputed useful values. ">GLM_GTC_constants</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga74eadc8a211253079683219a3ea0462a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::two_over_pi </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return 2 / pi. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00162.html" title="Provide a list of constants and precomputed useful values. ">GLM_GTC_constants</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga5827301817640843cf02026a8d493894"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::two_over_root_pi </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return 2 / sqrt(pi). </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00162.html" title="Provide a list of constants and precomputed useful values. ">GLM_GTC_constants</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaa5276a4617566abcfe49286f40e3a256"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::two_pi </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return pi * 2. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00162.html" title="Provide a list of constants and precomputed useful values. ">GLM_GTC_constants</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga9b4d2f4322edcf63a6737b92a29dd1f5"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::two_thirds </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return 2 / 3. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00162.html" title="Provide a list of constants and precomputed useful values. ">GLM_GTC_constants</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga788f5a421fc0f40a1296ebc094cbaa8a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::zero </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return 0. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00162.html" title="Provide a list of constants and precomputed useful values. ">GLM_GTC_constants</a> </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00163.html b/src/third_party/glm/doc/api/a00163.html
new file mode 100644
index 0000000..9275053
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00163.html
@@ -0,0 +1,217 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTC_epsilon</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTC_epsilon<div class="ingroups"><a class="el" href="a00154.html">GTC Extensions (Stable)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gaca9443f217dc36587624247245522331"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gaca9443f217dc36587624247245522331"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00163.html#gaca9443f217dc36587624247245522331">epsilonEqual</a> (vecType< T, P > const &x, vecType< T, P > const &y, T const &epsilon)</td></tr>
+<tr class="separator:gaca9443f217dc36587624247245522331"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa7f227999ca09e7ca994e8b35aba47bb"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gaa7f227999ca09e7ca994e8b35aba47bb"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00163.html#gaa7f227999ca09e7ca994e8b35aba47bb">epsilonEqual</a> (genType const &x, genType const &y, genType const &epsilon)</td></tr>
+<tr class="separator:gaa7f227999ca09e7ca994e8b35aba47bb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga14e2888a304654ade8a3996024e2739c"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga14e2888a304654ade8a3996024e2739c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType::boolType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00163.html#ga14e2888a304654ade8a3996024e2739c">epsilonNotEqual</a> (genType const &x, genType const &y, typename genType::value_type const &epsilon)</td></tr>
+<tr class="separator:ga14e2888a304654ade8a3996024e2739c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga50a92103fb0cbd796908e1bf20c79aaf"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga50a92103fb0cbd796908e1bf20c79aaf"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00163.html#ga50a92103fb0cbd796908e1bf20c79aaf">epsilonNotEqual</a> (genType const &x, genType const &y, genType const &epsilon)</td></tr>
+<tr class="separator:ga50a92103fb0cbd796908e1bf20c79aaf"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Comparison functions for a user defined epsilon values. </p>
+<p><<a class="el" href="a00020.html" title="GLM_GTC_epsilon ">glm/gtc/epsilon.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="gaca9443f217dc36587624247245522331"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<bool, P> glm::epsilonEqual </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>epsilon</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the component-wise comparison of |x - y| < epsilon. </p>
+<p>True if this expression is satisfied.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00163.html" title="Comparison functions for a user defined epsilon values. ">GLM_GTC_epsilon</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaa7f227999ca09e7ca994e8b35aba47bb"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL bool glm::epsilonEqual </td>
+ <td>(</td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>epsilon</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the component-wise comparison of |x - y| < epsilon. </p>
+<p>True if this expression is satisfied.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00163.html" title="Comparison functions for a user defined epsilon values. ">GLM_GTC_epsilon</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga14e2888a304654ade8a3996024e2739c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType::boolType glm::epsilonNotEqual </td>
+ <td>(</td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">typename genType::value_type const & </td>
+ <td class="paramname"><em>epsilon</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the component-wise comparison of |x - y| < epsilon. </p>
+<p>True if this expression is not satisfied.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00163.html" title="Comparison functions for a user defined epsilon values. ">GLM_GTC_epsilon</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga50a92103fb0cbd796908e1bf20c79aaf"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL bool glm::epsilonNotEqual </td>
+ <td>(</td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>epsilon</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the component-wise comparison of |x - y| >= epsilon. </p>
+<p>True if this expression is not satisfied.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00163.html" title="Comparison functions for a user defined epsilon values. ">GLM_GTC_epsilon</a> </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00164.html b/src/third_party/glm/doc/api/a00164.html
new file mode 100644
index 0000000..884eea2
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00164.html
@@ -0,0 +1,137 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTC_functions</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTC_functions<div class="ingroups"><a class="el" href="a00154.html">GTC Extensions (Stable)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga0b50b197ff74261a0fad90f4b8d24702"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga0b50b197ff74261a0fad90f4b8d24702"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00164.html#ga0b50b197ff74261a0fad90f4b8d24702">gauss</a> (T x, T ExpectedValue, T StandardDeviation)</td></tr>
+<tr class="separator:ga0b50b197ff74261a0fad90f4b8d24702"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7448f9eb74bb5924f6330ab532f2899c"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga7448f9eb74bb5924f6330ab532f2899c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00164.html#ga7448f9eb74bb5924f6330ab532f2899c">gauss</a> (tvec2< T, P > const &Coord, tvec2< T, P > const &ExpectedValue, tvec2< T, P > const &StandardDeviation)</td></tr>
+<tr class="separator:ga7448f9eb74bb5924f6330ab532f2899c"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>List of useful common functions. </p>
+<p><<a class="el" href="a00037.html" title="GLM_GTC_functions ">glm/gtc/functions.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga0b50b197ff74261a0fad90f4b8d24702"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL T glm::gauss </td>
+ <td>(</td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>ExpectedValue</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>StandardDeviation</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>1D gauss function </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00163.html" title="Comparison functions for a user defined epsilon values. ">GLM_GTC_epsilon</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga7448f9eb74bb5924f6330ab532f2899c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL T glm::gauss </td>
+ <td>(</td>
+ <td class="paramtype">tvec2< T, P > const & </td>
+ <td class="paramname"><em>Coord</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec2< T, P > const & </td>
+ <td class="paramname"><em>ExpectedValue</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec2< T, P > const & </td>
+ <td class="paramname"><em>StandardDeviation</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2D gauss function </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00163.html" title="Comparison functions for a user defined epsilon values. ">GLM_GTC_epsilon</a> </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00165.html b/src/third_party/glm/doc/api/a00165.html
new file mode 100644
index 0000000..5cde36e
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00165.html
@@ -0,0 +1,290 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTC_integer</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTC_integer<div class="ingroups"><a class="el" href="a00154.html">GTC Extensions (Stable)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga0a42ffb863cc980e91f98d2f5766de20"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga0a42ffb863cc980e91f98d2f5766de20"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< int, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00165.html#ga0a42ffb863cc980e91f98d2f5766de20">iround</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:ga0a42ffb863cc980e91f98d2f5766de20"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9bd682e74bfacb005c735305207ec417"><td class="memTemplParams" colspan="2">template<typename genIUType > </td></tr>
+<tr class="memitem:ga9bd682e74bfacb005c735305207ec417"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genIUType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00165.html#ga9bd682e74bfacb005c735305207ec417">log2</a> (genIUType x)</td></tr>
+<tr class="separator:ga9bd682e74bfacb005c735305207ec417"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga75c6fd2a143fc44e5f7b871abad539e0"><td class="memTemplParams" colspan="2">template<typename genIUType > </td></tr>
+<tr class="memitem:ga75c6fd2a143fc44e5f7b871abad539e0"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genIUType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00165.html#ga75c6fd2a143fc44e5f7b871abad539e0">mod</a> (genIUType x, genIUType y)</td></tr>
+<tr class="separator:ga75c6fd2a143fc44e5f7b871abad539e0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac76ae7d82ff22526bcf6d6a1b51af6c3"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gac76ae7d82ff22526bcf6d6a1b51af6c3"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00165.html#gac76ae7d82ff22526bcf6d6a1b51af6c3">mod</a> (vecType< T, P > const &x, T y)</td></tr>
+<tr class="separator:gac76ae7d82ff22526bcf6d6a1b51af6c3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf5ae5330f6b30b4a35fb95f9a73d6134"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gaf5ae5330f6b30b4a35fb95f9a73d6134"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00165.html#gaf5ae5330f6b30b4a35fb95f9a73d6134">mod</a> (vecType< T, P > const &x, vecType< T, P > const &y)</td></tr>
+<tr class="separator:gaf5ae5330f6b30b4a35fb95f9a73d6134"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab61b8546aafdf58f119eb892b212607c"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gab61b8546aafdf58f119eb892b212607c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< uint, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00165.html#gab61b8546aafdf58f119eb892b212607c">uround</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:gab61b8546aafdf58f119eb892b212607c"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Allow to perform bit operations on integer values. </p>
+<p><<a class="el" href="a00044.html" title="GLM_GTC_integer ">glm/gtc/integer.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga0a42ffb863cc980e91f98d2f5766de20"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<int, P> glm::iround </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns a value equal to the nearest integer to x. </p>
+<p>The fraction 0.5 will round in a direction chosen by the implementation, presumably the direction that is fastest.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">x</td><td>The values of the argument must be greater or equal to zero. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">T</td><td>floating point scalar types. </td></tr>
+ <tr><td class="paramname">vecType</td><td>vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/round.xml">GLSL round man page</a> </dd>
+<dd>
+<a class="el" href="a00165.html" title="Allow to perform bit operations on integer values. ">GLM_GTC_integer</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga9bd682e74bfacb005c735305207ec417"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genIUType glm::log2 </td>
+ <td>(</td>
+ <td class="paramtype">genIUType </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the log2 of x for integer values. </p>
+<p>Can be reliably using to compute mipmap count from the texture size. </p><dl class="section see"><dt>See also</dt><dd><a class="el" href="a00165.html" title="Allow to perform bit operations on integer values. ">GLM_GTC_integer</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga75c6fd2a143fc44e5f7b871abad539e0"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genIUType glm::mod </td>
+ <td>(</td>
+ <td class="paramtype">genIUType </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genIUType </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Modulus. </p>
+<p>Returns x % y for each component in x using the floating point value y.</p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genIUType</td><td>Integer-point scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00165.html" title="Allow to perform bit operations on integer values. ">GLM_GTC_integer</a> </dd>
+<dd>
+<a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/mod.xml">GLSL mod man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gac76ae7d82ff22526bcf6d6a1b51af6c3"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType< T, P > mod </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Modulus. </p>
+<p>Returns x % y for each component in x using the floating point value y.</p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">T</td><td>Integer scalar types. </td></tr>
+ <tr><td class="paramname">vecType</td><td>vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00165.html" title="Allow to perform bit operations on integer values. ">GLM_GTC_integer</a> </dd>
+<dd>
+<a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/mod.xml">GLSL mod man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaf5ae5330f6b30b4a35fb95f9a73d6134"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType< T, P > mod </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Modulus. </p>
+<p>Returns x % y for each component in x using the floating point value y.</p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">T</td><td>Integer scalar types. </td></tr>
+ <tr><td class="paramname">vecType</td><td>vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00165.html" title="Allow to perform bit operations on integer values. ">GLM_GTC_integer</a> </dd>
+<dd>
+<a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/mod.xml">GLSL mod man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gab61b8546aafdf58f119eb892b212607c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<uint, P> glm::uround </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns a value equal to the nearest integer to x. </p>
+<p>The fraction 0.5 will round in a direction chosen by the implementation, presumably the direction that is fastest.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">x</td><td>The values of the argument must be greater or equal to zero. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">T</td><td>floating point scalar types. </td></tr>
+ <tr><td class="paramname">vecType</td><td>vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/round.xml">GLSL round man page</a> </dd>
+<dd>
+<a class="el" href="a00165.html" title="Allow to perform bit operations on integer values. ">GLM_GTC_integer</a> </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00166.html b/src/third_party/glm/doc/api/a00166.html
new file mode 100644
index 0000000..cc9c799
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00166.html
@@ -0,0 +1,201 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTC_matrix_access</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTC_matrix_access<div class="ingroups"><a class="el" href="a00154.html">GTC Extensions (Stable)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga96022eb0d3fae39d89fc7a954e59b374"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga96022eb0d3fae39d89fc7a954e59b374"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType::col_type </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00166.html#ga96022eb0d3fae39d89fc7a954e59b374">column</a> (genType const &m, length_t index)</td></tr>
+<tr class="separator:ga96022eb0d3fae39d89fc7a954e59b374"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9e757377523890e8b80c5843dbe4dd15"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga9e757377523890e8b80c5843dbe4dd15"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00166.html#ga9e757377523890e8b80c5843dbe4dd15">column</a> (genType const &m, length_t index, typename genType::col_type const &x)</td></tr>
+<tr class="separator:ga9e757377523890e8b80c5843dbe4dd15"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga259e5ebd0f31ec3f83440f8cae7f5dba"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga259e5ebd0f31ec3f83440f8cae7f5dba"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType::row_type </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00166.html#ga259e5ebd0f31ec3f83440f8cae7f5dba">row</a> (genType const &m, length_t index)</td></tr>
+<tr class="separator:ga259e5ebd0f31ec3f83440f8cae7f5dba"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaadcc64829aadf4103477679e48c7594f"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gaadcc64829aadf4103477679e48c7594f"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00166.html#gaadcc64829aadf4103477679e48c7594f">row</a> (genType const &m, length_t index, typename genType::row_type const &x)</td></tr>
+<tr class="separator:gaadcc64829aadf4103477679e48c7594f"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Defines functions to access rows or columns of a matrix easily. </p>
+<p><<a class="el" href="a00061.html" title="GLM_GTC_matrix_access ">glm/gtc/matrix_access.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga96022eb0d3fae39d89fc7a954e59b374"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType::col_type glm::column </td>
+ <td>(</td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">length_t </td>
+ <td class="paramname"><em>index</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Get a specific column of a matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00166.html" title="Defines functions to access rows or columns of a matrix easily. ">GLM_GTC_matrix_access</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga9e757377523890e8b80c5843dbe4dd15"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::column </td>
+ <td>(</td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">length_t </td>
+ <td class="paramname"><em>index</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">typename genType::col_type const & </td>
+ <td class="paramname"><em>x</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Set a specific column to a matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00166.html" title="Defines functions to access rows or columns of a matrix easily. ">GLM_GTC_matrix_access</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga259e5ebd0f31ec3f83440f8cae7f5dba"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType::row_type glm::row </td>
+ <td>(</td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">length_t </td>
+ <td class="paramname"><em>index</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Get a specific row of a matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00166.html" title="Defines functions to access rows or columns of a matrix easily. ">GLM_GTC_matrix_access</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaadcc64829aadf4103477679e48c7594f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::row </td>
+ <td>(</td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">length_t </td>
+ <td class="paramname"><em>index</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">typename genType::row_type const & </td>
+ <td class="paramname"><em>x</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Set a specific row to a matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00166.html" title="Defines functions to access rows or columns of a matrix easily. ">GLM_GTC_matrix_access</a> </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00167.html b/src/third_party/glm/doc/api/a00167.html
new file mode 100644
index 0000000..8e44c1b
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00167.html
@@ -0,0 +1,1885 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTC_matrix_integer</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#typedef-members">Typedefs</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTC_matrix_integer<div class="ingroups"><a class="el" href="a00154.html">GTC Extensions (Stable)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:gaa9f8144beebdefd85e2a9ac480e7608a"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gaa9f8144beebdefd85e2a9ac480e7608a">highp_imat2</a></td></tr>
+<tr class="separator:gaa9f8144beebdefd85e2a9ac480e7608a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac455e55e7cb32e31396a9d4613da046a"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gac455e55e7cb32e31396a9d4613da046a">highp_imat2x2</a></td></tr>
+<tr class="separator:gac455e55e7cb32e31396a9d4613da046a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5f5f1e6dc06b72216463a425b2f7613e"><td class="memItemLeft" align="right" valign="top">typedef tmat2x3< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga5f5f1e6dc06b72216463a425b2f7613e">highp_imat2x3</a></td></tr>
+<tr class="separator:ga5f5f1e6dc06b72216463a425b2f7613e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga73b855cc40e5d8202b7ab38461326d65"><td class="memItemLeft" align="right" valign="top">typedef tmat2x4< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga73b855cc40e5d8202b7ab38461326d65">highp_imat2x4</a></td></tr>
+<tr class="separator:ga73b855cc40e5d8202b7ab38461326d65"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4efd6470c0edf9704d2244fc92dbc2a9"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga4efd6470c0edf9704d2244fc92dbc2a9">highp_imat3</a></td></tr>
+<tr class="separator:ga4efd6470c0edf9704d2244fc92dbc2a9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0413bf87605b9247be2533c439127a1c"><td class="memItemLeft" align="right" valign="top">typedef tmat3x2< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga0413bf87605b9247be2533c439127a1c">highp_imat3x2</a></td></tr>
+<tr class="separator:ga0413bf87605b9247be2533c439127a1c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gacce460d54216438bb577bf8c9d68299c"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gacce460d54216438bb577bf8c9d68299c">highp_imat3x3</a></td></tr>
+<tr class="separator:gacce460d54216438bb577bf8c9d68299c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad4fea24b4100e21ed7742c91e5458d49"><td class="memItemLeft" align="right" valign="top">typedef tmat3x4< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gad4fea24b4100e21ed7742c91e5458d49">highp_imat3x4</a></td></tr>
+<tr class="separator:gad4fea24b4100e21ed7742c91e5458d49"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga159ce04cc638ff4db755542cd8f758cb"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga159ce04cc638ff4db755542cd8f758cb">highp_imat4</a></td></tr>
+<tr class="separator:ga159ce04cc638ff4db755542cd8f758cb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7d43dd8332000f7f19379efa1b303599"><td class="memItemLeft" align="right" valign="top">typedef tmat4x2< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga7d43dd8332000f7f19379efa1b303599">highp_imat4x2</a></td></tr>
+<tr class="separator:ga7d43dd8332000f7f19379efa1b303599"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0c66b9b7c10a6017a58a03489c8d4c73"><td class="memItemLeft" align="right" valign="top">typedef tmat4x3< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga0c66b9b7c10a6017a58a03489c8d4c73">highp_imat4x3</a></td></tr>
+<tr class="separator:ga0c66b9b7c10a6017a58a03489c8d4c73"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae53db595d36f49a299e180302795e3c9"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gae53db595d36f49a299e180302795e3c9">highp_imat4x4</a></td></tr>
+<tr class="separator:gae53db595d36f49a299e180302795e3c9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae7b96c808a36fbe87f41af1c77b7941c"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< uint, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gae7b96c808a36fbe87f41af1c77b7941c">highp_umat2</a></td></tr>
+<tr class="separator:gae7b96c808a36fbe87f41af1c77b7941c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4860b4b01430bdb70643808c8d3bf5cb"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< uint, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga4860b4b01430bdb70643808c8d3bf5cb">highp_umat2x2</a></td></tr>
+<tr class="separator:ga4860b4b01430bdb70643808c8d3bf5cb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac351446661e5a8168473ff7b3b5ac3b5"><td class="memItemLeft" align="right" valign="top">typedef tmat2x3< uint, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gac351446661e5a8168473ff7b3b5ac3b5">highp_umat2x3</a></td></tr>
+<tr class="separator:gac351446661e5a8168473ff7b3b5ac3b5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga815eb9fdf70edc45687cbcda07e97213"><td class="memItemLeft" align="right" valign="top">typedef tmat2x4< uint, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga815eb9fdf70edc45687cbcda07e97213">highp_umat2x4</a></td></tr>
+<tr class="separator:ga815eb9fdf70edc45687cbcda07e97213"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa60b19d7cadbaa56bed1e6e0047af147"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< uint, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gaa60b19d7cadbaa56bed1e6e0047af147">highp_umat3</a></td></tr>
+<tr class="separator:gaa60b19d7cadbaa56bed1e6e0047af147"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab1d8e627b6a0b21c9b5e599a89132d8f"><td class="memItemLeft" align="right" valign="top">typedef tmat3x2< uint, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gab1d8e627b6a0b21c9b5e599a89132d8f">highp_umat3x2</a></td></tr>
+<tr class="separator:gab1d8e627b6a0b21c9b5e599a89132d8f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gacf71e9abe57bcfd18b4b003421e306aa"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< uint, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gacf71e9abe57bcfd18b4b003421e306aa">highp_umat3x3</a></td></tr>
+<tr class="separator:gacf71e9abe57bcfd18b4b003421e306aa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6edbf193ad6c4309e31262165f2655e7"><td class="memItemLeft" align="right" valign="top">typedef tmat3x4< uint, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga6edbf193ad6c4309e31262165f2655e7">highp_umat3x4</a></td></tr>
+<tr class="separator:ga6edbf193ad6c4309e31262165f2655e7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8368cb49cb0bd5ac682a71d1eccc9a8c"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< uint, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga8368cb49cb0bd5ac682a71d1eccc9a8c">highp_umat4</a></td></tr>
+<tr class="separator:ga8368cb49cb0bd5ac682a71d1eccc9a8c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaaba8a59eac3e5c0b3aaa9b35c1f10292"><td class="memItemLeft" align="right" valign="top">typedef tmat4x2< uint, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gaaba8a59eac3e5c0b3aaa9b35c1f10292">highp_umat4x2</a></td></tr>
+<tr class="separator:gaaba8a59eac3e5c0b3aaa9b35c1f10292"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga899a376888652fe3c03718641812bb27"><td class="memItemLeft" align="right" valign="top">typedef tmat4x3< uint, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga899a376888652fe3c03718641812bb27">highp_umat4x3</a></td></tr>
+<tr class="separator:ga899a376888652fe3c03718641812bb27"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab8068521c0ad6990373d27d87d333084"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< uint, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gab8068521c0ad6990373d27d87d333084">highp_umat4x4</a></td></tr>
+<tr class="separator:gab8068521c0ad6990373d27d87d333084"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaabe04f9948d4a213bb1c20137de03e01"><td class="memItemLeft" align="right" valign="top">typedef mediump_imat2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gaabe04f9948d4a213bb1c20137de03e01">imat2</a></td></tr>
+<tr class="separator:gaabe04f9948d4a213bb1c20137de03e01"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa4732a240522ad9bc28144fda2fc14ec"><td class="memItemLeft" align="right" valign="top">typedef mediump_imat2x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gaa4732a240522ad9bc28144fda2fc14ec">imat2x2</a></td></tr>
+<tr class="separator:gaa4732a240522ad9bc28144fda2fc14ec"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3f42dd3d5d94a0fd5706f7ec8dd0c605"><td class="memItemLeft" align="right" valign="top">typedef mediump_imat2x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga3f42dd3d5d94a0fd5706f7ec8dd0c605">imat2x3</a></td></tr>
+<tr class="separator:ga3f42dd3d5d94a0fd5706f7ec8dd0c605"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9d8faafdca42583d67e792dd038fc668"><td class="memItemLeft" align="right" valign="top">typedef mediump_imat2x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga9d8faafdca42583d67e792dd038fc668">imat2x4</a></td></tr>
+<tr class="separator:ga9d8faafdca42583d67e792dd038fc668"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga038f68437155ffa3c2583a15264a8195"><td class="memItemLeft" align="right" valign="top">typedef mediump_imat3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga038f68437155ffa3c2583a15264a8195">imat3</a></td></tr>
+<tr class="separator:ga038f68437155ffa3c2583a15264a8195"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7b33bbe4f12c060892bd3cc8d4cd737f"><td class="memItemLeft" align="right" valign="top">typedef mediump_imat3x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga7b33bbe4f12c060892bd3cc8d4cd737f">imat3x2</a></td></tr>
+<tr class="separator:ga7b33bbe4f12c060892bd3cc8d4cd737f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6aacc960f62e8f7d2fe9d32d5050e7a4"><td class="memItemLeft" align="right" valign="top">typedef mediump_imat3x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga6aacc960f62e8f7d2fe9d32d5050e7a4">imat3x3</a></td></tr>
+<tr class="separator:ga6aacc960f62e8f7d2fe9d32d5050e7a4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6e9ce23496d8b08dfc302d4039694b58"><td class="memItemLeft" align="right" valign="top">typedef mediump_imat3x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga6e9ce23496d8b08dfc302d4039694b58">imat3x4</a></td></tr>
+<tr class="separator:ga6e9ce23496d8b08dfc302d4039694b58"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga96b0d26a33b81bb6a60ca0f39682f7eb"><td class="memItemLeft" align="right" valign="top">typedef mediump_imat4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga96b0d26a33b81bb6a60ca0f39682f7eb">imat4</a></td></tr>
+<tr class="separator:ga96b0d26a33b81bb6a60ca0f39682f7eb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8ce7ef51d8b2c1901fa5414deccbc3fa"><td class="memItemLeft" align="right" valign="top">typedef mediump_imat4x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga8ce7ef51d8b2c1901fa5414deccbc3fa">imat4x2</a></td></tr>
+<tr class="separator:ga8ce7ef51d8b2c1901fa5414deccbc3fa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga705ee0bf49d6c3de4404ce2481bf0df5"><td class="memItemLeft" align="right" valign="top">typedef mediump_imat4x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga705ee0bf49d6c3de4404ce2481bf0df5">imat4x3</a></td></tr>
+<tr class="separator:ga705ee0bf49d6c3de4404ce2481bf0df5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga43ed5e4f475b6f4cad7cba78f29c405b"><td class="memItemLeft" align="right" valign="top">typedef mediump_imat4x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga43ed5e4f475b6f4cad7cba78f29c405b">imat4x4</a></td></tr>
+<tr class="separator:ga43ed5e4f475b6f4cad7cba78f29c405b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3c035fec7db0d671ec8f9f1f0d05bed0"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< int, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga3c035fec7db0d671ec8f9f1f0d05bed0">lowp_imat2</a></td></tr>
+<tr class="separator:ga3c035fec7db0d671ec8f9f1f0d05bed0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5bfe58853451fbc1f1ef6ce1f93c5e31"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< int, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga5bfe58853451fbc1f1ef6ce1f93c5e31">lowp_imat2x2</a></td></tr>
+<tr class="separator:ga5bfe58853451fbc1f1ef6ce1f93c5e31"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3f8fb92b62e31528886cc728d3404ecc"><td class="memItemLeft" align="right" valign="top">typedef tmat2x3< int, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga3f8fb92b62e31528886cc728d3404ecc">lowp_imat2x3</a></td></tr>
+<tr class="separator:ga3f8fb92b62e31528886cc728d3404ecc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga892b53e26d36763f380b08a5768dee6b"><td class="memItemLeft" align="right" valign="top">typedef tmat2x4< int, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga892b53e26d36763f380b08a5768dee6b">lowp_imat2x4</a></td></tr>
+<tr class="separator:ga892b53e26d36763f380b08a5768dee6b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga148f3a81d15a570b9460158e6964f41c"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< int, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga148f3a81d15a570b9460158e6964f41c">lowp_imat3</a></td></tr>
+<tr class="separator:ga148f3a81d15a570b9460158e6964f41c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7655dfee0d726e80d7a3b72f46d5fd35"><td class="memItemLeft" align="right" valign="top">typedef tmat3x2< int, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga7655dfee0d726e80d7a3b72f46d5fd35">lowp_imat3x2</a></td></tr>
+<tr class="separator:ga7655dfee0d726e80d7a3b72f46d5fd35"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab3d5c6aaeb5815f8f080305888f6828f"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< int, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gab3d5c6aaeb5815f8f080305888f6828f">lowp_imat3x3</a></td></tr>
+<tr class="separator:gab3d5c6aaeb5815f8f080305888f6828f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3d913d70c629aa7ad504739286328f1b"><td class="memItemLeft" align="right" valign="top">typedef tmat3x4< int, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga3d913d70c629aa7ad504739286328f1b">lowp_imat3x4</a></td></tr>
+<tr class="separator:ga3d913d70c629aa7ad504739286328f1b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad3d7b23bdb4ed9b7d53c9db792db9bb4"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< int, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gad3d7b23bdb4ed9b7d53c9db792db9bb4">lowp_imat4</a></td></tr>
+<tr class="separator:gad3d7b23bdb4ed9b7d53c9db792db9bb4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3fdfce509d30bdd7778b8b156cb968df"><td class="memItemLeft" align="right" valign="top">typedef tmat4x2< int, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga3fdfce509d30bdd7778b8b156cb968df">lowp_imat4x2</a></td></tr>
+<tr class="separator:ga3fdfce509d30bdd7778b8b156cb968df"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6a9945878f99294cfde40c6c3a867d69"><td class="memItemLeft" align="right" valign="top">typedef tmat4x3< int, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga6a9945878f99294cfde40c6c3a867d69">lowp_imat4x3</a></td></tr>
+<tr class="separator:ga6a9945878f99294cfde40c6c3a867d69"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga330140b22a9449caab308f2c69bf4c80"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< int, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga330140b22a9449caab308f2c69bf4c80">lowp_imat4x4</a></td></tr>
+<tr class="separator:ga330140b22a9449caab308f2c69bf4c80"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1406406e396b56bde3c7c0722f657064"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< uint, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga1406406e396b56bde3c7c0722f657064">lowp_umat2</a></td></tr>
+<tr class="separator:ga1406406e396b56bde3c7c0722f657064"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1f0cea730f6c13b16e511bd2d63507a3"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< uint, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga1f0cea730f6c13b16e511bd2d63507a3">lowp_umat2x2</a></td></tr>
+<tr class="separator:ga1f0cea730f6c13b16e511bd2d63507a3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa86bd9dc8463b46a46ee944948111676"><td class="memItemLeft" align="right" valign="top">typedef tmat2x3< uint, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gaa86bd9dc8463b46a46ee944948111676">lowp_umat2x3</a></td></tr>
+<tr class="separator:gaa86bd9dc8463b46a46ee944948111676"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7b6c64600bad79d735fa6bec843b2bb4"><td class="memItemLeft" align="right" valign="top">typedef tmat2x4< uint, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga7b6c64600bad79d735fa6bec843b2bb4">lowp_umat2x4</a></td></tr>
+<tr class="separator:ga7b6c64600bad79d735fa6bec843b2bb4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7fc1f795f2abd0020c7b5204f4c83033"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< uint, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga7fc1f795f2abd0020c7b5204f4c83033">lowp_umat3</a></td></tr>
+<tr class="separator:ga7fc1f795f2abd0020c7b5204f4c83033"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad73943020bb49a072317ecfc52d587f0"><td class="memItemLeft" align="right" valign="top">typedef tmat3x2< uint, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gad73943020bb49a072317ecfc52d587f0">lowp_umat3x2</a></td></tr>
+<tr class="separator:gad73943020bb49a072317ecfc52d587f0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga402d169fc3cdca5f3ea47a358a7b7c67"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< uint, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga402d169fc3cdca5f3ea47a358a7b7c67">lowp_umat3x3</a></td></tr>
+<tr class="separator:ga402d169fc3cdca5f3ea47a358a7b7c67"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2dce1c00ed50fd09fe349de3713d96db"><td class="memItemLeft" align="right" valign="top">typedef tmat3x4< uint, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga2dce1c00ed50fd09fe349de3713d96db">lowp_umat3x4</a></td></tr>
+<tr class="separator:ga2dce1c00ed50fd09fe349de3713d96db"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafe68c1cf2b379a9a11d1a11c9c2f8884"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< uint, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gafe68c1cf2b379a9a11d1a11c9c2f8884">lowp_umat4</a></td></tr>
+<tr class="separator:gafe68c1cf2b379a9a11d1a11c9c2f8884"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga76cab31d492ea214c693ab9132b4de95"><td class="memItemLeft" align="right" valign="top">typedef tmat4x2< uint, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga76cab31d492ea214c693ab9132b4de95">lowp_umat4x2</a></td></tr>
+<tr class="separator:ga76cab31d492ea214c693ab9132b4de95"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae3ca9e28a9d2e5fce5e28593d27e370d"><td class="memItemLeft" align="right" valign="top">typedef tmat4x3< uint, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gae3ca9e28a9d2e5fce5e28593d27e370d">lowp_umat4x3</a></td></tr>
+<tr class="separator:gae3ca9e28a9d2e5fce5e28593d27e370d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga742be484e56e08ef637f8ec4ab7c8bb2"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< uint, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga742be484e56e08ef637f8ec4ab7c8bb2">lowp_umat4x4</a></td></tr>
+<tr class="separator:ga742be484e56e08ef637f8ec4ab7c8bb2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3f8e55e14a6fc61850f8c0df9b4ff655"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< int, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga3f8e55e14a6fc61850f8c0df9b4ff655">mediump_imat2</a></td></tr>
+<tr class="separator:ga3f8e55e14a6fc61850f8c0df9b4ff655"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gabc572d47b60f7e595d7aad945f5d13a8"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< int, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gabc572d47b60f7e595d7aad945f5d13a8">mediump_imat2x2</a></td></tr>
+<tr class="separator:gabc572d47b60f7e595d7aad945f5d13a8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5b7e9af5024e1a164db6419f67ecfc9a"><td class="memItemLeft" align="right" valign="top">typedef tmat2x3< int, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga5b7e9af5024e1a164db6419f67ecfc9a">mediump_imat2x3</a></td></tr>
+<tr class="separator:ga5b7e9af5024e1a164db6419f67ecfc9a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa08e27efc514088315ccbaf818f01880"><td class="memItemLeft" align="right" valign="top">typedef tmat2x4< int, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gaa08e27efc514088315ccbaf818f01880">mediump_imat2x4</a></td></tr>
+<tr class="separator:gaa08e27efc514088315ccbaf818f01880"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac2b0985b576fe0eba47227499aed2b3c"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< int, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gac2b0985b576fe0eba47227499aed2b3c">mediump_imat3</a></td></tr>
+<tr class="separator:gac2b0985b576fe0eba47227499aed2b3c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1a61c706b31aa60fd7012b2b27765983"><td class="memItemLeft" align="right" valign="top">typedef tmat3x2< int, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga1a61c706b31aa60fd7012b2b27765983">mediump_imat3x2</a></td></tr>
+<tr class="separator:ga1a61c706b31aa60fd7012b2b27765983"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga05064e28b911be1af0503ddf6e6204a3"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< int, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga05064e28b911be1af0503ddf6e6204a3">mediump_imat3x3</a></td></tr>
+<tr class="separator:ga05064e28b911be1af0503ddf6e6204a3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8e0f797a57fec255f0eec7da1511bc38"><td class="memItemLeft" align="right" valign="top">typedef tmat3x4< int, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga8e0f797a57fec255f0eec7da1511bc38">mediump_imat3x4</a></td></tr>
+<tr class="separator:ga8e0f797a57fec255f0eec7da1511bc38"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga551ad2e4e0304c67451ffbadeef0d615"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< int, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga551ad2e4e0304c67451ffbadeef0d615">mediump_imat4</a></td></tr>
+<tr class="separator:ga551ad2e4e0304c67451ffbadeef0d615"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1582c5dc83e49a7e53bb0b94bef9de54"><td class="memItemLeft" align="right" valign="top">typedef tmat4x2< int, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga1582c5dc83e49a7e53bb0b94bef9de54">mediump_imat4x2</a></td></tr>
+<tr class="separator:ga1582c5dc83e49a7e53bb0b94bef9de54"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1526c62951b04f5cd73f541f7b3b7d8d"><td class="memItemLeft" align="right" valign="top">typedef tmat4x3< int, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga1526c62951b04f5cd73f541f7b3b7d8d">mediump_imat4x3</a></td></tr>
+<tr class="separator:ga1526c62951b04f5cd73f541f7b3b7d8d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga655bfcca624f422aff308dcc99688ce8"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< int, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga655bfcca624f422aff308dcc99688ce8">mediump_imat4x4</a></td></tr>
+<tr class="separator:ga655bfcca624f422aff308dcc99688ce8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7322b97f1be10c83290ab57ef784d493"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< uint, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga7322b97f1be10c83290ab57ef784d493">mediump_umat2</a></td></tr>
+<tr class="separator:ga7322b97f1be10c83290ab57ef784d493"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0ffed083b64e4f764db0f446d2c49163"><td class="memItemLeft" align="right" valign="top">typedef tmat2x2< uint, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga0ffed083b64e4f764db0f446d2c49163">mediump_umat2x2</a></td></tr>
+<tr class="separator:ga0ffed083b64e4f764db0f446d2c49163"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7ecc585b71766cfa96bd54a595bea1fb"><td class="memItemLeft" align="right" valign="top">typedef tmat2x3< uint, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga7ecc585b71766cfa96bd54a595bea1fb">mediump_umat2x3</a></td></tr>
+<tr class="separator:ga7ecc585b71766cfa96bd54a595bea1fb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac4abd549f2e521c7f40f53b6235c450e"><td class="memItemLeft" align="right" valign="top">typedef tmat2x4< uint, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gac4abd549f2e521c7f40f53b6235c450e">mediump_umat2x4</a></td></tr>
+<tr class="separator:gac4abd549f2e521c7f40f53b6235c450e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga93961d3aac6efa36dc3f9cfa7e9056e6"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< uint, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga93961d3aac6efa36dc3f9cfa7e9056e6">mediump_umat3</a></td></tr>
+<tr class="separator:ga93961d3aac6efa36dc3f9cfa7e9056e6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3fb358a947f8ceaefddd75bce22cd947"><td class="memItemLeft" align="right" valign="top">typedef tmat3x2< uint, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga3fb358a947f8ceaefddd75bce22cd947">mediump_umat3x2</a></td></tr>
+<tr class="separator:ga3fb358a947f8ceaefddd75bce22cd947"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad4809dbfb1bfcf222d7b34a97a8eafe5"><td class="memItemLeft" align="right" valign="top">typedef tmat3x3< uint, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gad4809dbfb1bfcf222d7b34a97a8eafe5">mediump_umat3x3</a></td></tr>
+<tr class="separator:gad4809dbfb1bfcf222d7b34a97a8eafe5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5a9d62e44668ca2222f0362f9c99d9cc"><td class="memItemLeft" align="right" valign="top">typedef tmat3x4< uint, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga5a9d62e44668ca2222f0362f9c99d9cc">mediump_umat3x4</a></td></tr>
+<tr class="separator:ga5a9d62e44668ca2222f0362f9c99d9cc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac23667a99ae1ec649b5e55cd5a05b833"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< uint, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gac23667a99ae1ec649b5e55cd5a05b833">mediump_umat4</a></td></tr>
+<tr class="separator:gac23667a99ae1ec649b5e55cd5a05b833"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac8d1db85d62244fd90d240227c7f51ad"><td class="memItemLeft" align="right" valign="top">typedef tmat4x2< uint, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gac8d1db85d62244fd90d240227c7f51ad">mediump_umat4x2</a></td></tr>
+<tr class="separator:gac8d1db85d62244fd90d240227c7f51ad"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7d332d462f2c1ad5a65dc580d3d1aa39"><td class="memItemLeft" align="right" valign="top">typedef tmat4x3< uint, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga7d332d462f2c1ad5a65dc580d3d1aa39">mediump_umat4x3</a></td></tr>
+<tr class="separator:ga7d332d462f2c1ad5a65dc580d3d1aa39"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga24716579cf155f4e042542808f83978c"><td class="memItemLeft" align="right" valign="top">typedef tmat4x4< uint, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga24716579cf155f4e042542808f83978c">mediump_umat4x4</a></td></tr>
+<tr class="separator:ga24716579cf155f4e042542808f83978c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4cae85566f900debf930c41944b64691"><td class="memItemLeft" align="right" valign="top">typedef mediump_umat2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga4cae85566f900debf930c41944b64691">umat2</a></td></tr>
+<tr class="separator:ga4cae85566f900debf930c41944b64691"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gabf8acdd33ce8951051edbca5200898aa"><td class="memItemLeft" align="right" valign="top">typedef mediump_umat2x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gabf8acdd33ce8951051edbca5200898aa">umat2x2</a></td></tr>
+<tr class="separator:gabf8acdd33ce8951051edbca5200898aa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1870da7578d5022b973a83155d386ab3"><td class="memItemLeft" align="right" valign="top">typedef mediump_umat2x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga1870da7578d5022b973a83155d386ab3">umat2x3</a></td></tr>
+<tr class="separator:ga1870da7578d5022b973a83155d386ab3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga57936a3998e992370e59a223e0ee4fd4"><td class="memItemLeft" align="right" valign="top">typedef mediump_umat2x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga57936a3998e992370e59a223e0ee4fd4">umat2x4</a></td></tr>
+<tr class="separator:ga57936a3998e992370e59a223e0ee4fd4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5085e3ff02abbac5e537eb7b89ab63b6"><td class="memItemLeft" align="right" valign="top">typedef mediump_umat3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga5085e3ff02abbac5e537eb7b89ab63b6">umat3</a></td></tr>
+<tr class="separator:ga5085e3ff02abbac5e537eb7b89ab63b6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9cd7fa637a4a6788337f45231fad9e1a"><td class="memItemLeft" align="right" valign="top">typedef mediump_umat3x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga9cd7fa637a4a6788337f45231fad9e1a">umat3x2</a></td></tr>
+<tr class="separator:ga9cd7fa637a4a6788337f45231fad9e1a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1f2cfcf3357db0cdf31fcb15e3c6bafb"><td class="memItemLeft" align="right" valign="top">typedef mediump_umat3x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga1f2cfcf3357db0cdf31fcb15e3c6bafb">umat3x3</a></td></tr>
+<tr class="separator:ga1f2cfcf3357db0cdf31fcb15e3c6bafb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae7c78ff3fc4309605ab0fa186c8d48ba"><td class="memItemLeft" align="right" valign="top">typedef mediump_umat3x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gae7c78ff3fc4309605ab0fa186c8d48ba">umat3x4</a></td></tr>
+<tr class="separator:gae7c78ff3fc4309605ab0fa186c8d48ba"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga38bc7bb6494e344185df596deeb4544c"><td class="memItemLeft" align="right" valign="top">typedef mediump_umat4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga38bc7bb6494e344185df596deeb4544c">umat4</a></td></tr>
+<tr class="separator:ga38bc7bb6494e344185df596deeb4544c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga70fa2d05896aa83cbc8c07672a429b53"><td class="memItemLeft" align="right" valign="top">typedef mediump_umat4x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga70fa2d05896aa83cbc8c07672a429b53">umat4x2</a></td></tr>
+<tr class="separator:ga70fa2d05896aa83cbc8c07672a429b53"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga87581417945411f75cb31dd6ca1dba98"><td class="memItemLeft" align="right" valign="top">typedef mediump_umat4x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#ga87581417945411f75cb31dd6ca1dba98">umat4x3</a></td></tr>
+<tr class="separator:ga87581417945411f75cb31dd6ca1dba98"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf72e6d399c42985db6872c50f53d7eb8"><td class="memItemLeft" align="right" valign="top">typedef mediump_umat4x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00167.html#gaf72e6d399c42985db6872c50f53d7eb8">umat4x4</a></td></tr>
+<tr class="separator:gaf72e6d399c42985db6872c50f53d7eb8"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Defines a number of matrices with integer types. </p>
+<p><<a class="el" href="a00064.html" title="GLM_GTC_matrix_integer ">glm/gtc/matrix_integer.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a class="anchor" id="gaa9f8144beebdefd85e2a9ac480e7608a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x2<int, highp> highp_imat2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High-precision signed integer 2x2 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00036">36</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gac455e55e7cb32e31396a9d4613da046a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x2<int, highp> highp_imat2x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High-precision signed integer 2x2 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00048">48</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga5f5f1e6dc06b72216463a425b2f7613e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x3<int, highp> highp_imat2x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High-precision signed integer 2x3 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00052">52</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga73b855cc40e5d8202b7ab38461326d65"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x4<int, highp> highp_imat2x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High-precision signed integer 2x4 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00056">56</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga4efd6470c0edf9704d2244fc92dbc2a9"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x3<int, highp> highp_imat3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High-precision signed integer 3x3 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00040">40</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga0413bf87605b9247be2533c439127a1c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x2<int, highp> highp_imat3x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High-precision signed integer 3x2 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00060">60</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gacce460d54216438bb577bf8c9d68299c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x3<int, highp> highp_imat3x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High-precision signed integer 3x3 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00064">64</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gad4fea24b4100e21ed7742c91e5458d49"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x4<int, highp> highp_imat3x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High-precision signed integer 3x4 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00068">68</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga159ce04cc638ff4db755542cd8f758cb"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x4<int, highp> highp_imat4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High-precision signed integer 4x4 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00044">44</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga7d43dd8332000f7f19379efa1b303599"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x2<int, highp> highp_imat4x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High-precision signed integer 4x2 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00072">72</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga0c66b9b7c10a6017a58a03489c8d4c73"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x3<int, highp> highp_imat4x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High-precision signed integer 4x3 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00076">76</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gae53db595d36f49a299e180302795e3c9"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x4<int, highp> highp_imat4x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High-precision signed integer 4x4 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00080">80</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gae7b96c808a36fbe87f41af1c77b7941c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x2<uint, highp> highp_umat2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High-precision unsigned integer 2x2 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00185">185</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga4860b4b01430bdb70643808c8d3bf5cb"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x2<uint, highp> highp_umat2x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High-precision unsigned integer 2x2 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00197">197</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gac351446661e5a8168473ff7b3b5ac3b5"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x3<uint, highp> highp_umat2x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High-precision unsigned integer 2x3 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00201">201</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga815eb9fdf70edc45687cbcda07e97213"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x4<uint, highp> highp_umat2x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High-precision unsigned integer 2x4 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00205">205</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaa60b19d7cadbaa56bed1e6e0047af147"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x3<uint, highp> highp_umat3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High-precision unsigned integer 3x3 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00189">189</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gab1d8e627b6a0b21c9b5e599a89132d8f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x2<uint, highp> highp_umat3x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High-precision unsigned integer 3x2 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00209">209</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gacf71e9abe57bcfd18b4b003421e306aa"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x3<uint, highp> highp_umat3x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High-precision unsigned integer 3x3 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00213">213</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga6edbf193ad6c4309e31262165f2655e7"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x4<uint, highp> highp_umat3x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High-precision unsigned integer 3x4 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00217">217</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga8368cb49cb0bd5ac682a71d1eccc9a8c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x4<uint, highp> highp_umat4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High-precision unsigned integer 4x4 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00193">193</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaaba8a59eac3e5c0b3aaa9b35c1f10292"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x2<uint, highp> highp_umat4x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High-precision unsigned integer 4x2 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00221">221</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga899a376888652fe3c03718641812bb27"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x3<uint, highp> highp_umat4x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High-precision unsigned integer 4x3 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00225">225</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gab8068521c0ad6990373d27d87d333084"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x4<uint, highp> highp_umat4x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High-precision unsigned integer 4x4 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00229">229</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaabe04f9948d4a213bb1c20137de03e01"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef mediump_imat2 imat2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Signed integer 2x2 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00361">361</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaa4732a240522ad9bc28144fda2fc14ec"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef mediump_imat2x2 imat2x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Signed integer 2x2 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00373">373</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga3f42dd3d5d94a0fd5706f7ec8dd0c605"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef mediump_imat2x3 imat2x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Signed integer 2x3 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00377">377</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga9d8faafdca42583d67e792dd038fc668"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef mediump_imat2x4 imat2x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Signed integer 2x4 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00381">381</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga038f68437155ffa3c2583a15264a8195"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef mediump_imat3 imat3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Signed integer 3x3 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00365">365</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga7b33bbe4f12c060892bd3cc8d4cd737f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef mediump_imat3x2 imat3x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Signed integer 3x2 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00385">385</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga6aacc960f62e8f7d2fe9d32d5050e7a4"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef mediump_imat3x3 imat3x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Signed integer 3x3 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00389">389</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga6e9ce23496d8b08dfc302d4039694b58"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef mediump_imat3x4 imat3x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Signed integer 3x4 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00393">393</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga96b0d26a33b81bb6a60ca0f39682f7eb"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef mediump_imat4 imat4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Signed integer 4x4 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00369">369</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga8ce7ef51d8b2c1901fa5414deccbc3fa"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef mediump_imat4x2 imat4x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Signed integer 4x2 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00397">397</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga705ee0bf49d6c3de4404ce2481bf0df5"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef mediump_imat4x3 imat4x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Signed integer 4x3 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00401">401</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga43ed5e4f475b6f4cad7cba78f29c405b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef mediump_imat4x4 imat4x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Signed integer 4x4 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00405">405</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga3c035fec7db0d671ec8f9f1f0d05bed0"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x2<int, lowp> lowp_imat2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low-precision signed integer 2x2 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00135">135</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga5bfe58853451fbc1f1ef6ce1f93c5e31"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x2<int, lowp> lowp_imat2x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low-precision signed integer 2x2 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00148">148</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga3f8fb92b62e31528886cc728d3404ecc"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x3<int, lowp> lowp_imat2x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low-precision signed integer 2x3 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00152">152</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga892b53e26d36763f380b08a5768dee6b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x4<int, lowp> lowp_imat2x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low-precision signed integer 2x4 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00156">156</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga148f3a81d15a570b9460158e6964f41c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x3<int, lowp> lowp_imat3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low-precision signed integer 3x3 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00139">139</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga7655dfee0d726e80d7a3b72f46d5fd35"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x2<int, lowp> lowp_imat3x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low-precision signed integer 3x2 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00160">160</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gab3d5c6aaeb5815f8f080305888f6828f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x3<int, lowp> lowp_imat3x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low-precision signed integer 3x3 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00164">164</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga3d913d70c629aa7ad504739286328f1b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x4<int, lowp> lowp_imat3x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low-precision signed integer 3x4 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00168">168</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gad3d7b23bdb4ed9b7d53c9db792db9bb4"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x4<int, lowp> lowp_imat4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low-precision signed integer 4x4 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00143">143</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga3fdfce509d30bdd7778b8b156cb968df"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x2<int, lowp> lowp_imat4x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low-precision signed integer 4x2 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00172">172</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga6a9945878f99294cfde40c6c3a867d69"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x3<int, lowp> lowp_imat4x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low-precision signed integer 4x3 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00176">176</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga330140b22a9449caab308f2c69bf4c80"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x4<int, lowp> lowp_imat4x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low-precision signed integer 4x4 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00180">180</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga1406406e396b56bde3c7c0722f657064"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x2<uint, lowp> lowp_umat2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low-precision unsigned integer 2x2 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00284">284</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga1f0cea730f6c13b16e511bd2d63507a3"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x2<uint, lowp> lowp_umat2x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low-precision unsigned integer 2x2 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00297">297</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaa86bd9dc8463b46a46ee944948111676"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x3<uint, lowp> lowp_umat2x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low-precision unsigned integer 2x3 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00301">301</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga7b6c64600bad79d735fa6bec843b2bb4"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x4<uint, lowp> lowp_umat2x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low-precision unsigned integer 2x4 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00305">305</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga7fc1f795f2abd0020c7b5204f4c83033"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x3<uint, lowp> lowp_umat3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low-precision unsigned integer 3x3 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00288">288</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gad73943020bb49a072317ecfc52d587f0"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x2<uint, lowp> lowp_umat3x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low-precision unsigned integer 3x2 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00309">309</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga402d169fc3cdca5f3ea47a358a7b7c67"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x3<uint, lowp> lowp_umat3x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low-precision unsigned integer 3x3 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00313">313</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga2dce1c00ed50fd09fe349de3713d96db"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x4<uint, lowp> lowp_umat3x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low-precision unsigned integer 3x4 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00317">317</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gafe68c1cf2b379a9a11d1a11c9c2f8884"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x4<uint, lowp> lowp_umat4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low-precision unsigned integer 4x4 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00292">292</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga76cab31d492ea214c693ab9132b4de95"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x2<uint, lowp> lowp_umat4x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low-precision unsigned integer 4x2 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00321">321</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gae3ca9e28a9d2e5fce5e28593d27e370d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x3<uint, lowp> lowp_umat4x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low-precision unsigned integer 4x3 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00325">325</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga742be484e56e08ef637f8ec4ab7c8bb2"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x4<uint, lowp> lowp_umat4x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low-precision unsigned integer 4x4 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00329">329</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga3f8e55e14a6fc61850f8c0df9b4ff655"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x2<int, mediump> mediump_imat2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium-precision signed integer 2x2 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00085">85</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gabc572d47b60f7e595d7aad945f5d13a8"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x2<int, mediump> mediump_imat2x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium-precision signed integer 2x2 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00098">98</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga5b7e9af5024e1a164db6419f67ecfc9a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x3<int, mediump> mediump_imat2x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium-precision signed integer 2x3 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00102">102</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaa08e27efc514088315ccbaf818f01880"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x4<int, mediump> mediump_imat2x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium-precision signed integer 2x4 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00106">106</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gac2b0985b576fe0eba47227499aed2b3c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x3<int, mediump> mediump_imat3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium-precision signed integer 3x3 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00089">89</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga1a61c706b31aa60fd7012b2b27765983"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x2<int, mediump> mediump_imat3x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium-precision signed integer 3x2 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00110">110</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga05064e28b911be1af0503ddf6e6204a3"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x3<int, mediump> mediump_imat3x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium-precision signed integer 3x3 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00114">114</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga8e0f797a57fec255f0eec7da1511bc38"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x4<int, mediump> mediump_imat3x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium-precision signed integer 3x4 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00118">118</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga551ad2e4e0304c67451ffbadeef0d615"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x4<int, mediump> mediump_imat4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium-precision signed integer 4x4 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00093">93</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga1582c5dc83e49a7e53bb0b94bef9de54"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x2<int, mediump> mediump_imat4x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium-precision signed integer 4x2 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00122">122</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga1526c62951b04f5cd73f541f7b3b7d8d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x3<int, mediump> mediump_imat4x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium-precision signed integer 4x3 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00126">126</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga655bfcca624f422aff308dcc99688ce8"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x4<int, mediump> mediump_imat4x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium-precision signed integer 4x4 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00130">130</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga7322b97f1be10c83290ab57ef784d493"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x2<uint, mediump> mediump_umat2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium-precision unsigned integer 2x2 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00234">234</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga0ffed083b64e4f764db0f446d2c49163"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x2<uint, mediump> mediump_umat2x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium-precision unsigned integer 2x2 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00247">247</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga7ecc585b71766cfa96bd54a595bea1fb"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x3<uint, mediump> mediump_umat2x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium-precision unsigned integer 2x3 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00251">251</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gac4abd549f2e521c7f40f53b6235c450e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x4<uint, mediump> mediump_umat2x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium-precision unsigned integer 2x4 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00255">255</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga93961d3aac6efa36dc3f9cfa7e9056e6"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x3<uint, mediump> mediump_umat3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium-precision unsigned integer 3x3 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00238">238</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga3fb358a947f8ceaefddd75bce22cd947"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x2<uint, mediump> mediump_umat3x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium-precision unsigned integer 3x2 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00259">259</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gad4809dbfb1bfcf222d7b34a97a8eafe5"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x3<uint, mediump> mediump_umat3x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium-precision unsigned integer 3x3 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00263">263</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga5a9d62e44668ca2222f0362f9c99d9cc"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x4<uint, mediump> mediump_umat3x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium-precision unsigned integer 3x4 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00267">267</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gac23667a99ae1ec649b5e55cd5a05b833"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x4<uint, mediump> mediump_umat4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium-precision unsigned integer 4x4 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00242">242</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gac8d1db85d62244fd90d240227c7f51ad"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x2<uint, mediump> mediump_umat4x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium-precision unsigned integer 4x2 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00271">271</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga7d332d462f2c1ad5a65dc580d3d1aa39"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x3<uint, mediump> mediump_umat4x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium-precision unsigned integer 4x3 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00275">275</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga24716579cf155f4e042542808f83978c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x4<uint, mediump> mediump_umat4x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium-precision unsigned integer 4x4 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00279">279</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga4cae85566f900debf930c41944b64691"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef mediump_umat2 umat2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Unsigned integer 2x2 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00438">438</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gabf8acdd33ce8951051edbca5200898aa"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef mediump_umat2x2 umat2x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Unsigned integer 2x2 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00450">450</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga1870da7578d5022b973a83155d386ab3"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef mediump_umat2x3 umat2x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Unsigned integer 2x3 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00454">454</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga57936a3998e992370e59a223e0ee4fd4"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef mediump_umat2x4 umat2x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Unsigned integer 2x4 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00458">458</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga5085e3ff02abbac5e537eb7b89ab63b6"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef mediump_umat3 umat3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Unsigned integer 3x3 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00442">442</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga9cd7fa637a4a6788337f45231fad9e1a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef mediump_umat3x2 umat3x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Unsigned integer 3x2 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00462">462</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga1f2cfcf3357db0cdf31fcb15e3c6bafb"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef mediump_umat3x3 umat3x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Unsigned integer 3x3 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00466">466</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gae7c78ff3fc4309605ab0fa186c8d48ba"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef mediump_umat3x4 umat3x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Unsigned integer 3x4 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00470">470</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga38bc7bb6494e344185df596deeb4544c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef mediump_umat4 umat4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Unsigned integer 4x4 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00446">446</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga70fa2d05896aa83cbc8c07672a429b53"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef mediump_umat4x2 umat4x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Unsigned integer 4x2 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00474">474</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga87581417945411f75cb31dd6ca1dba98"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef mediump_umat4x3 umat4x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Unsigned integer 4x3 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00478">478</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaf72e6d399c42985db6872c50f53d7eb8"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef mediump_umat4x4 umat4x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Unsigned integer 4x4 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00167.html" title="Defines a number of matrices with integer types. ">GLM_GTC_matrix_integer</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00064_source.html#l00482">482</a> of file <a class="el" href="a00064_source.html">matrix_integer.hpp</a>.</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00168.html b/src/third_party/glm/doc/api/a00168.html
new file mode 100644
index 0000000..b821ea3
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00168.html
@@ -0,0 +1,129 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTC_matrix_inverse</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTC_matrix_inverse<div class="ingroups"><a class="el" href="a00154.html">GTC Extensions (Stable)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gae0fcc5fc8783291f9702272de428fa0e"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gae0fcc5fc8783291f9702272de428fa0e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00168.html#gae0fcc5fc8783291f9702272de428fa0e">affineInverse</a> (genType const &m)</td></tr>
+<tr class="separator:gae0fcc5fc8783291f9702272de428fa0e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab213cd0e3ead5f316d583f99d6312008"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gab213cd0e3ead5f316d583f99d6312008"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00168.html#gab213cd0e3ead5f316d583f99d6312008">inverseTranspose</a> (genType const &m)</td></tr>
+<tr class="separator:gab213cd0e3ead5f316d583f99d6312008"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Defines additional matrix inverting functions. </p>
+<p><<a class="el" href="a00066.html" title="GLM_GTC_matrix_inverse ">glm/gtc/matrix_inverse.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="gae0fcc5fc8783291f9702272de428fa0e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::affineInverse </td>
+ <td>(</td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>m</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Fast matrix inverse for affine matrix. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">m</td><td>Input matrix to invert. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Squared floating-point matrix: half, float or double. Inverse of matrix based of half-precision floating point value is highly innacurate. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00168.html" title="Defines additional matrix inverting functions. ">GLM_GTC_matrix_inverse</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gab213cd0e3ead5f316d583f99d6312008"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::inverseTranspose </td>
+ <td>(</td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>m</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Compute the inverse transpose of a matrix. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">m</td><td>Input matrix to invert transpose. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Squared floating-point matrix: half, float or double. Inverse of matrix based of half-precision floating point value is highly innacurate. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00168.html" title="Defines additional matrix inverting functions. ">GLM_GTC_matrix_inverse</a> </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00169.html b/src/third_party/glm/doc/api/a00169.html
new file mode 100644
index 0000000..832b7c1
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00169.html
@@ -0,0 +1,1690 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTC_matrix_transform</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTC_matrix_transform<div class="ingroups"><a class="el" href="a00154.html">GTC Extensions (Stable)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gada6deb989d4b553fe0f7e3279f3afae1"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gada6deb989d4b553fe0f7e3279f3afae1"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#gada6deb989d4b553fe0f7e3279f3afae1">frustum</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>
+<tr class="separator:gada6deb989d4b553fe0f7e3279f3afae1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga75b1c1d0ee1f80c1e873605adeb1838c"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga75b1c1d0ee1f80c1e873605adeb1838c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#ga75b1c1d0ee1f80c1e873605adeb1838c">frustumLH</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>
+<tr class="separator:ga75b1c1d0ee1f80c1e873605adeb1838c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad0e184273bdacbe769e5cd81069e48ed"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gad0e184273bdacbe769e5cd81069e48ed"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#gad0e184273bdacbe769e5cd81069e48ed">frustumRH</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>
+<tr class="separator:gad0e184273bdacbe769e5cd81069e48ed"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga79f704ad91a5f0d68abd88c66c8186e5"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga79f704ad91a5f0d68abd88c66c8186e5"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#ga79f704ad91a5f0d68abd88c66c8186e5">infinitePerspective</a> (T fovy, T aspect, T near)</td></tr>
+<tr class="separator:ga79f704ad91a5f0d68abd88c66c8186e5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga47af534da2b28effa4c7945ec82ccd9d"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga47af534da2b28effa4c7945ec82ccd9d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#ga47af534da2b28effa4c7945ec82ccd9d">infinitePerspectiveLH</a> (T fovy, T aspect, T near)</td></tr>
+<tr class="separator:ga47af534da2b28effa4c7945ec82ccd9d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga79575023763df88dff1bf8255a42d0be"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga79575023763df88dff1bf8255a42d0be"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#ga79575023763df88dff1bf8255a42d0be">infinitePerspectiveRH</a> (T fovy, T aspect, T near)</td></tr>
+<tr class="separator:ga79575023763df88dff1bf8255a42d0be"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf8eef81da1ad09f6a8920101c01eaae4"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gaf8eef81da1ad09f6a8920101c01eaae4"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#gaf8eef81da1ad09f6a8920101c01eaae4">lookAt</a> (tvec3< T, P > const &eye, tvec3< T, P > const &center, tvec3< T, P > const &up)</td></tr>
+<tr class="separator:gaf8eef81da1ad09f6a8920101c01eaae4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gacd0c077ec7b58a575855e29cb5fb586d"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gacd0c077ec7b58a575855e29cb5fb586d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#gacd0c077ec7b58a575855e29cb5fb586d">lookAtLH</a> (tvec3< T, P > const &eye, tvec3< T, P > const &center, tvec3< T, P > const &up)</td></tr>
+<tr class="separator:gacd0c077ec7b58a575855e29cb5fb586d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2876d9313334980b94292d2ec169088e"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga2876d9313334980b94292d2ec169088e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#ga2876d9313334980b94292d2ec169088e">lookAtRH</a> (tvec3< T, P > const &eye, tvec3< T, P > const &center, tvec3< T, P > const &up)</td></tr>
+<tr class="separator:ga2876d9313334980b94292d2ec169088e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga65280251de6e38580110a0577a43d8f8"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga65280251de6e38580110a0577a43d8f8"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#ga65280251de6e38580110a0577a43d8f8">ortho</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>
+<tr class="separator:ga65280251de6e38580110a0577a43d8f8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga45b1b64f99255c07119b4f1aaed04dd7"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga45b1b64f99255c07119b4f1aaed04dd7"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#ga45b1b64f99255c07119b4f1aaed04dd7">ortho</a> (T left, T right, T bottom, T top)</td></tr>
+<tr class="separator:ga45b1b64f99255c07119b4f1aaed04dd7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga71503df1e691b12cc2d45e64fd0628fe"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga71503df1e691b12cc2d45e64fd0628fe"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#ga71503df1e691b12cc2d45e64fd0628fe">orthoLH</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>
+<tr class="separator:ga71503df1e691b12cc2d45e64fd0628fe"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gada0aaaee76f1fd3c272698c8eca735a1"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gada0aaaee76f1fd3c272698c8eca735a1"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#gada0aaaee76f1fd3c272698c8eca735a1">orthoRH</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>
+<tr class="separator:gada0aaaee76f1fd3c272698c8eca735a1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac3613dcb6c6916465ad5b7ad5a786175"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gac3613dcb6c6916465ad5b7ad5a786175"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#gac3613dcb6c6916465ad5b7ad5a786175">perspective</a> (T fovy, T aspect, T near, T far)</td></tr>
+<tr class="separator:gac3613dcb6c6916465ad5b7ad5a786175"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae9146e2c550fc8646299e4b900238145"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gae9146e2c550fc8646299e4b900238145"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#gae9146e2c550fc8646299e4b900238145">perspectiveFov</a> (T fov, T width, T height, T near, T far)</td></tr>
+<tr class="separator:gae9146e2c550fc8646299e4b900238145"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae705a2f19c3ef5ef880bd6c92759cf2d"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gae705a2f19c3ef5ef880bd6c92759cf2d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#gae705a2f19c3ef5ef880bd6c92759cf2d">perspectiveFovLH</a> (T fov, T width, T height, T near, T far)</td></tr>
+<tr class="separator:gae705a2f19c3ef5ef880bd6c92759cf2d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga07cd8df791bf90dcb782645fe0b21261"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga07cd8df791bf90dcb782645fe0b21261"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#ga07cd8df791bf90dcb782645fe0b21261">perspectiveFovRH</a> (T fov, T width, T height, T near, T far)</td></tr>
+<tr class="separator:ga07cd8df791bf90dcb782645fe0b21261"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga34048da27c559f1ac8e9550d169dd6f3"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga34048da27c559f1ac8e9550d169dd6f3"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#ga34048da27c559f1ac8e9550d169dd6f3">perspectiveLH</a> (T fovy, T aspect, T near, T far)</td></tr>
+<tr class="separator:ga34048da27c559f1ac8e9550d169dd6f3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5a4fa9f8ffabb2294e48a18bf8fa2f5f"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga5a4fa9f8ffabb2294e48a18bf8fa2f5f"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#ga5a4fa9f8ffabb2294e48a18bf8fa2f5f">perspectiveRH</a> (T fovy, T aspect, T near, T far)</td></tr>
+<tr class="separator:ga5a4fa9f8ffabb2294e48a18bf8fa2f5f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9026c77505b99990f68826f27c267dc5"><td class="memTemplParams" colspan="2">template<typename T , precision P, typename U > </td></tr>
+<tr class="memitem:ga9026c77505b99990f68826f27c267dc5"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#ga9026c77505b99990f68826f27c267dc5">pickMatrix</a> (tvec2< T, P > const &center, tvec2< T, P > const &delta, tvec4< U, P > const &viewport)</td></tr>
+<tr class="separator:ga9026c77505b99990f68826f27c267dc5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad743556abd138264d4f06f4ca27f1d7e"><td class="memTemplParams" colspan="2">template<typename T , typename U , precision P> </td></tr>
+<tr class="memitem:gad743556abd138264d4f06f4ca27f1d7e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#gad743556abd138264d4f06f4ca27f1d7e">project</a> (tvec3< T, P > const &obj, tmat4x4< T, P > const &model, tmat4x4< T, P > const &proj, tvec4< U, P > const &viewport)</td></tr>
+<tr class="separator:gad743556abd138264d4f06f4ca27f1d7e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga161b1df124348f232d994ba7958e4815"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga161b1df124348f232d994ba7958e4815"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#ga161b1df124348f232d994ba7958e4815">rotate</a> (tmat4x4< T, P > const &m, T angle, tvec3< T, P > const &axis)</td></tr>
+<tr class="separator:ga161b1df124348f232d994ba7958e4815"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8f062fcc07e2445500793f2803afebb0"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga8f062fcc07e2445500793f2803afebb0"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#ga8f062fcc07e2445500793f2803afebb0">scale</a> (tmat4x4< T, P > const &m, tvec3< T, P > const &v)</td></tr>
+<tr class="separator:ga8f062fcc07e2445500793f2803afebb0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaee134ab77c6c5548a6ebf4e8e476c6ed"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gaee134ab77c6c5548a6ebf4e8e476c6ed"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#gaee134ab77c6c5548a6ebf4e8e476c6ed">translate</a> (tmat4x4< T, P > const &m, tvec3< T, P > const &v)</td></tr>
+<tr class="separator:gaee134ab77c6c5548a6ebf4e8e476c6ed"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaed64bd81f5ecdab52fecbdf7f6b58194"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gaed64bd81f5ecdab52fecbdf7f6b58194"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#gaed64bd81f5ecdab52fecbdf7f6b58194">tweakedInfinitePerspective</a> (T fovy, T aspect, T near)</td></tr>
+<tr class="separator:gaed64bd81f5ecdab52fecbdf7f6b58194"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa50fce7f50b5d5da881ed30f5532a921"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gaa50fce7f50b5d5da881ed30f5532a921"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#gaa50fce7f50b5d5da881ed30f5532a921">tweakedInfinitePerspective</a> (T fovy, T aspect, T near, T ep)</td></tr>
+<tr class="separator:gaa50fce7f50b5d5da881ed30f5532a921"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga82a558de3ce42cbeed0f6ec292a4e1b3"><td class="memTemplParams" colspan="2">template<typename T , typename U , precision P> </td></tr>
+<tr class="memitem:ga82a558de3ce42cbeed0f6ec292a4e1b3"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00169.html#ga82a558de3ce42cbeed0f6ec292a4e1b3">unProject</a> (tvec3< T, P > const &win, tmat4x4< T, P > const &model, tmat4x4< T, P > const &proj, tvec4< U, P > const &viewport)</td></tr>
+<tr class="separator:ga82a558de3ce42cbeed0f6ec292a4e1b3"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Defines functions that generate common transformation matrices. </p>
+<p>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.</p>
+<p><<a class="el" href="a00070.html" title="GLM_GTC_matrix_transform ">glm/gtc/matrix_transform.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="gada6deb989d4b553fe0f7e3279f3afae1"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, defaultp> glm::frustum </td>
+ <td>(</td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>left</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>right</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>bottom</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>top</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>near</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>far</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Creates a frustum matrix with default handedness. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">left</td><td></td></tr>
+ <tr><td class="paramname">right</td><td></td></tr>
+ <tr><td class="paramname">bottom</td><td></td></tr>
+ <tr><td class="paramname">top</td><td></td></tr>
+ <tr><td class="paramname">near</td><td></td></tr>
+ <tr><td class="paramname">far</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">T</td><td>Value type used to build the matrix. Currently supported: half (not recommanded), float or double. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00169.html" title="Defines functions that generate common transformation matrices. ">GLM_GTC_matrix_transform</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga75b1c1d0ee1f80c1e873605adeb1838c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, defaultp> glm::frustumLH </td>
+ <td>(</td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>left</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>right</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>bottom</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>top</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>near</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>far</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Creates a left handed frustum matrix. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">left</td><td></td></tr>
+ <tr><td class="paramname">right</td><td></td></tr>
+ <tr><td class="paramname">bottom</td><td></td></tr>
+ <tr><td class="paramname">top</td><td></td></tr>
+ <tr><td class="paramname">near</td><td></td></tr>
+ <tr><td class="paramname">far</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">T</td><td>Value type used to build the matrix. Currently supported: half (not recommanded), float or double. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00169.html" title="Defines functions that generate common transformation matrices. ">GLM_GTC_matrix_transform</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gad0e184273bdacbe769e5cd81069e48ed"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, defaultp> glm::frustumRH </td>
+ <td>(</td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>left</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>right</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>bottom</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>top</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>near</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>far</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Creates a right handed frustum matrix. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">left</td><td></td></tr>
+ <tr><td class="paramname">right</td><td></td></tr>
+ <tr><td class="paramname">bottom</td><td></td></tr>
+ <tr><td class="paramname">top</td><td></td></tr>
+ <tr><td class="paramname">near</td><td></td></tr>
+ <tr><td class="paramname">far</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">T</td><td>Value type used to build the matrix. Currently supported: half (not recommanded), float or double. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00169.html" title="Defines functions that generate common transformation matrices. ">GLM_GTC_matrix_transform</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga79f704ad91a5f0d68abd88c66c8186e5"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, defaultp> glm::infinitePerspective </td>
+ <td>(</td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>fovy</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>aspect</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>near</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Creates a matrix for a symmetric perspective-view frustum with far plane at infinite with default handedness. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">fovy</td><td>Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. </td></tr>
+ <tr><td class="paramname">aspect</td><td>Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). </td></tr>
+ <tr><td class="paramname">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive). </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">T</td><td>Value type used to build the matrix. Currently supported: half (not recommanded), float or double. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00169.html" title="Defines functions that generate common transformation matrices. ">GLM_GTC_matrix_transform</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga47af534da2b28effa4c7945ec82ccd9d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, defaultp> glm::infinitePerspectiveLH </td>
+ <td>(</td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>fovy</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>aspect</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>near</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Creates a matrix for a left handed, symmetric perspective-view frustum with far plane at infinite. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">fovy</td><td>Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. </td></tr>
+ <tr><td class="paramname">aspect</td><td>Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). </td></tr>
+ <tr><td class="paramname">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive). </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">T</td><td>Value type used to build the matrix. Currently supported: half (not recommanded), float or double. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00169.html" title="Defines functions that generate common transformation matrices. ">GLM_GTC_matrix_transform</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga79575023763df88dff1bf8255a42d0be"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, defaultp> glm::infinitePerspectiveRH </td>
+ <td>(</td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>fovy</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>aspect</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>near</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Creates a matrix for a right handed, symmetric perspective-view frustum with far plane at infinite. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">fovy</td><td>Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. </td></tr>
+ <tr><td class="paramname">aspect</td><td>Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). </td></tr>
+ <tr><td class="paramname">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive). </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">T</td><td>Value type used to build the matrix. Currently supported: half (not recommanded), float or double. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00169.html" title="Defines functions that generate common transformation matrices. ">GLM_GTC_matrix_transform</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaf8eef81da1ad09f6a8920101c01eaae4"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, P> glm::lookAt </td>
+ <td>(</td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>eye</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>center</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>up</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a look at view matrix based on the default handedness. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">eye</td><td>Position of the camera </td></tr>
+ <tr><td class="paramname">center</td><td>Position where the camera is looking at </td></tr>
+ <tr><td class="paramname">up</td><td>Normalized up vector, how the camera is oriented. Typically (0, 0, 1) </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00169.html" title="Defines functions that generate common transformation matrices. ">GLM_GTC_matrix_transform</a> </dd>
+<dd>
+- frustum(T const & left, T const & right, T const & bottom, T const & top, T const & nearVal, T const & farVal) frustum(T const & left, T const & right, T const & bottom, T const & top, T const & nearVal, T const & farVal) </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gacd0c077ec7b58a575855e29cb5fb586d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, P> glm::lookAtLH </td>
+ <td>(</td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>eye</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>center</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>up</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a left handed look at view matrix. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">eye</td><td>Position of the camera </td></tr>
+ <tr><td class="paramname">center</td><td>Position where the camera is looking at </td></tr>
+ <tr><td class="paramname">up</td><td>Normalized up vector, how the camera is oriented. Typically (0, 0, 1) </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00169.html" title="Defines functions that generate common transformation matrices. ">GLM_GTC_matrix_transform</a> </dd>
+<dd>
+- frustum(T const & left, T const & right, T const & bottom, T const & top, T const & nearVal, T const & farVal) frustum(T const & left, T const & right, T const & bottom, T const & top, T const & nearVal, T const & farVal) </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga2876d9313334980b94292d2ec169088e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, P> glm::lookAtRH </td>
+ <td>(</td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>eye</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>center</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>up</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a right handed look at view matrix. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">eye</td><td>Position of the camera </td></tr>
+ <tr><td class="paramname">center</td><td>Position where the camera is looking at </td></tr>
+ <tr><td class="paramname">up</td><td>Normalized up vector, how the camera is oriented. Typically (0, 0, 1) </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00169.html" title="Defines functions that generate common transformation matrices. ">GLM_GTC_matrix_transform</a> </dd>
+<dd>
+- frustum(T const & left, T const & right, T const & bottom, T const & top, T const & nearVal, T const & farVal) frustum(T const & left, T const & right, T const & bottom, T const & top, T const & nearVal, T const & farVal) </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga65280251de6e38580110a0577a43d8f8"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, defaultp> glm::ortho </td>
+ <td>(</td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>left</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>right</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>bottom</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>top</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>zNear</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>zFar</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Creates a matrix for an orthographic parallel viewing volume, using the default handedness. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">left</td><td></td></tr>
+ <tr><td class="paramname">right</td><td></td></tr>
+ <tr><td class="paramname">bottom</td><td></td></tr>
+ <tr><td class="paramname">top</td><td></td></tr>
+ <tr><td class="paramname">zNear</td><td></td></tr>
+ <tr><td class="paramname">zFar</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">T</td><td>Value type used to build the matrix. Currently supported: half (not recommanded), float or double. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00169.html" title="Defines functions that generate common transformation matrices. ">GLM_GTC_matrix_transform</a> </dd>
+<dd>
+- glm::ortho(T const & left, T const & right, T const & bottom, T const & top) </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga45b1b64f99255c07119b4f1aaed04dd7"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, defaultp> glm::ortho </td>
+ <td>(</td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>left</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>right</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>bottom</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>top</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Creates a matrix for projecting two-dimensional coordinates onto the screen. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">left</td><td></td></tr>
+ <tr><td class="paramname">right</td><td></td></tr>
+ <tr><td class="paramname">bottom</td><td></td></tr>
+ <tr><td class="paramname">top</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">T</td><td>Value type used to build the matrix. Currently supported: half (not recommanded), float or double. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00169.html" title="Defines functions that generate common transformation matrices. ">GLM_GTC_matrix_transform</a> </dd>
+<dd>
+- glm::ortho(T const & left, T const & right, T const & bottom, T const & top, T const & zNear, T const & zFar) </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga71503df1e691b12cc2d45e64fd0628fe"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, defaultp> glm::orthoLH </td>
+ <td>(</td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>left</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>right</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>bottom</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>top</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>zNear</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>zFar</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Creates a matrix for an orthographic parallel viewing volume, using left-handedness. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">left</td><td></td></tr>
+ <tr><td class="paramname">right</td><td></td></tr>
+ <tr><td class="paramname">bottom</td><td></td></tr>
+ <tr><td class="paramname">top</td><td></td></tr>
+ <tr><td class="paramname">zNear</td><td></td></tr>
+ <tr><td class="paramname">zFar</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">T</td><td>Value type used to build the matrix. Currently supported: half (not recommanded), float or double. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00169.html" title="Defines functions that generate common transformation matrices. ">GLM_GTC_matrix_transform</a> </dd>
+<dd>
+- glm::ortho(T const & left, T const & right, T const & bottom, T const & top) </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gada0aaaee76f1fd3c272698c8eca735a1"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, defaultp> glm::orthoRH </td>
+ <td>(</td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>left</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>right</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>bottom</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>top</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>zNear</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>zFar</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Creates a matrix for an orthographic parallel viewing volume, using right-handedness. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">left</td><td></td></tr>
+ <tr><td class="paramname">right</td><td></td></tr>
+ <tr><td class="paramname">bottom</td><td></td></tr>
+ <tr><td class="paramname">top</td><td></td></tr>
+ <tr><td class="paramname">zNear</td><td></td></tr>
+ <tr><td class="paramname">zFar</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">T</td><td>Value type used to build the matrix. Currently supported: half (not recommanded), float or double. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00169.html" title="Defines functions that generate common transformation matrices. ">GLM_GTC_matrix_transform</a> </dd>
+<dd>
+- glm::ortho(T const & left, T const & right, T const & bottom, T const & top) </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gac3613dcb6c6916465ad5b7ad5a786175"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, defaultp> glm::perspective </td>
+ <td>(</td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>fovy</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>aspect</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>near</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>far</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Creates a matrix for a symetric perspective-view frustum based on the default handedness. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">fovy</td><td>Specifies the field of view angle in the y direction. Expressed in radians. </td></tr>
+ <tr><td class="paramname">aspect</td><td>Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). </td></tr>
+ <tr><td class="paramname">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive). </td></tr>
+ <tr><td class="paramname">far</td><td>Specifies the distance from the viewer to the far clipping plane (always positive). </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">T</td><td>Value type used to build the matrix. Currently supported: half (not recommanded), float or double. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00169.html" title="Defines functions that generate common transformation matrices. ">GLM_GTC_matrix_transform</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gae9146e2c550fc8646299e4b900238145"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, defaultp> glm::perspectiveFov </td>
+ <td>(</td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>fov</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>width</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>height</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>near</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>far</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Builds a perspective projection matrix based on a field of view and the default handedness. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">fov</td><td>Expressed in radians. </td></tr>
+ <tr><td class="paramname">width</td><td></td></tr>
+ <tr><td class="paramname">height</td><td></td></tr>
+ <tr><td class="paramname">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive). </td></tr>
+ <tr><td class="paramname">far</td><td>Specifies the distance from the viewer to the far clipping plane (always positive). </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">T</td><td>Value type used to build the matrix. Currently supported: half (not recommanded), float or double. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00169.html" title="Defines functions that generate common transformation matrices. ">GLM_GTC_matrix_transform</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gae705a2f19c3ef5ef880bd6c92759cf2d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, defaultp> glm::perspectiveFovLH </td>
+ <td>(</td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>fov</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>width</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>height</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>near</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>far</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Builds a left handed perspective projection matrix based on a field of view. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">fov</td><td>Expressed in radians. </td></tr>
+ <tr><td class="paramname">width</td><td></td></tr>
+ <tr><td class="paramname">height</td><td></td></tr>
+ <tr><td class="paramname">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive). </td></tr>
+ <tr><td class="paramname">far</td><td>Specifies the distance from the viewer to the far clipping plane (always positive). </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">T</td><td>Value type used to build the matrix. Currently supported: half (not recommanded), float or double. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00169.html" title="Defines functions that generate common transformation matrices. ">GLM_GTC_matrix_transform</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga07cd8df791bf90dcb782645fe0b21261"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, defaultp> glm::perspectiveFovRH </td>
+ <td>(</td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>fov</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>width</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>height</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>near</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>far</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Builds a right handed perspective projection matrix based on a field of view. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">fov</td><td>Expressed in radians. </td></tr>
+ <tr><td class="paramname">width</td><td></td></tr>
+ <tr><td class="paramname">height</td><td></td></tr>
+ <tr><td class="paramname">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive). </td></tr>
+ <tr><td class="paramname">far</td><td>Specifies the distance from the viewer to the far clipping plane (always positive). </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">T</td><td>Value type used to build the matrix. Currently supported: half (not recommanded), float or double. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00169.html" title="Defines functions that generate common transformation matrices. ">GLM_GTC_matrix_transform</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga34048da27c559f1ac8e9550d169dd6f3"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, defaultp> glm::perspectiveLH </td>
+ <td>(</td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>fovy</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>aspect</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>near</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>far</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Creates a matrix for a left handed, symetric perspective-view frustum. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">fovy</td><td>Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. </td></tr>
+ <tr><td class="paramname">aspect</td><td>Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). </td></tr>
+ <tr><td class="paramname">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive). </td></tr>
+ <tr><td class="paramname">far</td><td>Specifies the distance from the viewer to the far clipping plane (always positive). </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">T</td><td>Value type used to build the matrix. Currently supported: half (not recommanded), float or double. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00169.html" title="Defines functions that generate common transformation matrices. ">GLM_GTC_matrix_transform</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga5a4fa9f8ffabb2294e48a18bf8fa2f5f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, defaultp> glm::perspectiveRH </td>
+ <td>(</td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>fovy</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>aspect</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>near</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>far</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Creates a matrix for a right handed, symetric perspective-view frustum. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">fovy</td><td>Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. </td></tr>
+ <tr><td class="paramname">aspect</td><td>Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). </td></tr>
+ <tr><td class="paramname">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive). </td></tr>
+ <tr><td class="paramname">far</td><td>Specifies the distance from the viewer to the far clipping plane (always positive). </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">T</td><td>Value type used to build the matrix. Currently supported: half (not recommanded), float or double. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00169.html" title="Defines functions that generate common transformation matrices. ">GLM_GTC_matrix_transform</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga9026c77505b99990f68826f27c267dc5"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, P> glm::pickMatrix </td>
+ <td>(</td>
+ <td class="paramtype">tvec2< T, P > const & </td>
+ <td class="paramname"><em>center</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec2< T, P > const & </td>
+ <td class="paramname"><em>delta</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec4< U, P > const & </td>
+ <td class="paramname"><em>viewport</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Define a picking region. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">center</td><td></td></tr>
+ <tr><td class="paramname">delta</td><td></td></tr>
+ <tr><td class="paramname">viewport</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">T</td><td>Native type used for the computation. Currently supported: half (not recommanded), float or double. </td></tr>
+ <tr><td class="paramname">U</td><td>Currently supported: Floating-point types and integer types. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00169.html" title="Defines functions that generate common transformation matrices. ">GLM_GTC_matrix_transform</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gad743556abd138264d4f06f4ca27f1d7e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tvec3<T, P> glm::project </td>
+ <td>(</td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>obj</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tmat4x4< T, P > const & </td>
+ <td class="paramname"><em>model</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tmat4x4< T, P > const & </td>
+ <td class="paramname"><em>proj</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec4< U, P > const & </td>
+ <td class="paramname"><em>viewport</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">obj</td><td>Specify the object coordinates. </td></tr>
+ <tr><td class="paramname">model</td><td>Specifies the current modelview matrix </td></tr>
+ <tr><td class="paramname">proj</td><td>Specifies the current projection matrix </td></tr>
+ <tr><td class="paramname">viewport</td><td>Specifies the current viewport </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Return the computed window coordinates. </dd></dl>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">T</td><td>Native type used for the computation. Currently supported: half (not recommanded), float or double. </td></tr>
+ <tr><td class="paramname">U</td><td>Currently supported: Floating-point types and integer types. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00169.html" title="Defines functions that generate common transformation matrices. ">GLM_GTC_matrix_transform</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga161b1df124348f232d994ba7958e4815"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, P> glm::rotate </td>
+ <td>(</td>
+ <td class="paramtype">tmat4x4< T, P > const & </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>angle</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>axis</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Builds a rotation 4 * 4 matrix created from an axis vector and an angle. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">m</td><td>Input matrix multiplied by this rotation matrix. </td></tr>
+ <tr><td class="paramname">angle</td><td>Rotation angle expressed in radians. </td></tr>
+ <tr><td class="paramname">axis</td><td>Rotation axis, recommended to be normalized. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">T</td><td>Value type used to build the matrix. Supported: half, float or double. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00169.html" title="Defines functions that generate common transformation matrices. ">GLM_GTC_matrix_transform</a> </dd>
+<dd>
+- rotate(tmat4x4<T, P> const & m, T angle, T x, T y, T z) </dd>
+<dd>
+- rotate(T angle, tvec3<T, P> const & v) </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga8f062fcc07e2445500793f2803afebb0"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, P> glm::scale </td>
+ <td>(</td>
+ <td class="paramtype">tmat4x4< T, P > const & </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>v</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Builds a scale 4 * 4 matrix created from 3 scalars. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">m</td><td>Input matrix multiplied by this scale matrix. </td></tr>
+ <tr><td class="paramname">v</td><td>Ratio of scaling for each axis. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">T</td><td>Value type used to build the matrix. Currently supported: half (not recommanded), float or double. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00169.html" title="Defines functions that generate common transformation matrices. ">GLM_GTC_matrix_transform</a> </dd>
+<dd>
+- scale(tmat4x4<T, P> const & m, T x, T y, T z) </dd>
+<dd>
+- scale(tvec3<T, P> const & v) </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaee134ab77c6c5548a6ebf4e8e476c6ed"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, P> glm::translate </td>
+ <td>(</td>
+ <td class="paramtype">tmat4x4< T, P > const & </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>v</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Builds a translation 4 * 4 matrix created from a vector of 3 components. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">m</td><td>Input matrix multiplied by this translation matrix. </td></tr>
+ <tr><td class="paramname">v</td><td>Coordinates of a translation vector. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">T</td><td>Value type used to build the matrix. Currently supported: half (not recommanded), float or double. <div class="fragment"><div class="line"><span class="preprocessor">#include <<a class="code" href="a00040.html">glm/glm.hpp</a>></span></div>
+<div class="line"><span class="preprocessor">#include <<a class="code" href="a00070.html">glm/gtc/matrix_transform.hpp</a>></span></div>
+<div class="line">...</div>
+<div class="line">glm::mat4 m = <a class="code" href="a00169.html#gaee134ab77c6c5548a6ebf4e8e476c6ed">glm::translate</a>(<a class="code" href="a00157.html#gade0eb47c01f79384a6f38017ede17446">glm::mat4</a>(1.0f), <a class="code" href="a00157.html#gaa8ea2429bb3cb41a715258a447f39897">glm::vec3</a>(1.0f));</div>
+<div class="line"><span class="comment">// m[0][0] == 1.0f, m[0][1] == 0.0f, m[0][2] == 0.0f, m[0][3] == 0.0f</span></div>
+<div class="line"><span class="comment">// m[1][0] == 0.0f, m[1][1] == 1.0f, m[1][2] == 0.0f, m[1][3] == 0.0f</span></div>
+<div class="line"><span class="comment">// m[2][0] == 0.0f, m[2][1] == 0.0f, m[2][2] == 1.0f, m[2][3] == 0.0f</span></div>
+<div class="line"><span class="comment">// m[3][0] == 1.0f, m[3][1] == 1.0f, m[3][2] == 1.0f, m[3][3] == 1.0f</span></div>
+</div><!-- fragment --> </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00169.html" title="Defines functions that generate common transformation matrices. ">GLM_GTC_matrix_transform</a> </dd>
+<dd>
+- translate(tmat4x4<T, P> const & m, T x, T y, T z) </dd>
+<dd>
+- translate(tvec3<T, P> const & v) </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaed64bd81f5ecdab52fecbdf7f6b58194"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, defaultp> glm::tweakedInfinitePerspective </td>
+ <td>(</td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>fovy</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>aspect</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>near</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics hardware that doesn't support depth clamping. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">fovy</td><td>Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. </td></tr>
+ <tr><td class="paramname">aspect</td><td>Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). </td></tr>
+ <tr><td class="paramname">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive). </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">T</td><td>Value type used to build the matrix. Currently supported: half (not recommanded), float or double. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00169.html" title="Defines functions that generate common transformation matrices. ">GLM_GTC_matrix_transform</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaa50fce7f50b5d5da881ed30f5532a921"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, defaultp> glm::tweakedInfinitePerspective </td>
+ <td>(</td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>fovy</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>aspect</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>near</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>ep</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics hardware that doesn't support depth clamping. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">fovy</td><td>Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. </td></tr>
+ <tr><td class="paramname">aspect</td><td>Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). </td></tr>
+ <tr><td class="paramname">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive). </td></tr>
+ <tr><td class="paramname">ep</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">T</td><td>Value type used to build the matrix. Currently supported: half (not recommanded), float or double. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00169.html" title="Defines functions that generate common transformation matrices. ">GLM_GTC_matrix_transform</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga82a558de3ce42cbeed0f6ec292a4e1b3"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tvec3<T, P> glm::unProject </td>
+ <td>(</td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>win</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tmat4x4< T, P > const & </td>
+ <td class="paramname"><em>model</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tmat4x4< T, P > const & </td>
+ <td class="paramname"><em>proj</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec4< U, P > const & </td>
+ <td class="paramname"><em>viewport</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Map the specified window coordinates (win.x, win.y, win.z) into object coordinates. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">win</td><td>Specify the window coordinates to be mapped. </td></tr>
+ <tr><td class="paramname">model</td><td>Specifies the modelview matrix </td></tr>
+ <tr><td class="paramname">proj</td><td>Specifies the projection matrix </td></tr>
+ <tr><td class="paramname">viewport</td><td>Specifies the viewport </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Returns the computed object coordinates. </dd></dl>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">T</td><td>Native type used for the computation. Currently supported: half (not recommanded), float or double. </td></tr>
+ <tr><td class="paramname">U</td><td>Currently supported: Floating-point types and integer types. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00169.html" title="Defines functions that generate common transformation matrices. ">GLM_GTC_matrix_transform</a> </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00170.html b/src/third_party/glm/doc/api/a00170.html
new file mode 100644
index 0000000..100dc15
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00170.html
@@ -0,0 +1,136 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTC_noise</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTC_noise<div class="ingroups"><a class="el" href="a00154.html">GTC Extensions (Stable)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga14e5975486b2b36e747861d3c65b16c1"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga14e5975486b2b36e747861d3c65b16c1"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00170.html#ga14e5975486b2b36e747861d3c65b16c1">perlin</a> (vecType< T, P > const &p)</td></tr>
+<tr class="separator:ga14e5975486b2b36e747861d3c65b16c1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7e103ffffacb322fe2d4863c372ae2fd"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga7e103ffffacb322fe2d4863c372ae2fd"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00170.html#ga7e103ffffacb322fe2d4863c372ae2fd">perlin</a> (vecType< T, P > const &p, vecType< T, P > const &rep)</td></tr>
+<tr class="separator:ga7e103ffffacb322fe2d4863c372ae2fd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga05f5ab240c9a3fdeee353636e464c285"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga05f5ab240c9a3fdeee353636e464c285"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00170.html#ga05f5ab240c9a3fdeee353636e464c285">simplex</a> (vecType< T, P > const &p)</td></tr>
+<tr class="separator:ga05f5ab240c9a3fdeee353636e464c285"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Defines 2D, 3D and 4D procedural noise functions Based on the work of Stefan Gustavson and Ashima Arts on "webgl-noise": <a href="https://github.com/ashima/webgl-noise">https://github.com/ashima/webgl-noise</a> Following Stefan Gustavson's paper "Simplex noise demystified": <a href="http://www.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf">http://www.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf</a> <<a class="el" href="a00073.html" title="GLM_GTC_noise ">glm/gtc/noise.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga14e5975486b2b36e747861d3c65b16c1"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL T glm::perlin </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Classic perlin noise. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00170.html" title="Defines 2D, 3D and 4D procedural noise functions Based on the work of Stefan Gustavson and Ashima Art...">GLM_GTC_noise</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga7e103ffffacb322fe2d4863c372ae2fd"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL T glm::perlin </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>p</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>rep</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Periodic perlin noise. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00170.html" title="Defines 2D, 3D and 4D procedural noise functions Based on the work of Stefan Gustavson and Ashima Art...">GLM_GTC_noise</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga05f5ab240c9a3fdeee353636e464c285"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL T glm::simplex </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Simplex noise. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00170.html" title="Defines 2D, 3D and 4D procedural noise functions Based on the work of Stefan Gustavson and Ashima Art...">GLM_GTC_noise</a> </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00171.html b/src/third_party/glm/doc/api/a00171.html
new file mode 100644
index 0000000..5be9454
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00171.html
@@ -0,0 +1,1406 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTC_packing</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTC_packing<div class="ingroups"><a class="el" href="a00154.html">GTC Extensions (Stable)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga4944ad465ff950e926d49621f916c78d"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga4944ad465ff950e926d49621f916c78d">packF2x11_1x10</a> (vec3 const &v)</td></tr>
+<tr class="separator:ga4944ad465ff950e926d49621f916c78d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3f648fc205467792dc6d8c59c748f8a6"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga3f648fc205467792dc6d8c59c748f8a6">packF3x9_E1x5</a> (vec3 const &v)</td></tr>
+<tr class="separator:ga3f648fc205467792dc6d8c59c748f8a6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga896d806b72e390eb953786cca3632ec9"><td class="memTemplParams" colspan="2">template<precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga896d806b72e390eb953786cca3632ec9"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< uint16, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00171.html#ga896d806b72e390eb953786cca3632ec9">packHalf</a> (vecType< float, P > const &v)</td></tr>
+<tr class="separator:ga896d806b72e390eb953786cca3632ec9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga43f2093b6ff192a79058ff7834fc3528"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga43f2093b6ff192a79058ff7834fc3528">packHalf1x16</a> (float v)</td></tr>
+<tr class="separator:ga43f2093b6ff192a79058ff7834fc3528"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafe2f7b39caf8f5ec555e1c059ec530e6"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#gafe2f7b39caf8f5ec555e1c059ec530e6">packHalf4x16</a> (vec4 const &v)</td></tr>
+<tr class="separator:gafe2f7b39caf8f5ec555e1c059ec530e6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga06ecb6afb902dba45419008171db9023"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga06ecb6afb902dba45419008171db9023">packI3x10_1x2</a> (ivec4 const &v)</td></tr>
+<tr class="separator:ga06ecb6afb902dba45419008171db9023"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1be760860697db386b36513aeafe9d5e"><td class="memTemplParams" colspan="2">template<typename intType , typename floatType , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga1be760860697db386b36513aeafe9d5e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< intType, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00171.html#ga1be760860697db386b36513aeafe9d5e">packSnorm</a> (vecType< floatType, P > const &v)</td></tr>
+<tr class="separator:ga1be760860697db386b36513aeafe9d5e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab22f8bcfdb5fc65af4701b25f143c1af"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#gab22f8bcfdb5fc65af4701b25f143c1af">packSnorm1x16</a> (float v)</td></tr>
+<tr class="separator:gab22f8bcfdb5fc65af4701b25f143c1af"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae3592e0795e62aaa1865b3a10496a7a1"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#gae3592e0795e62aaa1865b3a10496a7a1">packSnorm1x8</a> (float s)</td></tr>
+<tr class="separator:gae3592e0795e62aaa1865b3a10496a7a1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6be3cfb2cce3702f03e91bbeb5286d7e"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga6be3cfb2cce3702f03e91bbeb5286d7e">packSnorm2x8</a> (vec2 const &v)</td></tr>
+<tr class="separator:ga6be3cfb2cce3702f03e91bbeb5286d7e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab997545661877d2c7362a5084d3897d3"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#gab997545661877d2c7362a5084d3897d3">packSnorm3x10_1x2</a> (vec4 const &v)</td></tr>
+<tr class="separator:gab997545661877d2c7362a5084d3897d3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga358943934d21da947d5bcc88c2ab7832"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga358943934d21da947d5bcc88c2ab7832">packSnorm4x16</a> (vec4 const &v)</td></tr>
+<tr class="separator:ga358943934d21da947d5bcc88c2ab7832"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gada3d88d59f0f458f9c51a9fd359a4bc0"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#gada3d88d59f0f458f9c51a9fd359a4bc0">packU3x10_1x2</a> (uvec4 const &v)</td></tr>
+<tr class="separator:gada3d88d59f0f458f9c51a9fd359a4bc0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gacb9a3df68172c1193c9d701a3fa4d88b"><td class="memTemplParams" colspan="2">template<typename uintType , typename floatType , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gacb9a3df68172c1193c9d701a3fa4d88b"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< uintType, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00171.html#gacb9a3df68172c1193c9d701a3fa4d88b">packUnorm</a> (vecType< floatType, P > const &v)</td></tr>
+<tr class="separator:gacb9a3df68172c1193c9d701a3fa4d88b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9f82737bf2a44bedff1d286b76837886"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga9f82737bf2a44bedff1d286b76837886">packUnorm1x16</a> (float v)</td></tr>
+<tr class="separator:ga9f82737bf2a44bedff1d286b76837886"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga768e0337dd6246773f14aa0a421fe9a8"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga768e0337dd6246773f14aa0a421fe9a8">packUnorm1x5_1x6_1x5</a> (vec3 const &v)</td></tr>
+<tr class="separator:ga768e0337dd6246773f14aa0a421fe9a8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4b2fa60df3460403817d28b082ee0736"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga4b2fa60df3460403817d28b082ee0736">packUnorm1x8</a> (float v)</td></tr>
+<tr class="separator:ga4b2fa60df3460403817d28b082ee0736"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7f9abdb50f9be1aa1c14912504a0d98d"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga7f9abdb50f9be1aa1c14912504a0d98d">packUnorm2x3_1x2</a> (vec3 const &v)</td></tr>
+<tr class="separator:ga7f9abdb50f9be1aa1c14912504a0d98d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab6bbd5be3b8e6db538ecb33a7844481c"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#gab6bbd5be3b8e6db538ecb33a7844481c">packUnorm2x4</a> (vec2 const &v)</td></tr>
+<tr class="separator:gab6bbd5be3b8e6db538ecb33a7844481c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9a666b1c688ab54100061ed06526de6e"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga9a666b1c688ab54100061ed06526de6e">packUnorm2x8</a> (vec2 const &v)</td></tr>
+<tr class="separator:ga9a666b1c688ab54100061ed06526de6e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8a1ee625d2707c60530fb3fca2980b19"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga8a1ee625d2707c60530fb3fca2980b19">packUnorm3x10_1x2</a> (vec4 const &v)</td></tr>
+<tr class="separator:ga8a1ee625d2707c60530fb3fca2980b19"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaec4112086d7fb133bea104a7c237de52"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#gaec4112086d7fb133bea104a7c237de52">packUnorm3x5_1x1</a> (vec4 const &v)</td></tr>
+<tr class="separator:gaec4112086d7fb133bea104a7c237de52"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1f63c264e7ab63264e2b2a99fd393897"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga1f63c264e7ab63264e2b2a99fd393897">packUnorm4x16</a> (vec4 const &v)</td></tr>
+<tr class="separator:ga1f63c264e7ab63264e2b2a99fd393897"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad3e7e3ce521513584a53aedc5f9765c1"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#gad3e7e3ce521513584a53aedc5f9765c1">packUnorm4x4</a> (vec4 const &v)</td></tr>
+<tr class="separator:gad3e7e3ce521513584a53aedc5f9765c1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2b1fd1e854705b1345e98409e0a25e50"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL vec3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga2b1fd1e854705b1345e98409e0a25e50">unpackF2x11_1x10</a> (uint32 p)</td></tr>
+<tr class="separator:ga2b1fd1e854705b1345e98409e0a25e50"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab9e60ebe3ad3eeced6a9ec6eb876d74e"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL vec3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#gab9e60ebe3ad3eeced6a9ec6eb876d74e">unpackF3x9_E1x5</a> (uint32 p)</td></tr>
+<tr class="separator:gab9e60ebe3ad3eeced6a9ec6eb876d74e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf3f9387834f8d8beadfe723c1dd247a7"><td class="memTemplParams" colspan="2">template<precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gaf3f9387834f8d8beadfe723c1dd247a7"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< float, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00171.html#gaf3f9387834f8d8beadfe723c1dd247a7">unpackHalf</a> (vecType< uint16, P > const &p)</td></tr>
+<tr class="separator:gaf3f9387834f8d8beadfe723c1dd247a7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac37dedaba24b00adb4ec6e8f92c19dbf"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL float </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#gac37dedaba24b00adb4ec6e8f92c19dbf">unpackHalf1x16</a> (uint16 v)</td></tr>
+<tr class="separator:gac37dedaba24b00adb4ec6e8f92c19dbf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga57dfc41b2eb20b0ac00efae7d9c49dcd"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL vec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga57dfc41b2eb20b0ac00efae7d9c49dcd">unpackHalf4x16</a> (uint64 p)</td></tr>
+<tr class="separator:ga57dfc41b2eb20b0ac00efae7d9c49dcd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9a05330e5490be0908d3b117d82aff56"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL ivec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga9a05330e5490be0908d3b117d82aff56">unpackI3x10_1x2</a> (uint32 p)</td></tr>
+<tr class="separator:ga9a05330e5490be0908d3b117d82aff56"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga63eeec0d416e48462f341f4a7a9a45fe"><td class="memTemplParams" colspan="2">template<typename intType , typename floatType , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga63eeec0d416e48462f341f4a7a9a45fe"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< floatType, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00171.html#ga63eeec0d416e48462f341f4a7a9a45fe">unpackSnorm</a> (vecType< intType, P > const &v)</td></tr>
+<tr class="separator:ga63eeec0d416e48462f341f4a7a9a45fe"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga96dd15002370627a443c835ab03a766c"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL float </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga96dd15002370627a443c835ab03a766c">unpackSnorm1x16</a> (uint16 p)</td></tr>
+<tr class="separator:ga96dd15002370627a443c835ab03a766c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4851ff86678aa1c7ace9d67846894285"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL float </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga4851ff86678aa1c7ace9d67846894285">unpackSnorm1x8</a> (uint8 p)</td></tr>
+<tr class="separator:ga4851ff86678aa1c7ace9d67846894285"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8b128e89be449fc71336968a66bf6e1a"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL vec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga8b128e89be449fc71336968a66bf6e1a">unpackSnorm2x8</a> (uint16 p)</td></tr>
+<tr class="separator:ga8b128e89be449fc71336968a66bf6e1a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7a4fbf79be9740e3c57737bc2af05e5b"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL vec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga7a4fbf79be9740e3c57737bc2af05e5b">unpackSnorm3x10_1x2</a> (uint32 p)</td></tr>
+<tr class="separator:ga7a4fbf79be9740e3c57737bc2af05e5b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaaddf9c353528fe896106f7181219c7f4"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL vec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#gaaddf9c353528fe896106f7181219c7f4">unpackSnorm4x16</a> (uint64 p)</td></tr>
+<tr class="separator:gaaddf9c353528fe896106f7181219c7f4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga48df3042a7d079767f5891a1bfd8a60a"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uvec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga48df3042a7d079767f5891a1bfd8a60a">unpackU3x10_1x2</a> (uint32 p)</td></tr>
+<tr class="separator:ga48df3042a7d079767f5891a1bfd8a60a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad3d7e1ec7fcfb7ae341658e2ce1c3bd9"><td class="memTemplParams" colspan="2">template<typename uintType , typename floatType , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gad3d7e1ec7fcfb7ae341658e2ce1c3bd9"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< floatType, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00171.html#gad3d7e1ec7fcfb7ae341658e2ce1c3bd9">unpackUnorm</a> (vecType< uintType, P > const &v)</td></tr>
+<tr class="separator:gad3d7e1ec7fcfb7ae341658e2ce1c3bd9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga83d34160a5cb7bcb5339823210fc7501"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL float </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga83d34160a5cb7bcb5339823210fc7501">unpackUnorm1x16</a> (uint16 p)</td></tr>
+<tr class="separator:ga83d34160a5cb7bcb5339823210fc7501"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab3bc08ecfc0f3339be93fb2b3b56d88a"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL vec3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#gab3bc08ecfc0f3339be93fb2b3b56d88a">unpackUnorm1x5_1x6_1x5</a> (uint16 p)</td></tr>
+<tr class="separator:gab3bc08ecfc0f3339be93fb2b3b56d88a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1319207e30874fb4931a9ee913983ee1"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL float </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga1319207e30874fb4931a9ee913983ee1">unpackUnorm1x8</a> (uint8 p)</td></tr>
+<tr class="separator:ga1319207e30874fb4931a9ee913983ee1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6abd5a9014df3b5ce4059008d2491260"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL vec3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga6abd5a9014df3b5ce4059008d2491260">unpackUnorm2x3_1x2</a> (uint8 p)</td></tr>
+<tr class="separator:ga6abd5a9014df3b5ce4059008d2491260"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2e50476132fe5f27f08e273d9c70d85b"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL vec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga2e50476132fe5f27f08e273d9c70d85b">unpackUnorm2x4</a> (uint8 p)</td></tr>
+<tr class="separator:ga2e50476132fe5f27f08e273d9c70d85b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga637cbe3913dd95c6e7b4c99c61bd611f"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL vec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga637cbe3913dd95c6e7b4c99c61bd611f">unpackUnorm2x8</a> (uint16 p)</td></tr>
+<tr class="separator:ga637cbe3913dd95c6e7b4c99c61bd611f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5156d3060355fe332865da2c7f78815f"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL vec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga5156d3060355fe332865da2c7f78815f">unpackUnorm3x10_1x2</a> (uint32 p)</td></tr>
+<tr class="separator:ga5156d3060355fe332865da2c7f78815f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5ff95ff5bc16f396432ab67243dbae4d"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL vec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga5ff95ff5bc16f396432ab67243dbae4d">unpackUnorm3x5_1x1</a> (uint16 p)</td></tr>
+<tr class="separator:ga5ff95ff5bc16f396432ab67243dbae4d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2ae149c5d2473ac1e5f347bb654a242d"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL vec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#ga2ae149c5d2473ac1e5f347bb654a242d">unpackUnorm4x16</a> (uint64 p)</td></tr>
+<tr class="separator:ga2ae149c5d2473ac1e5f347bb654a242d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac58ee89d0e224bb6df5e8bbb18843a2d"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL vec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00171.html#gac58ee89d0e224bb6df5e8bbb18843a2d">unpackUnorm4x4</a> (uint16 p)</td></tr>
+<tr class="separator:gac58ee89d0e224bb6df5e8bbb18843a2d"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>This extension provides a set of function to convert vertors to packed formats. </p>
+<p><<a class="el" href="a00080.html" title="GLM_GTC_packing ">glm/gtc/packing.hpp</a>> need to be included to use these features. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga4944ad465ff950e926d49621f916c78d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL uint32 glm::packF2x11_1x10 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00157.html#gaa8ea2429bb3cb41a715258a447f39897">vec3</a> const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>First, converts the first two components of the normalized floating-point value v into 11-bit signless floating-point values. </p>
+<p>Then, converts the third component of the normalized floating-point value v into a 10-bit signless floating-point value. Then, the results are packed into the returned 32-bit unsigned integer.</p>
+<p>The first vector component specifies the 11 least-significant bits of the result; the last component specifies the 10 most-significant bits.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00171.html" title="This extension provides a set of function to convert vertors to packed formats. ">GLM_GTC_packing</a> </dd>
+<dd>
+vec3 unpackF2x11_1x10(uint32 const & p) </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga3f648fc205467792dc6d8c59c748f8a6"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL uint32 glm::packF3x9_E1x5 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00157.html#gaa8ea2429bb3cb41a715258a447f39897">vec3</a> const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>First, converts the first two components of the normalized floating-point value v into 11-bit signless floating-point values. </p>
+<p>Then, converts the third component of the normalized floating-point value v into a 10-bit signless floating-point value. Then, the results are packed into the returned 32-bit unsigned integer.</p>
+<p>The first vector component specifies the 11 least-significant bits of the result; the last component specifies the 10 most-significant bits.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00171.html" title="This extension provides a set of function to convert vertors to packed formats. ">GLM_GTC_packing</a> </dd>
+<dd>
+vec3 unpackF3x9_E1x5(uint32 const & p) </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga896d806b72e390eb953786cca3632ec9"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<uint16, P> glm::packHalf </td>
+ <td>(</td>
+ <td class="paramtype">vecType< float, P > const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns an unsigned integer vector obtained by converting the components of a floating-point vector to the 16-bit floating-point representation found in the OpenGL Specification. </p>
+<p>The first vector component specifies the 16 least-significant bits of the result; the forth component specifies the 16 most-significant bits.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00171.html" title="This extension provides a set of function to convert vertors to packed formats. ">GLM_GTC_packing</a> </dd>
+<dd>
+vecType<float, P> unpackHalf(vecType<uint16, P> const & p) </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga43f2093b6ff192a79058ff7834fc3528"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL uint16 glm::packHalf1x16 </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns an unsigned integer obtained by converting the components of a floating-point scalar to the 16-bit floating-point representation found in the OpenGL Specification, and then packing this 16-bit value into a 16-bit unsigned integer. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00171.html" title="This extension provides a set of function to convert vertors to packed formats. ">GLM_GTC_packing</a> </dd>
+<dd>
+uint32 packHalf2x16(vec2 const & v) </dd>
+<dd>
+uint64 packHalf4x16(vec4 const & v) </dd>
+<dd>
+<a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packHalf2x16.xml">GLSL packHalf2x16 man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gafe2f7b39caf8f5ec555e1c059ec530e6"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL uint64 glm::packHalf4x16 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00157.html#gafbab23070ca47932487d25332adc7d7c">vec4</a> const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns an unsigned integer obtained by converting the components of a four-component floating-point vector to the 16-bit floating-point representation found in the OpenGL Specification, and then packing these four 16-bit values into a 64-bit unsigned integer. </p>
+<p>The first vector component specifies the 16 least-significant bits of the result; the forth component specifies the 16 most-significant bits.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00171.html" title="This extension provides a set of function to convert vertors to packed formats. ">GLM_GTC_packing</a> </dd>
+<dd>
+uint16 packHalf1x16(float const & v) </dd>
+<dd>
+uint32 packHalf2x16(vec2 const & v) </dd>
+<dd>
+<a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packHalf2x16.xml">GLSL packHalf2x16 man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga06ecb6afb902dba45419008171db9023"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL uint32 glm::packI3x10_1x2 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00157.html#gaaa26c41d168dc00be0fe55f4d0a34224">ivec4</a> const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns an unsigned integer obtained by converting the components of a four-component signed integer vector to the 10-10-10-2-bit signed integer representation found in the OpenGL Specification, and then packing these four values into a 32-bit unsigned integer. </p>
+<p>The first vector component specifies the 10 least-significant bits of the result; the forth component specifies the 2 most-significant bits.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00171.html" title="This extension provides a set of function to convert vertors to packed formats. ">GLM_GTC_packing</a> </dd>
+<dd>
+uint32 packI3x10_1x2(uvec4 const & v) </dd>
+<dd>
+uint32 packSnorm3x10_1x2(vec4 const & v) </dd>
+<dd>
+uint32 packUnorm3x10_1x2(vec4 const & v) </dd>
+<dd>
+ivec4 unpackI3x10_1x2(uint32 const & p) </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga1be760860697db386b36513aeafe9d5e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<intType, P> glm::packSnorm </td>
+ <td>(</td>
+ <td class="paramtype">vecType< floatType, P > const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Convert each component of the normalized floating-point vector into signed integer values. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00171.html" title="This extension provides a set of function to convert vertors to packed formats. ">GLM_GTC_packing</a> </dd>
+<dd>
+vecType<floatType, P> unpackSnorm(vecType<intType, P> const & p); </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gab22f8bcfdb5fc65af4701b25f143c1af"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL uint16 glm::packSnorm1x16 </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>First, converts the normalized floating-point value v into 16-bit integer value. </p>
+<p>Then, the results are packed into the returned 16-bit unsigned integer.</p>
+<p>The conversion to fixed point is done as follows: packSnorm1x8: round(clamp(s, -1, +1) * 32767.0)</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00171.html" title="This extension provides a set of function to convert vertors to packed formats. ">GLM_GTC_packing</a> </dd>
+<dd>
+uint32 packSnorm2x16(vec2 const & v) </dd>
+<dd>
+uint64 packSnorm4x16(vec4 const & v) </dd>
+<dd>
+<a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packSnorm4x8.xml">GLSL packSnorm4x8 man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gae3592e0795e62aaa1865b3a10496a7a1"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL uint8 glm::packSnorm1x8 </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>s</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>First, converts the normalized floating-point value v into 8-bit integer value. </p>
+<p>Then, the results are packed into the returned 8-bit unsigned integer.</p>
+<p>The conversion to fixed point is done as follows: packSnorm1x8: round(clamp(s, -1, +1) * 127.0)</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00171.html" title="This extension provides a set of function to convert vertors to packed formats. ">GLM_GTC_packing</a> </dd>
+<dd>
+uint16 packSnorm2x8(vec2 const & v) </dd>
+<dd>
+uint32 packSnorm4x8(vec4 const & v) </dd>
+<dd>
+<a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packSnorm4x8.xml">GLSL packSnorm4x8 man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga6be3cfb2cce3702f03e91bbeb5286d7e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL uint16 glm::packSnorm2x8 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00157.html#ga09d0200e8ff86391d8804b4fefd5f1da">vec2</a> const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>First, converts each component of the normalized floating-point value v into 8-bit integer values. </p>
+<p>Then, the results are packed into the returned 16-bit unsigned integer.</p>
+<p>The conversion for component c of v to fixed point is done as follows: packSnorm2x8: round(clamp(c, -1, +1) * 127.0)</p>
+<p>The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00171.html" title="This extension provides a set of function to convert vertors to packed formats. ">GLM_GTC_packing</a> </dd>
+<dd>
+uint8 packSnorm1x8(float const & v) </dd>
+<dd>
+uint32 packSnorm4x8(vec4 const & v) </dd>
+<dd>
+<a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packSnorm4x8.xml">GLSL packSnorm4x8 man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gab997545661877d2c7362a5084d3897d3"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL uint32 glm::packSnorm3x10_1x2 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00157.html#gafbab23070ca47932487d25332adc7d7c">vec4</a> const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>First, converts the first three components of the normalized floating-point value v into 10-bit signed integer values. </p>
+<p>Then, converts the forth component of the normalized floating-point value v into 2-bit signed integer values. Then, the results are packed into the returned 32-bit unsigned integer.</p>
+<p>The conversion for component c of v to fixed point is done as follows: packSnorm3x10_1x2(xyz): round(clamp(c, -1, +1) * 511.0) packSnorm3x10_1x2(w): round(clamp(c, -1, +1) * 1.0)</p>
+<p>The first vector component specifies the 10 least-significant bits of the result; the forth component specifies the 2 most-significant bits.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00171.html" title="This extension provides a set of function to convert vertors to packed formats. ">GLM_GTC_packing</a> </dd>
+<dd>
+vec4 unpackSnorm3x10_1x2(uint32 const & p) </dd>
+<dd>
+uint32 packUnorm3x10_1x2(vec4 const & v) </dd>
+<dd>
+uint32 packU3x10_1x2(uvec4 const & v) </dd>
+<dd>
+uint32 packI3x10_1x2(ivec4 const & v) </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga358943934d21da947d5bcc88c2ab7832"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL uint64 glm::packSnorm4x16 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00157.html#gafbab23070ca47932487d25332adc7d7c">vec4</a> const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>First, converts each component of the normalized floating-point value v into 16-bit integer values. </p>
+<p>Then, the results are packed into the returned 64-bit unsigned integer.</p>
+<p>The conversion for component c of v to fixed point is done as follows: packSnorm2x8: round(clamp(c, -1, +1) * 32767.0)</p>
+<p>The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00171.html" title="This extension provides a set of function to convert vertors to packed formats. ">GLM_GTC_packing</a> </dd>
+<dd>
+uint16 packSnorm1x16(float const & v) </dd>
+<dd>
+uint32 packSnorm2x16(vec2 const & v) </dd>
+<dd>
+<a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packSnorm4x8.xml">GLSL packSnorm4x8 man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gada3d88d59f0f458f9c51a9fd359a4bc0"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL uint32 glm::packU3x10_1x2 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00157.html#gaa7c3a0e7ae50c34c3290415c115f251e">uvec4</a> const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns an unsigned integer obtained by converting the components of a four-component unsigned integer vector to the 10-10-10-2-bit unsigned integer representation found in the OpenGL Specification, and then packing these four values into a 32-bit unsigned integer. </p>
+<p>The first vector component specifies the 10 least-significant bits of the result; the forth component specifies the 2 most-significant bits.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00171.html" title="This extension provides a set of function to convert vertors to packed formats. ">GLM_GTC_packing</a> </dd>
+<dd>
+uint32 packI3x10_1x2(ivec4 const & v) </dd>
+<dd>
+uint32 packSnorm3x10_1x2(vec4 const & v) </dd>
+<dd>
+uint32 packUnorm3x10_1x2(vec4 const & v) </dd>
+<dd>
+ivec4 unpackU3x10_1x2(uint32 const & p) </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gacb9a3df68172c1193c9d701a3fa4d88b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<uintType, P> glm::packUnorm </td>
+ <td>(</td>
+ <td class="paramtype">vecType< floatType, P > const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Convert each component of the normalized floating-point vector into unsigned integer values. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00171.html" title="This extension provides a set of function to convert vertors to packed formats. ">GLM_GTC_packing</a> </dd>
+<dd>
+vecType<floatType, P> unpackUnorm(vecType<intType, P> const & p); </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga9f82737bf2a44bedff1d286b76837886"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL uint16 glm::packUnorm1x16 </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>First, converts the normalized floating-point value v into a 16-bit integer value. </p>
+<p>Then, the results are packed into the returned 16-bit unsigned integer.</p>
+<p>The conversion for component c of v to fixed point is done as follows: packUnorm1x16: round(clamp(c, 0, +1) * 65535.0)</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00171.html" title="This extension provides a set of function to convert vertors to packed formats. ">GLM_GTC_packing</a> </dd>
+<dd>
+uint16 packSnorm1x16(float const & v) </dd>
+<dd>
+uint64 packSnorm4x16(vec4 const & v) </dd>
+<dd>
+<a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packUnorm4x8.xml">GLSL packUnorm4x8 man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga768e0337dd6246773f14aa0a421fe9a8"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL uint16 glm::packUnorm1x5_1x6_1x5 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00157.html#gaa8ea2429bb3cb41a715258a447f39897">vec3</a> const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Convert each component of the normalized floating-point vector into unsigned integer values. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00171.html" title="This extension provides a set of function to convert vertors to packed formats. ">GLM_GTC_packing</a> </dd>
+<dd>
+vec3 unpackUnorm1x5_1x6_1x5(uint16 p) </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga4b2fa60df3460403817d28b082ee0736"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL uint8 glm::packUnorm1x8 </td>
+ <td>(</td>
+ <td class="paramtype">float </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>First, converts the normalized floating-point value v into a 8-bit integer value. </p>
+<p>Then, the results are packed into the returned 8-bit unsigned integer.</p>
+<p>The conversion for component c of v to fixed point is done as follows: packUnorm1x8: round(clamp(c, 0, +1) * 255.0)</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00171.html" title="This extension provides a set of function to convert vertors to packed formats. ">GLM_GTC_packing</a> </dd>
+<dd>
+uint16 packUnorm2x8(vec2 const & v) </dd>
+<dd>
+uint32 packUnorm4x8(vec4 const & v) </dd>
+<dd>
+<a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packUnorm4x8.xml">GLSL packUnorm4x8 man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga7f9abdb50f9be1aa1c14912504a0d98d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL uint8 glm::packUnorm2x3_1x2 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00157.html#gaa8ea2429bb3cb41a715258a447f39897">vec3</a> const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Convert each component of the normalized floating-point vector into unsigned integer values. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00171.html" title="This extension provides a set of function to convert vertors to packed formats. ">GLM_GTC_packing</a> </dd>
+<dd>
+vec3 unpackUnorm2x3_1x2(uint8 p) </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gab6bbd5be3b8e6db538ecb33a7844481c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL uint8 glm::packUnorm2x4 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00157.html#ga09d0200e8ff86391d8804b4fefd5f1da">vec2</a> const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Convert each component of the normalized floating-point vector into unsigned integer values. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00171.html" title="This extension provides a set of function to convert vertors to packed formats. ">GLM_GTC_packing</a> </dd>
+<dd>
+vec2 unpackUnorm2x4(uint8 p) </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga9a666b1c688ab54100061ed06526de6e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL uint16 glm::packUnorm2x8 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00157.html#ga09d0200e8ff86391d8804b4fefd5f1da">vec2</a> const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>First, converts each component of the normalized floating-point value v into 8-bit integer values. </p>
+<p>Then, the results are packed into the returned 16-bit unsigned integer.</p>
+<p>The conversion for component c of v to fixed point is done as follows: packUnorm2x8: round(clamp(c, 0, +1) * 255.0)</p>
+<p>The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00171.html" title="This extension provides a set of function to convert vertors to packed formats. ">GLM_GTC_packing</a> </dd>
+<dd>
+uint8 packUnorm1x8(float const & v) </dd>
+<dd>
+uint32 packUnorm4x8(vec4 const & v) </dd>
+<dd>
+<a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packUnorm4x8.xml">GLSL packUnorm4x8 man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga8a1ee625d2707c60530fb3fca2980b19"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL uint32 glm::packUnorm3x10_1x2 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00157.html#gafbab23070ca47932487d25332adc7d7c">vec4</a> const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>First, converts the first three components of the normalized floating-point value v into 10-bit unsigned integer values. </p>
+<p>Then, converts the forth component of the normalized floating-point value v into 2-bit signed uninteger values. Then, the results are packed into the returned 32-bit unsigned integer.</p>
+<p>The conversion for component c of v to fixed point is done as follows: packUnorm3x10_1x2(xyz): round(clamp(c, 0, +1) * 1023.0) packUnorm3x10_1x2(w): round(clamp(c, 0, +1) * 3.0)</p>
+<p>The first vector component specifies the 10 least-significant bits of the result; the forth component specifies the 2 most-significant bits.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00171.html" title="This extension provides a set of function to convert vertors to packed formats. ">GLM_GTC_packing</a> </dd>
+<dd>
+vec4 unpackUnorm3x10_1x2(uint32 const & p) </dd>
+<dd>
+uint32 packUnorm3x10_1x2(vec4 const & v) </dd>
+<dd>
+uint32 packU3x10_1x2(uvec4 const & v) </dd>
+<dd>
+uint32 packI3x10_1x2(ivec4 const & v) </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaec4112086d7fb133bea104a7c237de52"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL uint16 glm::packUnorm3x5_1x1 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00157.html#gafbab23070ca47932487d25332adc7d7c">vec4</a> const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Convert each component of the normalized floating-point vector into unsigned integer values. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00171.html" title="This extension provides a set of function to convert vertors to packed formats. ">GLM_GTC_packing</a> </dd>
+<dd>
+vec4 unpackUnorm3x5_1x1(uint16 p) </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga1f63c264e7ab63264e2b2a99fd393897"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL uint64 glm::packUnorm4x16 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00157.html#gafbab23070ca47932487d25332adc7d7c">vec4</a> const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>First, converts each component of the normalized floating-point value v into 16-bit integer values. </p>
+<p>Then, the results are packed into the returned 64-bit unsigned integer.</p>
+<p>The conversion for component c of v to fixed point is done as follows: packUnorm4x16: round(clamp(c, 0, +1) * 65535.0)</p>
+<p>The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00171.html" title="This extension provides a set of function to convert vertors to packed formats. ">GLM_GTC_packing</a> </dd>
+<dd>
+uint16 packUnorm1x16(float const & v) </dd>
+<dd>
+uint32 packUnorm2x16(vec2 const & v) </dd>
+<dd>
+<a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packUnorm4x8.xml">GLSL packUnorm4x8 man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gad3e7e3ce521513584a53aedc5f9765c1"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL uint16 glm::packUnorm4x4 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00157.html#gafbab23070ca47932487d25332adc7d7c">vec4</a> const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Convert each component of the normalized floating-point vector into unsigned integer values. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00171.html" title="This extension provides a set of function to convert vertors to packed formats. ">GLM_GTC_packing</a> </dd>
+<dd>
+vec4 unpackUnorm4x4(uint16 p) </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga2b1fd1e854705b1345e98409e0a25e50"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vec3 glm::unpackF2x11_1x10 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga5fa3ddcab56c789bc272ff5651faa12d">uint32</a> </td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point values and one 10-bit signless floating-point value . </p>
+<p>Then, each component is converted to a normalized floating-point value to generate the returned three-component vector.</p>
+<p>The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00171.html" title="This extension provides a set of function to convert vertors to packed formats. ">GLM_GTC_packing</a> </dd>
+<dd>
+uint32 packF2x11_1x10(vec3 const & v) </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gab9e60ebe3ad3eeced6a9ec6eb876d74e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vec3 glm::unpackF3x9_E1x5 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga5fa3ddcab56c789bc272ff5651faa12d">uint32</a> </td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point values and one 10-bit signless floating-point value . </p>
+<p>Then, each component is converted to a normalized floating-point value to generate the returned three-component vector.</p>
+<p>The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00171.html" title="This extension provides a set of function to convert vertors to packed formats. ">GLM_GTC_packing</a> </dd>
+<dd>
+uint32 packF3x9_E1x5(vec3 const & v) </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaf3f9387834f8d8beadfe723c1dd247a7"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<float, P> glm::unpackHalf </td>
+ <td>(</td>
+ <td class="paramtype">vecType< <a class="el" href="a00177.html#ga13471cbbe74e4303a57f3743d007b74d">uint16</a>, P > const & </td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns a floating-point vector with components obtained by reinterpreting an integer vector as 16-bit floating-point numbers and converting them to 32-bit floating-point values. </p>
+<p>The first component of the vector is obtained from the 16 least-significant bits of v; the forth component is obtained from the 16 most-significant bits of v.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00171.html" title="This extension provides a set of function to convert vertors to packed formats. ">GLM_GTC_packing</a> </dd>
+<dd>
+vecType<uint16, P> packHalf(vecType<float, P> const & v) </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gac37dedaba24b00adb4ec6e8f92c19dbf"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL float glm::unpackHalf1x16 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga13471cbbe74e4303a57f3743d007b74d">uint16</a> </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns a floating-point scalar with components obtained by unpacking a 16-bit unsigned integer into a 16-bit value, interpreted as a 16-bit floating-point number according to the OpenGL Specification, and converting it to 32-bit floating-point values. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00171.html" title="This extension provides a set of function to convert vertors to packed formats. ">GLM_GTC_packing</a> </dd>
+<dd>
+vec2 unpackHalf2x16(uint32 const & v) </dd>
+<dd>
+vec4 unpackHalf4x16(uint64 const & v) </dd>
+<dd>
+<a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackHalf2x16.xml">GLSL unpackHalf2x16 man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga57dfc41b2eb20b0ac00efae7d9c49dcd"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vec4 glm::unpackHalf4x16 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gab630f76c26b50298187f7889104d4b9c">uint64</a> </td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns a four-component floating-point vector with components obtained by unpacking a 64-bit unsigned integer into four 16-bit values, interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification, and converting them to 32-bit floating-point values. </p>
+<p>The first component of the vector is obtained from the 16 least-significant bits of v; the forth component is obtained from the 16 most-significant bits of v.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00171.html" title="This extension provides a set of function to convert vertors to packed formats. ">GLM_GTC_packing</a> </dd>
+<dd>
+float unpackHalf1x16(uint16 const & v) </dd>
+<dd>
+vec2 unpackHalf2x16(uint32 const & v) </dd>
+<dd>
+<a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackHalf2x16.xml">GLSL unpackHalf2x16 man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga9a05330e5490be0908d3b117d82aff56"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL ivec4 glm::unpackI3x10_1x2 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga5fa3ddcab56c789bc272ff5651faa12d">uint32</a> </td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit signed integers. </p>
+<p>The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00171.html" title="This extension provides a set of function to convert vertors to packed formats. ">GLM_GTC_packing</a> </dd>
+<dd>
+uint32 packU3x10_1x2(uvec4 const & v) </dd>
+<dd>
+vec4 unpackSnorm3x10_1x2(uint32 const & p); </dd>
+<dd>
+uvec4 unpackI3x10_1x2(uint32 const & p); </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga63eeec0d416e48462f341f4a7a9a45fe"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<floatType, P> glm::unpackSnorm </td>
+ <td>(</td>
+ <td class="paramtype">vecType< intType, P > const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Convert each signed integer components of a vector to normalized floating-point values. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00171.html" title="This extension provides a set of function to convert vertors to packed formats. ">GLM_GTC_packing</a> </dd>
+<dd>
+vecType<intType, P> packSnorm(vecType<floatType, P> const & v) </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga96dd15002370627a443c835ab03a766c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL float glm::unpackSnorm1x16 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga13471cbbe74e4303a57f3743d007b74d">uint16</a> </td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>First, unpacks a single 16-bit unsigned integer p into a single 16-bit signed integers. </p>
+<p>Then, each component is converted to a normalized floating-point value to generate the returned scalar.</p>
+<p>The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm1x16: clamp(f / 32767.0, -1, +1)</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00171.html" title="This extension provides a set of function to convert vertors to packed formats. ">GLM_GTC_packing</a> </dd>
+<dd>
+vec2 unpackSnorm2x16(uint32 p) </dd>
+<dd>
+vec4 unpackSnorm4x16(uint64 p) </dd>
+<dd>
+<a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackSnorm1x16.xml">GLSL unpackSnorm4x8 man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga4851ff86678aa1c7ace9d67846894285"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL float glm::unpackSnorm1x8 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga36475e31b1992cfde54c1a6f5a148865">uint8</a> </td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>First, unpacks a single 8-bit unsigned integer p into a single 8-bit signed integers. </p>
+<p>Then, the value is converted to a normalized floating-point value to generate the returned scalar.</p>
+<p>The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm1x8: clamp(f / 127.0, -1, +1)</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00171.html" title="This extension provides a set of function to convert vertors to packed formats. ">GLM_GTC_packing</a> </dd>
+<dd>
+vec2 unpackSnorm2x8(uint16 p) </dd>
+<dd>
+vec4 unpackSnorm4x8(uint32 p) </dd>
+<dd>
+<a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackSnorm4x8.xml">GLSL unpackSnorm4x8 man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga8b128e89be449fc71336968a66bf6e1a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vec2 glm::unpackSnorm2x8 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga13471cbbe74e4303a57f3743d007b74d">uint16</a> </td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit signed integers. </p>
+<p>Then, each component is converted to a normalized floating-point value to generate the returned two-component vector.</p>
+<p>The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm2x8: clamp(f / 127.0, -1, +1)</p>
+<p>The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00171.html" title="This extension provides a set of function to convert vertors to packed formats. ">GLM_GTC_packing</a> </dd>
+<dd>
+float unpackSnorm1x8(uint8 p) </dd>
+<dd>
+vec4 unpackSnorm4x8(uint32 p) </dd>
+<dd>
+<a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackSnorm4x8.xml">GLSL unpackSnorm4x8 man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga7a4fbf79be9740e3c57737bc2af05e5b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vec4 glm::unpackSnorm3x10_1x2 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga5fa3ddcab56c789bc272ff5651faa12d">uint32</a> </td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers. </p>
+<p>Then, each component is converted to a normalized floating-point value to generate the returned four-component vector.</p>
+<p>The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm3x10_1x2(xyz): clamp(f / 511.0, -1, +1) unpackSnorm3x10_1x2(w): clamp(f / 511.0, -1, +1)</p>
+<p>The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00171.html" title="This extension provides a set of function to convert vertors to packed formats. ">GLM_GTC_packing</a> </dd>
+<dd>
+uint32 packSnorm3x10_1x2(vec4 const & v) </dd>
+<dd>
+vec4 unpackUnorm3x10_1x2(uint32 const & p)) </dd>
+<dd>
+uvec4 unpackI3x10_1x2(uint32 const & p) </dd>
+<dd>
+uvec4 unpackU3x10_1x2(uint32 const & p) </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaaddf9c353528fe896106f7181219c7f4"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vec4 glm::unpackSnorm4x16 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gab630f76c26b50298187f7889104d4b9c">uint64</a> </td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>First, unpacks a single 64-bit unsigned integer p into four 16-bit signed integers. </p>
+<p>Then, each component is converted to a normalized floating-point value to generate the returned four-component vector.</p>
+<p>The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm4x16: clamp(f / 32767.0, -1, +1)</p>
+<p>The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00171.html" title="This extension provides a set of function to convert vertors to packed formats. ">GLM_GTC_packing</a> </dd>
+<dd>
+float unpackSnorm1x16(uint16 p) </dd>
+<dd>
+vec2 unpackSnorm2x16(uint32 p) </dd>
+<dd>
+<a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackSnorm2x16.xml">GLSL unpackSnorm4x8 man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga48df3042a7d079767f5891a1bfd8a60a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL uvec4 glm::unpackU3x10_1x2 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga5fa3ddcab56c789bc272ff5651faa12d">uint32</a> </td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit unsigned integers. </p>
+<p>The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00171.html" title="This extension provides a set of function to convert vertors to packed formats. ">GLM_GTC_packing</a> </dd>
+<dd>
+uint32 packU3x10_1x2(uvec4 const & v) </dd>
+<dd>
+vec4 unpackSnorm3x10_1x2(uint32 const & p); </dd>
+<dd>
+uvec4 unpackI3x10_1x2(uint32 const & p); </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gad3d7e1ec7fcfb7ae341658e2ce1c3bd9"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<floatType, P> glm::unpackUnorm </td>
+ <td>(</td>
+ <td class="paramtype">vecType< uintType, P > const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Convert each unsigned integer components of a vector to normalized floating-point values. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00171.html" title="This extension provides a set of function to convert vertors to packed formats. ">GLM_GTC_packing</a> </dd>
+<dd>
+vecType<intType, P> packUnorm(vecType<floatType, P> const & v) </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga83d34160a5cb7bcb5339823210fc7501"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL float glm::unpackUnorm1x16 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga13471cbbe74e4303a57f3743d007b74d">uint16</a> </td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>First, unpacks a single 16-bit unsigned integer p into a of 16-bit unsigned integers. </p>
+<p>Then, the value is converted to a normalized floating-point value to generate the returned scalar.</p>
+<p>The conversion for unpacked fixed-point value f to floating point is done as follows: unpackUnorm1x16: f / 65535.0</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00171.html" title="This extension provides a set of function to convert vertors to packed formats. ">GLM_GTC_packing</a> </dd>
+<dd>
+vec2 unpackUnorm2x16(uint32 p) </dd>
+<dd>
+vec4 unpackUnorm4x16(uint64 p) </dd>
+<dd>
+<a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackUnorm2x16.xml">GLSL unpackUnorm2x16 man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gab3bc08ecfc0f3339be93fb2b3b56d88a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vec3 glm::unpackUnorm1x5_1x6_1x5 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga13471cbbe74e4303a57f3743d007b74d">uint16</a> </td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Convert each unsigned integer components of a vector to normalized floating-point values. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00171.html" title="This extension provides a set of function to convert vertors to packed formats. ">GLM_GTC_packing</a> </dd>
+<dd>
+uint16 packUnorm1x5_1x6_1x5(vec3 const & v) </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga1319207e30874fb4931a9ee913983ee1"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL float glm::unpackUnorm1x8 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga36475e31b1992cfde54c1a6f5a148865">uint8</a> </td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Convert a single 8-bit integer to a normalized floating-point value. </p>
+<p>The conversion for unpacked fixed-point value f to floating point is done as follows: unpackUnorm4x8: f / 255.0</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00171.html" title="This extension provides a set of function to convert vertors to packed formats. ">GLM_GTC_packing</a> </dd>
+<dd>
+vec2 unpackUnorm2x8(uint16 p) </dd>
+<dd>
+vec4 unpackUnorm4x8(uint32 p) </dd>
+<dd>
+<a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackUnorm4x8.xml">GLSL unpackUnorm4x8 man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga6abd5a9014df3b5ce4059008d2491260"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vec3 glm::unpackUnorm2x3_1x2 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga36475e31b1992cfde54c1a6f5a148865">uint8</a> </td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Convert each unsigned integer components of a vector to normalized floating-point values. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00171.html" title="This extension provides a set of function to convert vertors to packed formats. ">GLM_GTC_packing</a> </dd>
+<dd>
+uint8 packUnorm2x3_1x2(vec3 const & v) </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga2e50476132fe5f27f08e273d9c70d85b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vec2 glm::unpackUnorm2x4 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga36475e31b1992cfde54c1a6f5a148865">uint8</a> </td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Convert each unsigned integer components of a vector to normalized floating-point values. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00171.html" title="This extension provides a set of function to convert vertors to packed formats. ">GLM_GTC_packing</a> </dd>
+<dd>
+uint8 packUnorm2x4(vec2 const & v) </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga637cbe3913dd95c6e7b4c99c61bd611f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vec2 glm::unpackUnorm2x8 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga13471cbbe74e4303a57f3743d007b74d">uint16</a> </td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit unsigned integers. </p>
+<p>Then, each component is converted to a normalized floating-point value to generate the returned two-component vector.</p>
+<p>The conversion for unpacked fixed-point value f to floating point is done as follows: unpackUnorm4x8: f / 255.0</p>
+<p>The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00171.html" title="This extension provides a set of function to convert vertors to packed formats. ">GLM_GTC_packing</a> </dd>
+<dd>
+float unpackUnorm1x8(uint8 v) </dd>
+<dd>
+vec4 unpackUnorm4x8(uint32 p) </dd>
+<dd>
+<a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackUnorm4x8.xml">GLSL unpackUnorm4x8 man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga5156d3060355fe332865da2c7f78815f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vec4 glm::unpackUnorm3x10_1x2 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga5fa3ddcab56c789bc272ff5651faa12d">uint32</a> </td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers. </p>
+<p>Then, each component is converted to a normalized floating-point value to generate the returned four-component vector.</p>
+<p>The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm3x10_1x2(xyz): clamp(f / 1023.0, 0, +1) unpackSnorm3x10_1x2(w): clamp(f / 3.0, 0, +1)</p>
+<p>The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00171.html" title="This extension provides a set of function to convert vertors to packed formats. ">GLM_GTC_packing</a> </dd>
+<dd>
+uint32 packSnorm3x10_1x2(vec4 const & v) </dd>
+<dd>
+vec4 unpackInorm3x10_1x2(uint32 const & p)) </dd>
+<dd>
+uvec4 unpackI3x10_1x2(uint32 const & p) </dd>
+<dd>
+uvec4 unpackU3x10_1x2(uint32 const & p) </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga5ff95ff5bc16f396432ab67243dbae4d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vec4 glm::unpackUnorm3x5_1x1 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga13471cbbe74e4303a57f3743d007b74d">uint16</a> </td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Convert each unsigned integer components of a vector to normalized floating-point values. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00171.html" title="This extension provides a set of function to convert vertors to packed formats. ">GLM_GTC_packing</a> </dd>
+<dd>
+uint16 packUnorm3x5_1x1(vec4 const & v) </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga2ae149c5d2473ac1e5f347bb654a242d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vec4 glm::unpackUnorm4x16 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gab630f76c26b50298187f7889104d4b9c">uint64</a> </td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>First, unpacks a single 64-bit unsigned integer p into four 16-bit unsigned integers. </p>
+<p>Then, each component is converted to a normalized floating-point value to generate the returned four-component vector.</p>
+<p>The conversion for unpacked fixed-point value f to floating point is done as follows: unpackUnormx4x16: f / 65535.0</p>
+<p>The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00171.html" title="This extension provides a set of function to convert vertors to packed formats. ">GLM_GTC_packing</a> </dd>
+<dd>
+float unpackUnorm1x16(uint16 p) </dd>
+<dd>
+vec2 unpackUnorm2x16(uint32 p) </dd>
+<dd>
+<a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackUnorm2x16.xml">GLSL unpackUnorm2x16 man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gac58ee89d0e224bb6df5e8bbb18843a2d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vec4 glm::unpackUnorm4x4 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga13471cbbe74e4303a57f3743d007b74d">uint16</a> </td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Convert each unsigned integer components of a vector to normalized floating-point values. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00171.html" title="This extension provides a set of function to convert vertors to packed formats. ">GLM_GTC_packing</a> </dd>
+<dd>
+uint16 packUnorm4x4(vec4 const & v) </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00172.html b/src/third_party/glm/doc/api/a00172.html
new file mode 100644
index 0000000..892634a
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00172.html
@@ -0,0 +1,939 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTC_quaternion</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTC_quaternion<div class="ingroups"><a class="el" href="a00154.html">GTC Extensions (Stable)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gad4a4448baedb198b2b1e7880d2544dc9"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gad4a4448baedb198b2b1e7880d2544dc9"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">angle</a> (tquat< T, P > const &x)</td></tr>
+<tr class="separator:gad4a4448baedb198b2b1e7880d2544dc9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga37ae19405f1ccf766f27e4fcd035d859"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga37ae19405f1ccf766f27e4fcd035d859"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#ga37ae19405f1ccf766f27e4fcd035d859">angleAxis</a> (T const &angle, tvec3< T, P > const &axis)</td></tr>
+<tr class="separator:ga37ae19405f1ccf766f27e4fcd035d859"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0b3e87a13b2708154b72259e50789a19"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga0b3e87a13b2708154b72259e50789a19"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#ga0b3e87a13b2708154b72259e50789a19">axis</a> (tquat< T, P > const &x)</td></tr>
+<tr class="separator:ga0b3e87a13b2708154b72259e50789a19"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab1ace864fbf189ffa368950001808a3c"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gab1ace864fbf189ffa368950001808a3c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#gab1ace864fbf189ffa368950001808a3c">conjugate</a> (tquat< T, P > const &q)</td></tr>
+<tr class="separator:gab1ace864fbf189ffa368950001808a3c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac54dfc83de465a2d03e90d342242ab3d"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class quatType> </td></tr>
+<tr class="memitem:gac54dfc83de465a2d03e90d342242ab3d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#gac54dfc83de465a2d03e90d342242ab3d">dot</a> (quatType< T, P > const &x, quatType< T, P > const &y)</td></tr>
+<tr class="separator:gac54dfc83de465a2d03e90d342242ab3d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac187115710365e0b2902220b9611e7b6"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gac187115710365e0b2902220b9611e7b6"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec4< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#gac187115710365e0b2902220b9611e7b6">equal</a> (tquat< T, P > const &x, tquat< T, P > const &y)</td></tr>
+<tr class="separator:gac187115710365e0b2902220b9611e7b6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gadb92ec1c1b0dd6b024176a73fbef3e64"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gadb92ec1c1b0dd6b024176a73fbef3e64"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#gadb92ec1c1b0dd6b024176a73fbef3e64">eulerAngles</a> (tquat< T, P > const &x)</td></tr>
+<tr class="separator:gadb92ec1c1b0dd6b024176a73fbef3e64"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga09d21a588ae425ac7517ea65cc59a5ae"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga09d21a588ae425ac7517ea65cc59a5ae"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec4< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#ga09d21a588ae425ac7517ea65cc59a5ae">greaterThan</a> (tquat< T, P > const &x, tquat< T, P > const &y)</td></tr>
+<tr class="separator:ga09d21a588ae425ac7517ea65cc59a5ae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0906a221a2037519fcf316ea5c1e3b3e"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga0906a221a2037519fcf316ea5c1e3b3e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec4< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#ga0906a221a2037519fcf316ea5c1e3b3e">greaterThanEqual</a> (tquat< T, P > const &x, tquat< T, P > const &y)</td></tr>
+<tr class="separator:ga0906a221a2037519fcf316ea5c1e3b3e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5f47300c024c2d809944e6ac661d6d14"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga5f47300c024c2d809944e6ac661d6d14"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#ga5f47300c024c2d809944e6ac661d6d14">inverse</a> (tquat< T, P > const &q)</td></tr>
+<tr class="separator:ga5f47300c024c2d809944e6ac661d6d14"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0a850f06736d25887536d0da88e63c70"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga0a850f06736d25887536d0da88e63c70"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec4< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#ga0a850f06736d25887536d0da88e63c70">isinf</a> (tquat< T, P > const &x)</td></tr>
+<tr class="separator:ga0a850f06736d25887536d0da88e63c70"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad2fc52dd4ba5ff79cc56b3e0f9c092ed"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gad2fc52dd4ba5ff79cc56b3e0f9c092ed"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec4< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#gad2fc52dd4ba5ff79cc56b3e0f9c092ed">isnan</a> (tquat< T, P > const &x)</td></tr>
+<tr class="separator:gad2fc52dd4ba5ff79cc56b3e0f9c092ed"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac682181783027544c8d251b4d3a60cf8"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gac682181783027544c8d251b4d3a60cf8"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#gac682181783027544c8d251b4d3a60cf8">length</a> (tquat< T, P > const &q)</td></tr>
+<tr class="separator:gac682181783027544c8d251b4d3a60cf8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5692804fa4db9e762a1c19b607e54435"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga5692804fa4db9e762a1c19b607e54435"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#ga5692804fa4db9e762a1c19b607e54435">lerp</a> (tquat< T, P > const &x, tquat< T, P > const &y, T a)</td></tr>
+<tr class="separator:ga5692804fa4db9e762a1c19b607e54435"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga91a40d16a3b5bb47d71ac1a3fb688ffa"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga91a40d16a3b5bb47d71ac1a3fb688ffa"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec4< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#ga91a40d16a3b5bb47d71ac1a3fb688ffa">lessThan</a> (tquat< T, P > const &x, tquat< T, P > const &y)</td></tr>
+<tr class="separator:ga91a40d16a3b5bb47d71ac1a3fb688ffa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7c81996ed2724f26fe76faf352c76294"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga7c81996ed2724f26fe76faf352c76294"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec4< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#ga7c81996ed2724f26fe76faf352c76294">lessThanEqual</a> (tquat< T, P > const &x, tquat< T, P > const &y)</td></tr>
+<tr class="separator:ga7c81996ed2724f26fe76faf352c76294"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae04c39422eb4e450ec8c4f45a1057b40"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gae04c39422eb4e450ec8c4f45a1057b40"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat3x3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#gae04c39422eb4e450ec8c4f45a1057b40">mat3_cast</a> (tquat< T, P > const &x)</td></tr>
+<tr class="separator:gae04c39422eb4e450ec8c4f45a1057b40"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga14bb2ddf028c91542763eb6f2bba47ef"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga14bb2ddf028c91542763eb6f2bba47ef"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#ga14bb2ddf028c91542763eb6f2bba47ef">mat4_cast</a> (tquat< T, P > const &x)</td></tr>
+<tr class="separator:ga14bb2ddf028c91542763eb6f2bba47ef"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga31cc82178742c36450f5662bd4fb30b0"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga31cc82178742c36450f5662bd4fb30b0"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#ga31cc82178742c36450f5662bd4fb30b0">mix</a> (tquat< T, P > const &x, tquat< T, P > const &y, T a)</td></tr>
+<tr class="separator:ga31cc82178742c36450f5662bd4fb30b0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga35b6bcb22ac6d1e4a85440f5b69bdf86"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga35b6bcb22ac6d1e4a85440f5b69bdf86"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#ga35b6bcb22ac6d1e4a85440f5b69bdf86">normalize</a> (tquat< T, P > const &q)</td></tr>
+<tr class="separator:ga35b6bcb22ac6d1e4a85440f5b69bdf86"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga484c4633f7c05d8e29ee8b452350f539"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga484c4633f7c05d8e29ee8b452350f539"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec4< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#ga484c4633f7c05d8e29ee8b452350f539">notEqual</a> (tquat< T, P > const &x, tquat< T, P > const &y)</td></tr>
+<tr class="separator:ga484c4633f7c05d8e29ee8b452350f539"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2c08b93a4261c10748fd4d2104346f17"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga2c08b93a4261c10748fd4d2104346f17"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#ga2c08b93a4261c10748fd4d2104346f17">pitch</a> (tquat< T, P > const &x)</td></tr>
+<tr class="separator:ga2c08b93a4261c10748fd4d2104346f17"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga950f8acff3e33bbda77895a3dcb7e5ce"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga950f8acff3e33bbda77895a3dcb7e5ce"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#ga950f8acff3e33bbda77895a3dcb7e5ce">quat_cast</a> (tmat3x3< T, P > const &x)</td></tr>
+<tr class="separator:ga950f8acff3e33bbda77895a3dcb7e5ce"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3e4615e9884dd0f41f5617b9848a5d9c"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga3e4615e9884dd0f41f5617b9848a5d9c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#ga3e4615e9884dd0f41f5617b9848a5d9c">quat_cast</a> (tmat4x4< T, P > const &x)</td></tr>
+<tr class="separator:ga3e4615e9884dd0f41f5617b9848a5d9c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4fd705376c6c1fd667be0055a0ea58ec"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga4fd705376c6c1fd667be0055a0ea58ec"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#ga4fd705376c6c1fd667be0055a0ea58ec">roll</a> (tquat< T, P > const &x)</td></tr>
+<tr class="separator:ga4fd705376c6c1fd667be0055a0ea58ec"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa8f42979c921e450ff2812fb43c25702"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gaa8f42979c921e450ff2812fb43c25702"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#gaa8f42979c921e450ff2812fb43c25702">rotate</a> (tquat< T, P > const &q, T const &angle, tvec3< T, P > const &axis)</td></tr>
+<tr class="separator:gaa8f42979c921e450ff2812fb43c25702"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga22b438c7252f3fa5b773c9882471652a"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga22b438c7252f3fa5b773c9882471652a"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#ga22b438c7252f3fa5b773c9882471652a">slerp</a> (tquat< T, P > const &x, tquat< T, P > const &y, T a)</td></tr>
+<tr class="separator:ga22b438c7252f3fa5b773c9882471652a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga724a5df282b70cec0a6cb0d6dcddb6d6"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga724a5df282b70cec0a6cb0d6dcddb6d6"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00172.html#ga724a5df282b70cec0a6cb0d6dcddb6d6">yaw</a> (tquat< T, P > const &x)</td></tr>
+<tr class="separator:ga724a5df282b70cec0a6cb0d6dcddb6d6"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Defines a templated quaternion type and several quaternion operations. </p>
+<p><<a class="el" href="a00087.html" title="GLM_GTC_quaternion ">glm/gtc/quaternion.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="gad4a4448baedb198b2b1e7880d2544dc9"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL T glm::angle </td>
+ <td>(</td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the quaternion rotation angle. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00172.html" title="Defines a templated quaternion type and several quaternion operations. ">GLM_GTC_quaternion</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga37ae19405f1ccf766f27e4fcd035d859"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tquat<T, P> glm::angleAxis </td>
+ <td>(</td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>angle</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>axis</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a quaternion from an angle and a normalized axis. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">angle</td><td>Angle expressed in radians. </td></tr>
+ <tr><td class="paramname">axis</td><td>Axis of the quaternion, must be normalized.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00172.html" title="Defines a templated quaternion type and several quaternion operations. ">GLM_GTC_quaternion</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga0b3e87a13b2708154b72259e50789a19"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tvec3<T, P> glm::axis </td>
+ <td>(</td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the q rotation axis. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00172.html" title="Defines a templated quaternion type and several quaternion operations. ">GLM_GTC_quaternion</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gab1ace864fbf189ffa368950001808a3c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tquat<T, P> glm::conjugate </td>
+ <td>(</td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>q</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the q conjugate. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00172.html" title="Defines a templated quaternion type and several quaternion operations. ">GLM_GTC_quaternion</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gac54dfc83de465a2d03e90d342242ab3d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL T glm::dot </td>
+ <td>(</td>
+ <td class="paramtype">quatType< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">quatType< T, P > const & </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns dot product of q1 and q2, i.e., q1[0] * q2[0] + q1[1] * q2[1] + ... </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00172.html" title="Defines a templated quaternion type and several quaternion operations. ">GLM_GTC_quaternion</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gac187115710365e0b2902220b9611e7b6"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tvec4<bool, P> glm::equal </td>
+ <td>(</td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the component-wise comparison of result x == y. </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">quatType</td><td>Floating-point quaternion types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00172.html" title="Defines a templated quaternion type and several quaternion operations. ">GLM_GTC_quaternion</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gadb92ec1c1b0dd6b024176a73fbef3e64"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tvec3<T, P> glm::eulerAngles </td>
+ <td>(</td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns euler angles, pitch as x, yaw as y, roll as z. </p>
+<p>The result is expressed in radians if GLM_FORCE_RADIANS is defined or degrees otherwise.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00172.html" title="Defines a templated quaternion type and several quaternion operations. ">GLM_GTC_quaternion</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga09d21a588ae425ac7517ea65cc59a5ae"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tvec4<bool, P> glm::greaterThan </td>
+ <td>(</td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the component-wise comparison of result x > y. </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">quatType</td><td>Floating-point quaternion types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00172.html" title="Defines a templated quaternion type and several quaternion operations. ">GLM_GTC_quaternion</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga0906a221a2037519fcf316ea5c1e3b3e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tvec4<bool, P> glm::greaterThanEqual </td>
+ <td>(</td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the component-wise comparison of result x >= y. </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">quatType</td><td>Floating-point quaternion types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00172.html" title="Defines a templated quaternion type and several quaternion operations. ">GLM_GTC_quaternion</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga5f47300c024c2d809944e6ac661d6d14"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tquat<T, P> glm::inverse </td>
+ <td>(</td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>q</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the q inverse. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00172.html" title="Defines a templated quaternion type and several quaternion operations. ">GLM_GTC_quaternion</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga0a850f06736d25887536d0da88e63c70"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tvec4<bool, P> glm::isinf </td>
+ <td>(</td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns true if x holds a positive infinity or negative infinity representation in the underlying implementation's set of floating point representations. </p>
+<p>Returns false otherwise, including for implementations with no infinity representations.</p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="gad2fc52dd4ba5ff79cc56b3e0f9c092ed"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tvec4<bool, P> glm::isnan </td>
+ <td>(</td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns true if x holds a NaN (not a number) representation in the underlying implementation's set of floating point representations. </p>
+<p>Returns false otherwise, including for implementations with no NaN representations.</p>
+<p>/!\ When using compiler fast math, this function may fail.</p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="gac682181783027544c8d251b4d3a60cf8"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL T glm::length </td>
+ <td>(</td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>q</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the length of the quaternion. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00172.html" title="Defines a templated quaternion type and several quaternion operations. ">GLM_GTC_quaternion</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga5692804fa4db9e762a1c19b607e54435"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tquat<T, P> glm::lerp </td>
+ <td>(</td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>a</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Linear interpolation of two quaternions. </p>
+<p>The interpolation is oriented.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">x</td><td>A quaternion </td></tr>
+ <tr><td class="paramname">y</td><td>A quaternion </td></tr>
+ <tr><td class="paramname">a</td><td>Interpolation factor. The interpolation is defined in the range [0, 1]. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">T</td><td>Value type used to build the quaternion. Supported: half, float or double. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00172.html" title="Defines a templated quaternion type and several quaternion operations. ">GLM_GTC_quaternion</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga91a40d16a3b5bb47d71ac1a3fb688ffa"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tvec4<bool, P> glm::lessThan </td>
+ <td>(</td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the component-wise comparison result of x < y. </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">quatType</td><td>Floating-point quaternion types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00172.html" title="Defines a templated quaternion type and several quaternion operations. ">GLM_GTC_quaternion</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga7c81996ed2724f26fe76faf352c76294"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tvec4<bool, P> glm::lessThanEqual </td>
+ <td>(</td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the component-wise comparison of result x <= y. </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">quatType</td><td>Floating-point quaternion types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00172.html" title="Defines a templated quaternion type and several quaternion operations. ">GLM_GTC_quaternion</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gae04c39422eb4e450ec8c4f45a1057b40"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat3x3<T, P> glm::mat3_cast </td>
+ <td>(</td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Converts a quaternion to a 3 * 3 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00172.html" title="Defines a templated quaternion type and several quaternion operations. ">GLM_GTC_quaternion</a> </dd></dl>
+
+<p>Referenced by <a class="el" href="a00088_source.html#l00124">glm::toMat3()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga14bb2ddf028c91542763eb6f2bba47ef"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, P> glm::mat4_cast </td>
+ <td>(</td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Converts a quaternion to a 4 * 4 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00172.html" title="Defines a templated quaternion type and several quaternion operations. ">GLM_GTC_quaternion</a> </dd></dl>
+
+<p>Referenced by <a class="el" href="a00088_source.html#l00131">glm::toMat4()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga31cc82178742c36450f5662bd4fb30b0"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tquat<T, P> glm::mix </td>
+ <td>(</td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>a</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Spherical linear interpolation of two quaternions. </p>
+<p>The interpolation is oriented and the rotation is performed at constant speed. For short path spherical linear interpolation, use the slerp function.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">x</td><td>A quaternion </td></tr>
+ <tr><td class="paramname">y</td><td>A quaternion </td></tr>
+ <tr><td class="paramname">a</td><td>Interpolation factor. The interpolation is defined beyond the range [0, 1]. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">T</td><td>Value type used to build the quaternion. Supported: half, float or double. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00172.html" title="Defines a templated quaternion type and several quaternion operations. ">GLM_GTC_quaternion</a> </dd>
+<dd>
+- slerp(tquat<T, P> const & x, tquat<T, P> const & y, T const & a) </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga35b6bcb22ac6d1e4a85440f5b69bdf86"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tquat<T, P> glm::normalize </td>
+ <td>(</td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>q</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the normalized quaternion. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00172.html" title="Defines a templated quaternion type and several quaternion operations. ">GLM_GTC_quaternion</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga484c4633f7c05d8e29ee8b452350f539"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tvec4<bool, P> glm::notEqual </td>
+ <td>(</td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the component-wise comparison of result x != y. </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">quatType</td><td>Floating-point quaternion types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00172.html" title="Defines a templated quaternion type and several quaternion operations. ">GLM_GTC_quaternion</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga2c08b93a4261c10748fd4d2104346f17"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL T glm::pitch </td>
+ <td>(</td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns pitch value of euler angles expressed in radians. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00220.html" title="Extented quaternion types and functions. ">GLM_GTX_quaternion</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga950f8acff3e33bbda77895a3dcb7e5ce"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tquat<T, P> glm::quat_cast </td>
+ <td>(</td>
+ <td class="paramtype">tmat3x3< T, P > const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Converts a 3 * 3 matrix to a quaternion. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00172.html" title="Defines a templated quaternion type and several quaternion operations. ">GLM_GTC_quaternion</a> </dd></dl>
+
+<p>Referenced by <a class="el" href="a00088_source.html#l00138">glm::toQuat()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga3e4615e9884dd0f41f5617b9848a5d9c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tquat<T, P> glm::quat_cast </td>
+ <td>(</td>
+ <td class="paramtype">tmat4x4< T, P > const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Converts a 4 * 4 matrix to a quaternion. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00172.html" title="Defines a templated quaternion type and several quaternion operations. ">GLM_GTC_quaternion</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga4fd705376c6c1fd667be0055a0ea58ec"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL T glm::roll </td>
+ <td>(</td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns roll value of euler angles expressed in radians. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00220.html" title="Extented quaternion types and functions. ">GLM_GTX_quaternion</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaa8f42979c921e450ff2812fb43c25702"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tquat<T, P> glm::rotate </td>
+ <td>(</td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>q</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>angle</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>axis</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Rotates a quaternion from a vector of 3 components axis and an angle. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">q</td><td>Source orientation </td></tr>
+ <tr><td class="paramname">angle</td><td>Angle expressed in radians. </td></tr>
+ <tr><td class="paramname">axis</td><td>Axis of the rotation</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00172.html" title="Defines a templated quaternion type and several quaternion operations. ">GLM_GTC_quaternion</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga22b438c7252f3fa5b773c9882471652a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tquat<T, P> glm::slerp </td>
+ <td>(</td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>a</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Spherical linear interpolation of two quaternions. </p>
+<p>The interpolation always take the short path and the rotation is performed at constant speed.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">x</td><td>A quaternion </td></tr>
+ <tr><td class="paramname">y</td><td>A quaternion </td></tr>
+ <tr><td class="paramname">a</td><td>Interpolation factor. The interpolation is defined beyond the range [0, 1]. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">T</td><td>Value type used to build the quaternion. Supported: half, float or double. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00172.html" title="Defines a templated quaternion type and several quaternion operations. ">GLM_GTC_quaternion</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga724a5df282b70cec0a6cb0d6dcddb6d6"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL T glm::yaw </td>
+ <td>(</td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns yaw value of euler angles expressed in radians. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00220.html" title="Extented quaternion types and functions. ">GLM_GTX_quaternion</a> </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00173.html b/src/third_party/glm/doc/api/a00173.html
new file mode 100644
index 0000000..bedfcc0
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00173.html
@@ -0,0 +1,303 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTC_random</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTC_random<div class="ingroups"><a class="el" href="a00154.html">GTC Extensions (Stable)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga5506dee301160e3a06aef9b9bc7a0a83"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga5506dee301160e3a06aef9b9bc7a0a83"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00173.html#ga5506dee301160e3a06aef9b9bc7a0a83">ballRand</a> (T Radius)</td></tr>
+<tr class="separator:ga5506dee301160e3a06aef9b9bc7a0a83"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae989c26a2899b2fb7444abe7c275c29c"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gae989c26a2899b2fb7444abe7c275c29c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec2< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00173.html#gae989c26a2899b2fb7444abe7c275c29c">circularRand</a> (T Radius)</td></tr>
+<tr class="separator:gae989c26a2899b2fb7444abe7c275c29c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad3a3ee7d26502a31ba552cb627a68606"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gad3a3ee7d26502a31ba552cb627a68606"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec2< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00173.html#gad3a3ee7d26502a31ba552cb627a68606">diskRand</a> (T Radius)</td></tr>
+<tr class="separator:gad3a3ee7d26502a31ba552cb627a68606"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5193a83e49e4fdc5652c084711083574"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga5193a83e49e4fdc5652c084711083574"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00173.html#ga5193a83e49e4fdc5652c084711083574">gaussRand</a> (genType Mean, genType Deviation)</td></tr>
+<tr class="separator:ga5193a83e49e4fdc5652c084711083574"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga12aebc19b85a8c736f5801c2f7b9b716"><td class="memTemplParams" colspan="2">template<typename genTYpe > </td></tr>
+<tr class="memitem:ga12aebc19b85a8c736f5801c2f7b9b716"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genTYpe </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00173.html#ga12aebc19b85a8c736f5801c2f7b9b716">linearRand</a> (genTYpe Min, genTYpe Max)</td></tr>
+<tr class="separator:ga12aebc19b85a8c736f5801c2f7b9b716"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaba9cec867916d894d794a32897b7fdfd"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gaba9cec867916d894d794a32897b7fdfd"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00173.html#gaba9cec867916d894d794a32897b7fdfd">linearRand</a> (vecType< T, P > const &Min, vecType< T, P > const &Max)</td></tr>
+<tr class="separator:gaba9cec867916d894d794a32897b7fdfd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa9a6fc2d7a295b3857f7db23b1053d9d"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gaa9a6fc2d7a295b3857f7db23b1053d9d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00173.html#gaa9a6fc2d7a295b3857f7db23b1053d9d">sphericalRand</a> (T Radius)</td></tr>
+<tr class="separator:gaa9a6fc2d7a295b3857f7db23b1053d9d"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Generate random number from various distribution methods. </p>
+<p><<a class="el" href="a00089.html" title="GLM_GTC_random ">glm/gtc/random.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga5506dee301160e3a06aef9b9bc7a0a83"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tvec3<T, defaultp> glm::ballRand </td>
+ <td>(</td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>Radius</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Generate a random 3D vector which coordinates are regulary distributed within the volume of a ball of a given radius. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">Radius</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00173.html" title="Generate random number from various distribution methods. ">GLM_GTC_random</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gae989c26a2899b2fb7444abe7c275c29c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tvec2<T, defaultp> glm::circularRand </td>
+ <td>(</td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>Radius</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Generate a random 2D vector which coordinates are regulary distributed on a circle of a given radius. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">Radius</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00173.html" title="Generate random number from various distribution methods. ">GLM_GTC_random</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gad3a3ee7d26502a31ba552cb627a68606"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tvec2<T, defaultp> glm::diskRand </td>
+ <td>(</td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>Radius</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Generate a random 2D vector which coordinates are regulary distributed within the area of a disk of a given radius. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">Radius</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00173.html" title="Generate random number from various distribution methods. ">GLM_GTC_random</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga5193a83e49e4fdc5652c084711083574"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::gaussRand </td>
+ <td>(</td>
+ <td class="paramtype">genType </td>
+ <td class="paramname"><em>Mean</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType </td>
+ <td class="paramname"><em>Deviation</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Generate random numbers in the interval [Min, Max], according a gaussian distribution. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">Mean</td><td></td></tr>
+ <tr><td class="paramname">Deviation</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00173.html" title="Generate random number from various distribution methods. ">GLM_GTC_random</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga12aebc19b85a8c736f5801c2f7b9b716"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genTYpe glm::linearRand </td>
+ <td>(</td>
+ <td class="paramtype">genTYpe </td>
+ <td class="paramname"><em>Min</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genTYpe </td>
+ <td class="paramname"><em>Max</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Generate random numbers in the interval [Min, Max], according a linear distribution. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">Min</td><td></td></tr>
+ <tr><td class="paramname">Max</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Value type. Currently supported: float or double scalars. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00173.html" title="Generate random number from various distribution methods. ">GLM_GTC_random</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaba9cec867916d894d794a32897b7fdfd"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::linearRand </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>Min</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>Max</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Generate random numbers in the interval [Min, Max], according a linear distribution. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">Min</td><td></td></tr>
+ <tr><td class="paramname">Max</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">T</td><td>Value type. Currently supported: float or double. </td></tr>
+ <tr><td class="paramname">vecType</td><td>A vertor type: tvec1, tvec2, tvec3, tvec4 or compatible </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00173.html" title="Generate random number from various distribution methods. ">GLM_GTC_random</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaa9a6fc2d7a295b3857f7db23b1053d9d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tvec3<T, defaultp> glm::sphericalRand </td>
+ <td>(</td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>Radius</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Generate a random 3D vector which coordinates are regulary distributed on a sphere of a given radius. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">Radius</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00173.html" title="Generate random number from various distribution methods. ">GLM_GTC_random</a> </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00174.html b/src/third_party/glm/doc/api/a00174.html
new file mode 100644
index 0000000..ad195c0
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00174.html
@@ -0,0 +1,406 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTC_reciprocal</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTC_reciprocal<div class="ingroups"><a class="el" href="a00154.html">GTC Extensions (Stable)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gaeadfb9c9d71093f7865b2ba2ca8d104d"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gaeadfb9c9d71093f7865b2ba2ca8d104d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00174.html#gaeadfb9c9d71093f7865b2ba2ca8d104d">acot</a> (genType x)</td></tr>
+<tr class="separator:gaeadfb9c9d71093f7865b2ba2ca8d104d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafaca98a7100170db8841f446282debfa"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gafaca98a7100170db8841f446282debfa"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00174.html#gafaca98a7100170db8841f446282debfa">acoth</a> (genType x)</td></tr>
+<tr class="separator:gafaca98a7100170db8841f446282debfa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1b4bed91476b9b915e76b4a30236d330"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga1b4bed91476b9b915e76b4a30236d330"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00174.html#ga1b4bed91476b9b915e76b4a30236d330">acsc</a> (genType x)</td></tr>
+<tr class="separator:ga1b4bed91476b9b915e76b4a30236d330"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4b50aa5e5afc7e19ec113ab91596c576"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga4b50aa5e5afc7e19ec113ab91596c576"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00174.html#ga4b50aa5e5afc7e19ec113ab91596c576">acsch</a> (genType x)</td></tr>
+<tr class="separator:ga4b50aa5e5afc7e19ec113ab91596c576"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2c5b7f962c2c9ff684e6d2de48db1f10"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga2c5b7f962c2c9ff684e6d2de48db1f10"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00174.html#ga2c5b7f962c2c9ff684e6d2de48db1f10">asec</a> (genType x)</td></tr>
+<tr class="separator:ga2c5b7f962c2c9ff684e6d2de48db1f10"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaec7586dccfe431f850d006f3824b8ca6"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gaec7586dccfe431f850d006f3824b8ca6"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00174.html#gaec7586dccfe431f850d006f3824b8ca6">asech</a> (genType x)</td></tr>
+<tr class="separator:gaec7586dccfe431f850d006f3824b8ca6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3a7b517a95bbd3ad74da3aea87a66314"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga3a7b517a95bbd3ad74da3aea87a66314"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00174.html#ga3a7b517a95bbd3ad74da3aea87a66314">cot</a> (genType angle)</td></tr>
+<tr class="separator:ga3a7b517a95bbd3ad74da3aea87a66314"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6b8b770eb7198e4dea59d52e6db81442"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga6b8b770eb7198e4dea59d52e6db81442"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00174.html#ga6b8b770eb7198e4dea59d52e6db81442">coth</a> (genType angle)</td></tr>
+<tr class="separator:ga6b8b770eb7198e4dea59d52e6db81442"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga59dd0005b6474eea48af743b4f14ebbb"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga59dd0005b6474eea48af743b4f14ebbb"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00174.html#ga59dd0005b6474eea48af743b4f14ebbb">csc</a> (genType angle)</td></tr>
+<tr class="separator:ga59dd0005b6474eea48af743b4f14ebbb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6d95843ff3ca6472ab399ba171d290a0"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga6d95843ff3ca6472ab399ba171d290a0"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00174.html#ga6d95843ff3ca6472ab399ba171d290a0">csch</a> (genType angle)</td></tr>
+<tr class="separator:ga6d95843ff3ca6472ab399ba171d290a0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae4bcbebee670c5ea155f0777b3acbd84"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gae4bcbebee670c5ea155f0777b3acbd84"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00174.html#gae4bcbebee670c5ea155f0777b3acbd84">sec</a> (genType angle)</td></tr>
+<tr class="separator:gae4bcbebee670c5ea155f0777b3acbd84"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9a5cfd1e7170104a7b33863b1b75e5ae"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga9a5cfd1e7170104a7b33863b1b75e5ae"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00174.html#ga9a5cfd1e7170104a7b33863b1b75e5ae">sech</a> (genType angle)</td></tr>
+<tr class="separator:ga9a5cfd1e7170104a7b33863b1b75e5ae"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Define secant, cosecant and cotangent functions. </p>
+<p><<a class="el" href="a00092.html" title="GLM_GTC_reciprocal ">glm/gtc/reciprocal.hpp</a>> need to be included to use these features. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="gaeadfb9c9d71093f7865b2ba2ca8d104d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::acot </td>
+ <td>(</td>
+ <td class="paramtype">genType </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Inverse cotangent function. </p>
+<dl class="section return"><dt>Returns</dt><dd>Return an angle expressed in radians. </dd></dl>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00174.html" title="Define secant, cosecant and cotangent functions. ">GLM_GTC_reciprocal</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gafaca98a7100170db8841f446282debfa"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::acoth </td>
+ <td>(</td>
+ <td class="paramtype">genType </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Inverse cotangent hyperbolic function. </p>
+<dl class="section return"><dt>Returns</dt><dd>Return an angle expressed in radians. </dd></dl>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00174.html" title="Define secant, cosecant and cotangent functions. ">GLM_GTC_reciprocal</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga1b4bed91476b9b915e76b4a30236d330"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::acsc </td>
+ <td>(</td>
+ <td class="paramtype">genType </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Inverse cosecant function. </p>
+<dl class="section return"><dt>Returns</dt><dd>Return an angle expressed in radians. </dd></dl>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00174.html" title="Define secant, cosecant and cotangent functions. ">GLM_GTC_reciprocal</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga4b50aa5e5afc7e19ec113ab91596c576"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::acsch </td>
+ <td>(</td>
+ <td class="paramtype">genType </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Inverse cosecant hyperbolic function. </p>
+<dl class="section return"><dt>Returns</dt><dd>Return an angle expressed in radians. </dd></dl>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00174.html" title="Define secant, cosecant and cotangent functions. ">GLM_GTC_reciprocal</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga2c5b7f962c2c9ff684e6d2de48db1f10"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::asec </td>
+ <td>(</td>
+ <td class="paramtype">genType </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Inverse secant function. </p>
+<dl class="section return"><dt>Returns</dt><dd>Return an angle expressed in radians. </dd></dl>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00174.html" title="Define secant, cosecant and cotangent functions. ">GLM_GTC_reciprocal</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaec7586dccfe431f850d006f3824b8ca6"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::asech </td>
+ <td>(</td>
+ <td class="paramtype">genType </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Inverse secant hyperbolic function. </p>
+<dl class="section return"><dt>Returns</dt><dd>Return an angle expressed in radians. </dd></dl>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00174.html" title="Define secant, cosecant and cotangent functions. ">GLM_GTC_reciprocal</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga3a7b517a95bbd3ad74da3aea87a66314"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::cot </td>
+ <td>(</td>
+ <td class="paramtype">genType </td>
+ <td class="paramname"><em>angle</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Cotangent function. </p>
+<p>adjacent / opposite or 1 / tan(x)</p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00174.html" title="Define secant, cosecant and cotangent functions. ">GLM_GTC_reciprocal</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga6b8b770eb7198e4dea59d52e6db81442"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::coth </td>
+ <td>(</td>
+ <td class="paramtype">genType </td>
+ <td class="paramname"><em>angle</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Cotangent hyperbolic function. </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00174.html" title="Define secant, cosecant and cotangent functions. ">GLM_GTC_reciprocal</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga59dd0005b6474eea48af743b4f14ebbb"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::csc </td>
+ <td>(</td>
+ <td class="paramtype">genType </td>
+ <td class="paramname"><em>angle</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Cosecant function. </p>
+<p>hypotenuse / opposite or 1 / sin(x)</p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00174.html" title="Define secant, cosecant and cotangent functions. ">GLM_GTC_reciprocal</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga6d95843ff3ca6472ab399ba171d290a0"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::csch </td>
+ <td>(</td>
+ <td class="paramtype">genType </td>
+ <td class="paramname"><em>angle</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Cosecant hyperbolic function. </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00174.html" title="Define secant, cosecant and cotangent functions. ">GLM_GTC_reciprocal</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gae4bcbebee670c5ea155f0777b3acbd84"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::sec </td>
+ <td>(</td>
+ <td class="paramtype">genType </td>
+ <td class="paramname"><em>angle</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Secant function. </p>
+<p>hypotenuse / adjacent or 1 / cos(x)</p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00174.html" title="Define secant, cosecant and cotangent functions. ">GLM_GTC_reciprocal</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga9a5cfd1e7170104a7b33863b1b75e5ae"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::sech </td>
+ <td>(</td>
+ <td class="paramtype">genType </td>
+ <td class="paramname"><em>angle</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Secant hyperbolic function. </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00174.html" title="Define secant, cosecant and cotangent functions. ">GLM_GTC_reciprocal</a> </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00175.html b/src/third_party/glm/doc/api/a00175.html
new file mode 100644
index 0000000..55e4c3c
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00175.html
@@ -0,0 +1,603 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTC_round</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTC_round<div class="ingroups"><a class="el" href="a00154.html">GTC Extensions (Stable)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gac84898c466e609cdd2e81d9ba907d9e8"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gac84898c466e609cdd2e81d9ba907d9e8"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00175.html#gac84898c466e609cdd2e81d9ba907d9e8">ceilMultiple</a> (genType Source, genType Multiple)</td></tr>
+<tr class="separator:gac84898c466e609cdd2e81d9ba907d9e8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafe632af669ac57d670ca18e3665a12ca"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gafe632af669ac57d670ca18e3665a12ca"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00175.html#gafe632af669ac57d670ca18e3665a12ca">ceilMultiple</a> (vecType< T, P > const &Source, vecType< T, P > const &Multiple)</td></tr>
+<tr class="separator:gafe632af669ac57d670ca18e3665a12ca"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa73c7690c787086fa3ac1c312264acab"><td class="memTemplParams" colspan="2">template<typename genIUType > </td></tr>
+<tr class="memitem:gaa73c7690c787086fa3ac1c312264acab"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genIUType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00175.html#gaa73c7690c787086fa3ac1c312264acab">ceilPowerOfTwo</a> (genIUType Value)</td></tr>
+<tr class="separator:gaa73c7690c787086fa3ac1c312264acab"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga76ec9b214ea1376fe09a903e34bab847"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga76ec9b214ea1376fe09a903e34bab847"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00175.html#ga76ec9b214ea1376fe09a903e34bab847">ceilPowerOfTwo</a> (vecType< T, P > const &value)</td></tr>
+<tr class="separator:ga76ec9b214ea1376fe09a903e34bab847"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9eafb9dbedf84e5cece65c2fe9d5631d"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga9eafb9dbedf84e5cece65c2fe9d5631d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00175.html#ga9eafb9dbedf84e5cece65c2fe9d5631d">floorMultiple</a> (genType Source, genType Multiple)</td></tr>
+<tr class="separator:ga9eafb9dbedf84e5cece65c2fe9d5631d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6912db42d43873fe1dedb3aed2b7a239"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga6912db42d43873fe1dedb3aed2b7a239"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00175.html#ga6912db42d43873fe1dedb3aed2b7a239">floorMultiple</a> (vecType< T, P > const &Source, vecType< T, P > const &Multiple)</td></tr>
+<tr class="separator:ga6912db42d43873fe1dedb3aed2b7a239"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac80f6519c31baae10d8d7bea6735d1fa"><td class="memTemplParams" colspan="2">template<typename genIUType > </td></tr>
+<tr class="memitem:gac80f6519c31baae10d8d7bea6735d1fa"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genIUType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00175.html#gac80f6519c31baae10d8d7bea6735d1fa">floorPowerOfTwo</a> (genIUType Value)</td></tr>
+<tr class="separator:gac80f6519c31baae10d8d7bea6735d1fa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6a5a8f6dd1b2f755e4572bd039062c37"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga6a5a8f6dd1b2f755e4572bd039062c37"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00175.html#ga6a5a8f6dd1b2f755e4572bd039062c37">floorPowerOfTwo</a> (vecType< T, P > const &value)</td></tr>
+<tr class="separator:ga6a5a8f6dd1b2f755e4572bd039062c37"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf7444a7b2eb524f373463ceba76b9326"><td class="memTemplParams" colspan="2">template<typename genIUType > </td></tr>
+<tr class="memitem:gaf7444a7b2eb524f373463ceba76b9326"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00175.html#gaf7444a7b2eb524f373463ceba76b9326">isMultiple</a> (genIUType Value, genIUType Multiple)</td></tr>
+<tr class="separator:gaf7444a7b2eb524f373463ceba76b9326"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga50ea5d5dc33fffba39ad6002a3784123"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga50ea5d5dc33fffba39ad6002a3784123"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00175.html#ga50ea5d5dc33fffba39ad6002a3784123">isMultiple</a> (vecType< T, P > const &Value, T Multiple)</td></tr>
+<tr class="separator:ga50ea5d5dc33fffba39ad6002a3784123"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7ae705574ef3e3ebfb4f537d8d285c48"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga7ae705574ef3e3ebfb4f537d8d285c48"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00175.html#ga7ae705574ef3e3ebfb4f537d8d285c48">isMultiple</a> (vecType< T, P > const &Value, vecType< T, P > const &Multiple)</td></tr>
+<tr class="separator:ga7ae705574ef3e3ebfb4f537d8d285c48"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaebf826fbb6e0a70eeaab0792d89b25ec"><td class="memTemplParams" colspan="2">template<typename genIUType > </td></tr>
+<tr class="memitem:gaebf826fbb6e0a70eeaab0792d89b25ec"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00175.html#gaebf826fbb6e0a70eeaab0792d89b25ec">isPowerOfTwo</a> (genIUType Value)</td></tr>
+<tr class="separator:gaebf826fbb6e0a70eeaab0792d89b25ec"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad454e4c8d8cd73ddc7de855f733a1465"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gad454e4c8d8cd73ddc7de855f733a1465"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00175.html#gad454e4c8d8cd73ddc7de855f733a1465">isPowerOfTwo</a> (vecType< T, P > const &value)</td></tr>
+<tr class="separator:gad454e4c8d8cd73ddc7de855f733a1465"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6739d1de04b2cea7c78675b365644bce"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga6739d1de04b2cea7c78675b365644bce"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00175.html#ga6739d1de04b2cea7c78675b365644bce">roundMultiple</a> (genType Source, genType Multiple)</td></tr>
+<tr class="separator:ga6739d1de04b2cea7c78675b365644bce"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga10a8ab7b254257b607b6a3fc68c3e661"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga10a8ab7b254257b607b6a3fc68c3e661"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00175.html#ga10a8ab7b254257b607b6a3fc68c3e661">roundMultiple</a> (vecType< T, P > const &Source, vecType< T, P > const &Multiple)</td></tr>
+<tr class="separator:ga10a8ab7b254257b607b6a3fc68c3e661"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6d24a9e3abe3e6a908661b43acb8efe0"><td class="memTemplParams" colspan="2">template<typename genIUType > </td></tr>
+<tr class="memitem:ga6d24a9e3abe3e6a908661b43acb8efe0"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genIUType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00175.html#ga6d24a9e3abe3e6a908661b43acb8efe0">roundPowerOfTwo</a> (genIUType Value)</td></tr>
+<tr class="separator:ga6d24a9e3abe3e6a908661b43acb8efe0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae95be3b384f3bbd00c6c1cf0a1f96485"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gae95be3b384f3bbd00c6c1cf0a1f96485"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00175.html#gae95be3b384f3bbd00c6c1cf0a1f96485">roundPowerOfTwo</a> (vecType< T, P > const &value)</td></tr>
+<tr class="separator:gae95be3b384f3bbd00c6c1cf0a1f96485"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>rounding value to specific boundings </p>
+<p><<a class="el" href="a00095.html" title="GLM_GTC_round ">glm/gtc/round.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="gac84898c466e609cdd2e81d9ba907d9e8"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::ceilMultiple </td>
+ <td>(</td>
+ <td class="paramtype">genType </td>
+ <td class="paramname"><em>Source</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType </td>
+ <td class="paramname"><em>Multiple</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Higher multiple number of Source. </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point or integer scalar or vector types. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">Source</td><td></td></tr>
+ <tr><td class="paramname">Multiple</td><td>Must be a null or positive value</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00175.html" title="rounding value to specific boundings ">GLM_GTC_round</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gafe632af669ac57d670ca18e3665a12ca"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::ceilMultiple </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>Source</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>Multiple</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Higher multiple number of Source. </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point or integer scalar or vector types. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">Source</td><td></td></tr>
+ <tr><td class="paramname">Multiple</td><td>Must be a null or positive value</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00175.html" title="rounding value to specific boundings ">GLM_GTC_round</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaa73c7690c787086fa3ac1c312264acab"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genIUType glm::ceilPowerOfTwo </td>
+ <td>(</td>
+ <td class="paramtype">genIUType </td>
+ <td class="paramname"><em>Value</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return the power of two number which value is just higher the input value, round up to a power of two. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00175.html" title="rounding value to specific boundings ">GLM_GTC_round</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga76ec9b214ea1376fe09a903e34bab847"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::ceilPowerOfTwo </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>value</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return the power of two number which value is just higher the input value, round up to a power of two. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00175.html" title="rounding value to specific boundings ">GLM_GTC_round</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga9eafb9dbedf84e5cece65c2fe9d5631d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::floorMultiple </td>
+ <td>(</td>
+ <td class="paramtype">genType </td>
+ <td class="paramname"><em>Source</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType </td>
+ <td class="paramname"><em>Multiple</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Lower multiple number of Source. </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point or integer scalar or vector types. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">Source</td><td></td></tr>
+ <tr><td class="paramname">Multiple</td><td>Must be a null or positive value</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00175.html" title="rounding value to specific boundings ">GLM_GTC_round</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga6912db42d43873fe1dedb3aed2b7a239"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::floorMultiple </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>Source</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>Multiple</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Lower multiple number of Source. </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point or integer scalar or vector types. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">Source</td><td></td></tr>
+ <tr><td class="paramname">Multiple</td><td>Must be a null or positive value</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00175.html" title="rounding value to specific boundings ">GLM_GTC_round</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gac80f6519c31baae10d8d7bea6735d1fa"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genIUType glm::floorPowerOfTwo </td>
+ <td>(</td>
+ <td class="paramtype">genIUType </td>
+ <td class="paramname"><em>Value</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return the power of two number which value is just lower the input value, round down to a power of two. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00175.html" title="rounding value to specific boundings ">GLM_GTC_round</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga6a5a8f6dd1b2f755e4572bd039062c37"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::floorPowerOfTwo </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>value</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return the power of two number which value is just lower the input value, round down to a power of two. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00175.html" title="rounding value to specific boundings ">GLM_GTC_round</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaf7444a7b2eb524f373463ceba76b9326"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL bool glm::isMultiple </td>
+ <td>(</td>
+ <td class="paramtype">genIUType </td>
+ <td class="paramname"><em>Value</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genIUType </td>
+ <td class="paramname"><em>Multiple</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return true if the 'Value' is a multiple of 'Multiple'. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00175.html" title="rounding value to specific boundings ">GLM_GTC_round</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga50ea5d5dc33fffba39ad6002a3784123"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<bool, P> glm::isMultiple </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>Value</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>Multiple</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return true if the 'Value' is a multiple of 'Multiple'. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00175.html" title="rounding value to specific boundings ">GLM_GTC_round</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga7ae705574ef3e3ebfb4f537d8d285c48"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<bool, P> glm::isMultiple </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>Value</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>Multiple</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return true if the 'Value' is a multiple of 'Multiple'. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00175.html" title="rounding value to specific boundings ">GLM_GTC_round</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaebf826fbb6e0a70eeaab0792d89b25ec"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL bool glm::isPowerOfTwo </td>
+ <td>(</td>
+ <td class="paramtype">genIUType </td>
+ <td class="paramname"><em>Value</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return true if the value is a power of two number. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00175.html" title="rounding value to specific boundings ">GLM_GTC_round</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gad454e4c8d8cd73ddc7de855f733a1465"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<bool, P> glm::isPowerOfTwo </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>value</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return true if the value is a power of two number. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00175.html" title="rounding value to specific boundings ">GLM_GTC_round</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga6739d1de04b2cea7c78675b365644bce"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::roundMultiple </td>
+ <td>(</td>
+ <td class="paramtype">genType </td>
+ <td class="paramname"><em>Source</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType </td>
+ <td class="paramname"><em>Multiple</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Lower multiple number of Source. </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point or integer scalar or vector types. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">Source</td><td></td></tr>
+ <tr><td class="paramname">Multiple</td><td>Must be a null or positive value</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00175.html" title="rounding value to specific boundings ">GLM_GTC_round</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga10a8ab7b254257b607b6a3fc68c3e661"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::roundMultiple </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>Source</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>Multiple</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Lower multiple number of Source. </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point or integer scalar or vector types. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">Source</td><td></td></tr>
+ <tr><td class="paramname">Multiple</td><td>Must be a null or positive value</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00175.html" title="rounding value to specific boundings ">GLM_GTC_round</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga6d24a9e3abe3e6a908661b43acb8efe0"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genIUType glm::roundPowerOfTwo </td>
+ <td>(</td>
+ <td class="paramtype">genIUType </td>
+ <td class="paramname"><em>Value</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return the power of two number which value is the closet to the input value. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00175.html" title="rounding value to specific boundings ">GLM_GTC_round</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gae95be3b384f3bbd00c6c1cf0a1f96485"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::roundPowerOfTwo </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>value</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return the power of two number which value is the closet to the input value. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00175.html" title="rounding value to specific boundings ">GLM_GTC_round</a> </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00176.html b/src/third_party/glm/doc/api/a00176.html
new file mode 100644
index 0000000..7b56fa8
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00176.html
@@ -0,0 +1,688 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTC_type_aligned</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#typedef-members">Typedefs</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTC_type_aligned<div class="ingroups"><a class="el" href="a00154.html">GTC Extensions (Stable)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ga780a35f764020f553a9601a3fcdcd059"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga780a35f764020f553a9601a3fcdcd059"></a>
+typedef aligned_highp_bvec1 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga780a35f764020f553a9601a3fcdcd059">aligned_bvec1</a></td></tr>
+<tr class="separator:ga780a35f764020f553a9601a3fcdcd059"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae766b317c5afec852bfb3d74a3c54bc8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae766b317c5afec852bfb3d74a3c54bc8"></a>
+typedef aligned_highp_bvec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#gae766b317c5afec852bfb3d74a3c54bc8">aligned_bvec2</a></td></tr>
+<tr class="separator:gae766b317c5afec852bfb3d74a3c54bc8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae1964ba70d15915e5b710926decbb3cb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae1964ba70d15915e5b710926decbb3cb"></a>
+typedef aligned_highp_bvec3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#gae1964ba70d15915e5b710926decbb3cb">aligned_bvec3</a></td></tr>
+<tr class="separator:gae1964ba70d15915e5b710926decbb3cb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae164a1f7879f828bc35e50b79d786b05"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae164a1f7879f828bc35e50b79d786b05"></a>
+typedef aligned_highp_bvec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#gae164a1f7879f828bc35e50b79d786b05">aligned_bvec4</a></td></tr>
+<tr class="separator:gae164a1f7879f828bc35e50b79d786b05"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4974f46ae5a19415d91316960a53617a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga4974f46ae5a19415d91316960a53617a"></a>
+typedef aligned_highp_dvec1 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga4974f46ae5a19415d91316960a53617a">aligned_dvec1</a></td></tr>
+<tr class="separator:ga4974f46ae5a19415d91316960a53617a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga18d859f87122b2b3b2992ffe86dbebc0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga18d859f87122b2b3b2992ffe86dbebc0"></a>
+typedef aligned_highp_dvec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga18d859f87122b2b3b2992ffe86dbebc0">aligned_dvec2</a></td></tr>
+<tr class="separator:ga18d859f87122b2b3b2992ffe86dbebc0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa37869eea77d28419b2fb0ff70b69bf0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaa37869eea77d28419b2fb0ff70b69bf0"></a>
+typedef aligned_highp_dvec3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#gaa37869eea77d28419b2fb0ff70b69bf0">aligned_dvec3</a></td></tr>
+<tr class="separator:gaa37869eea77d28419b2fb0ff70b69bf0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8a9f0a4795ccc442fa9901845026f9f5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga8a9f0a4795ccc442fa9901845026f9f5"></a>
+typedef aligned_highp_dvec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga8a9f0a4795ccc442fa9901845026f9f5">aligned_dvec4</a></td></tr>
+<tr class="separator:ga8a9f0a4795ccc442fa9901845026f9f5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac5ffd9396890b64e707ba47c76435dfe"><td class="memItemLeft" align="right" valign="top">typedef tvec2< bool, aligned_highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#gac5ffd9396890b64e707ba47c76435dfe">aligned_highp_bvec2</a></td></tr>
+<tr class="separator:gac5ffd9396890b64e707ba47c76435dfe"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3adba191018d2de1dc2834a2ff5597d7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3adba191018d2de1dc2834a2ff5597d7"></a>
+typedef tvec3< bool, aligned_highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga3adba191018d2de1dc2834a2ff5597d7">aligned_highp_bvec3</a></td></tr>
+<tr class="separator:ga3adba191018d2de1dc2834a2ff5597d7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga903a73cf8ae1f4bc24583b81adf024dc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga903a73cf8ae1f4bc24583b81adf024dc"></a>
+typedef tvec4< bool, aligned_highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga903a73cf8ae1f4bc24583b81adf024dc">aligned_highp_bvec4</a></td></tr>
+<tr class="separator:ga903a73cf8ae1f4bc24583b81adf024dc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga186b90f0ba86724e080d237f3f5f9417"><td class="memItemLeft" align="right" valign="top">typedef tvec2< double, aligned_highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga186b90f0ba86724e080d237f3f5f9417">aligned_highp_dvec2</a></td></tr>
+<tr class="separator:ga186b90f0ba86724e080d237f3f5f9417"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga54f6765716867706643bde03211d600f"><td class="memItemLeft" align="right" valign="top">typedef tvec3< double, aligned_highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga54f6765716867706643bde03211d600f">aligned_highp_dvec3</a></td></tr>
+<tr class="separator:ga54f6765716867706643bde03211d600f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8e5a90ed034e9e7414ff71e66a79139e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga8e5a90ed034e9e7414ff71e66a79139e"></a>
+typedef tvec4< double, aligned_highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga8e5a90ed034e9e7414ff71e66a79139e">aligned_highp_dvec4</a></td></tr>
+<tr class="separator:ga8e5a90ed034e9e7414ff71e66a79139e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab6ddd9d1421eb610ddeb32705fed7026"><td class="memItemLeft" align="right" valign="top">typedef tvec2< int, aligned_highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#gab6ddd9d1421eb610ddeb32705fed7026">aligned_highp_ivec2</a></td></tr>
+<tr class="separator:gab6ddd9d1421eb610ddeb32705fed7026"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae234a3a1c6288fa5e2d4c78c5e39002e"><td class="memItemLeft" align="right" valign="top">typedef tvec3< int, aligned_highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#gae234a3a1c6288fa5e2d4c78c5e39002e">aligned_highp_ivec3</a></td></tr>
+<tr class="separator:gae234a3a1c6288fa5e2d4c78c5e39002e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1e3286a27b19f25801fb435b6d1225fb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga1e3286a27b19f25801fb435b6d1225fb"></a>
+typedef tvec4< int, aligned_highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga1e3286a27b19f25801fb435b6d1225fb">aligned_highp_ivec4</a></td></tr>
+<tr class="separator:ga1e3286a27b19f25801fb435b6d1225fb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7366a38dc888164e623fc10663e97670"><td class="memItemLeft" align="right" valign="top">typedef tvec2< uint, aligned_highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga7366a38dc888164e623fc10663e97670">aligned_highp_uvec2</a></td></tr>
+<tr class="separator:ga7366a38dc888164e623fc10663e97670"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga967485a7e963365642ea17de62fe2a3f"><td class="memItemLeft" align="right" valign="top">typedef tvec3< uint, aligned_highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga967485a7e963365642ea17de62fe2a3f">aligned_highp_uvec3</a></td></tr>
+<tr class="separator:ga967485a7e963365642ea17de62fe2a3f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac56a4ce85b6233998139a7c1ac337440"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac56a4ce85b6233998139a7c1ac337440"></a>
+typedef tvec4< uint, aligned_highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#gac56a4ce85b6233998139a7c1ac337440">aligned_highp_uvec4</a></td></tr>
+<tr class="separator:gac56a4ce85b6233998139a7c1ac337440"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaea854184b9d574fc5e75b5709a4974e8"><td class="memItemLeft" align="right" valign="top">typedef tvec2< float, aligned_highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#gaea854184b9d574fc5e75b5709a4974e8">aligned_highp_vec2</a></td></tr>
+<tr class="separator:gaea854184b9d574fc5e75b5709a4974e8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga55fb20d4e73a65c834b5861fc6cf4c36"><td class="memItemLeft" align="right" valign="top">typedef tvec3< float, aligned_highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga55fb20d4e73a65c834b5861fc6cf4c36">aligned_highp_vec3</a></td></tr>
+<tr class="separator:ga55fb20d4e73a65c834b5861fc6cf4c36"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae2938d64c6a46f721681607c2ab3f884"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae2938d64c6a46f721681607c2ab3f884"></a>
+typedef tvec4< float, aligned_highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#gae2938d64c6a46f721681607c2ab3f884">aligned_highp_vec4</a></td></tr>
+<tr class="separator:gae2938d64c6a46f721681607c2ab3f884"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga76298aed82a439063c3d55980c84aa0b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga76298aed82a439063c3d55980c84aa0b"></a>
+typedef aligned_highp_ivec1 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga76298aed82a439063c3d55980c84aa0b">aligned_ivec1</a></td></tr>
+<tr class="separator:ga76298aed82a439063c3d55980c84aa0b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae4f38fd2c86cee6940986197777b3ca4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae4f38fd2c86cee6940986197777b3ca4"></a>
+typedef aligned_highp_ivec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#gae4f38fd2c86cee6940986197777b3ca4">aligned_ivec2</a></td></tr>
+<tr class="separator:gae4f38fd2c86cee6940986197777b3ca4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga32794322d294e5ace7fed4a61896f270"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga32794322d294e5ace7fed4a61896f270"></a>
+typedef aligned_highp_ivec3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga32794322d294e5ace7fed4a61896f270">aligned_ivec3</a></td></tr>
+<tr class="separator:ga32794322d294e5ace7fed4a61896f270"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7f79eae5927c9033d84617e49f6f34e4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7f79eae5927c9033d84617e49f6f34e4"></a>
+typedef aligned_highp_ivec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga7f79eae5927c9033d84617e49f6f34e4">aligned_ivec4</a></td></tr>
+<tr class="separator:ga7f79eae5927c9033d84617e49f6f34e4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga524c702b82ae7ccaca896d374808c6d7"><td class="memItemLeft" align="right" valign="top">typedef tvec2< bool, aligned_lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga524c702b82ae7ccaca896d374808c6d7">aligned_lowp_bvec2</a></td></tr>
+<tr class="separator:ga524c702b82ae7ccaca896d374808c6d7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga21fb6238997b4a21848411b16bc34e93"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga21fb6238997b4a21848411b16bc34e93"></a>
+typedef tvec3< bool, aligned_lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga21fb6238997b4a21848411b16bc34e93">aligned_lowp_bvec3</a></td></tr>
+<tr class="separator:ga21fb6238997b4a21848411b16bc34e93"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0b5e3c64f8dbadfc42a2aca5f2da9692"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga0b5e3c64f8dbadfc42a2aca5f2da9692"></a>
+typedef tvec4< bool, aligned_lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga0b5e3c64f8dbadfc42a2aca5f2da9692">aligned_lowp_bvec4</a></td></tr>
+<tr class="separator:ga0b5e3c64f8dbadfc42a2aca5f2da9692"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab70c189b4691715b3f7f0abb35c65b2f"><td class="memItemLeft" align="right" valign="top">typedef tvec2< double, aligned_lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#gab70c189b4691715b3f7f0abb35c65b2f">aligned_lowp_dvec2</a></td></tr>
+<tr class="separator:gab70c189b4691715b3f7f0abb35c65b2f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gabeec3d5ec99c196f4c0eb03b58d486ee"><td class="memItemLeft" align="right" valign="top">typedef tvec3< double, aligned_lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#gabeec3d5ec99c196f4c0eb03b58d486ee">aligned_lowp_dvec3</a></td></tr>
+<tr class="separator:gabeec3d5ec99c196f4c0eb03b58d486ee"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaab365ee7cfd19bab449daa8f7eb0ca71"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaab365ee7cfd19bab449daa8f7eb0ca71"></a>
+typedef tvec4< double, aligned_lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#gaab365ee7cfd19bab449daa8f7eb0ca71">aligned_lowp_dvec4</a></td></tr>
+<tr class="separator:gaab365ee7cfd19bab449daa8f7eb0ca71"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad69bf7c406a3cec994307473cb3da032"><td class="memItemLeft" align="right" valign="top">typedef tvec2< int, aligned_lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#gad69bf7c406a3cec994307473cb3da032">aligned_lowp_ivec2</a></td></tr>
+<tr class="separator:gad69bf7c406a3cec994307473cb3da032"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa8615b4ce4fdf176c631b34d2d31d81b"><td class="memItemLeft" align="right" valign="top">typedef tvec3< int, aligned_lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#gaa8615b4ce4fdf176c631b34d2d31d81b">aligned_lowp_ivec3</a></td></tr>
+<tr class="separator:gaa8615b4ce4fdf176c631b34d2d31d81b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad744848a2e4ddd2f041e6ec8d13600ae"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad744848a2e4ddd2f041e6ec8d13600ae"></a>
+typedef tvec4< int, aligned_lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#gad744848a2e4ddd2f041e6ec8d13600ae">aligned_lowp_ivec4</a></td></tr>
+<tr class="separator:gad744848a2e4ddd2f041e6ec8d13600ae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga15355ffc7ec7931b81ba76736b65e51a"><td class="memItemLeft" align="right" valign="top">typedef tvec2< uint, aligned_lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga15355ffc7ec7931b81ba76736b65e51a">aligned_lowp_uvec2</a></td></tr>
+<tr class="separator:ga15355ffc7ec7931b81ba76736b65e51a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga48c85299d98e8248f547a2c07ea609cf"><td class="memItemLeft" align="right" valign="top">typedef tvec3< uint, aligned_lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga48c85299d98e8248f547a2c07ea609cf">aligned_lowp_uvec3</a></td></tr>
+<tr class="separator:ga48c85299d98e8248f547a2c07ea609cf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga40b0e05306f666f835ac97c963302ecb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga40b0e05306f666f835ac97c963302ecb"></a>
+typedef tvec4< uint, aligned_lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga40b0e05306f666f835ac97c963302ecb">aligned_lowp_uvec4</a></td></tr>
+<tr class="separator:ga40b0e05306f666f835ac97c963302ecb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3cfc38b4ea9b9bd1e9f02dcc14eab367"><td class="memItemLeft" align="right" valign="top">typedef tvec2< float, aligned_lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga3cfc38b4ea9b9bd1e9f02dcc14eab367">aligned_lowp_vec2</a></td></tr>
+<tr class="separator:ga3cfc38b4ea9b9bd1e9f02dcc14eab367"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae003f8f3071a8bc734a70c6d4978f968"><td class="memItemLeft" align="right" valign="top">typedef tvec3< float, aligned_lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#gae003f8f3071a8bc734a70c6d4978f968">aligned_lowp_vec3</a></td></tr>
+<tr class="separator:gae003f8f3071a8bc734a70c6d4978f968"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga689f103781a795e919fddfa47d89170d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga689f103781a795e919fddfa47d89170d"></a>
+typedef tvec4< float, aligned_lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga689f103781a795e919fddfa47d89170d">aligned_lowp_vec4</a></td></tr>
+<tr class="separator:ga689f103781a795e919fddfa47d89170d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga77d37d7c80c7faa2eecb3eba7677750e"><td class="memItemLeft" align="right" valign="top">typedef tvec2< bool, aligned_mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga77d37d7c80c7faa2eecb3eba7677750e">aligned_mediump_bvec2</a></td></tr>
+<tr class="separator:ga77d37d7c80c7faa2eecb3eba7677750e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4f78cd6d9c5827771e35921b4a92855a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga4f78cd6d9c5827771e35921b4a92855a"></a>
+typedef tvec3< bool, aligned_mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga4f78cd6d9c5827771e35921b4a92855a">aligned_mediump_bvec3</a></td></tr>
+<tr class="separator:ga4f78cd6d9c5827771e35921b4a92855a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2cb80e2d4d351abeadac7b1676a91fd9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2cb80e2d4d351abeadac7b1676a91fd9"></a>
+typedef tvec4< bool, aligned_mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga2cb80e2d4d351abeadac7b1676a91fd9">aligned_mediump_bvec4</a></td></tr>
+<tr class="separator:ga2cb80e2d4d351abeadac7b1676a91fd9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaba56f2b76d320379cdf7c37e0d4b03bd"><td class="memItemLeft" align="right" valign="top">typedef tvec2< double, aligned_mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#gaba56f2b76d320379cdf7c37e0d4b03bd">aligned_mediump_dvec2</a></td></tr>
+<tr class="separator:gaba56f2b76d320379cdf7c37e0d4b03bd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga22efc7f84ab79eef640e00fc59d07478"><td class="memItemLeft" align="right" valign="top">typedef tvec3< double, aligned_mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga22efc7f84ab79eef640e00fc59d07478">aligned_mediump_dvec3</a></td></tr>
+<tr class="separator:ga22efc7f84ab79eef640e00fc59d07478"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad6f422f8871685ee467a575238e4ece4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad6f422f8871685ee467a575238e4ece4"></a>
+typedef tvec4< double, aligned_mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#gad6f422f8871685ee467a575238e4ece4">aligned_mediump_dvec4</a></td></tr>
+<tr class="separator:gad6f422f8871685ee467a575238e4ece4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga389d12dcc8d57a444944a72646d17efa"><td class="memItemLeft" align="right" valign="top">typedef tvec2< int, aligned_mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga389d12dcc8d57a444944a72646d17efa">aligned_mediump_ivec2</a></td></tr>
+<tr class="separator:ga389d12dcc8d57a444944a72646d17efa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5b16f7e81555819bf0f80f4db4bc0b26"><td class="memItemLeft" align="right" valign="top">typedef tvec3< int, aligned_mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga5b16f7e81555819bf0f80f4db4bc0b26">aligned_mediump_ivec3</a></td></tr>
+<tr class="separator:ga5b16f7e81555819bf0f80f4db4bc0b26"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae640082d0ffdb52fb2d658916c5815db"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae640082d0ffdb52fb2d658916c5815db"></a>
+typedef tvec4< int, aligned_mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#gae640082d0ffdb52fb2d658916c5815db">aligned_mediump_ivec4</a></td></tr>
+<tr class="separator:gae640082d0ffdb52fb2d658916c5815db"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga88c56fde67f035d80b2d0d6d568af30b"><td class="memItemLeft" align="right" valign="top">typedef tvec2< uint, aligned_mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga88c56fde67f035d80b2d0d6d568af30b">aligned_mediump_uvec2</a></td></tr>
+<tr class="separator:ga88c56fde67f035d80b2d0d6d568af30b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaee29d3a28f634b03f0a20e79e600f5df"><td class="memItemLeft" align="right" valign="top">typedef tvec3< uint, aligned_mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#gaee29d3a28f634b03f0a20e79e600f5df">aligned_mediump_uvec3</a></td></tr>
+<tr class="separator:gaee29d3a28f634b03f0a20e79e600f5df"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga717763c480dcf3ecf66121426287d08a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga717763c480dcf3ecf66121426287d08a"></a>
+typedef tvec4< uint, aligned_mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga717763c480dcf3ecf66121426287d08a">aligned_mediump_uvec4</a></td></tr>
+<tr class="separator:ga717763c480dcf3ecf66121426287d08a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga57549b1281d99ba1825b1ef0dae6227d"><td class="memItemLeft" align="right" valign="top">typedef tvec2< float, aligned_mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga57549b1281d99ba1825b1ef0dae6227d">aligned_mediump_vec2</a></td></tr>
+<tr class="separator:ga57549b1281d99ba1825b1ef0dae6227d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaed5d4dd2755cc5141a9533488edd9e82"><td class="memItemLeft" align="right" valign="top">typedef tvec3< float, aligned_mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#gaed5d4dd2755cc5141a9533488edd9e82">aligned_mediump_vec3</a></td></tr>
+<tr class="separator:gaed5d4dd2755cc5141a9533488edd9e82"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae4ab68a8c32574bff14e62f95185d295"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae4ab68a8c32574bff14e62f95185d295"></a>
+typedef tvec4< float, aligned_mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#gae4ab68a8c32574bff14e62f95185d295">aligned_mediump_vec4</a></td></tr>
+<tr class="separator:gae4ab68a8c32574bff14e62f95185d295"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1ff8ed402c93d280ff0597c1c5e7c548"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga1ff8ed402c93d280ff0597c1c5e7c548"></a>
+typedef aligned_highp_uvec1 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga1ff8ed402c93d280ff0597c1c5e7c548">aligned_uvec1</a></td></tr>
+<tr class="separator:ga1ff8ed402c93d280ff0597c1c5e7c548"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga074137e3be58528d67041c223d49f398"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga074137e3be58528d67041c223d49f398"></a>
+typedef aligned_highp_uvec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga074137e3be58528d67041c223d49f398">aligned_uvec2</a></td></tr>
+<tr class="separator:ga074137e3be58528d67041c223d49f398"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2a8d9c3046f89d854eb758adfa0811c0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2a8d9c3046f89d854eb758adfa0811c0"></a>
+typedef aligned_highp_uvec3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga2a8d9c3046f89d854eb758adfa0811c0">aligned_uvec3</a></td></tr>
+<tr class="separator:ga2a8d9c3046f89d854eb758adfa0811c0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gabf842c45eea186170c267a328e3f3b7d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gabf842c45eea186170c267a328e3f3b7d"></a>
+typedef aligned_highp_uvec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#gabf842c45eea186170c267a328e3f3b7d">aligned_uvec4</a></td></tr>
+<tr class="separator:gabf842c45eea186170c267a328e3f3b7d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga05e6d4c908965d04191c2070a8d0a65e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga05e6d4c908965d04191c2070a8d0a65e"></a>
+typedef aligned_highp_vec1 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga05e6d4c908965d04191c2070a8d0a65e">aligned_vec1</a></td></tr>
+<tr class="separator:ga05e6d4c908965d04191c2070a8d0a65e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0682462f8096a226773e20fac993cde5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga0682462f8096a226773e20fac993cde5"></a>
+typedef aligned_highp_vec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga0682462f8096a226773e20fac993cde5">aligned_vec2</a></td></tr>
+<tr class="separator:ga0682462f8096a226773e20fac993cde5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7cf643b66664e0cd3c48759ae66c2bd0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7cf643b66664e0cd3c48759ae66c2bd0"></a>
+typedef aligned_highp_vec3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga7cf643b66664e0cd3c48759ae66c2bd0">aligned_vec3</a></td></tr>
+<tr class="separator:ga7cf643b66664e0cd3c48759ae66c2bd0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga85d89e83cb8137e1be1446de8c3b643a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga85d89e83cb8137e1be1446de8c3b643a"></a>
+typedef aligned_highp_vec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00176.html#ga85d89e83cb8137e1be1446de8c3b643a">aligned_vec4</a></td></tr>
+<tr class="separator:ga85d89e83cb8137e1be1446de8c3b643a"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Aligned types. </p>
+<p><<a class="el" href="a00108.html" title="GLM_GTC_type_aligned ">glm/gtc/type_aligned.hpp</a>> need to be included to use these features. </p>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a class="anchor" id="gac5ffd9396890b64e707ba47c76435dfe"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec2<bool, aligned_highp> aligned_highp_bvec2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 components vector of high precision bool numbers. </p>
+<p>There is no guarantee on the actual precision. </p>
+
+<p>Definition at line <a class="el" href="a00108_source.html#l00121">121</a> of file <a class="el" href="a00108_source.html">gtc/type_aligned.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga186b90f0ba86724e080d237f3f5f9417"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec2<double, aligned_highp> aligned_highp_dvec2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 components vector of high double-precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision. </p>
+
+<p>Definition at line <a class="el" href="a00108_source.html#l00085">85</a> of file <a class="el" href="a00108_source.html">gtc/type_aligned.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga54f6765716867706643bde03211d600f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec3<double, aligned_highp> aligned_highp_dvec3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 components vector of high double-precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision. </p>
+
+<p>Definition at line <a class="el" href="a00108_source.html#l00147">147</a> of file <a class="el" href="a00108_source.html">gtc/type_aligned.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gab6ddd9d1421eb610ddeb32705fed7026"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec2<int, aligned_highp> aligned_highp_ivec2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 components vector of high precision signed integer numbers. </p>
+<p>There is no guarantee on the actual precision. </p>
+
+<p>Definition at line <a class="el" href="a00108_source.html#l00097">97</a> of file <a class="el" href="a00108_source.html">gtc/type_aligned.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gae234a3a1c6288fa5e2d4c78c5e39002e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec3<int, aligned_highp> aligned_highp_ivec3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 components vector of high precision signed integer numbers. </p>
+<p>There is no guarantee on the actual precision. </p>
+
+<p>Definition at line <a class="el" href="a00108_source.html#l00159">159</a> of file <a class="el" href="a00108_source.html">gtc/type_aligned.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga7366a38dc888164e623fc10663e97670"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec2<uint, aligned_highp> aligned_highp_uvec2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 components vector of high precision unsigned integer numbers. </p>
+<p>There is no guarantee on the actual precision. </p>
+
+<p>Definition at line <a class="el" href="a00108_source.html#l00109">109</a> of file <a class="el" href="a00108_source.html">gtc/type_aligned.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga967485a7e963365642ea17de62fe2a3f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec3<uint, aligned_highp> aligned_highp_uvec3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 components vector of high precision unsigned integer numbers. </p>
+<p>There is no guarantee on the actual precision. </p>
+
+<p>Definition at line <a class="el" href="a00108_source.html#l00171">171</a> of file <a class="el" href="a00108_source.html">gtc/type_aligned.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaea854184b9d574fc5e75b5709a4974e8"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec2<float, aligned_highp> aligned_highp_vec2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 components vector of high single-precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision. </p>
+
+<p>Definition at line <a class="el" href="a00108_source.html#l00073">73</a> of file <a class="el" href="a00108_source.html">gtc/type_aligned.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga55fb20d4e73a65c834b5861fc6cf4c36"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec3<float, aligned_highp> aligned_highp_vec3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 components vector of high single-precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision. </p>
+
+<p>Definition at line <a class="el" href="a00108_source.html#l00135">135</a> of file <a class="el" href="a00108_source.html">gtc/type_aligned.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga524c702b82ae7ccaca896d374808c6d7"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec2<bool, aligned_lowp> aligned_lowp_bvec2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 components vector of low precision bool numbers. </p>
+<p>There is no guarantee on the actual precision. </p>
+
+<p>Definition at line <a class="el" href="a00108_source.html#l00129">129</a> of file <a class="el" href="a00108_source.html">gtc/type_aligned.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gab70c189b4691715b3f7f0abb35c65b2f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec2<double, aligned_lowp> aligned_lowp_dvec2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 components vector of low double-precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision. </p>
+
+<p>Definition at line <a class="el" href="a00108_source.html#l00093">93</a> of file <a class="el" href="a00108_source.html">gtc/type_aligned.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gabeec3d5ec99c196f4c0eb03b58d486ee"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec3<double, aligned_lowp> aligned_lowp_dvec3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 components vector of low double-precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision. </p>
+
+<p>Definition at line <a class="el" href="a00108_source.html#l00155">155</a> of file <a class="el" href="a00108_source.html">gtc/type_aligned.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gad69bf7c406a3cec994307473cb3da032"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec2<int, aligned_lowp> aligned_lowp_ivec2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 components vector of low precision signed integer numbers. </p>
+<p>There is no guarantee on the actual precision. </p>
+
+<p>Definition at line <a class="el" href="a00108_source.html#l00105">105</a> of file <a class="el" href="a00108_source.html">gtc/type_aligned.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaa8615b4ce4fdf176c631b34d2d31d81b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec3<int, aligned_lowp> aligned_lowp_ivec3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 components vector of low precision signed integer numbers. </p>
+<p>There is no guarantee on the actual precision. </p>
+
+<p>Definition at line <a class="el" href="a00108_source.html#l00167">167</a> of file <a class="el" href="a00108_source.html">gtc/type_aligned.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga15355ffc7ec7931b81ba76736b65e51a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec2<uint, aligned_lowp> aligned_lowp_uvec2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 components vector of low precision unsigned integer numbers. </p>
+<p>There is no guarantee on the actual precision. </p>
+
+<p>Definition at line <a class="el" href="a00108_source.html#l00117">117</a> of file <a class="el" href="a00108_source.html">gtc/type_aligned.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga48c85299d98e8248f547a2c07ea609cf"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec3<uint, aligned_lowp> aligned_lowp_uvec3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 components vector of low precision unsigned integer numbers. </p>
+<p>There is no guarantee on the actual precision. </p>
+
+<p>Definition at line <a class="el" href="a00108_source.html#l00179">179</a> of file <a class="el" href="a00108_source.html">gtc/type_aligned.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga3cfc38b4ea9b9bd1e9f02dcc14eab367"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec2<float, aligned_lowp> aligned_lowp_vec2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 components vector of low single-precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision. </p>
+
+<p>Definition at line <a class="el" href="a00108_source.html#l00081">81</a> of file <a class="el" href="a00108_source.html">gtc/type_aligned.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gae003f8f3071a8bc734a70c6d4978f968"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec3<float, aligned_lowp> aligned_lowp_vec3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 components vector of low single-precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision. </p>
+
+<p>Definition at line <a class="el" href="a00108_source.html#l00143">143</a> of file <a class="el" href="a00108_source.html">gtc/type_aligned.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga77d37d7c80c7faa2eecb3eba7677750e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec2<bool, aligned_mediump> aligned_mediump_bvec2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 components vector of medium precision bool numbers. </p>
+<p>There is no guarantee on the actual precision. </p>
+
+<p>Definition at line <a class="el" href="a00108_source.html#l00125">125</a> of file <a class="el" href="a00108_source.html">gtc/type_aligned.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaba56f2b76d320379cdf7c37e0d4b03bd"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec2<double, aligned_mediump> aligned_mediump_dvec2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 components vector of medium double-precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision. </p>
+
+<p>Definition at line <a class="el" href="a00108_source.html#l00089">89</a> of file <a class="el" href="a00108_source.html">gtc/type_aligned.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga22efc7f84ab79eef640e00fc59d07478"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec3<double, aligned_mediump> aligned_mediump_dvec3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 components vector of medium double-precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision. </p>
+
+<p>Definition at line <a class="el" href="a00108_source.html#l00151">151</a> of file <a class="el" href="a00108_source.html">gtc/type_aligned.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga389d12dcc8d57a444944a72646d17efa"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec2<int, aligned_mediump> aligned_mediump_ivec2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 components vector of medium precision signed integer numbers. </p>
+<p>There is no guarantee on the actual precision. </p>
+
+<p>Definition at line <a class="el" href="a00108_source.html#l00101">101</a> of file <a class="el" href="a00108_source.html">gtc/type_aligned.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga5b16f7e81555819bf0f80f4db4bc0b26"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec3<int, aligned_mediump> aligned_mediump_ivec3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 components vector of medium precision signed integer numbers. </p>
+<p>There is no guarantee on the actual precision. </p>
+
+<p>Definition at line <a class="el" href="a00108_source.html#l00163">163</a> of file <a class="el" href="a00108_source.html">gtc/type_aligned.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga88c56fde67f035d80b2d0d6d568af30b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec2<uint, aligned_mediump> aligned_mediump_uvec2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 components vector of medium precision unsigned integer numbers. </p>
+<p>There is no guarantee on the actual precision. </p>
+
+<p>Definition at line <a class="el" href="a00108_source.html#l00113">113</a> of file <a class="el" href="a00108_source.html">gtc/type_aligned.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaee29d3a28f634b03f0a20e79e600f5df"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec3<uint, aligned_mediump> aligned_mediump_uvec3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 components vector of medium precision unsigned integer numbers. </p>
+<p>There is no guarantee on the actual precision. </p>
+
+<p>Definition at line <a class="el" href="a00108_source.html#l00175">175</a> of file <a class="el" href="a00108_source.html">gtc/type_aligned.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga57549b1281d99ba1825b1ef0dae6227d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec2<float, aligned_mediump> aligned_mediump_vec2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>2 components vector of medium single-precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision. </p>
+
+<p>Definition at line <a class="el" href="a00108_source.html#l00077">77</a> of file <a class="el" href="a00108_source.html">gtc/type_aligned.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaed5d4dd2755cc5141a9533488edd9e82"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec3<float, aligned_mediump> aligned_mediump_vec3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>3 components vector of medium single-precision floating-point numbers. </p>
+<p>There is no guarantee on the actual precision. </p>
+
+<p>Definition at line <a class="el" href="a00108_source.html#l00139">139</a> of file <a class="el" href="a00108_source.html">gtc/type_aligned.hpp</a>.</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00177.html b/src/third_party/glm/doc/api/a00177.html
new file mode 100644
index 0000000..063f9dd
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00177.html
@@ -0,0 +1,3678 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTC_type_precision</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#typedef-members">Typedefs</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTC_type_precision<div class="ingroups"><a class="el" href="a00154.html">GTC Extensions (Stable)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:gabe6a542dd6c1d5ffd847f1b9b4c9c9b7"><td class="memItemLeft" align="right" valign="top">typedef highp_float32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gabe6a542dd6c1d5ffd847f1b9b4c9c9b7">f32</a></td></tr>
+<tr class="separator:gabe6a542dd6c1d5ffd847f1b9b4c9c9b7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1fedd5d29746afdaf2d3303a4442704e"><td class="memItemLeft" align="right" valign="top">typedef f32mat2x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga1fedd5d29746afdaf2d3303a4442704e">f32mat2</a></td></tr>
+<tr class="separator:ga1fedd5d29746afdaf2d3303a4442704e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf3a5016bf360977ce114deb2e01ae10a"><td class="memItemLeft" align="right" valign="top">typedef highp_f32mat2x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaf3a5016bf360977ce114deb2e01ae10a">f32mat2x2</a></td></tr>
+<tr class="separator:gaf3a5016bf360977ce114deb2e01ae10a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad5f1043adbe803928fe7bf1a90a1f767"><td class="memItemLeft" align="right" valign="top">typedef highp_f32mat2x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gad5f1043adbe803928fe7bf1a90a1f767">f32mat2x3</a></td></tr>
+<tr class="separator:gad5f1043adbe803928fe7bf1a90a1f767"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5ed667d0247cce477f013ea31982843d"><td class="memItemLeft" align="right" valign="top">typedef highp_f32mat2x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga5ed667d0247cce477f013ea31982843d">f32mat2x4</a></td></tr>
+<tr class="separator:ga5ed667d0247cce477f013ea31982843d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf4377997b299a287f7ab3358c9bd3e4c"><td class="memItemLeft" align="right" valign="top">typedef f32mat3x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaf4377997b299a287f7ab3358c9bd3e4c">f32mat3</a></td></tr>
+<tr class="separator:gaf4377997b299a287f7ab3358c9bd3e4c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8709a1ea268fa69bdf1e11616d7fbaf1"><td class="memItemLeft" align="right" valign="top">typedef highp_f32mat3x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga8709a1ea268fa69bdf1e11616d7fbaf1">f32mat3x2</a></td></tr>
+<tr class="separator:ga8709a1ea268fa69bdf1e11616d7fbaf1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1e4c52bb824ca16c6e2e5b03635669d0"><td class="memItemLeft" align="right" valign="top">typedef highp_f32mat3x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga1e4c52bb824ca16c6e2e5b03635669d0">f32mat3x3</a></td></tr>
+<tr class="separator:ga1e4c52bb824ca16c6e2e5b03635669d0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0100666c90176eaba80e49357d123c7f"><td class="memItemLeft" align="right" valign="top">typedef highp_f32mat3x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga0100666c90176eaba80e49357d123c7f">f32mat3x4</a></td></tr>
+<tr class="separator:ga0100666c90176eaba80e49357d123c7f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga797fa3ab16e04456174c36238e091341"><td class="memItemLeft" align="right" valign="top">typedef f32mat4x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga797fa3ab16e04456174c36238e091341">f32mat4</a></td></tr>
+<tr class="separator:ga797fa3ab16e04456174c36238e091341"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga27f897bdfe4bbded9481b8947553d1ff"><td class="memItemLeft" align="right" valign="top">typedef highp_f32mat4x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga27f897bdfe4bbded9481b8947553d1ff">f32mat4x2</a></td></tr>
+<tr class="separator:ga27f897bdfe4bbded9481b8947553d1ff"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa69e73ffb01a52499071391d395908fb"><td class="memItemLeft" align="right" valign="top">typedef highp_f32mat4x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaa69e73ffb01a52499071391d395908fb">f32mat4x3</a></td></tr>
+<tr class="separator:gaa69e73ffb01a52499071391d395908fb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafe2e08549805a7ded26da2a868bedbf5"><td class="memItemLeft" align="right" valign="top">typedef highp_f32mat4x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gafe2e08549805a7ded26da2a868bedbf5">f32mat4x4</a></td></tr>
+<tr class="separator:gafe2e08549805a7ded26da2a868bedbf5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6966c0cb4673928c9c9da2e91006d2c0"><td class="memItemLeft" align="right" valign="top">typedef highp_f32quat </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga6966c0cb4673928c9c9da2e91006d2c0">f32quat</a></td></tr>
+<tr class="separator:ga6966c0cb4673928c9c9da2e91006d2c0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3174a49dc84a977cad7012a62f4af02f"><td class="memItemLeft" align="right" valign="top">typedef highp_f32vec1 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga3174a49dc84a977cad7012a62f4af02f">f32vec1</a></td></tr>
+<tr class="separator:ga3174a49dc84a977cad7012a62f4af02f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae0cb53ea6fe3d977fe588ce423d57cc3"><td class="memItemLeft" align="right" valign="top">typedef highp_f32vec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gae0cb53ea6fe3d977fe588ce423d57cc3">f32vec2</a></td></tr>
+<tr class="separator:gae0cb53ea6fe3d977fe588ce423d57cc3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga19d5e0d4d3d6d226c9c6c0f39756f9ad"><td class="memItemLeft" align="right" valign="top">typedef highp_f32vec3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga19d5e0d4d3d6d226c9c6c0f39756f9ad">f32vec3</a></td></tr>
+<tr class="separator:ga19d5e0d4d3d6d226c9c6c0f39756f9ad"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaeb25dbb0261f82cb08da23e26d343704"><td class="memItemLeft" align="right" valign="top">typedef highp_f32vec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaeb25dbb0261f82cb08da23e26d343704">f32vec4</a></td></tr>
+<tr class="separator:gaeb25dbb0261f82cb08da23e26d343704"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1d794d240091678f602e8de225b8d8c9"><td class="memItemLeft" align="right" valign="top">typedef highp_float64_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga1d794d240091678f602e8de225b8d8c9">f64</a></td></tr>
+<tr class="separator:ga1d794d240091678f602e8de225b8d8c9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga74b9918c90ea60ce58b3979cde963a38"><td class="memItemLeft" align="right" valign="top">typedef f64mat2x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga74b9918c90ea60ce58b3979cde963a38">f64mat2</a></td></tr>
+<tr class="separator:ga74b9918c90ea60ce58b3979cde963a38"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaeb817419c76a0766c88713d2754e6cb3"><td class="memItemLeft" align="right" valign="top">typedef highp_f64mat2x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaeb817419c76a0766c88713d2754e6cb3">f64mat2x2</a></td></tr>
+<tr class="separator:gaeb817419c76a0766c88713d2754e6cb3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga87d256f4719417e311cd0ea14264678d"><td class="memItemLeft" align="right" valign="top">typedef highp_f64mat2x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga87d256f4719417e311cd0ea14264678d">f64mat2x3</a></td></tr>
+<tr class="separator:ga87d256f4719417e311cd0ea14264678d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafb18822e2eac88fa861a76cefd25d550"><td class="memItemLeft" align="right" valign="top">typedef highp_f64mat2x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gafb18822e2eac88fa861a76cefd25d550">f64mat2x4</a></td></tr>
+<tr class="separator:gafb18822e2eac88fa861a76cefd25d550"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga68894201dd511792a7af6cff7b5adf71"><td class="memItemLeft" align="right" valign="top">typedef f64mat3x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga68894201dd511792a7af6cff7b5adf71">f64mat3</a></td></tr>
+<tr class="separator:ga68894201dd511792a7af6cff7b5adf71"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga11e5684b10e098f573ff484c1a569ae2"><td class="memItemLeft" align="right" valign="top">typedef highp_f64mat3x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga11e5684b10e098f573ff484c1a569ae2">f64mat3x2</a></td></tr>
+<tr class="separator:ga11e5684b10e098f573ff484c1a569ae2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae1a5081181c96cc37ce9418f6e856cb6"><td class="memItemLeft" align="right" valign="top">typedef highp_f64mat3x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gae1a5081181c96cc37ce9418f6e856cb6">f64mat3x3</a></td></tr>
+<tr class="separator:gae1a5081181c96cc37ce9418f6e856cb6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad37a55a8ce1154083a721b4ecfd55293"><td class="memItemLeft" align="right" valign="top">typedef highp_f64mat3x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gad37a55a8ce1154083a721b4ecfd55293">f64mat3x4</a></td></tr>
+<tr class="separator:gad37a55a8ce1154083a721b4ecfd55293"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga219c683b0aa29f4f482f76d77d5c9e95"><td class="memItemLeft" align="right" valign="top">typedef f64mat4x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga219c683b0aa29f4f482f76d77d5c9e95">f64mat4</a></td></tr>
+<tr class="separator:ga219c683b0aa29f4f482f76d77d5c9e95"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa669dfb59031a441de19b34a92704d57"><td class="memItemLeft" align="right" valign="top">typedef highp_f64mat4x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaa669dfb59031a441de19b34a92704d57">f64mat4x2</a></td></tr>
+<tr class="separator:gaa669dfb59031a441de19b34a92704d57"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaba137814a509704937746cc1e82edc32"><td class="memItemLeft" align="right" valign="top">typedef highp_f64mat4x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaba137814a509704937746cc1e82edc32">f64mat4x3</a></td></tr>
+<tr class="separator:gaba137814a509704937746cc1e82edc32"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga489163773b021f1800a33cc2fa730c3b"><td class="memItemLeft" align="right" valign="top">typedef highp_f64mat4x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga489163773b021f1800a33cc2fa730c3b">f64mat4x4</a></td></tr>
+<tr class="separator:ga489163773b021f1800a33cc2fa730c3b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga14c583bd625eda8cf4935a14d5dd544d"><td class="memItemLeft" align="right" valign="top">typedef highp_f64quat </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga14c583bd625eda8cf4935a14d5dd544d">f64quat</a></td></tr>
+<tr class="separator:ga14c583bd625eda8cf4935a14d5dd544d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac5b04f32ae3084a9131a0851e7f4cfae"><td class="memItemLeft" align="right" valign="top">typedef highp_f64vec1 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gac5b04f32ae3084a9131a0851e7f4cfae">f64vec1</a></td></tr>
+<tr class="separator:gac5b04f32ae3084a9131a0851e7f4cfae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafaad77b464b5a35626c31205ac6780e3"><td class="memItemLeft" align="right" valign="top">typedef highp_f64vec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gafaad77b464b5a35626c31205ac6780e3">f64vec2</a></td></tr>
+<tr class="separator:gafaad77b464b5a35626c31205ac6780e3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafacc3614bb1136a7756293e67d34de22"><td class="memItemLeft" align="right" valign="top">typedef highp_f64vec3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gafacc3614bb1136a7756293e67d34de22">f64vec3</a></td></tr>
+<tr class="separator:gafacc3614bb1136a7756293e67d34de22"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8723186104dc02eb85da386105fba75f"><td class="memItemLeft" align="right" valign="top">typedef highp_f64vec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga8723186104dc02eb85da386105fba75f">f64vec4</a></td></tr>
+<tr class="separator:ga8723186104dc02eb85da386105fba75f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad3c127f8bf8d7d4e738037c257abb5b1"><td class="memItemLeft" align="right" valign="top">typedef float </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gad3c127f8bf8d7d4e738037c257abb5b1">float32</a></td></tr>
+<tr class="separator:gad3c127f8bf8d7d4e738037c257abb5b1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga41d579d81c3d98edd0532244fa02da77"><td class="memItemLeft" align="right" valign="top">typedef highp_float32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga41d579d81c3d98edd0532244fa02da77">float32_t</a></td></tr>
+<tr class="separator:ga41d579d81c3d98edd0532244fa02da77"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab5596d48586414c91ccb270962dc14d3"><td class="memItemLeft" align="right" valign="top">typedef double </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gab5596d48586414c91ccb270962dc14d3">float64</a></td></tr>
+<tr class="separator:gab5596d48586414c91ccb270962dc14d3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6957c7b22f405683bb276554ca40dc37"><td class="memItemLeft" align="right" valign="top">typedef highp_float64_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga6957c7b22f405683bb276554ca40dc37">float64_t</a></td></tr>
+<tr class="separator:ga6957c7b22f405683bb276554ca40dc37"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gabb01d4ff646ee07241934b1a0cc0f985"><td class="memItemLeft" align="right" valign="top">typedef fmat2x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gabb01d4ff646ee07241934b1a0cc0f985">fmat2</a></td></tr>
+<tr class="separator:gabb01d4ff646ee07241934b1a0cc0f985"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga74ac2e71b650162d8f7cb2a70c2f6711"><td class="memItemLeft" align="right" valign="top">typedef highp_f32mat2x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga74ac2e71b650162d8f7cb2a70c2f6711">fmat2x2</a></td></tr>
+<tr class="separator:ga74ac2e71b650162d8f7cb2a70c2f6711"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf17b2604c0d92bffb92375d8aa588756"><td class="memItemLeft" align="right" valign="top">typedef highp_f32mat2x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaf17b2604c0d92bffb92375d8aa588756">fmat2x3</a></td></tr>
+<tr class="separator:gaf17b2604c0d92bffb92375d8aa588756"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga709c97c20efa24ff1d9e83cd437b8ed5"><td class="memItemLeft" align="right" valign="top">typedef highp_f32mat2x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga709c97c20efa24ff1d9e83cd437b8ed5">fmat2x4</a></td></tr>
+<tr class="separator:ga709c97c20efa24ff1d9e83cd437b8ed5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5165fbee2d78f342950265b69a07353d"><td class="memItemLeft" align="right" valign="top">typedef fmat3x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga5165fbee2d78f342950265b69a07353d">fmat3</a></td></tr>
+<tr class="separator:ga5165fbee2d78f342950265b69a07353d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9f20af6e8eca2abdcde08408948cc1ca"><td class="memItemLeft" align="right" valign="top">typedef highp_f32mat3x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga9f20af6e8eca2abdcde08408948cc1ca">fmat3x2</a></td></tr>
+<tr class="separator:ga9f20af6e8eca2abdcde08408948cc1ca"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad339e25c32fe6665acf028f26c1b3e22"><td class="memItemLeft" align="right" valign="top">typedef highp_f32mat3x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gad339e25c32fe6665acf028f26c1b3e22">fmat3x3</a></td></tr>
+<tr class="separator:gad339e25c32fe6665acf028f26c1b3e22"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab04bc97371cb6b5f54b3688e0c81578b"><td class="memItemLeft" align="right" valign="top">typedef highp_f32mat3x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gab04bc97371cb6b5f54b3688e0c81578b">fmat3x4</a></td></tr>
+<tr class="separator:gab04bc97371cb6b5f54b3688e0c81578b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab3f31d867df4874e42172ebf188a3ebd"><td class="memItemLeft" align="right" valign="top">typedef fmat4x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gab3f31d867df4874e42172ebf188a3ebd">fmat4</a></td></tr>
+<tr class="separator:gab3f31d867df4874e42172ebf188a3ebd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab0082a25f19f02d2d0af0fcbe5ead732"><td class="memItemLeft" align="right" valign="top">typedef highp_f32mat4x2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gab0082a25f19f02d2d0af0fcbe5ead732">fmat4x2</a></td></tr>
+<tr class="separator:gab0082a25f19f02d2d0af0fcbe5ead732"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1a11c170f030ab34ddf037714e936cba"><td class="memItemLeft" align="right" valign="top">typedef highp_f32mat4x3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga1a11c170f030ab34ddf037714e936cba">fmat4x3</a></td></tr>
+<tr class="separator:ga1a11c170f030ab34ddf037714e936cba"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gabd79752ff357d83b49136b6299ea62d9"><td class="memItemLeft" align="right" valign="top">typedef highp_f32mat4x4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gabd79752ff357d83b49136b6299ea62d9">fmat4x4</a></td></tr>
+<tr class="separator:gabd79752ff357d83b49136b6299ea62d9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga10d8bd3c923a5386efcf25a4117fd84f"><td class="memItemLeft" align="right" valign="top">typedef highp_f32vec1 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga10d8bd3c923a5386efcf25a4117fd84f">fvec1</a></td></tr>
+<tr class="separator:ga10d8bd3c923a5386efcf25a4117fd84f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf9f4173dd9e8b2d0b663c6f80ed09ff6"><td class="memItemLeft" align="right" valign="top">typedef highp_f32vec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaf9f4173dd9e8b2d0b663c6f80ed09ff6">fvec2</a></td></tr>
+<tr class="separator:gaf9f4173dd9e8b2d0b663c6f80ed09ff6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4ef2d77dcab241b1ef83f09edb2f1084"><td class="memItemLeft" align="right" valign="top">typedef highp_f32vec3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga4ef2d77dcab241b1ef83f09edb2f1084">fvec3</a></td></tr>
+<tr class="separator:ga4ef2d77dcab241b1ef83f09edb2f1084"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga981b63d5c5f7233a29364e0a968d139b"><td class="memItemLeft" align="right" valign="top">typedef highp_f32vec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga981b63d5c5f7233a29364e0a968d139b">fvec4</a></td></tr>
+<tr class="separator:ga981b63d5c5f7233a29364e0a968d139b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0336abc2604dd2c20c30e036454b64f8"><td class="memItemLeft" align="right" valign="top">typedef detail::int16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga0336abc2604dd2c20c30e036454b64f8">highp_i16</a></td></tr>
+<tr class="separator:ga0336abc2604dd2c20c30e036454b64f8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga727675ac6b5d2fc699520e0059735e25"><td class="memItemLeft" align="right" valign="top">typedef detail::int32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga727675ac6b5d2fc699520e0059735e25">highp_i32</a></td></tr>
+<tr class="separator:ga727675ac6b5d2fc699520e0059735e25"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac25db6d2b1e2a0f351b77ba3409ac4cd"><td class="memItemLeft" align="right" valign="top">typedef detail::int64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gac25db6d2b1e2a0f351b77ba3409ac4cd">highp_i64</a></td></tr>
+<tr class="separator:gac25db6d2b1e2a0f351b77ba3409ac4cd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gacb88796f2d08ef253d0345aff20c3aee"><td class="memItemLeft" align="right" valign="top">typedef detail::int8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gacb88796f2d08ef253d0345aff20c3aee">highp_i8</a></td></tr>
+<tr class="separator:gacb88796f2d08ef253d0345aff20c3aee"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5fde0fa4a3852a9dd5d637a92ee74718"><td class="memItemLeft" align="right" valign="top">typedef detail::int16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga5fde0fa4a3852a9dd5d637a92ee74718">highp_int16</a></td></tr>
+<tr class="separator:ga5fde0fa4a3852a9dd5d637a92ee74718"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gacaea06d0a79ef3172e887a7a6ba434ff"><td class="memItemLeft" align="right" valign="top">typedef detail::int16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gacaea06d0a79ef3172e887a7a6ba434ff">highp_int16_t</a></td></tr>
+<tr class="separator:gacaea06d0a79ef3172e887a7a6ba434ff"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga84ed04b4e0de18c977e932d617e7c223"><td class="memItemLeft" align="right" valign="top">typedef detail::int32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga84ed04b4e0de18c977e932d617e7c223">highp_int32</a></td></tr>
+<tr class="separator:ga84ed04b4e0de18c977e932d617e7c223"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2c71c8bd9e2fe7d2e93ca250d8b6157f"><td class="memItemLeft" align="right" valign="top">typedef detail::int32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga2c71c8bd9e2fe7d2e93ca250d8b6157f">highp_int32_t</a></td></tr>
+<tr class="separator:ga2c71c8bd9e2fe7d2e93ca250d8b6157f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga226a8d52b4e3f77aaa6231135e886aac"><td class="memItemLeft" align="right" valign="top">typedef detail::int64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga226a8d52b4e3f77aaa6231135e886aac">highp_int64</a></td></tr>
+<tr class="separator:ga226a8d52b4e3f77aaa6231135e886aac"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga73c6abb280a45feeff60f9accaee91f3"><td class="memItemLeft" align="right" valign="top">typedef detail::int64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga73c6abb280a45feeff60f9accaee91f3">highp_int64_t</a></td></tr>
+<tr class="separator:ga73c6abb280a45feeff60f9accaee91f3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad0549c902a96a7164e4ac858d5f39dbf"><td class="memItemLeft" align="right" valign="top">typedef detail::int8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gad0549c902a96a7164e4ac858d5f39dbf">highp_int8</a></td></tr>
+<tr class="separator:gad0549c902a96a7164e4ac858d5f39dbf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1085c50dd8fbeb5e7e609b1c127492a5"><td class="memItemLeft" align="right" valign="top">typedef detail::int8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga1085c50dd8fbeb5e7e609b1c127492a5">highp_int8_t</a></td></tr>
+<tr class="separator:ga1085c50dd8fbeb5e7e609b1c127492a5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8e62c883d13f47015f3b70ed88751369"><td class="memItemLeft" align="right" valign="top">typedef detail::uint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga8e62c883d13f47015f3b70ed88751369">highp_u16</a></td></tr>
+<tr class="separator:ga8e62c883d13f47015f3b70ed88751369"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7a6f1929464dcc680b16381a4ee5f2cf"><td class="memItemLeft" align="right" valign="top">typedef detail::uint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga7a6f1929464dcc680b16381a4ee5f2cf">highp_u32</a></td></tr>
+<tr class="separator:ga7a6f1929464dcc680b16381a4ee5f2cf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0c181fdf06a309691999926b6690c969"><td class="memItemLeft" align="right" valign="top">typedef detail::uint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga0c181fdf06a309691999926b6690c969">highp_u64</a></td></tr>
+<tr class="separator:ga0c181fdf06a309691999926b6690c969"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gacd1259f3a9e8d2a9df5be2d74322ef9c"><td class="memItemLeft" align="right" valign="top">typedef detail::uint8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gacd1259f3a9e8d2a9df5be2d74322ef9c">highp_u8</a></td></tr>
+<tr class="separator:gacd1259f3a9e8d2a9df5be2d74322ef9c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga746dc6da204f5622e395f492997dbf57"><td class="memItemLeft" align="right" valign="top">typedef detail::uint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga746dc6da204f5622e395f492997dbf57">highp_uint16</a></td></tr>
+<tr class="separator:ga746dc6da204f5622e395f492997dbf57"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gacf54c3330ef60aa3d16cb676c7bcb8c7"><td class="memItemLeft" align="right" valign="top">typedef detail::uint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gacf54c3330ef60aa3d16cb676c7bcb8c7">highp_uint16_t</a></td></tr>
+<tr class="separator:gacf54c3330ef60aa3d16cb676c7bcb8c7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga256b12b650c3f2fb86878fd1c5db8bc3"><td class="memItemLeft" align="right" valign="top">typedef detail::uint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga256b12b650c3f2fb86878fd1c5db8bc3">highp_uint32</a></td></tr>
+<tr class="separator:ga256b12b650c3f2fb86878fd1c5db8bc3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae978599c9711ac263ba732d4ac225b0e"><td class="memItemLeft" align="right" valign="top">typedef detail::uint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gae978599c9711ac263ba732d4ac225b0e">highp_uint32_t</a></td></tr>
+<tr class="separator:gae978599c9711ac263ba732d4ac225b0e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa38d732f5d4a7bc42a1b43b9d3c141ce"><td class="memItemLeft" align="right" valign="top">typedef detail::uint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaa38d732f5d4a7bc42a1b43b9d3c141ce">highp_uint64</a></td></tr>
+<tr class="separator:gaa38d732f5d4a7bc42a1b43b9d3c141ce"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa46172d7dc1c7ffe3e78107ff88adf08"><td class="memItemLeft" align="right" valign="top">typedef detail::uint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaa46172d7dc1c7ffe3e78107ff88adf08">highp_uint64_t</a></td></tr>
+<tr class="separator:gaa46172d7dc1c7ffe3e78107ff88adf08"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga97432f9979e73e66567361fd01e4cffb"><td class="memItemLeft" align="right" valign="top">typedef detail::uint8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga97432f9979e73e66567361fd01e4cffb">highp_uint8</a></td></tr>
+<tr class="separator:ga97432f9979e73e66567361fd01e4cffb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac4e00a26a2adb5f2c0a7096810df29e5"><td class="memItemLeft" align="right" valign="top">typedef detail::uint8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gac4e00a26a2adb5f2c0a7096810df29e5">highp_uint8_t</a></td></tr>
+<tr class="separator:gac4e00a26a2adb5f2c0a7096810df29e5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3ab5fe184343d394fb6c2723c3ee3699"><td class="memItemLeft" align="right" valign="top">typedef detail::int16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga3ab5fe184343d394fb6c2723c3ee3699">i16</a></td></tr>
+<tr class="separator:ga3ab5fe184343d394fb6c2723c3ee3699"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga28f03a39ac56c70f9bf3ada11cb60e3b"><td class="memItemLeft" align="right" valign="top">typedef highp_i16vec1 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga28f03a39ac56c70f9bf3ada11cb60e3b">i16vec1</a></td></tr>
+<tr class="separator:ga28f03a39ac56c70f9bf3ada11cb60e3b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga110bec18ca44c41c76c3c9e4d7b5bd79"><td class="memItemLeft" align="right" valign="top">typedef highp_i16vec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga110bec18ca44c41c76c3c9e4d7b5bd79">i16vec2</a></td></tr>
+<tr class="separator:ga110bec18ca44c41c76c3c9e4d7b5bd79"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga973b226a9914db682c9372fc761fb535"><td class="memItemLeft" align="right" valign="top">typedef highp_i16vec3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga973b226a9914db682c9372fc761fb535">i16vec3</a></td></tr>
+<tr class="separator:ga973b226a9914db682c9372fc761fb535"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad73e5e905dcf2d8cab002b4ab46e9426"><td class="memItemLeft" align="right" valign="top">typedef highp_i16vec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gad73e5e905dcf2d8cab002b4ab46e9426">i16vec4</a></td></tr>
+<tr class="separator:gad73e5e905dcf2d8cab002b4ab46e9426"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga96faea43ac5f875d2d3ffbf8d213e3eb"><td class="memItemLeft" align="right" valign="top">typedef detail::int32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga96faea43ac5f875d2d3ffbf8d213e3eb">i32</a></td></tr>
+<tr class="separator:ga96faea43ac5f875d2d3ffbf8d213e3eb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4cca6bbd117c45f046291fc8e9d03765"><td class="memItemLeft" align="right" valign="top">typedef highp_i32vec1 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga4cca6bbd117c45f046291fc8e9d03765">i32vec1</a></td></tr>
+<tr class="separator:ga4cca6bbd117c45f046291fc8e9d03765"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3c12cef4135603fd77d8fda85808730c"><td class="memItemLeft" align="right" valign="top">typedef highp_i32vec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga3c12cef4135603fd77d8fda85808730c">i32vec2</a></td></tr>
+<tr class="separator:ga3c12cef4135603fd77d8fda85808730c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga40cd3f391c03512f158d10a70062264e"><td class="memItemLeft" align="right" valign="top">typedef highp_i32vec3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga40cd3f391c03512f158d10a70062264e">i32vec3</a></td></tr>
+<tr class="separator:ga40cd3f391c03512f158d10a70062264e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae3364a8090e7e1408056e00403dfecab"><td class="memItemLeft" align="right" valign="top">typedef highp_i32vec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gae3364a8090e7e1408056e00403dfecab">i32vec4</a></td></tr>
+<tr class="separator:gae3364a8090e7e1408056e00403dfecab"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gadb997e409103d4da18abd837e636a496"><td class="memItemLeft" align="right" valign="top">typedef detail::int64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gadb997e409103d4da18abd837e636a496">i64</a></td></tr>
+<tr class="separator:gadb997e409103d4da18abd837e636a496"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5b4a3e499ee165efc0dc05add9c48235"><td class="memItemLeft" align="right" valign="top">typedef highp_i64vec1 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga5b4a3e499ee165efc0dc05add9c48235">i64vec1</a></td></tr>
+<tr class="separator:ga5b4a3e499ee165efc0dc05add9c48235"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gade69872a31f066e5ae212f1af6008edb"><td class="memItemLeft" align="right" valign="top">typedef highp_i64vec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gade69872a31f066e5ae212f1af6008edb">i64vec2</a></td></tr>
+<tr class="separator:gade69872a31f066e5ae212f1af6008edb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9ece7c77c7bca7a6b824ef9c600f5e5e"><td class="memItemLeft" align="right" valign="top">typedef highp_i64vec3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga9ece7c77c7bca7a6b824ef9c600f5e5e">i64vec3</a></td></tr>
+<tr class="separator:ga9ece7c77c7bca7a6b824ef9c600f5e5e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9756e45c8f80329257f3cbdabc3bd73c"><td class="memItemLeft" align="right" valign="top">typedef highp_i64vec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga9756e45c8f80329257f3cbdabc3bd73c">i64vec4</a></td></tr>
+<tr class="separator:ga9756e45c8f80329257f3cbdabc3bd73c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga302ec977b0c0c3ea245b6c9275495355"><td class="memItemLeft" align="right" valign="top">typedef detail::int8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga302ec977b0c0c3ea245b6c9275495355">i8</a></td></tr>
+<tr class="separator:ga302ec977b0c0c3ea245b6c9275495355"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab2329c5c14ff5a03b1ddec039e2c7409"><td class="memItemLeft" align="right" valign="top">typedef highp_i8vec1 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gab2329c5c14ff5a03b1ddec039e2c7409">i8vec1</a></td></tr>
+<tr class="separator:gab2329c5c14ff5a03b1ddec039e2c7409"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6414484477e4c1b4863cf91af8fd4185"><td class="memItemLeft" align="right" valign="top">typedef highp_i8vec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga6414484477e4c1b4863cf91af8fd4185">i8vec2</a></td></tr>
+<tr class="separator:ga6414484477e4c1b4863cf91af8fd4185"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf4b5993e794e252607f91535b62a7e0c"><td class="memItemLeft" align="right" valign="top">typedef highp_i8vec3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaf4b5993e794e252607f91535b62a7e0c">i8vec3</a></td></tr>
+<tr class="separator:gaf4b5993e794e252607f91535b62a7e0c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga50e58885aee2cf01bb3ba472c5b1697e"><td class="memItemLeft" align="right" valign="top">typedef highp_i8vec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga50e58885aee2cf01bb3ba472c5b1697e">i8vec4</a></td></tr>
+<tr class="separator:ga50e58885aee2cf01bb3ba472c5b1697e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga302041c186d0d028bea31b711fe16759"><td class="memItemLeft" align="right" valign="top">typedef detail::int16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga302041c186d0d028bea31b711fe16759">int16</a></td></tr>
+<tr class="separator:ga302041c186d0d028bea31b711fe16759"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae8f5e3e964ca2ae240adc2c0d74adede"><td class="memItemLeft" align="right" valign="top">typedef detail::int16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gae8f5e3e964ca2ae240adc2c0d74adede">int16_t</a></td></tr>
+<tr class="separator:gae8f5e3e964ca2ae240adc2c0d74adede"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8df669f4e7698dfe0c0354d92578d74f"><td class="memItemLeft" align="right" valign="top">typedef detail::int32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga8df669f4e7698dfe0c0354d92578d74f">int32</a></td></tr>
+<tr class="separator:ga8df669f4e7698dfe0c0354d92578d74f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga042ef09ff2f0cb24a36f541bcb3a3710"><td class="memItemLeft" align="right" valign="top">typedef detail::int32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga042ef09ff2f0cb24a36f541bcb3a3710">int32_t</a></td></tr>
+<tr class="separator:ga042ef09ff2f0cb24a36f541bcb3a3710"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaff5189f97f9e842d9636a0f240001b2e"><td class="memItemLeft" align="right" valign="top">typedef detail::int64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaff5189f97f9e842d9636a0f240001b2e">int64</a></td></tr>
+<tr class="separator:gaff5189f97f9e842d9636a0f240001b2e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga322a7d7d2c2c68994dc872a33de63c61"><td class="memItemLeft" align="right" valign="top">typedef detail::int64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga322a7d7d2c2c68994dc872a33de63c61">int64_t</a></td></tr>
+<tr class="separator:ga322a7d7d2c2c68994dc872a33de63c61"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga41c6189f6485c2825d60fdc835b3a2b0"><td class="memItemLeft" align="right" valign="top">typedef detail::int8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga41c6189f6485c2825d60fdc835b3a2b0">int8</a></td></tr>
+<tr class="separator:ga41c6189f6485c2825d60fdc835b3a2b0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4bf09d8838a86866b39ee6e109341645"><td class="memItemLeft" align="right" valign="top">typedef detail::int8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga4bf09d8838a86866b39ee6e109341645">int8_t</a></td></tr>
+<tr class="separator:ga4bf09d8838a86866b39ee6e109341645"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga392b673fd10847bfb78fb808c6cf8ff7"><td class="memItemLeft" align="right" valign="top">typedef detail::int16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga392b673fd10847bfb78fb808c6cf8ff7">lowp_i16</a></td></tr>
+<tr class="separator:ga392b673fd10847bfb78fb808c6cf8ff7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7ff73a45cea9613ebf1a9fad0b9f82ac"><td class="memItemLeft" align="right" valign="top">typedef detail::int32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga7ff73a45cea9613ebf1a9fad0b9f82ac">lowp_i32</a></td></tr>
+<tr class="separator:ga7ff73a45cea9613ebf1a9fad0b9f82ac"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga354736e0c645099cd44c42fb2f87c2b8"><td class="memItemLeft" align="right" valign="top">typedef detail::int64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga354736e0c645099cd44c42fb2f87c2b8">lowp_i64</a></td></tr>
+<tr class="separator:ga354736e0c645099cd44c42fb2f87c2b8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga552a6bde5e75984efb0f863278da2e54"><td class="memItemLeft" align="right" valign="top">typedef detail::int8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga552a6bde5e75984efb0f863278da2e54">lowp_i8</a></td></tr>
+<tr class="separator:ga552a6bde5e75984efb0f863278da2e54"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga698e36b01167fc0f037889334dce8def"><td class="memItemLeft" align="right" valign="top">typedef detail::int16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga698e36b01167fc0f037889334dce8def">lowp_int16</a></td></tr>
+<tr class="separator:ga698e36b01167fc0f037889334dce8def"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8b2cd8d31eb345b2d641d9261c38db1a"><td class="memItemLeft" align="right" valign="top">typedef detail::int16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga8b2cd8d31eb345b2d641d9261c38db1a">lowp_int16_t</a></td></tr>
+<tr class="separator:ga8b2cd8d31eb345b2d641d9261c38db1a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga864aabca5f3296e176e0c3ed9cc16b02"><td class="memItemLeft" align="right" valign="top">typedef detail::int32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga864aabca5f3296e176e0c3ed9cc16b02">lowp_int32</a></td></tr>
+<tr class="separator:ga864aabca5f3296e176e0c3ed9cc16b02"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0350631d35ff800e6133ac6243b13cbc"><td class="memItemLeft" align="right" valign="top">typedef detail::int32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga0350631d35ff800e6133ac6243b13cbc">lowp_int32_t</a></td></tr>
+<tr class="separator:ga0350631d35ff800e6133ac6243b13cbc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf645b1a60203b39c0207baff5e3d8c3c"><td class="memItemLeft" align="right" valign="top">typedef detail::int64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaf645b1a60203b39c0207baff5e3d8c3c">lowp_int64</a></td></tr>
+<tr class="separator:gaf645b1a60203b39c0207baff5e3d8c3c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaebf341fc4a5be233f7dde962c2e33847"><td class="memItemLeft" align="right" valign="top">typedef detail::int64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaebf341fc4a5be233f7dde962c2e33847">lowp_int64_t</a></td></tr>
+<tr class="separator:gaebf341fc4a5be233f7dde962c2e33847"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga760bcf26fdb23a2c3ecad3c928a19ae6"><td class="memItemLeft" align="right" valign="top">typedef detail::int8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga760bcf26fdb23a2c3ecad3c928a19ae6">lowp_int8</a></td></tr>
+<tr class="separator:ga760bcf26fdb23a2c3ecad3c928a19ae6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga119c41d73fe9977358174eb3ac1035a3"><td class="memItemLeft" align="right" valign="top">typedef detail::int8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga119c41d73fe9977358174eb3ac1035a3">lowp_int8_t</a></td></tr>
+<tr class="separator:ga119c41d73fe9977358174eb3ac1035a3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga504ce1631cb2ac02fcf1d44d8c2aa126"><td class="memItemLeft" align="right" valign="top">typedef detail::uint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga504ce1631cb2ac02fcf1d44d8c2aa126">lowp_u16</a></td></tr>
+<tr class="separator:ga504ce1631cb2ac02fcf1d44d8c2aa126"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4f072ada9552e1e480bbb3b1acde5250"><td class="memItemLeft" align="right" valign="top">typedef detail::uint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga4f072ada9552e1e480bbb3b1acde5250">lowp_u32</a></td></tr>
+<tr class="separator:ga4f072ada9552e1e480bbb3b1acde5250"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga30069d1f02b19599cbfadf98c23ac6ed"><td class="memItemLeft" align="right" valign="top">typedef detail::uint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga30069d1f02b19599cbfadf98c23ac6ed">lowp_u64</a></td></tr>
+<tr class="separator:ga30069d1f02b19599cbfadf98c23ac6ed"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1b09f03da7ac43055c68a349d5445083"><td class="memItemLeft" align="right" valign="top">typedef detail::uint8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga1b09f03da7ac43055c68a349d5445083">lowp_u8</a></td></tr>
+<tr class="separator:ga1b09f03da7ac43055c68a349d5445083"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad68bfd9f881856fc863a6ebca0b67f78"><td class="memItemLeft" align="right" valign="top">typedef detail::uint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gad68bfd9f881856fc863a6ebca0b67f78">lowp_uint16</a></td></tr>
+<tr class="separator:gad68bfd9f881856fc863a6ebca0b67f78"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga91c4815f93177eb423362fd296a87e9f"><td class="memItemLeft" align="right" valign="top">typedef detail::uint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga91c4815f93177eb423362fd296a87e9f">lowp_uint16_t</a></td></tr>
+<tr class="separator:ga91c4815f93177eb423362fd296a87e9f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa6a5b461bbf5fe20982472aa51896d4b"><td class="memItemLeft" align="right" valign="top">typedef detail::uint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaa6a5b461bbf5fe20982472aa51896d4b">lowp_uint32</a></td></tr>
+<tr class="separator:gaa6a5b461bbf5fe20982472aa51896d4b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf1b735b4b1145174f4e4167d13778f9b"><td class="memItemLeft" align="right" valign="top">typedef detail::uint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaf1b735b4b1145174f4e4167d13778f9b">lowp_uint32_t</a></td></tr>
+<tr class="separator:gaf1b735b4b1145174f4e4167d13778f9b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa212b805736a759998e312cbdd550fae"><td class="memItemLeft" align="right" valign="top">typedef detail::uint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaa212b805736a759998e312cbdd550fae">lowp_uint64</a></td></tr>
+<tr class="separator:gaa212b805736a759998e312cbdd550fae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8dd3a3281ae5c970ffe0c41d538aa153"><td class="memItemLeft" align="right" valign="top">typedef detail::uint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga8dd3a3281ae5c970ffe0c41d538aa153">lowp_uint64_t</a></td></tr>
+<tr class="separator:ga8dd3a3281ae5c970ffe0c41d538aa153"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf49470869e9be2c059629b250619804e"><td class="memItemLeft" align="right" valign="top">typedef detail::uint8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaf49470869e9be2c059629b250619804e">lowp_uint8</a></td></tr>
+<tr class="separator:gaf49470869e9be2c059629b250619804e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga667b2ece2b258be898812dc2177995d1"><td class="memItemLeft" align="right" valign="top">typedef detail::uint8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga667b2ece2b258be898812dc2177995d1">lowp_uint8_t</a></td></tr>
+<tr class="separator:ga667b2ece2b258be898812dc2177995d1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga62a17cddeb4dffb4e18fe3aea23f051a"><td class="memItemLeft" align="right" valign="top">typedef detail::int16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga62a17cddeb4dffb4e18fe3aea23f051a">mediump_i16</a></td></tr>
+<tr class="separator:ga62a17cddeb4dffb4e18fe3aea23f051a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf5e94bf2a20af7601787c154751dc2e1"><td class="memItemLeft" align="right" valign="top">typedef detail::int32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaf5e94bf2a20af7601787c154751dc2e1">mediump_i32</a></td></tr>
+<tr class="separator:gaf5e94bf2a20af7601787c154751dc2e1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3ebcb1f6d8d8387253de8bccb058d77f"><td class="memItemLeft" align="right" valign="top">typedef detail::int64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga3ebcb1f6d8d8387253de8bccb058d77f">mediump_i64</a></td></tr>
+<tr class="separator:ga3ebcb1f6d8d8387253de8bccb058d77f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gacf1ded173e1e2d049c511d095b259e21"><td class="memItemLeft" align="right" valign="top">typedef detail::int8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gacf1ded173e1e2d049c511d095b259e21">mediump_i8</a></td></tr>
+<tr class="separator:gacf1ded173e1e2d049c511d095b259e21"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gadff3608baa4b5bd3ed28f95c1c2c345d"><td class="memItemLeft" align="right" valign="top">typedef detail::int16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gadff3608baa4b5bd3ed28f95c1c2c345d">mediump_int16</a></td></tr>
+<tr class="separator:gadff3608baa4b5bd3ed28f95c1c2c345d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga80e72fe94c88498537e8158ba7591c54"><td class="memItemLeft" align="right" valign="top">typedef detail::int16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga80e72fe94c88498537e8158ba7591c54">mediump_int16_t</a></td></tr>
+<tr class="separator:ga80e72fe94c88498537e8158ba7591c54"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5244cef85d6e870e240c76428a262ae8"><td class="memItemLeft" align="right" valign="top">typedef detail::int32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga5244cef85d6e870e240c76428a262ae8">mediump_int32</a></td></tr>
+<tr class="separator:ga5244cef85d6e870e240c76428a262ae8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga26fc7ced1ad7ca5024f1c973c8dc9180"><td class="memItemLeft" align="right" valign="top">typedef detail::int32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga26fc7ced1ad7ca5024f1c973c8dc9180">mediump_int32_t</a></td></tr>
+<tr class="separator:ga26fc7ced1ad7ca5024f1c973c8dc9180"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7b968f2b86a0442a89c7359171e1d866"><td class="memItemLeft" align="right" valign="top">typedef detail::int64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga7b968f2b86a0442a89c7359171e1d866">mediump_int64</a></td></tr>
+<tr class="separator:ga7b968f2b86a0442a89c7359171e1d866"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac3bc41bcac61d1ba8f02a6f68ce23f64"><td class="memItemLeft" align="right" valign="top">typedef detail::int64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gac3bc41bcac61d1ba8f02a6f68ce23f64">mediump_int64_t</a></td></tr>
+<tr class="separator:gac3bc41bcac61d1ba8f02a6f68ce23f64"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6fbd69cbdaa44345bff923a2cf63de7e"><td class="memItemLeft" align="right" valign="top">typedef detail::int8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga6fbd69cbdaa44345bff923a2cf63de7e">mediump_int8</a></td></tr>
+<tr class="separator:ga6fbd69cbdaa44345bff923a2cf63de7e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6d7b3789ecb932c26430009478cac7ae"><td class="memItemLeft" align="right" valign="top">typedef detail::int8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga6d7b3789ecb932c26430009478cac7ae">mediump_int8_t</a></td></tr>
+<tr class="separator:ga6d7b3789ecb932c26430009478cac7ae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9df98857be695d5a30cb30f5bfa38a80"><td class="memItemLeft" align="right" valign="top">typedef detail::uint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga9df98857be695d5a30cb30f5bfa38a80">mediump_u16</a></td></tr>
+<tr class="separator:ga9df98857be695d5a30cb30f5bfa38a80"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1bd0e914158bf03135f8a317de6debe9"><td class="memItemLeft" align="right" valign="top">typedef detail::uint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga1bd0e914158bf03135f8a317de6debe9">mediump_u32</a></td></tr>
+<tr class="separator:ga1bd0e914158bf03135f8a317de6debe9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2af9490085ae3bdf36a544e9dd073610"><td class="memItemLeft" align="right" valign="top">typedef detail::uint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga2af9490085ae3bdf36a544e9dd073610">mediump_u64</a></td></tr>
+<tr class="separator:ga2af9490085ae3bdf36a544e9dd073610"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad1213a22bbb9e4107f07eaa4956f8281"><td class="memItemLeft" align="right" valign="top">typedef detail::uint8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gad1213a22bbb9e4107f07eaa4956f8281">mediump_u8</a></td></tr>
+<tr class="separator:gad1213a22bbb9e4107f07eaa4956f8281"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2885a6c89916911e418c06bb76b9bdbb"><td class="memItemLeft" align="right" valign="top">typedef detail::uint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga2885a6c89916911e418c06bb76b9bdbb">mediump_uint16</a></td></tr>
+<tr class="separator:ga2885a6c89916911e418c06bb76b9bdbb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3963b1050fc65a383ee28e3f827b6e3e"><td class="memItemLeft" align="right" valign="top">typedef detail::uint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga3963b1050fc65a383ee28e3f827b6e3e">mediump_uint16_t</a></td></tr>
+<tr class="separator:ga3963b1050fc65a383ee28e3f827b6e3e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga34dd5ec1988c443bae80f1b20a8ade5f"><td class="memItemLeft" align="right" valign="top">typedef detail::uint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga34dd5ec1988c443bae80f1b20a8ade5f">mediump_uint32</a></td></tr>
+<tr class="separator:ga34dd5ec1988c443bae80f1b20a8ade5f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf4dae276fd29623950de14a6ca2586b5"><td class="memItemLeft" align="right" valign="top">typedef detail::uint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaf4dae276fd29623950de14a6ca2586b5">mediump_uint32_t</a></td></tr>
+<tr class="separator:gaf4dae276fd29623950de14a6ca2586b5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga30652709815ad9404272a31957daa59e"><td class="memItemLeft" align="right" valign="top">typedef detail::uint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga30652709815ad9404272a31957daa59e">mediump_uint64</a></td></tr>
+<tr class="separator:ga30652709815ad9404272a31957daa59e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9b170dd4a8f38448a2dc93987c7875e9"><td class="memItemLeft" align="right" valign="top">typedef detail::uint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga9b170dd4a8f38448a2dc93987c7875e9">mediump_uint64_t</a></td></tr>
+<tr class="separator:ga9b170dd4a8f38448a2dc93987c7875e9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1fa92a233b9110861cdbc8c2ccf0b5a3"><td class="memItemLeft" align="right" valign="top">typedef detail::uint8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga1fa92a233b9110861cdbc8c2ccf0b5a3">mediump_uint8</a></td></tr>
+<tr class="separator:ga1fa92a233b9110861cdbc8c2ccf0b5a3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gadfe65c78231039e90507770db50c98c7"><td class="memItemLeft" align="right" valign="top">typedef detail::uint8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gadfe65c78231039e90507770db50c98c7">mediump_uint8_t</a></td></tr>
+<tr class="separator:gadfe65c78231039e90507770db50c98c7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa2d7acc0adb536fab71fe261232a40ff"><td class="memItemLeft" align="right" valign="top">typedef detail::uint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaa2d7acc0adb536fab71fe261232a40ff">u16</a></td></tr>
+<tr class="separator:gaa2d7acc0adb536fab71fe261232a40ff"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaefa2ce8fbdbe89baffd262f46f2d5907"><td class="memItemLeft" align="right" valign="top">typedef highp_u16vec1 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaefa2ce8fbdbe89baffd262f46f2d5907">u16vec1</a></td></tr>
+<tr class="separator:gaefa2ce8fbdbe89baffd262f46f2d5907"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga426030555085ed6c39a54e73afbef962"><td class="memItemLeft" align="right" valign="top">typedef highp_u16vec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga426030555085ed6c39a54e73afbef962">u16vec2</a></td></tr>
+<tr class="separator:ga426030555085ed6c39a54e73afbef962"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7f5dbe417199277e449b8db0210acb71"><td class="memItemLeft" align="right" valign="top">typedef highp_u16vec3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga7f5dbe417199277e449b8db0210acb71">u16vec3</a></td></tr>
+<tr class="separator:ga7f5dbe417199277e449b8db0210acb71"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf524c9059f0342668d8eea359bcceaae"><td class="memItemLeft" align="right" valign="top">typedef highp_u16vec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaf524c9059f0342668d8eea359bcceaae">u16vec4</a></td></tr>
+<tr class="separator:gaf524c9059f0342668d8eea359bcceaae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8165913e068444f7842302d40ba897b9"><td class="memItemLeft" align="right" valign="top">typedef detail::uint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga8165913e068444f7842302d40ba897b9">u32</a></td></tr>
+<tr class="separator:ga8165913e068444f7842302d40ba897b9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga913a8bd51e4ebccd30ad488de3c18da9"><td class="memItemLeft" align="right" valign="top">typedef highp_u32vec1 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga913a8bd51e4ebccd30ad488de3c18da9">u32vec1</a></td></tr>
+<tr class="separator:ga913a8bd51e4ebccd30ad488de3c18da9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0741d40e2b0fea4f1c50cb325114f075"><td class="memItemLeft" align="right" valign="top">typedef highp_u32vec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga0741d40e2b0fea4f1c50cb325114f075">u32vec2</a></td></tr>
+<tr class="separator:ga0741d40e2b0fea4f1c50cb325114f075"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad9b52e1c271cb9c8bfae6365d3e38a23"><td class="memItemLeft" align="right" valign="top">typedef highp_u32vec3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gad9b52e1c271cb9c8bfae6365d3e38a23">u32vec3</a></td></tr>
+<tr class="separator:gad9b52e1c271cb9c8bfae6365d3e38a23"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga155ac7e9e454e2b1f73d11e1e28a0fd6"><td class="memItemLeft" align="right" valign="top">typedef highp_u32vec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga155ac7e9e454e2b1f73d11e1e28a0fd6">u32vec4</a></td></tr>
+<tr class="separator:ga155ac7e9e454e2b1f73d11e1e28a0fd6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf3f312156984c365e9f65620354da70b"><td class="memItemLeft" align="right" valign="top">typedef detail::uint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaf3f312156984c365e9f65620354da70b">u64</a></td></tr>
+<tr class="separator:gaf3f312156984c365e9f65620354da70b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga793c9293cc687a0e342396a377c5df77"><td class="memItemLeft" align="right" valign="top">typedef highp_u64vec1 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga793c9293cc687a0e342396a377c5df77">u64vec1</a></td></tr>
+<tr class="separator:ga793c9293cc687a0e342396a377c5df77"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2204827de9d4ee7fa92ef497093f7d6e"><td class="memItemLeft" align="right" valign="top">typedef highp_u64vec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga2204827de9d4ee7fa92ef497093f7d6e">u64vec2</a></td></tr>
+<tr class="separator:ga2204827de9d4ee7fa92ef497093f7d6e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3460933f040f59f0fedb29df1e9be71c"><td class="memItemLeft" align="right" valign="top">typedef highp_u64vec3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga3460933f040f59f0fedb29df1e9be71c">u64vec3</a></td></tr>
+<tr class="separator:ga3460933f040f59f0fedb29df1e9be71c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafb6ca34df28889a5db9d244aed375411"><td class="memItemLeft" align="right" valign="top">typedef highp_u64vec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gafb6ca34df28889a5db9d244aed375411">u64vec4</a></td></tr>
+<tr class="separator:gafb6ca34df28889a5db9d244aed375411"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaecc7082561fc9028b844b6cf3d305d36"><td class="memItemLeft" align="right" valign="top">typedef detail::uint8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gaecc7082561fc9028b844b6cf3d305d36">u8</a></td></tr>
+<tr class="separator:gaecc7082561fc9028b844b6cf3d305d36"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga92e0c191e5cc326255284d08be3af7c5"><td class="memItemLeft" align="right" valign="top">typedef highp_u8vec1 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga92e0c191e5cc326255284d08be3af7c5">u8vec1</a></td></tr>
+<tr class="separator:ga92e0c191e5cc326255284d08be3af7c5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga61667c99caf60ce6c48ebbbac72bd91d"><td class="memItemLeft" align="right" valign="top">typedef highp_u8vec2 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga61667c99caf60ce6c48ebbbac72bd91d">u8vec2</a></td></tr>
+<tr class="separator:ga61667c99caf60ce6c48ebbbac72bd91d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8ca60d0ba6d438892be6017f43747661"><td class="memItemLeft" align="right" valign="top">typedef highp_u8vec3 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga8ca60d0ba6d438892be6017f43747661">u8vec3</a></td></tr>
+<tr class="separator:ga8ca60d0ba6d438892be6017f43747661"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga114e005014d910bea07954eee24b7efb"><td class="memItemLeft" align="right" valign="top">typedef highp_u8vec4 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga114e005014d910bea07954eee24b7efb">u8vec4</a></td></tr>
+<tr class="separator:ga114e005014d910bea07954eee24b7efb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga13471cbbe74e4303a57f3743d007b74d"><td class="memItemLeft" align="right" valign="top">typedef detail::uint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga13471cbbe74e4303a57f3743d007b74d">uint16</a></td></tr>
+<tr class="separator:ga13471cbbe74e4303a57f3743d007b74d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga91f91f411080c37730856ff5887f5bcf"><td class="memItemLeft" align="right" valign="top">typedef detail::uint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga91f91f411080c37730856ff5887f5bcf">uint16_t</a></td></tr>
+<tr class="separator:ga91f91f411080c37730856ff5887f5bcf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5fa3ddcab56c789bc272ff5651faa12d"><td class="memItemLeft" align="right" valign="top">typedef detail::uint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga5fa3ddcab56c789bc272ff5651faa12d">uint32</a></td></tr>
+<tr class="separator:ga5fa3ddcab56c789bc272ff5651faa12d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2171d9dc1fefb1c82e2817f45b622eac"><td class="memItemLeft" align="right" valign="top">typedef detail::uint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga2171d9dc1fefb1c82e2817f45b622eac">uint32_t</a></td></tr>
+<tr class="separator:ga2171d9dc1fefb1c82e2817f45b622eac"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab630f76c26b50298187f7889104d4b9c"><td class="memItemLeft" align="right" valign="top">typedef detail::uint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#gab630f76c26b50298187f7889104d4b9c">uint64</a></td></tr>
+<tr class="separator:gab630f76c26b50298187f7889104d4b9c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3999d3e7ff22025c16ddb601e14dfdee"><td class="memItemLeft" align="right" valign="top">typedef detail::uint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga3999d3e7ff22025c16ddb601e14dfdee">uint64_t</a></td></tr>
+<tr class="separator:ga3999d3e7ff22025c16ddb601e14dfdee"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga36475e31b1992cfde54c1a6f5a148865"><td class="memItemLeft" align="right" valign="top">typedef detail::uint8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga36475e31b1992cfde54c1a6f5a148865">uint8</a></td></tr>
+<tr class="separator:ga36475e31b1992cfde54c1a6f5a148865"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga28d97808322d3c92186e4a0c067d7e8e"><td class="memItemLeft" align="right" valign="top">typedef detail::uint8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00177.html#ga28d97808322d3c92186e4a0c067d7e8e">uint8_t</a></td></tr>
+<tr class="separator:ga28d97808322d3c92186e4a0c067d7e8e"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Defines specific C++-based precision types. </p>
+<p><a class="el" href="a00158.html">Precision types</a> defines types based on GLSL's precision qualifiers. This extension defines types based on explicitly-sized C++ data types.</p>
+<p><<a class="el" href="a00124.html" title="GLM_GTC_type_precision ">glm/gtc/type_precision.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a class="anchor" id="gabe6a542dd6c1d5ffd847f1b9b4c9c9b7"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef float32 f32</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default 32 bit single-precision floating-point scalar. </p>
+<p>32 bit single-precision floating-point scalar.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l01505">1505</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga1fedd5d29746afdaf2d3303a4442704e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x2< f32, defaultp > f32mat2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default single-precision floating-point 2x2 matrix. </p>
+<p>Single-precision floating-point 1x1 matrix.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a></dd>
+<dd>
+<a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> Single-precision floating-point 2x2 matrix. </dd>
+<dd>
+<a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l02449">2449</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaf3a5016bf360977ce114deb2e01ae10a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x2< f32, defaultp > f32mat2x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default single-precision floating-point 2x2 matrix. </p>
+<p>Single-precision floating-point 1x1 matrix.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a></dd>
+<dd>
+<a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> Single-precision floating-point 2x2 matrix. </dd>
+<dd>
+<a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l02413">2413</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gad5f1043adbe803928fe7bf1a90a1f767"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x3< f32, defaultp > f32mat2x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default single-precision floating-point 2x3 matrix. </p>
+<p>Single-precision floating-point 2x3 matrix.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l02417">2417</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga5ed667d0247cce477f013ea31982843d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x4< f32, defaultp > f32mat2x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default single-precision floating-point 2x4 matrix. </p>
+<p>Single-precision floating-point 2x4 matrix.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l02421">2421</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaf4377997b299a287f7ab3358c9bd3e4c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x3< f32, defaultp > f32mat3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default single-precision floating-point 3x3 matrix. </p>
+<p>Single-precision floating-point 3x3 matrix.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l02453">2453</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga8709a1ea268fa69bdf1e11616d7fbaf1"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x2< f32, defaultp > f32mat3x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default single-precision floating-point 3x2 matrix. </p>
+<p>Single-precision floating-point 3x2 matrix.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l02425">2425</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga1e4c52bb824ca16c6e2e5b03635669d0"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x3< f32, defaultp > f32mat3x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default single-precision floating-point 3x3 matrix. </p>
+<p>Single-precision floating-point 3x3 matrix.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l02429">2429</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga0100666c90176eaba80e49357d123c7f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x4< f32, defaultp > f32mat3x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default single-precision floating-point 3x4 matrix. </p>
+<p>Single-precision floating-point 3x4 matrix.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l02433">2433</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga797fa3ab16e04456174c36238e091341"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x4< f32, defaultp > f32mat4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default single-precision floating-point 4x4 matrix. </p>
+<p>Single-precision floating-point 4x4 matrix.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l02457">2457</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga27f897bdfe4bbded9481b8947553d1ff"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x2< f32, defaultp > f32mat4x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default single-precision floating-point 4x2 matrix. </p>
+<p>Single-precision floating-point 4x2 matrix.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l02437">2437</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaa69e73ffb01a52499071391d395908fb"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x3< f32, defaultp > f32mat4x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default single-precision floating-point 4x3 matrix. </p>
+<p>Single-precision floating-point 4x3 matrix.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l02441">2441</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gafe2e08549805a7ded26da2a868bedbf5"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x4< f32, defaultp > f32mat4x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default single-precision floating-point 4x4 matrix. </p>
+<p>Single-precision floating-point 4x4 matrix.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l02445">2445</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga6966c0cb4673928c9c9da2e91006d2c0"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tquat< f32, defaultp > f32quat</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default single-precision floating-point quaternion. </p>
+<p>Single-precision floating-point quaternion.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l02461">2461</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga3174a49dc84a977cad7012a62f4af02f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec1< f32, defaultp > f32vec1</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default single-precision floating-point vector of 1 components. </p>
+<p>Single-precision floating-point vector of 1 component.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l02397">2397</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gae0cb53ea6fe3d977fe588ce423d57cc3"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec2< f32, defaultp > f32vec2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default single-precision floating-point vector of 2 components. </p>
+<p>Single-precision floating-point vector of 2 components.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l02401">2401</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga19d5e0d4d3d6d226c9c6c0f39756f9ad"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec3< f32, defaultp > f32vec3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default single-precision floating-point vector of 3 components. </p>
+<p>Single-precision floating-point vector of 3 components.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l02405">2405</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaeb25dbb0261f82cb08da23e26d343704"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec4< f32, defaultp > f32vec4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default single-precision floating-point vector of 4 components. </p>
+<p>Single-precision floating-point vector of 4 components.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l02409">2409</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga1d794d240091678f602e8de225b8d8c9"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef float64 f64</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default 64 bit double-precision floating-point scalar. </p>
+<p>64 bit double-precision floating-point scalar.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l01509">1509</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga74b9918c90ea60ce58b3979cde963a38"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x2< f64, defaultp > f64mat2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default double-precision floating-point 2x2 matrix. </p>
+<p>Double-precision floating-point 1x1 matrix.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a></dd>
+<dd>
+<a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> Double-precision floating-point 2x2 matrix. </dd>
+<dd>
+<a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l02555">2555</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaeb817419c76a0766c88713d2754e6cb3"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x2< f64, defaultp > f64mat2x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default double-precision floating-point 2x2 matrix. </p>
+<p>Double-precision floating-point 1x1 matrix.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a></dd>
+<dd>
+<a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> Double-precision floating-point 2x2 matrix. </dd>
+<dd>
+<a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l02519">2519</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga87d256f4719417e311cd0ea14264678d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x3< f64, defaultp > f64mat2x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default double-precision floating-point 2x3 matrix. </p>
+<p>Double-precision floating-point 2x3 matrix.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l02523">2523</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gafb18822e2eac88fa861a76cefd25d550"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x4< f64, defaultp > f64mat2x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default double-precision floating-point 2x4 matrix. </p>
+<p>Double-precision floating-point 2x4 matrix.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l02527">2527</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga68894201dd511792a7af6cff7b5adf71"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x3< f64, defaultp > f64mat3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default double-precision floating-point 3x3 matrix. </p>
+<p>Double-precision floating-point 3x3 matrix.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l02559">2559</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga11e5684b10e098f573ff484c1a569ae2"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x2< f64, defaultp > f64mat3x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default double-precision floating-point 3x2 matrix. </p>
+<p>Double-precision floating-point 3x2 matrix.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l02531">2531</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gae1a5081181c96cc37ce9418f6e856cb6"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x3< f64, defaultp > f64mat3x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default double-precision floating-point 3x3 matrix. </p>
+<p>Double-precision floating-point 3x3 matrix.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l02535">2535</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gad37a55a8ce1154083a721b4ecfd55293"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x4< f64, defaultp > f64mat3x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default double-precision floating-point 3x4 matrix. </p>
+<p>Double-precision floating-point 3x4 matrix.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l02539">2539</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga219c683b0aa29f4f482f76d77d5c9e95"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x4< f64, defaultp > f64mat4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default double-precision floating-point 4x4 matrix. </p>
+<p>Double-precision floating-point 4x4 matrix.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l02563">2563</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaa669dfb59031a441de19b34a92704d57"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x2< f64, defaultp > f64mat4x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default double-precision floating-point 4x2 matrix. </p>
+<p>Double-precision floating-point 4x2 matrix.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l02543">2543</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaba137814a509704937746cc1e82edc32"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x3< f64, defaultp > f64mat4x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default double-precision floating-point 4x3 matrix. </p>
+<p>Double-precision floating-point 4x3 matrix.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l02547">2547</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga489163773b021f1800a33cc2fa730c3b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x4< f64, defaultp > f64mat4x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default double-precision floating-point 4x4 matrix. </p>
+<p>Double-precision floating-point 4x4 matrix.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l02551">2551</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga14c583bd625eda8cf4935a14d5dd544d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tquat< f64, defaultp > f64quat</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default double-precision floating-point quaternion. </p>
+<p>Double-precision floating-point quaternion.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l02567">2567</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gac5b04f32ae3084a9131a0851e7f4cfae"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec1< f64, defaultp > f64vec1</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default double-precision floating-point vector of 1 components. </p>
+<p>Double-precision floating-point vector of 1 component.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l02503">2503</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gafaad77b464b5a35626c31205ac6780e3"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec2< f64, defaultp > f64vec2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default double-precision floating-point vector of 2 components. </p>
+<p>Double-precision floating-point vector of 2 components.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l02507">2507</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gafacc3614bb1136a7756293e67d34de22"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec3< f64, defaultp > f64vec3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default double-precision floating-point vector of 3 components. </p>
+<p>Double-precision floating-point vector of 3 components.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l02511">2511</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga8723186104dc02eb85da386105fba75f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec4< f64, defaultp > f64vec4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default double-precision floating-point vector of 4 components. </p>
+<p>Double-precision floating-point vector of 4 components.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l02515">2515</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gad3c127f8bf8d7d4e738037c257abb5b1"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::float32 float32</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default 32 bit single-precision floating-point scalar. </p>
+<p>32 bit single-precision floating-point scalar.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00110_source.html#l00055">55</a> of file <a class="el" href="a00110_source.html">type_float.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga41d579d81c3d98edd0532244fa02da77"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::float32 float32_t</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default 32 bit single-precision floating-point scalar. </p>
+<p>32 bit single-precision floating-point scalar.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l01497">1497</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gab5596d48586414c91ccb270962dc14d3"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::float64 float64</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default 64 bit double-precision floating-point scalar. </p>
+<p>64 bit double-precision floating-point scalar.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00110_source.html#l00056">56</a> of file <a class="el" href="a00110_source.html">type_float.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga6957c7b22f405683bb276554ca40dc37"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::float64 float64_t</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default 64 bit double-precision floating-point scalar. </p>
+<p>64 bit double-precision floating-point scalar.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l01501">1501</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gabb01d4ff646ee07241934b1a0cc0f985"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x2< f32, defaultp > fmat2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default single-precision floating-point 2x2 matrix. </p>
+<p>Single-precision floating-point 1x1 matrix.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a></dd>
+<dd>
+<a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> Single-precision floating-point 2x2 matrix. </dd>
+<dd>
+<a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l02379">2379</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga74ac2e71b650162d8f7cb2a70c2f6711"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x2< f32, defaultp > fmat2x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default single-precision floating-point 2x2 matrix. </p>
+<p>Single-precision floating-point 1x1 matrix.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a></dd>
+<dd>
+<a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> Single-precision floating-point 2x2 matrix. </dd>
+<dd>
+<a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l02343">2343</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaf17b2604c0d92bffb92375d8aa588756"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x3< f32, defaultp > fmat2x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default single-precision floating-point 2x3 matrix. </p>
+<p>Single-precision floating-point 2x3 matrix.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l02347">2347</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga709c97c20efa24ff1d9e83cd437b8ed5"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat2x4< f32, defaultp > fmat2x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default single-precision floating-point 2x4 matrix. </p>
+<p>Single-precision floating-point 2x4 matrix.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l02351">2351</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga5165fbee2d78f342950265b69a07353d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x3< f32, defaultp > fmat3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default single-precision floating-point 3x3 matrix. </p>
+<p>Single-precision floating-point 3x3 matrix.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l02383">2383</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga9f20af6e8eca2abdcde08408948cc1ca"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x2< f32, defaultp > fmat3x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default single-precision floating-point 3x2 matrix. </p>
+<p>Single-precision floating-point 3x2 matrix.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l02355">2355</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gad339e25c32fe6665acf028f26c1b3e22"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x3< f32, defaultp > fmat3x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default single-precision floating-point 3x3 matrix. </p>
+<p>Single-precision floating-point 3x3 matrix.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l02359">2359</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gab04bc97371cb6b5f54b3688e0c81578b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat3x4< f32, defaultp > fmat3x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default single-precision floating-point 3x4 matrix. </p>
+<p>Single-precision floating-point 3x4 matrix.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l02363">2363</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gab3f31d867df4874e42172ebf188a3ebd"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x4< f32, defaultp > fmat4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default single-precision floating-point 4x4 matrix. </p>
+<p>Single-precision floating-point 4x4 matrix.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l02387">2387</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gab0082a25f19f02d2d0af0fcbe5ead732"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x2< f32, defaultp > fmat4x2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default single-precision floating-point 4x2 matrix. </p>
+<p>Single-precision floating-point 4x2 matrix.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l02367">2367</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga1a11c170f030ab34ddf037714e936cba"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x3< f32, defaultp > fmat4x3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default single-precision floating-point 4x3 matrix. </p>
+<p>Single-precision floating-point 4x3 matrix.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l02371">2371</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gabd79752ff357d83b49136b6299ea62d9"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tmat4x4< f32, defaultp > fmat4x4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default single-precision floating-point 4x4 matrix. </p>
+<p>Single-precision floating-point 4x4 matrix.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l02375">2375</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga10d8bd3c923a5386efcf25a4117fd84f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec1< float, defaultp > fvec1</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default single-precision floating-point vector of 1 components. </p>
+<p>Single-precision floating-point vector of 1 component.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l02327">2327</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaf9f4173dd9e8b2d0b663c6f80ed09ff6"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec2< float, defaultp > fvec2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default single-precision floating-point vector of 2 components. </p>
+<p>Single-precision floating-point vector of 2 components.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l02331">2331</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga4ef2d77dcab241b1ef83f09edb2f1084"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec3< float, defaultp > fvec3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default single-precision floating-point vector of 3 components. </p>
+<p>Single-precision floating-point vector of 3 components.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l02335">2335</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga981b63d5c5f7233a29364e0a968d139b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec4< float, defaultp > fvec4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default single-precision floating-point vector of 4 components. </p>
+<p>Single-precision floating-point vector of 4 components.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l02339">2339</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga0336abc2604dd2c20c30e036454b64f8"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::int16 highp_i16</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High precision 16 bit signed integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00232">232</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga727675ac6b5d2fc699520e0059735e25"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::int32 highp_i32</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High precision 32 bit signed integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00236">236</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gac25db6d2b1e2a0f351b77ba3409ac4cd"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::int64 highp_i64</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High precision 64 bit signed integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00240">240</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gacb88796f2d08ef253d0345aff20c3aee"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::int8 highp_i8</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High precision 8 bit signed integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00228">228</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga5fde0fa4a3852a9dd5d637a92ee74718"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::int16 highp_int16</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High precision 16 bit signed integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00200">200</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gacaea06d0a79ef3172e887a7a6ba434ff"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::int16 highp_int16_t</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High precision 16 bit signed integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00216">216</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga84ed04b4e0de18c977e932d617e7c223"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::int32 highp_int32</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High precision 32 bit signed integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00204">204</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga2c71c8bd9e2fe7d2e93ca250d8b6157f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::int32 highp_int32_t</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>32 bit signed integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00220">220</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga226a8d52b4e3f77aaa6231135e886aac"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::int64 highp_int64</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High precision 64 bit signed integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00208">208</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga73c6abb280a45feeff60f9accaee91f3"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::int64 highp_int64_t</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High precision 64 bit signed integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00224">224</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gad0549c902a96a7164e4ac858d5f39dbf"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::int8 highp_int8</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High precision 8 bit signed integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00196">196</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga1085c50dd8fbeb5e7e609b1c127492a5"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::int8 highp_int8_t</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High precision 8 bit signed integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00212">212</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga8e62c883d13f47015f3b70ed88751369"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint16 highp_u16</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 16 bit unsigned integer type. </p>
+<p>High precision 16 bit unsigned integer type.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00841">841</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga7a6f1929464dcc680b16381a4ee5f2cf"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint32 highp_u32</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 32 bit unsigned integer type. </p>
+<p>High precision 32 bit unsigned integer type.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00845">845</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga0c181fdf06a309691999926b6690c969"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint64 highp_u64</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 64 bit unsigned integer type. </p>
+<p>High precision 64 bit unsigned integer type.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00849">849</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gacd1259f3a9e8d2a9df5be2d74322ef9c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint8 highp_u8</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 8 bit unsigned integer type. </p>
+<p>High precision 8 bit unsigned integer type.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00837">837</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga746dc6da204f5622e395f492997dbf57"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint16 highp_uint16</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 16 bit unsigned integer type. </p>
+<p>High precision 16 bit unsigned integer type.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00809">809</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gacf54c3330ef60aa3d16cb676c7bcb8c7"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint16 highp_uint16_t</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 16 bit unsigned integer type. </p>
+<p>High precision 16 bit unsigned integer type.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00825">825</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga256b12b650c3f2fb86878fd1c5db8bc3"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint32 highp_uint32</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 32 bit unsigned integer type. </p>
+<p>High precision 32 bit unsigned integer type.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00813">813</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gae978599c9711ac263ba732d4ac225b0e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint32 highp_uint32_t</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 32 bit unsigned integer type. </p>
+<p>High precision 32 bit unsigned integer type.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00829">829</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaa38d732f5d4a7bc42a1b43b9d3c141ce"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint64 highp_uint64</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 64 bit unsigned integer type. </p>
+<p>High precision 64 bit unsigned integer type.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00817">817</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaa46172d7dc1c7ffe3e78107ff88adf08"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint64 highp_uint64_t</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 64 bit unsigned integer type. </p>
+<p>High precision 64 bit unsigned integer type.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00833">833</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga97432f9979e73e66567361fd01e4cffb"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint8 highp_uint8</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 8 bit unsigned integer type. </p>
+<p>High precision 8 bit unsigned integer type.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00805">805</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gac4e00a26a2adb5f2c0a7096810df29e5"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint8 highp_uint8_t</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 8 bit unsigned integer type. </p>
+<p>High precision 8 bit unsigned integer type.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00821">821</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga3ab5fe184343d394fb6c2723c3ee3699"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::int16 i16</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>16 bit signed integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00289">289</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga28f03a39ac56c70f9bf3ada11cb60e3b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec1< i16, defaultp > i16vec1</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 16 bit signed integer scalar type. </p>
+<p>16 bit signed integer scalar type.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00444">444</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga110bec18ca44c41c76c3c9e4d7b5bd79"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec2< i16, defaultp > i16vec2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 16 bit signed integer vector of 2 components type. </p>
+<p>16 bit signed integer vector of 2 components type.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00448">448</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga973b226a9914db682c9372fc761fb535"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec3< i16, defaultp > i16vec3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 16 bit signed integer vector of 3 components type. </p>
+<p>16 bit signed integer vector of 3 components type.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00452">452</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gad73e5e905dcf2d8cab002b4ab46e9426"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec4< i16, defaultp > i16vec4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 16 bit signed integer vector of 4 components type. </p>
+<p>16 bit signed integer vector of 4 components type.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00456">456</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga96faea43ac5f875d2d3ffbf8d213e3eb"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::int32 i32</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>32 bit signed integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00293">293</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga4cca6bbd117c45f046291fc8e9d03765"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec1< i32, defaultp > i32vec1</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 32 bit signed integer scalar type. </p>
+<p>32 bit signed integer scalar type.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00523">523</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga3c12cef4135603fd77d8fda85808730c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec2< i32, defaultp > i32vec2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 32 bit signed integer vector of 2 components type. </p>
+<p>32 bit signed integer vector of 2 components type.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00527">527</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga40cd3f391c03512f158d10a70062264e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec3< i32, defaultp > i32vec3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 32 bit signed integer vector of 3 components type. </p>
+<p>32 bit signed integer vector of 3 components type.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00531">531</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gae3364a8090e7e1408056e00403dfecab"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec4< i32, defaultp > i32vec4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 32 bit signed integer vector of 4 components type. </p>
+<p>32 bit signed integer vector of 4 components type.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00535">535</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gadb997e409103d4da18abd837e636a496"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::int64 i64</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>64 bit signed integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00297">297</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga5b4a3e499ee165efc0dc05add9c48235"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec1< i64, defaultp > i64vec1</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 64 bit signed integer scalar type. </p>
+<p>64 bit signed integer scalar type.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00682">682</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gade69872a31f066e5ae212f1af6008edb"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec2< i64, defaultp > i64vec2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 64 bit signed integer vector of 2 components type. </p>
+<p>64 bit signed integer vector of 2 components type.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00686">686</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga9ece7c77c7bca7a6b824ef9c600f5e5e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec3< i64, defaultp > i64vec3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 64 bit signed integer vector of 3 components type. </p>
+<p>64 bit signed integer vector of 3 components type.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00690">690</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga9756e45c8f80329257f3cbdabc3bd73c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec4< i64, defaultp > i64vec4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 64 bit signed integer vector of 4 components type. </p>
+<p>64 bit signed integer vector of 4 components type.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00694">694</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga302ec977b0c0c3ea245b6c9275495355"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::int8 i8</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>8 bit signed integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00285">285</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gab2329c5c14ff5a03b1ddec039e2c7409"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec1< i8, defaultp > i8vec1</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 8 bit signed integer scalar type. </p>
+<p>8 bit signed integer scalar type.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00364">364</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga6414484477e4c1b4863cf91af8fd4185"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec2< i8, defaultp > i8vec2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 8 bit signed integer vector of 2 components type. </p>
+<p>8 bit signed integer vector of 2 components type.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00368">368</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaf4b5993e794e252607f91535b62a7e0c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec3< i8, defaultp > i8vec3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 8 bit signed integer vector of 3 components type. </p>
+<p>8 bit signed integer vector of 3 components type.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00372">372</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga50e58885aee2cf01bb3ba472c5b1697e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec4< i8, defaultp > i8vec4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 8 bit signed integer vector of 4 components type. </p>
+<p>8 bit signed integer vector of 4 components type.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00376">376</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga302041c186d0d028bea31b711fe16759"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::int16 int16</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>16 bit signed integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00113_source.html#l00207">207</a> of file <a class="el" href="a00113_source.html">type_int.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gae8f5e3e964ca2ae240adc2c0d74adede"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::int16 int16_t</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>16 bit signed integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00272">272</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga8df669f4e7698dfe0c0354d92578d74f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::int32 int32</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>32 bit signed integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00113_source.html#l00208">208</a> of file <a class="el" href="a00113_source.html">type_int.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga042ef09ff2f0cb24a36f541bcb3a3710"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::int32 int32_t</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>32 bit signed integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00276">276</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaff5189f97f9e842d9636a0f240001b2e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::int64 int64</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>64 bit signed integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00113_source.html#l00209">209</a> of file <a class="el" href="a00113_source.html">type_int.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga322a7d7d2c2c68994dc872a33de63c61"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::int64 int64_t</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>64 bit signed integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00280">280</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga41c6189f6485c2825d60fdc835b3a2b0"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::int8 int8</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>8 bit signed integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00113_source.html#l00206">206</a> of file <a class="el" href="a00113_source.html">type_int.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga4bf09d8838a86866b39ee6e109341645"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::int8 int8_t</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>8 bit signed integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00268">268</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga392b673fd10847bfb78fb808c6cf8ff7"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::int16 lowp_i16</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision 16 bit signed integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00136">136</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga7ff73a45cea9613ebf1a9fad0b9f82ac"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::int32 lowp_i32</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision 32 bit signed integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00140">140</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga354736e0c645099cd44c42fb2f87c2b8"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::int64 lowp_i64</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision 64 bit signed integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00144">144</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga552a6bde5e75984efb0f863278da2e54"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::int8 lowp_i8</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision 8 bit signed integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00132">132</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga698e36b01167fc0f037889334dce8def"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::int16 lowp_int16</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision 16 bit signed integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00104">104</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga8b2cd8d31eb345b2d641d9261c38db1a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::int16 lowp_int16_t</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision 16 bit signed integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00120">120</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga864aabca5f3296e176e0c3ed9cc16b02"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::int32 lowp_int32</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision 32 bit signed integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00108">108</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga0350631d35ff800e6133ac6243b13cbc"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::int32 lowp_int32_t</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision 32 bit signed integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00124">124</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaf645b1a60203b39c0207baff5e3d8c3c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::int64 lowp_int64</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision 64 bit signed integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00112">112</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaebf341fc4a5be233f7dde962c2e33847"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::int64 lowp_int64_t</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision 64 bit signed integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00128">128</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga760bcf26fdb23a2c3ecad3c928a19ae6"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::int8 lowp_int8</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision 8 bit signed integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00100">100</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga119c41d73fe9977358174eb3ac1035a3"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::int8 lowp_int8_t</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision 8 bit signed integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00116">116</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga504ce1631cb2ac02fcf1d44d8c2aa126"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint16 lowp_u16</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision 16 bit unsigned integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00741">741</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga4f072ada9552e1e480bbb3b1acde5250"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint32 lowp_u32</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision 32 bit unsigned integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00745">745</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga30069d1f02b19599cbfadf98c23ac6ed"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint64 lowp_u64</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision 64 bit unsigned integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00749">749</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga1b09f03da7ac43055c68a349d5445083"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint8 lowp_u8</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision 8 bit unsigned integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00737">737</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gad68bfd9f881856fc863a6ebca0b67f78"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint16 lowp_uint16</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision 16 bit unsigned integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00707">707</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga91c4815f93177eb423362fd296a87e9f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint16 lowp_uint16_t</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision 16 bit unsigned integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00724">724</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaa6a5b461bbf5fe20982472aa51896d4b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint32 lowp_uint32</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision 32 bit unsigned integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00711">711</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaf1b735b4b1145174f4e4167d13778f9b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint32 lowp_uint32_t</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision 32 bit unsigned integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00728">728</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaa212b805736a759998e312cbdd550fae"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint64 lowp_uint64</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision 64 bit unsigned integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00715">715</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga8dd3a3281ae5c970ffe0c41d538aa153"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint64 lowp_uint64_t</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision 64 bit unsigned integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00732">732</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaf49470869e9be2c059629b250619804e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint8 lowp_uint8</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision 8 bit unsigned integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00703">703</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga667b2ece2b258be898812dc2177995d1"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint8 lowp_uint8_t</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision 8 bit unsigned integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00720">720</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga62a17cddeb4dffb4e18fe3aea23f051a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::int16 mediump_i16</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 16 bit signed integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00184">184</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaf5e94bf2a20af7601787c154751dc2e1"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::int32 mediump_i32</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 32 bit signed integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00188">188</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga3ebcb1f6d8d8387253de8bccb058d77f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::int64 mediump_i64</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 64 bit signed integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00192">192</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gacf1ded173e1e2d049c511d095b259e21"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::int8 mediump_i8</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 8 bit signed integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00180">180</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gadff3608baa4b5bd3ed28f95c1c2c345d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::int16 mediump_int16</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 16 bit signed integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00152">152</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga80e72fe94c88498537e8158ba7591c54"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::int16 mediump_int16_t</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 16 bit signed integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00168">168</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga5244cef85d6e870e240c76428a262ae8"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::int32 mediump_int32</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 32 bit signed integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00156">156</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga26fc7ced1ad7ca5024f1c973c8dc9180"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::int32 mediump_int32_t</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 32 bit signed integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00172">172</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga7b968f2b86a0442a89c7359171e1d866"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::int64 mediump_int64</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 64 bit signed integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00160">160</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gac3bc41bcac61d1ba8f02a6f68ce23f64"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::int64 mediump_int64_t</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 64 bit signed integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00176">176</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga6fbd69cbdaa44345bff923a2cf63de7e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::int8 mediump_int8</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 8 bit signed integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00148">148</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga6d7b3789ecb932c26430009478cac7ae"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::int8 mediump_int8_t</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 8 bit signed integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00164">164</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga9df98857be695d5a30cb30f5bfa38a80"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint16 mediump_u16</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 16 bit unsigned integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00791">791</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga1bd0e914158bf03135f8a317de6debe9"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint32 mediump_u32</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 32 bit unsigned integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00795">795</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga2af9490085ae3bdf36a544e9dd073610"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint64 mediump_u64</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 64 bit unsigned integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00799">799</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gad1213a22bbb9e4107f07eaa4956f8281"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint8 mediump_u8</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 8 bit unsigned integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00787">787</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga2885a6c89916911e418c06bb76b9bdbb"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint16 mediump_uint16</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 16 bit unsigned integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00759">759</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga3963b1050fc65a383ee28e3f827b6e3e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint16 mediump_uint16_t</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 16 bit unsigned integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00775">775</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga34dd5ec1988c443bae80f1b20a8ade5f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint32 mediump_uint32</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 32 bit unsigned integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00763">763</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaf4dae276fd29623950de14a6ca2586b5"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint32 mediump_uint32_t</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 32 bit unsigned integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00779">779</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga30652709815ad9404272a31957daa59e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint64 mediump_uint64</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 64 bit unsigned integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00767">767</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga9b170dd4a8f38448a2dc93987c7875e9"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint64 mediump_uint64_t</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 64 bit unsigned integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00783">783</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga1fa92a233b9110861cdbc8c2ccf0b5a3"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint8 mediump_uint8</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 8 bit unsigned integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00755">755</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gadfe65c78231039e90507770db50c98c7"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint8 mediump_uint8_t</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 8 bit unsigned integer type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00771">771</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaa2d7acc0adb536fab71fe261232a40ff"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint16 u16</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>16 bit unsigned integer type. </p>
+<p>Default precision 16 bit unsigned integer type.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00898">898</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaefa2ce8fbdbe89baffd262f46f2d5907"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec1< u16, defaultp > u16vec1</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 16 bit unsigned integer scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l01053">1053</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga426030555085ed6c39a54e73afbef962"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec2< u16, defaultp > u16vec2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 16 bit unsigned integer vector of 2 components type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l01057">1057</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga7f5dbe417199277e449b8db0210acb71"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec3< u16, defaultp > u16vec3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 16 bit unsigned integer vector of 3 components type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l01061">1061</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaf524c9059f0342668d8eea359bcceaae"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec4< u16, defaultp > u16vec4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 16 bit unsigned integer vector of 4 components type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l01065">1065</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga8165913e068444f7842302d40ba897b9"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint32 u32</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>32 bit unsigned integer type. </p>
+<p>Default precision 32 bit unsigned integer type.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00902">902</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga913a8bd51e4ebccd30ad488de3c18da9"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec1< u32, defaultp > u32vec1</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 32 bit unsigned integer scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l01132">1132</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga0741d40e2b0fea4f1c50cb325114f075"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec2< u32, defaultp > u32vec2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 32 bit unsigned integer vector of 2 components type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l01136">1136</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gad9b52e1c271cb9c8bfae6365d3e38a23"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec3< u32, defaultp > u32vec3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 32 bit unsigned integer vector of 3 components type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l01140">1140</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga155ac7e9e454e2b1f73d11e1e28a0fd6"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec4< u32, defaultp > u32vec4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 32 bit unsigned integer vector of 4 components type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l01144">1144</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaf3f312156984c365e9f65620354da70b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint64 u64</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>64 bit unsigned integer type. </p>
+<p>Default precision 64 bit unsigned integer type.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00906">906</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga793c9293cc687a0e342396a377c5df77"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec1< u64, defaultp > u64vec1</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 64 bit unsigned integer scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l01291">1291</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga2204827de9d4ee7fa92ef497093f7d6e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec2< u64, defaultp > u64vec2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 64 bit unsigned integer vector of 2 components type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l01295">1295</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga3460933f040f59f0fedb29df1e9be71c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec3< u64, defaultp > u64vec3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 64 bit unsigned integer vector of 3 components type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l01299">1299</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gafb6ca34df28889a5db9d244aed375411"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec4< u64, defaultp > u64vec4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 64 bit unsigned integer vector of 4 components type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l01303">1303</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaecc7082561fc9028b844b6cf3d305d36"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint8 u8</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>8 bit unsigned integer type. </p>
+<p>Default precision 8 bit unsigned integer type.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00894">894</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga92e0c191e5cc326255284d08be3af7c5"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec1< u8, defaultp > u8vec1</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 8 bit unsigned integer scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00973">973</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga61667c99caf60ce6c48ebbbac72bd91d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec2< u8, defaultp > u8vec2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 8 bit unsigned integer vector of 2 components type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00977">977</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga8ca60d0ba6d438892be6017f43747661"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec3< u8, defaultp > u8vec3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 8 bit unsigned integer vector of 3 components type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00981">981</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga114e005014d910bea07954eee24b7efb"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec4< u8, defaultp > u8vec4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 8 bit unsigned integer vector of 4 components type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00985">985</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga13471cbbe74e4303a57f3743d007b74d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint16 uint16</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>16 bit unsigned integer type. </p>
+<p>Default precision 16 bit unsigned integer type.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00113_source.html#l00212">212</a> of file <a class="el" href="a00113_source.html">type_int.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga91f91f411080c37730856ff5887f5bcf"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint16 uint16_t</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>16 bit unsigned integer type. </p>
+<p>Default precision 16 bit unsigned integer type.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00881">881</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga5fa3ddcab56c789bc272ff5651faa12d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint32 uint32</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>32 bit unsigned integer type. </p>
+<p>Default precision 32 bit unsigned integer type.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00113_source.html#l00213">213</a> of file <a class="el" href="a00113_source.html">type_int.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga2171d9dc1fefb1c82e2817f45b622eac"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint32 uint32_t</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>32 bit unsigned integer type. </p>
+<p>Default precision 32 bit unsigned integer type.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00885">885</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gab630f76c26b50298187f7889104d4b9c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint64 uint64</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>64 bit unsigned integer type. </p>
+<p>Default precision 64 bit unsigned integer type.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00113_source.html#l00214">214</a> of file <a class="el" href="a00113_source.html">type_int.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga3999d3e7ff22025c16ddb601e14dfdee"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint64 uint64_t</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>64 bit unsigned integer type. </p>
+<p>Default precision 64 bit unsigned integer type.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00889">889</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga36475e31b1992cfde54c1a6f5a148865"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint8 uint8</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>8 bit unsigned integer type. </p>
+<p>Default precision 8 bit unsigned integer type.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00113_source.html#l00211">211</a> of file <a class="el" href="a00113_source.html">type_int.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga28d97808322d3c92186e4a0c067d7e8e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint8 uint8_t</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>8 bit unsigned integer type. </p>
+<p>Default precision 8 bit unsigned integer type.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00177.html" title="Defines specific C++-based precision types. ">GLM_GTC_type_precision</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00038_source.html#l00877">877</a> of file <a class="el" href="a00038_source.html">fwd.hpp</a>.</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00178.html b/src/third_party/glm/doc/api/a00178.html
new file mode 100644
index 0000000..709d475
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00178.html
@@ -0,0 +1,445 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTC_type_ptr</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTC_type_ptr<div class="ingroups"><a class="el" href="a00154.html">GTC Extensions (Stable)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga52a16e333fef7e33ca740779482a8693"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga52a16e333fef7e33ca740779482a8693"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat2x2< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00178.html#ga52a16e333fef7e33ca740779482a8693">make_mat2</a> (T const *const ptr)</td></tr>
+<tr class="separator:ga52a16e333fef7e33ca740779482a8693"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gadb29e510762e1042069cb28bf24ae990"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gadb29e510762e1042069cb28bf24ae990"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat2x2< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00178.html#gadb29e510762e1042069cb28bf24ae990">make_mat2x2</a> (T const *const ptr)</td></tr>
+<tr class="separator:gadb29e510762e1042069cb28bf24ae990"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga37988c6dd941f617cdfab86d54375fc1"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga37988c6dd941f617cdfab86d54375fc1"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat2x3< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00178.html#ga37988c6dd941f617cdfab86d54375fc1">make_mat2x3</a> (T const *const ptr)</td></tr>
+<tr class="separator:ga37988c6dd941f617cdfab86d54375fc1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6dfb2ac10859b0cc8e3893ea84fa95b5"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga6dfb2ac10859b0cc8e3893ea84fa95b5"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat2x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00178.html#ga6dfb2ac10859b0cc8e3893ea84fa95b5">make_mat2x4</a> (T const *const ptr)</td></tr>
+<tr class="separator:ga6dfb2ac10859b0cc8e3893ea84fa95b5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac2bc10c519ffc8db9e24f325f23787ea"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gac2bc10c519ffc8db9e24f325f23787ea"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat3x3< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00178.html#gac2bc10c519ffc8db9e24f325f23787ea">make_mat3</a> (T const *const ptr)</td></tr>
+<tr class="separator:gac2bc10c519ffc8db9e24f325f23787ea"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gabe1e5066608a66da7a94f802b57b4eed"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gabe1e5066608a66da7a94f802b57b4eed"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat3x2< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00178.html#gabe1e5066608a66da7a94f802b57b4eed">make_mat3x2</a> (T const *const ptr)</td></tr>
+<tr class="separator:gabe1e5066608a66da7a94f802b57b4eed"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3cbe7adf857c867cee77eae4617abadd"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga3cbe7adf857c867cee77eae4617abadd"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat3x3< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00178.html#ga3cbe7adf857c867cee77eae4617abadd">make_mat3x3</a> (T const *const ptr)</td></tr>
+<tr class="separator:ga3cbe7adf857c867cee77eae4617abadd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac083edd180ab4d4b817acc60c516209b"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gac083edd180ab4d4b817acc60c516209b"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat3x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00178.html#gac083edd180ab4d4b817acc60c516209b">make_mat3x4</a> (T const *const ptr)</td></tr>
+<tr class="separator:gac083edd180ab4d4b817acc60c516209b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2c6e6d457cb932e1ce683e4f690a6f60"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga2c6e6d457cb932e1ce683e4f690a6f60"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00178.html#ga2c6e6d457cb932e1ce683e4f690a6f60">make_mat4</a> (T const *const ptr)</td></tr>
+<tr class="separator:ga2c6e6d457cb932e1ce683e4f690a6f60"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga967a5b934e67ff9a6d1d0d27a377a264"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga967a5b934e67ff9a6d1d0d27a377a264"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x2< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00178.html#ga967a5b934e67ff9a6d1d0d27a377a264">make_mat4x2</a> (T const *const ptr)</td></tr>
+<tr class="separator:ga967a5b934e67ff9a6d1d0d27a377a264"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4d42daced532b33cc672280e48670a51"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga4d42daced532b33cc672280e48670a51"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x3< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00178.html#ga4d42daced532b33cc672280e48670a51">make_mat4x3</a> (T const *const ptr)</td></tr>
+<tr class="separator:ga4d42daced532b33cc672280e48670a51"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf605a5f5e2ff594e8d404b2855b09541"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gaf605a5f5e2ff594e8d404b2855b09541"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00178.html#gaf605a5f5e2ff594e8d404b2855b09541">make_mat4x4</a> (T const *const ptr)</td></tr>
+<tr class="separator:gaf605a5f5e2ff594e8d404b2855b09541"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaadafb6600af2633e4c98cc64c72f5269"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gaadafb6600af2633e4c98cc64c72f5269"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tquat< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00178.html#gaadafb6600af2633e4c98cc64c72f5269">make_quat</a> (T const *const ptr)</td></tr>
+<tr class="separator:gaadafb6600af2633e4c98cc64c72f5269"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5f7393c30970c5949be13ceb525093a6"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga5f7393c30970c5949be13ceb525093a6"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec2< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00178.html#ga5f7393c30970c5949be13ceb525093a6">make_vec2</a> (T const *const ptr)</td></tr>
+<tr class="separator:ga5f7393c30970c5949be13ceb525093a6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga86f4bc63570db86346db2e567fb760f6"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga86f4bc63570db86346db2e567fb760f6"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00178.html#ga86f4bc63570db86346db2e567fb760f6">make_vec3</a> (T const *const ptr)</td></tr>
+<tr class="separator:ga86f4bc63570db86346db2e567fb760f6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga152345176b8951c15711f6ed4f6fc237"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga152345176b8951c15711f6ed4f6fc237"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00178.html#ga152345176b8951c15711f6ed4f6fc237">make_vec4</a> (T const *const ptr)</td></tr>
+<tr class="separator:ga152345176b8951c15711f6ed4f6fc237"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf019636bb8bd7c9efb7c7ce3bb23bcfc"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gaf019636bb8bd7c9efb7c7ce3bb23bcfc"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType::value_type const * </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00178.html#gaf019636bb8bd7c9efb7c7ce3bb23bcfc">value_ptr</a> (genType const &vec)</td></tr>
+<tr class="separator:gaf019636bb8bd7c9efb7c7ce3bb23bcfc"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Handles the interaction between pointers and vector, matrix types. </p>
+<p>This extension defines an overloaded function, glm::value_ptr, which takes any of the <a class="el" href="a00159.html">core template types</a>. It returns a pointer to the memory layout of the object. Matrix types store their values in column-major order.</p>
+<p>This is useful for uploading data to matrices or copying data to buffer objects.</p>
+<p>Example: </p><div class="fragment"><div class="line"><span class="preprocessor">#include <<a class="code" href="a00040.html">glm/glm.hpp</a>></span></div>
+<div class="line"><span class="preprocessor">#include <<a class="code" href="a00125.html">glm/gtc/type_ptr.hpp</a>></span></div>
+<div class="line"></div>
+<div class="line"><a class="code" href="a00157.html#gaa8ea2429bb3cb41a715258a447f39897">glm::vec3</a> aVector(3);</div>
+<div class="line"><a class="code" href="a00157.html#gade0eb47c01f79384a6f38017ede17446">glm::mat4</a> someMatrix(1.0);</div>
+<div class="line"></div>
+<div class="line">glUniform3fv(uniformLoc, 1, <a class="code" href="a00178.html#gaf019636bb8bd7c9efb7c7ce3bb23bcfc">glm::value_ptr</a>(aVector));</div>
+<div class="line">glUniformMatrix4fv(uniformMatrixLoc, 1, GL_FALSE, <a class="code" href="a00178.html#gaf019636bb8bd7c9efb7c7ce3bb23bcfc">glm::value_ptr</a>(someMatrix));</div>
+</div><!-- fragment --><p><<a class="el" href="a00125.html" title="GLM_GTC_type_ptr ">glm/gtc/type_ptr.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga52a16e333fef7e33ca740779482a8693"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat2x2<T, defaultp> glm::make_mat2 </td>
+ <td>(</td>
+ <td class="paramtype">T const *const </td>
+ <td class="paramname"><em>ptr</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a matrix from a pointer. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00178.html" title="Handles the interaction between pointers and vector, matrix types. ">GLM_GTC_type_ptr</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gadb29e510762e1042069cb28bf24ae990"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat2x2<T, defaultp> glm::make_mat2x2 </td>
+ <td>(</td>
+ <td class="paramtype">T const *const </td>
+ <td class="paramname"><em>ptr</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a matrix from a pointer. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00178.html" title="Handles the interaction between pointers and vector, matrix types. ">GLM_GTC_type_ptr</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga37988c6dd941f617cdfab86d54375fc1"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat2x3<T, defaultp> glm::make_mat2x3 </td>
+ <td>(</td>
+ <td class="paramtype">T const *const </td>
+ <td class="paramname"><em>ptr</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a matrix from a pointer. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00178.html" title="Handles the interaction between pointers and vector, matrix types. ">GLM_GTC_type_ptr</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga6dfb2ac10859b0cc8e3893ea84fa95b5"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat2x4<T, defaultp> glm::make_mat2x4 </td>
+ <td>(</td>
+ <td class="paramtype">T const *const </td>
+ <td class="paramname"><em>ptr</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a matrix from a pointer. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00178.html" title="Handles the interaction between pointers and vector, matrix types. ">GLM_GTC_type_ptr</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gac2bc10c519ffc8db9e24f325f23787ea"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat3x3<T, defaultp> glm::make_mat3 </td>
+ <td>(</td>
+ <td class="paramtype">T const *const </td>
+ <td class="paramname"><em>ptr</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a matrix from a pointer. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00178.html" title="Handles the interaction between pointers and vector, matrix types. ">GLM_GTC_type_ptr</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gabe1e5066608a66da7a94f802b57b4eed"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat3x2<T, defaultp> glm::make_mat3x2 </td>
+ <td>(</td>
+ <td class="paramtype">T const *const </td>
+ <td class="paramname"><em>ptr</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a matrix from a pointer. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00178.html" title="Handles the interaction between pointers and vector, matrix types. ">GLM_GTC_type_ptr</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga3cbe7adf857c867cee77eae4617abadd"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat3x3<T, defaultp> glm::make_mat3x3 </td>
+ <td>(</td>
+ <td class="paramtype">T const *const </td>
+ <td class="paramname"><em>ptr</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a matrix from a pointer. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00178.html" title="Handles the interaction between pointers and vector, matrix types. ">GLM_GTC_type_ptr</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gac083edd180ab4d4b817acc60c516209b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat3x4<T, defaultp> glm::make_mat3x4 </td>
+ <td>(</td>
+ <td class="paramtype">T const *const </td>
+ <td class="paramname"><em>ptr</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a matrix from a pointer. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00178.html" title="Handles the interaction between pointers and vector, matrix types. ">GLM_GTC_type_ptr</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga2c6e6d457cb932e1ce683e4f690a6f60"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, defaultp> glm::make_mat4 </td>
+ <td>(</td>
+ <td class="paramtype">T const *const </td>
+ <td class="paramname"><em>ptr</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a matrix from a pointer. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00178.html" title="Handles the interaction between pointers and vector, matrix types. ">GLM_GTC_type_ptr</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga967a5b934e67ff9a6d1d0d27a377a264"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x2<T, defaultp> glm::make_mat4x2 </td>
+ <td>(</td>
+ <td class="paramtype">T const *const </td>
+ <td class="paramname"><em>ptr</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a matrix from a pointer. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00178.html" title="Handles the interaction between pointers and vector, matrix types. ">GLM_GTC_type_ptr</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga4d42daced532b33cc672280e48670a51"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x3<T, defaultp> glm::make_mat4x3 </td>
+ <td>(</td>
+ <td class="paramtype">T const *const </td>
+ <td class="paramname"><em>ptr</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a matrix from a pointer. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00178.html" title="Handles the interaction between pointers and vector, matrix types. ">GLM_GTC_type_ptr</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaf605a5f5e2ff594e8d404b2855b09541"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, defaultp> glm::make_mat4x4 </td>
+ <td>(</td>
+ <td class="paramtype">T const *const </td>
+ <td class="paramname"><em>ptr</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a matrix from a pointer. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00178.html" title="Handles the interaction between pointers and vector, matrix types. ">GLM_GTC_type_ptr</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaadafb6600af2633e4c98cc64c72f5269"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tquat<T, defaultp> glm::make_quat </td>
+ <td>(</td>
+ <td class="paramtype">T const *const </td>
+ <td class="paramname"><em>ptr</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a quaternion from a pointer. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00178.html" title="Handles the interaction between pointers and vector, matrix types. ">GLM_GTC_type_ptr</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga5f7393c30970c5949be13ceb525093a6"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tvec2<T, defaultp> glm::make_vec2 </td>
+ <td>(</td>
+ <td class="paramtype">T const *const </td>
+ <td class="paramname"><em>ptr</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a vector from a pointer. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00178.html" title="Handles the interaction between pointers and vector, matrix types. ">GLM_GTC_type_ptr</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga86f4bc63570db86346db2e567fb760f6"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tvec3<T, defaultp> glm::make_vec3 </td>
+ <td>(</td>
+ <td class="paramtype">T const *const </td>
+ <td class="paramname"><em>ptr</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a vector from a pointer. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00178.html" title="Handles the interaction between pointers and vector, matrix types. ">GLM_GTC_type_ptr</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga152345176b8951c15711f6ed4f6fc237"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tvec4<T, defaultp> glm::make_vec4 </td>
+ <td>(</td>
+ <td class="paramtype">T const *const </td>
+ <td class="paramname"><em>ptr</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a vector from a pointer. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00178.html" title="Handles the interaction between pointers and vector, matrix types. ">GLM_GTC_type_ptr</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaf019636bb8bd7c9efb7c7ce3bb23bcfc"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType::value_type const* glm::value_ptr </td>
+ <td>(</td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>vec</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return the constant address to the data of the input parameter. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00178.html" title="Handles the interaction between pointers and vector, matrix types. ">GLM_GTC_type_ptr</a> </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00179.html b/src/third_party/glm/doc/api/a00179.html
new file mode 100644
index 0000000..bdd31a4
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00179.html
@@ -0,0 +1,233 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTC_ulp</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTC_ulp<div class="ingroups"><a class="el" href="a00154.html">GTC Extensions (Stable)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga2e09bd6c8b0a9c91f6f5683d68245634"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga2e09bd6c8b0a9c91f6f5683d68245634"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL uint </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00179.html#ga2e09bd6c8b0a9c91f6f5683d68245634">float_distance</a> (T const &x, T const &y)</td></tr>
+<tr class="separator:ga2e09bd6c8b0a9c91f6f5683d68245634"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga85355f2549d75789eb66e5d565d8ad26"><td class="memTemplParams" colspan="2">template<typename T , template< typename > class vecType> </td></tr>
+<tr class="memitem:ga85355f2549d75789eb66e5d565d8ad26"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< uint > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00179.html#ga85355f2549d75789eb66e5d565d8ad26">float_distance</a> (vecType< T > const &x, vecType< T > const &y)</td></tr>
+<tr class="separator:ga85355f2549d75789eb66e5d565d8ad26"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae516ae554faa6117660828240e8bdaf0"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gae516ae554faa6117660828240e8bdaf0"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00179.html#gae516ae554faa6117660828240e8bdaf0">next_float</a> (genType const &x)</td></tr>
+<tr class="separator:gae516ae554faa6117660828240e8bdaf0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad107ec3d9697ef82032a33338a73ebdd"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gad107ec3d9697ef82032a33338a73ebdd"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00179.html#gad107ec3d9697ef82032a33338a73ebdd">next_float</a> (genType const &x, uint const &Distance)</td></tr>
+<tr class="separator:gad107ec3d9697ef82032a33338a73ebdd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2fcbb7bfbfc595712bfddc51b0715b07"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga2fcbb7bfbfc595712bfddc51b0715b07"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00179.html#ga2fcbb7bfbfc595712bfddc51b0715b07">prev_float</a> (genType const &x)</td></tr>
+<tr class="separator:ga2fcbb7bfbfc595712bfddc51b0715b07"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa399d5b6472a70e8952f9b26ecaacdec"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gaa399d5b6472a70e8952f9b26ecaacdec"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00179.html#gaa399d5b6472a70e8952f9b26ecaacdec">prev_float</a> (genType const &x, uint const &Distance)</td></tr>
+<tr class="separator:gaa399d5b6472a70e8952f9b26ecaacdec"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Allow the measurement of the accuracy of a function against a reference implementation. </p>
+<p>This extension works on floating-point data and provide results in ULP. <<a class="el" href="a00132.html" title="GLM_GTC_ulp ">glm/gtc/ulp.hpp</a>> need to be included to use these features. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga2e09bd6c8b0a9c91f6f5683d68245634"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL uint glm::float_distance </td>
+ <td>(</td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return the distance in the number of ULP between 2 scalars. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00179.html" title="Allow the measurement of the accuracy of a function against a reference implementation. ">GLM_GTC_ulp</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga85355f2549d75789eb66e5d565d8ad26"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<uint> glm::float_distance </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T > const & </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return the distance in the number of ULP between 2 vectors. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00179.html" title="Allow the measurement of the accuracy of a function against a reference implementation. ">GLM_GTC_ulp</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gae516ae554faa6117660828240e8bdaf0"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::next_float </td>
+ <td>(</td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return the next ULP value(s) after the input value(s). </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00179.html" title="Allow the measurement of the accuracy of a function against a reference implementation. ">GLM_GTC_ulp</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gad107ec3d9697ef82032a33338a73ebdd"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::next_float </td>
+ <td>(</td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a> const & </td>
+ <td class="paramname"><em>Distance</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return the value(s) ULP distance after the input value(s). </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00179.html" title="Allow the measurement of the accuracy of a function against a reference implementation. ">GLM_GTC_ulp</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga2fcbb7bfbfc595712bfddc51b0715b07"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::prev_float </td>
+ <td>(</td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return the previous ULP value(s) before the input value(s). </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00179.html" title="Allow the measurement of the accuracy of a function against a reference implementation. ">GLM_GTC_ulp</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaa399d5b6472a70e8952f9b26ecaacdec"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::prev_float </td>
+ <td>(</td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a> const & </td>
+ <td class="paramname"><em>Distance</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return the value(s) ULP distance before the input value(s). </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00179.html" title="Allow the measurement of the accuracy of a function against a reference implementation. ">GLM_GTC_ulp</a> </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00180.html b/src/third_party/glm/doc/api/a00180.html
new file mode 100644
index 0000000..49d7783
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00180.html
@@ -0,0 +1,53 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTC_vec1</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">GLM_GTC_vec1<div class="ingroups"><a class="el" href="a00154.html">GTC Extensions (Stable)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<p>Add vec1, ivec1, uvec1 and bvec1 types. </p>
+<p><<a class="el" href="a00133.html" title="GLM_GTC_vec1 ">glm/gtc/vec1.hpp</a>> need to be included to use these functionalities. </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00181.html b/src/third_party/glm/doc/api/a00181.html
new file mode 100644
index 0000000..f4f6ea4
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00181.html
@@ -0,0 +1,1293 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_associated_min_max</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTX_associated_min_max<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga7d9c8785230c8db60f72ec8975f1ba45"><td class="memTemplParams" colspan="2">template<typename T , typename U > </td></tr>
+<tr class="memitem:ga7d9c8785230c8db60f72ec8975f1ba45"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL U </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00181.html#ga7d9c8785230c8db60f72ec8975f1ba45">associatedMax</a> (T x, U a, T y, U b)</td></tr>
+<tr class="separator:ga7d9c8785230c8db60f72ec8975f1ba45"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga10ba6001798f42a0f941f19ff30e066a"><td class="memTemplParams" colspan="2">template<typename T , typename U , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga10ba6001798f42a0f941f19ff30e066a"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec2< U, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00181.html#ga10ba6001798f42a0f941f19ff30e066a">associatedMax</a> (vecType< T, P > const &x, vecType< U, P > const &a, vecType< T, P > const &y, vecType< U, P > const &b)</td></tr>
+<tr class="separator:ga10ba6001798f42a0f941f19ff30e066a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga62ca63cca6b21387b8a25474f441a869"><td class="memTemplParams" colspan="2">template<typename T , typename U , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga62ca63cca6b21387b8a25474f441a869"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00181.html#ga62ca63cca6b21387b8a25474f441a869">associatedMax</a> (T x, vecType< U, P > const &a, T y, vecType< U, P > const &b)</td></tr>
+<tr class="separator:ga62ca63cca6b21387b8a25474f441a869"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5364520173815b66a9d9e452c38bf312"><td class="memTemplParams" colspan="2">template<typename T , typename U , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga5364520173815b66a9d9e452c38bf312"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< U, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00181.html#ga5364520173815b66a9d9e452c38bf312">associatedMax</a> (vecType< T, P > const &x, U a, vecType< T, P > const &y, U b)</td></tr>
+<tr class="separator:ga5364520173815b66a9d9e452c38bf312"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaec891e363d91abbf3a4443cf2f652209"><td class="memTemplParams" colspan="2">template<typename T , typename U > </td></tr>
+<tr class="memitem:gaec891e363d91abbf3a4443cf2f652209"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL U </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00181.html#gaec891e363d91abbf3a4443cf2f652209">associatedMax</a> (T x, U a, T y, U b, T z, U c)</td></tr>
+<tr class="separator:gaec891e363d91abbf3a4443cf2f652209"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga065a0c1eb7837118ef79be88dfd78487"><td class="memTemplParams" colspan="2">template<typename T , typename U , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga065a0c1eb7837118ef79be88dfd78487"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< U, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00181.html#ga065a0c1eb7837118ef79be88dfd78487">associatedMax</a> (vecType< T, P > const &x, vecType< U, P > const &a, vecType< T, P > const &y, vecType< U, P > const &b, vecType< T, P > const &z, vecType< U, P > const &c)</td></tr>
+<tr class="separator:ga065a0c1eb7837118ef79be88dfd78487"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga553431a468e251623408603bcb51c9cb"><td class="memTemplParams" colspan="2">template<typename T , typename U , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga553431a468e251623408603bcb51c9cb"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00181.html#ga553431a468e251623408603bcb51c9cb">associatedMax</a> (T x, vecType< U, P > const &a, T y, vecType< U, P > const &b, T z, vecType< U, P > const &c)</td></tr>
+<tr class="separator:ga553431a468e251623408603bcb51c9cb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga327136e6a568569c03a056f90814b656"><td class="memTemplParams" colspan="2">template<typename T , typename U , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga327136e6a568569c03a056f90814b656"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< U, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00181.html#ga327136e6a568569c03a056f90814b656">associatedMax</a> (vecType< T, P > const &x, U a, vecType< T, P > const &y, U b, vecType< T, P > const &z, U c)</td></tr>
+<tr class="separator:ga327136e6a568569c03a056f90814b656"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3038ffcb43eaa6af75897a99a5047ccc"><td class="memTemplParams" colspan="2">template<typename T , typename U > </td></tr>
+<tr class="memitem:ga3038ffcb43eaa6af75897a99a5047ccc"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL U </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00181.html#ga3038ffcb43eaa6af75897a99a5047ccc">associatedMax</a> (T x, U a, T y, U b, T z, U c, T w, U d)</td></tr>
+<tr class="separator:ga3038ffcb43eaa6af75897a99a5047ccc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf607886421c35cd7e4f41a50d7c330e3"><td class="memTemplParams" colspan="2">template<typename T , typename U , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gaf607886421c35cd7e4f41a50d7c330e3"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< U, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00181.html#gaf607886421c35cd7e4f41a50d7c330e3">associatedMax</a> (vecType< T, P > const &x, vecType< U, P > const &a, vecType< T, P > const &y, vecType< U, P > const &b, vecType< T, P > const &z, vecType< U, P > const &c, vecType< T, P > const &w, vecType< U, P > const &d)</td></tr>
+<tr class="separator:gaf607886421c35cd7e4f41a50d7c330e3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7a165de1af9a3f9193516a3b47407086"><td class="memTemplParams" colspan="2">template<typename T , typename U , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga7a165de1af9a3f9193516a3b47407086"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< U, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00181.html#ga7a165de1af9a3f9193516a3b47407086">associatedMax</a> (T x, vecType< U, P > const &a, T y, vecType< U, P > const &b, T z, vecType< U, P > const &c, T w, vecType< U, P > const &d)</td></tr>
+<tr class="separator:ga7a165de1af9a3f9193516a3b47407086"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3122fbe8133ea54749b10fb93e8a167e"><td class="memTemplParams" colspan="2">template<typename T , typename U , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga3122fbe8133ea54749b10fb93e8a167e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< U, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00181.html#ga3122fbe8133ea54749b10fb93e8a167e">associatedMax</a> (vecType< T, P > const &x, U a, vecType< T, P > const &y, U b, vecType< T, P > const &z, U c, vecType< T, P > const &w, U d)</td></tr>
+<tr class="separator:ga3122fbe8133ea54749b10fb93e8a167e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gacc01bd272359572fc28437ae214a02df"><td class="memTemplParams" colspan="2">template<typename T , typename U , precision P> </td></tr>
+<tr class="memitem:gacc01bd272359572fc28437ae214a02df"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL U </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00181.html#gacc01bd272359572fc28437ae214a02df">associatedMin</a> (T x, U a, T y, U b)</td></tr>
+<tr class="separator:gacc01bd272359572fc28437ae214a02df"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8b538d10872626668a078e2bd495af25"><td class="memTemplParams" colspan="2">template<typename T , typename U , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga8b538d10872626668a078e2bd495af25"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec2< U, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00181.html#ga8b538d10872626668a078e2bd495af25">associatedMin</a> (vecType< T, P > const &x, vecType< U, P > const &a, vecType< T, P > const &y, vecType< U, P > const &b)</td></tr>
+<tr class="separator:ga8b538d10872626668a078e2bd495af25"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1dccff48fa5650c746533de83467da6e"><td class="memTemplParams" colspan="2">template<typename T , typename U , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga1dccff48fa5650c746533de83467da6e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< U, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00181.html#ga1dccff48fa5650c746533de83467da6e">associatedMin</a> (T x, const vecType< U, P > &a, T y, const vecType< U, P > &b)</td></tr>
+<tr class="separator:ga1dccff48fa5650c746533de83467da6e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga076717f4e07c6ae725cc1382d1ac4869"><td class="memTemplParams" colspan="2">template<typename T , typename U , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga076717f4e07c6ae725cc1382d1ac4869"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< U, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00181.html#ga076717f4e07c6ae725cc1382d1ac4869">associatedMin</a> (vecType< T, P > const &x, U a, vecType< T, P > const &y, U b)</td></tr>
+<tr class="separator:ga076717f4e07c6ae725cc1382d1ac4869"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad0aa8f86259a26d839d34a3577a923fc"><td class="memTemplParams" colspan="2">template<typename T , typename U > </td></tr>
+<tr class="memitem:gad0aa8f86259a26d839d34a3577a923fc"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL U </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00181.html#gad0aa8f86259a26d839d34a3577a923fc">associatedMin</a> (T x, U a, T y, U b, T z, U c)</td></tr>
+<tr class="separator:gad0aa8f86259a26d839d34a3577a923fc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5bc6b9acbf9e060d58a342fbe3b73d43"><td class="memTemplParams" colspan="2">template<typename T , typename U , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga5bc6b9acbf9e060d58a342fbe3b73d43"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< U, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00181.html#ga5bc6b9acbf9e060d58a342fbe3b73d43">associatedMin</a> (vecType< T, P > const &x, vecType< U, P > const &a, vecType< T, P > const &y, vecType< U, P > const &b, vecType< T, P > const &z, vecType< U, P > const &c)</td></tr>
+<tr class="separator:ga5bc6b9acbf9e060d58a342fbe3b73d43"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga432224ebe2085eaa2b63a077ecbbbff6"><td class="memTemplParams" colspan="2">template<typename T , typename U > </td></tr>
+<tr class="memitem:ga432224ebe2085eaa2b63a077ecbbbff6"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL U </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00181.html#ga432224ebe2085eaa2b63a077ecbbbff6">associatedMin</a> (T x, U a, T y, U b, T z, U c, T w, U d)</td></tr>
+<tr class="separator:ga432224ebe2085eaa2b63a077ecbbbff6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga88e031f22b80215505928900d3dde549"><td class="memTemplParams" colspan="2">template<typename T , typename U , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga88e031f22b80215505928900d3dde549"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< U, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00181.html#ga88e031f22b80215505928900d3dde549">associatedMin</a> (vecType< T, P > const &x, vecType< U, P > const &a, vecType< T, P > const &y, vecType< U, P > const &b, vecType< T, P > const &z, vecType< U, P > const &c, vecType< T, P > const &w, vecType< U, P > const &d)</td></tr>
+<tr class="separator:ga88e031f22b80215505928900d3dde549"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0f63b0dce5a5c3242cc6d9847e7d14f1"><td class="memTemplParams" colspan="2">template<typename T , typename U , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga0f63b0dce5a5c3242cc6d9847e7d14f1"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< U, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00181.html#ga0f63b0dce5a5c3242cc6d9847e7d14f1">associatedMin</a> (T x, vecType< U, P > const &a, T y, vecType< U, P > const &b, T z, vecType< U, P > const &c, T w, vecType< U, P > const &d)</td></tr>
+<tr class="separator:ga0f63b0dce5a5c3242cc6d9847e7d14f1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga00a949fd345f4b31b259f033d3ab4a1c"><td class="memTemplParams" colspan="2">template<typename T , typename U , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga00a949fd345f4b31b259f033d3ab4a1c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< U, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00181.html#ga00a949fd345f4b31b259f033d3ab4a1c">associatedMin</a> (vecType< T, P > const &x, U a, vecType< T, P > const &y, U b, vecType< T, P > const &z, U c, vecType< T, P > const &w, U d)</td></tr>
+<tr class="separator:ga00a949fd345f4b31b259f033d3ab4a1c"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Min and max functions that return associated values not the compared onces. </p>
+<p><<a class="el" href="a00007.html" title="GLM_GTX_associated_min_max ">glm/gtx/associated_min_max.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga7d9c8785230c8db60f72ec8975f1ba45"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL U glm::associatedMax </td>
+ <td>(</td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">U </td>
+ <td class="paramname"><em>a</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">U </td>
+ <td class="paramname"><em>b</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Maximum comparison between 2 variables and returns 2 associated variable values. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00181.html" title="Min and max functions that return associated values not the compared onces. ">GLM_GTX_associated_min_max</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga10ba6001798f42a0f941f19ff30e066a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tvec2<U, P> glm::associatedMax </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< U, P > const & </td>
+ <td class="paramname"><em>a</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< U, P > const & </td>
+ <td class="paramname"><em>b</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Maximum comparison between 2 variables and returns 2 associated variable values. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00181.html" title="Min and max functions that return associated values not the compared onces. ">GLM_GTX_associated_min_max</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga62ca63cca6b21387b8a25474f441a869"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::associatedMax </td>
+ <td>(</td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< U, P > const & </td>
+ <td class="paramname"><em>a</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< U, P > const & </td>
+ <td class="paramname"><em>b</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Maximum comparison between 2 variables and returns 2 associated variable values. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00181.html" title="Min and max functions that return associated values not the compared onces. ">GLM_GTX_associated_min_max</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga5364520173815b66a9d9e452c38bf312"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<U, P> glm::associatedMax </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">U </td>
+ <td class="paramname"><em>a</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">U </td>
+ <td class="paramname"><em>b</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Maximum comparison between 2 variables and returns 2 associated variable values. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00181.html" title="Min and max functions that return associated values not the compared onces. ">GLM_GTX_associated_min_max</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaec891e363d91abbf3a4443cf2f652209"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL U glm::associatedMax </td>
+ <td>(</td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">U </td>
+ <td class="paramname"><em>a</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">U </td>
+ <td class="paramname"><em>b</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>z</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">U </td>
+ <td class="paramname"><em>c</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Maximum comparison between 3 variables and returns 3 associated variable values. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00181.html" title="Min and max functions that return associated values not the compared onces. ">GLM_GTX_associated_min_max</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga065a0c1eb7837118ef79be88dfd78487"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<U, P> glm::associatedMax </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< U, P > const & </td>
+ <td class="paramname"><em>a</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< U, P > const & </td>
+ <td class="paramname"><em>b</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>z</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< U, P > const & </td>
+ <td class="paramname"><em>c</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Maximum comparison between 3 variables and returns 3 associated variable values. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00181.html" title="Min and max functions that return associated values not the compared onces. ">GLM_GTX_associated_min_max</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga553431a468e251623408603bcb51c9cb"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::associatedMax </td>
+ <td>(</td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< U, P > const & </td>
+ <td class="paramname"><em>a</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< U, P > const & </td>
+ <td class="paramname"><em>b</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>z</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< U, P > const & </td>
+ <td class="paramname"><em>c</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Maximum comparison between 3 variables and returns 3 associated variable values. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00181.html" title="Min and max functions that return associated values not the compared onces. ">GLM_GTX_associated_min_max</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga327136e6a568569c03a056f90814b656"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<U, P> glm::associatedMax </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">U </td>
+ <td class="paramname"><em>a</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">U </td>
+ <td class="paramname"><em>b</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>z</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">U </td>
+ <td class="paramname"><em>c</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Maximum comparison between 3 variables and returns 3 associated variable values. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00181.html" title="Min and max functions that return associated values not the compared onces. ">GLM_GTX_associated_min_max</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga3038ffcb43eaa6af75897a99a5047ccc"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL U glm::associatedMax </td>
+ <td>(</td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">U </td>
+ <td class="paramname"><em>a</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">U </td>
+ <td class="paramname"><em>b</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>z</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">U </td>
+ <td class="paramname"><em>c</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">U </td>
+ <td class="paramname"><em>d</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Maximum comparison between 4 variables and returns 4 associated variable values. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00181.html" title="Min and max functions that return associated values not the compared onces. ">GLM_GTX_associated_min_max</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaf607886421c35cd7e4f41a50d7c330e3"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<U, P> glm::associatedMax </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< U, P > const & </td>
+ <td class="paramname"><em>a</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< U, P > const & </td>
+ <td class="paramname"><em>b</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>z</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< U, P > const & </td>
+ <td class="paramname"><em>c</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< U, P > const & </td>
+ <td class="paramname"><em>d</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Maximum comparison between 4 variables and returns 4 associated variable values. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00181.html" title="Min and max functions that return associated values not the compared onces. ">GLM_GTX_associated_min_max</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga7a165de1af9a3f9193516a3b47407086"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<U, P> glm::associatedMax </td>
+ <td>(</td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< U, P > const & </td>
+ <td class="paramname"><em>a</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< U, P > const & </td>
+ <td class="paramname"><em>b</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>z</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< U, P > const & </td>
+ <td class="paramname"><em>c</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< U, P > const & </td>
+ <td class="paramname"><em>d</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Maximum comparison between 4 variables and returns 4 associated variable values. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00181.html" title="Min and max functions that return associated values not the compared onces. ">GLM_GTX_associated_min_max</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga3122fbe8133ea54749b10fb93e8a167e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<U, P> glm::associatedMax </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">U </td>
+ <td class="paramname"><em>a</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">U </td>
+ <td class="paramname"><em>b</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>z</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">U </td>
+ <td class="paramname"><em>c</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">U </td>
+ <td class="paramname"><em>d</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Maximum comparison between 4 variables and returns 4 associated variable values. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00181.html" title="Min and max functions that return associated values not the compared onces. ">GLM_GTX_associated_min_max</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gacc01bd272359572fc28437ae214a02df"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL U glm::associatedMin </td>
+ <td>(</td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">U </td>
+ <td class="paramname"><em>a</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">U </td>
+ <td class="paramname"><em>b</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Minimum comparison between 2 variables and returns 2 associated variable values. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00181.html" title="Min and max functions that return associated values not the compared onces. ">GLM_GTX_associated_min_max</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga8b538d10872626668a078e2bd495af25"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tvec2<U, P> glm::associatedMin </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< U, P > const & </td>
+ <td class="paramname"><em>a</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< U, P > const & </td>
+ <td class="paramname"><em>b</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Minimum comparison between 2 variables and returns 2 associated variable values. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00181.html" title="Min and max functions that return associated values not the compared onces. ">GLM_GTX_associated_min_max</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga1dccff48fa5650c746533de83467da6e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<U, P> glm::associatedMin </td>
+ <td>(</td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const vecType< U, P > & </td>
+ <td class="paramname"><em>a</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const vecType< U, P > & </td>
+ <td class="paramname"><em>b</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Minimum comparison between 2 variables and returns 2 associated variable values. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00181.html" title="Min and max functions that return associated values not the compared onces. ">GLM_GTX_associated_min_max</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga076717f4e07c6ae725cc1382d1ac4869"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<U, P> glm::associatedMin </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">U </td>
+ <td class="paramname"><em>a</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">U </td>
+ <td class="paramname"><em>b</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Minimum comparison between 2 variables and returns 2 associated variable values. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00181.html" title="Min and max functions that return associated values not the compared onces. ">GLM_GTX_associated_min_max</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gad0aa8f86259a26d839d34a3577a923fc"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL U glm::associatedMin </td>
+ <td>(</td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">U </td>
+ <td class="paramname"><em>a</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">U </td>
+ <td class="paramname"><em>b</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>z</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">U </td>
+ <td class="paramname"><em>c</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Minimum comparison between 3 variables and returns 3 associated variable values. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00181.html" title="Min and max functions that return associated values not the compared onces. ">GLM_GTX_associated_min_max</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga5bc6b9acbf9e060d58a342fbe3b73d43"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<U, P> glm::associatedMin </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< U, P > const & </td>
+ <td class="paramname"><em>a</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< U, P > const & </td>
+ <td class="paramname"><em>b</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>z</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< U, P > const & </td>
+ <td class="paramname"><em>c</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Minimum comparison between 3 variables and returns 3 associated variable values. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00181.html" title="Min and max functions that return associated values not the compared onces. ">GLM_GTX_associated_min_max</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga432224ebe2085eaa2b63a077ecbbbff6"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL U glm::associatedMin </td>
+ <td>(</td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">U </td>
+ <td class="paramname"><em>a</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">U </td>
+ <td class="paramname"><em>b</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>z</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">U </td>
+ <td class="paramname"><em>c</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">U </td>
+ <td class="paramname"><em>d</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Minimum comparison between 4 variables and returns 4 associated variable values. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00181.html" title="Min and max functions that return associated values not the compared onces. ">GLM_GTX_associated_min_max</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga88e031f22b80215505928900d3dde549"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<U, P> glm::associatedMin </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< U, P > const & </td>
+ <td class="paramname"><em>a</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< U, P > const & </td>
+ <td class="paramname"><em>b</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>z</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< U, P > const & </td>
+ <td class="paramname"><em>c</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< U, P > const & </td>
+ <td class="paramname"><em>d</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Minimum comparison between 4 variables and returns 4 associated variable values. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00181.html" title="Min and max functions that return associated values not the compared onces. ">GLM_GTX_associated_min_max</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga0f63b0dce5a5c3242cc6d9847e7d14f1"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<U, P> glm::associatedMin </td>
+ <td>(</td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< U, P > const & </td>
+ <td class="paramname"><em>a</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< U, P > const & </td>
+ <td class="paramname"><em>b</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>z</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< U, P > const & </td>
+ <td class="paramname"><em>c</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< U, P > const & </td>
+ <td class="paramname"><em>d</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Minimum comparison between 4 variables and returns 4 associated variable values. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00181.html" title="Min and max functions that return associated values not the compared onces. ">GLM_GTX_associated_min_max</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga00a949fd345f4b31b259f033d3ab4a1c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<U, P> glm::associatedMin </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">U </td>
+ <td class="paramname"><em>a</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">U </td>
+ <td class="paramname"><em>b</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>z</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">U </td>
+ <td class="paramname"><em>c</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">U </td>
+ <td class="paramname"><em>d</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Minimum comparison between 4 variables and returns 4 associated variable values. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00181.html" title="Min and max functions that return associated values not the compared onces. ">GLM_GTX_associated_min_max</a> </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00182.html b/src/third_party/glm/doc/api/a00182.html
new file mode 100644
index 0000000..7e0f449
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00182.html
@@ -0,0 +1,273 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_bit</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTX_bit<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga0dcc8fe7c3d3ad60dea409281efa3d05"><td class="memTemplParams" colspan="2">template<typename genIUType > </td></tr>
+<tr class="memitem:ga0dcc8fe7c3d3ad60dea409281efa3d05"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genIUType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00182.html#ga0dcc8fe7c3d3ad60dea409281efa3d05">highestBitValue</a> (genIUType Value)</td></tr>
+<tr class="separator:ga0dcc8fe7c3d3ad60dea409281efa3d05"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5eea3a4d429040af13d39a7d7cd84d73"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga5eea3a4d429040af13d39a7d7cd84d73"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00182.html#ga5eea3a4d429040af13d39a7d7cd84d73">highestBitValue</a> (vecType< T, P > const &value)</td></tr>
+<tr class="separator:ga5eea3a4d429040af13d39a7d7cd84d73"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2ff6568089f3a9b67f5c30918855fc6f"><td class="memTemplParams" colspan="2">template<typename genIUType > </td></tr>
+<tr class="memitem:ga2ff6568089f3a9b67f5c30918855fc6f"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genIUType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00182.html#ga2ff6568089f3a9b67f5c30918855fc6f">lowestBitValue</a> (genIUType Value)</td></tr>
+<tr class="separator:ga2ff6568089f3a9b67f5c30918855fc6f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8cda2459871f574a0aecbe702ac93291"><td class="memTemplParams" colspan="2">template<typename genIUType > </td></tr>
+<tr class="memitem:ga8cda2459871f574a0aecbe702ac93291"><td class="memTemplItemLeft" align="right" valign="top">GLM_DEPRECATED GLM_FUNC_DECL genIUType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00182.html#ga8cda2459871f574a0aecbe702ac93291">powerOfTwoAbove</a> (genIUType Value)</td></tr>
+<tr class="separator:ga8cda2459871f574a0aecbe702ac93291"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafe08808a50226b75b50e640a08b32ddc"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gafe08808a50226b75b50e640a08b32ddc"><td class="memTemplItemLeft" align="right" valign="top">GLM_DEPRECATED GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00182.html#gafe08808a50226b75b50e640a08b32ddc">powerOfTwoAbove</a> (vecType< T, P > const &value)</td></tr>
+<tr class="separator:gafe08808a50226b75b50e640a08b32ddc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3de7df63c589325101a2817a56f8e29d"><td class="memTemplParams" colspan="2">template<typename genIUType > </td></tr>
+<tr class="memitem:ga3de7df63c589325101a2817a56f8e29d"><td class="memTemplItemLeft" align="right" valign="top">GLM_DEPRECATED GLM_FUNC_DECL genIUType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00182.html#ga3de7df63c589325101a2817a56f8e29d">powerOfTwoBelow</a> (genIUType Value)</td></tr>
+<tr class="separator:ga3de7df63c589325101a2817a56f8e29d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae33bb1ca2b55846b23a0f0796a679195"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gae33bb1ca2b55846b23a0f0796a679195"><td class="memTemplItemLeft" align="right" valign="top">GLM_DEPRECATED GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00182.html#gae33bb1ca2b55846b23a0f0796a679195">powerOfTwoBelow</a> (vecType< T, P > const &value)</td></tr>
+<tr class="separator:gae33bb1ca2b55846b23a0f0796a679195"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5f65973a5d2ea38c719e6a663149ead9"><td class="memTemplParams" colspan="2">template<typename genIUType > </td></tr>
+<tr class="memitem:ga5f65973a5d2ea38c719e6a663149ead9"><td class="memTemplItemLeft" align="right" valign="top">GLM_DEPRECATED GLM_FUNC_DECL genIUType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00182.html#ga5f65973a5d2ea38c719e6a663149ead9">powerOfTwoNearest</a> (genIUType Value)</td></tr>
+<tr class="separator:ga5f65973a5d2ea38c719e6a663149ead9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2d7e85995d097518b8d70cd409bda39e"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga2d7e85995d097518b8d70cd409bda39e"><td class="memTemplItemLeft" align="right" valign="top">GLM_DEPRECATED GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00182.html#ga2d7e85995d097518b8d70cd409bda39e">powerOfTwoNearest</a> (vecType< T, P > const &value)</td></tr>
+<tr class="separator:ga2d7e85995d097518b8d70cd409bda39e"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Allow to perform bit operations on integer values. </p>
+<p><<a class="el" href="a00008.html" title="GLM_GTX_bit ">glm/gtx/bit.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga0dcc8fe7c3d3ad60dea409281efa3d05"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genIUType glm::highestBitValue </td>
+ <td>(</td>
+ <td class="paramtype">genIUType </td>
+ <td class="paramname"><em>Value</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00182.html" title="Allow to perform bit operations on integer values. ">GLM_GTX_bit</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga5eea3a4d429040af13d39a7d7cd84d73"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::highestBitValue </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>value</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Find the highest bit set to 1 in a integer variable and return its value. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00182.html" title="Allow to perform bit operations on integer values. ">GLM_GTX_bit</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga2ff6568089f3a9b67f5c30918855fc6f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genIUType glm::lowestBitValue </td>
+ <td>(</td>
+ <td class="paramtype">genIUType </td>
+ <td class="paramname"><em>Value</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00182.html" title="Allow to perform bit operations on integer values. ">GLM_GTX_bit</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga8cda2459871f574a0aecbe702ac93291"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_DEPRECATED GLM_FUNC_DECL genIUType glm::powerOfTwoAbove </td>
+ <td>(</td>
+ <td class="paramtype">genIUType </td>
+ <td class="paramname"><em>Value</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return the power of two number which value is just higher the input value. </p>
+<p>Deprecated, use ceilPowerOfTwo from GTC_round instead</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00175.html" title="rounding value to specific boundings ">GLM_GTC_round</a> </dd>
+<dd>
+<a class="el" href="a00182.html" title="Allow to perform bit operations on integer values. ">GLM_GTX_bit</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gafe08808a50226b75b50e640a08b32ddc"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_DEPRECATED GLM_FUNC_DECL vecType<T, P> glm::powerOfTwoAbove </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>value</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return the power of two number which value is just higher the input value. </p>
+<p>Deprecated, use ceilPowerOfTwo from GTC_round instead</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00175.html" title="rounding value to specific boundings ">GLM_GTC_round</a> </dd>
+<dd>
+<a class="el" href="a00182.html" title="Allow to perform bit operations on integer values. ">GLM_GTX_bit</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga3de7df63c589325101a2817a56f8e29d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_DEPRECATED GLM_FUNC_DECL genIUType glm::powerOfTwoBelow </td>
+ <td>(</td>
+ <td class="paramtype">genIUType </td>
+ <td class="paramname"><em>Value</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return the power of two number which value is just lower the input value. </p>
+<p>Deprecated, use floorPowerOfTwo from GTC_round instead</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00175.html" title="rounding value to specific boundings ">GLM_GTC_round</a> </dd>
+<dd>
+<a class="el" href="a00182.html" title="Allow to perform bit operations on integer values. ">GLM_GTX_bit</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gae33bb1ca2b55846b23a0f0796a679195"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_DEPRECATED GLM_FUNC_DECL vecType<T, P> glm::powerOfTwoBelow </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>value</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return the power of two number which value is just lower the input value. </p>
+<p>Deprecated, use floorPowerOfTwo from GTC_round instead</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00175.html" title="rounding value to specific boundings ">GLM_GTC_round</a> </dd>
+<dd>
+<a class="el" href="a00182.html" title="Allow to perform bit operations on integer values. ">GLM_GTX_bit</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga5f65973a5d2ea38c719e6a663149ead9"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_DEPRECATED GLM_FUNC_DECL genIUType glm::powerOfTwoNearest </td>
+ <td>(</td>
+ <td class="paramtype">genIUType </td>
+ <td class="paramname"><em>Value</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return the power of two number which value is the closet to the input value. </p>
+<p>Deprecated, use roundPowerOfTwo from GTC_round instead</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00175.html" title="rounding value to specific boundings ">GLM_GTC_round</a> </dd>
+<dd>
+<a class="el" href="a00182.html" title="Allow to perform bit operations on integer values. ">GLM_GTX_bit</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga2d7e85995d097518b8d70cd409bda39e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_DEPRECATED GLM_FUNC_DECL vecType<T, P> glm::powerOfTwoNearest </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>value</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return the power of two number which value is the closet to the input value. </p>
+<p>Deprecated, use roundPowerOfTwo from GTC_round instead</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00175.html" title="rounding value to specific boundings ">GLM_GTC_round</a> </dd>
+<dd>
+<a class="el" href="a00182.html" title="Allow to perform bit operations on integer values. ">GLM_GTX_bit</a> </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00183.html b/src/third_party/glm/doc/api/a00183.html
new file mode 100644
index 0000000..de98d65
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00183.html
@@ -0,0 +1,103 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_closest_point</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTX_closest_point<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gac26353282a8213e469f5e33560c1200f"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gac26353282a8213e469f5e33560c1200f"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00183.html#gac26353282a8213e469f5e33560c1200f">closestPointOnLine</a> (tvec3< T, P > const &point, tvec3< T, P > const &a, tvec3< T, P > const &b)</td></tr>
+<tr class="separator:gac26353282a8213e469f5e33560c1200f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gadc7010070bb0cacd284f560299b21660"><td class="memTemplParams" colspan="2"><a class="anchor" id="gadc7010070bb0cacd284f560299b21660"></a>
+template<typename T , precision P> </td></tr>
+<tr class="memitem:gadc7010070bb0cacd284f560299b21660"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec2< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00183.html#gadc7010070bb0cacd284f560299b21660">closestPointOnLine</a> (tvec2< T, P > const &point, tvec2< T, P > const &a, tvec2< T, P > const &b)</td></tr>
+<tr class="separator:gadc7010070bb0cacd284f560299b21660"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Find the point on a straight line which is the closet of a point. </p>
+<p><<a class="el" href="a00010.html" title="GLM_GTX_closest_point ">glm/gtx/closest_point.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="gac26353282a8213e469f5e33560c1200f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tvec3<T, P> glm::closestPointOnLine </td>
+ <td>(</td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>point</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>a</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>b</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Find the point on a straight line which is the closet of a point. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00183.html" title="Find the point on a straight line which is the closet of a point. ">GLM_GTX_closest_point</a> </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00184.html b/src/third_party/glm/doc/api/a00184.html
new file mode 100644
index 0000000..eccf295
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00184.html
@@ -0,0 +1,213 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_color_space</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTX_color_space<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gae72039c00a7be2f03a3b94b37a54349a"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gae72039c00a7be2f03a3b94b37a54349a"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00184.html#gae72039c00a7be2f03a3b94b37a54349a">hsvColor</a> (tvec3< T, P > const &rgbValue)</td></tr>
+<tr class="separator:gae72039c00a7be2f03a3b94b37a54349a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa2f38a5100c3e1c7d39920df43bd8cbe"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gaa2f38a5100c3e1c7d39920df43bd8cbe"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00184.html#gaa2f38a5100c3e1c7d39920df43bd8cbe">luminosity</a> (tvec3< T, P > const &color)</td></tr>
+<tr class="separator:gaa2f38a5100c3e1c7d39920df43bd8cbe"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga36b0619e31daf57bc4a54dac2dcf34b7"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga36b0619e31daf57bc4a54dac2dcf34b7"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00184.html#ga36b0619e31daf57bc4a54dac2dcf34b7">rgbColor</a> (tvec3< T, P > const &hsvValue)</td></tr>
+<tr class="separator:ga36b0619e31daf57bc4a54dac2dcf34b7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafecfb15d58da8445103745af3348e516"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gafecfb15d58da8445103745af3348e516"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00184.html#gafecfb15d58da8445103745af3348e516">saturation</a> (T const s)</td></tr>
+<tr class="separator:gafecfb15d58da8445103745af3348e516"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga632ee8dadb44e90a05885f6f8c07d46c"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga632ee8dadb44e90a05885f6f8c07d46c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00184.html#ga632ee8dadb44e90a05885f6f8c07d46c">saturation</a> (T const s, tvec3< T, P > const &color)</td></tr>
+<tr class="separator:ga632ee8dadb44e90a05885f6f8c07d46c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2033e0566c595230714af396744e8a61"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga2033e0566c595230714af396744e8a61"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00184.html#ga2033e0566c595230714af396744e8a61">saturation</a> (T const s, tvec4< T, P > const &color)</td></tr>
+<tr class="separator:ga2033e0566c595230714af396744e8a61"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Related to RGB to HSV conversions and operations. </p>
+<p><<a class="el" href="a00012.html" title="GLM_GTX_color_space ">glm/gtx/color_space.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="gae72039c00a7be2f03a3b94b37a54349a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tvec3<T, P> glm::hsvColor </td>
+ <td>(</td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>rgbValue</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Converts a color from RGB color space to its color in HSV color space. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00184.html" title="Related to RGB to HSV conversions and operations. ">GLM_GTX_color_space</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaa2f38a5100c3e1c7d39920df43bd8cbe"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL T glm::luminosity </td>
+ <td>(</td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>color</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Compute color luminosity associating ratios (0.33, 0.59, 0.11) to RGB canals. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00184.html" title="Related to RGB to HSV conversions and operations. ">GLM_GTX_color_space</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga36b0619e31daf57bc4a54dac2dcf34b7"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tvec3<T, P> glm::rgbColor </td>
+ <td>(</td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>hsvValue</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Converts a color from HSV color space to its color in RGB color space. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00184.html" title="Related to RGB to HSV conversions and operations. ">GLM_GTX_color_space</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gafecfb15d58da8445103745af3348e516"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, defaultp> glm::saturation </td>
+ <td>(</td>
+ <td class="paramtype">T const </td>
+ <td class="paramname"><em>s</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a saturation matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00184.html" title="Related to RGB to HSV conversions and operations. ">GLM_GTX_color_space</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga632ee8dadb44e90a05885f6f8c07d46c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tvec3<T, P> glm::saturation </td>
+ <td>(</td>
+ <td class="paramtype">T const </td>
+ <td class="paramname"><em>s</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>color</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Modify the saturation of a color. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00184.html" title="Related to RGB to HSV conversions and operations. ">GLM_GTX_color_space</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga2033e0566c595230714af396744e8a61"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tvec4<T, P> glm::saturation </td>
+ <td>(</td>
+ <td class="paramtype">T const </td>
+ <td class="paramname"><em>s</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec4< T, P > const & </td>
+ <td class="paramname"><em>color</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Modify the saturation of a color. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00184.html" title="Related to RGB to HSV conversions and operations. ">GLM_GTX_color_space</a> </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00185.html b/src/third_party/glm/doc/api/a00185.html
new file mode 100644
index 0000000..663536c
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00185.html
@@ -0,0 +1,153 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_color_space_YCoCg</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTX_color_space_YCoCg<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga19481f6947c5b5482debd41e71b8c941"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga19481f6947c5b5482debd41e71b8c941"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00185.html#ga19481f6947c5b5482debd41e71b8c941">rgb2YCoCg</a> (tvec3< T, P > const &rgbColor)</td></tr>
+<tr class="separator:ga19481f6947c5b5482debd41e71b8c941"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2e534594cc8ad252d23b14fb363ae9e2"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga2e534594cc8ad252d23b14fb363ae9e2"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00185.html#ga2e534594cc8ad252d23b14fb363ae9e2">rgb2YCoCgR</a> (tvec3< T, P > const &rgbColor)</td></tr>
+<tr class="separator:ga2e534594cc8ad252d23b14fb363ae9e2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6d7e988a79b299ca1fa59f537e13800b"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga6d7e988a79b299ca1fa59f537e13800b"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00185.html#ga6d7e988a79b299ca1fa59f537e13800b">YCoCg2rgb</a> (tvec3< T, P > const &YCoCgColor)</td></tr>
+<tr class="separator:ga6d7e988a79b299ca1fa59f537e13800b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4bac5462c00df0ae89242ecdbbe5dbad"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga4bac5462c00df0ae89242ecdbbe5dbad"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00185.html#ga4bac5462c00df0ae89242ecdbbe5dbad">YCoCgR2rgb</a> (tvec3< T, P > const &YCoCgColor)</td></tr>
+<tr class="separator:ga4bac5462c00df0ae89242ecdbbe5dbad"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>RGB to YCoCg conversions and operations. </p>
+<p><<a class="el" href="a00013.html" title="GLM_GTX_color_space_YCoCg ">glm/gtx/color_space_YCoCg.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga19481f6947c5b5482debd41e71b8c941"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tvec3<T, P> glm::rgb2YCoCg </td>
+ <td>(</td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>rgbColor</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Convert a color from RGB color space to YCoCg color space. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00185.html" title="RGB to YCoCg conversions and operations. ">GLM_GTX_color_space_YCoCg</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga2e534594cc8ad252d23b14fb363ae9e2"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tvec3<T, P> glm::rgb2YCoCgR </td>
+ <td>(</td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>rgbColor</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Convert a color from RGB color space to YCoCgR color space. </p>
+<dl class="section see"><dt>See also</dt><dd>"YCoCg-R: A Color Space with RGB Reversibility and Low Dynamic Range" </dd>
+<dd>
+<a class="el" href="a00185.html" title="RGB to YCoCg conversions and operations. ">GLM_GTX_color_space_YCoCg</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga6d7e988a79b299ca1fa59f537e13800b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tvec3<T, P> glm::YCoCg2rgb </td>
+ <td>(</td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>YCoCgColor</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Convert a color from YCoCg color space to RGB color space. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00185.html" title="RGB to YCoCg conversions and operations. ">GLM_GTX_color_space_YCoCg</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga4bac5462c00df0ae89242ecdbbe5dbad"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tvec3<T, P> glm::YCoCgR2rgb </td>
+ <td>(</td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>YCoCgColor</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Convert a color from YCoCgR color space to RGB color space. </p>
+<dl class="section see"><dt>See also</dt><dd>"YCoCg-R: A Color Space with RGB Reversibility and Low Dynamic Range" </dd>
+<dd>
+<a class="el" href="a00185.html" title="RGB to YCoCg conversions and operations. ">GLM_GTX_color_space_YCoCg</a> </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00186.html b/src/third_party/glm/doc/api/a00186.html
new file mode 100644
index 0000000..3ad0060
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00186.html
@@ -0,0 +1,117 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_common</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTX_common<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga2580f50d4064557d62f4a533dfc6c7e3"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga2580f50d4064557d62f4a533dfc6c7e3"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00186.html#ga2580f50d4064557d62f4a533dfc6c7e3">fmod</a> (vecType< T, P > const &v)</td></tr>
+<tr class="separator:ga2580f50d4064557d62f4a533dfc6c7e3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga74aa7c7462245d83bd5a9edf9c6c2d91"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga74aa7c7462245d83bd5a9edf9c6c2d91"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType::bool_type </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00186.html#ga74aa7c7462245d83bd5a9edf9c6c2d91">isdenormal</a> (genType const &x)</td></tr>
+<tr class="separator:ga74aa7c7462245d83bd5a9edf9c6c2d91"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Provide functions to increase the compatibility with Cg and HLSL languages. </p>
+<p><<a class="el" href="a00015.html" title="GLM_GTX_common ">glm/gtx/common.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga2580f50d4064557d62f4a533dfc6c7e3"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::fmod </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Similar to 'mod' but with a different rounding and integer support. </p>
+<p>Returns 'x - y * trunc(x/y)' instead of 'x - y * floor(x/y)'</p>
+<dl class="section see"><dt>See also</dt><dd><a href="http://stackoverflow.com/questions/7610631/glsl-mod-vs-hlsl-fmod">GLSL mod vs HLSL fmod</a> </dd>
+<dd>
+<a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/mod.xml">GLSL mod man page</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga74aa7c7462245d83bd5a9edf9c6c2d91"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType::bool_type glm::isdenormal </td>
+ <td>(</td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns true if x is a denormalized number Numbers whose absolute value is too small to be represented in the normal format are represented in an alternate, denormalized format. </p>
+<p>This format is less precise but can represent values closer to zero.</p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">genType</td><td>Floating-point scalar or vector types.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/isnan.xml">GLSL isnan man page</a> </dd>
+<dd>
+<a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00187.html b/src/third_party/glm/doc/api/a00187.html
new file mode 100644
index 0000000..79fc4b6
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00187.html
@@ -0,0 +1,312 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_compatibility</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#typedef-members">Typedefs</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTX_compatibility<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:gaddcd7aa2e30e61af5b38660613d3979e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaddcd7aa2e30e61af5b38660613d3979e"></a>
+typedef bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gaddcd7aa2e30e61af5b38660613d3979e">bool1</a></td></tr>
+<tr class="separator:gaddcd7aa2e30e61af5b38660613d3979e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7f895c936f0c29c8729afbbf22806090"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7f895c936f0c29c8729afbbf22806090"></a>
+typedef bool </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga7f895c936f0c29c8729afbbf22806090">bool1x1</a></td></tr>
+<tr class="separator:ga7f895c936f0c29c8729afbbf22806090"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafa8d0bc8dfa7eeb928208305714f648d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gafa8d0bc8dfa7eeb928208305714f648d"></a>
+typedef tvec2< bool, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gafa8d0bc8dfa7eeb928208305714f648d">bool2</a></td></tr>
+<tr class="separator:gafa8d0bc8dfa7eeb928208305714f648d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2bfb53bc320966c85149934fffb0329d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2bfb53bc320966c85149934fffb0329d"></a>
+typedef tmat2x2< bool, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga2bfb53bc320966c85149934fffb0329d">bool2x2</a></td></tr>
+<tr class="separator:ga2bfb53bc320966c85149934fffb0329d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad02e7dff74039bb1454643e293d85dfe"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad02e7dff74039bb1454643e293d85dfe"></a>
+typedef tmat2x3< bool, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gad02e7dff74039bb1454643e293d85dfe">bool2x3</a></td></tr>
+<tr class="separator:gad02e7dff74039bb1454643e293d85dfe"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga379c0869949e8a69c3d06d7637caa5d7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga379c0869949e8a69c3d06d7637caa5d7"></a>
+typedef tmat2x4< bool, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga379c0869949e8a69c3d06d7637caa5d7">bool2x4</a></td></tr>
+<tr class="separator:ga379c0869949e8a69c3d06d7637caa5d7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab8d74ea4c4f4bd980b650ffb27cdb659"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gab8d74ea4c4f4bd980b650ffb27cdb659"></a>
+typedef tvec3< bool, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gab8d74ea4c4f4bd980b650ffb27cdb659">bool3</a></td></tr>
+<tr class="separator:gab8d74ea4c4f4bd980b650ffb27cdb659"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0fc7ecb53df5be5f9d766fbbfe5190d7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga0fc7ecb53df5be5f9d766fbbfe5190d7"></a>
+typedef tmat3x2< bool, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga0fc7ecb53df5be5f9d766fbbfe5190d7">bool3x2</a></td></tr>
+<tr class="separator:ga0fc7ecb53df5be5f9d766fbbfe5190d7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae621c9eabcba552eea5f6ade1f403605"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae621c9eabcba552eea5f6ade1f403605"></a>
+typedef tmat3x3< bool, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gae621c9eabcba552eea5f6ade1f403605">bool3x3</a></td></tr>
+<tr class="separator:gae621c9eabcba552eea5f6ade1f403605"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad13f8250579ebf79760dcf64215ddb17"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad13f8250579ebf79760dcf64215ddb17"></a>
+typedef tmat3x4< bool, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gad13f8250579ebf79760dcf64215ddb17">bool3x4</a></td></tr>
+<tr class="separator:gad13f8250579ebf79760dcf64215ddb17"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6e79dbfab5917c467a154638ba27898e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga6e79dbfab5917c467a154638ba27898e"></a>
+typedef tvec4< bool, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga6e79dbfab5917c467a154638ba27898e">bool4</a></td></tr>
+<tr class="separator:ga6e79dbfab5917c467a154638ba27898e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga184ee05ac2bbbf0a91dd364ba8e528db"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga184ee05ac2bbbf0a91dd364ba8e528db"></a>
+typedef tmat4x2< bool, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga184ee05ac2bbbf0a91dd364ba8e528db">bool4x2</a></td></tr>
+<tr class="separator:ga184ee05ac2bbbf0a91dd364ba8e528db"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga83e4c62ab1addfe708dc3409cc0e5dfb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga83e4c62ab1addfe708dc3409cc0e5dfb"></a>
+typedef tmat4x3< bool, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga83e4c62ab1addfe708dc3409cc0e5dfb">bool4x3</a></td></tr>
+<tr class="separator:ga83e4c62ab1addfe708dc3409cc0e5dfb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9770607032813e7b0ca7362a47efea1e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga9770607032813e7b0ca7362a47efea1e"></a>
+typedef tmat4x4< bool, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga9770607032813e7b0ca7362a47efea1e">bool4x4</a></td></tr>
+<tr class="separator:ga9770607032813e7b0ca7362a47efea1e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga20b861a9b6e2a300323671c57a02525b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga20b861a9b6e2a300323671c57a02525b"></a>
+typedef double </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga20b861a9b6e2a300323671c57a02525b">double1</a></td></tr>
+<tr class="separator:ga20b861a9b6e2a300323671c57a02525b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga45f16a4dd0db1f199afaed9fd12fe9a8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga45f16a4dd0db1f199afaed9fd12fe9a8"></a>
+typedef double </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga45f16a4dd0db1f199afaed9fd12fe9a8">double1x1</a></td></tr>
+<tr class="separator:ga45f16a4dd0db1f199afaed9fd12fe9a8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa16a13c6f2768e83ca133430e82ab89e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaa16a13c6f2768e83ca133430e82ab89e"></a>
+typedef tvec2< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gaa16a13c6f2768e83ca133430e82ab89e">double2</a></td></tr>
+<tr class="separator:gaa16a13c6f2768e83ca133430e82ab89e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga320d0a71a4ad9f14a1992d40546cffa7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga320d0a71a4ad9f14a1992d40546cffa7"></a>
+typedef tmat2x2< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga320d0a71a4ad9f14a1992d40546cffa7">double2x2</a></td></tr>
+<tr class="separator:ga320d0a71a4ad9f14a1992d40546cffa7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gade37cf30c69bacb41ceea7e32717eac7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gade37cf30c69bacb41ceea7e32717eac7"></a>
+typedef tmat2x3< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gade37cf30c69bacb41ceea7e32717eac7">double2x3</a></td></tr>
+<tr class="separator:gade37cf30c69bacb41ceea7e32717eac7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf923922adf744404d5bfb3fafb7d0d8e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaf923922adf744404d5bfb3fafb7d0d8e"></a>
+typedef tmat2x4< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gaf923922adf744404d5bfb3fafb7d0d8e">double2x4</a></td></tr>
+<tr class="separator:gaf923922adf744404d5bfb3fafb7d0d8e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaed4bc64196bd25d46f6a1f417320a391"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaed4bc64196bd25d46f6a1f417320a391"></a>
+typedef tvec3< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gaed4bc64196bd25d46f6a1f417320a391">double3</a></td></tr>
+<tr class="separator:gaed4bc64196bd25d46f6a1f417320a391"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaeaac4d0e18164e4d2fe54432c0fbbcf6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaeaac4d0e18164e4d2fe54432c0fbbcf6"></a>
+typedef tmat3x2< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gaeaac4d0e18164e4d2fe54432c0fbbcf6">double3x2</a></td></tr>
+<tr class="separator:gaeaac4d0e18164e4d2fe54432c0fbbcf6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac934f579ee5cf3cbdbb25b73f2640c0a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac934f579ee5cf3cbdbb25b73f2640c0a"></a>
+typedef tmat3x3< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gac934f579ee5cf3cbdbb25b73f2640c0a">double3x3</a></td></tr>
+<tr class="separator:gac934f579ee5cf3cbdbb25b73f2640c0a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaad84a1ea83be8fce04c1570c5e719413"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaad84a1ea83be8fce04c1570c5e719413"></a>
+typedef tmat3x4< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gaad84a1ea83be8fce04c1570c5e719413">double3x4</a></td></tr>
+<tr class="separator:gaad84a1ea83be8fce04c1570c5e719413"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab8bbb086c9a6c2deffbe0e80afd6be56"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gab8bbb086c9a6c2deffbe0e80afd6be56"></a>
+typedef tvec4< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gab8bbb086c9a6c2deffbe0e80afd6be56">double4</a></td></tr>
+<tr class="separator:gab8bbb086c9a6c2deffbe0e80afd6be56"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2f87500119da15e35e4a74780ba512bd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2f87500119da15e35e4a74780ba512bd"></a>
+typedef tmat4x2< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga2f87500119da15e35e4a74780ba512bd">double4x2</a></td></tr>
+<tr class="separator:ga2f87500119da15e35e4a74780ba512bd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa4e6d53c03780dfa76bd399324f9fe37"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaa4e6d53c03780dfa76bd399324f9fe37"></a>
+typedef tmat4x3< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gaa4e6d53c03780dfa76bd399324f9fe37">double4x3</a></td></tr>
+<tr class="separator:gaa4e6d53c03780dfa76bd399324f9fe37"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga686a3a5590f0a0e721faba08bda301d6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga686a3a5590f0a0e721faba08bda301d6"></a>
+typedef tmat4x4< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga686a3a5590f0a0e721faba08bda301d6">double4x4</a></td></tr>
+<tr class="separator:ga686a3a5590f0a0e721faba08bda301d6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf5208d01f6c6fbcb7bb55d610b9c0ead"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaf5208d01f6c6fbcb7bb55d610b9c0ead"></a>
+typedef float </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gaf5208d01f6c6fbcb7bb55d610b9c0ead">float1</a></td></tr>
+<tr class="separator:gaf5208d01f6c6fbcb7bb55d610b9c0ead"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga73720b8dc4620835b17f74d428f98c0c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga73720b8dc4620835b17f74d428f98c0c"></a>
+typedef float </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga73720b8dc4620835b17f74d428f98c0c">float1x1</a></td></tr>
+<tr class="separator:ga73720b8dc4620835b17f74d428f98c0c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga872a70333dd25af68b1ebba485be9e42"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga872a70333dd25af68b1ebba485be9e42"></a>
+typedef tvec2< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga872a70333dd25af68b1ebba485be9e42">float2</a></td></tr>
+<tr class="separator:ga872a70333dd25af68b1ebba485be9e42"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaad93cbc2b863e363d53d405d0451d03e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaad93cbc2b863e363d53d405d0451d03e"></a>
+typedef tmat2x2< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gaad93cbc2b863e363d53d405d0451d03e">float2x2</a></td></tr>
+<tr class="separator:gaad93cbc2b863e363d53d405d0451d03e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga098c33a30f901f4f6a76969d6db6b01b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga098c33a30f901f4f6a76969d6db6b01b"></a>
+typedef tmat2x3< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga098c33a30f901f4f6a76969d6db6b01b">float2x3</a></td></tr>
+<tr class="separator:ga098c33a30f901f4f6a76969d6db6b01b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab2ce4c366abc06c8bf7fe097ecea0dde"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gab2ce4c366abc06c8bf7fe097ecea0dde"></a>
+typedef tmat2x4< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gab2ce4c366abc06c8bf7fe097ecea0dde">float2x4</a></td></tr>
+<tr class="separator:gab2ce4c366abc06c8bf7fe097ecea0dde"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2bfa618285894e34f299e4984f092d56"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2bfa618285894e34f299e4984f092d56"></a>
+typedef tvec3< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga2bfa618285894e34f299e4984f092d56">float3</a></td></tr>
+<tr class="separator:ga2bfa618285894e34f299e4984f092d56"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf30014e7b6874f45d58eb580d04764ff"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaf30014e7b6874f45d58eb580d04764ff"></a>
+typedef tmat3x2< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gaf30014e7b6874f45d58eb580d04764ff">float3x2</a></td></tr>
+<tr class="separator:gaf30014e7b6874f45d58eb580d04764ff"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2692a729a69615d72dbebbdd0eba2363"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2692a729a69615d72dbebbdd0eba2363"></a>
+typedef tmat3x3< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga2692a729a69615d72dbebbdd0eba2363">float3x3</a></td></tr>
+<tr class="separator:ga2692a729a69615d72dbebbdd0eba2363"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac38c8929ccc87a2dc81eaab97ad5190e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac38c8929ccc87a2dc81eaab97ad5190e"></a>
+typedef tmat3x4< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gac38c8929ccc87a2dc81eaab97ad5190e">float3x4</a></td></tr>
+<tr class="separator:gac38c8929ccc87a2dc81eaab97ad5190e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5d49ed44dd9a9e944abc30371fc9045b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga5d49ed44dd9a9e944abc30371fc9045b"></a>
+typedef tvec4< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga5d49ed44dd9a9e944abc30371fc9045b">float4</a></td></tr>
+<tr class="separator:ga5d49ed44dd9a9e944abc30371fc9045b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga39a2af7aa8f2d29ca40afd2256c0e7c8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga39a2af7aa8f2d29ca40afd2256c0e7c8"></a>
+typedef tmat4x2< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga39a2af7aa8f2d29ca40afd2256c0e7c8">float4x2</a></td></tr>
+<tr class="separator:ga39a2af7aa8f2d29ca40afd2256c0e7c8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad749b26be059f35394fd71c7f7a44034"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad749b26be059f35394fd71c7f7a44034"></a>
+typedef tmat4x3< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gad749b26be059f35394fd71c7f7a44034">float4x3</a></td></tr>
+<tr class="separator:gad749b26be059f35394fd71c7f7a44034"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf40529862492ded2f3b96a6c886f6136"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaf40529862492ded2f3b96a6c886f6136"></a>
+typedef tmat4x4< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gaf40529862492ded2f3b96a6c886f6136">float4x4</a></td></tr>
+<tr class="separator:gaf40529862492ded2f3b96a6c886f6136"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0670a2111b5e4a6410bd027fa0232fc3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga0670a2111b5e4a6410bd027fa0232fc3"></a>
+typedef int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga0670a2111b5e4a6410bd027fa0232fc3">int1</a></td></tr>
+<tr class="separator:ga0670a2111b5e4a6410bd027fa0232fc3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga056ffe02d3a45af626f8e62221881c7a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga056ffe02d3a45af626f8e62221881c7a"></a>
+typedef int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga056ffe02d3a45af626f8e62221881c7a">int1x1</a></td></tr>
+<tr class="separator:ga056ffe02d3a45af626f8e62221881c7a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2eca687990bf3a08ef28bc4a9f2fe700"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2eca687990bf3a08ef28bc4a9f2fe700"></a>
+typedef tvec2< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga2eca687990bf3a08ef28bc4a9f2fe700">int2</a></td></tr>
+<tr class="separator:ga2eca687990bf3a08ef28bc4a9f2fe700"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab1c5d0631a6ae34e28bfb2851da387cc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gab1c5d0631a6ae34e28bfb2851da387cc"></a>
+typedef tmat2x2< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gab1c5d0631a6ae34e28bfb2851da387cc">int2x2</a></td></tr>
+<tr class="separator:gab1c5d0631a6ae34e28bfb2851da387cc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6dc93f0794eb5fadd7f68b85141a2434"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga6dc93f0794eb5fadd7f68b85141a2434"></a>
+typedef tmat2x3< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga6dc93f0794eb5fadd7f68b85141a2434">int2x3</a></td></tr>
+<tr class="separator:ga6dc93f0794eb5fadd7f68b85141a2434"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad5da9e1b4e0c64c5436b5696ab49540e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad5da9e1b4e0c64c5436b5696ab49540e"></a>
+typedef tmat2x4< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gad5da9e1b4e0c64c5436b5696ab49540e">int2x4</a></td></tr>
+<tr class="separator:gad5da9e1b4e0c64c5436b5696ab49540e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaaa6ceedf08a85e5fd73a482bc8b77b88"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaaa6ceedf08a85e5fd73a482bc8b77b88"></a>
+typedef tvec3< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gaaa6ceedf08a85e5fd73a482bc8b77b88">int3</a></td></tr>
+<tr class="separator:gaaa6ceedf08a85e5fd73a482bc8b77b88"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa98b1a06b802c975f02a5583f43632db"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaa98b1a06b802c975f02a5583f43632db"></a>
+typedef tmat3x2< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gaa98b1a06b802c975f02a5583f43632db">int3x2</a></td></tr>
+<tr class="separator:gaa98b1a06b802c975f02a5583f43632db"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga20c4d23defbc123ac4745c9b4262156f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga20c4d23defbc123ac4745c9b4262156f"></a>
+typedef tmat3x3< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga20c4d23defbc123ac4745c9b4262156f">int3x3</a></td></tr>
+<tr class="separator:ga20c4d23defbc123ac4745c9b4262156f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7b00c53838143bce963177122ab92c39"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7b00c53838143bce963177122ab92c39"></a>
+typedef tmat3x4< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga7b00c53838143bce963177122ab92c39">int3x4</a></td></tr>
+<tr class="separator:ga7b00c53838143bce963177122ab92c39"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab19c2df22e9b14081390fabd074081f1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gab19c2df22e9b14081390fabd074081f1"></a>
+typedef tvec4< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gab19c2df22e9b14081390fabd074081f1">int4</a></td></tr>
+<tr class="separator:gab19c2df22e9b14081390fabd074081f1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa53815539021200c4e10fd282832dcd3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaa53815539021200c4e10fd282832dcd3"></a>
+typedef tmat4x2< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#gaa53815539021200c4e10fd282832dcd3">int4x2</a></td></tr>
+<tr class="separator:gaa53815539021200c4e10fd282832dcd3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4a3bf0ecd6f6ff60836c5bee26c14abe"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga4a3bf0ecd6f6ff60836c5bee26c14abe"></a>
+typedef tmat4x3< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga4a3bf0ecd6f6ff60836c5bee26c14abe">int4x3</a></td></tr>
+<tr class="separator:ga4a3bf0ecd6f6ff60836c5bee26c14abe"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3bacf576b4b29f2f2959abff7a36652d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3bacf576b4b29f2f2959abff7a36652d"></a>
+typedef tmat4x4< int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00187.html#ga3bacf576b4b29f2f2959abff7a36652d">int4x4</a></td></tr>
+<tr class="separator:ga3bacf576b4b29f2f2959abff7a36652d"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gac63011205bf6d0be82589dc56dd26708"><td class="memTemplParams" colspan="2"><a class="anchor" id="gac63011205bf6d0be82589dc56dd26708"></a>
+template<typename T , precision P> </td></tr>
+<tr class="memitem:gac63011205bf6d0be82589dc56dd26708"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00187.html#gac63011205bf6d0be82589dc56dd26708">atan2</a> (T x, T y)</td></tr>
+<tr class="separator:gac63011205bf6d0be82589dc56dd26708"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga525f3e849d0fc64807f8ab571b4545f9"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga525f3e849d0fc64807f8ab571b4545f9"></a>
+template<typename T , precision P> </td></tr>
+<tr class="memitem:ga525f3e849d0fc64807f8ab571b4545f9"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER tvec2< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00187.html#ga525f3e849d0fc64807f8ab571b4545f9">atan2</a> (const tvec2< T, P > &x, const tvec2< T, P > &y)</td></tr>
+<tr class="separator:ga525f3e849d0fc64807f8ab571b4545f9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad328042b6734d3f2c49c0ec1328b14c0"><td class="memTemplParams" colspan="2"><a class="anchor" id="gad328042b6734d3f2c49c0ec1328b14c0"></a>
+template<typename T , precision P> </td></tr>
+<tr class="memitem:gad328042b6734d3f2c49c0ec1328b14c0"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00187.html#gad328042b6734d3f2c49c0ec1328b14c0">atan2</a> (const tvec3< T, P > &x, const tvec3< T, P > &y)</td></tr>
+<tr class="separator:gad328042b6734d3f2c49c0ec1328b14c0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga09d39c391a509a045b6c7061f15bdff5"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga09d39c391a509a045b6c7061f15bdff5"></a>
+template<typename T , precision P> </td></tr>
+<tr class="memitem:ga09d39c391a509a045b6c7061f15bdff5"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER tvec4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00187.html#ga09d39c391a509a045b6c7061f15bdff5">atan2</a> (const tvec4< T, P > &x, const tvec4< T, P > &y)</td></tr>
+<tr class="separator:ga09d39c391a509a045b6c7061f15bdff5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf4b04dcd3526996d68c1bfe17bfc8657"><td class="memTemplParams" colspan="2"><a class="anchor" id="gaf4b04dcd3526996d68c1bfe17bfc8657"></a>
+template<typename genType > </td></tr>
+<tr class="memitem:gaf4b04dcd3526996d68c1bfe17bfc8657"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00187.html#gaf4b04dcd3526996d68c1bfe17bfc8657">isfinite</a> (genType const &x)</td></tr>
+<tr class="separator:gaf4b04dcd3526996d68c1bfe17bfc8657"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga553e2e95b06a0f70c718605998889d3b"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga553e2e95b06a0f70c718605998889d3b"></a>
+template<typename T , precision P> </td></tr>
+<tr class="memitem:ga553e2e95b06a0f70c718605998889d3b"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec1< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00187.html#ga553e2e95b06a0f70c718605998889d3b">isfinite</a> (const tvec1< T, P > &x)</td></tr>
+<tr class="separator:ga553e2e95b06a0f70c718605998889d3b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7dd492aa7d6ec21715f9a91b6e5e596a"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga7dd492aa7d6ec21715f9a91b6e5e596a"></a>
+template<typename T , precision P> </td></tr>
+<tr class="memitem:ga7dd492aa7d6ec21715f9a91b6e5e596a"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec2< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00187.html#ga7dd492aa7d6ec21715f9a91b6e5e596a">isfinite</a> (const tvec2< T, P > &x)</td></tr>
+<tr class="separator:ga7dd492aa7d6ec21715f9a91b6e5e596a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1be9593d810fceb278a2854da8a25273"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga1be9593d810fceb278a2854da8a25273"></a>
+template<typename T , precision P> </td></tr>
+<tr class="memitem:ga1be9593d810fceb278a2854da8a25273"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00187.html#ga1be9593d810fceb278a2854da8a25273">isfinite</a> (const tvec3< T, P > &x)</td></tr>
+<tr class="separator:ga1be9593d810fceb278a2854da8a25273"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8c6a59e2f2ac84fba0c5932f1c35bf7a"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga8c6a59e2f2ac84fba0c5932f1c35bf7a"></a>
+template<typename T , precision P> </td></tr>
+<tr class="memitem:ga8c6a59e2f2ac84fba0c5932f1c35bf7a"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec4< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00187.html#ga8c6a59e2f2ac84fba0c5932f1c35bf7a">isfinite</a> (const tvec4< T, P > &x)</td></tr>
+<tr class="separator:ga8c6a59e2f2ac84fba0c5932f1c35bf7a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5494ba3a95ea6594c86fc75236886864"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga5494ba3a95ea6594c86fc75236886864"></a>
+template<typename T > </td></tr>
+<tr class="memitem:ga5494ba3a95ea6594c86fc75236886864"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00187.html#ga5494ba3a95ea6594c86fc75236886864">lerp</a> (T x, T y, T a)</td></tr>
+<tr class="separator:ga5494ba3a95ea6594c86fc75236886864"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0aa79a146332650a1eb18ae996c653fe"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga0aa79a146332650a1eb18ae996c653fe"></a>
+template<typename T , precision P> </td></tr>
+<tr class="memitem:ga0aa79a146332650a1eb18ae996c653fe"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER tvec2< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00187.html#ga0aa79a146332650a1eb18ae996c653fe">lerp</a> (const tvec2< T, P > &x, const tvec2< T, P > &y, T a)</td></tr>
+<tr class="separator:ga0aa79a146332650a1eb18ae996c653fe"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf4c885ac72b8879b05777cb516c555c9"><td class="memTemplParams" colspan="2"><a class="anchor" id="gaf4c885ac72b8879b05777cb516c555c9"></a>
+template<typename T , precision P> </td></tr>
+<tr class="memitem:gaf4c885ac72b8879b05777cb516c555c9"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00187.html#gaf4c885ac72b8879b05777cb516c555c9">lerp</a> (const tvec3< T, P > &x, const tvec3< T, P > &y, T a)</td></tr>
+<tr class="separator:gaf4c885ac72b8879b05777cb516c555c9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga363d5d069d31a6c2cdd1e9589dde4a60"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga363d5d069d31a6c2cdd1e9589dde4a60"></a>
+template<typename T , precision P> </td></tr>
+<tr class="memitem:ga363d5d069d31a6c2cdd1e9589dde4a60"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER tvec4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00187.html#ga363d5d069d31a6c2cdd1e9589dde4a60">lerp</a> (const tvec4< T, P > &x, const tvec4< T, P > &y, T a)</td></tr>
+<tr class="separator:ga363d5d069d31a6c2cdd1e9589dde4a60"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7609b44d8aefc5a277efe73395ff4070"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga7609b44d8aefc5a277efe73395ff4070"></a>
+template<typename T , precision P> </td></tr>
+<tr class="memitem:ga7609b44d8aefc5a277efe73395ff4070"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER tvec2< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00187.html#ga7609b44d8aefc5a277efe73395ff4070">lerp</a> (const tvec2< T, P > &x, const tvec2< T, P > &y, const tvec2< T, P > &a)</td></tr>
+<tr class="separator:ga7609b44d8aefc5a277efe73395ff4070"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga90a1d1364a8d078846857178bdcc9af1"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga90a1d1364a8d078846857178bdcc9af1"></a>
+template<typename T , precision P> </td></tr>
+<tr class="memitem:ga90a1d1364a8d078846857178bdcc9af1"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00187.html#ga90a1d1364a8d078846857178bdcc9af1">lerp</a> (const tvec3< T, P > &x, const tvec3< T, P > &y, const tvec3< T, P > &a)</td></tr>
+<tr class="separator:ga90a1d1364a8d078846857178bdcc9af1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae4b0244b0d882657bed0a99dfa33f379"><td class="memTemplParams" colspan="2"><a class="anchor" id="gae4b0244b0d882657bed0a99dfa33f379"></a>
+template<typename T , precision P> </td></tr>
+<tr class="memitem:gae4b0244b0d882657bed0a99dfa33f379"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER tvec4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00187.html#gae4b0244b0d882657bed0a99dfa33f379">lerp</a> (const tvec4< T, P > &x, const tvec4< T, P > &y, const tvec4< T, P > &a)</td></tr>
+<tr class="separator:gae4b0244b0d882657bed0a99dfa33f379"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0fd09e616d122bc2ed9726682ffd44b7"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga0fd09e616d122bc2ed9726682ffd44b7"></a>
+template<typename T , precision P> </td></tr>
+<tr class="memitem:ga0fd09e616d122bc2ed9726682ffd44b7"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00187.html#ga0fd09e616d122bc2ed9726682ffd44b7">saturate</a> (T x)</td></tr>
+<tr class="separator:ga0fd09e616d122bc2ed9726682ffd44b7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5815a26488231dfdf92242cf0c2d2107"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga5815a26488231dfdf92242cf0c2d2107"></a>
+template<typename T , precision P> </td></tr>
+<tr class="memitem:ga5815a26488231dfdf92242cf0c2d2107"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER tvec2< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00187.html#ga5815a26488231dfdf92242cf0c2d2107">saturate</a> (const tvec2< T, P > &x)</td></tr>
+<tr class="separator:ga5815a26488231dfdf92242cf0c2d2107"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga02ed1a53c6df104d56b69f8fb5e9af1b"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga02ed1a53c6df104d56b69f8fb5e9af1b"></a>
+template<typename T , precision P> </td></tr>
+<tr class="memitem:ga02ed1a53c6df104d56b69f8fb5e9af1b"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00187.html#ga02ed1a53c6df104d56b69f8fb5e9af1b">saturate</a> (const tvec3< T, P > &x)</td></tr>
+<tr class="separator:ga02ed1a53c6df104d56b69f8fb5e9af1b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga63791409bdef9745b956406afe3157f1"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga63791409bdef9745b956406afe3157f1"></a>
+template<typename T , precision P> </td></tr>
+<tr class="memitem:ga63791409bdef9745b956406afe3157f1"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER tvec4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00187.html#ga63791409bdef9745b956406afe3157f1">saturate</a> (const tvec4< T, P > &x)</td></tr>
+<tr class="separator:ga63791409bdef9745b956406afe3157f1"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Provide functions to increase the compatibility with Cg and HLSL languages. </p>
+<p><<a class="el" href="a00016.html" title="GLM_GTX_compatibility ">glm/gtx/compatibility.hpp</a>> need to be included to use these functionalities. </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00188.html b/src/third_party/glm/doc/api/a00188.html
new file mode 100644
index 0000000..b778768
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00188.html
@@ -0,0 +1,193 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_component_wise</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTX_component_wise<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gaf71833350e15e74d31cbf8a3e7f27051"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gaf71833350e15e74d31cbf8a3e7f27051"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType::value_type </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00188.html#gaf71833350e15e74d31cbf8a3e7f27051">compAdd</a> (genType const &v)</td></tr>
+<tr class="separator:gaf71833350e15e74d31cbf8a3e7f27051"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gabfa4bb19298c8c73d4217ba759c496b6"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gabfa4bb19298c8c73d4217ba759c496b6"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType::value_type </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00188.html#gabfa4bb19298c8c73d4217ba759c496b6">compMax</a> (genType const &v)</td></tr>
+<tr class="separator:gabfa4bb19298c8c73d4217ba759c496b6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab5d0832b5c7bb01b8d7395973bfb1425"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gab5d0832b5c7bb01b8d7395973bfb1425"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType::value_type </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00188.html#gab5d0832b5c7bb01b8d7395973bfb1425">compMin</a> (genType const &v)</td></tr>
+<tr class="separator:gab5d0832b5c7bb01b8d7395973bfb1425"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae8ab88024197202c9479d33bdc5a8a5d"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gae8ab88024197202c9479d33bdc5a8a5d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType::value_type </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00188.html#gae8ab88024197202c9479d33bdc5a8a5d">compMul</a> (genType const &v)</td></tr>
+<tr class="separator:gae8ab88024197202c9479d33bdc5a8a5d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaeb34fdf090d2d4da9babcdfec267f09e"><td class="memTemplParams" colspan="2">template<typename floatType , typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gaeb34fdf090d2d4da9babcdfec267f09e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< floatType, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00188.html#gaeb34fdf090d2d4da9babcdfec267f09e">compNormalize</a> (vecType< T, P > const &v)</td></tr>
+<tr class="separator:gaeb34fdf090d2d4da9babcdfec267f09e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaea99a3271016bfd331d9fa7587f3db37"><td class="memTemplParams" colspan="2">template<typename T , typename floatType , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gaea99a3271016bfd331d9fa7587f3db37"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00188.html#gaea99a3271016bfd331d9fa7587f3db37">compScale</a> (vecType< floatType, P > const &v)</td></tr>
+<tr class="separator:gaea99a3271016bfd331d9fa7587f3db37"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Operations between components of a type. </p>
+<p><<a class="el" href="a00017.html" title="GLM_GTX_component_wise ">glm/gtx/component_wise.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="gaf71833350e15e74d31cbf8a3e7f27051"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType::value_type glm::compAdd </td>
+ <td>(</td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Add all vector components together. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00188.html" title="Operations between components of a type. ">GLM_GTX_component_wise</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gabfa4bb19298c8c73d4217ba759c496b6"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType::value_type glm::compMax </td>
+ <td>(</td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Find the maximum value between single vector components. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00188.html" title="Operations between components of a type. ">GLM_GTX_component_wise</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gab5d0832b5c7bb01b8d7395973bfb1425"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType::value_type glm::compMin </td>
+ <td>(</td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Find the minimum value between single vector components. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00188.html" title="Operations between components of a type. ">GLM_GTX_component_wise</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gae8ab88024197202c9479d33bdc5a8a5d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType::value_type glm::compMul </td>
+ <td>(</td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Multiply all vector components together. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00188.html" title="Operations between components of a type. ">GLM_GTX_component_wise</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaeb34fdf090d2d4da9babcdfec267f09e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<floatType, P> glm::compNormalize </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Convert an integer vector to a normalized float vector. </p>
+<p>If the parameter value type is already a floating precision type, the value is passed through. </p><dl class="section see"><dt>See also</dt><dd><a class="el" href="a00188.html" title="Operations between components of a type. ">GLM_GTX_component_wise</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaea99a3271016bfd331d9fa7587f3db37"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::compScale </td>
+ <td>(</td>
+ <td class="paramtype">vecType< floatType, P > const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Convert a normalized float vector to an integer vector. </p>
+<p>If the parameter value type is already a floating precision type, the value is passed through. </p><dl class="section see"><dt>See also</dt><dd><a class="el" href="a00188.html" title="Operations between components of a type. ">GLM_GTX_component_wise</a> </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00189.html b/src/third_party/glm/doc/api/a00189.html
new file mode 100644
index 0000000..e8f9405
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00189.html
@@ -0,0 +1,464 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_dual_quaternion</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#typedef-members">Typedefs</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTX_dual_quaternion<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ga3d71f98d84ba59dfe4e369fde4714cd6"><td class="memItemLeft" align="right" valign="top">typedef highp_ddualquat </td><td class="memItemRight" valign="bottom"><a class="el" href="a00189.html#ga3d71f98d84ba59dfe4e369fde4714cd6">ddualquat</a></td></tr>
+<tr class="separator:ga3d71f98d84ba59dfe4e369fde4714cd6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae93abee0c979902fbec6a7bee0f6fae1"><td class="memItemLeft" align="right" valign="top">typedef highp_fdualquat </td><td class="memItemRight" valign="bottom"><a class="el" href="a00189.html#gae93abee0c979902fbec6a7bee0f6fae1">dualquat</a></td></tr>
+<tr class="separator:gae93abee0c979902fbec6a7bee0f6fae1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga237c2b9b42c9a930e49de5840ae0f930"><td class="memItemLeft" align="right" valign="top">typedef highp_fdualquat </td><td class="memItemRight" valign="bottom"><a class="el" href="a00189.html#ga237c2b9b42c9a930e49de5840ae0f930">fdualquat</a></td></tr>
+<tr class="separator:ga237c2b9b42c9a930e49de5840ae0f930"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8f67eafa7197d7a668dad5105a463d2a"><td class="memItemLeft" align="right" valign="top">typedef tdualquat< double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00189.html#ga8f67eafa7197d7a668dad5105a463d2a">highp_ddualquat</a></td></tr>
+<tr class="separator:ga8f67eafa7197d7a668dad5105a463d2a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9ef5bf1da52a9d4932335a517086ceaf"><td class="memItemLeft" align="right" valign="top">typedef tdualquat< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00189.html#ga9ef5bf1da52a9d4932335a517086ceaf">highp_dualquat</a></td></tr>
+<tr class="separator:ga9ef5bf1da52a9d4932335a517086ceaf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4c4e55e9c99dc57b299ed590968da564"><td class="memItemLeft" align="right" valign="top">typedef tdualquat< float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00189.html#ga4c4e55e9c99dc57b299ed590968da564">highp_fdualquat</a></td></tr>
+<tr class="separator:ga4c4e55e9c99dc57b299ed590968da564"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab4c5103338af3dac7e0fbc86895a3f1a"><td class="memItemLeft" align="right" valign="top">typedef tdualquat< double, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00189.html#gab4c5103338af3dac7e0fbc86895a3f1a">lowp_ddualquat</a></td></tr>
+<tr class="separator:gab4c5103338af3dac7e0fbc86895a3f1a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gade05d29ebd4deea0f883d0e1bb4169aa"><td class="memItemLeft" align="right" valign="top">typedef tdualquat< float, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00189.html#gade05d29ebd4deea0f883d0e1bb4169aa">lowp_dualquat</a></td></tr>
+<tr class="separator:gade05d29ebd4deea0f883d0e1bb4169aa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa38f671be25a7f3b136a452a8bb42860"><td class="memItemLeft" align="right" valign="top">typedef tdualquat< float, lowp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00189.html#gaa38f671be25a7f3b136a452a8bb42860">lowp_fdualquat</a></td></tr>
+<tr class="separator:gaa38f671be25a7f3b136a452a8bb42860"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0fb11e48e2d16348ccb06a25213641b4"><td class="memItemLeft" align="right" valign="top">typedef tdualquat< double, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00189.html#ga0fb11e48e2d16348ccb06a25213641b4">mediump_ddualquat</a></td></tr>
+<tr class="separator:ga0fb11e48e2d16348ccb06a25213641b4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa7aeb54c167712b38f2178a1be2360ad"><td class="memItemLeft" align="right" valign="top">typedef tdualquat< float, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00189.html#gaa7aeb54c167712b38f2178a1be2360ad">mediump_dualquat</a></td></tr>
+<tr class="separator:gaa7aeb54c167712b38f2178a1be2360ad"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4a6b594ff7e81150d8143001367a9431"><td class="memItemLeft" align="right" valign="top">typedef tdualquat< float, mediump > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00189.html#ga4a6b594ff7e81150d8143001367a9431">mediump_fdualquat</a></td></tr>
+<tr class="separator:ga4a6b594ff7e81150d8143001367a9431"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gada9799afe2b62394dc498534beb5bc78"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gada9799afe2b62394dc498534beb5bc78"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tdualquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00189.html#gada9799afe2b62394dc498534beb5bc78">dualquat_cast</a> (tmat2x4< T, P > const &x)</td></tr>
+<tr class="separator:gada9799afe2b62394dc498534beb5bc78"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga20eb5758beb73cc6dbc2d9104f03ec20"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga20eb5758beb73cc6dbc2d9104f03ec20"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tdualquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00189.html#ga20eb5758beb73cc6dbc2d9104f03ec20">dualquat_cast</a> (tmat3x4< T, P > const &x)</td></tr>
+<tr class="separator:ga20eb5758beb73cc6dbc2d9104f03ec20"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2149d3cb8af04d9530de0cd16aa1aab2"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga2149d3cb8af04d9530de0cd16aa1aab2"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tdualquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00189.html#ga2149d3cb8af04d9530de0cd16aa1aab2">inverse</a> (tdualquat< T, P > const &q)</td></tr>
+<tr class="separator:ga2149d3cb8af04d9530de0cd16aa1aab2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8039b88397ca09275be924a26a806a59"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga8039b88397ca09275be924a26a806a59"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tdualquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00189.html#ga8039b88397ca09275be924a26a806a59">lerp</a> (tdualquat< T, P > const &x, tdualquat< T, P > const &y, T const &a)</td></tr>
+<tr class="separator:ga8039b88397ca09275be924a26a806a59"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2d124748183e12db8288eeaca350298e"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga2d124748183e12db8288eeaca350298e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat2x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00189.html#ga2d124748183e12db8288eeaca350298e">mat2x4_cast</a> (tdualquat< T, P > const &x)</td></tr>
+<tr class="separator:ga2d124748183e12db8288eeaca350298e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga576745d979e3c079a64152490c816954"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga576745d979e3c079a64152490c816954"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat3x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00189.html#ga576745d979e3c079a64152490c816954">mat3x4_cast</a> (tdualquat< T, P > const &x)</td></tr>
+<tr class="separator:ga576745d979e3c079a64152490c816954"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga495818aa48c23e9e730f87a3c337d1d5"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga495818aa48c23e9e730f87a3c337d1d5"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tdualquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00189.html#ga495818aa48c23e9e730f87a3c337d1d5">normalize</a> (tdualquat< T, P > const &q)</td></tr>
+<tr class="separator:ga495818aa48c23e9e730f87a3c337d1d5"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Defines a templated dual-quaternion type and several dual-quaternion operations. </p>
+<p><<a class="el" href="a00019.html" title="GLM_GTX_dual_quaternion ">glm/gtx/dual_quaternion.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a class="anchor" id="ga3d71f98d84ba59dfe4e369fde4714cd6"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef highp_ddualquat ddualquat</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Dual-quaternion of default double-precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00189.html" title="Defines a templated dual-quaternion type and several dual-quaternion operations. ">GLM_GTX_dual_quaternion</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00019_source.html#l00252">252</a> of file <a class="el" href="a00019_source.html">dual_quaternion.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gae93abee0c979902fbec6a7bee0f6fae1"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef highp_fdualquat dualquat</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Dual-quaternion of floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00189.html" title="Defines a templated dual-quaternion type and several dual-quaternion operations. ">GLM_GTX_dual_quaternion</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00019_source.html#l00228">228</a> of file <a class="el" href="a00019_source.html">dual_quaternion.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga237c2b9b42c9a930e49de5840ae0f930"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef highp_fdualquat fdualquat</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Dual-quaternion of single-precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00189.html" title="Defines a templated dual-quaternion type and several dual-quaternion operations. ">GLM_GTX_dual_quaternion</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00019_source.html#l00233">233</a> of file <a class="el" href="a00019_source.html">dual_quaternion.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga8f67eafa7197d7a668dad5105a463d2a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tdualquat<double, highp> highp_ddualquat</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Dual-quaternion of high double-precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00189.html" title="Defines a templated dual-quaternion type and several dual-quaternion operations. ">GLM_GTX_dual_quaternion</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00019_source.html#l00221">221</a> of file <a class="el" href="a00019_source.html">dual_quaternion.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga9ef5bf1da52a9d4932335a517086ceaf"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tdualquat<float, highp> highp_dualquat</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Dual-quaternion of high single-precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00189.html" title="Defines a templated dual-quaternion type and several dual-quaternion operations. ">GLM_GTX_dual_quaternion</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00019_source.html#l00189">189</a> of file <a class="el" href="a00019_source.html">dual_quaternion.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga4c4e55e9c99dc57b299ed590968da564"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tdualquat<float, highp> highp_fdualquat</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Dual-quaternion of high single-precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00189.html" title="Defines a templated dual-quaternion type and several dual-quaternion operations. ">GLM_GTX_dual_quaternion</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00019_source.html#l00205">205</a> of file <a class="el" href="a00019_source.html">dual_quaternion.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gab4c5103338af3dac7e0fbc86895a3f1a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tdualquat<double, lowp> lowp_ddualquat</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Dual-quaternion of low double-precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00189.html" title="Defines a templated dual-quaternion type and several dual-quaternion operations. ">GLM_GTX_dual_quaternion</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00019_source.html#l00211">211</a> of file <a class="el" href="a00019_source.html">dual_quaternion.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gade05d29ebd4deea0f883d0e1bb4169aa"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tdualquat<float, lowp> lowp_dualquat</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Dual-quaternion of low single-precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00189.html" title="Defines a templated dual-quaternion type and several dual-quaternion operations. ">GLM_GTX_dual_quaternion</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00019_source.html#l00179">179</a> of file <a class="el" href="a00019_source.html">dual_quaternion.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaa38f671be25a7f3b136a452a8bb42860"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tdualquat<float, lowp> lowp_fdualquat</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Dual-quaternion of low single-precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00189.html" title="Defines a templated dual-quaternion type and several dual-quaternion operations. ">GLM_GTX_dual_quaternion</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00019_source.html#l00195">195</a> of file <a class="el" href="a00019_source.html">dual_quaternion.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga0fb11e48e2d16348ccb06a25213641b4"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tdualquat<double, mediump> mediump_ddualquat</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Dual-quaternion of medium double-precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00189.html" title="Defines a templated dual-quaternion type and several dual-quaternion operations. ">GLM_GTX_dual_quaternion</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00019_source.html#l00216">216</a> of file <a class="el" href="a00019_source.html">dual_quaternion.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaa7aeb54c167712b38f2178a1be2360ad"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tdualquat<float, mediump> mediump_dualquat</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Dual-quaternion of medium single-precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00189.html" title="Defines a templated dual-quaternion type and several dual-quaternion operations. ">GLM_GTX_dual_quaternion</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00019_source.html#l00184">184</a> of file <a class="el" href="a00019_source.html">dual_quaternion.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga4a6b594ff7e81150d8143001367a9431"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tdualquat<float, mediump> mediump_fdualquat</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Dual-quaternion of medium single-precision floating-point numbers. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00189.html" title="Defines a templated dual-quaternion type and several dual-quaternion operations. ">GLM_GTX_dual_quaternion</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00019_source.html#l00200">200</a> of file <a class="el" href="a00019_source.html">dual_quaternion.hpp</a>.</p>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="gada9799afe2b62394dc498534beb5bc78"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tdualquat<T, P> glm::dualquat_cast </td>
+ <td>(</td>
+ <td class="paramtype">tmat2x4< T, P > const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Converts a 2 * 4 matrix (matrix which holds real and dual parts) to a quaternion. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00189.html" title="Defines a templated dual-quaternion type and several dual-quaternion operations. ">GLM_GTX_dual_quaternion</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga20eb5758beb73cc6dbc2d9104f03ec20"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tdualquat<T, P> glm::dualquat_cast </td>
+ <td>(</td>
+ <td class="paramtype">tmat3x4< T, P > const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Converts a 3 * 4 matrix (augmented matrix rotation + translation) to a quaternion. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00189.html" title="Defines a templated dual-quaternion type and several dual-quaternion operations. ">GLM_GTX_dual_quaternion</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga2149d3cb8af04d9530de0cd16aa1aab2"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tdualquat<T, P> glm::inverse </td>
+ <td>(</td>
+ <td class="paramtype">tdualquat< T, P > const & </td>
+ <td class="paramname"><em>q</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the q inverse. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00189.html" title="Defines a templated dual-quaternion type and several dual-quaternion operations. ">GLM_GTX_dual_quaternion</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga8039b88397ca09275be924a26a806a59"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tdualquat<T, P> glm::lerp </td>
+ <td>(</td>
+ <td class="paramtype">tdualquat< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tdualquat< T, P > const & </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>a</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the linear interpolation of two dual quaternion. </p>
+<dl class="section see"><dt>See also</dt><dd>gtc_dual_quaternion </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga2d124748183e12db8288eeaca350298e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat2x4<T, P> glm::mat2x4_cast </td>
+ <td>(</td>
+ <td class="paramtype">tdualquat< T, P > const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Converts a quaternion to a 2 * 4 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00189.html" title="Defines a templated dual-quaternion type and several dual-quaternion operations. ">GLM_GTX_dual_quaternion</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga576745d979e3c079a64152490c816954"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat3x4<T, P> glm::mat3x4_cast </td>
+ <td>(</td>
+ <td class="paramtype">tdualquat< T, P > const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Converts a quaternion to a 3 * 4 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00189.html" title="Defines a templated dual-quaternion type and several dual-quaternion operations. ">GLM_GTX_dual_quaternion</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga495818aa48c23e9e730f87a3c337d1d5"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tdualquat<T, P> glm::normalize </td>
+ <td>(</td>
+ <td class="paramtype">tdualquat< T, P > const & </td>
+ <td class="paramname"><em>q</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the normalized quaternion. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00189.html" title="Defines a templated dual-quaternion type and several dual-quaternion operations. ">GLM_GTX_dual_quaternion</a> </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00190.html b/src/third_party/glm/doc/api/a00190.html
new file mode 100644
index 0000000..9d3173f
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00190.html
@@ -0,0 +1,565 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_euler_angles</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTX_euler_angles<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga82cd3b8a04943f1a0d1a562aff358dc8"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga82cd3b8a04943f1a0d1a562aff358dc8"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00190.html#ga82cd3b8a04943f1a0d1a562aff358dc8">eulerAngleX</a> (T const &angleX)</td></tr>
+<tr class="separator:ga82cd3b8a04943f1a0d1a562aff358dc8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8bf84f92ca976a7f50dbe4b30ceb72dd"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga8bf84f92ca976a7f50dbe4b30ceb72dd"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00190.html#ga8bf84f92ca976a7f50dbe4b30ceb72dd">eulerAngleXY</a> (T const &angleX, T const &angleY)</td></tr>
+<tr class="separator:ga8bf84f92ca976a7f50dbe4b30ceb72dd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaaedda1657a1aebe0a904d864b33844e8"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gaaedda1657a1aebe0a904d864b33844e8"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00190.html#gaaedda1657a1aebe0a904d864b33844e8">eulerAngleXYZ</a> (T const &t1, T const &t2, T const &t3)</td></tr>
+<tr class="separator:gaaedda1657a1aebe0a904d864b33844e8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab2d7dc94b9a7519d741aaa208c7a335b"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gab2d7dc94b9a7519d741aaa208c7a335b"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00190.html#gab2d7dc94b9a7519d741aaa208c7a335b">eulerAngleXZ</a> (T const &angleX, T const &angleZ)</td></tr>
+<tr class="separator:gab2d7dc94b9a7519d741aaa208c7a335b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaeb193af1184bdf39c23636d756e1ff33"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gaeb193af1184bdf39c23636d756e1ff33"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00190.html#gaeb193af1184bdf39c23636d756e1ff33">eulerAngleY</a> (T const &angleY)</td></tr>
+<tr class="separator:gaeb193af1184bdf39c23636d756e1ff33"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafdd02f9a37511190962119adef5c1c25"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gafdd02f9a37511190962119adef5c1c25"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00190.html#gafdd02f9a37511190962119adef5c1c25">eulerAngleYX</a> (T const &angleY, T const &angleX)</td></tr>
+<tr class="separator:gafdd02f9a37511190962119adef5c1c25"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0242b5ab68651db70c6025815549427f"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga0242b5ab68651db70c6025815549427f"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00190.html#ga0242b5ab68651db70c6025815549427f">eulerAngleYXZ</a> (T const &yaw, T const &pitch, T const &roll)</td></tr>
+<tr class="separator:ga0242b5ab68651db70c6025815549427f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1033f84f51d61646145352ef0c1bb58c"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga1033f84f51d61646145352ef0c1bb58c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00190.html#ga1033f84f51d61646145352ef0c1bb58c">eulerAngleYZ</a> (T const &angleY, T const &angleZ)</td></tr>
+<tr class="separator:ga1033f84f51d61646145352ef0c1bb58c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab59c4fe7f735568255cc19fddd3ddfcd"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gab59c4fe7f735568255cc19fddd3ddfcd"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00190.html#gab59c4fe7f735568255cc19fddd3ddfcd">eulerAngleZ</a> (T const &angleZ)</td></tr>
+<tr class="separator:gab59c4fe7f735568255cc19fddd3ddfcd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaef83cf40bd9ae780011b29970f16f622"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gaef83cf40bd9ae780011b29970f16f622"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00190.html#gaef83cf40bd9ae780011b29970f16f622">eulerAngleZX</a> (T const &angle, T const &angleX)</td></tr>
+<tr class="separator:gaef83cf40bd9ae780011b29970f16f622"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga02f037926568bbd12dfece3b28b20343"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga02f037926568bbd12dfece3b28b20343"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00190.html#ga02f037926568bbd12dfece3b28b20343">eulerAngleZY</a> (T const &angleZ, T const &angleY)</td></tr>
+<tr class="separator:ga02f037926568bbd12dfece3b28b20343"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad5838a4c87ce2b8ee4c4e17bd162fd14"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gad5838a4c87ce2b8ee4c4e17bd162fd14"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00190.html#gad5838a4c87ce2b8ee4c4e17bd162fd14">extractEulerAngleXYZ</a> (tmat4x4< T, defaultp > const &M, T &t1, T &t2, T &t3)</td></tr>
+<tr class="separator:gad5838a4c87ce2b8ee4c4e17bd162fd14"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6f465681cbbc575ad93a53ec918dacf3"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga6f465681cbbc575ad93a53ec918dacf3"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat2x2< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00190.html#ga6f465681cbbc575ad93a53ec918dacf3">orientate2</a> (T const &angle)</td></tr>
+<tr class="separator:ga6f465681cbbc575ad93a53ec918dacf3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab188e2526dea3c003e86e298f618085e"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gab188e2526dea3c003e86e298f618085e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat3x3< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00190.html#gab188e2526dea3c003e86e298f618085e">orientate3</a> (T const &angle)</td></tr>
+<tr class="separator:gab188e2526dea3c003e86e298f618085e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga33f0d790cecd8337ee83f8e3a8109b11"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga33f0d790cecd8337ee83f8e3a8109b11"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat3x3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00190.html#ga33f0d790cecd8337ee83f8e3a8109b11">orientate3</a> (tvec3< T, P > const &angles)</td></tr>
+<tr class="separator:ga33f0d790cecd8337ee83f8e3a8109b11"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4e25c9468b6f002c76e9a2412bcfa503"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga4e25c9468b6f002c76e9a2412bcfa503"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00190.html#ga4e25c9468b6f002c76e9a2412bcfa503">orientate4</a> (tvec3< T, P > const &angles)</td></tr>
+<tr class="separator:ga4e25c9468b6f002c76e9a2412bcfa503"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf9c8d0f1df88c5344165600774489bc5"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gaf9c8d0f1df88c5344165600774489bc5"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00190.html#gaf9c8d0f1df88c5344165600774489bc5">yawPitchRoll</a> (T const &yaw, T const &pitch, T const &roll)</td></tr>
+<tr class="separator:gaf9c8d0f1df88c5344165600774489bc5"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Build matrices from Euler angles. </p>
+<p><<a class="el" href="a00021.html" title="GLM_GTX_euler_angles ">glm/gtx/euler_angles.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga82cd3b8a04943f1a0d1a562aff358dc8"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, defaultp> glm::eulerAngleX </td>
+ <td>(</td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>angleX</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle X. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00190.html" title="Build matrices from Euler angles. ">GLM_GTX_euler_angles</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga8bf84f92ca976a7f50dbe4b30ceb72dd"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, defaultp> glm::eulerAngleXY </td>
+ <td>(</td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>angleX</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>angleY</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y). </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00190.html" title="Build matrices from Euler angles. ">GLM_GTX_euler_angles</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaaedda1657a1aebe0a904d864b33844e8"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, defaultp> glm::eulerAngleXYZ </td>
+ <td>(</td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>t1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>t2</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>t3</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y * Z). </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00190.html" title="Build matrices from Euler angles. ">GLM_GTX_euler_angles</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gab2d7dc94b9a7519d741aaa208c7a335b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, defaultp> glm::eulerAngleXZ </td>
+ <td>(</td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>angleX</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>angleZ</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z). </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00190.html" title="Build matrices from Euler angles. ">GLM_GTX_euler_angles</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaeb193af1184bdf39c23636d756e1ff33"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, defaultp> glm::eulerAngleY </td>
+ <td>(</td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>angleY</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Y. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00190.html" title="Build matrices from Euler angles. ">GLM_GTX_euler_angles</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gafdd02f9a37511190962119adef5c1c25"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, defaultp> glm::eulerAngleYX </td>
+ <td>(</td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>angleY</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>angleX</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X). </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00190.html" title="Build matrices from Euler angles. ">GLM_GTX_euler_angles</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga0242b5ab68651db70c6025815549427f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, defaultp> glm::eulerAngleYXZ </td>
+ <td>(</td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>yaw</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>pitch</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>roll</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z). </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00190.html" title="Build matrices from Euler angles. ">GLM_GTX_euler_angles</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga1033f84f51d61646145352ef0c1bb58c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, defaultp> glm::eulerAngleYZ </td>
+ <td>(</td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>angleY</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>angleZ</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z). </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00190.html" title="Build matrices from Euler angles. ">GLM_GTX_euler_angles</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gab59c4fe7f735568255cc19fddd3ddfcd"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, defaultp> glm::eulerAngleZ </td>
+ <td>(</td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>angleZ</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Z. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00190.html" title="Build matrices from Euler angles. ">GLM_GTX_euler_angles</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaef83cf40bd9ae780011b29970f16f622"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, defaultp> glm::eulerAngleZX </td>
+ <td>(</td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>angle</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>angleX</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X). </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00190.html" title="Build matrices from Euler angles. ">GLM_GTX_euler_angles</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga02f037926568bbd12dfece3b28b20343"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, defaultp> glm::eulerAngleZY </td>
+ <td>(</td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>angleZ</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>angleY</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y). </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00190.html" title="Build matrices from Euler angles. ">GLM_GTX_euler_angles</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gad5838a4c87ce2b8ee4c4e17bd162fd14"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL void glm::extractEulerAngleXYZ </td>
+ <td>(</td>
+ <td class="paramtype">tmat4x4< T, defaultp > const & </td>
+ <td class="paramname"><em>M</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T & </td>
+ <td class="paramname"><em>t1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T & </td>
+ <td class="paramname"><em>t2</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T & </td>
+ <td class="paramname"><em>t3</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Extracts the (X * Y * Z) Euler angles from the rotation matrix M. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00190.html" title="Build matrices from Euler angles. ">GLM_GTX_euler_angles</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga6f465681cbbc575ad93a53ec918dacf3"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat2x2<T, defaultp> glm::orientate2 </td>
+ <td>(</td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>angle</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Creates a 2D 2 * 2 rotation matrix from an euler angle. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00190.html" title="Build matrices from Euler angles. ">GLM_GTX_euler_angles</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gab188e2526dea3c003e86e298f618085e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat3x3<T, defaultp> glm::orientate3 </td>
+ <td>(</td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>angle</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Creates a 2D 4 * 4 homogeneous rotation matrix from an euler angle. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00190.html" title="Build matrices from Euler angles. ">GLM_GTX_euler_angles</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga33f0d790cecd8337ee83f8e3a8109b11"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat3x3<T, P> glm::orientate3 </td>
+ <td>(</td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>angles</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Creates a 3D 3 * 3 rotation matrix from euler angles (Y * X * Z). </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00190.html" title="Build matrices from Euler angles. ">GLM_GTX_euler_angles</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga4e25c9468b6f002c76e9a2412bcfa503"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, P> glm::orientate4 </td>
+ <td>(</td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>angles</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z). </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00190.html" title="Build matrices from Euler angles. ">GLM_GTX_euler_angles</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaf9c8d0f1df88c5344165600774489bc5"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, defaultp> glm::yawPitchRoll </td>
+ <td>(</td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>yaw</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>pitch</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>roll</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z). </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00190.html" title="Build matrices from Euler angles. ">GLM_GTX_euler_angles</a> </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00191.html b/src/third_party/glm/doc/api/a00191.html
new file mode 100644
index 0000000..2a9ed24
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00191.html
@@ -0,0 +1,99 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_extend</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTX_extend<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga8140caae613b0f847ab0d7175dc03a37"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga8140caae613b0f847ab0d7175dc03a37"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00191.html#ga8140caae613b0f847ab0d7175dc03a37">extend</a> (genType const &Origin, genType const &Source, typename genType::value_type const Length)</td></tr>
+<tr class="separator:ga8140caae613b0f847ab0d7175dc03a37"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Extend a position from a source to a position at a defined length. </p>
+<p><<a class="el" href="a00024.html" title="GLM_GTX_extend ">glm/gtx/extend.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga8140caae613b0f847ab0d7175dc03a37"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::extend </td>
+ <td>(</td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>Origin</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>Source</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">typename genType::value_type const </td>
+ <td class="paramname"><em>Length</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Extends of Length the Origin position using the (Source - Origin) direction. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00191.html" title="Extend a position from a source to a position at a defined length. ">GLM_GTX_extend</a> </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00192.html b/src/third_party/glm/doc/api/a00192.html
new file mode 100644
index 0000000..6bc56c3
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00192.html
@@ -0,0 +1,553 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_extented_min_max</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTX_extented_min_max<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga04991ccb9865c4c4e58488cfb209ce69"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga04991ccb9865c4c4e58488cfb209ce69"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00192.html#ga04991ccb9865c4c4e58488cfb209ce69">max</a> (T const &x, T const &y, T const &z)</td></tr>
+<tr class="separator:ga04991ccb9865c4c4e58488cfb209ce69"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae1b7bbe5c91de4924835ea3e14530744"><td class="memTemplParams" colspan="2">template<typename T , template< typename > class C> </td></tr>
+<tr class="memitem:gae1b7bbe5c91de4924835ea3e14530744"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL C< T > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00192.html#gae1b7bbe5c91de4924835ea3e14530744">max</a> (C< T > const &x, typename C< T >::T const &y, typename C< T >::T const &z)</td></tr>
+<tr class="separator:gae1b7bbe5c91de4924835ea3e14530744"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf832e9d4ab4826b2dda2fda25935a3a4"><td class="memTemplParams" colspan="2">template<typename T , template< typename > class C> </td></tr>
+<tr class="memitem:gaf832e9d4ab4826b2dda2fda25935a3a4"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL C< T > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00192.html#gaf832e9d4ab4826b2dda2fda25935a3a4">max</a> (C< T > const &x, C< T > const &y, C< T > const &z)</td></tr>
+<tr class="separator:gaf832e9d4ab4826b2dda2fda25935a3a4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga78e04a0cef1c4863fcae1a2130500d87"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga78e04a0cef1c4863fcae1a2130500d87"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00192.html#ga78e04a0cef1c4863fcae1a2130500d87">max</a> (T const &x, T const &y, T const &z, T const &w)</td></tr>
+<tr class="separator:ga78e04a0cef1c4863fcae1a2130500d87"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7cca8b53cfda402040494cdf40fbdf4a"><td class="memTemplParams" colspan="2">template<typename T , template< typename > class C> </td></tr>
+<tr class="memitem:ga7cca8b53cfda402040494cdf40fbdf4a"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL C< T > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00192.html#ga7cca8b53cfda402040494cdf40fbdf4a">max</a> (C< T > const &x, typename C< T >::T const &y, typename C< T >::T const &z, typename C< T >::T const &w)</td></tr>
+<tr class="separator:ga7cca8b53cfda402040494cdf40fbdf4a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaacffbc466c2d08c140b181e7fd8a4858"><td class="memTemplParams" colspan="2">template<typename T , template< typename > class C> </td></tr>
+<tr class="memitem:gaacffbc466c2d08c140b181e7fd8a4858"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL C< T > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00192.html#gaacffbc466c2d08c140b181e7fd8a4858">max</a> (C< T > const &x, C< T > const &y, C< T > const &z, C< T > const &w)</td></tr>
+<tr class="separator:gaacffbc466c2d08c140b181e7fd8a4858"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga713d3f9b3e76312c0d314e0c8611a6a6"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga713d3f9b3e76312c0d314e0c8611a6a6"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00192.html#ga713d3f9b3e76312c0d314e0c8611a6a6">min</a> (T const &x, T const &y, T const &z)</td></tr>
+<tr class="separator:ga713d3f9b3e76312c0d314e0c8611a6a6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga74d1a96e7cdbac40f6d35142d3bcbbd4"><td class="memTemplParams" colspan="2">template<typename T , template< typename > class C> </td></tr>
+<tr class="memitem:ga74d1a96e7cdbac40f6d35142d3bcbbd4"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL C< T > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00192.html#ga74d1a96e7cdbac40f6d35142d3bcbbd4">min</a> (C< T > const &x, typename C< T >::T const &y, typename C< T >::T const &z)</td></tr>
+<tr class="separator:ga74d1a96e7cdbac40f6d35142d3bcbbd4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga42b5c3fc027fd3d9a50d2ccc9126d9f0"><td class="memTemplParams" colspan="2">template<typename T , template< typename > class C> </td></tr>
+<tr class="memitem:ga42b5c3fc027fd3d9a50d2ccc9126d9f0"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL C< T > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00192.html#ga42b5c3fc027fd3d9a50d2ccc9126d9f0">min</a> (C< T > const &x, C< T > const &y, C< T > const &z)</td></tr>
+<tr class="separator:ga42b5c3fc027fd3d9a50d2ccc9126d9f0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga95466987024d03039607f09e69813d69"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga95466987024d03039607f09e69813d69"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00192.html#ga95466987024d03039607f09e69813d69">min</a> (T const &x, T const &y, T const &z, T const &w)</td></tr>
+<tr class="separator:ga95466987024d03039607f09e69813d69"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4fe35dd31dd0c45693c9b60b830b8d47"><td class="memTemplParams" colspan="2">template<typename T , template< typename > class C> </td></tr>
+<tr class="memitem:ga4fe35dd31dd0c45693c9b60b830b8d47"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL C< T > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00192.html#ga4fe35dd31dd0c45693c9b60b830b8d47">min</a> (C< T > const &x, typename C< T >::T const &y, typename C< T >::T const &z, typename C< T >::T const &w)</td></tr>
+<tr class="separator:ga4fe35dd31dd0c45693c9b60b830b8d47"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7471ea4159eed8dd9ea4ac5d46c2fead"><td class="memTemplParams" colspan="2">template<typename T , template< typename > class C> </td></tr>
+<tr class="memitem:ga7471ea4159eed8dd9ea4ac5d46c2fead"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL C< T > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00192.html#ga7471ea4159eed8dd9ea4ac5d46c2fead">min</a> (C< T > const &x, C< T > const &y, C< T > const &z, C< T > const &w)</td></tr>
+<tr class="separator:ga7471ea4159eed8dd9ea4ac5d46c2fead"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Min and max functions for 3 to 4 parameters. </p>
+<p><glm/gtx/extented_min_max.hpp> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga04991ccb9865c4c4e58488cfb209ce69"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL T glm::max </td>
+ <td>(</td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>z</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return the maximum component-wise values of 3 inputs. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00192.html" title="Min and max functions for 3 to 4 parameters. ">GLM_GTX_extented_min_max</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gae1b7bbe5c91de4924835ea3e14530744"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL C<T> glm::max </td>
+ <td>(</td>
+ <td class="paramtype">C< T > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">typename C< T >::T const & </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">typename C< T >::T const & </td>
+ <td class="paramname"><em>z</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return the maximum component-wise values of 3 inputs. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00192.html" title="Min and max functions for 3 to 4 parameters. ">GLM_GTX_extented_min_max</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaf832e9d4ab4826b2dda2fda25935a3a4"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL C<T> glm::max </td>
+ <td>(</td>
+ <td class="paramtype">C< T > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">C< T > const & </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">C< T > const & </td>
+ <td class="paramname"><em>z</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return the maximum component-wise values of 3 inputs. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00192.html" title="Min and max functions for 3 to 4 parameters. ">GLM_GTX_extented_min_max</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga78e04a0cef1c4863fcae1a2130500d87"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL T glm::max </td>
+ <td>(</td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>z</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>w</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return the maximum component-wise values of 4 inputs. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00192.html" title="Min and max functions for 3 to 4 parameters. ">GLM_GTX_extented_min_max</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga7cca8b53cfda402040494cdf40fbdf4a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL C<T> glm::max </td>
+ <td>(</td>
+ <td class="paramtype">C< T > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">typename C< T >::T const & </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">typename C< T >::T const & </td>
+ <td class="paramname"><em>z</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">typename C< T >::T const & </td>
+ <td class="paramname"><em>w</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return the maximum component-wise values of 4 inputs. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00192.html" title="Min and max functions for 3 to 4 parameters. ">GLM_GTX_extented_min_max</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaacffbc466c2d08c140b181e7fd8a4858"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL C<T> glm::max </td>
+ <td>(</td>
+ <td class="paramtype">C< T > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">C< T > const & </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">C< T > const & </td>
+ <td class="paramname"><em>z</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">C< T > const & </td>
+ <td class="paramname"><em>w</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return the maximum component-wise values of 4 inputs. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00192.html" title="Min and max functions for 3 to 4 parameters. ">GLM_GTX_extented_min_max</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga713d3f9b3e76312c0d314e0c8611a6a6"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL T glm::min </td>
+ <td>(</td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>z</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return the minimum component-wise values of 3 inputs. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00192.html" title="Min and max functions for 3 to 4 parameters. ">GLM_GTX_extented_min_max</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga74d1a96e7cdbac40f6d35142d3bcbbd4"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL C<T> glm::min </td>
+ <td>(</td>
+ <td class="paramtype">C< T > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">typename C< T >::T const & </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">typename C< T >::T const & </td>
+ <td class="paramname"><em>z</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return the minimum component-wise values of 3 inputs. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00192.html" title="Min and max functions for 3 to 4 parameters. ">GLM_GTX_extented_min_max</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga42b5c3fc027fd3d9a50d2ccc9126d9f0"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL C<T> glm::min </td>
+ <td>(</td>
+ <td class="paramtype">C< T > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">C< T > const & </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">C< T > const & </td>
+ <td class="paramname"><em>z</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return the minimum component-wise values of 3 inputs. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00192.html" title="Min and max functions for 3 to 4 parameters. ">GLM_GTX_extented_min_max</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga95466987024d03039607f09e69813d69"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL T glm::min </td>
+ <td>(</td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>z</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>w</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return the minimum component-wise values of 4 inputs. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00192.html" title="Min and max functions for 3 to 4 parameters. ">GLM_GTX_extented_min_max</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga4fe35dd31dd0c45693c9b60b830b8d47"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL C<T> glm::min </td>
+ <td>(</td>
+ <td class="paramtype">C< T > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">typename C< T >::T const & </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">typename C< T >::T const & </td>
+ <td class="paramname"><em>z</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">typename C< T >::T const & </td>
+ <td class="paramname"><em>w</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return the minimum component-wise values of 4 inputs. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00192.html" title="Min and max functions for 3 to 4 parameters. ">GLM_GTX_extented_min_max</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga7471ea4159eed8dd9ea4ac5d46c2fead"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL C<T> glm::min </td>
+ <td>(</td>
+ <td class="paramtype">C< T > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">C< T > const & </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">C< T > const & </td>
+ <td class="paramname"><em>z</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">C< T > const & </td>
+ <td class="paramname"><em>w</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return the minimum component-wise values of 4 inputs. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00192.html" title="Min and max functions for 3 to 4 parameters. ">GLM_GTX_extented_min_max</a> </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00193.html b/src/third_party/glm/doc/api/a00193.html
new file mode 100644
index 0000000..617c63a
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00193.html
@@ -0,0 +1,355 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_fast_exponential</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTX_fast_exponential<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gaa3180ac8f96ab37ab96e0cacaf608e10"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gaa3180ac8f96ab37ab96e0cacaf608e10"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00193.html#gaa3180ac8f96ab37ab96e0cacaf608e10">fastExp</a> (T x)</td></tr>
+<tr class="separator:gaa3180ac8f96ab37ab96e0cacaf608e10"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4faf0b61115de36efcf47c4ecb55a5fa"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga4faf0b61115de36efcf47c4ecb55a5fa"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00193.html#ga4faf0b61115de36efcf47c4ecb55a5fa">fastExp</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:ga4faf0b61115de36efcf47c4ecb55a5fa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0af50585955eb14c60bb286297fabab2"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga0af50585955eb14c60bb286297fabab2"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00193.html#ga0af50585955eb14c60bb286297fabab2">fastExp2</a> (T x)</td></tr>
+<tr class="separator:ga0af50585955eb14c60bb286297fabab2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9e6219327b7a33077dbec7620d981fff"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga9e6219327b7a33077dbec7620d981fff"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00193.html#ga9e6219327b7a33077dbec7620d981fff">fastExp2</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:ga9e6219327b7a33077dbec7620d981fff"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae1bdc97b7f96a600e29c753f1cd4388a"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gae1bdc97b7f96a600e29c753f1cd4388a"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00193.html#gae1bdc97b7f96a600e29c753f1cd4388a">fastLog</a> (T x)</td></tr>
+<tr class="separator:gae1bdc97b7f96a600e29c753f1cd4388a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga789abcbc34d08008d2f5a4547dd6e5e3"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga789abcbc34d08008d2f5a4547dd6e5e3"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00193.html#ga789abcbc34d08008d2f5a4547dd6e5e3">fastLog</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:ga789abcbc34d08008d2f5a4547dd6e5e3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6e98118685f6dc9e05fbb13dd5e5234e"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga6e98118685f6dc9e05fbb13dd5e5234e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00193.html#ga6e98118685f6dc9e05fbb13dd5e5234e">fastLog2</a> (T x)</td></tr>
+<tr class="separator:ga6e98118685f6dc9e05fbb13dd5e5234e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gabc46086fe6636b8be87f09e6c5d2bb58"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gabc46086fe6636b8be87f09e6c5d2bb58"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00193.html#gabc46086fe6636b8be87f09e6c5d2bb58">fastLog2</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:gabc46086fe6636b8be87f09e6c5d2bb58"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5340e98a11fcbbd936ba6e983a154d50"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga5340e98a11fcbbd936ba6e983a154d50"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00193.html#ga5340e98a11fcbbd936ba6e983a154d50">fastPow</a> (genType x, genType y)</td></tr>
+<tr class="separator:ga5340e98a11fcbbd936ba6e983a154d50"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga07b73976a9af4005945bc338b45d8466"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga07b73976a9af4005945bc338b45d8466"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00193.html#ga07b73976a9af4005945bc338b45d8466">fastPow</a> (vecType< T, P > const &x, vecType< T, P > const &y)</td></tr>
+<tr class="separator:ga07b73976a9af4005945bc338b45d8466"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7f2562db9c3e02ae76169c36b086c3f6"><td class="memTemplParams" colspan="2">template<typename genTypeT , typename genTypeU > </td></tr>
+<tr class="memitem:ga7f2562db9c3e02ae76169c36b086c3f6"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genTypeT </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00193.html#ga7f2562db9c3e02ae76169c36b086c3f6">fastPow</a> (genTypeT x, genTypeU y)</td></tr>
+<tr class="separator:ga7f2562db9c3e02ae76169c36b086c3f6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga29924aea1aa11c5c504fb2d621221906"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga29924aea1aa11c5c504fb2d621221906"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00193.html#ga29924aea1aa11c5c504fb2d621221906">fastPow</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:ga29924aea1aa11c5c504fb2d621221906"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Fast but less accurate implementations of exponential based functions. </p>
+<p><<a class="el" href="a00026.html" title="GLM_GTX_fast_exponential ">glm/gtx/fast_exponential.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="gaa3180ac8f96ab37ab96e0cacaf608e10"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL T glm::fastExp </td>
+ <td>(</td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Faster than the common exp function but less accurate. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00193.html" title="Fast but less accurate implementations of exponential based functions. ">GLM_GTX_fast_exponential</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga4faf0b61115de36efcf47c4ecb55a5fa"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::fastExp </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Faster than the common exp function but less accurate. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00193.html" title="Fast but less accurate implementations of exponential based functions. ">GLM_GTX_fast_exponential</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga0af50585955eb14c60bb286297fabab2"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL T glm::fastExp2 </td>
+ <td>(</td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Faster than the common exp2 function but less accurate. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00193.html" title="Fast but less accurate implementations of exponential based functions. ">GLM_GTX_fast_exponential</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga9e6219327b7a33077dbec7620d981fff"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::fastExp2 </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Faster than the common exp2 function but less accurate. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00193.html" title="Fast but less accurate implementations of exponential based functions. ">GLM_GTX_fast_exponential</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gae1bdc97b7f96a600e29c753f1cd4388a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL T glm::fastLog </td>
+ <td>(</td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Faster than the common log function but less accurate. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00193.html" title="Fast but less accurate implementations of exponential based functions. ">GLM_GTX_fast_exponential</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga789abcbc34d08008d2f5a4547dd6e5e3"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::fastLog </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Faster than the common exp2 function but less accurate. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00193.html" title="Fast but less accurate implementations of exponential based functions. ">GLM_GTX_fast_exponential</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga6e98118685f6dc9e05fbb13dd5e5234e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL T glm::fastLog2 </td>
+ <td>(</td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Faster than the common log2 function but less accurate. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00193.html" title="Fast but less accurate implementations of exponential based functions. ">GLM_GTX_fast_exponential</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gabc46086fe6636b8be87f09e6c5d2bb58"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::fastLog2 </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Faster than the common log2 function but less accurate. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00193.html" title="Fast but less accurate implementations of exponential based functions. ">GLM_GTX_fast_exponential</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga5340e98a11fcbbd936ba6e983a154d50"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::fastPow </td>
+ <td>(</td>
+ <td class="paramtype">genType </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Faster than the common pow function but less accurate. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00193.html" title="Fast but less accurate implementations of exponential based functions. ">GLM_GTX_fast_exponential</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga07b73976a9af4005945bc338b45d8466"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::fastPow </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Faster than the common pow function but less accurate. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00193.html" title="Fast but less accurate implementations of exponential based functions. ">GLM_GTX_fast_exponential</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga7f2562db9c3e02ae76169c36b086c3f6"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genTypeT glm::fastPow </td>
+ <td>(</td>
+ <td class="paramtype">genTypeT </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genTypeU </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Faster than the common pow function but less accurate. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00193.html" title="Fast but less accurate implementations of exponential based functions. ">GLM_GTX_fast_exponential</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga29924aea1aa11c5c504fb2d621221906"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::fastPow </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Faster than the common pow function but less accurate. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00193.html" title="Fast but less accurate implementations of exponential based functions. ">GLM_GTX_fast_exponential</a> </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00194.html b/src/third_party/glm/doc/api/a00194.html
new file mode 100644
index 0000000..3669ba6
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00194.html
@@ -0,0 +1,282 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_fast_square_root</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTX_fast_square_root<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gaac333418d0c4e0cc6d3d219ed606c238"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gaac333418d0c4e0cc6d3d219ed606c238"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00194.html#gaac333418d0c4e0cc6d3d219ed606c238">fastDistance</a> (genType x, genType y)</td></tr>
+<tr class="separator:gaac333418d0c4e0cc6d3d219ed606c238"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6d1ac559cd77d69119e30c3aca0e14b5"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga6d1ac559cd77d69119e30c3aca0e14b5"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00194.html#ga6d1ac559cd77d69119e30c3aca0e14b5">fastDistance</a> (vecType< T, P > const &x, vecType< T, P > const &y)</td></tr>
+<tr class="separator:ga6d1ac559cd77d69119e30c3aca0e14b5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7f081b14d9c7035c8714eba5f7f75a8f"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga7f081b14d9c7035c8714eba5f7f75a8f"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00194.html#ga7f081b14d9c7035c8714eba5f7f75a8f">fastInverseSqrt</a> (genType x)</td></tr>
+<tr class="separator:ga7f081b14d9c7035c8714eba5f7f75a8f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga903878071f92e51e551791e584a171a1"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga903878071f92e51e551791e584a171a1"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00194.html#ga903878071f92e51e551791e584a171a1">fastInverseSqrt</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:ga903878071f92e51e551791e584a171a1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafe697d6287719538346bbdf8b1367c59"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gafe697d6287719538346bbdf8b1367c59"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00194.html#gafe697d6287719538346bbdf8b1367c59">fastLength</a> (genType x)</td></tr>
+<tr class="separator:gafe697d6287719538346bbdf8b1367c59"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae28a3099cbd6404a4ea8ef22147ed7b0"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gae28a3099cbd6404a4ea8ef22147ed7b0"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00194.html#gae28a3099cbd6404a4ea8ef22147ed7b0">fastLength</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:gae28a3099cbd6404a4ea8ef22147ed7b0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3b02c1d6e0c754144e2f1e110bf9f16c"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga3b02c1d6e0c754144e2f1e110bf9f16c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00194.html#ga3b02c1d6e0c754144e2f1e110bf9f16c">fastNormalize</a> (genType const &x)</td></tr>
+<tr class="separator:ga3b02c1d6e0c754144e2f1e110bf9f16c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6c460e9414a50b2fc455c8f64c86cdc9"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga6c460e9414a50b2fc455c8f64c86cdc9"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00194.html#ga6c460e9414a50b2fc455c8f64c86cdc9">fastSqrt</a> (genType x)</td></tr>
+<tr class="separator:ga6c460e9414a50b2fc455c8f64c86cdc9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaad9f601bbc3faa04dda384e4c4e1592c"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gaad9f601bbc3faa04dda384e4c4e1592c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00194.html#gaad9f601bbc3faa04dda384e4c4e1592c">fastSqrt</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:gaad9f601bbc3faa04dda384e4c4e1592c"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Fast but less accurate implementations of square root based functions. </p>
+<ul>
+<li>Sqrt optimisation based on Newton's method, www.gamedev.net/community/forums/topic.asp?topic id=139956</li>
+</ul>
+<p><<a class="el" href="a00027.html" title="GLM_GTX_fast_square_root ">glm/gtx/fast_square_root.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="gaac333418d0c4e0cc6d3d219ed606c238"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::fastDistance </td>
+ <td>(</td>
+ <td class="paramtype">genType </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Faster than the common distance function but less accurate. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00194.html" title="Fast but less accurate implementations of square root based functions. ">GLM_GTX_fast_square_root</a> extension. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga6d1ac559cd77d69119e30c3aca0e14b5"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL T glm::fastDistance </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Faster than the common distance function but less accurate. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00194.html" title="Fast but less accurate implementations of square root based functions. ">GLM_GTX_fast_square_root</a> extension. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga7f081b14d9c7035c8714eba5f7f75a8f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::fastInverseSqrt </td>
+ <td>(</td>
+ <td class="paramtype">genType </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Faster than the common inversesqrt function but less accurate. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00194.html" title="Fast but less accurate implementations of square root based functions. ">GLM_GTX_fast_square_root</a> extension. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga903878071f92e51e551791e584a171a1"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::fastInverseSqrt </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Faster than the common inversesqrt function but less accurate. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00194.html" title="Fast but less accurate implementations of square root based functions. ">GLM_GTX_fast_square_root</a> extension. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gafe697d6287719538346bbdf8b1367c59"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::fastLength </td>
+ <td>(</td>
+ <td class="paramtype">genType </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Faster than the common length function but less accurate. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00194.html" title="Fast but less accurate implementations of square root based functions. ">GLM_GTX_fast_square_root</a> extension. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gae28a3099cbd6404a4ea8ef22147ed7b0"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL T glm::fastLength </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Faster than the common length function but less accurate. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00194.html" title="Fast but less accurate implementations of square root based functions. ">GLM_GTX_fast_square_root</a> extension. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga3b02c1d6e0c754144e2f1e110bf9f16c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::fastNormalize </td>
+ <td>(</td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Faster than the common normalize function but less accurate. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00194.html" title="Fast but less accurate implementations of square root based functions. ">GLM_GTX_fast_square_root</a> extension. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga6c460e9414a50b2fc455c8f64c86cdc9"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::fastSqrt </td>
+ <td>(</td>
+ <td class="paramtype">genType </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Faster than the common sqrt function but less accurate. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00194.html" title="Fast but less accurate implementations of square root based functions. ">GLM_GTX_fast_square_root</a> extension. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaad9f601bbc3faa04dda384e4c4e1592c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::fastSqrt </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Faster than the common sqrt function but less accurate. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00194.html" title="Fast but less accurate implementations of square root based functions. ">GLM_GTX_fast_square_root</a> extension. </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00195.html b/src/third_party/glm/doc/api/a00195.html
new file mode 100644
index 0000000..d880966
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00195.html
@@ -0,0 +1,246 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_fast_trigonometry</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTX_fast_trigonometry<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga9721d63356e5d94fdc4b393a426ab26b"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga9721d63356e5d94fdc4b393a426ab26b"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00195.html#ga9721d63356e5d94fdc4b393a426ab26b">fastAcos</a> (T angle)</td></tr>
+<tr class="separator:ga9721d63356e5d94fdc4b393a426ab26b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga562cb62c51fbfe7fac7db0bce706b81f"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga562cb62c51fbfe7fac7db0bce706b81f"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00195.html#ga562cb62c51fbfe7fac7db0bce706b81f">fastAsin</a> (T angle)</td></tr>
+<tr class="separator:ga562cb62c51fbfe7fac7db0bce706b81f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8d197c6ef564f5e5d59af3b3f8adcc2c"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga8d197c6ef564f5e5d59af3b3f8adcc2c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00195.html#ga8d197c6ef564f5e5d59af3b3f8adcc2c">fastAtan</a> (T y, T x)</td></tr>
+<tr class="separator:ga8d197c6ef564f5e5d59af3b3f8adcc2c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae25de86a968490ff56856fa425ec9d30"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gae25de86a968490ff56856fa425ec9d30"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00195.html#gae25de86a968490ff56856fa425ec9d30">fastAtan</a> (T angle)</td></tr>
+<tr class="separator:gae25de86a968490ff56856fa425ec9d30"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab34c8b45c23c0165a64dcecfcc3b302a"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gab34c8b45c23c0165a64dcecfcc3b302a"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00195.html#gab34c8b45c23c0165a64dcecfcc3b302a">fastCos</a> (T angle)</td></tr>
+<tr class="separator:gab34c8b45c23c0165a64dcecfcc3b302a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0aab3257bb3b628d10a1e0483e2c6915"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga0aab3257bb3b628d10a1e0483e2c6915"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00195.html#ga0aab3257bb3b628d10a1e0483e2c6915">fastSin</a> (T angle)</td></tr>
+<tr class="separator:ga0aab3257bb3b628d10a1e0483e2c6915"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf29b9c1101a10007b4f79ee89df27ba2"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:gaf29b9c1101a10007b4f79ee89df27ba2"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00195.html#gaf29b9c1101a10007b4f79ee89df27ba2">fastTan</a> (T angle)</td></tr>
+<tr class="separator:gaf29b9c1101a10007b4f79ee89df27ba2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga069527c6dbd64f53435b8ebc4878b473"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
+<tr class="memitem:ga069527c6dbd64f53435b8ebc4878b473"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00195.html#ga069527c6dbd64f53435b8ebc4878b473">wrapAngle</a> (T angle)</td></tr>
+<tr class="separator:ga069527c6dbd64f53435b8ebc4878b473"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Fast but less accurate implementations of trigonometric functions. </p>
+<p><<a class="el" href="a00028.html" title="GLM_GTX_fast_trigonometry ">glm/gtx/fast_trigonometry.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga9721d63356e5d94fdc4b393a426ab26b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL T glm::fastAcos </td>
+ <td>(</td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>angle</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Faster than the common acos function but less accurate. </p>
+<p>Defined between -2pi and 2pi. From GLM_GTX_fast_trigonometry extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga562cb62c51fbfe7fac7db0bce706b81f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL T glm::fastAsin </td>
+ <td>(</td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>angle</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Faster than the common asin function but less accurate. </p>
+<p>Defined between -2pi and 2pi. From GLM_GTX_fast_trigonometry extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga8d197c6ef564f5e5d59af3b3f8adcc2c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL T glm::fastAtan </td>
+ <td>(</td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>x</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Faster than the common atan function but less accurate. </p>
+<p>Defined between -2pi and 2pi. From GLM_GTX_fast_trigonometry extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="gae25de86a968490ff56856fa425ec9d30"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL T glm::fastAtan </td>
+ <td>(</td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>angle</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Faster than the common atan function but less accurate. </p>
+<p>Defined between -2pi and 2pi. From GLM_GTX_fast_trigonometry extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="gab34c8b45c23c0165a64dcecfcc3b302a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL T glm::fastCos </td>
+ <td>(</td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>angle</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Faster than the common cos function but less accurate. </p>
+<p>From GLM_GTX_fast_trigonometry extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga0aab3257bb3b628d10a1e0483e2c6915"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL T glm::fastSin </td>
+ <td>(</td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>angle</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Faster than the common sin function but less accurate. </p>
+<p>From GLM_GTX_fast_trigonometry extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="gaf29b9c1101a10007b4f79ee89df27ba2"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL T glm::fastTan </td>
+ <td>(</td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>angle</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Faster than the common tan function but less accurate. </p>
+<p>Defined between -2pi and 2pi. From GLM_GTX_fast_trigonometry extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga069527c6dbd64f53435b8ebc4878b473"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL T glm::wrapAngle </td>
+ <td>(</td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>angle</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Wrap an angle to [0 2pi[ From GLM_GTX_fast_trigonometry extension. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00196.html b/src/third_party/glm/doc/api/a00196.html
new file mode 100644
index 0000000..59d74b2
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00196.html
@@ -0,0 +1,143 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_gradient_paint</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTX_gradient_paint<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gacde26d5e0c4a1856467bded9dfad9040"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gacde26d5e0c4a1856467bded9dfad9040"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00196.html#gacde26d5e0c4a1856467bded9dfad9040">linearGradient</a> (tvec2< T, P > const &Point0, tvec2< T, P > const &Point1, tvec2< T, P > const &Position)</td></tr>
+<tr class="separator:gacde26d5e0c4a1856467bded9dfad9040"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga166d43d567a4cf150579a92f69b0dc9f"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga166d43d567a4cf150579a92f69b0dc9f"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00196.html#ga166d43d567a4cf150579a92f69b0dc9f">radialGradient</a> (tvec2< T, P > const &Center, T const &Radius, tvec2< T, P > const &Focal, tvec2< T, P > const &Position)</td></tr>
+<tr class="separator:ga166d43d567a4cf150579a92f69b0dc9f"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Functions that return the color of procedural gradient for specific coordinates. </p>
+<p><<a class="el" href="a00041.html" title="GLM_GTX_gradient_paint ">glm/gtx/gradient_paint.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="gacde26d5e0c4a1856467bded9dfad9040"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL T glm::linearGradient </td>
+ <td>(</td>
+ <td class="paramtype">tvec2< T, P > const & </td>
+ <td class="paramname"><em>Point0</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec2< T, P > const & </td>
+ <td class="paramname"><em>Point1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec2< T, P > const & </td>
+ <td class="paramname"><em>Position</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return a color from a linear gradient. </p>
+<dl class="section see"><dt>See also</dt><dd>- <a class="el" href="a00196.html" title="Functions that return the color of procedural gradient for specific coordinates. ">GLM_GTX_gradient_paint</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga166d43d567a4cf150579a92f69b0dc9f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL T glm::radialGradient </td>
+ <td>(</td>
+ <td class="paramtype">tvec2< T, P > const & </td>
+ <td class="paramname"><em>Center</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>Radius</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec2< T, P > const & </td>
+ <td class="paramname"><em>Focal</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec2< T, P > const & </td>
+ <td class="paramname"><em>Position</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return a color from a radial gradient. </p>
+<dl class="section see"><dt>See also</dt><dd>- <a class="el" href="a00196.html" title="Functions that return the color of procedural gradient for specific coordinates. ">GLM_GTX_gradient_paint</a> </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00197.html b/src/third_party/glm/doc/api/a00197.html
new file mode 100644
index 0000000..4d38d3c
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00197.html
@@ -0,0 +1,137 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_handed_coordinate_space</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTX_handed_coordinate_space<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga7425e0ebfe6a56919900a072ae1f8017"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga7425e0ebfe6a56919900a072ae1f8017"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00197.html#ga7425e0ebfe6a56919900a072ae1f8017">leftHanded</a> (tvec3< T, P > const &tangent, tvec3< T, P > const &binormal, tvec3< T, P > const &normal)</td></tr>
+<tr class="separator:ga7425e0ebfe6a56919900a072ae1f8017"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga17cd83888de8755c0435c589fafd3603"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga17cd83888de8755c0435c589fafd3603"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00197.html#ga17cd83888de8755c0435c589fafd3603">rightHanded</a> (tvec3< T, P > const &tangent, tvec3< T, P > const &binormal, tvec3< T, P > const &normal)</td></tr>
+<tr class="separator:ga17cd83888de8755c0435c589fafd3603"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>To know if a set of three basis vectors defines a right or left-handed coordinate system. </p>
+<p><glm/gtx/handed_coordinate_system.hpp> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga7425e0ebfe6a56919900a072ae1f8017"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL bool glm::leftHanded </td>
+ <td>(</td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>tangent</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>binormal</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>normal</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return if a trihedron left handed or not. </p>
+<p>From GLM_GTX_handed_coordinate_space extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga17cd83888de8755c0435c589fafd3603"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL bool glm::rightHanded </td>
+ <td>(</td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>tangent</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>binormal</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>normal</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return if a trihedron right handed or not. </p>
+<p>From GLM_GTX_handed_coordinate_space extension. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00198.html b/src/third_party/glm/doc/api/a00198.html
new file mode 100644
index 0000000..1e42b2d
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00198.html
@@ -0,0 +1,53 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_hash</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">GLM_GTX_hash<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<p>Add std::hash support for glm types. </p>
+<p><<a class="el" href="a00043.html" title="GLM_GTX_hash ">glm/gtx/hash.hpp</a>> need to be included to use these functionalities. </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00199.html b/src/third_party/glm/doc/api/a00199.html
new file mode 100644
index 0000000..ce404c4
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00199.html
@@ -0,0 +1,314 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_integer</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#typedef-members">Typedefs</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTX_integer<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:gada7e83fdfe943aba4f1d5bf80cb66f40"><td class="memItemLeft" align="right" valign="top">typedef signed int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#gada7e83fdfe943aba4f1d5bf80cb66f40">sint</a></td></tr>
+<tr class="separator:gada7e83fdfe943aba4f1d5bf80cb66f40"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga8cbd3120905f398ec321b5d1836e08fb"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga8cbd3120905f398ec321b5d1836e08fb"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00199.html#ga8cbd3120905f398ec321b5d1836e08fb">factorial</a> (genType const &x)</td></tr>
+<tr class="separator:ga8cbd3120905f398ec321b5d1836e08fb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7011b4e1c1e1ed492149b028feacc00e"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#ga7011b4e1c1e1ed492149b028feacc00e">floor_log2</a> (unsigned int x)</td></tr>
+<tr class="separator:ga7011b4e1c1e1ed492149b028feacc00e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaabfbb41531ab7ad8d06fc176edfba785"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#gaabfbb41531ab7ad8d06fc176edfba785">mod</a> (int x, int y)</td></tr>
+<tr class="separator:gaabfbb41531ab7ad8d06fc176edfba785"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga63fc8d63e7da1706439233b386ba8b6f"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint </td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#ga63fc8d63e7da1706439233b386ba8b6f">mod</a> (uint x, uint y)</td></tr>
+<tr class="separator:ga63fc8d63e7da1706439233b386ba8b6f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga78dff8bdb361bf0061194c93e003d189"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint </td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#ga78dff8bdb361bf0061194c93e003d189">nlz</a> (uint x)</td></tr>
+<tr class="separator:ga78dff8bdb361bf0061194c93e003d189"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga89c591b970882714bd1e89a4e2f249f1"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#ga89c591b970882714bd1e89a4e2f249f1">pow</a> (int x, int y)</td></tr>
+<tr class="separator:ga89c591b970882714bd1e89a4e2f249f1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga998e5ee915d3769255519e2fbaa2bbf0"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint </td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#ga998e5ee915d3769255519e2fbaa2bbf0">pow</a> (uint x, uint y)</td></tr>
+<tr class="separator:ga998e5ee915d3769255519e2fbaa2bbf0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7ce36693a75879ccd9bb10167cfa722d"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#ga7ce36693a75879ccd9bb10167cfa722d">sqrt</a> (int x)</td></tr>
+<tr class="separator:ga7ce36693a75879ccd9bb10167cfa722d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1975d318978d6dacf78b6444fa5ed7bc"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint </td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#ga1975d318978d6dacf78b6444fa5ed7bc">sqrt</a> (uint x)</td></tr>
+<tr class="separator:ga1975d318978d6dacf78b6444fa5ed7bc"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Add support for integer for core functions. </p>
+<p><<a class="el" href="a00045.html" title="GLM_GTX_integer ">glm/gtx/integer.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a class="anchor" id="gada7e83fdfe943aba4f1d5bf80cb66f40"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef signed int sint</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>32bit signed integer. </p>
+<p>From GLM_GTX_integer extension. </p>
+
+<p>Definition at line <a class="el" href="a00045_source.html#l00051">51</a> of file <a class="el" href="a00045_source.html">gtx/integer.hpp</a>.</p>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga8cbd3120905f398ec321b5d1836e08fb"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::factorial </td>
+ <td>(</td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return the factorial value of a number (!12 max, integer only) From GLM_GTX_integer extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga7011b4e1c1e1ed492149b028feacc00e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL unsigned int glm::floor_log2 </td>
+ <td>(</td>
+ <td class="paramtype">unsigned int </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the floor log2 of x. </p>
+<p>From GLM_GTX_integer extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="gaabfbb41531ab7ad8d06fc176edfba785"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL int glm::mod </td>
+ <td>(</td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Modulus. </p>
+<p>Returns x - y * floor(x / y) for each component in x using the floating point value y. From GLM_GTX_integer extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga63fc8d63e7da1706439233b386ba8b6f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL uint glm::mod </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a> </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a> </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Modulus. </p>
+<p>Returns x - y * floor(x / y) for each component in x using the floating point value y. From GLM_GTX_integer extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga78dff8bdb361bf0061194c93e003d189"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL uint glm::nlz </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a> </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the number of leading zeros. </p>
+<p>From GLM_GTX_integer extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga89c591b970882714bd1e89a4e2f249f1"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL int glm::pow </td>
+ <td>(</td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns x raised to the y power. </p>
+<p>From GLM_GTX_integer extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga998e5ee915d3769255519e2fbaa2bbf0"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL uint glm::pow </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a> </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a> </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns x raised to the y power. </p>
+<p>From GLM_GTX_integer extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga7ce36693a75879ccd9bb10167cfa722d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL int glm::sqrt </td>
+ <td>(</td>
+ <td class="paramtype">int </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the positive square root of x. </p>
+<p>From GLM_GTX_integer extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga1975d318978d6dacf78b6444fa5ed7bc"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL uint glm::sqrt </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00158.html#ga91ad9478d81a7aaf2593e8d9c3d06a14">uint</a> </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the positive square root of x. </p>
+<p>From GLM_GTX_integer extension. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00200.html b/src/third_party/glm/doc/api/a00200.html
new file mode 100644
index 0000000..4458837
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00200.html
@@ -0,0 +1,397 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_intersect</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTX_intersect<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga9c68139f3d8a4f3d7fe45f9dbc0de5b7"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga9c68139f3d8a4f3d7fe45f9dbc0de5b7"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00200.html#ga9c68139f3d8a4f3d7fe45f9dbc0de5b7">intersectLineSphere</a> (genType const &point0, genType const &point1, genType const &sphereCenter, typename genType::value_type sphereRadius, genType &intersectionPosition1, genType &intersectionNormal1, genType &intersectionPosition2=genType(), genType &intersectionNormal2=genType())</td></tr>
+<tr class="separator:ga9c68139f3d8a4f3d7fe45f9dbc0de5b7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9d29b9b3acb504d43986502f42740df4"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga9d29b9b3acb504d43986502f42740df4"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00200.html#ga9d29b9b3acb504d43986502f42740df4">intersectLineTriangle</a> (genType const &orig, genType const &dir, genType const &vert0, genType const &vert1, genType const &vert2, genType &position)</td></tr>
+<tr class="separator:ga9d29b9b3acb504d43986502f42740df4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad3697a9700ea379739a667ea02573488"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gad3697a9700ea379739a667ea02573488"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00200.html#gad3697a9700ea379739a667ea02573488">intersectRayPlane</a> (genType const &orig, genType const &dir, genType const &planeOrig, genType const &planeNormal, typename genType::value_type &intersectionDistance)</td></tr>
+<tr class="separator:gad3697a9700ea379739a667ea02573488"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac88f8cd84c4bcb5b947d56acbbcfa56e"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gac88f8cd84c4bcb5b947d56acbbcfa56e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00200.html#gac88f8cd84c4bcb5b947d56acbbcfa56e">intersectRaySphere</a> (genType const &rayStarting, genType const &rayNormalizedDirection, genType const &sphereCenter, typename genType::value_type const sphereRadiusSquered, typename genType::value_type &intersectionDistance)</td></tr>
+<tr class="separator:gac88f8cd84c4bcb5b947d56acbbcfa56e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad28c00515b823b579c608aafa1100c1d"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gad28c00515b823b579c608aafa1100c1d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00200.html#gad28c00515b823b579c608aafa1100c1d">intersectRaySphere</a> (genType const &rayStarting, genType const &rayNormalizedDirection, genType const &sphereCenter, const typename genType::value_type sphereRadius, genType &intersectionPosition, genType &intersectionNormal)</td></tr>
+<tr class="separator:gad28c00515b823b579c608aafa1100c1d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab16c1b47c10451e7604b51b39a7ef21d"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gab16c1b47c10451e7604b51b39a7ef21d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00200.html#gab16c1b47c10451e7604b51b39a7ef21d">intersectRayTriangle</a> (genType const &orig, genType const &dir, genType const &vert0, genType const &vert1, genType const &vert2, genType &baryPosition)</td></tr>
+<tr class="separator:gab16c1b47c10451e7604b51b39a7ef21d"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Add intersection functions. </p>
+<p><<a class="el" href="a00047.html" title="GLM_GTX_intersect ">glm/gtx/intersect.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga9c68139f3d8a4f3d7fe45f9dbc0de5b7"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL bool glm::intersectLineSphere </td>
+ <td>(</td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>point0</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>point1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>sphereCenter</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">typename genType::value_type </td>
+ <td class="paramname"><em>sphereRadius</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType & </td>
+ <td class="paramname"><em>intersectionPosition1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType & </td>
+ <td class="paramname"><em>intersectionNormal1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType & </td>
+ <td class="paramname"><em>intersectionPosition2</em> = <code>genType()</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType & </td>
+ <td class="paramname"><em>intersectionNormal2</em> = <code>genType()</code> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Compute the intersection of a line and a sphere. </p>
+<p>From GLM_GTX_intersect extension </p>
+
+</div>
+</div>
+<a class="anchor" id="ga9d29b9b3acb504d43986502f42740df4"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL bool glm::intersectLineTriangle </td>
+ <td>(</td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>orig</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>dir</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>vert0</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>vert1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>vert2</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType & </td>
+ <td class="paramname"><em>position</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Compute the intersection of a line and a triangle. </p>
+<p>From GLM_GTX_intersect extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="gad3697a9700ea379739a667ea02573488"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL bool glm::intersectRayPlane </td>
+ <td>(</td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>orig</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>dir</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>planeOrig</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>planeNormal</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">typename genType::value_type & </td>
+ <td class="paramname"><em>intersectionDistance</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Compute the intersection of a ray and a plane. </p>
+<p>Ray direction and plane normal must be unit length. From GLM_GTX_intersect extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="gac88f8cd84c4bcb5b947d56acbbcfa56e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL bool glm::intersectRaySphere </td>
+ <td>(</td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>rayStarting</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>rayNormalizedDirection</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>sphereCenter</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">typename genType::value_type const </td>
+ <td class="paramname"><em>sphereRadiusSquered</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">typename genType::value_type & </td>
+ <td class="paramname"><em>intersectionDistance</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Compute the intersection distance of a ray and a sphere. </p>
+<p>The ray direction vector is unit length. From GLM_GTX_intersect extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="gad28c00515b823b579c608aafa1100c1d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL bool glm::intersectRaySphere </td>
+ <td>(</td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>rayStarting</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>rayNormalizedDirection</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>sphereCenter</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const typename genType::value_type </td>
+ <td class="paramname"><em>sphereRadius</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType & </td>
+ <td class="paramname"><em>intersectionPosition</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType & </td>
+ <td class="paramname"><em>intersectionNormal</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Compute the intersection of a ray and a sphere. </p>
+<p>From GLM_GTX_intersect extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="gab16c1b47c10451e7604b51b39a7ef21d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL bool glm::intersectRayTriangle </td>
+ <td>(</td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>orig</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>dir</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>vert0</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>vert1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>vert2</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType & </td>
+ <td class="paramname"><em>baryPosition</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Compute the intersection of a ray and a triangle. </p>
+<p>From GLM_GTX_intersect extension. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00201.html b/src/third_party/glm/doc/api/a00201.html
new file mode 100644
index 0000000..bb9ca39
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00201.html
@@ -0,0 +1,55 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_io</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">GLM_GTX_io<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>std::[w]ostream support for glm types </p>
+<p>std::[w]ostream support for glm types + precision/width/etc. manipulators based on howard hinnant's std::chrono io proposal [<a href="http://home.roadrunner.com/~hinnant/bloomington/chrono_io.html">http://home.roadrunner.com/~hinnant/bloomington/chrono_io.html</a>]</p>
+<p><<a class="el" href="a00048.html" title="GLM_GTX_io ">glm/gtx/io.hpp</a>> needs to be included to use these functionalities. </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00202.html b/src/third_party/glm/doc/api/a00202.html
new file mode 100644
index 0000000..f4066fd
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00202.html
@@ -0,0 +1,126 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_log_base</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTX_log_base<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga60a7b0a401da660869946b2b77c710c9"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga60a7b0a401da660869946b2b77c710c9"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00202.html#ga60a7b0a401da660869946b2b77c710c9">log</a> (genType const &x, genType const &base)</td></tr>
+<tr class="separator:ga60a7b0a401da660869946b2b77c710c9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1842004a127a9f3573764362ff639191"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga1842004a127a9f3573764362ff639191"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00202.html#ga1842004a127a9f3573764362ff639191">sign</a> (vecType< T, P > const &x, vecType< T, P > const &base)</td></tr>
+<tr class="separator:ga1842004a127a9f3573764362ff639191"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Logarithm for any base. </p>
+<p>base can be a vector or a scalar.</p>
+<p><<a class="el" href="a00049.html" title="GLM_GTX_log_base ">glm/gtx/log_base.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga60a7b0a401da660869946b2b77c710c9"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::log </td>
+ <td>(</td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>base</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Logarithm for any base. </p>
+<p>From GLM_GTX_log_base. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga1842004a127a9f3573764362ff639191"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<T, P> glm::sign </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>base</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Logarithm for any base. </p>
+<p>From GLM_GTX_log_base. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00203.html b/src/third_party/glm/doc/api/a00203.html
new file mode 100644
index 0000000..b45c145
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00203.html
@@ -0,0 +1,105 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_matrix_cross_product</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTX_matrix_cross_product<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga04385b2e3a93c78d116b51af2d8d708e"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga04385b2e3a93c78d116b51af2d8d708e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat3x3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00203.html#ga04385b2e3a93c78d116b51af2d8d708e">matrixCross3</a> (tvec3< T, P > const &x)</td></tr>
+<tr class="separator:ga04385b2e3a93c78d116b51af2d8d708e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2d46cc5253761c214aa5c782865156b1"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga2d46cc5253761c214aa5c782865156b1"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00203.html#ga2d46cc5253761c214aa5c782865156b1">matrixCross4</a> (tvec3< T, P > const &x)</td></tr>
+<tr class="separator:ga2d46cc5253761c214aa5c782865156b1"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Build cross product matrices. </p>
+<p><<a class="el" href="a00062.html" title="GLM_GTX_matrix_cross_product ">glm/gtx/matrix_cross_product.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga04385b2e3a93c78d116b51af2d8d708e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat3x3<T, P> glm::matrixCross3 </td>
+ <td>(</td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a cross product matrix. </p>
+<p>From GLM_GTX_matrix_cross_product extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga2d46cc5253761c214aa5c782865156b1"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, P> glm::matrixCross4 </td>
+ <td>(</td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a cross product matrix. </p>
+<p>From GLM_GTX_matrix_cross_product extension. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00204.html b/src/third_party/glm/doc/api/a00204.html
new file mode 100644
index 0000000..1407f9a
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00204.html
@@ -0,0 +1,117 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_matrix_decompose</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTX_matrix_decompose<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga0f1245817507156b337798a253577c8b"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga0f1245817507156b337798a253577c8b"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00204.html#ga0f1245817507156b337798a253577c8b">decompose</a> (tmat4x4< T, P > const &modelMatrix, tvec3< T, P > &scale, tquat< T, P > &orientation, tvec3< T, P > &translation, tvec3< T, P > &skew, tvec4< T, P > &perspective)</td></tr>
+<tr class="separator:ga0f1245817507156b337798a253577c8b"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Decomposes a model matrix to translations, rotation and scale components. </p>
+<p><<a class="el" href="a00063.html" title="GLM_GTX_matrix_decompose ">glm/gtx/matrix_decompose.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga0f1245817507156b337798a253577c8b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL bool glm::decompose </td>
+ <td>(</td>
+ <td class="paramtype">tmat4x4< T, P > const & </td>
+ <td class="paramname"><em>modelMatrix</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec3< T, P > & </td>
+ <td class="paramname"><em>scale</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tquat< T, P > & </td>
+ <td class="paramname"><em>orientation</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec3< T, P > & </td>
+ <td class="paramname"><em>translation</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec3< T, P > & </td>
+ <td class="paramname"><em>skew</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec4< T, P > & </td>
+ <td class="paramname"><em>perspective</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Decomposes a model matrix to translations, rotation and scale components. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00204.html" title="Decomposes a model matrix to translations, rotation and scale components. ">GLM_GTX_matrix_decompose</a> </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00205.html b/src/third_party/glm/doc/api/a00205.html
new file mode 100644
index 0000000..78ba95e
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00205.html
@@ -0,0 +1,191 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_matrix_interpolation</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTX_matrix_interpolation<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga9aef292eb5f29bdbb58a53ef4281af92"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga9aef292eb5f29bdbb58a53ef4281af92"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00205.html#ga9aef292eb5f29bdbb58a53ef4281af92">axisAngle</a> (tmat4x4< T, P > const &mat, tvec3< T, P > &axis, T &angle)</td></tr>
+<tr class="separator:ga9aef292eb5f29bdbb58a53ef4281af92"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga82d4bc058e9628cb2ea1d4e117a0cf39"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga82d4bc058e9628cb2ea1d4e117a0cf39"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00205.html#ga82d4bc058e9628cb2ea1d4e117a0cf39">axisAngleMatrix</a> (tvec3< T, P > const &axis, T const angle)</td></tr>
+<tr class="separator:ga82d4bc058e9628cb2ea1d4e117a0cf39"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6b8170aa4cf43caf81400696ebb38afe"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga6b8170aa4cf43caf81400696ebb38afe"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00205.html#ga6b8170aa4cf43caf81400696ebb38afe">extractMatrixRotation</a> (tmat4x4< T, P > const &mat)</td></tr>
+<tr class="separator:ga6b8170aa4cf43caf81400696ebb38afe"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga45099a92c5c704503565619ac2bcd5c6"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga45099a92c5c704503565619ac2bcd5c6"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00205.html#ga45099a92c5c704503565619ac2bcd5c6">interpolate</a> (tmat4x4< T, P > const &m1, tmat4x4< T, P > const &m2, T const delta)</td></tr>
+<tr class="separator:ga45099a92c5c704503565619ac2bcd5c6"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Allows to directly interpolate two exiciting matrices. </p>
+<p><<a class="el" href="a00065.html" title="GLM_GTX_matrix_interpolation ">glm/gtx/matrix_interpolation.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga9aef292eb5f29bdbb58a53ef4281af92"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL void glm::axisAngle </td>
+ <td>(</td>
+ <td class="paramtype">tmat4x4< T, P > const & </td>
+ <td class="paramname"><em>mat</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec3< T, P > & </td>
+ <td class="paramname"><em>axis</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T & </td>
+ <td class="paramname"><em>angle</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Get the axis and angle of the rotation from a matrix. </p>
+<p>From GLM_GTX_matrix_interpolation extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga82d4bc058e9628cb2ea1d4e117a0cf39"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, P> glm::axisAngleMatrix </td>
+ <td>(</td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>axis</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const </td>
+ <td class="paramname"><em>angle</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a matrix from axis and angle. </p>
+<p>From GLM_GTX_matrix_interpolation extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga6b8170aa4cf43caf81400696ebb38afe"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, P> glm::extractMatrixRotation </td>
+ <td>(</td>
+ <td class="paramtype">tmat4x4< T, P > const & </td>
+ <td class="paramname"><em>mat</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Extracts the rotation part of a matrix. </p>
+<p>From GLM_GTX_matrix_interpolation extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga45099a92c5c704503565619ac2bcd5c6"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, P> glm::interpolate </td>
+ <td>(</td>
+ <td class="paramtype">tmat4x4< T, P > const & </td>
+ <td class="paramname"><em>m1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tmat4x4< T, P > const & </td>
+ <td class="paramname"><em>m2</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const </td>
+ <td class="paramname"><em>delta</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a interpolation of 4 * 4 matrixes. </p>
+<p>From GLM_GTX_matrix_interpolation extension. Warning! works only with rotation and/or translation matrixes, scale will generate unexpected results. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00206.html b/src/third_party/glm/doc/api/a00206.html
new file mode 100644
index 0000000..a801a7c
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00206.html
@@ -0,0 +1,421 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_matrix_major_storage</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTX_matrix_major_storage<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga599fff4f1c65912b256a82138ebcca37"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga599fff4f1c65912b256a82138ebcca37"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat2x2< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00206.html#ga599fff4f1c65912b256a82138ebcca37">colMajor2</a> (tvec2< T, P > const &v1, tvec2< T, P > const &v2)</td></tr>
+<tr class="separator:ga599fff4f1c65912b256a82138ebcca37"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5cfd25de9d5b4c6a825085f38ddfeff7"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga5cfd25de9d5b4c6a825085f38ddfeff7"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat2x2< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00206.html#ga5cfd25de9d5b4c6a825085f38ddfeff7">colMajor2</a> (tmat2x2< T, P > const &m)</td></tr>
+<tr class="separator:ga5cfd25de9d5b4c6a825085f38ddfeff7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3a55e2948193e91733e434e7cc3c1540"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga3a55e2948193e91733e434e7cc3c1540"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat3x3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00206.html#ga3a55e2948193e91733e434e7cc3c1540">colMajor3</a> (tvec3< T, P > const &v1, tvec3< T, P > const &v2, tvec3< T, P > const &v3)</td></tr>
+<tr class="separator:ga3a55e2948193e91733e434e7cc3c1540"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa93f3dcc47ced18e5db4a853363d9386"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gaa93f3dcc47ced18e5db4a853363d9386"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat3x3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00206.html#gaa93f3dcc47ced18e5db4a853363d9386">colMajor3</a> (tmat3x3< T, P > const &m)</td></tr>
+<tr class="separator:gaa93f3dcc47ced18e5db4a853363d9386"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2829de096bb67ab5cd670958f3d402b6"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga2829de096bb67ab5cd670958f3d402b6"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00206.html#ga2829de096bb67ab5cd670958f3d402b6">colMajor4</a> (tvec4< T, P > const &v1, tvec4< T, P > const &v2, tvec4< T, P > const &v3, tvec4< T, P > const &v4)</td></tr>
+<tr class="separator:ga2829de096bb67ab5cd670958f3d402b6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7592acfd27da055e2d7c39564cf8803d"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga7592acfd27da055e2d7c39564cf8803d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00206.html#ga7592acfd27da055e2d7c39564cf8803d">colMajor4</a> (tmat4x4< T, P > const &m)</td></tr>
+<tr class="separator:ga7592acfd27da055e2d7c39564cf8803d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0c7f4d56a85865f0002127119ab7d551"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga0c7f4d56a85865f0002127119ab7d551"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat2x2< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00206.html#ga0c7f4d56a85865f0002127119ab7d551">rowMajor2</a> (tvec2< T, P > const &v1, tvec2< T, P > const &v2)</td></tr>
+<tr class="separator:ga0c7f4d56a85865f0002127119ab7d551"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga42a006aa66198452bd3c89415f892196"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga42a006aa66198452bd3c89415f892196"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat2x2< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00206.html#ga42a006aa66198452bd3c89415f892196">rowMajor2</a> (tmat2x2< T, P > const &m)</td></tr>
+<tr class="separator:ga42a006aa66198452bd3c89415f892196"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaba4de9afc4e65ec8ea0403e7cba3fb9f"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gaba4de9afc4e65ec8ea0403e7cba3fb9f"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat3x3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00206.html#gaba4de9afc4e65ec8ea0403e7cba3fb9f">rowMajor3</a> (tvec3< T, P > const &v1, tvec3< T, P > const &v2, tvec3< T, P > const &v3)</td></tr>
+<tr class="separator:gaba4de9afc4e65ec8ea0403e7cba3fb9f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga38537061135b55e7a053926ca55e6e20"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga38537061135b55e7a053926ca55e6e20"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat3x3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00206.html#ga38537061135b55e7a053926ca55e6e20">rowMajor3</a> (tmat3x3< T, P > const &m)</td></tr>
+<tr class="separator:ga38537061135b55e7a053926ca55e6e20"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3ce8f2a78fb2f15bf28151ee128b0ae8"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga3ce8f2a78fb2f15bf28151ee128b0ae8"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00206.html#ga3ce8f2a78fb2f15bf28151ee128b0ae8">rowMajor4</a> (tvec4< T, P > const &v1, tvec4< T, P > const &v2, tvec4< T, P > const &v3, tvec4< T, P > const &v4)</td></tr>
+<tr class="separator:ga3ce8f2a78fb2f15bf28151ee128b0ae8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga85771a88c114a088a0414bcfce55e729"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga85771a88c114a088a0414bcfce55e729"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00206.html#ga85771a88c114a088a0414bcfce55e729">rowMajor4</a> (tmat4x4< T, P > const &m)</td></tr>
+<tr class="separator:ga85771a88c114a088a0414bcfce55e729"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Build matrices with specific matrix order, row or column. </p>
+<p><<a class="el" href="a00067.html" title="GLM_GTX_matrix_major_storage ">glm/gtx/matrix_major_storage.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga599fff4f1c65912b256a82138ebcca37"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat2x2<T, P> glm::colMajor2 </td>
+ <td>(</td>
+ <td class="paramtype">tvec2< T, P > const & </td>
+ <td class="paramname"><em>v1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec2< T, P > const & </td>
+ <td class="paramname"><em>v2</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a column major matrix from column vectors. </p>
+<p>From GLM_GTX_matrix_major_storage extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga5cfd25de9d5b4c6a825085f38ddfeff7"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat2x2<T, P> glm::colMajor2 </td>
+ <td>(</td>
+ <td class="paramtype">tmat2x2< T, P > const & </td>
+ <td class="paramname"><em>m</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a column major matrix from other matrix. </p>
+<p>From GLM_GTX_matrix_major_storage extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga3a55e2948193e91733e434e7cc3c1540"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat3x3<T, P> glm::colMajor3 </td>
+ <td>(</td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>v1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>v2</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>v3</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a column major matrix from column vectors. </p>
+<p>From GLM_GTX_matrix_major_storage extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="gaa93f3dcc47ced18e5db4a853363d9386"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat3x3<T, P> glm::colMajor3 </td>
+ <td>(</td>
+ <td class="paramtype">tmat3x3< T, P > const & </td>
+ <td class="paramname"><em>m</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a column major matrix from other matrix. </p>
+<p>From GLM_GTX_matrix_major_storage extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga2829de096bb67ab5cd670958f3d402b6"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, P> glm::colMajor4 </td>
+ <td>(</td>
+ <td class="paramtype">tvec4< T, P > const & </td>
+ <td class="paramname"><em>v1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec4< T, P > const & </td>
+ <td class="paramname"><em>v2</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec4< T, P > const & </td>
+ <td class="paramname"><em>v3</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec4< T, P > const & </td>
+ <td class="paramname"><em>v4</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a column major matrix from column vectors. </p>
+<p>From GLM_GTX_matrix_major_storage extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga7592acfd27da055e2d7c39564cf8803d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, P> glm::colMajor4 </td>
+ <td>(</td>
+ <td class="paramtype">tmat4x4< T, P > const & </td>
+ <td class="paramname"><em>m</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a column major matrix from other matrix. </p>
+<p>From GLM_GTX_matrix_major_storage extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga0c7f4d56a85865f0002127119ab7d551"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat2x2<T, P> glm::rowMajor2 </td>
+ <td>(</td>
+ <td class="paramtype">tvec2< T, P > const & </td>
+ <td class="paramname"><em>v1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec2< T, P > const & </td>
+ <td class="paramname"><em>v2</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a row major matrix from row vectors. </p>
+<p>From GLM_GTX_matrix_major_storage extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga42a006aa66198452bd3c89415f892196"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat2x2<T, P> glm::rowMajor2 </td>
+ <td>(</td>
+ <td class="paramtype">tmat2x2< T, P > const & </td>
+ <td class="paramname"><em>m</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a row major matrix from other matrix. </p>
+<p>From GLM_GTX_matrix_major_storage extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="gaba4de9afc4e65ec8ea0403e7cba3fb9f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat3x3<T, P> glm::rowMajor3 </td>
+ <td>(</td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>v1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>v2</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>v3</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a row major matrix from row vectors. </p>
+<p>From GLM_GTX_matrix_major_storage extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga38537061135b55e7a053926ca55e6e20"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat3x3<T, P> glm::rowMajor3 </td>
+ <td>(</td>
+ <td class="paramtype">tmat3x3< T, P > const & </td>
+ <td class="paramname"><em>m</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a row major matrix from other matrix. </p>
+<p>From GLM_GTX_matrix_major_storage extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga3ce8f2a78fb2f15bf28151ee128b0ae8"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, P> glm::rowMajor4 </td>
+ <td>(</td>
+ <td class="paramtype">tvec4< T, P > const & </td>
+ <td class="paramname"><em>v1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec4< T, P > const & </td>
+ <td class="paramname"><em>v2</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec4< T, P > const & </td>
+ <td class="paramname"><em>v3</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec4< T, P > const & </td>
+ <td class="paramname"><em>v4</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a row major matrix from row vectors. </p>
+<p>From GLM_GTX_matrix_major_storage extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga85771a88c114a088a0414bcfce55e729"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, P> glm::rowMajor4 </td>
+ <td>(</td>
+ <td class="paramtype">tmat4x4< T, P > const & </td>
+ <td class="paramname"><em>m</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a row major matrix from other matrix. </p>
+<p>From GLM_GTX_matrix_major_storage extension. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00207.html b/src/third_party/glm/doc/api/a00207.html
new file mode 100644
index 0000000..3c41c6e
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00207.html
@@ -0,0 +1,259 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_matrix_operation</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTX_matrix_operation<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga01dc503262dba9c457113d131fc8c024"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga01dc503262dba9c457113d131fc8c024"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat2x2< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00207.html#ga01dc503262dba9c457113d131fc8c024">diagonal2x2</a> (tvec2< T, P > const &v)</td></tr>
+<tr class="separator:ga01dc503262dba9c457113d131fc8c024"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga763817f07d6a94b722a48adfa87a35db"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga763817f07d6a94b722a48adfa87a35db"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat2x3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00207.html#ga763817f07d6a94b722a48adfa87a35db">diagonal2x3</a> (tvec2< T, P > const &v)</td></tr>
+<tr class="separator:ga763817f07d6a94b722a48adfa87a35db"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga49b37c819cf6dd8e35112ed1a13d45a3"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga49b37c819cf6dd8e35112ed1a13d45a3"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat2x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00207.html#ga49b37c819cf6dd8e35112ed1a13d45a3">diagonal2x4</a> (tvec2< T, P > const &v)</td></tr>
+<tr class="separator:ga49b37c819cf6dd8e35112ed1a13d45a3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga586e1ced91fd8a7c414186a200f13532"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga586e1ced91fd8a7c414186a200f13532"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat3x2< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00207.html#ga586e1ced91fd8a7c414186a200f13532">diagonal3x2</a> (tvec2< T, P > const &v)</td></tr>
+<tr class="separator:ga586e1ced91fd8a7c414186a200f13532"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8e817dba22f2305cdebae07bbbe0360c"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga8e817dba22f2305cdebae07bbbe0360c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat3x3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00207.html#ga8e817dba22f2305cdebae07bbbe0360c">diagonal3x3</a> (tvec3< T, P > const &v)</td></tr>
+<tr class="separator:ga8e817dba22f2305cdebae07bbbe0360c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae3f85af86c18c80f2acbe3223feb8e81"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gae3f85af86c18c80f2acbe3223feb8e81"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat3x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00207.html#gae3f85af86c18c80f2acbe3223feb8e81">diagonal3x4</a> (tvec3< T, P > const &v)</td></tr>
+<tr class="separator:gae3f85af86c18c80f2acbe3223feb8e81"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga70cc5632aa9f41e7cf0b81fee6f2bfe6"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga70cc5632aa9f41e7cf0b81fee6f2bfe6"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x2< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00207.html#ga70cc5632aa9f41e7cf0b81fee6f2bfe6">diagonal4x2</a> (tvec2< T, P > const &v)</td></tr>
+<tr class="separator:ga70cc5632aa9f41e7cf0b81fee6f2bfe6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4242ea5681f81539e0c5b54fadcd9ddf"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga4242ea5681f81539e0c5b54fadcd9ddf"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00207.html#ga4242ea5681f81539e0c5b54fadcd9ddf">diagonal4x3</a> (tvec3< T, P > const &v)</td></tr>
+<tr class="separator:ga4242ea5681f81539e0c5b54fadcd9ddf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gade576e044d8e52f343166f665589d782"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gade576e044d8e52f343166f665589d782"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00207.html#gade576e044d8e52f343166f665589d782">diagonal4x4</a> (tvec4< T, P > const &v)</td></tr>
+<tr class="separator:gade576e044d8e52f343166f665589d782"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Build diagonal matrices from vectors. </p>
+<p><<a class="el" href="a00068.html" title="GLM_GTX_matrix_operation ">glm/gtx/matrix_operation.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga01dc503262dba9c457113d131fc8c024"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat2x2<T, P> glm::diagonal2x2 </td>
+ <td>(</td>
+ <td class="paramtype">tvec2< T, P > const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a diagonal matrix. </p>
+<p>From GLM_GTX_matrix_operation extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga763817f07d6a94b722a48adfa87a35db"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat2x3<T, P> glm::diagonal2x3 </td>
+ <td>(</td>
+ <td class="paramtype">tvec2< T, P > const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a diagonal matrix. </p>
+<p>From GLM_GTX_matrix_operation extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga49b37c819cf6dd8e35112ed1a13d45a3"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat2x4<T, P> glm::diagonal2x4 </td>
+ <td>(</td>
+ <td class="paramtype">tvec2< T, P > const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a diagonal matrix. </p>
+<p>From GLM_GTX_matrix_operation extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga586e1ced91fd8a7c414186a200f13532"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat3x2<T, P> glm::diagonal3x2 </td>
+ <td>(</td>
+ <td class="paramtype">tvec2< T, P > const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a diagonal matrix. </p>
+<p>From GLM_GTX_matrix_operation extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga8e817dba22f2305cdebae07bbbe0360c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat3x3<T, P> glm::diagonal3x3 </td>
+ <td>(</td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a diagonal matrix. </p>
+<p>From GLM_GTX_matrix_operation extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="gae3f85af86c18c80f2acbe3223feb8e81"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat3x4<T, P> glm::diagonal3x4 </td>
+ <td>(</td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a diagonal matrix. </p>
+<p>From GLM_GTX_matrix_operation extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga70cc5632aa9f41e7cf0b81fee6f2bfe6"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x2<T, P> glm::diagonal4x2 </td>
+ <td>(</td>
+ <td class="paramtype">tvec2< T, P > const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a diagonal matrix. </p>
+<p>From GLM_GTX_matrix_operation extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga4242ea5681f81539e0c5b54fadcd9ddf"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x3<T, P> glm::diagonal4x3 </td>
+ <td>(</td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a diagonal matrix. </p>
+<p>From GLM_GTX_matrix_operation extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="gade576e044d8e52f343166f665589d782"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, P> glm::diagonal4x4 </td>
+ <td>(</td>
+ <td class="paramtype">tvec4< T, P > const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a diagonal matrix. </p>
+<p>From GLM_GTX_matrix_operation extension. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00208.html b/src/third_party/glm/doc/api/a00208.html
new file mode 100644
index 0000000..09008f7
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00208.html
@@ -0,0 +1,317 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_matrix_query</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTX_matrix_query<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gafc1ce12c738b8c5d007179e615609330"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class matType> </td></tr>
+<tr class="memitem:gafc1ce12c738b8c5d007179e615609330"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00208.html#gafc1ce12c738b8c5d007179e615609330">isIdentity</a> (matType< T, P > const &m, T const &epsilon)</td></tr>
+<tr class="separator:gafc1ce12c738b8c5d007179e615609330"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga11a8d5cdb36496b85f61e4f5f7f2602c"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga11a8d5cdb36496b85f61e4f5f7f2602c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00208.html#ga11a8d5cdb36496b85f61e4f5f7f2602c">isNormalized</a> (tmat2x2< T, P > const &m, T const &epsilon)</td></tr>
+<tr class="separator:ga11a8d5cdb36496b85f61e4f5f7f2602c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga351bcc8d485d329b78cfa875e084964d"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga351bcc8d485d329b78cfa875e084964d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00208.html#ga351bcc8d485d329b78cfa875e084964d">isNormalized</a> (tmat3x3< T, P > const &m, T const &epsilon)</td></tr>
+<tr class="separator:ga351bcc8d485d329b78cfa875e084964d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga934b673ec0e16d79eca0ca9dbb5d6d8b"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga934b673ec0e16d79eca0ca9dbb5d6d8b"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00208.html#ga934b673ec0e16d79eca0ca9dbb5d6d8b">isNormalized</a> (tmat4x4< T, P > const &m, T const &epsilon)</td></tr>
+<tr class="separator:ga934b673ec0e16d79eca0ca9dbb5d6d8b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga37e535cbeaea383b8c1247b98875cd4b"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga37e535cbeaea383b8c1247b98875cd4b"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00208.html#ga37e535cbeaea383b8c1247b98875cd4b">isNull</a> (tmat2x2< T, P > const &m, T const &epsilon)</td></tr>
+<tr class="separator:ga37e535cbeaea383b8c1247b98875cd4b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac67a5c7e029a84b74b02ac9599b8972d"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gac67a5c7e029a84b74b02ac9599b8972d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00208.html#gac67a5c7e029a84b74b02ac9599b8972d">isNull</a> (tmat3x3< T, P > const &m, T const &epsilon)</td></tr>
+<tr class="separator:gac67a5c7e029a84b74b02ac9599b8972d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga326de496972051413c7b44b85fc9cb6e"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga326de496972051413c7b44b85fc9cb6e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00208.html#ga326de496972051413c7b44b85fc9cb6e">isNull</a> (tmat4x4< T, P > const &m, T const &epsilon)</td></tr>
+<tr class="separator:ga326de496972051413c7b44b85fc9cb6e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab2cb5d23df77b4e4e63ad2965acd31b3"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class matType> </td></tr>
+<tr class="memitem:gab2cb5d23df77b4e4e63ad2965acd31b3"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00208.html#gab2cb5d23df77b4e4e63ad2965acd31b3">isOrthogonal</a> (matType< T, P > const &m, T const &epsilon)</td></tr>
+<tr class="separator:gab2cb5d23df77b4e4e63ad2965acd31b3"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Query to evaluate matrix properties. </p>
+<p><<a class="el" href="a00069.html" title="GLM_GTX_matrix_query ">glm/gtx/matrix_query.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="gafc1ce12c738b8c5d007179e615609330"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL bool glm::isIdentity </td>
+ <td>(</td>
+ <td class="paramtype">matType< T, P > const & </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>epsilon</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return whether a matrix is an identity matrix. </p>
+<p>From GLM_GTX_matrix_query extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga11a8d5cdb36496b85f61e4f5f7f2602c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL bool glm::isNormalized </td>
+ <td>(</td>
+ <td class="paramtype">tmat2x2< T, P > const & </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>epsilon</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return whether a matrix is a normalized matrix. </p>
+<p>From GLM_GTX_matrix_query extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga351bcc8d485d329b78cfa875e084964d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL bool glm::isNormalized </td>
+ <td>(</td>
+ <td class="paramtype">tmat3x3< T, P > const & </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>epsilon</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return whether a matrix is a normalized matrix. </p>
+<p>From GLM_GTX_matrix_query extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga934b673ec0e16d79eca0ca9dbb5d6d8b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL bool glm::isNormalized </td>
+ <td>(</td>
+ <td class="paramtype">tmat4x4< T, P > const & </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>epsilon</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return whether a matrix is a normalized matrix. </p>
+<p>From GLM_GTX_matrix_query extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga37e535cbeaea383b8c1247b98875cd4b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL bool glm::isNull </td>
+ <td>(</td>
+ <td class="paramtype">tmat2x2< T, P > const & </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>epsilon</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return whether a matrix a null matrix. </p>
+<p>From GLM_GTX_matrix_query extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="gac67a5c7e029a84b74b02ac9599b8972d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL bool glm::isNull </td>
+ <td>(</td>
+ <td class="paramtype">tmat3x3< T, P > const & </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>epsilon</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return whether a matrix a null matrix. </p>
+<p>From GLM_GTX_matrix_query extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga326de496972051413c7b44b85fc9cb6e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL bool glm::isNull </td>
+ <td>(</td>
+ <td class="paramtype">tmat4x4< T, P > const & </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>epsilon</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return whether a matrix is a null matrix. </p>
+<p>From GLM_GTX_matrix_query extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="gab2cb5d23df77b4e4e63ad2965acd31b3"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL bool glm::isOrthogonal </td>
+ <td>(</td>
+ <td class="paramtype">matType< T, P > const & </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>epsilon</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return whether a matrix is an orthonormalized matrix. </p>
+<p>From GLM_GTX_matrix_query extension. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00209.html b/src/third_party/glm/doc/api/a00209.html
new file mode 100644
index 0000000..1b7033e
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00209.html
@@ -0,0 +1,251 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_matrix_transform_2d</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTX_matrix_transform_2d<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gab4f798c6048db91a6d0686812fd54022"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gab4f798c6048db91a6d0686812fd54022"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER tmat3x3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00209.html#gab4f798c6048db91a6d0686812fd54022">rotate</a> (tmat3x3< T, P > const &m, T angle)</td></tr>
+<tr class="separator:gab4f798c6048db91a6d0686812fd54022"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5a608eaf1fdfd0a349a30181cb6a0240"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga5a608eaf1fdfd0a349a30181cb6a0240"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER tmat3x3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00209.html#ga5a608eaf1fdfd0a349a30181cb6a0240">scale</a> (tmat3x3< T, P > const &m, tvec2< T, P > const &v)</td></tr>
+<tr class="separator:ga5a608eaf1fdfd0a349a30181cb6a0240"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3da9ea234fdb2a96c75a97a18c903489"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga3da9ea234fdb2a96c75a97a18c903489"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER tmat3x3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00209.html#ga3da9ea234fdb2a96c75a97a18c903489">shearX</a> (tmat3x3< T, P > const &m, T y)</td></tr>
+<tr class="separator:ga3da9ea234fdb2a96c75a97a18c903489"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga93bb348e7d251bcc2c17bfc11bd82e91"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga93bb348e7d251bcc2c17bfc11bd82e91"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER tmat3x3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00209.html#ga93bb348e7d251bcc2c17bfc11bd82e91">shearY</a> (tmat3x3< T, P > const &m, T x)</td></tr>
+<tr class="separator:ga93bb348e7d251bcc2c17bfc11bd82e91"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga22b5e806a6d2e2be54ebd29100d11c51"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga22b5e806a6d2e2be54ebd29100d11c51"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER tmat3x3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00209.html#ga22b5e806a6d2e2be54ebd29100d11c51">translate</a> (tmat3x3< T, P > const &m, tvec2< T, P > const &v)</td></tr>
+<tr class="separator:ga22b5e806a6d2e2be54ebd29100d11c51"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Defines functions that generate common 2d transformation matrices. </p>
+<p><<a class="el" href="a00071.html" title="GLM_GTX_matrix_transform_2d ">glm/gtx/matrix_transform_2d.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="gab4f798c6048db91a6d0686812fd54022"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_QUALIFIER tmat3x3<T, P> glm::rotate </td>
+ <td>(</td>
+ <td class="paramtype">tmat3x3< T, P > const & </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>angle</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Builds a rotation 3 * 3 matrix created from an angle. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">m</td><td>Input matrix multiplied by this translation matrix. </td></tr>
+ <tr><td class="paramname">angle</td><td>Rotation angle expressed in radians if GLM_FORCE_RADIANS is defined or degrees otherwise. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ga5a608eaf1fdfd0a349a30181cb6a0240"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_QUALIFIER tmat3x3<T, P> glm::scale </td>
+ <td>(</td>
+ <td class="paramtype">tmat3x3< T, P > const & </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec2< T, P > const & </td>
+ <td class="paramname"><em>v</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Builds a scale 3 * 3 matrix created from a vector of 2 components. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">m</td><td>Input matrix multiplied by this translation matrix. </td></tr>
+ <tr><td class="paramname">v</td><td>Coordinates of a scale vector. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ga3da9ea234fdb2a96c75a97a18c903489"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_QUALIFIER tmat3x3<T, P> glm::shearX </td>
+ <td>(</td>
+ <td class="paramtype">tmat3x3< T, P > const & </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Builds an horizontal (parallel to the x axis) shear 3 * 3 matrix. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">m</td><td>Input matrix multiplied by this translation matrix. </td></tr>
+ <tr><td class="paramname">y</td><td>Shear factor. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ga93bb348e7d251bcc2c17bfc11bd82e91"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_QUALIFIER tmat3x3<T, P> glm::shearY </td>
+ <td>(</td>
+ <td class="paramtype">tmat3x3< T, P > const & </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>x</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Builds a vertical (parallel to the y axis) shear 3 * 3 matrix. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">m</td><td>Input matrix multiplied by this translation matrix. </td></tr>
+ <tr><td class="paramname">x</td><td>Shear factor. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ga22b5e806a6d2e2be54ebd29100d11c51"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_QUALIFIER tmat3x3<T, P> glm::translate </td>
+ <td>(</td>
+ <td class="paramtype">tmat3x3< T, P > const & </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec2< T, P > const & </td>
+ <td class="paramname"><em>v</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Builds a translation 3 * 3 matrix created from a vector of 2 components. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">m</td><td>Input matrix multiplied by this translation matrix. </td></tr>
+ <tr><td class="paramname">v</td><td>Coordinates of a translation vector. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00210.html b/src/third_party/glm/doc/api/a00210.html
new file mode 100644
index 0000000..2a4fdab
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00210.html
@@ -0,0 +1,64 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_mixed_producte</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTX_mixed_producte<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gaaee4cf80d69cb86de80f12af88b3c3af"><td class="memTemplParams" colspan="2"><a class="anchor" id="gaaee4cf80d69cb86de80f12af88b3c3af"></a>
+template<typename T , precision P> </td></tr>
+<tr class="memitem:gaaee4cf80d69cb86de80f12af88b3c3af"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00210.html#gaaee4cf80d69cb86de80f12af88b3c3af">mixedProduct</a> (tvec3< T, P > const &v1, tvec3< T, P > const &v2, tvec3< T, P > const &v3)</td></tr>
+<tr class="separator:gaaee4cf80d69cb86de80f12af88b3c3af"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Mixed product of 3 vectors. </p>
+<p><<a class="el" href="a00072.html" title="GLM_GTX_mixed_producte ">glm/gtx/mixed_product.hpp</a>> need to be included to use these functionalities. </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00211.html b/src/third_party/glm/doc/api/a00211.html
new file mode 100644
index 0000000..d1dd03e
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00211.html
@@ -0,0 +1,293 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_norm</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTX_norm<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga647d2602008801d6ed78f9708eb439cc"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga647d2602008801d6ed78f9708eb439cc"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00211.html#ga647d2602008801d6ed78f9708eb439cc">distance2</a> (vecType< T, P > const &p0, vecType< T, P > const &p1)</td></tr>
+<tr class="separator:ga647d2602008801d6ed78f9708eb439cc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaebe5a39b06e262e615622129f37da4f4"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gaebe5a39b06e262e615622129f37da4f4"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00211.html#gaebe5a39b06e262e615622129f37da4f4">l1Norm</a> (tvec3< T, P > const &x, tvec3< T, P > const &y)</td></tr>
+<tr class="separator:gaebe5a39b06e262e615622129f37da4f4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6d5964f09cdb43803496a5ee3ced71cb"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga6d5964f09cdb43803496a5ee3ced71cb"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00211.html#ga6d5964f09cdb43803496a5ee3ced71cb">l1Norm</a> (tvec3< T, P > const &v)</td></tr>
+<tr class="separator:ga6d5964f09cdb43803496a5ee3ced71cb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafa6fbbc99cd44d81bf030e74eaf7ad64"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gafa6fbbc99cd44d81bf030e74eaf7ad64"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00211.html#gafa6fbbc99cd44d81bf030e74eaf7ad64">l2Norm</a> (tvec3< T, P > const &x, tvec3< T, P > const &y)</td></tr>
+<tr class="separator:gafa6fbbc99cd44d81bf030e74eaf7ad64"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0a8cb8a0ce88d1d977de23209bf04610"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga0a8cb8a0ce88d1d977de23209bf04610"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00211.html#ga0a8cb8a0ce88d1d977de23209bf04610">l2Norm</a> (tvec3< T, P > const &x)</td></tr>
+<tr class="separator:ga0a8cb8a0ce88d1d977de23209bf04610"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6d326d62fd9b7f4f0a1b79e56492a7e4"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga6d326d62fd9b7f4f0a1b79e56492a7e4"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00211.html#ga6d326d62fd9b7f4f0a1b79e56492a7e4">length2</a> (vecType< T, P > const &x)</td></tr>
+<tr class="separator:ga6d326d62fd9b7f4f0a1b79e56492a7e4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga932bb0854e5c5a6ab5a14b023c451ca7"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga932bb0854e5c5a6ab5a14b023c451ca7"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00211.html#ga932bb0854e5c5a6ab5a14b023c451ca7">lxNorm</a> (tvec3< T, P > const &x, tvec3< T, P > const &y, unsigned int Depth)</td></tr>
+<tr class="separator:ga932bb0854e5c5a6ab5a14b023c451ca7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaab931b0d1acfe2f9c1cb78311edf24fc"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gaab931b0d1acfe2f9c1cb78311edf24fc"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00211.html#gaab931b0d1acfe2f9c1cb78311edf24fc">lxNorm</a> (tvec3< T, P > const &x, unsigned int Depth)</td></tr>
+<tr class="separator:gaab931b0d1acfe2f9c1cb78311edf24fc"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Various ways to compute vector norms. </p>
+<p><<a class="el" href="a00074.html" title="GLM_GTX_norm ">glm/gtx/norm.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga647d2602008801d6ed78f9708eb439cc"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL T glm::distance2 </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>p0</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>p1</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the squared distance between p0 and p1, i.e., length2(p0 - p1). </p>
+<p>From GLM_GTX_norm extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="gaebe5a39b06e262e615622129f37da4f4"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL T glm::l1Norm </td>
+ <td>(</td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the L1 norm between x and y. </p>
+<p>From GLM_GTX_norm extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga6d5964f09cdb43803496a5ee3ced71cb"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL T glm::l1Norm </td>
+ <td>(</td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the L1 norm of v. </p>
+<p>From GLM_GTX_norm extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="gafa6fbbc99cd44d81bf030e74eaf7ad64"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL T glm::l2Norm </td>
+ <td>(</td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the L2 norm between x and y. </p>
+<p>From GLM_GTX_norm extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga0a8cb8a0ce88d1d977de23209bf04610"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL T glm::l2Norm </td>
+ <td>(</td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the L2 norm of v. </p>
+<p>From GLM_GTX_norm extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga6d326d62fd9b7f4f0a1b79e56492a7e4"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL T glm::length2 </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the squared length of x. </p>
+<p>From GLM_GTX_norm extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga932bb0854e5c5a6ab5a14b023c451ca7"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL T glm::lxNorm </td>
+ <td>(</td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int </td>
+ <td class="paramname"><em>Depth</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the L norm between x and y. </p>
+<p>From GLM_GTX_norm extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="gaab931b0d1acfe2f9c1cb78311edf24fc"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL T glm::lxNorm </td>
+ <td>(</td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int </td>
+ <td class="paramname"><em>Depth</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the L norm of v. </p>
+<p>From GLM_GTX_norm extension. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00212.html b/src/third_party/glm/doc/api/a00212.html
new file mode 100644
index 0000000..c2912ed
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00212.html
@@ -0,0 +1,99 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_normal</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTX_normal<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga7842850bcda582f1756883e3ed950e14"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga7842850bcda582f1756883e3ed950e14"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00212.html#ga7842850bcda582f1756883e3ed950e14">triangleNormal</a> (tvec3< T, P > const &p1, tvec3< T, P > const &p2, tvec3< T, P > const &p3)</td></tr>
+<tr class="separator:ga7842850bcda582f1756883e3ed950e14"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Compute the normal of a triangle. </p>
+<p><<a class="el" href="a00075.html" title="GLM_GTX_normal ">glm/gtx/normal.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga7842850bcda582f1756883e3ed950e14"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tvec3<T, P> glm::triangleNormal </td>
+ <td>(</td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>p1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>p2</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>p3</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Computes triangle normal from triangle points. </p>
+<p>From GLM_GTX_normal extension. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00213.html b/src/third_party/glm/doc/api/a00213.html
new file mode 100644
index 0000000..b0252fc
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00213.html
@@ -0,0 +1,127 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_normalize_dot</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTX_normalize_dot<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga8593b21bc2fe22184f01d5e08b5a2024"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga8593b21bc2fe22184f01d5e08b5a2024"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00213.html#ga8593b21bc2fe22184f01d5e08b5a2024">fastNormalizeDot</a> (vecType< T, P > const &x, vecType< T, P > const &y)</td></tr>
+<tr class="separator:ga8593b21bc2fe22184f01d5e08b5a2024"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaffbc2f2cb15838de8886a68048f9004d"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gaffbc2f2cb15838de8886a68048f9004d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00213.html#gaffbc2f2cb15838de8886a68048f9004d">normalizeDot</a> (vecType< T, P > const &x, vecType< T, P > const &y)</td></tr>
+<tr class="separator:gaffbc2f2cb15838de8886a68048f9004d"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Dot product of vectors that need to be normalize with a single square root. </p>
+<p><glm/gtx/normalized_dot.hpp> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga8593b21bc2fe22184f01d5e08b5a2024"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL T glm::fastNormalizeDot </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Normalize parameters and returns the dot product of x and y. </p>
+<p>Faster that dot(fastNormalize(x), fastNormalize(y)).</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00213.html" title="Dot product of vectors that need to be normalize with a single square root. ">GLM_GTX_normalize_dot</a> extension. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaffbc2f2cb15838de8886a68048f9004d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL T glm::normalizeDot </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Normalize parameters and returns the dot product of x and y. </p>
+<p>It's faster that dot(normalize(x), normalize(y)).</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00213.html" title="Dot product of vectors that need to be normalize with a single square root. ">GLM_GTX_normalize_dot</a> extension. </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00214.html b/src/third_party/glm/doc/api/a00214.html
new file mode 100644
index 0000000..4daafef
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00214.html
@@ -0,0 +1,90 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_number_precision</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#typedef-members">Typedefs</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTX_number_precision<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ga145ad477a2a3e152855511c3b52469a6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga145ad477a2a3e152855511c3b52469a6"></a>
+typedef f32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga145ad477a2a3e152855511c3b52469a6">f32mat1</a></td></tr>
+<tr class="separator:ga145ad477a2a3e152855511c3b52469a6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac88c6a4dbfc380aa26e3adbbade36348"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac88c6a4dbfc380aa26e3adbbade36348"></a>
+typedef f32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#gac88c6a4dbfc380aa26e3adbbade36348">f32mat1x1</a></td></tr>
+<tr class="separator:gac88c6a4dbfc380aa26e3adbbade36348"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga07f8d7348eb7ae059a84c118fdfeb943"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga07f8d7348eb7ae059a84c118fdfeb943"></a>
+typedef f32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga07f8d7348eb7ae059a84c118fdfeb943">f32vec1</a></td></tr>
+<tr class="separator:ga07f8d7348eb7ae059a84c118fdfeb943"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga59bfa589419b5265d01314fcecd33435"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga59bfa589419b5265d01314fcecd33435"></a>
+typedef f64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga59bfa589419b5265d01314fcecd33435">f64mat1</a></td></tr>
+<tr class="separator:ga59bfa589419b5265d01314fcecd33435"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga448eeb08d0b7d8c43a8b292c981955fd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga448eeb08d0b7d8c43a8b292c981955fd"></a>
+typedef f64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga448eeb08d0b7d8c43a8b292c981955fd">f64mat1x1</a></td></tr>
+<tr class="separator:ga448eeb08d0b7d8c43a8b292c981955fd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae5987a61b8c03d5c432a9e62f0b3efe1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae5987a61b8c03d5c432a9e62f0b3efe1"></a>
+typedef f64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#gae5987a61b8c03d5c432a9e62f0b3efe1">f64vec1</a></td></tr>
+<tr class="separator:gae5987a61b8c03d5c432a9e62f0b3efe1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga52cc069a92e126c3a8dcde93424d2ef0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga52cc069a92e126c3a8dcde93424d2ef0"></a>
+typedef u16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga52cc069a92e126c3a8dcde93424d2ef0">u16vec1</a></td></tr>
+<tr class="separator:ga52cc069a92e126c3a8dcde93424d2ef0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9bbc1e14aea65cba5e2dcfef6a67d9f3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga9bbc1e14aea65cba5e2dcfef6a67d9f3"></a>
+typedef u32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga9bbc1e14aea65cba5e2dcfef6a67d9f3">u32vec1</a></td></tr>
+<tr class="separator:ga9bbc1e14aea65cba5e2dcfef6a67d9f3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga818de170e2584ab037130f2881925974"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga818de170e2584ab037130f2881925974"></a>
+typedef u64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga818de170e2584ab037130f2881925974">u64vec1</a></td></tr>
+<tr class="separator:ga818de170e2584ab037130f2881925974"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5853fe457f4c8a6bc09343d0e9833980"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga5853fe457f4c8a6bc09343d0e9833980"></a>
+typedef u8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga5853fe457f4c8a6bc09343d0e9833980">u8vec1</a></td></tr>
+<tr class="separator:ga5853fe457f4c8a6bc09343d0e9833980"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Defined size types. </p>
+<p><<a class="el" href="a00077.html" title="GLM_GTX_number_precision ">glm/gtx/number_precision.hpp</a>> need to be included to use these functionalities. </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00215.html b/src/third_party/glm/doc/api/a00215.html
new file mode 100644
index 0000000..bb2c446
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00215.html
@@ -0,0 +1,127 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_optimum_pow</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTX_optimum_pow<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga19aaff3213bf23bdec3ef124ace237e9"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga19aaff3213bf23bdec3ef124ace237e9"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00215.html#ga19aaff3213bf23bdec3ef124ace237e9">pow2</a> (genType const &x)</td></tr>
+<tr class="separator:ga19aaff3213bf23bdec3ef124ace237e9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga35689d03cd434d6ea819f1942d3bf82e"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga35689d03cd434d6ea819f1942d3bf82e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00215.html#ga35689d03cd434d6ea819f1942d3bf82e">pow3</a> (genType const &x)</td></tr>
+<tr class="separator:ga35689d03cd434d6ea819f1942d3bf82e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gacef0968763026e180e53e735007dbf5a"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gacef0968763026e180e53e735007dbf5a"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00215.html#gacef0968763026e180e53e735007dbf5a">pow4</a> (genType const &x)</td></tr>
+<tr class="separator:gacef0968763026e180e53e735007dbf5a"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Integer exponentiation of power functions. </p>
+<p><<a class="el" href="a00078.html" title="GLM_GTX_optimum_pow ">glm/gtx/optimum_pow.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga19aaff3213bf23bdec3ef124ace237e9"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::gtx::pow2 </td>
+ <td>(</td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns x raised to the power of 2. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00215.html" title="Integer exponentiation of power functions. ">GLM_GTX_optimum_pow</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga35689d03cd434d6ea819f1942d3bf82e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::gtx::pow3 </td>
+ <td>(</td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns x raised to the power of 3. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00215.html" title="Integer exponentiation of power functions. ">GLM_GTX_optimum_pow</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gacef0968763026e180e53e735007dbf5a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::gtx::pow4 </td>
+ <td>(</td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns x raised to the power of 4. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00215.html" title="Integer exponentiation of power functions. ">GLM_GTX_optimum_pow</a> </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00216.html b/src/third_party/glm/doc/api/a00216.html
new file mode 100644
index 0000000..2d6e7df
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00216.html
@@ -0,0 +1,115 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_orthonormalize</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTX_orthonormalize<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga23c4340b8f1559d259229b6d8bdc3f97"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga23c4340b8f1559d259229b6d8bdc3f97"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat3x3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00216.html#ga23c4340b8f1559d259229b6d8bdc3f97">orthonormalize</a> (tmat3x3< T, P > const &m)</td></tr>
+<tr class="separator:ga23c4340b8f1559d259229b6d8bdc3f97"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad7afff30d7323fdc7aed7f5a16a0c596"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gad7afff30d7323fdc7aed7f5a16a0c596"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00216.html#gad7afff30d7323fdc7aed7f5a16a0c596">orthonormalize</a> (tvec3< T, P > const &x, tvec3< T, P > const &y)</td></tr>
+<tr class="separator:gad7afff30d7323fdc7aed7f5a16a0c596"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Orthonormalize matrices. </p>
+<p><<a class="el" href="a00079.html" title="GLM_GTX_orthonormalize ">glm/gtx/orthonormalize.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga23c4340b8f1559d259229b6d8bdc3f97"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat3x3<T, P> glm::orthonormalize </td>
+ <td>(</td>
+ <td class="paramtype">tmat3x3< T, P > const & </td>
+ <td class="paramname"><em>m</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the orthonormalized matrix of m. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00216.html" title="Orthonormalize matrices. ">GLM_GTX_orthonormalize</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gad7afff30d7323fdc7aed7f5a16a0c596"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tvec3<T, P> glm::orthonormalize </td>
+ <td>(</td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Orthonormalizes x according y. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00216.html" title="Orthonormalize matrices. ">GLM_GTX_orthonormalize</a> </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00217.html b/src/third_party/glm/doc/api/a00217.html
new file mode 100644
index 0000000..7463965
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00217.html
@@ -0,0 +1,93 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_perpendicular</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTX_perpendicular<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga41f8c73da9798a18e6b1e32f1e301f07"><td class="memTemplParams" colspan="2">template<typename vecType > </td></tr>
+<tr class="memitem:ga41f8c73da9798a18e6b1e32f1e301f07"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00217.html#ga41f8c73da9798a18e6b1e32f1e301f07">perp</a> (vecType const &x, vecType const &Normal)</td></tr>
+<tr class="separator:ga41f8c73da9798a18e6b1e32f1e301f07"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Perpendicular of a vector from other one. </p>
+<p><<a class="el" href="a00083.html" title="GLM_GTX_perpendicular ">glm/gtx/perpendicular.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga41f8c73da9798a18e6b1e32f1e301f07"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType glm::perp </td>
+ <td>(</td>
+ <td class="paramtype">vecType const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType const & </td>
+ <td class="paramname"><em>Normal</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Projects x a perpendicular axis of Normal. </p>
+<p>From GLM_GTX_perpendicular extension. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00218.html b/src/third_party/glm/doc/api/a00218.html
new file mode 100644
index 0000000..e333b1e
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00218.html
@@ -0,0 +1,105 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_polar_coordinates</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTX_polar_coordinates<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga45ece1fbf7260c43e0f873c498202581"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga45ece1fbf7260c43e0f873c498202581"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00218.html#ga45ece1fbf7260c43e0f873c498202581">euclidean</a> (tvec2< T, P > const &polar)</td></tr>
+<tr class="separator:ga45ece1fbf7260c43e0f873c498202581"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafcf95a38c780a4ad5ba14c8ac9e522bb"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gafcf95a38c780a4ad5ba14c8ac9e522bb"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00218.html#gafcf95a38c780a4ad5ba14c8ac9e522bb">polar</a> (tvec3< T, P > const &euclidean)</td></tr>
+<tr class="separator:gafcf95a38c780a4ad5ba14c8ac9e522bb"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Conversion from Euclidean space to polar space and revert. </p>
+<p><<a class="el" href="a00084.html" title="GLM_GTX_polar_coordinates ">glm/gtx/polar_coordinates.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga45ece1fbf7260c43e0f873c498202581"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tvec3<T, P> glm::euclidean </td>
+ <td>(</td>
+ <td class="paramtype">tvec2< T, P > const & </td>
+ <td class="paramname"><em>polar</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Convert Polar to Euclidean coordinates. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00218.html" title="Conversion from Euclidean space to polar space and revert. ">GLM_GTX_polar_coordinates</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gafcf95a38c780a4ad5ba14c8ac9e522bb"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tvec3<T, P> glm::polar </td>
+ <td>(</td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>euclidean</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Convert Euclidean to Polar coordinates, x is the xz distance, y, the latitude and z the longitude. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00218.html" title="Conversion from Euclidean space to polar space and revert. ">GLM_GTX_polar_coordinates</a> </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00219.html b/src/third_party/glm/doc/api/a00219.html
new file mode 100644
index 0000000..6096040
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00219.html
@@ -0,0 +1,93 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_projection</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTX_projection<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gadf29123bcf748fc9d6fb0998192184cf"><td class="memTemplParams" colspan="2">template<typename vecType > </td></tr>
+<tr class="memitem:gadf29123bcf748fc9d6fb0998192184cf"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00219.html#gadf29123bcf748fc9d6fb0998192184cf">proj</a> (vecType const &x, vecType const &Normal)</td></tr>
+<tr class="separator:gadf29123bcf748fc9d6fb0998192184cf"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Projection of a vector to other one. </p>
+<p><<a class="el" href="a00086.html" title="GLM_GTX_projection ">glm/gtx/projection.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="gadf29123bcf748fc9d6fb0998192184cf"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType glm::proj </td>
+ <td>(</td>
+ <td class="paramtype">vecType const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType const & </td>
+ <td class="paramname"><em>Normal</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Projects x on Normal. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00219.html" title="Projection of a vector to other one. ">GLM_GTX_projection</a> </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00220.html b/src/third_party/glm/doc/api/a00220.html
new file mode 100644
index 0000000..4c01172
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00220.html
@@ -0,0 +1,613 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_quaternion</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTX_quaternion<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga33ecf8ba903eee5fc09f0fbfc0d5ca6b"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga33ecf8ba903eee5fc09f0fbfc0d5ca6b"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00220.html#ga33ecf8ba903eee5fc09f0fbfc0d5ca6b">cross</a> (tquat< T, P > const &q, tvec3< T, P > const &v)</td></tr>
+<tr class="separator:ga33ecf8ba903eee5fc09f0fbfc0d5ca6b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4bfe3c7770fc43d14b8ef0058c4a86b5"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga4bfe3c7770fc43d14b8ef0058c4a86b5"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00220.html#ga4bfe3c7770fc43d14b8ef0058c4a86b5">cross</a> (tvec3< T, P > const &v, tquat< T, P > const &q)</td></tr>
+<tr class="separator:ga4bfe3c7770fc43d14b8ef0058c4a86b5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga17295173d4c2b5ae49b84e9993b63a62"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga17295173d4c2b5ae49b84e9993b63a62"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00220.html#ga17295173d4c2b5ae49b84e9993b63a62">exp</a> (tquat< T, P > const &q)</td></tr>
+<tr class="separator:ga17295173d4c2b5ae49b84e9993b63a62"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga90de879d97487ec804522dd418e5d8a0"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga90de879d97487ec804522dd418e5d8a0"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00220.html#ga90de879d97487ec804522dd418e5d8a0">extractRealComponent</a> (tquat< T, P > const &q)</td></tr>
+<tr class="separator:ga90de879d97487ec804522dd418e5d8a0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac11bf550f17d1da14423595a27575084"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gac11bf550f17d1da14423595a27575084"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00220.html#gac11bf550f17d1da14423595a27575084">fastMix</a> (tquat< T, P > const &x, tquat< T, P > const &y, T const &a)</td></tr>
+<tr class="separator:gac11bf550f17d1da14423595a27575084"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga56abae85b3669c866e91f3c57b298b9c"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga56abae85b3669c866e91f3c57b298b9c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00220.html#ga56abae85b3669c866e91f3c57b298b9c">intermediate</a> (tquat< T, P > const &prev, tquat< T, P > const &curr, tquat< T, P > const &next)</td></tr>
+<tr class="separator:ga56abae85b3669c866e91f3c57b298b9c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga02b45352c7ac345cabc9e877314acda6"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga02b45352c7ac345cabc9e877314acda6"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00220.html#ga02b45352c7ac345cabc9e877314acda6">length2</a> (tquat< T, P > const &q)</td></tr>
+<tr class="separator:ga02b45352c7ac345cabc9e877314acda6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga791f42e134bfe97fc9c96f4668dd7489"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga791f42e134bfe97fc9c96f4668dd7489"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00220.html#ga791f42e134bfe97fc9c96f4668dd7489">log</a> (tquat< T, P > const &q)</td></tr>
+<tr class="separator:ga791f42e134bfe97fc9c96f4668dd7489"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga42a0cf206c59eaeff4c67dd62e09a580"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga42a0cf206c59eaeff4c67dd62e09a580"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00220.html#ga42a0cf206c59eaeff4c67dd62e09a580">pow</a> (tquat< T, P > const &x, T const &y)</td></tr>
+<tr class="separator:ga42a0cf206c59eaeff4c67dd62e09a580"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9f39f0d3ecd66839a4af44560aa10fb2"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga9f39f0d3ecd66839a4af44560aa10fb2"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00220.html#ga9f39f0d3ecd66839a4af44560aa10fb2">rotate</a> (tquat< T, P > const &q, tvec3< T, P > const &v)</td></tr>
+<tr class="separator:ga9f39f0d3ecd66839a4af44560aa10fb2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga96575f8868b3f2aa3e13cab9b94ccbd3"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga96575f8868b3f2aa3e13cab9b94ccbd3"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00220.html#ga96575f8868b3f2aa3e13cab9b94ccbd3">rotate</a> (tquat< T, P > const &q, tvec4< T, P > const &v)</td></tr>
+<tr class="separator:ga96575f8868b3f2aa3e13cab9b94ccbd3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac4856d356c5c97cec74e9b672ea89240"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gac4856d356c5c97cec74e9b672ea89240"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00220.html#gac4856d356c5c97cec74e9b672ea89240">rotation</a> (tvec3< T, P > const &orig, tvec3< T, P > const &dest)</td></tr>
+<tr class="separator:gac4856d356c5c97cec74e9b672ea89240"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3534443de2a1a806f386976546cddc81"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga3534443de2a1a806f386976546cddc81"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00220.html#ga3534443de2a1a806f386976546cddc81">shortMix</a> (tquat< T, P > const &x, tquat< T, P > const &y, T const &a)</td></tr>
+<tr class="separator:ga3534443de2a1a806f386976546cddc81"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae75f537becdf2b1381b4482ec96e6c82"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gae75f537becdf2b1381b4482ec96e6c82"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00220.html#gae75f537becdf2b1381b4482ec96e6c82">squad</a> (tquat< T, P > const &q1, tquat< T, P > const &q2, tquat< T, P > const &s1, tquat< T, P > const &s2, T const &h)</td></tr>
+<tr class="separator:gae75f537becdf2b1381b4482ec96e6c82"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga01935b66ba245c2fd7dee5427d86ce9b"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga01935b66ba245c2fd7dee5427d86ce9b"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat3x3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00220.html#ga01935b66ba245c2fd7dee5427d86ce9b">toMat3</a> (tquat< T, P > const &x)</td></tr>
+<tr class="separator:ga01935b66ba245c2fd7dee5427d86ce9b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaedc9fba6485eade37cc26c16df9d7aad"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gaedc9fba6485eade37cc26c16df9d7aad"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00220.html#gaedc9fba6485eade37cc26c16df9d7aad">toMat4</a> (tquat< T, P > const &x)</td></tr>
+<tr class="separator:gaedc9fba6485eade37cc26c16df9d7aad"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac9e3109ca60b644ce508d6b71a1697bc"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gac9e3109ca60b644ce508d6b71a1697bc"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00220.html#gac9e3109ca60b644ce508d6b71a1697bc">toQuat</a> (tmat3x3< T, P > const &x)</td></tr>
+<tr class="separator:gac9e3109ca60b644ce508d6b71a1697bc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga808dd0f83ee8150db7e652313bde8eb2"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga808dd0f83ee8150db7e652313bde8eb2"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00220.html#ga808dd0f83ee8150db7e652313bde8eb2">toQuat</a> (tmat4x4< T, P > const &x)</td></tr>
+<tr class="separator:ga808dd0f83ee8150db7e652313bde8eb2"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Extented quaternion types and functions. </p>
+<p><<a class="el" href="a00088.html" title="GLM_GTX_quaternion ">glm/gtx/quaternion.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga33ecf8ba903eee5fc09f0fbfc0d5ca6b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tvec3<T, P> glm::cross </td>
+ <td>(</td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>q</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>v</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Compute a cross product between a quaternion and a vector. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00220.html" title="Extented quaternion types and functions. ">GLM_GTX_quaternion</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga4bfe3c7770fc43d14b8ef0058c4a86b5"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tvec3<T, P> glm::cross </td>
+ <td>(</td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>v</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>q</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Compute a cross product between a vector and a quaternion. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00220.html" title="Extented quaternion types and functions. ">GLM_GTX_quaternion</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga17295173d4c2b5ae49b84e9993b63a62"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tquat<T, P> glm::exp </td>
+ <td>(</td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>q</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns a exp of a quaternion. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00220.html" title="Extented quaternion types and functions. ">GLM_GTX_quaternion</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga90de879d97487ec804522dd418e5d8a0"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL T glm::extractRealComponent </td>
+ <td>(</td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>q</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Extract the real component of a quaternion. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00220.html" title="Extented quaternion types and functions. ">GLM_GTX_quaternion</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gac11bf550f17d1da14423595a27575084"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tquat<T, P> glm::fastMix </td>
+ <td>(</td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>a</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Quaternion normalized linear interpolation. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00220.html" title="Extented quaternion types and functions. ">GLM_GTX_quaternion</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga56abae85b3669c866e91f3c57b298b9c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tquat<T, P> glm::intermediate </td>
+ <td>(</td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>prev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>curr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>next</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns an intermediate control point for squad interpolation. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00220.html" title="Extented quaternion types and functions. ">GLM_GTX_quaternion</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga02b45352c7ac345cabc9e877314acda6"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL T glm::length2 </td>
+ <td>(</td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>q</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the squared length of x. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00220.html" title="Extented quaternion types and functions. ">GLM_GTX_quaternion</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga791f42e134bfe97fc9c96f4668dd7489"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tquat<T, P> glm::log </td>
+ <td>(</td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>q</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns a log of a quaternion. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00220.html" title="Extented quaternion types and functions. ">GLM_GTX_quaternion</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga42a0cf206c59eaeff4c67dd62e09a580"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tquat<T, P> glm::pow </td>
+ <td>(</td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns x raised to the y power. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00220.html" title="Extented quaternion types and functions. ">GLM_GTX_quaternion</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga9f39f0d3ecd66839a4af44560aa10fb2"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tvec3<T, P> glm::rotate </td>
+ <td>(</td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>q</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>v</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns quarternion square root. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00220.html" title="Extented quaternion types and functions. ">GLM_GTX_quaternion</a> Rotates a 3 components vector by a quaternion.</dd>
+<dd>
+<a class="el" href="a00220.html" title="Extented quaternion types and functions. ">GLM_GTX_quaternion</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga96575f8868b3f2aa3e13cab9b94ccbd3"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tvec4<T, P> glm::rotate </td>
+ <td>(</td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>q</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec4< T, P > const & </td>
+ <td class="paramname"><em>v</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Rotates a 4 components vector by a quaternion. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00220.html" title="Extented quaternion types and functions. ">GLM_GTX_quaternion</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gac4856d356c5c97cec74e9b672ea89240"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tquat<T, P> glm::rotation </td>
+ <td>(</td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>orig</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>dest</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Compute the rotation between two vectors. </p>
+<p>param orig vector, needs to be normalized param dest vector, needs to be normalized</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00220.html" title="Extented quaternion types and functions. ">GLM_GTX_quaternion</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga3534443de2a1a806f386976546cddc81"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tquat<T, P> glm::shortMix </td>
+ <td>(</td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>a</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Quaternion interpolation using the rotation short path. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00220.html" title="Extented quaternion types and functions. ">GLM_GTX_quaternion</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gae75f537becdf2b1381b4482ec96e6c82"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tquat<T, P> glm::squad </td>
+ <td>(</td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>q1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>q2</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>s1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>s2</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>h</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Compute a point on a path according squad equation. </p>
+<p>q1 and q2 are control points; s1 and s2 are intermediate control points.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00220.html" title="Extented quaternion types and functions. ">GLM_GTX_quaternion</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga01935b66ba245c2fd7dee5427d86ce9b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat3x3<T, P> glm::toMat3 </td>
+ <td>(</td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Converts a quaternion to a 3 * 3 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00220.html" title="Extented quaternion types and functions. ">GLM_GTX_quaternion</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00088_source.html#l00124">124</a> of file <a class="el" href="a00088_source.html">gtx/quaternion.hpp</a>.</p>
+
+<p>References <a class="el" href="a00172.html#gae04c39422eb4e450ec8c4f45a1057b40">glm::mat3_cast()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaedc9fba6485eade37cc26c16df9d7aad"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, P> glm::toMat4 </td>
+ <td>(</td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Converts a quaternion to a 4 * 4 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00220.html" title="Extented quaternion types and functions. ">GLM_GTX_quaternion</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00088_source.html#l00131">131</a> of file <a class="el" href="a00088_source.html">gtx/quaternion.hpp</a>.</p>
+
+<p>References <a class="el" href="a00172.html#ga14bb2ddf028c91542763eb6f2bba47ef">glm::mat4_cast()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gac9e3109ca60b644ce508d6b71a1697bc"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tquat<T, P> glm::toQuat </td>
+ <td>(</td>
+ <td class="paramtype">tmat3x3< T, P > const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Converts a 3 * 3 matrix to a quaternion. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00220.html" title="Extented quaternion types and functions. ">GLM_GTX_quaternion</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00088_source.html#l00138">138</a> of file <a class="el" href="a00088_source.html">gtx/quaternion.hpp</a>.</p>
+
+<p>References <a class="el" href="a00172.html#ga950f8acff3e33bbda77895a3dcb7e5ce">glm::quat_cast()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga808dd0f83ee8150db7e652313bde8eb2"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tquat<T, P> glm::toQuat </td>
+ <td>(</td>
+ <td class="paramtype">tmat4x4< T, P > const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Converts a 4 * 4 matrix to a quaternion. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00220.html" title="Extented quaternion types and functions. ">GLM_GTX_quaternion</a> </dd></dl>
+
+<p>Definition at line <a class="el" href="a00088_source.html#l00145">145</a> of file <a class="el" href="a00088_source.html">gtx/quaternion.hpp</a>.</p>
+
+<p>References <a class="el" href="a00172.html#ga950f8acff3e33bbda77895a3dcb7e5ce">glm::quat_cast()</a>.</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00221.html b/src/third_party/glm/doc/api/a00221.html
new file mode 100644
index 0000000..6234d05
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00221.html
@@ -0,0 +1,55 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_range</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">GLM_GTX_range<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Defines begin and end for vectors and matrices. </p>
+<p>Useful for range-based for loop. The range is defined over the elements, not over columns or rows (e.g. mat4 has 16 elements).</p>
+<p><<a class="el" href="a00090.html" title="GLM_GTX_range ">glm/gtx/range.hpp</a>> need to be included to use these functionalities. </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00222.html b/src/third_party/glm/doc/api/a00222.html
new file mode 100644
index 0000000..91a45a6
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00222.html
@@ -0,0 +1,137 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_raw_data</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#typedef-members">Typedefs</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTX_raw_data<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ga3005cb0d839d546c616becfa6602c607"><td class="memItemLeft" align="right" valign="top">typedef detail::uint8 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00222.html#ga3005cb0d839d546c616becfa6602c607">byte</a></td></tr>
+<tr class="separator:ga3005cb0d839d546c616becfa6602c607"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga86e46fff9f80ae33893d8d697f2ca98a"><td class="memItemLeft" align="right" valign="top">typedef detail::uint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00222.html#ga86e46fff9f80ae33893d8d697f2ca98a">dword</a></td></tr>
+<tr class="separator:ga86e46fff9f80ae33893d8d697f2ca98a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4021754ffb8e5ef14c75802b15657714"><td class="memItemLeft" align="right" valign="top">typedef detail::uint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00222.html#ga4021754ffb8e5ef14c75802b15657714">qword</a></td></tr>
+<tr class="separator:ga4021754ffb8e5ef14c75802b15657714"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga16e9fea0ef1e6c4ef472d3d1731c49a5"><td class="memItemLeft" align="right" valign="top">typedef detail::uint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00222.html#ga16e9fea0ef1e6c4ef472d3d1731c49a5">word</a></td></tr>
+<tr class="separator:ga16e9fea0ef1e6c4ef472d3d1731c49a5"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Projection of a vector to other one. </p>
+<p><<a class="el" href="a00091.html" title="GLM_GTX_raw_data ">glm/gtx/raw_data.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a class="anchor" id="ga3005cb0d839d546c616becfa6602c607"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint8 byte</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Type for byte numbers. </p>
+<p>From GLM_GTX_raw_data extension. </p>
+
+<p>Definition at line <a class="el" href="a00091_source.html#l00030">30</a> of file <a class="el" href="a00091_source.html">raw_data.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga86e46fff9f80ae33893d8d697f2ca98a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint32 dword</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Type for dword numbers. </p>
+<p>From GLM_GTX_raw_data extension. </p>
+
+<p>Definition at line <a class="el" href="a00091_source.html#l00038">38</a> of file <a class="el" href="a00091_source.html">raw_data.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga4021754ffb8e5ef14c75802b15657714"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint64 qword</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Type for qword numbers. </p>
+<p>From GLM_GTX_raw_data extension. </p>
+
+<p>Definition at line <a class="el" href="a00091_source.html#l00042">42</a> of file <a class="el" href="a00091_source.html">raw_data.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga16e9fea0ef1e6c4ef472d3d1731c49a5"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef detail::uint16 word</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Type for word numbers. </p>
+<p>From GLM_GTX_raw_data extension. </p>
+
+<p>Definition at line <a class="el" href="a00091_source.html#l00034">34</a> of file <a class="el" href="a00091_source.html">raw_data.hpp</a>.</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00223.html b/src/third_party/glm/doc/api/a00223.html
new file mode 100644
index 0000000..df53e17
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00223.html
@@ -0,0 +1,165 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_rotate_normalized_axis</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTX_rotate_normalized_axis<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gaada623964a895def5a8b77b5b7887dc4"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gaada623964a895def5a8b77b5b7887dc4"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00223.html#gaada623964a895def5a8b77b5b7887dc4">rotateNormalizedAxis</a> (tmat4x4< T, P > const &m, T const &angle, tvec3< T, P > const &axis)</td></tr>
+<tr class="separator:gaada623964a895def5a8b77b5b7887dc4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6c00234d844faef36a6a94669fbd1639"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga6c00234d844faef36a6a94669fbd1639"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tquat< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00223.html#ga6c00234d844faef36a6a94669fbd1639">rotateNormalizedAxis</a> (tquat< T, P > const &q, T const &angle, tvec3< T, P > const &axis)</td></tr>
+<tr class="separator:ga6c00234d844faef36a6a94669fbd1639"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Quaternions and matrices rotations around normalized axis. </p>
+<p><<a class="el" href="a00093.html" title="GLM_GTX_rotate_normalized_axis ">glm/gtx/rotate_normalized_axis.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="gaada623964a895def5a8b77b5b7887dc4"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, P> glm::rotateNormalizedAxis </td>
+ <td>(</td>
+ <td class="paramtype">tmat4x4< T, P > const & </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>angle</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>axis</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Builds a rotation 4 * 4 matrix created from a normalized axis and an angle. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">m</td><td>Input matrix multiplied by this rotation matrix. </td></tr>
+ <tr><td class="paramname">angle</td><td>Rotation angle expressed in radians if GLM_FORCE_RADIANS is define or degrees otherwise. </td></tr>
+ <tr><td class="paramname">axis</td><td>Rotation axis, must be normalized. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+ <table class="tparams">
+ <tr><td class="paramname">T</td><td>Value type used to build the matrix. Currently supported: half (not recommanded), float or double.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00223.html" title="Quaternions and matrices rotations around normalized axis. ">GLM_GTX_rotate_normalized_axis</a> </dd>
+<dd>
+- rotate(T angle, T x, T y, T z) </dd>
+<dd>
+- rotate(tmat4x4<T, P> const & m, T angle, T x, T y, T z) </dd>
+<dd>
+- rotate(T angle, tvec3<T, P> const & v) </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga6c00234d844faef36a6a94669fbd1639"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tquat<T, P> glm::rotateNormalizedAxis </td>
+ <td>(</td>
+ <td class="paramtype">tquat< T, P > const & </td>
+ <td class="paramname"><em>q</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>angle</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>axis</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Rotates a quaternion from a vector of 3 components normalized axis and an angle. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">q</td><td>Source orientation </td></tr>
+ <tr><td class="paramname">angle</td><td>Angle expressed in radians if GLM_FORCE_RADIANS is define or degrees otherwise. </td></tr>
+ <tr><td class="paramname">axis</td><td>Normalized axis of the rotation, must be normalized.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00223.html" title="Quaternions and matrices rotations around normalized axis. ">GLM_GTX_rotate_normalized_axis</a> </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00224.html b/src/third_party/glm/doc/api/a00224.html
new file mode 100644
index 0000000..7c902cc
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00224.html
@@ -0,0 +1,439 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_rotate_vector</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTX_rotate_vector<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga49b4d082305cdfcfe0a5c184f684a902"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga49b4d082305cdfcfe0a5c184f684a902"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00224.html#ga49b4d082305cdfcfe0a5c184f684a902">orientation</a> (tvec3< T, P > const &Normal, tvec3< T, P > const &Up)</td></tr>
+<tr class="separator:ga49b4d082305cdfcfe0a5c184f684a902"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9bff444fb191e2e089a906b899cd033d"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga9bff444fb191e2e089a906b899cd033d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec2< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00224.html#ga9bff444fb191e2e089a906b899cd033d">rotate</a> (tvec2< T, P > const &v, T const &angle)</td></tr>
+<tr class="separator:ga9bff444fb191e2e089a906b899cd033d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga526b6f8995bc0946aa1a04e9297de7c6"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga526b6f8995bc0946aa1a04e9297de7c6"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00224.html#ga526b6f8995bc0946aa1a04e9297de7c6">rotate</a> (tvec3< T, P > const &v, T const &angle, tvec3< T, P > const &normal)</td></tr>
+<tr class="separator:ga526b6f8995bc0946aa1a04e9297de7c6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf4d59dd2f668f9ffb38048055d1316bd"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gaf4d59dd2f668f9ffb38048055d1316bd"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00224.html#gaf4d59dd2f668f9ffb38048055d1316bd">rotate</a> (tvec4< T, P > const &v, T const &angle, tvec3< T, P > const &normal)</td></tr>
+<tr class="separator:gaf4d59dd2f668f9ffb38048055d1316bd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0c2dc9f8507bffcbb957db9818b18508"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga0c2dc9f8507bffcbb957db9818b18508"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00224.html#ga0c2dc9f8507bffcbb957db9818b18508">rotateX</a> (tvec3< T, P > const &v, T const &angle)</td></tr>
+<tr class="separator:ga0c2dc9f8507bffcbb957db9818b18508"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gadab312d430a564741ae02215255027a0"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gadab312d430a564741ae02215255027a0"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00224.html#gadab312d430a564741ae02215255027a0">rotateX</a> (tvec4< T, P > const &v, T const &angle)</td></tr>
+<tr class="separator:gadab312d430a564741ae02215255027a0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gabb5d19eba5befeebcb35a0aad4a114e3"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gabb5d19eba5befeebcb35a0aad4a114e3"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00224.html#gabb5d19eba5befeebcb35a0aad4a114e3">rotateY</a> (tvec3< T, P > const &v, T const &angle)</td></tr>
+<tr class="separator:gabb5d19eba5befeebcb35a0aad4a114e3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae2507577c4bffa3548b32852791dd90c"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gae2507577c4bffa3548b32852791dd90c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00224.html#gae2507577c4bffa3548b32852791dd90c">rotateY</a> (tvec4< T, P > const &v, T const &angle)</td></tr>
+<tr class="separator:gae2507577c4bffa3548b32852791dd90c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae30ac01b89d4f16a972fee696c964908"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gae30ac01b89d4f16a972fee696c964908"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00224.html#gae30ac01b89d4f16a972fee696c964908">rotateZ</a> (tvec3< T, P > const &v, T const &angle)</td></tr>
+<tr class="separator:gae30ac01b89d4f16a972fee696c964908"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga034e5d197ab4bd8685624bc2cf16e586"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga034e5d197ab4bd8685624bc2cf16e586"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00224.html#ga034e5d197ab4bd8685624bc2cf16e586">rotateZ</a> (tvec4< T, P > const &v, T const &angle)</td></tr>
+<tr class="separator:ga034e5d197ab4bd8685624bc2cf16e586"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafc9ab3101c3f3799f3d5d6d9d3baac09"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gafc9ab3101c3f3799f3d5d6d9d3baac09"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00224.html#gafc9ab3101c3f3799f3d5d6d9d3baac09">slerp</a> (tvec3< T, P > const &x, tvec3< T, P > const &y, T const &a)</td></tr>
+<tr class="separator:gafc9ab3101c3f3799f3d5d6d9d3baac09"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Function to directly rotate a vector. </p>
+<p><<a class="el" href="a00094.html" title="GLM_GTX_rotate_vector ">glm/gtx/rotate_vector.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga49b4d082305cdfcfe0a5c184f684a902"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, P> glm::orientation </td>
+ <td>(</td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>Normal</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>Up</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a rotation matrix from a normal and a up vector. </p>
+<p>From GLM_GTX_rotate_vector extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga9bff444fb191e2e089a906b899cd033d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tvec2<T, P> glm::rotate </td>
+ <td>(</td>
+ <td class="paramtype">tvec2< T, P > const & </td>
+ <td class="paramname"><em>v</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>angle</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Rotate a two dimensional vector. </p>
+<p>From GLM_GTX_rotate_vector extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga526b6f8995bc0946aa1a04e9297de7c6"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tvec3<T, P> glm::rotate </td>
+ <td>(</td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>v</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>angle</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>normal</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Rotate a three dimensional vector around an axis. </p>
+<p>From GLM_GTX_rotate_vector extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="gaf4d59dd2f668f9ffb38048055d1316bd"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tvec4<T, P> glm::rotate </td>
+ <td>(</td>
+ <td class="paramtype">tvec4< T, P > const & </td>
+ <td class="paramname"><em>v</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>angle</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>normal</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Rotate a four dimensional vector around an axis. </p>
+<p>From GLM_GTX_rotate_vector extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga0c2dc9f8507bffcbb957db9818b18508"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tvec3<T, P> glm::rotateX </td>
+ <td>(</td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>v</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>angle</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Rotate a three dimensional vector around the X axis. </p>
+<p>From GLM_GTX_rotate_vector extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="gadab312d430a564741ae02215255027a0"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tvec4<T, P> glm::rotateX </td>
+ <td>(</td>
+ <td class="paramtype">tvec4< T, P > const & </td>
+ <td class="paramname"><em>v</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>angle</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Rotate a four dimentionnals vector around the X axis. </p>
+<p>From GLM_GTX_rotate_vector extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="gabb5d19eba5befeebcb35a0aad4a114e3"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tvec3<T, P> glm::rotateY </td>
+ <td>(</td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>v</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>angle</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Rotate a three dimensional vector around the Y axis. </p>
+<p>From GLM_GTX_rotate_vector extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="gae2507577c4bffa3548b32852791dd90c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tvec4<T, P> glm::rotateY </td>
+ <td>(</td>
+ <td class="paramtype">tvec4< T, P > const & </td>
+ <td class="paramname"><em>v</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>angle</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Rotate a four dimensional vector around the X axis. </p>
+<p>From GLM_GTX_rotate_vector extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="gae30ac01b89d4f16a972fee696c964908"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tvec3<T, P> glm::rotateZ </td>
+ <td>(</td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>v</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>angle</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Rotate a three dimensional vector around the Z axis. </p>
+<p>From GLM_GTX_rotate_vector extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga034e5d197ab4bd8685624bc2cf16e586"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tvec4<T, P> glm::rotateZ </td>
+ <td>(</td>
+ <td class="paramtype">tvec4< T, P > const & </td>
+ <td class="paramname"><em>v</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>angle</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Rotate a four dimensional vector around the X axis. </p>
+<p>From GLM_GTX_rotate_vector extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="gafc9ab3101c3f3799f3d5d6d9d3baac09"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tvec3<T, P> glm::slerp </td>
+ <td>(</td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>a</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns Spherical interpolation between two vectors. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">x</td><td>A first vector </td></tr>
+ <tr><td class="paramname">y</td><td>A second vector </td></tr>
+ <tr><td class="paramname">a</td><td>Interpolation factor. The interpolation is defined beyond the range [0, 1].</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00224.html" title="Function to directly rotate a vector. ">GLM_GTX_rotate_vector</a> </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00225.html b/src/third_party/glm/doc/api/a00225.html
new file mode 100644
index 0000000..13dc0e1
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00225.html
@@ -0,0 +1,53 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_scalar_relational</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">GLM_GTX_scalar_relational<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<p>Extend a position from a source to a position at a defined length. </p>
+<p><<a class="el" href="a00097.html" title="GLM_GTX_scalar_relational ">glm/gtx/scalar_relational.hpp</a>> need to be included to use these functionalities. </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00226.html b/src/third_party/glm/doc/api/a00226.html
new file mode 100644
index 0000000..ca6548e
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00226.html
@@ -0,0 +1,53 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_simd_mat4</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">GLM_GTX_simd_mat4<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<p>SIMD implementation of mat4 type. </p>
+<p><<a class="el" href="a00099.html" title="GLM_GTX_simd_mat4 ">glm/gtx/simd_mat4.hpp</a>> need to be included to use these functionalities. </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00227.html b/src/third_party/glm/doc/api/a00227.html
new file mode 100644
index 0000000..0b3eb18
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00227.html
@@ -0,0 +1,53 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_simd_quat</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">GLM_GTX_simd_quat<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<p>SIMD implementation of quat type. </p>
+<p><<a class="el" href="a00100.html" title="GLM_GTX_simd_quat ">glm/gtx/simd_quat.hpp</a>> need to be included to use these functionalities. </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00228.html b/src/third_party/glm/doc/api/a00228.html
new file mode 100644
index 0000000..f46f99c
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00228.html
@@ -0,0 +1,53 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_simd_vec4</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">GLM_GTX_simd_vec4<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<p>SIMD implementation of vec4 type. </p>
+<p><<a class="el" href="a00101.html" title="GLM_GTX_simd_vec4 ">glm/gtx/simd_vec4.hpp</a>> need to be included to use these functionalities. </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00229.html b/src/third_party/glm/doc/api/a00229.html
new file mode 100644
index 0000000..e8f3dad
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00229.html
@@ -0,0 +1,211 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_spline</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTX_spline<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga8119c04f8210fd0d292757565cd6918d"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga8119c04f8210fd0d292757565cd6918d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00229.html#ga8119c04f8210fd0d292757565cd6918d">catmullRom</a> (genType const &v1, genType const &v2, genType const &v3, genType const &v4, typename genType::value_type const &s)</td></tr>
+<tr class="separator:ga8119c04f8210fd0d292757565cd6918d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6b867eb52e2fc933d2e0bf26aabc9a70"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga6b867eb52e2fc933d2e0bf26aabc9a70"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00229.html#ga6b867eb52e2fc933d2e0bf26aabc9a70">cubic</a> (genType const &v1, genType const &v2, genType const &v3, genType const &v4, typename genType::value_type const &s)</td></tr>
+<tr class="separator:ga6b867eb52e2fc933d2e0bf26aabc9a70"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa69e143f6374d32f934a8edeaa50bac9"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gaa69e143f6374d32f934a8edeaa50bac9"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00229.html#gaa69e143f6374d32f934a8edeaa50bac9">hermite</a> (genType const &v1, genType const &t1, genType const &v2, genType const &t2, typename genType::value_type const &s)</td></tr>
+<tr class="separator:gaa69e143f6374d32f934a8edeaa50bac9"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Spline functions. </p>
+<p><<a class="el" href="a00102.html" title="GLM_GTX_spline ">glm/gtx/spline.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga8119c04f8210fd0d292757565cd6918d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::catmullRom </td>
+ <td>(</td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>v1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>v2</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>v3</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>v4</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">typename genType::value_type const & </td>
+ <td class="paramname"><em>s</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return a point from a catmull rom curve. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00229.html" title="Spline functions. ">GLM_GTX_spline</a> extension. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga6b867eb52e2fc933d2e0bf26aabc9a70"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::cubic </td>
+ <td>(</td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>v1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>v2</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>v3</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>v4</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">typename genType::value_type const & </td>
+ <td class="paramname"><em>s</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return a point from a cubic curve. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00229.html" title="Spline functions. ">GLM_GTX_spline</a> extension. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaa69e143f6374d32f934a8edeaa50bac9"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::hermite </td>
+ <td>(</td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>v1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>t1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>v2</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>t2</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">typename genType::value_type const & </td>
+ <td class="paramname"><em>s</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Return a point from a hermite curve. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00229.html" title="Spline functions. ">GLM_GTX_spline</a> extension. </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00230.html b/src/third_party/glm/doc/api/a00230.html
new file mode 100644
index 0000000..801e74a
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00230.html
@@ -0,0 +1,213 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_std_based_type</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#typedef-members">Typedefs</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTX_std_based_type<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ga47c940f279a6b97ffc301eb4526a445a"><td class="memItemLeft" align="right" valign="top">typedef tvec1< std::size_t, defaultp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00230.html#ga47c940f279a6b97ffc301eb4526a445a">size1</a></td></tr>
+<tr class="separator:ga47c940f279a6b97ffc301eb4526a445a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga77d0b061efa41cb2ed2285d09294314e"><td class="memItemLeft" align="right" valign="top">typedef tvec1< std::size_t, defaultp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00230.html#ga77d0b061efa41cb2ed2285d09294314e">size1_t</a></td></tr>
+<tr class="separator:ga77d0b061efa41cb2ed2285d09294314e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac0ef172641a1555684da0beb735c2a79"><td class="memItemLeft" align="right" valign="top">typedef tvec2< std::size_t, defaultp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00230.html#gac0ef172641a1555684da0beb735c2a79">size2</a></td></tr>
+<tr class="separator:gac0ef172641a1555684da0beb735c2a79"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa7d72bbe318d27da9d30f27095e4c75e"><td class="memItemLeft" align="right" valign="top">typedef tvec2< std::size_t, defaultp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00230.html#gaa7d72bbe318d27da9d30f27095e4c75e">size2_t</a></td></tr>
+<tr class="separator:gaa7d72bbe318d27da9d30f27095e4c75e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga51b5e9650c459973134ffb4236ae88b6"><td class="memItemLeft" align="right" valign="top">typedef tvec3< std::size_t, defaultp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00230.html#ga51b5e9650c459973134ffb4236ae88b6">size3</a></td></tr>
+<tr class="separator:ga51b5e9650c459973134ffb4236ae88b6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad364e6c302642e3bb89d756df5d0c8c6"><td class="memItemLeft" align="right" valign="top">typedef tvec3< std::size_t, defaultp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00230.html#gad364e6c302642e3bb89d756df5d0c8c6">size3_t</a></td></tr>
+<tr class="separator:gad364e6c302642e3bb89d756df5d0c8c6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf07a3f432e328c99d35637225c988121"><td class="memItemLeft" align="right" valign="top">typedef tvec4< std::size_t, defaultp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00230.html#gaf07a3f432e328c99d35637225c988121">size4</a></td></tr>
+<tr class="separator:gaf07a3f432e328c99d35637225c988121"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga06862b7d59094244025d34407b2cb796"><td class="memItemLeft" align="right" valign="top">typedef tvec4< std::size_t, defaultp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00230.html#ga06862b7d59094244025d34407b2cb796">size4_t</a></td></tr>
+<tr class="separator:ga06862b7d59094244025d34407b2cb796"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Adds vector types based on STL value types. </p>
+<p><<a class="el" href="a00103.html" title="GLM_GTX_std_based_type ">glm/gtx/std_based_type.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a class="anchor" id="ga47c940f279a6b97ffc301eb4526a445a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec1<std::size_t, defaultp> size1</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Vector type based of one std::size_t component. </p>
+<dl class="section see"><dt>See also</dt><dd>GLM_GTX_std_based_type </dd></dl>
+
+<p>Definition at line <a class="el" href="a00103_source.html#l00030">30</a> of file <a class="el" href="a00103_source.html">std_based_type.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga77d0b061efa41cb2ed2285d09294314e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec1<std::size_t, defaultp> size1_t</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Vector type based of one std::size_t component. </p>
+<dl class="section see"><dt>See also</dt><dd>GLM_GTX_std_based_type </dd></dl>
+
+<p>Definition at line <a class="el" href="a00103_source.html#l00046">46</a> of file <a class="el" href="a00103_source.html">std_based_type.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gac0ef172641a1555684da0beb735c2a79"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec2<std::size_t, defaultp> size2</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Vector type based of two std::size_t components. </p>
+<dl class="section see"><dt>See also</dt><dd>GLM_GTX_std_based_type </dd></dl>
+
+<p>Definition at line <a class="el" href="a00103_source.html#l00034">34</a> of file <a class="el" href="a00103_source.html">std_based_type.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaa7d72bbe318d27da9d30f27095e4c75e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec2<std::size_t, defaultp> size2_t</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Vector type based of two std::size_t components. </p>
+<dl class="section see"><dt>See also</dt><dd>GLM_GTX_std_based_type </dd></dl>
+
+<p>Definition at line <a class="el" href="a00103_source.html#l00050">50</a> of file <a class="el" href="a00103_source.html">std_based_type.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga51b5e9650c459973134ffb4236ae88b6"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec3<std::size_t, defaultp> size3</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Vector type based of three std::size_t components. </p>
+<dl class="section see"><dt>See also</dt><dd>GLM_GTX_std_based_type </dd></dl>
+
+<p>Definition at line <a class="el" href="a00103_source.html#l00038">38</a> of file <a class="el" href="a00103_source.html">std_based_type.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gad364e6c302642e3bb89d756df5d0c8c6"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec3<std::size_t, defaultp> size3_t</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Vector type based of three std::size_t components. </p>
+<dl class="section see"><dt>See also</dt><dd>GLM_GTX_std_based_type </dd></dl>
+
+<p>Definition at line <a class="el" href="a00103_source.html#l00054">54</a> of file <a class="el" href="a00103_source.html">std_based_type.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="gaf07a3f432e328c99d35637225c988121"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec4<std::size_t, defaultp> size4</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Vector type based of four std::size_t components. </p>
+<dl class="section see"><dt>See also</dt><dd>GLM_GTX_std_based_type </dd></dl>
+
+<p>Definition at line <a class="el" href="a00103_source.html#l00042">42</a> of file <a class="el" href="a00103_source.html">std_based_type.hpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ga06862b7d59094244025d34407b2cb796"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef tvec4<std::size_t, defaultp> size4_t</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Vector type based of four std::size_t components. </p>
+<dl class="section see"><dt>See also</dt><dd>GLM_GTX_std_based_type </dd></dl>
+
+<p>Definition at line <a class="el" href="a00103_source.html#l00058">58</a> of file <a class="el" href="a00103_source.html">std_based_type.hpp</a>.</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00231.html b/src/third_party/glm/doc/api/a00231.html
new file mode 100644
index 0000000..b2442da
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00231.html
@@ -0,0 +1,83 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_string_cast</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTX_string_cast<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga7b4f9233593bbf1d53762f801ef56fe6"><td class="memTemplParams" colspan="2">template<template< typename, precision > class matType, typename T , precision P> </td></tr>
+<tr class="memitem:ga7b4f9233593bbf1d53762f801ef56fe6"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL std::string </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00231.html#ga7b4f9233593bbf1d53762f801ef56fe6">to_string</a> (matType< T, P > const &x)</td></tr>
+<tr class="separator:ga7b4f9233593bbf1d53762f801ef56fe6"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Setup strings for GLM type values. </p>
+<p><<a class="el" href="a00104.html" title="GLM_GTX_string_cast ">glm/gtx/string_cast.hpp</a>> need to be included to use these functionalities. This extension is not supported with CUDA </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga7b4f9233593bbf1d53762f801ef56fe6"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL std::string glm::to_string </td>
+ <td>(</td>
+ <td class="paramtype">matType< T, P > const & </td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Create a string from a GLM vector or matrix typed variable. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00231.html" title="Setup strings for GLM type values. ">GLM_GTX_string_cast</a> extension. </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00232.html b/src/third_party/glm/doc/api/a00232.html
new file mode 100644
index 0000000..22ebf66
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00232.html
@@ -0,0 +1,143 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_transform</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTX_transform<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga2020c91bf61e050882b3a5c18eada700"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga2020c91bf61e050882b3a5c18eada700"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00232.html#ga2020c91bf61e050882b3a5c18eada700">rotate</a> (T angle, tvec3< T, P > const &v)</td></tr>
+<tr class="separator:ga2020c91bf61e050882b3a5c18eada700"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1972d4a66a2e92637c8aaee598417a71"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga1972d4a66a2e92637c8aaee598417a71"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00232.html#ga1972d4a66a2e92637c8aaee598417a71">scale</a> (tvec3< T, P > const &v)</td></tr>
+<tr class="separator:ga1972d4a66a2e92637c8aaee598417a71"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga838c4505ef7f254ed05117b1ac9691fb"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga838c4505ef7f254ed05117b1ac9691fb"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00232.html#ga838c4505ef7f254ed05117b1ac9691fb">translate</a> (tvec3< T, P > const &v)</td></tr>
+<tr class="separator:ga838c4505ef7f254ed05117b1ac9691fb"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Add transformation matrices. </p>
+<p><<a class="el" href="a00105.html" title="GLM_GTX_transform ">glm/gtx/transform.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga2020c91bf61e050882b3a5c18eada700"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, P> glm::rotate </td>
+ <td>(</td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>angle</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>v</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Builds a rotation 4 * 4 matrix created from an axis of 3 scalars and an angle expressed in radians. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00169.html" title="Defines functions that generate common transformation matrices. ">GLM_GTC_matrix_transform</a> </dd>
+<dd>
+<a class="el" href="a00232.html" title="Add transformation matrices. ">GLM_GTX_transform</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga1972d4a66a2e92637c8aaee598417a71"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, P> glm::scale </td>
+ <td>(</td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Transforms a matrix with a scale 4 * 4 matrix created from a vector of 3 components. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00169.html" title="Defines functions that generate common transformation matrices. ">GLM_GTC_matrix_transform</a> </dd>
+<dd>
+<a class="el" href="a00232.html" title="Add transformation matrices. ">GLM_GTX_transform</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga838c4505ef7f254ed05117b1ac9691fb"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, P> glm::translate </td>
+ <td>(</td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Transforms a matrix with a translation 4 * 4 matrix created from 3 scalars. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00169.html" title="Defines functions that generate common transformation matrices. ">GLM_GTC_matrix_transform</a> </dd>
+<dd>
+<a class="el" href="a00232.html" title="Add transformation matrices. ">GLM_GTX_transform</a> </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00233.html b/src/third_party/glm/doc/api/a00233.html
new file mode 100644
index 0000000..bedfa6d
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00233.html
@@ -0,0 +1,372 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_transform2</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTX_transform2<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gacfce1085167a8bfb71a55ea14d22752f"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gacfce1085167a8bfb71a55ea14d22752f"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat3x3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#gacfce1085167a8bfb71a55ea14d22752f">proj2D</a> (const tmat3x3< T, P > &m, const tvec3< T, P > &normal)</td></tr>
+<tr class="separator:gacfce1085167a8bfb71a55ea14d22752f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafab0418f2503ec2133cb2de828cc482a"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gafab0418f2503ec2133cb2de828cc482a"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#gafab0418f2503ec2133cb2de828cc482a">proj3D</a> (const tmat4x4< T, P > &m, const tvec3< T, P > &normal)</td></tr>
+<tr class="separator:gafab0418f2503ec2133cb2de828cc482a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2874abd228989556d610a0bff993667a"><td class="memTemplParams" colspan="2">template<typename valType , precision P> </td></tr>
+<tr class="memitem:ga2874abd228989556d610a0bff993667a"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< valType, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#ga2874abd228989556d610a0bff993667a">scaleBias</a> (valType scale, valType bias)</td></tr>
+<tr class="separator:ga2874abd228989556d610a0bff993667a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac1a1139e2980021422d1fc1c42dc74f2"><td class="memTemplParams" colspan="2">template<typename valType , precision P> </td></tr>
+<tr class="memitem:gac1a1139e2980021422d1fc1c42dc74f2"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< valType, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#gac1a1139e2980021422d1fc1c42dc74f2">scaleBias</a> (tmat4x4< valType, P > const &m, valType scale, valType bias)</td></tr>
+<tr class="separator:gac1a1139e2980021422d1fc1c42dc74f2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga10f6c62d8f827c4cacedb71fd05e4ba2"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga10f6c62d8f827c4cacedb71fd05e4ba2"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat3x3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#ga10f6c62d8f827c4cacedb71fd05e4ba2">shearX2D</a> (tmat3x3< T, P > const &m, T y)</td></tr>
+<tr class="separator:ga10f6c62d8f827c4cacedb71fd05e4ba2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae06ce274e4754f925d5d68440e89452e"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:gae06ce274e4754f925d5d68440e89452e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#gae06ce274e4754f925d5d68440e89452e">shearX3D</a> (const tmat4x4< T, P > &m, T y, T z)</td></tr>
+<tr class="separator:gae06ce274e4754f925d5d68440e89452e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga21ade82859e09a5cdaf4a01fbf8dc61b"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga21ade82859e09a5cdaf4a01fbf8dc61b"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat3x3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#ga21ade82859e09a5cdaf4a01fbf8dc61b">shearY2D</a> (tmat3x3< T, P > const &m, T x)</td></tr>
+<tr class="separator:ga21ade82859e09a5cdaf4a01fbf8dc61b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga31253ea18fdcdfde08c134c8b67688f7"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga31253ea18fdcdfde08c134c8b67688f7"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#ga31253ea18fdcdfde08c134c8b67688f7">shearY3D</a> (const tmat4x4< T, P > &m, T x, T z)</td></tr>
+<tr class="separator:ga31253ea18fdcdfde08c134c8b67688f7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5558ac64a7144685bf2eb4483a0e2f51"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga5558ac64a7144685bf2eb4483a0e2f51"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tmat4x4< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00233.html#ga5558ac64a7144685bf2eb4483a0e2f51">shearZ3D</a> (const tmat4x4< T, P > &m, T x, T y)</td></tr>
+<tr class="separator:ga5558ac64a7144685bf2eb4483a0e2f51"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Add extra transformation matrices. </p>
+<p><<a class="el" href="a00106.html" title="GLM_GTX_transform2 ">glm/gtx/transform2.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="gacfce1085167a8bfb71a55ea14d22752f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat3x3<T, P> glm::proj2D </td>
+ <td>(</td>
+ <td class="paramtype">const tmat3x3< T, P > & </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const tvec3< T, P > & </td>
+ <td class="paramname"><em>normal</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build planar projection matrix along normal axis. </p>
+<p>From GLM_GTX_transform2 extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="gafab0418f2503ec2133cb2de828cc482a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, P> glm::proj3D </td>
+ <td>(</td>
+ <td class="paramtype">const tmat4x4< T, P > & </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const tvec3< T, P > & </td>
+ <td class="paramname"><em>normal</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build planar projection matrix along normal axis. </p>
+<p>From GLM_GTX_transform2 extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga2874abd228989556d610a0bff993667a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<valType, P> glm::scaleBias </td>
+ <td>(</td>
+ <td class="paramtype">valType </td>
+ <td class="paramname"><em>scale</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">valType </td>
+ <td class="paramname"><em>bias</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a scale bias matrix. </p>
+<p>From GLM_GTX_transform2 extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="gac1a1139e2980021422d1fc1c42dc74f2"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<valType, P> glm::scaleBias </td>
+ <td>(</td>
+ <td class="paramtype">tmat4x4< valType, P > const & </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">valType </td>
+ <td class="paramname"><em>scale</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">valType </td>
+ <td class="paramname"><em>bias</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Build a scale bias matrix. </p>
+<p>From GLM_GTX_transform2 extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga10f6c62d8f827c4cacedb71fd05e4ba2"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat3x3<T, P> glm::shearX2D </td>
+ <td>(</td>
+ <td class="paramtype">tmat3x3< T, P > const & </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Transforms a matrix with a shearing on X axis. </p>
+<p>From GLM_GTX_transform2 extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="gae06ce274e4754f925d5d68440e89452e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, P> glm::shearX3D </td>
+ <td>(</td>
+ <td class="paramtype">const tmat4x4< T, P > & </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>z</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Transforms a matrix with a shearing on X axis From GLM_GTX_transform2 extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga21ade82859e09a5cdaf4a01fbf8dc61b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat3x3<T, P> glm::shearY2D </td>
+ <td>(</td>
+ <td class="paramtype">tmat3x3< T, P > const & </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>x</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Transforms a matrix with a shearing on Y axis. </p>
+<p>From GLM_GTX_transform2 extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga31253ea18fdcdfde08c134c8b67688f7"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, P> glm::shearY3D </td>
+ <td>(</td>
+ <td class="paramtype">const tmat4x4< T, P > & </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>z</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Transforms a matrix with a shearing on Y axis. </p>
+<p>From GLM_GTX_transform2 extension. </p>
+
+</div>
+</div>
+<a class="anchor" id="ga5558ac64a7144685bf2eb4483a0e2f51"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL tmat4x4<T, P> glm::shearZ3D </td>
+ <td>(</td>
+ <td class="paramtype">const tmat4x4< T, P > & </td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Transforms a matrix with a shearing on Z axis. </p>
+<p>From GLM_GTX_transform2 extension. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00234.html b/src/third_party/glm/doc/api/a00234.html
new file mode 100644
index 0000000..a3f7030
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00234.html
@@ -0,0 +1,7811 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_type_aligned</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTX_type_aligned<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gab5cd5c5fad228b25c782084f1cc30114"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gab5cd5c5fad228b25c782084f1cc30114">GLM_ALIGNED_TYPEDEF</a> (lowp_int8, aligned_lowp_int8, 1)</td></tr>
+<tr class="separator:gab5cd5c5fad228b25c782084f1cc30114"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5bb5dd895ef625c1b113f2cf400186b0"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga5bb5dd895ef625c1b113f2cf400186b0">GLM_ALIGNED_TYPEDEF</a> (lowp_int16, aligned_lowp_int16, 2)</td></tr>
+<tr class="separator:ga5bb5dd895ef625c1b113f2cf400186b0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac6efa54cf7c6c86f7158922abdb1a430"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gac6efa54cf7c6c86f7158922abdb1a430">GLM_ALIGNED_TYPEDEF</a> (lowp_int32, aligned_lowp_int32, 4)</td></tr>
+<tr class="separator:gac6efa54cf7c6c86f7158922abdb1a430"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6612eb77c8607048e7552279a11eeb5f"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga6612eb77c8607048e7552279a11eeb5f">GLM_ALIGNED_TYPEDEF</a> (lowp_int64, aligned_lowp_int64, 8)</td></tr>
+<tr class="separator:ga6612eb77c8607048e7552279a11eeb5f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7ddc1848ff2223026db8968ce0c97497"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga7ddc1848ff2223026db8968ce0c97497">GLM_ALIGNED_TYPEDEF</a> (lowp_int8_t, aligned_lowp_int8_t, 1)</td></tr>
+<tr class="separator:ga7ddc1848ff2223026db8968ce0c97497"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga22240dd9458b0f8c11fbcc4f48714f68"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga22240dd9458b0f8c11fbcc4f48714f68">GLM_ALIGNED_TYPEDEF</a> (lowp_int16_t, aligned_lowp_int16_t, 2)</td></tr>
+<tr class="separator:ga22240dd9458b0f8c11fbcc4f48714f68"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8130ea381d76a2cc34a93ccbb6cf487d"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga8130ea381d76a2cc34a93ccbb6cf487d">GLM_ALIGNED_TYPEDEF</a> (lowp_int32_t, aligned_lowp_int32_t, 4)</td></tr>
+<tr class="separator:ga8130ea381d76a2cc34a93ccbb6cf487d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7ccb60f3215d293fd62b33b31ed0e7be"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga7ccb60f3215d293fd62b33b31ed0e7be">GLM_ALIGNED_TYPEDEF</a> (lowp_int64_t, aligned_lowp_int64_t, 8)</td></tr>
+<tr class="separator:ga7ccb60f3215d293fd62b33b31ed0e7be"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac20d508d2ef5cc95ad3daf083c57ec2a"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gac20d508d2ef5cc95ad3daf083c57ec2a">GLM_ALIGNED_TYPEDEF</a> (lowp_i8, aligned_lowp_i8, 1)</td></tr>
+<tr class="separator:gac20d508d2ef5cc95ad3daf083c57ec2a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga50257b48069a31d0c8d9c1f644d267de"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga50257b48069a31d0c8d9c1f644d267de">GLM_ALIGNED_TYPEDEF</a> (lowp_i16, aligned_lowp_i16, 2)</td></tr>
+<tr class="separator:ga50257b48069a31d0c8d9c1f644d267de"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa07e98e67b7a3435c0746018c7a2a839"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gaa07e98e67b7a3435c0746018c7a2a839">GLM_ALIGNED_TYPEDEF</a> (lowp_i32, aligned_lowp_i32, 4)</td></tr>
+<tr class="separator:gaa07e98e67b7a3435c0746018c7a2a839"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga62601fc6f8ca298b77285bedf03faffd"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga62601fc6f8ca298b77285bedf03faffd">GLM_ALIGNED_TYPEDEF</a> (lowp_i64, aligned_lowp_i64, 8)</td></tr>
+<tr class="separator:ga62601fc6f8ca298b77285bedf03faffd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac8cff825951aeb54dd846037113c72db"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gac8cff825951aeb54dd846037113c72db">GLM_ALIGNED_TYPEDEF</a> (mediump_int8, aligned_mediump_int8, 1)</td></tr>
+<tr class="separator:gac8cff825951aeb54dd846037113c72db"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga78f443d88f438575a62b5df497cdf66b"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga78f443d88f438575a62b5df497cdf66b">GLM_ALIGNED_TYPEDEF</a> (mediump_int16, aligned_mediump_int16, 2)</td></tr>
+<tr class="separator:ga78f443d88f438575a62b5df497cdf66b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0680cd3b5d4e8006985fb41a4f9b57af"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga0680cd3b5d4e8006985fb41a4f9b57af">GLM_ALIGNED_TYPEDEF</a> (mediump_int32, aligned_mediump_int32, 4)</td></tr>
+<tr class="separator:ga0680cd3b5d4e8006985fb41a4f9b57af"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad9e5babb1dd3e3531b42c37bf25dd951"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gad9e5babb1dd3e3531b42c37bf25dd951">GLM_ALIGNED_TYPEDEF</a> (mediump_int64, aligned_mediump_int64, 8)</td></tr>
+<tr class="separator:gad9e5babb1dd3e3531b42c37bf25dd951"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga353fd9fa8a9ad952fcabd0d53ad9a6dd"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga353fd9fa8a9ad952fcabd0d53ad9a6dd">GLM_ALIGNED_TYPEDEF</a> (mediump_int8_t, aligned_mediump_int8_t, 1)</td></tr>
+<tr class="separator:ga353fd9fa8a9ad952fcabd0d53ad9a6dd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2196442c0e5c5e8c77842de388c42521"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga2196442c0e5c5e8c77842de388c42521">GLM_ALIGNED_TYPEDEF</a> (mediump_int16_t, aligned_mediump_int16_t, 2)</td></tr>
+<tr class="separator:ga2196442c0e5c5e8c77842de388c42521"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1284488189daf897cf095c5eefad9744"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga1284488189daf897cf095c5eefad9744">GLM_ALIGNED_TYPEDEF</a> (mediump_int32_t, aligned_mediump_int32_t, 4)</td></tr>
+<tr class="separator:ga1284488189daf897cf095c5eefad9744"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga73fdc86a539808af58808b7c60a1c4d8"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga73fdc86a539808af58808b7c60a1c4d8">GLM_ALIGNED_TYPEDEF</a> (mediump_int64_t, aligned_mediump_int64_t, 8)</td></tr>
+<tr class="separator:ga73fdc86a539808af58808b7c60a1c4d8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafafeea923e1983262c972e2b83922d3b"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gafafeea923e1983262c972e2b83922d3b">GLM_ALIGNED_TYPEDEF</a> (mediump_i8, aligned_mediump_i8, 1)</td></tr>
+<tr class="separator:gafafeea923e1983262c972e2b83922d3b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4b35ca5fe8f55c9d2fe54fdb8d8896f4"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga4b35ca5fe8f55c9d2fe54fdb8d8896f4">GLM_ALIGNED_TYPEDEF</a> (mediump_i16, aligned_mediump_i16, 2)</td></tr>
+<tr class="separator:ga4b35ca5fe8f55c9d2fe54fdb8d8896f4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga63b882e29170d428463d99c3d630acc6"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga63b882e29170d428463d99c3d630acc6">GLM_ALIGNED_TYPEDEF</a> (mediump_i32, aligned_mediump_i32, 4)</td></tr>
+<tr class="separator:ga63b882e29170d428463d99c3d630acc6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8b20507bb048c1edea2d441cc953e6f0"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga8b20507bb048c1edea2d441cc953e6f0">GLM_ALIGNED_TYPEDEF</a> (mediump_i64, aligned_mediump_i64, 8)</td></tr>
+<tr class="separator:ga8b20507bb048c1edea2d441cc953e6f0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga56c5ca60813027b603c7b61425a0479d"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga56c5ca60813027b603c7b61425a0479d">GLM_ALIGNED_TYPEDEF</a> (highp_int8, aligned_highp_int8, 1)</td></tr>
+<tr class="separator:ga56c5ca60813027b603c7b61425a0479d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7a751b3aff24c0259f4a7357c2969089"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga7a751b3aff24c0259f4a7357c2969089">GLM_ALIGNED_TYPEDEF</a> (highp_int16, aligned_highp_int16, 2)</td></tr>
+<tr class="separator:ga7a751b3aff24c0259f4a7357c2969089"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga70cd2144351c556469ee6119e59971fc"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga70cd2144351c556469ee6119e59971fc">GLM_ALIGNED_TYPEDEF</a> (highp_int32, aligned_highp_int32, 4)</td></tr>
+<tr class="separator:ga70cd2144351c556469ee6119e59971fc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga46bbf08dc004d8c433041e0b5018a5d3"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga46bbf08dc004d8c433041e0b5018a5d3">GLM_ALIGNED_TYPEDEF</a> (highp_int64, aligned_highp_int64, 8)</td></tr>
+<tr class="separator:ga46bbf08dc004d8c433041e0b5018a5d3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab3e10c77a20d1abad2de1c561c7a5c18"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gab3e10c77a20d1abad2de1c561c7a5c18">GLM_ALIGNED_TYPEDEF</a> (highp_int8_t, aligned_highp_int8_t, 1)</td></tr>
+<tr class="separator:gab3e10c77a20d1abad2de1c561c7a5c18"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga968f30319ebeaca9ebcd3a25a8e139fb"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga968f30319ebeaca9ebcd3a25a8e139fb">GLM_ALIGNED_TYPEDEF</a> (highp_int16_t, aligned_highp_int16_t, 2)</td></tr>
+<tr class="separator:ga968f30319ebeaca9ebcd3a25a8e139fb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaae773c28e6390c6aa76f5b678b7098a3"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gaae773c28e6390c6aa76f5b678b7098a3">GLM_ALIGNED_TYPEDEF</a> (highp_int32_t, aligned_highp_int32_t, 4)</td></tr>
+<tr class="separator:gaae773c28e6390c6aa76f5b678b7098a3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga790cfff1ca39d0ed696ffed980809311"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga790cfff1ca39d0ed696ffed980809311">GLM_ALIGNED_TYPEDEF</a> (highp_int64_t, aligned_highp_int64_t, 8)</td></tr>
+<tr class="separator:ga790cfff1ca39d0ed696ffed980809311"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8265b91eb23c120a9b0c3e381bc37b96"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga8265b91eb23c120a9b0c3e381bc37b96">GLM_ALIGNED_TYPEDEF</a> (highp_i8, aligned_highp_i8, 1)</td></tr>
+<tr class="separator:ga8265b91eb23c120a9b0c3e381bc37b96"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae6d384de17588d8edb894fbe06e0d410"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gae6d384de17588d8edb894fbe06e0d410">GLM_ALIGNED_TYPEDEF</a> (highp_i16, aligned_highp_i16, 2)</td></tr>
+<tr class="separator:gae6d384de17588d8edb894fbe06e0d410"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9c8172b745ee03fc5b2b91c350c2922f"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga9c8172b745ee03fc5b2b91c350c2922f">GLM_ALIGNED_TYPEDEF</a> (highp_i32, aligned_highp_i32, 4)</td></tr>
+<tr class="separator:ga9c8172b745ee03fc5b2b91c350c2922f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga77e0dff12aa4020ddc3f8cabbea7b2e6"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga77e0dff12aa4020ddc3f8cabbea7b2e6">GLM_ALIGNED_TYPEDEF</a> (highp_i64, aligned_highp_i64, 8)</td></tr>
+<tr class="separator:ga77e0dff12aa4020ddc3f8cabbea7b2e6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gabd82b9faa9d4d618dbbe0fc8a1efee63"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gabd82b9faa9d4d618dbbe0fc8a1efee63">GLM_ALIGNED_TYPEDEF</a> (int8, aligned_int8, 1)</td></tr>
+<tr class="separator:gabd82b9faa9d4d618dbbe0fc8a1efee63"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga285649744560be21000cfd81bbb5d507"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga285649744560be21000cfd81bbb5d507">GLM_ALIGNED_TYPEDEF</a> (int16, aligned_int16, 2)</td></tr>
+<tr class="separator:ga285649744560be21000cfd81bbb5d507"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga07732da630b2deda428ce95c0ecaf3ff"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga07732da630b2deda428ce95c0ecaf3ff">GLM_ALIGNED_TYPEDEF</a> (int32, aligned_int32, 4)</td></tr>
+<tr class="separator:ga07732da630b2deda428ce95c0ecaf3ff"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1a8da2a8c51f69c07a2e7f473aa420f4"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga1a8da2a8c51f69c07a2e7f473aa420f4">GLM_ALIGNED_TYPEDEF</a> (int64, aligned_int64, 8)</td></tr>
+<tr class="separator:ga1a8da2a8c51f69c07a2e7f473aa420f4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga848aedf13e2d9738acf0bb482c590174"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga848aedf13e2d9738acf0bb482c590174">GLM_ALIGNED_TYPEDEF</a> (int8_t, aligned_int8_t, 1)</td></tr>
+<tr class="separator:ga848aedf13e2d9738acf0bb482c590174"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafd2803d39049dd45a37a63931e25d943"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gafd2803d39049dd45a37a63931e25d943">GLM_ALIGNED_TYPEDEF</a> (int16_t, aligned_int16_t, 2)</td></tr>
+<tr class="separator:gafd2803d39049dd45a37a63931e25d943"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae553b33349d6da832cf0724f1e024094"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gae553b33349d6da832cf0724f1e024094">GLM_ALIGNED_TYPEDEF</a> (int32_t, aligned_int32_t, 4)</td></tr>
+<tr class="separator:gae553b33349d6da832cf0724f1e024094"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga16d223a2b3409e812e1d3bd87f0e9e5c"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga16d223a2b3409e812e1d3bd87f0e9e5c">GLM_ALIGNED_TYPEDEF</a> (int64_t, aligned_int64_t, 8)</td></tr>
+<tr class="separator:ga16d223a2b3409e812e1d3bd87f0e9e5c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2de065d2ddfdb366bcd0febca79ae2ad"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga2de065d2ddfdb366bcd0febca79ae2ad">GLM_ALIGNED_TYPEDEF</a> (i8, aligned_i8, 1)</td></tr>
+<tr class="separator:ga2de065d2ddfdb366bcd0febca79ae2ad"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gabd786bdc20a11c8cb05c92c8212e28d3"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gabd786bdc20a11c8cb05c92c8212e28d3">GLM_ALIGNED_TYPEDEF</a> (i16, aligned_i16, 2)</td></tr>
+<tr class="separator:gabd786bdc20a11c8cb05c92c8212e28d3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad4aefe56691cdb640c72f0d46d3fb532"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gad4aefe56691cdb640c72f0d46d3fb532">GLM_ALIGNED_TYPEDEF</a> (i32, aligned_i32, 4)</td></tr>
+<tr class="separator:gad4aefe56691cdb640c72f0d46d3fb532"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8fe9745f7de24a8394518152ff9fccdc"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga8fe9745f7de24a8394518152ff9fccdc">GLM_ALIGNED_TYPEDEF</a> (i64, aligned_i64, 8)</td></tr>
+<tr class="separator:ga8fe9745f7de24a8394518152ff9fccdc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaaad735483450099f7f882d4e3a3569bd"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gaaad735483450099f7f882d4e3a3569bd">GLM_ALIGNED_TYPEDEF</a> (ivec1, aligned_ivec1, 4)</td></tr>
+<tr class="separator:gaaad735483450099f7f882d4e3a3569bd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac7b6f823802edbd6edbaf70ea25bf068"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gac7b6f823802edbd6edbaf70ea25bf068">GLM_ALIGNED_TYPEDEF</a> (ivec2, aligned_ivec2, 8)</td></tr>
+<tr class="separator:gac7b6f823802edbd6edbaf70ea25bf068"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3e235bcd2b8029613f25b8d40a2d3ef7"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga3e235bcd2b8029613f25b8d40a2d3ef7">GLM_ALIGNED_TYPEDEF</a> (ivec3, aligned_ivec3, 16)</td></tr>
+<tr class="separator:ga3e235bcd2b8029613f25b8d40a2d3ef7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga50d8a9523968c77f8325b4c9bfbff41e"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga50d8a9523968c77f8325b4c9bfbff41e">GLM_ALIGNED_TYPEDEF</a> (ivec4, aligned_ivec4, 16)</td></tr>
+<tr class="separator:ga50d8a9523968c77f8325b4c9bfbff41e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9ec20fdfb729c702032da9378c79679f"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga9ec20fdfb729c702032da9378c79679f">GLM_ALIGNED_TYPEDEF</a> (i8vec1, aligned_i8vec1, 1)</td></tr>
+<tr class="separator:ga9ec20fdfb729c702032da9378c79679f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga25b3fe1d9e8d0a5e86c1949c1acd8131"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga25b3fe1d9e8d0a5e86c1949c1acd8131">GLM_ALIGNED_TYPEDEF</a> (i8vec2, aligned_i8vec2, 2)</td></tr>
+<tr class="separator:ga25b3fe1d9e8d0a5e86c1949c1acd8131"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2958f907719d94d8109b562540c910e2"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga2958f907719d94d8109b562540c910e2">GLM_ALIGNED_TYPEDEF</a> (i8vec3, aligned_i8vec3, 4)</td></tr>
+<tr class="separator:ga2958f907719d94d8109b562540c910e2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1fe6fc032a978f1c845fac9aa0668714"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga1fe6fc032a978f1c845fac9aa0668714">GLM_ALIGNED_TYPEDEF</a> (i8vec4, aligned_i8vec4, 4)</td></tr>
+<tr class="separator:ga1fe6fc032a978f1c845fac9aa0668714"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa4161e7a496dc96972254143fe873e55"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gaa4161e7a496dc96972254143fe873e55">GLM_ALIGNED_TYPEDEF</a> (i16vec1, aligned_i16vec1, 2)</td></tr>
+<tr class="separator:gaa4161e7a496dc96972254143fe873e55"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9d7cb211ccda69b1c22ddeeb0f3e7aba"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga9d7cb211ccda69b1c22ddeeb0f3e7aba">GLM_ALIGNED_TYPEDEF</a> (i16vec2, aligned_i16vec2, 4)</td></tr>
+<tr class="separator:ga9d7cb211ccda69b1c22ddeeb0f3e7aba"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaaee91dd2ab34423bcc11072ef6bd0f02"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gaaee91dd2ab34423bcc11072ef6bd0f02">GLM_ALIGNED_TYPEDEF</a> (i16vec3, aligned_i16vec3, 8)</td></tr>
+<tr class="separator:gaaee91dd2ab34423bcc11072ef6bd0f02"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga49f047ccaa8b31fad9f26c67bf9b3510"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga49f047ccaa8b31fad9f26c67bf9b3510">GLM_ALIGNED_TYPEDEF</a> (i16vec4, aligned_i16vec4, 8)</td></tr>
+<tr class="separator:ga49f047ccaa8b31fad9f26c67bf9b3510"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga904e9c2436bb099397c0823506a0771f"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga904e9c2436bb099397c0823506a0771f">GLM_ALIGNED_TYPEDEF</a> (i32vec1, aligned_i32vec1, 4)</td></tr>
+<tr class="separator:ga904e9c2436bb099397c0823506a0771f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf90651cf2f5e7ee2b11cfdc5a6749534"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gaf90651cf2f5e7ee2b11cfdc5a6749534">GLM_ALIGNED_TYPEDEF</a> (i32vec2, aligned_i32vec2, 8)</td></tr>
+<tr class="separator:gaf90651cf2f5e7ee2b11cfdc5a6749534"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7354a4ead8cb17868aec36b9c30d6010"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga7354a4ead8cb17868aec36b9c30d6010">GLM_ALIGNED_TYPEDEF</a> (i32vec3, aligned_i32vec3, 16)</td></tr>
+<tr class="separator:ga7354a4ead8cb17868aec36b9c30d6010"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad2ecbdea18732163e2636e27b37981ee"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gad2ecbdea18732163e2636e27b37981ee">GLM_ALIGNED_TYPEDEF</a> (i32vec4, aligned_i32vec4, 16)</td></tr>
+<tr class="separator:gad2ecbdea18732163e2636e27b37981ee"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga965b1c9aa1800e93d4abc2eb2b5afcbf"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga965b1c9aa1800e93d4abc2eb2b5afcbf">GLM_ALIGNED_TYPEDEF</a> (i64vec1, aligned_i64vec1, 8)</td></tr>
+<tr class="separator:ga965b1c9aa1800e93d4abc2eb2b5afcbf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1f9e9c2ea2768675dff9bae5cde2d829"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga1f9e9c2ea2768675dff9bae5cde2d829">GLM_ALIGNED_TYPEDEF</a> (i64vec2, aligned_i64vec2, 16)</td></tr>
+<tr class="separator:ga1f9e9c2ea2768675dff9bae5cde2d829"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad77c317b7d942322cd5be4c8127b3187"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gad77c317b7d942322cd5be4c8127b3187">GLM_ALIGNED_TYPEDEF</a> (i64vec3, aligned_i64vec3, 32)</td></tr>
+<tr class="separator:gad77c317b7d942322cd5be4c8127b3187"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga716f8ea809bdb11b5b542d8b71aeb04f"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga716f8ea809bdb11b5b542d8b71aeb04f">GLM_ALIGNED_TYPEDEF</a> (i64vec4, aligned_i64vec4, 32)</td></tr>
+<tr class="separator:ga716f8ea809bdb11b5b542d8b71aeb04f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad46f8e9082d5878b1bc04f9c1471cdaa"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gad46f8e9082d5878b1bc04f9c1471cdaa">GLM_ALIGNED_TYPEDEF</a> (lowp_uint8, aligned_lowp_uint8, 1)</td></tr>
+<tr class="separator:gad46f8e9082d5878b1bc04f9c1471cdaa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1246094581af624aca6c7499aaabf801"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga1246094581af624aca6c7499aaabf801">GLM_ALIGNED_TYPEDEF</a> (lowp_uint16, aligned_lowp_uint16, 2)</td></tr>
+<tr class="separator:ga1246094581af624aca6c7499aaabf801"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7a5009a1d0196bbf21dd7518f61f0249"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga7a5009a1d0196bbf21dd7518f61f0249">GLM_ALIGNED_TYPEDEF</a> (lowp_uint32, aligned_lowp_uint32, 4)</td></tr>
+<tr class="separator:ga7a5009a1d0196bbf21dd7518f61f0249"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga45213fd18b3bb1df391671afefe4d1e7"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga45213fd18b3bb1df391671afefe4d1e7">GLM_ALIGNED_TYPEDEF</a> (lowp_uint64, aligned_lowp_uint64, 8)</td></tr>
+<tr class="separator:ga45213fd18b3bb1df391671afefe4d1e7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0ba26b4e3fd9ecbc25358efd68d8a4ca"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga0ba26b4e3fd9ecbc25358efd68d8a4ca">GLM_ALIGNED_TYPEDEF</a> (lowp_uint8_t, aligned_lowp_uint8_t, 1)</td></tr>
+<tr class="separator:ga0ba26b4e3fd9ecbc25358efd68d8a4ca"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf2b58f5fb6d4ec8ce7b76221d3af43e1"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gaf2b58f5fb6d4ec8ce7b76221d3af43e1">GLM_ALIGNED_TYPEDEF</a> (lowp_uint16_t, aligned_lowp_uint16_t, 2)</td></tr>
+<tr class="separator:gaf2b58f5fb6d4ec8ce7b76221d3af43e1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gadc246401847dcba155f0699425e49dcd"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gadc246401847dcba155f0699425e49dcd">GLM_ALIGNED_TYPEDEF</a> (lowp_uint32_t, aligned_lowp_uint32_t, 4)</td></tr>
+<tr class="separator:gadc246401847dcba155f0699425e49dcd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaace64bddf51a9def01498da9a94fb01c"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gaace64bddf51a9def01498da9a94fb01c">GLM_ALIGNED_TYPEDEF</a> (lowp_uint64_t, aligned_lowp_uint64_t, 8)</td></tr>
+<tr class="separator:gaace64bddf51a9def01498da9a94fb01c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad7bb97c29d664bd86ffb1bed4abc5534"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gad7bb97c29d664bd86ffb1bed4abc5534">GLM_ALIGNED_TYPEDEF</a> (lowp_u8, aligned_lowp_u8, 1)</td></tr>
+<tr class="separator:gad7bb97c29d664bd86ffb1bed4abc5534"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga404bba7785130e0b1384d695a9450b28"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga404bba7785130e0b1384d695a9450b28">GLM_ALIGNED_TYPEDEF</a> (lowp_u16, aligned_lowp_u16, 2)</td></tr>
+<tr class="separator:ga404bba7785130e0b1384d695a9450b28"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga31ba41fd896257536958ec6080203d2a"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga31ba41fd896257536958ec6080203d2a">GLM_ALIGNED_TYPEDEF</a> (lowp_u32, aligned_lowp_u32, 4)</td></tr>
+<tr class="separator:ga31ba41fd896257536958ec6080203d2a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gacca5f13627f57b3505676e40a6e43e5e"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gacca5f13627f57b3505676e40a6e43e5e">GLM_ALIGNED_TYPEDEF</a> (lowp_u64, aligned_lowp_u64, 8)</td></tr>
+<tr class="separator:gacca5f13627f57b3505676e40a6e43e5e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5faf1d3e70bf33174dd7f3d01d5b883b"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga5faf1d3e70bf33174dd7f3d01d5b883b">GLM_ALIGNED_TYPEDEF</a> (mediump_uint8, aligned_mediump_uint8, 1)</td></tr>
+<tr class="separator:ga5faf1d3e70bf33174dd7f3d01d5b883b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga727e2bf2c433bb3b0182605860a48363"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga727e2bf2c433bb3b0182605860a48363">GLM_ALIGNED_TYPEDEF</a> (mediump_uint16, aligned_mediump_uint16, 2)</td></tr>
+<tr class="separator:ga727e2bf2c433bb3b0182605860a48363"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga12566ca66d5962dadb4a5eb4c74e891e"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga12566ca66d5962dadb4a5eb4c74e891e">GLM_ALIGNED_TYPEDEF</a> (mediump_uint32, aligned_mediump_uint32, 4)</td></tr>
+<tr class="separator:ga12566ca66d5962dadb4a5eb4c74e891e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7b66a97a8acaa35c5a377b947318c6bc"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga7b66a97a8acaa35c5a377b947318c6bc">GLM_ALIGNED_TYPEDEF</a> (mediump_uint64, aligned_mediump_uint64, 8)</td></tr>
+<tr class="separator:ga7b66a97a8acaa35c5a377b947318c6bc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa9cde002439b74fa66120a16a9f55fcc"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gaa9cde002439b74fa66120a16a9f55fcc">GLM_ALIGNED_TYPEDEF</a> (mediump_uint8_t, aligned_mediump_uint8_t, 1)</td></tr>
+<tr class="separator:gaa9cde002439b74fa66120a16a9f55fcc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1ca98c67f7d1e975f7c5202f1da1df1f"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga1ca98c67f7d1e975f7c5202f1da1df1f">GLM_ALIGNED_TYPEDEF</a> (mediump_uint16_t, aligned_mediump_uint16_t, 2)</td></tr>
+<tr class="separator:ga1ca98c67f7d1e975f7c5202f1da1df1f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1dc8bc6199d785f235576948d80a597c"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga1dc8bc6199d785f235576948d80a597c">GLM_ALIGNED_TYPEDEF</a> (mediump_uint32_t, aligned_mediump_uint32_t, 4)</td></tr>
+<tr class="separator:ga1dc8bc6199d785f235576948d80a597c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad14a0f2ec93519682b73d70b8e401d81"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gad14a0f2ec93519682b73d70b8e401d81">GLM_ALIGNED_TYPEDEF</a> (mediump_uint64_t, aligned_mediump_uint64_t, 8)</td></tr>
+<tr class="separator:gad14a0f2ec93519682b73d70b8e401d81"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gada8b996eb6526dc1ead813bd49539d1b"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gada8b996eb6526dc1ead813bd49539d1b">GLM_ALIGNED_TYPEDEF</a> (mediump_u8, aligned_mediump_u8, 1)</td></tr>
+<tr class="separator:gada8b996eb6526dc1ead813bd49539d1b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga28948f6bfb52b42deb9d73ae1ea8d8b0"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga28948f6bfb52b42deb9d73ae1ea8d8b0">GLM_ALIGNED_TYPEDEF</a> (mediump_u16, aligned_mediump_u16, 2)</td></tr>
+<tr class="separator:ga28948f6bfb52b42deb9d73ae1ea8d8b0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad6a7c0b5630f89d3f1c5b4ef2919bb4c"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gad6a7c0b5630f89d3f1c5b4ef2919bb4c">GLM_ALIGNED_TYPEDEF</a> (mediump_u32, aligned_mediump_u32, 4)</td></tr>
+<tr class="separator:gad6a7c0b5630f89d3f1c5b4ef2919bb4c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa0fc531cbaa972ac3a0b86d21ef4a7fa"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gaa0fc531cbaa972ac3a0b86d21ef4a7fa">GLM_ALIGNED_TYPEDEF</a> (mediump_u64, aligned_mediump_u64, 8)</td></tr>
+<tr class="separator:gaa0fc531cbaa972ac3a0b86d21ef4a7fa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0ee829f7b754b262bbfe6317c0d678ac"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga0ee829f7b754b262bbfe6317c0d678ac">GLM_ALIGNED_TYPEDEF</a> (highp_uint8, aligned_highp_uint8, 1)</td></tr>
+<tr class="separator:ga0ee829f7b754b262bbfe6317c0d678ac"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga447848a817a626cae08cedc9778b331c"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga447848a817a626cae08cedc9778b331c">GLM_ALIGNED_TYPEDEF</a> (highp_uint16, aligned_highp_uint16, 2)</td></tr>
+<tr class="separator:ga447848a817a626cae08cedc9778b331c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6027ae13b2734f542a6e7beee11b8820"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga6027ae13b2734f542a6e7beee11b8820">GLM_ALIGNED_TYPEDEF</a> (highp_uint32, aligned_highp_uint32, 4)</td></tr>
+<tr class="separator:ga6027ae13b2734f542a6e7beee11b8820"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2aca46c8608c95ef991ee4c332acde5f"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga2aca46c8608c95ef991ee4c332acde5f">GLM_ALIGNED_TYPEDEF</a> (highp_uint64, aligned_highp_uint64, 8)</td></tr>
+<tr class="separator:ga2aca46c8608c95ef991ee4c332acde5f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaff50b10dd1c48be324fdaffd18e2c7ea"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gaff50b10dd1c48be324fdaffd18e2c7ea">GLM_ALIGNED_TYPEDEF</a> (highp_uint8_t, aligned_highp_uint8_t, 1)</td></tr>
+<tr class="separator:gaff50b10dd1c48be324fdaffd18e2c7ea"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9fc4421dbb833d5461e6d4e59dcfde55"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga9fc4421dbb833d5461e6d4e59dcfde55">GLM_ALIGNED_TYPEDEF</a> (highp_uint16_t, aligned_highp_uint16_t, 2)</td></tr>
+<tr class="separator:ga9fc4421dbb833d5461e6d4e59dcfde55"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga329f1e2b94b33ba5e3918197030bcf03"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga329f1e2b94b33ba5e3918197030bcf03">GLM_ALIGNED_TYPEDEF</a> (highp_uint32_t, aligned_highp_uint32_t, 4)</td></tr>
+<tr class="separator:ga329f1e2b94b33ba5e3918197030bcf03"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga71e646f7e301aa422328194162c9c998"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga71e646f7e301aa422328194162c9c998">GLM_ALIGNED_TYPEDEF</a> (highp_uint64_t, aligned_highp_uint64_t, 8)</td></tr>
+<tr class="separator:ga71e646f7e301aa422328194162c9c998"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8942e09f479489441a7a5004c6d8cb66"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga8942e09f479489441a7a5004c6d8cb66">GLM_ALIGNED_TYPEDEF</a> (highp_u8, aligned_highp_u8, 1)</td></tr>
+<tr class="separator:ga8942e09f479489441a7a5004c6d8cb66"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaab32497d6e4db16ee439dbedd64c5865"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gaab32497d6e4db16ee439dbedd64c5865">GLM_ALIGNED_TYPEDEF</a> (highp_u16, aligned_highp_u16, 2)</td></tr>
+<tr class="separator:gaab32497d6e4db16ee439dbedd64c5865"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaaadbb34952eca8e3d7fe122c3e167742"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gaaadbb34952eca8e3d7fe122c3e167742">GLM_ALIGNED_TYPEDEF</a> (highp_u32, aligned_highp_u32, 4)</td></tr>
+<tr class="separator:gaaadbb34952eca8e3d7fe122c3e167742"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga92024d27c74a3650afb55ec8e024ed25"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga92024d27c74a3650afb55ec8e024ed25">GLM_ALIGNED_TYPEDEF</a> (highp_u64, aligned_highp_u64, 8)</td></tr>
+<tr class="separator:ga92024d27c74a3650afb55ec8e024ed25"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gabde1d0b4072df35453db76075ab896a6"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gabde1d0b4072df35453db76075ab896a6">GLM_ALIGNED_TYPEDEF</a> (uint8, aligned_uint8, 1)</td></tr>
+<tr class="separator:gabde1d0b4072df35453db76075ab896a6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga06c296c9e398b294c8c9dd2a7693dcbb"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga06c296c9e398b294c8c9dd2a7693dcbb">GLM_ALIGNED_TYPEDEF</a> (uint16, aligned_uint16, 2)</td></tr>
+<tr class="separator:ga06c296c9e398b294c8c9dd2a7693dcbb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gacf1744488c96ebd33c9f36ad33b2010a"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gacf1744488c96ebd33c9f36ad33b2010a">GLM_ALIGNED_TYPEDEF</a> (uint32, aligned_uint32, 4)</td></tr>
+<tr class="separator:gacf1744488c96ebd33c9f36ad33b2010a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3328061a64c20ba59d5f9da24c2cd059"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga3328061a64c20ba59d5f9da24c2cd059">GLM_ALIGNED_TYPEDEF</a> (uint64, aligned_uint64, 8)</td></tr>
+<tr class="separator:ga3328061a64c20ba59d5f9da24c2cd059"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf6ced36f13bae57f377bafa6f5fcc299"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gaf6ced36f13bae57f377bafa6f5fcc299">GLM_ALIGNED_TYPEDEF</a> (uint8_t, aligned_uint8_t, 1)</td></tr>
+<tr class="separator:gaf6ced36f13bae57f377bafa6f5fcc299"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafbc7fb7847bfc78a339d1d371c915c73"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gafbc7fb7847bfc78a339d1d371c915c73">GLM_ALIGNED_TYPEDEF</a> (uint16_t, aligned_uint16_t, 2)</td></tr>
+<tr class="separator:gafbc7fb7847bfc78a339d1d371c915c73"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa86bc56a73fd8120b1121b5f5e6245ae"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gaa86bc56a73fd8120b1121b5f5e6245ae">GLM_ALIGNED_TYPEDEF</a> (uint32_t, aligned_uint32_t, 4)</td></tr>
+<tr class="separator:gaa86bc56a73fd8120b1121b5f5e6245ae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga68c0b9e669060d0eb5ab8c3ddeb483d8"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga68c0b9e669060d0eb5ab8c3ddeb483d8">GLM_ALIGNED_TYPEDEF</a> (uint64_t, aligned_uint64_t, 8)</td></tr>
+<tr class="separator:ga68c0b9e669060d0eb5ab8c3ddeb483d8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4f3bab577daf3343e99cc005134bce86"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga4f3bab577daf3343e99cc005134bce86">GLM_ALIGNED_TYPEDEF</a> (u8, aligned_u8, 1)</td></tr>
+<tr class="separator:ga4f3bab577daf3343e99cc005134bce86"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga13a2391339d0790d43b76d00a7611c4f"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga13a2391339d0790d43b76d00a7611c4f">GLM_ALIGNED_TYPEDEF</a> (u16, aligned_u16, 2)</td></tr>
+<tr class="separator:ga13a2391339d0790d43b76d00a7611c4f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga197570e03acbc3d18ab698e342971e8f"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga197570e03acbc3d18ab698e342971e8f">GLM_ALIGNED_TYPEDEF</a> (u32, aligned_u32, 4)</td></tr>
+<tr class="separator:ga197570e03acbc3d18ab698e342971e8f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0f033b21e145a1faa32c62ede5878993"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga0f033b21e145a1faa32c62ede5878993">GLM_ALIGNED_TYPEDEF</a> (u64, aligned_u64, 8)</td></tr>
+<tr class="separator:ga0f033b21e145a1faa32c62ede5878993"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga509af83527f5cd512e9a7873590663aa"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga509af83527f5cd512e9a7873590663aa">GLM_ALIGNED_TYPEDEF</a> (uvec1, aligned_uvec1, 4)</td></tr>
+<tr class="separator:ga509af83527f5cd512e9a7873590663aa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga94e86186978c502c6dc0c0d9c4a30679"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga94e86186978c502c6dc0c0d9c4a30679">GLM_ALIGNED_TYPEDEF</a> (uvec2, aligned_uvec2, 8)</td></tr>
+<tr class="separator:ga94e86186978c502c6dc0c0d9c4a30679"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5cec574686a7f3c8ed24bb195c5e2d0a"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga5cec574686a7f3c8ed24bb195c5e2d0a">GLM_ALIGNED_TYPEDEF</a> (uvec3, aligned_uvec3, 16)</td></tr>
+<tr class="separator:ga5cec574686a7f3c8ed24bb195c5e2d0a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga47edfdcee9c89b1ebdaf20450323b1d4"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga47edfdcee9c89b1ebdaf20450323b1d4">GLM_ALIGNED_TYPEDEF</a> (uvec4, aligned_uvec4, 16)</td></tr>
+<tr class="separator:ga47edfdcee9c89b1ebdaf20450323b1d4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5611d6718e3a00096918a64192e73a45"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga5611d6718e3a00096918a64192e73a45">GLM_ALIGNED_TYPEDEF</a> (u8vec1, aligned_u8vec1, 1)</td></tr>
+<tr class="separator:ga5611d6718e3a00096918a64192e73a45"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga19837e6f72b60d994a805ef564c6c326"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga19837e6f72b60d994a805ef564c6c326">GLM_ALIGNED_TYPEDEF</a> (u8vec2, aligned_u8vec2, 2)</td></tr>
+<tr class="separator:ga19837e6f72b60d994a805ef564c6c326"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9740cf8e34f068049b42a2753f9601c2"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga9740cf8e34f068049b42a2753f9601c2">GLM_ALIGNED_TYPEDEF</a> (u8vec3, aligned_u8vec3, 4)</td></tr>
+<tr class="separator:ga9740cf8e34f068049b42a2753f9601c2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8b8588bb221448f5541a858903822a57"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga8b8588bb221448f5541a858903822a57">GLM_ALIGNED_TYPEDEF</a> (u8vec4, aligned_u8vec4, 4)</td></tr>
+<tr class="separator:ga8b8588bb221448f5541a858903822a57"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga991abe990c16de26b2129d6bc2f4c051"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga991abe990c16de26b2129d6bc2f4c051">GLM_ALIGNED_TYPEDEF</a> (u16vec1, aligned_u16vec1, 2)</td></tr>
+<tr class="separator:ga991abe990c16de26b2129d6bc2f4c051"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac01bb9fc32a1cd76c2b80d030f71df4c"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gac01bb9fc32a1cd76c2b80d030f71df4c">GLM_ALIGNED_TYPEDEF</a> (u16vec2, aligned_u16vec2, 4)</td></tr>
+<tr class="separator:gac01bb9fc32a1cd76c2b80d030f71df4c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga09540dbca093793a36a8997e0d4bee77"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga09540dbca093793a36a8997e0d4bee77">GLM_ALIGNED_TYPEDEF</a> (u16vec3, aligned_u16vec3, 8)</td></tr>
+<tr class="separator:ga09540dbca093793a36a8997e0d4bee77"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaecafb5996f5a44f57e34d29c8670741e"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gaecafb5996f5a44f57e34d29c8670741e">GLM_ALIGNED_TYPEDEF</a> (u16vec4, aligned_u16vec4, 8)</td></tr>
+<tr class="separator:gaecafb5996f5a44f57e34d29c8670741e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac6b161a04d2f8408fe1c9d857e8daac0"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gac6b161a04d2f8408fe1c9d857e8daac0">GLM_ALIGNED_TYPEDEF</a> (u32vec1, aligned_u32vec1, 4)</td></tr>
+<tr class="separator:gac6b161a04d2f8408fe1c9d857e8daac0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1fa0dfc8feb0fa17dab2acd43e05342b"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga1fa0dfc8feb0fa17dab2acd43e05342b">GLM_ALIGNED_TYPEDEF</a> (u32vec2, aligned_u32vec2, 8)</td></tr>
+<tr class="separator:ga1fa0dfc8feb0fa17dab2acd43e05342b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0019500abbfa9c66eff61ca75eaaed94"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga0019500abbfa9c66eff61ca75eaaed94">GLM_ALIGNED_TYPEDEF</a> (u32vec3, aligned_u32vec3, 16)</td></tr>
+<tr class="separator:ga0019500abbfa9c66eff61ca75eaaed94"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga14fd29d01dae7b08a04e9facbcc18824"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga14fd29d01dae7b08a04e9facbcc18824">GLM_ALIGNED_TYPEDEF</a> (u32vec4, aligned_u32vec4, 16)</td></tr>
+<tr class="separator:ga14fd29d01dae7b08a04e9facbcc18824"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab253845f534a67136f9619843cade903"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gab253845f534a67136f9619843cade903">GLM_ALIGNED_TYPEDEF</a> (u64vec1, aligned_u64vec1, 8)</td></tr>
+<tr class="separator:gab253845f534a67136f9619843cade903"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga929427a7627940cdf3304f9c050b677d"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga929427a7627940cdf3304f9c050b677d">GLM_ALIGNED_TYPEDEF</a> (u64vec2, aligned_u64vec2, 16)</td></tr>
+<tr class="separator:ga929427a7627940cdf3304f9c050b677d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae373b6c04fdf9879f33d63e6949c037e"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gae373b6c04fdf9879f33d63e6949c037e">GLM_ALIGNED_TYPEDEF</a> (u64vec3, aligned_u64vec3, 32)</td></tr>
+<tr class="separator:gae373b6c04fdf9879f33d63e6949c037e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga53a8a03dca2015baec4584f45b8e9cdc"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga53a8a03dca2015baec4584f45b8e9cdc">GLM_ALIGNED_TYPEDEF</a> (u64vec4, aligned_u64vec4, 32)</td></tr>
+<tr class="separator:ga53a8a03dca2015baec4584f45b8e9cdc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab3301bae94ef5bf59fbdd9a24e7d2a01"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gab3301bae94ef5bf59fbdd9a24e7d2a01">GLM_ALIGNED_TYPEDEF</a> (float32, aligned_float32, 4)</td></tr>
+<tr class="separator:gab3301bae94ef5bf59fbdd9a24e7d2a01"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga75930684ff2233171c573e603f216162"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga75930684ff2233171c573e603f216162">GLM_ALIGNED_TYPEDEF</a> (float64, aligned_float64, 8)</td></tr>
+<tr class="separator:ga75930684ff2233171c573e603f216162"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gada9b0bea273d3ae0286f891533b9568f"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gada9b0bea273d3ae0286f891533b9568f">GLM_ALIGNED_TYPEDEF</a> (float32_t, aligned_float32_t, 4)</td></tr>
+<tr class="separator:gada9b0bea273d3ae0286f891533b9568f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6e3a2d83b131336219a0f4c7cbba2a48"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga6e3a2d83b131336219a0f4c7cbba2a48">GLM_ALIGNED_TYPEDEF</a> (float64_t, aligned_float64_t, 8)</td></tr>
+<tr class="separator:ga6e3a2d83b131336219a0f4c7cbba2a48"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gadbce23b9f23d77bb3884e289a574ebd5"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gadbce23b9f23d77bb3884e289a574ebd5">GLM_ALIGNED_TYPEDEF</a> (float32, aligned_f32, 4)</td></tr>
+<tr class="separator:gadbce23b9f23d77bb3884e289a574ebd5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa4deaa0dea930c393d55e7a4352b0a20"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gaa4deaa0dea930c393d55e7a4352b0a20">GLM_ALIGNED_TYPEDEF</a> (float64, aligned_f64, 8)</td></tr>
+<tr class="separator:gaa4deaa0dea930c393d55e7a4352b0a20"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga81bc497b2bfc6f80bab690c6ee28f0f9"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga81bc497b2bfc6f80bab690c6ee28f0f9">GLM_ALIGNED_TYPEDEF</a> (vec1, aligned_vec1, 4)</td></tr>
+<tr class="separator:ga81bc497b2bfc6f80bab690c6ee28f0f9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gada3e8f783e9d4b90006695a16c39d4d4"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gada3e8f783e9d4b90006695a16c39d4d4">GLM_ALIGNED_TYPEDEF</a> (vec2, aligned_vec2, 8)</td></tr>
+<tr class="separator:gada3e8f783e9d4b90006695a16c39d4d4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab8d081fac3a38d6f55fa552f32168d32"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gab8d081fac3a38d6f55fa552f32168d32">GLM_ALIGNED_TYPEDEF</a> (vec3, aligned_vec3, 16)</td></tr>
+<tr class="separator:gab8d081fac3a38d6f55fa552f32168d32"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga12fe7b9769c964c5b48dcfd8b7f40198"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga12fe7b9769c964c5b48dcfd8b7f40198">GLM_ALIGNED_TYPEDEF</a> (vec4, aligned_vec4, 16)</td></tr>
+<tr class="separator:ga12fe7b9769c964c5b48dcfd8b7f40198"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaefab04611c7f8fe1fd9be3071efea6cc"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gaefab04611c7f8fe1fd9be3071efea6cc">GLM_ALIGNED_TYPEDEF</a> (fvec1, aligned_fvec1, 4)</td></tr>
+<tr class="separator:gaefab04611c7f8fe1fd9be3071efea6cc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2543c05ba19b3bd19d45b1227390c5b4"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga2543c05ba19b3bd19d45b1227390c5b4">GLM_ALIGNED_TYPEDEF</a> (fvec2, aligned_fvec2, 8)</td></tr>
+<tr class="separator:ga2543c05ba19b3bd19d45b1227390c5b4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga009afd727fd657ef33a18754d6d28f60"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga009afd727fd657ef33a18754d6d28f60">GLM_ALIGNED_TYPEDEF</a> (fvec3, aligned_fvec3, 16)</td></tr>
+<tr class="separator:ga009afd727fd657ef33a18754d6d28f60"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2f26177e74bfb301a3d0e02ec3c3ef53"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga2f26177e74bfb301a3d0e02ec3c3ef53">GLM_ALIGNED_TYPEDEF</a> (fvec4, aligned_fvec4, 16)</td></tr>
+<tr class="separator:ga2f26177e74bfb301a3d0e02ec3c3ef53"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga309f495a1d6b75ddf195b674b65cb1e4"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga309f495a1d6b75ddf195b674b65cb1e4">GLM_ALIGNED_TYPEDEF</a> (f32vec1, aligned_f32vec1, 4)</td></tr>
+<tr class="separator:ga309f495a1d6b75ddf195b674b65cb1e4"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5e185865a2217d0cd47187644683a8c3"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga5e185865a2217d0cd47187644683a8c3">GLM_ALIGNED_TYPEDEF</a> (f32vec2, aligned_f32vec2, 8)</td></tr>
+<tr class="separator:ga5e185865a2217d0cd47187644683a8c3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gade4458b27b039b9ca34f8ec049f3115a"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gade4458b27b039b9ca34f8ec049f3115a">GLM_ALIGNED_TYPEDEF</a> (f32vec3, aligned_f32vec3, 16)</td></tr>
+<tr class="separator:gade4458b27b039b9ca34f8ec049f3115a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2e8a12c5e6a9c4ae4ddaeda1d1cffe3b"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga2e8a12c5e6a9c4ae4ddaeda1d1cffe3b">GLM_ALIGNED_TYPEDEF</a> (f32vec4, aligned_f32vec4, 16)</td></tr>
+<tr class="separator:ga2e8a12c5e6a9c4ae4ddaeda1d1cffe3b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3e0f35fa0c626285a8bad41707e7316c"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga3e0f35fa0c626285a8bad41707e7316c">GLM_ALIGNED_TYPEDEF</a> (dvec1, aligned_dvec1, 8)</td></tr>
+<tr class="separator:ga3e0f35fa0c626285a8bad41707e7316c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga78bfec2f185d1d365ea0a9ef1e3d45b8"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga78bfec2f185d1d365ea0a9ef1e3d45b8">GLM_ALIGNED_TYPEDEF</a> (dvec2, aligned_dvec2, 16)</td></tr>
+<tr class="separator:ga78bfec2f185d1d365ea0a9ef1e3d45b8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga01fe6fee6db5df580b6724a7e681f069"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga01fe6fee6db5df580b6724a7e681f069">GLM_ALIGNED_TYPEDEF</a> (dvec3, aligned_dvec3, 32)</td></tr>
+<tr class="separator:ga01fe6fee6db5df580b6724a7e681f069"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga687d5b8f551d5af32425c0b2fba15e99"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga687d5b8f551d5af32425c0b2fba15e99">GLM_ALIGNED_TYPEDEF</a> (dvec4, aligned_dvec4, 32)</td></tr>
+<tr class="separator:ga687d5b8f551d5af32425c0b2fba15e99"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8e842371d46842ff8f1813419ba49d0f"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga8e842371d46842ff8f1813419ba49d0f">GLM_ALIGNED_TYPEDEF</a> (f64vec1, aligned_f64vec1, 8)</td></tr>
+<tr class="separator:ga8e842371d46842ff8f1813419ba49d0f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga32814aa0f19316b43134fc25f2aad2b9"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga32814aa0f19316b43134fc25f2aad2b9">GLM_ALIGNED_TYPEDEF</a> (f64vec2, aligned_f64vec2, 16)</td></tr>
+<tr class="separator:ga32814aa0f19316b43134fc25f2aad2b9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf3d3bbc1e93909b689123b085e177a14"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gaf3d3bbc1e93909b689123b085e177a14">GLM_ALIGNED_TYPEDEF</a> (f64vec3, aligned_f64vec3, 32)</td></tr>
+<tr class="separator:gaf3d3bbc1e93909b689123b085e177a14"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga804c654cead1139bd250f90f9bb01fad"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga804c654cead1139bd250f90f9bb01fad">GLM_ALIGNED_TYPEDEF</a> (f64vec4, aligned_f64vec4, 32)</td></tr>
+<tr class="separator:ga804c654cead1139bd250f90f9bb01fad"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafed7d010235a3aa7ea2f88646858f2ae"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gafed7d010235a3aa7ea2f88646858f2ae">GLM_ALIGNED_TYPEDEF</a> (mat2, aligned_mat2, 16)</td></tr>
+<tr class="separator:gafed7d010235a3aa7ea2f88646858f2ae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga17f911ee7b78ca6d1b91c4ab51ddb73c"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga17f911ee7b78ca6d1b91c4ab51ddb73c">GLM_ALIGNED_TYPEDEF</a> (mat3, aligned_mat3, 16)</td></tr>
+<tr class="separator:ga17f911ee7b78ca6d1b91c4ab51ddb73c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga31940e6012b72110e26fdb0f54805033"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga31940e6012b72110e26fdb0f54805033">GLM_ALIGNED_TYPEDEF</a> (mat4, aligned_mat4, 16)</td></tr>
+<tr class="separator:ga31940e6012b72110e26fdb0f54805033"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga01de96cd0b541c52d2b4a3faf65822e9"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga01de96cd0b541c52d2b4a3faf65822e9">GLM_ALIGNED_TYPEDEF</a> (mat2x2, aligned_mat2x2, 16)</td></tr>
+<tr class="separator:ga01de96cd0b541c52d2b4a3faf65822e9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac88a191b004bd341e64fc53b5a4d00e3"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gac88a191b004bd341e64fc53b5a4d00e3">GLM_ALIGNED_TYPEDEF</a> (mat3x3, aligned_mat3x3, 16)</td></tr>
+<tr class="separator:gac88a191b004bd341e64fc53b5a4d00e3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gabe8c745fa2ced44a600a6e3f19991161"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gabe8c745fa2ced44a600a6e3f19991161">GLM_ALIGNED_TYPEDEF</a> (mat4x4, aligned_mat4x4, 16)</td></tr>
+<tr class="separator:gabe8c745fa2ced44a600a6e3f19991161"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga719da577361541a4c43a2dd1d0e361e1"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga719da577361541a4c43a2dd1d0e361e1">GLM_ALIGNED_TYPEDEF</a> (fmat2x2, aligned_fmat2, 16)</td></tr>
+<tr class="separator:ga719da577361541a4c43a2dd1d0e361e1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6e7ee4f541e1d7db66cd1a224caacafb"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga6e7ee4f541e1d7db66cd1a224caacafb">GLM_ALIGNED_TYPEDEF</a> (fmat3x3, aligned_fmat3, 16)</td></tr>
+<tr class="separator:ga6e7ee4f541e1d7db66cd1a224caacafb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae5d672d359f2a39f63f98c7975057486"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gae5d672d359f2a39f63f98c7975057486">GLM_ALIGNED_TYPEDEF</a> (fmat4x4, aligned_fmat4, 16)</td></tr>
+<tr class="separator:gae5d672d359f2a39f63f98c7975057486"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6fa2df037dbfc5fe8c8e0b4db8a34953"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga6fa2df037dbfc5fe8c8e0b4db8a34953">GLM_ALIGNED_TYPEDEF</a> (fmat2x2, aligned_fmat2x2, 16)</td></tr>
+<tr class="separator:ga6fa2df037dbfc5fe8c8e0b4db8a34953"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0743b4f4f69a3227b82ff58f6abbad62"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga0743b4f4f69a3227b82ff58f6abbad62">GLM_ALIGNED_TYPEDEF</a> (fmat2x3, aligned_fmat2x3, 16)</td></tr>
+<tr class="separator:ga0743b4f4f69a3227b82ff58f6abbad62"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1a76b325fdf70f961d835edd182c63dd"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga1a76b325fdf70f961d835edd182c63dd">GLM_ALIGNED_TYPEDEF</a> (fmat2x4, aligned_fmat2x4, 16)</td></tr>
+<tr class="separator:ga1a76b325fdf70f961d835edd182c63dd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4b4e181cd041ba28c3163e7b8074aef0"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga4b4e181cd041ba28c3163e7b8074aef0">GLM_ALIGNED_TYPEDEF</a> (fmat3x2, aligned_fmat3x2, 16)</td></tr>
+<tr class="separator:ga4b4e181cd041ba28c3163e7b8074aef0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga27b13f465abc8a40705698145e222c3f"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga27b13f465abc8a40705698145e222c3f">GLM_ALIGNED_TYPEDEF</a> (fmat3x3, aligned_fmat3x3, 16)</td></tr>
+<tr class="separator:ga27b13f465abc8a40705698145e222c3f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2608d19cc275830a6f8c0b6405625a4f"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga2608d19cc275830a6f8c0b6405625a4f">GLM_ALIGNED_TYPEDEF</a> (fmat3x4, aligned_fmat3x4, 16)</td></tr>
+<tr class="separator:ga2608d19cc275830a6f8c0b6405625a4f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga93f09768241358a287c4cca538f1f7e7"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga93f09768241358a287c4cca538f1f7e7">GLM_ALIGNED_TYPEDEF</a> (fmat4x2, aligned_fmat4x2, 16)</td></tr>
+<tr class="separator:ga93f09768241358a287c4cca538f1f7e7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7c117e3ecca089e10247b1d41d88aff9"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga7c117e3ecca089e10247b1d41d88aff9">GLM_ALIGNED_TYPEDEF</a> (fmat4x3, aligned_fmat4x3, 16)</td></tr>
+<tr class="separator:ga7c117e3ecca089e10247b1d41d88aff9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga07c75cd04ba42dc37fa3e105f89455c5"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga07c75cd04ba42dc37fa3e105f89455c5">GLM_ALIGNED_TYPEDEF</a> (fmat4x4, aligned_fmat4x4, 16)</td></tr>
+<tr class="separator:ga07c75cd04ba42dc37fa3e105f89455c5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga65ff0d690a34a4d7f46f9b2eb51525ee"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga65ff0d690a34a4d7f46f9b2eb51525ee">GLM_ALIGNED_TYPEDEF</a> (f32mat2x2, aligned_f32mat2, 16)</td></tr>
+<tr class="separator:ga65ff0d690a34a4d7f46f9b2eb51525ee"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gadd8ddbe2bf65ccede865ba2f510176dc"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gadd8ddbe2bf65ccede865ba2f510176dc">GLM_ALIGNED_TYPEDEF</a> (f32mat3x3, aligned_f32mat3, 16)</td></tr>
+<tr class="separator:gadd8ddbe2bf65ccede865ba2f510176dc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf18dbff14bf13d3ff540c517659ec045"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gaf18dbff14bf13d3ff540c517659ec045">GLM_ALIGNED_TYPEDEF</a> (f32mat4x4, aligned_f32mat4, 16)</td></tr>
+<tr class="separator:gaf18dbff14bf13d3ff540c517659ec045"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga66339f6139bf7ff19e245beb33f61cc8"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga66339f6139bf7ff19e245beb33f61cc8">GLM_ALIGNED_TYPEDEF</a> (f32mat2x2, aligned_f32mat2x2, 16)</td></tr>
+<tr class="separator:ga66339f6139bf7ff19e245beb33f61cc8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1558a48b3934011b52612809f443e46d"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga1558a48b3934011b52612809f443e46d">GLM_ALIGNED_TYPEDEF</a> (f32mat2x3, aligned_f32mat2x3, 16)</td></tr>
+<tr class="separator:ga1558a48b3934011b52612809f443e46d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa52e5732daa62851627021ad551c7680"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gaa52e5732daa62851627021ad551c7680">GLM_ALIGNED_TYPEDEF</a> (f32mat2x4, aligned_f32mat2x4, 16)</td></tr>
+<tr class="separator:gaa52e5732daa62851627021ad551c7680"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac09663c42566bcb58d23c6781ac4e85a"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gac09663c42566bcb58d23c6781ac4e85a">GLM_ALIGNED_TYPEDEF</a> (f32mat3x2, aligned_f32mat3x2, 16)</td></tr>
+<tr class="separator:gac09663c42566bcb58d23c6781ac4e85a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3f510999e59e1b309113e1d561162b29"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga3f510999e59e1b309113e1d561162b29">GLM_ALIGNED_TYPEDEF</a> (f32mat3x3, aligned_f32mat3x3, 16)</td></tr>
+<tr class="separator:ga3f510999e59e1b309113e1d561162b29"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2c9c94f0c89cd71ce56551db6cf4aaec"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga2c9c94f0c89cd71ce56551db6cf4aaec">GLM_ALIGNED_TYPEDEF</a> (f32mat3x4, aligned_f32mat3x4, 16)</td></tr>
+<tr class="separator:ga2c9c94f0c89cd71ce56551db6cf4aaec"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga99ce8274c750fbfdf0e70c95946a2875"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga99ce8274c750fbfdf0e70c95946a2875">GLM_ALIGNED_TYPEDEF</a> (f32mat4x2, aligned_f32mat4x2, 16)</td></tr>
+<tr class="separator:ga99ce8274c750fbfdf0e70c95946a2875"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9476ef66790239df53dbe66f3989c3b5"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga9476ef66790239df53dbe66f3989c3b5">GLM_ALIGNED_TYPEDEF</a> (f32mat4x3, aligned_f32mat4x3, 16)</td></tr>
+<tr class="separator:ga9476ef66790239df53dbe66f3989c3b5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gacc429b3b0b49921e12713b6d31e14e1d"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gacc429b3b0b49921e12713b6d31e14e1d">GLM_ALIGNED_TYPEDEF</a> (f32mat4x4, aligned_f32mat4x4, 16)</td></tr>
+<tr class="separator:gacc429b3b0b49921e12713b6d31e14e1d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga88f6c6fa06e6e64479763e69444669cf"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga88f6c6fa06e6e64479763e69444669cf">GLM_ALIGNED_TYPEDEF</a> (f64mat2x2, aligned_f64mat2, 32)</td></tr>
+<tr class="separator:ga88f6c6fa06e6e64479763e69444669cf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaae8e4639c991e64754145ab8e4c32083"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gaae8e4639c991e64754145ab8e4c32083">GLM_ALIGNED_TYPEDEF</a> (f64mat3x3, aligned_f64mat3, 32)</td></tr>
+<tr class="separator:gaae8e4639c991e64754145ab8e4c32083"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6e9094f3feb3b5b49d0f83683a101fde"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga6e9094f3feb3b5b49d0f83683a101fde">GLM_ALIGNED_TYPEDEF</a> (f64mat4x4, aligned_f64mat4, 32)</td></tr>
+<tr class="separator:ga6e9094f3feb3b5b49d0f83683a101fde"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gadbd2c639c03de1c3e9591b5a39f65559"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gadbd2c639c03de1c3e9591b5a39f65559">GLM_ALIGNED_TYPEDEF</a> (f64mat2x2, aligned_f64mat2x2, 32)</td></tr>
+<tr class="separator:gadbd2c639c03de1c3e9591b5a39f65559"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab059d7b9fe2094acc563b7223987499f"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gab059d7b9fe2094acc563b7223987499f">GLM_ALIGNED_TYPEDEF</a> (f64mat2x3, aligned_f64mat2x3, 32)</td></tr>
+<tr class="separator:gab059d7b9fe2094acc563b7223987499f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gabbc811d1c52ed2b8cfcaff1378f75c69"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gabbc811d1c52ed2b8cfcaff1378f75c69">GLM_ALIGNED_TYPEDEF</a> (f64mat2x4, aligned_f64mat2x4, 32)</td></tr>
+<tr class="separator:gabbc811d1c52ed2b8cfcaff1378f75c69"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9ddf5212777734d2fd841a84439f3bdf"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga9ddf5212777734d2fd841a84439f3bdf">GLM_ALIGNED_TYPEDEF</a> (f64mat3x2, aligned_f64mat3x2, 32)</td></tr>
+<tr class="separator:ga9ddf5212777734d2fd841a84439f3bdf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad1dda32ed09f94bfcf0a7d8edfb6cf13"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gad1dda32ed09f94bfcf0a7d8edfb6cf13">GLM_ALIGNED_TYPEDEF</a> (f64mat3x3, aligned_f64mat3x3, 32)</td></tr>
+<tr class="separator:gad1dda32ed09f94bfcf0a7d8edfb6cf13"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5875e0fa72f07e271e7931811cbbf31a"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga5875e0fa72f07e271e7931811cbbf31a">GLM_ALIGNED_TYPEDEF</a> (f64mat3x4, aligned_f64mat3x4, 32)</td></tr>
+<tr class="separator:ga5875e0fa72f07e271e7931811cbbf31a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga41e82cd6ac07f912ba2a2d45799dcf0d"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga41e82cd6ac07f912ba2a2d45799dcf0d">GLM_ALIGNED_TYPEDEF</a> (f64mat4x2, aligned_f64mat4x2, 32)</td></tr>
+<tr class="separator:ga41e82cd6ac07f912ba2a2d45799dcf0d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0892638d6ba773043b3d63d1d092622e"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga0892638d6ba773043b3d63d1d092622e">GLM_ALIGNED_TYPEDEF</a> (f64mat4x3, aligned_f64mat4x3, 32)</td></tr>
+<tr class="separator:ga0892638d6ba773043b3d63d1d092622e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga912a16432608b822f1e13607529934c1"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga912a16432608b822f1e13607529934c1">GLM_ALIGNED_TYPEDEF</a> (f64mat4x4, aligned_f64mat4x4, 32)</td></tr>
+<tr class="separator:ga912a16432608b822f1e13607529934c1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafd945a8ea86b042aba410e0560df9a3d"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gafd945a8ea86b042aba410e0560df9a3d">GLM_ALIGNED_TYPEDEF</a> (quat, aligned_quat, 16)</td></tr>
+<tr class="separator:gafd945a8ea86b042aba410e0560df9a3d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad8c4bfacff70e57dc8303634c8bfce35"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gad8c4bfacff70e57dc8303634c8bfce35">GLM_ALIGNED_TYPEDEF</a> (fquat, aligned_fquat, 16)</td></tr>
+<tr class="separator:gad8c4bfacff70e57dc8303634c8bfce35"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaabc28c84a3288b697605d4688686f9a9"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gaabc28c84a3288b697605d4688686f9a9">GLM_ALIGNED_TYPEDEF</a> (dquat, aligned_dquat, 32)</td></tr>
+<tr class="separator:gaabc28c84a3288b697605d4688686f9a9"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1ed8aeb5ca67fade269a46105f1bf273"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga1ed8aeb5ca67fade269a46105f1bf273">GLM_ALIGNED_TYPEDEF</a> (f32quat, aligned_f32quat, 16)</td></tr>
+<tr class="separator:ga1ed8aeb5ca67fade269a46105f1bf273"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga95cc03b8b475993fa50e05e38e203303"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga95cc03b8b475993fa50e05e38e203303">GLM_ALIGNED_TYPEDEF</a> (f64quat, aligned_f64quat, 32)</td></tr>
+<tr class="separator:ga95cc03b8b475993fa50e05e38e203303"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Defines aligned types. </p>
+<p><a class="el" href="a00158.html">Precision types</a> defines aligned types.</p>
+<p><<a class="el" href="a00109.html" title="GLM_GTX_type_aligned ">glm/gtx/type_aligned.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="gab5cd5c5fad228b25c782084f1cc30114"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga760bcf26fdb23a2c3ecad3c928a19ae6">lowp_int8</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_lowp_int8 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">1 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision 8 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga5bb5dd895ef625c1b113f2cf400186b0"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga698e36b01167fc0f037889334dce8def">lowp_int16</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_lowp_int16 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">2 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision 16 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gac6efa54cf7c6c86f7158922abdb1a430"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga864aabca5f3296e176e0c3ed9cc16b02">lowp_int32</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_lowp_int32 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">4 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision 32 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga6612eb77c8607048e7552279a11eeb5f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gaf645b1a60203b39c0207baff5e3d8c3c">lowp_int64</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_lowp_int64 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">8 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision 64 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga7ddc1848ff2223026db8968ce0c97497"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga119c41d73fe9977358174eb3ac1035a3">lowp_int8_t</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_lowp_int8_t </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">1 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision 8 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga22240dd9458b0f8c11fbcc4f48714f68"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga8b2cd8d31eb345b2d641d9261c38db1a">lowp_int16_t</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_lowp_int16_t </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">2 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision 16 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga8130ea381d76a2cc34a93ccbb6cf487d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga0350631d35ff800e6133ac6243b13cbc">lowp_int32_t</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_lowp_int32_t </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">4 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision 32 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga7ccb60f3215d293fd62b33b31ed0e7be"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gaebf341fc4a5be233f7dde962c2e33847">lowp_int64_t</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_lowp_int64_t </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">8 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision 64 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gac20d508d2ef5cc95ad3daf083c57ec2a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga552a6bde5e75984efb0f863278da2e54">lowp_i8</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_lowp_i8 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">1 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision 8 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga50257b48069a31d0c8d9c1f644d267de"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga392b673fd10847bfb78fb808c6cf8ff7">lowp_i16</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_lowp_i16 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">2 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision 16 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaa07e98e67b7a3435c0746018c7a2a839"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga7ff73a45cea9613ebf1a9fad0b9f82ac">lowp_i32</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_lowp_i32 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">4 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision 32 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga62601fc6f8ca298b77285bedf03faffd"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga354736e0c645099cd44c42fb2f87c2b8">lowp_i64</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_lowp_i64 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">8 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision 64 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gac8cff825951aeb54dd846037113c72db"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga6fbd69cbdaa44345bff923a2cf63de7e">mediump_int8</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_mediump_int8 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">1 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 8 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga78f443d88f438575a62b5df497cdf66b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gadff3608baa4b5bd3ed28f95c1c2c345d">mediump_int16</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_mediump_int16 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">2 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 16 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga0680cd3b5d4e8006985fb41a4f9b57af"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga5244cef85d6e870e240c76428a262ae8">mediump_int32</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_mediump_int32 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">4 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 32 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gad9e5babb1dd3e3531b42c37bf25dd951"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga7b968f2b86a0442a89c7359171e1d866">mediump_int64</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_mediump_int64 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">8 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 64 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga353fd9fa8a9ad952fcabd0d53ad9a6dd"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga6d7b3789ecb932c26430009478cac7ae">mediump_int8_t</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_mediump_int8_t </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">1 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 8 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga2196442c0e5c5e8c77842de388c42521"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga80e72fe94c88498537e8158ba7591c54">mediump_int16_t</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_mediump_int16_t </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">2 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 16 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga1284488189daf897cf095c5eefad9744"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga26fc7ced1ad7ca5024f1c973c8dc9180">mediump_int32_t</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_mediump_int32_t </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">4 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 32 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga73fdc86a539808af58808b7c60a1c4d8"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gac3bc41bcac61d1ba8f02a6f68ce23f64">mediump_int64_t</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_mediump_int64_t </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">8 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 64 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gafafeea923e1983262c972e2b83922d3b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gacf1ded173e1e2d049c511d095b259e21">mediump_i8</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_mediump_i8 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">1 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 8 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga4b35ca5fe8f55c9d2fe54fdb8d8896f4"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga62a17cddeb4dffb4e18fe3aea23f051a">mediump_i16</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_mediump_i16 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">2 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 16 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga63b882e29170d428463d99c3d630acc6"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gaf5e94bf2a20af7601787c154751dc2e1">mediump_i32</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_mediump_i32 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">4 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 32 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga8b20507bb048c1edea2d441cc953e6f0"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga3ebcb1f6d8d8387253de8bccb058d77f">mediump_i64</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_mediump_i64 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">8 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 64 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga56c5ca60813027b603c7b61425a0479d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gad0549c902a96a7164e4ac858d5f39dbf">highp_int8</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_highp_int8 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">1 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High precision 8 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga7a751b3aff24c0259f4a7357c2969089"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga5fde0fa4a3852a9dd5d637a92ee74718">highp_int16</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_highp_int16 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">2 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High precision 16 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga70cd2144351c556469ee6119e59971fc"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga84ed04b4e0de18c977e932d617e7c223">highp_int32</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_highp_int32 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">4 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High precision 32 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga46bbf08dc004d8c433041e0b5018a5d3"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga226a8d52b4e3f77aaa6231135e886aac">highp_int64</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_highp_int64 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">8 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High precision 64 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gab3e10c77a20d1abad2de1c561c7a5c18"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga1085c50dd8fbeb5e7e609b1c127492a5">highp_int8_t</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_highp_int8_t </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">1 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High precision 8 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga968f30319ebeaca9ebcd3a25a8e139fb"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gacaea06d0a79ef3172e887a7a6ba434ff">highp_int16_t</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_highp_int16_t </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">2 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High precision 16 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaae773c28e6390c6aa76f5b678b7098a3"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga2c71c8bd9e2fe7d2e93ca250d8b6157f">highp_int32_t</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_highp_int32_t </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">4 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High precision 32 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga790cfff1ca39d0ed696ffed980809311"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga73c6abb280a45feeff60f9accaee91f3">highp_int64_t</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_highp_int64_t </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">8 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High precision 64 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga8265b91eb23c120a9b0c3e381bc37b96"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gacb88796f2d08ef253d0345aff20c3aee">highp_i8</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_highp_i8 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">1 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High precision 8 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gae6d384de17588d8edb894fbe06e0d410"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga0336abc2604dd2c20c30e036454b64f8">highp_i16</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_highp_i16 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">2 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High precision 16 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga9c8172b745ee03fc5b2b91c350c2922f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga727675ac6b5d2fc699520e0059735e25">highp_i32</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_highp_i32 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">4 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High precision 32 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga77e0dff12aa4020ddc3f8cabbea7b2e6"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gac25db6d2b1e2a0f351b77ba3409ac4cd">highp_i64</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_highp_i64 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">8 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High precision 64 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gabd82b9faa9d4d618dbbe0fc8a1efee63"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga41c6189f6485c2825d60fdc835b3a2b0">int8</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_int8 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">1 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 8 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga285649744560be21000cfd81bbb5d507"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga302041c186d0d028bea31b711fe16759">int16</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_int16 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">2 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 16 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga07732da630b2deda428ce95c0ecaf3ff"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga8df669f4e7698dfe0c0354d92578d74f">int32</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_int32 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">4 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 32 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga1a8da2a8c51f69c07a2e7f473aa420f4"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gaff5189f97f9e842d9636a0f240001b2e">int64</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_int64 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">8 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 64 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga848aedf13e2d9738acf0bb482c590174"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga4bf09d8838a86866b39ee6e109341645">int8_t</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_int8_t </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">1 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 8 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gafd2803d39049dd45a37a63931e25d943"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gae8f5e3e964ca2ae240adc2c0d74adede">int16_t</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_int16_t </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">2 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 16 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gae553b33349d6da832cf0724f1e024094"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga042ef09ff2f0cb24a36f541bcb3a3710">int32_t</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_int32_t </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">4 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 32 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga16d223a2b3409e812e1d3bd87f0e9e5c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga322a7d7d2c2c68994dc872a33de63c61">int64_t</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_int64_t </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">8 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 64 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga2de065d2ddfdb366bcd0febca79ae2ad"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga302ec977b0c0c3ea245b6c9275495355">i8</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_i8 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">1 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 8 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gabd786bdc20a11c8cb05c92c8212e28d3"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga3ab5fe184343d394fb6c2723c3ee3699">i16</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_i16 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">2 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 16 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gad4aefe56691cdb640c72f0d46d3fb532"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga96faea43ac5f875d2d3ffbf8d213e3eb">i32</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_i32 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">4 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 32 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga8fe9745f7de24a8394518152ff9fccdc"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gadb997e409103d4da18abd837e636a496">i64</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_i64 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">8 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 64 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaaad735483450099f7f882d4e3a3569bd"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype">ivec1 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="a00176.html#ga76298aed82a439063c3d55980c84aa0b">aligned_ivec1</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">4 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 32 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gac7b6f823802edbd6edbaf70ea25bf068"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00157.html#ga2ab812bd103527e2d6c62c2e2f5ee78f">ivec2</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="a00176.html#gae4f38fd2c86cee6940986197777b3ca4">aligned_ivec2</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">8 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 32 bit signed integer aligned vector of 2 components type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga3e235bcd2b8029613f25b8d40a2d3ef7"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00157.html#ga34aee73784bcc247d426250540c1911c">ivec3</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="a00176.html#ga32794322d294e5ace7fed4a61896f270">aligned_ivec3</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 32 bit signed integer aligned vector of 3 components type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga50d8a9523968c77f8325b4c9bfbff41e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00157.html#gaaa26c41d168dc00be0fe55f4d0a34224">ivec4</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="a00176.html#ga7f79eae5927c9033d84617e49f6f34e4">aligned_ivec4</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 32 bit signed integer aligned vector of 4 components type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga9ec20fdfb729c702032da9378c79679f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gab2329c5c14ff5a03b1ddec039e2c7409">i8vec1</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_i8vec1 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">1 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 8 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga25b3fe1d9e8d0a5e86c1949c1acd8131"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga6414484477e4c1b4863cf91af8fd4185">i8vec2</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_i8vec2 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">2 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 8 bit signed integer aligned vector of 2 components type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga2958f907719d94d8109b562540c910e2"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gaf4b5993e794e252607f91535b62a7e0c">i8vec3</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_i8vec3 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">4 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 8 bit signed integer aligned vector of 3 components type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga1fe6fc032a978f1c845fac9aa0668714"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga50e58885aee2cf01bb3ba472c5b1697e">i8vec4</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_i8vec4 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">4 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 8 bit signed integer aligned vector of 4 components type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaa4161e7a496dc96972254143fe873e55"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga28f03a39ac56c70f9bf3ada11cb60e3b">i16vec1</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_i16vec1 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">2 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 16 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga9d7cb211ccda69b1c22ddeeb0f3e7aba"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga110bec18ca44c41c76c3c9e4d7b5bd79">i16vec2</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_i16vec2 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">4 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 16 bit signed integer aligned vector of 2 components type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaaee91dd2ab34423bcc11072ef6bd0f02"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga973b226a9914db682c9372fc761fb535">i16vec3</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_i16vec3 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">8 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 16 bit signed integer aligned vector of 3 components type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga49f047ccaa8b31fad9f26c67bf9b3510"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gad73e5e905dcf2d8cab002b4ab46e9426">i16vec4</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_i16vec4 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">8 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 16 bit signed integer aligned vector of 4 components type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga904e9c2436bb099397c0823506a0771f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga4cca6bbd117c45f046291fc8e9d03765">i32vec1</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_i32vec1 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">4 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 32 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaf90651cf2f5e7ee2b11cfdc5a6749534"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga3c12cef4135603fd77d8fda85808730c">i32vec2</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_i32vec2 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">8 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 32 bit signed integer aligned vector of 2 components type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga7354a4ead8cb17868aec36b9c30d6010"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga40cd3f391c03512f158d10a70062264e">i32vec3</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_i32vec3 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 32 bit signed integer aligned vector of 3 components type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gad2ecbdea18732163e2636e27b37981ee"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gae3364a8090e7e1408056e00403dfecab">i32vec4</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_i32vec4 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 32 bit signed integer aligned vector of 4 components type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga965b1c9aa1800e93d4abc2eb2b5afcbf"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga5b4a3e499ee165efc0dc05add9c48235">i64vec1</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_i64vec1 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">8 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 64 bit signed integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga1f9e9c2ea2768675dff9bae5cde2d829"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gade69872a31f066e5ae212f1af6008edb">i64vec2</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_i64vec2 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 64 bit signed integer aligned vector of 2 components type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gad77c317b7d942322cd5be4c8127b3187"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga9ece7c77c7bca7a6b824ef9c600f5e5e">i64vec3</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_i64vec3 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">32 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 64 bit signed integer aligned vector of 3 components type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga716f8ea809bdb11b5b542d8b71aeb04f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga9756e45c8f80329257f3cbdabc3bd73c">i64vec4</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_i64vec4 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">32 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 64 bit signed integer aligned vector of 4 components type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gad46f8e9082d5878b1bc04f9c1471cdaa"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gaf49470869e9be2c059629b250619804e">lowp_uint8</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_lowp_uint8 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">1 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision 8 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga1246094581af624aca6c7499aaabf801"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gad68bfd9f881856fc863a6ebca0b67f78">lowp_uint16</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_lowp_uint16 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">2 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision 16 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga7a5009a1d0196bbf21dd7518f61f0249"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gaa6a5b461bbf5fe20982472aa51896d4b">lowp_uint32</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_lowp_uint32 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">4 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision 32 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga45213fd18b3bb1df391671afefe4d1e7"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gaa212b805736a759998e312cbdd550fae">lowp_uint64</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_lowp_uint64 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">8 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision 64 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga0ba26b4e3fd9ecbc25358efd68d8a4ca"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga667b2ece2b258be898812dc2177995d1">lowp_uint8_t</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_lowp_uint8_t </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">1 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision 8 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaf2b58f5fb6d4ec8ce7b76221d3af43e1"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga91c4815f93177eb423362fd296a87e9f">lowp_uint16_t</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_lowp_uint16_t </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">2 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision 16 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gadc246401847dcba155f0699425e49dcd"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gaf1b735b4b1145174f4e4167d13778f9b">lowp_uint32_t</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_lowp_uint32_t </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">4 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision 32 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaace64bddf51a9def01498da9a94fb01c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga8dd3a3281ae5c970ffe0c41d538aa153">lowp_uint64_t</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_lowp_uint64_t </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">8 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision 64 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gad7bb97c29d664bd86ffb1bed4abc5534"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga1b09f03da7ac43055c68a349d5445083">lowp_u8</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_lowp_u8 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">1 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision 8 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga404bba7785130e0b1384d695a9450b28"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga504ce1631cb2ac02fcf1d44d8c2aa126">lowp_u16</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_lowp_u16 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">2 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision 16 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga31ba41fd896257536958ec6080203d2a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga4f072ada9552e1e480bbb3b1acde5250">lowp_u32</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_lowp_u32 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">4 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision 32 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gacca5f13627f57b3505676e40a6e43e5e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga30069d1f02b19599cbfadf98c23ac6ed">lowp_u64</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_lowp_u64 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">8 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Low precision 64 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga5faf1d3e70bf33174dd7f3d01d5b883b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga1fa92a233b9110861cdbc8c2ccf0b5a3">mediump_uint8</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_mediump_uint8 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">1 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 8 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga727e2bf2c433bb3b0182605860a48363"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga2885a6c89916911e418c06bb76b9bdbb">mediump_uint16</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_mediump_uint16 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">2 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 16 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga12566ca66d5962dadb4a5eb4c74e891e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga34dd5ec1988c443bae80f1b20a8ade5f">mediump_uint32</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_mediump_uint32 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">4 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 32 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga7b66a97a8acaa35c5a377b947318c6bc"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga30652709815ad9404272a31957daa59e">mediump_uint64</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_mediump_uint64 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">8 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 64 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaa9cde002439b74fa66120a16a9f55fcc"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gadfe65c78231039e90507770db50c98c7">mediump_uint8_t</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_mediump_uint8_t </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">1 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 8 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga1ca98c67f7d1e975f7c5202f1da1df1f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga3963b1050fc65a383ee28e3f827b6e3e">mediump_uint16_t</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_mediump_uint16_t </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">2 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 16 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga1dc8bc6199d785f235576948d80a597c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gaf4dae276fd29623950de14a6ca2586b5">mediump_uint32_t</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_mediump_uint32_t </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">4 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 32 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gad14a0f2ec93519682b73d70b8e401d81"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga9b170dd4a8f38448a2dc93987c7875e9">mediump_uint64_t</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_mediump_uint64_t </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">8 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 64 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gada8b996eb6526dc1ead813bd49539d1b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gad1213a22bbb9e4107f07eaa4956f8281">mediump_u8</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_mediump_u8 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">1 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 8 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga28948f6bfb52b42deb9d73ae1ea8d8b0"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga9df98857be695d5a30cb30f5bfa38a80">mediump_u16</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_mediump_u16 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">2 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 16 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gad6a7c0b5630f89d3f1c5b4ef2919bb4c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga1bd0e914158bf03135f8a317de6debe9">mediump_u32</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_mediump_u32 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">4 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 32 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaa0fc531cbaa972ac3a0b86d21ef4a7fa"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga2af9490085ae3bdf36a544e9dd073610">mediump_u64</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_mediump_u64 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">8 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Medium precision 64 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga0ee829f7b754b262bbfe6317c0d678ac"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga97432f9979e73e66567361fd01e4cffb">highp_uint8</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_highp_uint8 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">1 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High precision 8 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga447848a817a626cae08cedc9778b331c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga746dc6da204f5622e395f492997dbf57">highp_uint16</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_highp_uint16 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">2 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High precision 16 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga6027ae13b2734f542a6e7beee11b8820"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga256b12b650c3f2fb86878fd1c5db8bc3">highp_uint32</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_highp_uint32 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">4 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High precision 32 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga2aca46c8608c95ef991ee4c332acde5f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gaa38d732f5d4a7bc42a1b43b9d3c141ce">highp_uint64</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_highp_uint64 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">8 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High precision 64 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaff50b10dd1c48be324fdaffd18e2c7ea"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gac4e00a26a2adb5f2c0a7096810df29e5">highp_uint8_t</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_highp_uint8_t </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">1 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High precision 8 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga9fc4421dbb833d5461e6d4e59dcfde55"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gacf54c3330ef60aa3d16cb676c7bcb8c7">highp_uint16_t</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_highp_uint16_t </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">2 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High precision 16 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga329f1e2b94b33ba5e3918197030bcf03"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gae978599c9711ac263ba732d4ac225b0e">highp_uint32_t</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_highp_uint32_t </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">4 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High precision 32 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga71e646f7e301aa422328194162c9c998"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gaa46172d7dc1c7ffe3e78107ff88adf08">highp_uint64_t</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_highp_uint64_t </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">8 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High precision 64 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga8942e09f479489441a7a5004c6d8cb66"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gacd1259f3a9e8d2a9df5be2d74322ef9c">highp_u8</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_highp_u8 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">1 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High precision 8 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaab32497d6e4db16ee439dbedd64c5865"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga8e62c883d13f47015f3b70ed88751369">highp_u16</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_highp_u16 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">2 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High precision 16 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaaadbb34952eca8e3d7fe122c3e167742"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga7a6f1929464dcc680b16381a4ee5f2cf">highp_u32</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_highp_u32 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">4 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High precision 32 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga92024d27c74a3650afb55ec8e024ed25"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga0c181fdf06a309691999926b6690c969">highp_u64</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_highp_u64 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">8 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>High precision 64 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gabde1d0b4072df35453db76075ab896a6"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga36475e31b1992cfde54c1a6f5a148865">uint8</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_uint8 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">1 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 8 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga06c296c9e398b294c8c9dd2a7693dcbb"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga13471cbbe74e4303a57f3743d007b74d">uint16</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_uint16 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">2 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 16 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gacf1744488c96ebd33c9f36ad33b2010a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga5fa3ddcab56c789bc272ff5651faa12d">uint32</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_uint32 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">4 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 32 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga3328061a64c20ba59d5f9da24c2cd059"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gab630f76c26b50298187f7889104d4b9c">uint64</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_uint64 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">8 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 64 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaf6ced36f13bae57f377bafa6f5fcc299"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga28d97808322d3c92186e4a0c067d7e8e">uint8_t</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_uint8_t </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">1 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 8 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gafbc7fb7847bfc78a339d1d371c915c73"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga91f91f411080c37730856ff5887f5bcf">uint16_t</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_uint16_t </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">2 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 16 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaa86bc56a73fd8120b1121b5f5e6245ae"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga2171d9dc1fefb1c82e2817f45b622eac">uint32_t</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_uint32_t </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">4 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 32 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga68c0b9e669060d0eb5ab8c3ddeb483d8"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga3999d3e7ff22025c16ddb601e14dfdee">uint64_t</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_uint64_t </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">8 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 64 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga4f3bab577daf3343e99cc005134bce86"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gaecc7082561fc9028b844b6cf3d305d36">u8</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_u8 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">1 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 8 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga13a2391339d0790d43b76d00a7611c4f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gaa2d7acc0adb536fab71fe261232a40ff">u16</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_u16 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">2 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 16 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga197570e03acbc3d18ab698e342971e8f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga8165913e068444f7842302d40ba897b9">u32</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_u32 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">4 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 32 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga0f033b21e145a1faa32c62ede5878993"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gaf3f312156984c365e9f65620354da70b">u64</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_u64 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">8 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 64 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga509af83527f5cd512e9a7873590663aa"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype">uvec1 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="a00176.html#ga1ff8ed402c93d280ff0597c1c5e7c548">aligned_uvec1</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">4 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 32 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga94e86186978c502c6dc0c0d9c4a30679"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00157.html#ga9bcffa2d49f28d16f680757b5c0e7c84">uvec2</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="a00176.html#ga074137e3be58528d67041c223d49f398">aligned_uvec2</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">8 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 32 bit unsigned integer aligned vector of 2 components type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga5cec574686a7f3c8ed24bb195c5e2d0a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00157.html#gae85537b672ffe0b3218cbdf1823e1c72">uvec3</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="a00176.html#ga2a8d9c3046f89d854eb758adfa0811c0">aligned_uvec3</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 32 bit unsigned integer aligned vector of 3 components type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga47edfdcee9c89b1ebdaf20450323b1d4"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00157.html#gaa7c3a0e7ae50c34c3290415c115f251e">uvec4</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="a00176.html#gabf842c45eea186170c267a328e3f3b7d">aligned_uvec4</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 32 bit unsigned integer aligned vector of 4 components type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga5611d6718e3a00096918a64192e73a45"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga92e0c191e5cc326255284d08be3af7c5">u8vec1</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_u8vec1 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">1 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 8 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga19837e6f72b60d994a805ef564c6c326"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga61667c99caf60ce6c48ebbbac72bd91d">u8vec2</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_u8vec2 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">2 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 8 bit unsigned integer aligned vector of 2 components type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga9740cf8e34f068049b42a2753f9601c2"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga8ca60d0ba6d438892be6017f43747661">u8vec3</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_u8vec3 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">4 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 8 bit unsigned integer aligned vector of 3 components type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga8b8588bb221448f5541a858903822a57"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga114e005014d910bea07954eee24b7efb">u8vec4</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_u8vec4 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">4 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 8 bit unsigned integer aligned vector of 4 components type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga991abe990c16de26b2129d6bc2f4c051"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gaefa2ce8fbdbe89baffd262f46f2d5907">u16vec1</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_u16vec1 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">2 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 16 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gac01bb9fc32a1cd76c2b80d030f71df4c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga426030555085ed6c39a54e73afbef962">u16vec2</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_u16vec2 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">4 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 16 bit unsigned integer aligned vector of 2 components type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga09540dbca093793a36a8997e0d4bee77"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga7f5dbe417199277e449b8db0210acb71">u16vec3</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_u16vec3 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">8 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 16 bit unsigned integer aligned vector of 3 components type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaecafb5996f5a44f57e34d29c8670741e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gaf524c9059f0342668d8eea359bcceaae">u16vec4</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_u16vec4 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">8 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 16 bit unsigned integer aligned vector of 4 components type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gac6b161a04d2f8408fe1c9d857e8daac0"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga913a8bd51e4ebccd30ad488de3c18da9">u32vec1</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_u32vec1 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">4 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 32 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga1fa0dfc8feb0fa17dab2acd43e05342b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga0741d40e2b0fea4f1c50cb325114f075">u32vec2</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_u32vec2 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">8 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 32 bit unsigned integer aligned vector of 2 components type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga0019500abbfa9c66eff61ca75eaaed94"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gad9b52e1c271cb9c8bfae6365d3e38a23">u32vec3</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_u32vec3 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 32 bit unsigned integer aligned vector of 3 components type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga14fd29d01dae7b08a04e9facbcc18824"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga155ac7e9e454e2b1f73d11e1e28a0fd6">u32vec4</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_u32vec4 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 32 bit unsigned integer aligned vector of 4 components type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gab253845f534a67136f9619843cade903"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga793c9293cc687a0e342396a377c5df77">u64vec1</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_u64vec1 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">8 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 64 bit unsigned integer aligned scalar type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga929427a7627940cdf3304f9c050b677d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga2204827de9d4ee7fa92ef497093f7d6e">u64vec2</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_u64vec2 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 64 bit unsigned integer aligned vector of 2 components type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gae373b6c04fdf9879f33d63e6949c037e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga3460933f040f59f0fedb29df1e9be71c">u64vec3</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_u64vec3 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">32 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 64 bit unsigned integer aligned vector of 3 components type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga53a8a03dca2015baec4584f45b8e9cdc"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gafb6ca34df28889a5db9d244aed375411">u64vec4</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_u64vec4 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">32 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Default precision 64 bit unsigned integer aligned vector of 4 components type. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gab3301bae94ef5bf59fbdd9a24e7d2a01"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gad3c127f8bf8d7d4e738037c257abb5b1">float32</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_float32 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">4 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>32 bit single-precision floating-point aligned scalar. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga75930684ff2233171c573e603f216162"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gab5596d48586414c91ccb270962dc14d3">float64</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_float64 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">8 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>64 bit double-precision floating-point aligned scalar. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gada9b0bea273d3ae0286f891533b9568f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga41d579d81c3d98edd0532244fa02da77">float32_t</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_float32_t </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">4 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>32 bit single-precision floating-point aligned scalar. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga6e3a2d83b131336219a0f4c7cbba2a48"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga6957c7b22f405683bb276554ca40dc37">float64_t</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_float64_t </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">8 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>64 bit double-precision floating-point aligned scalar. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gadbce23b9f23d77bb3884e289a574ebd5"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gad3c127f8bf8d7d4e738037c257abb5b1">float32</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_f32 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">4 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>32 bit single-precision floating-point aligned scalar. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaa4deaa0dea930c393d55e7a4352b0a20"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gab5596d48586414c91ccb270962dc14d3">float64</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_f64 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">8 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>64 bit double-precision floating-point aligned scalar. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga81bc497b2bfc6f80bab690c6ee28f0f9"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype">vec1 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="a00176.html#ga05e6d4c908965d04191c2070a8d0a65e">aligned_vec1</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">4 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Single-precision floating-point aligned vector of 1 component. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gada3e8f783e9d4b90006695a16c39d4d4"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00157.html#ga09d0200e8ff86391d8804b4fefd5f1da">vec2</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="a00176.html#ga0682462f8096a226773e20fac993cde5">aligned_vec2</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">8 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Single-precision floating-point aligned vector of 2 components. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gab8d081fac3a38d6f55fa552f32168d32"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00157.html#gaa8ea2429bb3cb41a715258a447f39897">vec3</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="a00176.html#ga7cf643b66664e0cd3c48759ae66c2bd0">aligned_vec3</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Single-precision floating-point aligned vector of 3 components. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga12fe7b9769c964c5b48dcfd8b7f40198"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00157.html#gafbab23070ca47932487d25332adc7d7c">vec4</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="a00176.html#ga85d89e83cb8137e1be1446de8c3b643a">aligned_vec4</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Single-precision floating-point aligned vector of 4 components. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaefab04611c7f8fe1fd9be3071efea6cc"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga10d8bd3c923a5386efcf25a4117fd84f">fvec1</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_fvec1 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">4 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Single-precision floating-point aligned vector of 1 component. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga2543c05ba19b3bd19d45b1227390c5b4"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gaf9f4173dd9e8b2d0b663c6f80ed09ff6">fvec2</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_fvec2 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">8 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Single-precision floating-point aligned vector of 2 components. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga009afd727fd657ef33a18754d6d28f60"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga4ef2d77dcab241b1ef83f09edb2f1084">fvec3</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_fvec3 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Single-precision floating-point aligned vector of 3 components. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga2f26177e74bfb301a3d0e02ec3c3ef53"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga981b63d5c5f7233a29364e0a968d139b">fvec4</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_fvec4 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Single-precision floating-point aligned vector of 4 components. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga309f495a1d6b75ddf195b674b65cb1e4"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga3174a49dc84a977cad7012a62f4af02f">f32vec1</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_f32vec1 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">4 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Single-precision floating-point aligned vector of 1 component. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga5e185865a2217d0cd47187644683a8c3"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gae0cb53ea6fe3d977fe588ce423d57cc3">f32vec2</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_f32vec2 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">8 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Single-precision floating-point aligned vector of 2 components. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gade4458b27b039b9ca34f8ec049f3115a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga19d5e0d4d3d6d226c9c6c0f39756f9ad">f32vec3</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_f32vec3 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Single-precision floating-point aligned vector of 3 components. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga2e8a12c5e6a9c4ae4ddaeda1d1cffe3b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gaeb25dbb0261f82cb08da23e26d343704">f32vec4</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_f32vec4 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Single-precision floating-point aligned vector of 4 components. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga3e0f35fa0c626285a8bad41707e7316c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype">dvec1 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="a00176.html#ga4974f46ae5a19415d91316960a53617a">aligned_dvec1</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">8 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Double-precision floating-point aligned vector of 1 component. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga78bfec2f185d1d365ea0a9ef1e3d45b8"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00157.html#ga15ade901680b29b78c1f9d1796db6e0e">dvec2</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="a00176.html#ga18d859f87122b2b3b2992ffe86dbebc0">aligned_dvec2</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Double-precision floating-point aligned vector of 2 components. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga01fe6fee6db5df580b6724a7e681f069"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00157.html#gabebd0c7e3c5cd337d95c313c5e8b8db4">dvec3</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="a00176.html#gaa37869eea77d28419b2fb0ff70b69bf0">aligned_dvec3</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">32 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Double-precision floating-point aligned vector of 3 components. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga687d5b8f551d5af32425c0b2fba15e99"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00157.html#ga9503f809789bda7e8852a6abde3ae5c1">dvec4</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="a00176.html#ga8a9f0a4795ccc442fa9901845026f9f5">aligned_dvec4</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">32 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Double-precision floating-point aligned vector of 4 components. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga8e842371d46842ff8f1813419ba49d0f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gac5b04f32ae3084a9131a0851e7f4cfae">f64vec1</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_f64vec1 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">8 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Double-precision floating-point aligned vector of 1 component. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga32814aa0f19316b43134fc25f2aad2b9"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gafaad77b464b5a35626c31205ac6780e3">f64vec2</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_f64vec2 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Double-precision floating-point aligned vector of 2 components. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaf3d3bbc1e93909b689123b085e177a14"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gafacc3614bb1136a7756293e67d34de22">f64vec3</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_f64vec3 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">32 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Double-precision floating-point aligned vector of 3 components. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga804c654cead1139bd250f90f9bb01fad"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga8723186104dc02eb85da386105fba75f">f64vec4</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_f64vec4 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">32 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Double-precision floating-point aligned vector of 4 components. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gafed7d010235a3aa7ea2f88646858f2ae"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00157.html#ga6e30cfba068ebc3c71fe1f8b3110e450">mat2</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_mat2 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Single-precision floating-point aligned 1x1 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> Single-precision floating-point aligned 2x2 matrix. </dd>
+<dd>
+<a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga17f911ee7b78ca6d1b91c4ab51ddb73c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00157.html#ga6dd3ec98a548755676267e59142911f8">mat3</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_mat3 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Single-precision floating-point aligned 3x3 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga31940e6012b72110e26fdb0f54805033"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00157.html#gade0eb47c01f79384a6f38017ede17446">mat4</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_mat4 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Single-precision floating-point aligned 4x4 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga01de96cd0b541c52d2b4a3faf65822e9"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00157.html#ga0c84b211a5730357b63c6d2e4fb696d5">mat2x2</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_mat2x2 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Single-precision floating-point aligned 1x1 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> Single-precision floating-point aligned 2x2 matrix. </dd>
+<dd>
+<a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gac88a191b004bd341e64fc53b5a4d00e3"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00157.html#ga378921b6a07bcdad946858b340f69ab1">mat3x3</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_mat3x3 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Single-precision floating-point aligned 3x3 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gabe8c745fa2ced44a600a6e3f19991161"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00157.html#ga089315d5a0c20ac6eaa17a854bbd2e81">mat4x4</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_mat4x4 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Single-precision floating-point aligned 4x4 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga719da577361541a4c43a2dd1d0e361e1"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga74ac2e71b650162d8f7cb2a70c2f6711">fmat2x2</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_fmat2 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Single-precision floating-point aligned 1x1 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> Single-precision floating-point aligned 2x2 matrix. </dd>
+<dd>
+<a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga6e7ee4f541e1d7db66cd1a224caacafb"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gad339e25c32fe6665acf028f26c1b3e22">fmat3x3</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_fmat3 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Single-precision floating-point aligned 3x3 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gae5d672d359f2a39f63f98c7975057486"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gabd79752ff357d83b49136b6299ea62d9">fmat4x4</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_fmat4 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Single-precision floating-point aligned 4x4 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga6fa2df037dbfc5fe8c8e0b4db8a34953"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga74ac2e71b650162d8f7cb2a70c2f6711">fmat2x2</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_fmat2x2 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Single-precision floating-point aligned 1x1 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> Single-precision floating-point aligned 2x2 matrix. </dd>
+<dd>
+<a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga0743b4f4f69a3227b82ff58f6abbad62"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gaf17b2604c0d92bffb92375d8aa588756">fmat2x3</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_fmat2x3 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Single-precision floating-point aligned 2x3 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga1a76b325fdf70f961d835edd182c63dd"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga709c97c20efa24ff1d9e83cd437b8ed5">fmat2x4</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_fmat2x4 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Single-precision floating-point aligned 2x4 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga4b4e181cd041ba28c3163e7b8074aef0"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga9f20af6e8eca2abdcde08408948cc1ca">fmat3x2</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_fmat3x2 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Single-precision floating-point aligned 3x2 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga27b13f465abc8a40705698145e222c3f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gad339e25c32fe6665acf028f26c1b3e22">fmat3x3</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_fmat3x3 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Single-precision floating-point aligned 3x3 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga2608d19cc275830a6f8c0b6405625a4f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gab04bc97371cb6b5f54b3688e0c81578b">fmat3x4</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_fmat3x4 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Single-precision floating-point aligned 3x4 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga93f09768241358a287c4cca538f1f7e7"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gab0082a25f19f02d2d0af0fcbe5ead732">fmat4x2</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_fmat4x2 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Single-precision floating-point aligned 4x2 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga7c117e3ecca089e10247b1d41d88aff9"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga1a11c170f030ab34ddf037714e936cba">fmat4x3</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_fmat4x3 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Single-precision floating-point aligned 4x3 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga07c75cd04ba42dc37fa3e105f89455c5"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gabd79752ff357d83b49136b6299ea62d9">fmat4x4</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_fmat4x4 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Single-precision floating-point aligned 4x4 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga65ff0d690a34a4d7f46f9b2eb51525ee"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gaf3a5016bf360977ce114deb2e01ae10a">f32mat2x2</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_f32mat2 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Single-precision floating-point aligned 1x1 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> Single-precision floating-point aligned 2x2 matrix. </dd>
+<dd>
+<a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gadd8ddbe2bf65ccede865ba2f510176dc"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga1e4c52bb824ca16c6e2e5b03635669d0">f32mat3x3</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_f32mat3 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Single-precision floating-point aligned 3x3 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaf18dbff14bf13d3ff540c517659ec045"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gafe2e08549805a7ded26da2a868bedbf5">f32mat4x4</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_f32mat4 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Single-precision floating-point aligned 4x4 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga66339f6139bf7ff19e245beb33f61cc8"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gaf3a5016bf360977ce114deb2e01ae10a">f32mat2x2</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_f32mat2x2 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Single-precision floating-point aligned 1x1 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> Single-precision floating-point aligned 2x2 matrix. </dd>
+<dd>
+<a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga1558a48b3934011b52612809f443e46d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gad5f1043adbe803928fe7bf1a90a1f767">f32mat2x3</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_f32mat2x3 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Single-precision floating-point aligned 2x3 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaa52e5732daa62851627021ad551c7680"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga5ed667d0247cce477f013ea31982843d">f32mat2x4</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_f32mat2x4 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Single-precision floating-point aligned 2x4 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gac09663c42566bcb58d23c6781ac4e85a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga8709a1ea268fa69bdf1e11616d7fbaf1">f32mat3x2</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_f32mat3x2 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Single-precision floating-point aligned 3x2 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga3f510999e59e1b309113e1d561162b29"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga1e4c52bb824ca16c6e2e5b03635669d0">f32mat3x3</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_f32mat3x3 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Single-precision floating-point aligned 3x3 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga2c9c94f0c89cd71ce56551db6cf4aaec"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga0100666c90176eaba80e49357d123c7f">f32mat3x4</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_f32mat3x4 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Single-precision floating-point aligned 3x4 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga99ce8274c750fbfdf0e70c95946a2875"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga27f897bdfe4bbded9481b8947553d1ff">f32mat4x2</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_f32mat4x2 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Single-precision floating-point aligned 4x2 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga9476ef66790239df53dbe66f3989c3b5"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gaa69e73ffb01a52499071391d395908fb">f32mat4x3</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_f32mat4x3 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Single-precision floating-point aligned 4x3 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gacc429b3b0b49921e12713b6d31e14e1d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gafe2e08549805a7ded26da2a868bedbf5">f32mat4x4</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_f32mat4x4 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Single-precision floating-point aligned 4x4 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga88f6c6fa06e6e64479763e69444669cf"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gaeb817419c76a0766c88713d2754e6cb3">f64mat2x2</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_f64mat2 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">32 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Double-precision floating-point aligned 1x1 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> Double-precision floating-point aligned 2x2 matrix. </dd>
+<dd>
+<a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaae8e4639c991e64754145ab8e4c32083"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gae1a5081181c96cc37ce9418f6e856cb6">f64mat3x3</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_f64mat3 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">32 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Double-precision floating-point aligned 3x3 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga6e9094f3feb3b5b49d0f83683a101fde"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga489163773b021f1800a33cc2fa730c3b">f64mat4x4</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_f64mat4 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">32 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Double-precision floating-point aligned 4x4 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gadbd2c639c03de1c3e9591b5a39f65559"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gaeb817419c76a0766c88713d2754e6cb3">f64mat2x2</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_f64mat2x2 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">32 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Double-precision floating-point aligned 1x1 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> Double-precision floating-point aligned 2x2 matrix. </dd>
+<dd>
+<a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gab059d7b9fe2094acc563b7223987499f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga87d256f4719417e311cd0ea14264678d">f64mat2x3</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_f64mat2x3 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">32 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Double-precision floating-point aligned 2x3 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gabbc811d1c52ed2b8cfcaff1378f75c69"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gafb18822e2eac88fa861a76cefd25d550">f64mat2x4</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_f64mat2x4 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">32 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Double-precision floating-point aligned 2x4 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga9ddf5212777734d2fd841a84439f3bdf"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga11e5684b10e098f573ff484c1a569ae2">f64mat3x2</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_f64mat3x2 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">32 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Double-precision floating-point aligned 3x2 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gad1dda32ed09f94bfcf0a7d8edfb6cf13"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gae1a5081181c96cc37ce9418f6e856cb6">f64mat3x3</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_f64mat3x3 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">32 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Double-precision floating-point aligned 3x3 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga5875e0fa72f07e271e7931811cbbf31a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gad37a55a8ce1154083a721b4ecfd55293">f64mat3x4</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_f64mat3x4 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">32 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Double-precision floating-point aligned 3x4 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga41e82cd6ac07f912ba2a2d45799dcf0d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gaa669dfb59031a441de19b34a92704d57">f64mat4x2</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_f64mat4x2 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">32 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Double-precision floating-point aligned 4x2 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga0892638d6ba773043b3d63d1d092622e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#gaba137814a509704937746cc1e82edc32">f64mat4x3</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_f64mat4x3 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">32 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Double-precision floating-point aligned 4x3 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga912a16432608b822f1e13607529934c1"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga489163773b021f1800a33cc2fa730c3b">f64mat4x4</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_f64mat4x4 </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">32 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Double-precision floating-point aligned 4x4 matrix. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gafd945a8ea86b042aba410e0560df9a3d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype">quat </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_quat </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Single-precision floating-point aligned quaternion. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gad8c4bfacff70e57dc8303634c8bfce35"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype">fquat </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_fquat </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Single-precision floating-point aligned quaternion. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaabc28c84a3288b697605d4688686f9a9"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype">dquat </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_dquat </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">32 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Double-precision floating-point aligned quaternion. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga1ed8aeb5ca67fade269a46105f1bf273"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga6966c0cb4673928c9c9da2e91006d2c0">f32quat</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_f32quat </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">16 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Single-precision floating-point aligned quaternion. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga95cc03b8b475993fa50e05e38e203303"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">glm::GLM_ALIGNED_TYPEDEF </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="a00177.html#ga14c583bd625eda8cf4935a14d5dd544d">f64quat</a> </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">aligned_f64quat </td>
+ <td class="paramname">, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">32 </td>
+ <td class="paramname"> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Double-precision floating-point aligned quaternion. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00234.html" title="Defines aligned types. ">GLM_GTX_type_aligned</a> </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00235.html b/src/third_party/glm/doc/api/a00235.html
new file mode 100644
index 0000000..01b2ce6
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00235.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_type_trait</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">GLM_GTX_type_trait<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Defines traits for each type. </p>
+<p><<a class="el" href="a00126.html" title="GLM_GTX_type_trait ">glm/gtx/type_trait.hpp</a>> need to be included to use these functionalities. </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00236.html b/src/third_party/glm/doc/api/a00236.html
new file mode 100644
index 0000000..c2dbaa0
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00236.html
@@ -0,0 +1,163 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_vector_angle</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTX_vector_angle<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gab8691008a2536b681b711211816c14f7"><td class="memTemplParams" colspan="2">template<typename vecType > </td></tr>
+<tr class="memitem:gab8691008a2536b681b711211816c14f7"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType::value_type </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00236.html#gab8691008a2536b681b711211816c14f7">angle</a> (vecType const &x, vecType const &y)</td></tr>
+<tr class="separator:gab8691008a2536b681b711211816c14f7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga82a19d474be13c92c7b10caab42a5a72"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga82a19d474be13c92c7b10caab42a5a72"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00236.html#ga82a19d474be13c92c7b10caab42a5a72">orientedAngle</a> (tvec2< T, P > const &x, tvec2< T, P > const &y)</td></tr>
+<tr class="separator:ga82a19d474be13c92c7b10caab42a5a72"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7254dba112eff55f55f9544f41cb9ece"><td class="memTemplParams" colspan="2">template<typename T , precision P> </td></tr>
+<tr class="memitem:ga7254dba112eff55f55f9544f41cb9ece"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00236.html#ga7254dba112eff55f55f9544f41cb9ece">orientedAngle</a> (tvec3< T, P > const &x, tvec3< T, P > const &y, tvec3< T, P > const &ref)</td></tr>
+<tr class="separator:ga7254dba112eff55f55f9544f41cb9ece"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Compute angle between vectors. </p>
+<p><<a class="el" href="a00137.html" title="GLM_GTX_vector_angle ">glm/gtx/vector_angle.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="gab8691008a2536b681b711211816c14f7"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType::value_type glm::angle </td>
+ <td>(</td>
+ <td class="paramtype">vecType const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType const & </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the absolute angle between two vectors. </p>
+<p>Parameters need to be normalized. </p><dl class="section see"><dt>See also</dt><dd><a class="el" href="a00236.html" title="Compute angle between vectors. ">GLM_GTX_vector_angle</a> extension. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga82a19d474be13c92c7b10caab42a5a72"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL T glm::orientedAngle </td>
+ <td>(</td>
+ <td class="paramtype">tvec2< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec2< T, P > const & </td>
+ <td class="paramname"><em>y</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the oriented angle between two 2d vectors. </p>
+<p>Parameters need to be normalized. </p><dl class="section see"><dt>See also</dt><dd><a class="el" href="a00236.html" title="Compute angle between vectors. ">GLM_GTX_vector_angle</a> extension. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga7254dba112eff55f55f9544f41cb9ece"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL T glm::orientedAngle </td>
+ <td>(</td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tvec3< T, P > const & </td>
+ <td class="paramname"><em>ref</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the oriented angle between two 3d vectors based from a reference axis. </p>
+<p>Parameters need to be normalized. </p><dl class="section see"><dt>See also</dt><dd><a class="el" href="a00236.html" title="Compute angle between vectors. ">GLM_GTX_vector_angle</a> extension. </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00237.html b/src/third_party/glm/doc/api/a00237.html
new file mode 100644
index 0000000..7c81797
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00237.html
@@ -0,0 +1,271 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_vector_query</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTX_vector_query<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga465b844190d1740051e45d780832ea4c"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga465b844190d1740051e45d780832ea4c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00237.html#ga465b844190d1740051e45d780832ea4c">areCollinear</a> (vecType< T, P > const &v0, vecType< T, P > const &v1, T const &epsilon)</td></tr>
+<tr class="separator:ga465b844190d1740051e45d780832ea4c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaee10acefed397c11e01f2862e837754c"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:gaee10acefed397c11e01f2862e837754c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00237.html#gaee10acefed397c11e01f2862e837754c">areOrthogonal</a> (vecType< T, P > const &v0, vecType< T, P > const &v1, T const &epsilon)</td></tr>
+<tr class="separator:gaee10acefed397c11e01f2862e837754c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga89c82bc60e5b84e4489b74c15a134caf"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga89c82bc60e5b84e4489b74c15a134caf"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00237.html#ga89c82bc60e5b84e4489b74c15a134caf">areOrthonormal</a> (vecType< T, P > const &v0, vecType< T, P > const &v1, T const &epsilon)</td></tr>
+<tr class="separator:ga89c82bc60e5b84e4489b74c15a134caf"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga93ecd4137480483ce1af0de8bbbf6546"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga93ecd4137480483ce1af0de8bbbf6546"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vecType< bool, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00237.html#ga93ecd4137480483ce1af0de8bbbf6546">isCompNull</a> (vecType< T, P > const &v, T const &epsilon)</td></tr>
+<tr class="separator:ga93ecd4137480483ce1af0de8bbbf6546"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6fa5fa2af67d14c205d24c49aad03270"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga6fa5fa2af67d14c205d24c49aad03270"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00237.html#ga6fa5fa2af67d14c205d24c49aad03270">isNormalized</a> (vecType< T, P > const &v, T const &epsilon)</td></tr>
+<tr class="separator:ga6fa5fa2af67d14c205d24c49aad03270"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga81a64edc1a2b470b82896592e89c523b"><td class="memTemplParams" colspan="2">template<typename T , precision P, template< typename, precision > class vecType> </td></tr>
+<tr class="memitem:ga81a64edc1a2b470b82896592e89c523b"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00237.html#ga81a64edc1a2b470b82896592e89c523b">isNull</a> (vecType< T, P > const &v, T const &epsilon)</td></tr>
+<tr class="separator:ga81a64edc1a2b470b82896592e89c523b"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Query informations of vector types. </p>
+<p><<a class="el" href="a00138.html" title="GLM_GTX_vector_query ">glm/gtx/vector_query.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga465b844190d1740051e45d780832ea4c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL bool glm::areCollinear </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>v0</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>v1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>epsilon</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Check whether two vectors are collinears. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00237.html" title="Query informations of vector types. ">GLM_GTX_vector_query</a> extensions. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaee10acefed397c11e01f2862e837754c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL bool glm::areOrthogonal </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>v0</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>v1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>epsilon</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Check whether two vectors are orthogonals. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00237.html" title="Query informations of vector types. ">GLM_GTX_vector_query</a> extensions. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga89c82bc60e5b84e4489b74c15a134caf"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL bool glm::areOrthonormal </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>v0</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>v1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>epsilon</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Check whether two vectors are orthonormal. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00237.html" title="Query informations of vector types. ">GLM_GTX_vector_query</a> extensions. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga93ecd4137480483ce1af0de8bbbf6546"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL vecType<bool, P> glm::isCompNull </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>v</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>epsilon</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Check whether a each component of a vector is null. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00237.html" title="Query informations of vector types. ">GLM_GTX_vector_query</a> extensions. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga6fa5fa2af67d14c205d24c49aad03270"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL bool glm::isNormalized </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>v</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>epsilon</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Check whether a vector is normalized. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00237.html" title="Query informations of vector types. ">GLM_GTX_vector_query</a> extensions. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga81a64edc1a2b470b82896592e89c523b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL bool glm::isNull </td>
+ <td>(</td>
+ <td class="paramtype">vecType< T, P > const & </td>
+ <td class="paramname"><em>v</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T const & </td>
+ <td class="paramname"><em>epsilon</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Check whether a vector is null. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00237.html" title="Query informations of vector types. ">GLM_GTX_vector_query</a> extensions. </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/a00238.html b/src/third_party/glm/doc/api/a00238.html
new file mode 100644
index 0000000..17269bd
--- /dev/null
+++ b/src/third_party/glm/doc/api/a00238.html
@@ -0,0 +1,149 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: GLM_GTX_wrap</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">GLM_GTX_wrap<div class="ingroups"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga6c0cc6bd1d67ea1008d2592e998bad33"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga6c0cc6bd1d67ea1008d2592e998bad33"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00238.html#ga6c0cc6bd1d67ea1008d2592e998bad33">clamp</a> (genType const &Texcoord)</td></tr>
+<tr class="separator:ga6c0cc6bd1d67ea1008d2592e998bad33"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa6856a0a048d2749252848da35e10c8b"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:gaa6856a0a048d2749252848da35e10c8b"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00238.html#gaa6856a0a048d2749252848da35e10c8b">mirrorClamp</a> (genType const &Texcoord)</td></tr>
+<tr class="separator:gaa6856a0a048d2749252848da35e10c8b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga16a89b0661b60d5bea85137bbae74d73"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga16a89b0661b60d5bea85137bbae74d73"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00238.html#ga16a89b0661b60d5bea85137bbae74d73">mirrorRepeat</a> (genType const &Texcoord)</td></tr>
+<tr class="separator:ga16a89b0661b60d5bea85137bbae74d73"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga809650c6310ea7c42666e918c117fb6f"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
+<tr class="memitem:ga809650c6310ea7c42666e918c117fb6f"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00238.html#ga809650c6310ea7c42666e918c117fb6f">repeat</a> (genType const &Texcoord)</td></tr>
+<tr class="separator:ga809650c6310ea7c42666e918c117fb6f"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Wrapping mode of texture coordinates. </p>
+<p><<a class="el" href="a00140.html" title="GLM_GTX_wrap ">glm/gtx/wrap.hpp</a>> need to be included to use these functionalities. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga6c0cc6bd1d67ea1008d2592e998bad33"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::clamp </td>
+ <td>(</td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>Texcoord</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Simulate GL_CLAMP OpenGL wrap mode. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00238.html" title="Wrapping mode of texture coordinates. ">GLM_GTX_wrap</a> extension. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaa6856a0a048d2749252848da35e10c8b"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::mirrorClamp </td>
+ <td>(</td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>Texcoord</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Simulate GL_MIRRORED_REPEAT OpenGL wrap mode. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00238.html" title="Wrapping mode of texture coordinates. ">GLM_GTX_wrap</a> extension. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga16a89b0661b60d5bea85137bbae74d73"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::mirrorRepeat </td>
+ <td>(</td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>Texcoord</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Simulate GL_MIRROR_REPEAT OpenGL wrap mode. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00238.html" title="Wrapping mode of texture coordinates. ">GLM_GTX_wrap</a> extension. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga809650c6310ea7c42666e918c117fb6f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GLM_FUNC_DECL genType glm::repeat </td>
+ <td>(</td>
+ <td class="paramtype">genType const & </td>
+ <td class="paramname"><em>Texcoord</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Simulate GL_REPEAT OpenGL wrap mode. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00238.html" title="Wrapping mode of texture coordinates. ">GLM_GTX_wrap</a> extension. </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/arrowdown.png b/src/third_party/glm/doc/api/arrowdown.png
new file mode 100644
index 0000000..0b63f6d
--- /dev/null
+++ b/src/third_party/glm/doc/api/arrowdown.png
Binary files differ
diff --git a/src/third_party/glm/doc/api/arrowright.png b/src/third_party/glm/doc/api/arrowright.png
new file mode 100644
index 0000000..c6ee22f
--- /dev/null
+++ b/src/third_party/glm/doc/api/arrowright.png
Binary files differ
diff --git a/src/third_party/glm/doc/api/bc_s.png b/src/third_party/glm/doc/api/bc_s.png
new file mode 100644
index 0000000..224b29a
--- /dev/null
+++ b/src/third_party/glm/doc/api/bc_s.png
Binary files differ
diff --git a/src/third_party/glm/doc/api/bdwn.png b/src/third_party/glm/doc/api/bdwn.png
new file mode 100644
index 0000000..940a0b9
--- /dev/null
+++ b/src/third_party/glm/doc/api/bdwn.png
Binary files differ
diff --git a/src/third_party/glm/doc/api/closed.png b/src/third_party/glm/doc/api/closed.png
new file mode 100644
index 0000000..98cc2c9
--- /dev/null
+++ b/src/third_party/glm/doc/api/closed.png
Binary files differ
diff --git a/src/third_party/glm/doc/api/dir_1f76e953200861345293ade84ac7fb6c.html b/src/third_party/glm/doc/api/dir_1f76e953200861345293ade84ac7fb6c.html
new file mode 100644
index 0000000..cafca19
--- /dev/null
+++ b/src/third_party/glm/doc/api/dir_1f76e953200861345293ade84ac7fb6c.html
@@ -0,0 +1,61 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: G-Truc Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">G-Truc Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:dir_e29b03b892e0e25920d021a614d4db9b"><td class="memItemLeft" align="right" valign="top">directory  </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/dir_275089585c7fc1b5fd5d7d42c69cb1da.html b/src/third_party/glm/doc/api/dir_275089585c7fc1b5fd5d7d42c69cb1da.html
new file mode 100644
index 0000000..ad32824
--- /dev/null
+++ b/src/third_party/glm/doc/api/dir_275089585c7fc1b5fd5d7d42c69cb1da.html
@@ -0,0 +1,61 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: D: Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">D: Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:dir_7b98f88bffbed4b390b5f8f520d9c08e"><td class="memItemLeft" align="right" valign="top">directory  </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/dir_577c788b67d63fb3b3b5752bd495d0f2.html b/src/third_party/glm/doc/api/dir_577c788b67d63fb3b3b5752bd495d0f2.html
new file mode 100644
index 0000000..37790c3
--- /dev/null
+++ b/src/third_party/glm/doc/api/dir_577c788b67d63fb3b3b5752bd495d0f2.html
@@ -0,0 +1,63 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: doc Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_577c788b67d63fb3b3b5752bd495d0f2.html">doc</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">doc Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:a00050"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>man.doxy</b> <a href="a00050_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00082"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>pages.doxy</b> <a href="a00082_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/dir_5ce58d942b2d0776e17a9a58abc01e04.html b/src/third_party/glm/doc/api/dir_5ce58d942b2d0776e17a9a58abc01e04.html
new file mode 100644
index 0000000..7307a63
--- /dev/null
+++ b/src/third_party/glm/doc/api/dir_5ce58d942b2d0776e17a9a58abc01e04.html
@@ -0,0 +1,114 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: glm Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">glm Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:dir_e529a619cfdec1fa4c331fb042fd332f"><td class="memItemLeft" align="right" valign="top">directory  </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:dir_9440d7c11b99dcd7e5d369c7cf9802fe"><td class="memItemLeft" align="right" valign="top">directory  </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_9440d7c11b99dcd7e5d369c7cf9802fe.html">gtc</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:dir_8d176b5b7dd0ae42ea6876078f2bde49"><td class="memItemLeft" align="right" valign="top">directory  </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:a00014"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00014.html">common.hpp</a> <a href="a00014_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00022"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00022.html">exponential.hpp</a> <a href="a00022_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00023"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00023.html">ext.hpp</a> <a href="a00023_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00038"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00038.html">fwd.hpp</a> <a href="a00038_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00039"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00039.html">geometric.hpp</a> <a href="a00039_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00040"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00040.html">glm.hpp</a> <a href="a00040_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00046"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00046.html">integer.hpp</a> <a href="a00046_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00051"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00051.html">mat2x2.hpp</a> <a href="a00051_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00052"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00052.html">mat2x3.hpp</a> <a href="a00052_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00053"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00053.html">mat2x4.hpp</a> <a href="a00053_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00054"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00054.html">mat3x2.hpp</a> <a href="a00054_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00055"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00055.html">mat3x3.hpp</a> <a href="a00055_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00056"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00056.html">mat3x4.hpp</a> <a href="a00056_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00057"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00057.html">mat4x2.hpp</a> <a href="a00057_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00058"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>mat4x3.hpp</b> <a href="a00058_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00059"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00059.html">mat4x4.hpp</a> <a href="a00059_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00060"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00060.html">matrix.hpp</a> <a href="a00060_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00081"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00081.html">packing.hpp</a> <a href="a00081_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00107"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00107.html">trigonometric.hpp</a> <a href="a00107_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00134"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html">vec2.hpp</a> <a href="a00134_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00135"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00135.html">vec3.hpp</a> <a href="a00135_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00136"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00136.html">vec4.hpp</a> <a href="a00136_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00139"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00139.html">vector_relational.hpp</a> <a href="a00139_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/dir_7b98f88bffbed4b390b5f8f520d9c08e.html b/src/third_party/glm/doc/api/dir_7b98f88bffbed4b390b5f8f520d9c08e.html
new file mode 100644
index 0000000..9c22074
--- /dev/null
+++ b/src/third_party/glm/doc/api/dir_7b98f88bffbed4b390b5f8f520d9c08e.html
@@ -0,0 +1,61 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: Source Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">Source Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:dir_1f76e953200861345293ade84ac7fb6c"><td class="memItemLeft" align="right" valign="top">directory  </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/dir_8d176b5b7dd0ae42ea6876078f2bde49.html b/src/third_party/glm/doc/api/dir_8d176b5b7dd0ae42ea6876078f2bde49.html
new file mode 100644
index 0000000..e15de30
--- /dev/null
+++ b/src/third_party/glm/doc/api/dir_8d176b5b7dd0ae42ea6876078f2bde49.html
@@ -0,0 +1,177 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: gtx Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_8d176b5b7dd0ae42ea6876078f2bde49.html">gtx</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">gtx Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:a00007"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00007.html">associated_min_max.hpp</a> <a href="a00007_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00008"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00008.html">bit.hpp</a> <a href="a00008_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00010"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00010.html">closest_point.hpp</a> <a href="a00010_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00012"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00012.html">gtx/color_space.hpp</a> <a href="a00012_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00013"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00013.html">color_space_YCoCg.hpp</a> <a href="a00013_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00015"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00015.html">gtx/common.hpp</a> <a href="a00015_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00016"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00016.html">compatibility.hpp</a> <a href="a00016_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00017"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00017.html">component_wise.hpp</a> <a href="a00017_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00019"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00019.html">dual_quaternion.hpp</a> <a href="a00019_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00021"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00021.html">euler_angles.hpp</a> <a href="a00021_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00024"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00024.html">extend.hpp</a> <a href="a00024_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00025"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00025.html">extended_min_max.hpp</a> <a href="a00025_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00026"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00026.html">fast_exponential.hpp</a> <a href="a00026_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00027"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00027.html">fast_square_root.hpp</a> <a href="a00027_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00028"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00028.html">fast_trigonometry.hpp</a> <a href="a00028_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00041"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00041.html">gradient_paint.hpp</a> <a href="a00041_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00042"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00042.html">handed_coordinate_space.hpp</a> <a href="a00042_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00043"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00043.html">hash.hpp</a> <a href="a00043_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00045"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00045.html">gtx/integer.hpp</a> <a href="a00045_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00047"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00047.html">intersect.hpp</a> <a href="a00047_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00048"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00048.html">io.hpp</a> <a href="a00048_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00049"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00049.html">log_base.hpp</a> <a href="a00049_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00062"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00062.html">matrix_cross_product.hpp</a> <a href="a00062_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00063"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00063.html">matrix_decompose.hpp</a> <a href="a00063_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00065"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00065.html">matrix_interpolation.hpp</a> <a href="a00065_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00067"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00067.html">matrix_major_storage.hpp</a> <a href="a00067_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00068"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00068.html">matrix_operation.hpp</a> <a href="a00068_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00069"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00069.html">matrix_query.hpp</a> <a href="a00069_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00071"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00071.html">matrix_transform_2d.hpp</a> <a href="a00071_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00072"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00072.html">mixed_product.hpp</a> <a href="a00072_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00074"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00074.html">norm.hpp</a> <a href="a00074_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00075"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00075.html">normal.hpp</a> <a href="a00075_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00076"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00076.html">normalize_dot.hpp</a> <a href="a00076_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00077"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00077.html">number_precision.hpp</a> <a href="a00077_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00078"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00078.html">optimum_pow.hpp</a> <a href="a00078_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00079"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00079.html">orthonormalize.hpp</a> <a href="a00079_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00083"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00083.html">perpendicular.hpp</a> <a href="a00083_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00084"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00084.html">polar_coordinates.hpp</a> <a href="a00084_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00086"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00086.html">projection.hpp</a> <a href="a00086_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00088"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00088.html">gtx/quaternion.hpp</a> <a href="a00088_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00090"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00090.html">range.hpp</a> <a href="a00090_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00091"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00091.html">raw_data.hpp</a> <a href="a00091_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00093"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00093.html">rotate_normalized_axis.hpp</a> <a href="a00093_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00094"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00094.html">rotate_vector.hpp</a> <a href="a00094_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00096"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00096.html">scalar_multiplication.hpp</a> <a href="a00096_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00097"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00097.html">scalar_relational.hpp</a> <a href="a00097_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00099"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00099.html">simd_mat4.hpp</a> <a href="a00099_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00100"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00100.html">simd_quat.hpp</a> <a href="a00100_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00101"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00101.html">simd_vec4.hpp</a> <a href="a00101_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00102"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00102.html">spline.hpp</a> <a href="a00102_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00103"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00103.html">std_based_type.hpp</a> <a href="a00103_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00104"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00104.html">string_cast.hpp</a> <a href="a00104_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00105"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00105.html">transform.hpp</a> <a href="a00105_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00106"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00106.html">transform2.hpp</a> <a href="a00106_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00109"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00109.html">gtx/type_aligned.hpp</a> <a href="a00109_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00126"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00126.html">type_trait.hpp</a> <a href="a00126_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00137"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00137.html">vector_angle.hpp</a> <a href="a00137_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00138"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00138.html">vector_query.hpp</a> <a href="a00138_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00140"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00140.html">wrap.hpp</a> <a href="a00140_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/dir_9440d7c11b99dcd7e5d369c7cf9802fe.html b/src/third_party/glm/doc/api/dir_9440d7c11b99dcd7e5d369c7cf9802fe.html
new file mode 100644
index 0000000..eed7fb2
--- /dev/null
+++ b/src/third_party/glm/doc/api/dir_9440d7c11b99dcd7e5d369c7cf9802fe.html
@@ -0,0 +1,101 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: gtc Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_9440d7c11b99dcd7e5d369c7cf9802fe.html">gtc</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">gtc Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:a00009"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00009.html">bitfield.hpp</a> <a href="a00009_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00011"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00011.html">gtc/color_space.hpp</a> <a href="a00011_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00018"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00018.html">constants.hpp</a> <a href="a00018_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00020"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00020.html">epsilon.hpp</a> <a href="a00020_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00037"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00037.html">functions.hpp</a> <a href="a00037_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00044"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00044.html">gtc/integer.hpp</a> <a href="a00044_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00061"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00061.html">matrix_access.hpp</a> <a href="a00061_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00064"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00064.html">matrix_integer.hpp</a> <a href="a00064_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00066"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00066.html">matrix_inverse.hpp</a> <a href="a00066_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00070"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00070.html">matrix_transform.hpp</a> <a href="a00070_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00073"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00073.html">noise.hpp</a> <a href="a00073_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00080"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00080.html">gtc/packing.hpp</a> <a href="a00080_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00087"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00087.html">gtc/quaternion.hpp</a> <a href="a00087_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00089"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00089.html">random.hpp</a> <a href="a00089_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00092"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00092.html">reciprocal.hpp</a> <a href="a00092_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00095"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00095.html">round.hpp</a> <a href="a00095_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00108"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00108.html">gtc/type_aligned.hpp</a> <a href="a00108_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00124"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00124.html">type_precision.hpp</a> <a href="a00124_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00125"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00125.html">type_ptr.hpp</a> <a href="a00125_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00132"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00132.html">ulp.hpp</a> <a href="a00132_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00133"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00133.html">vec1.hpp</a> <a href="a00133_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/dir_e29b03b892e0e25920d021a614d4db9b.html b/src/third_party/glm/doc/api/dir_e29b03b892e0e25920d021a614d4db9b.html
new file mode 100644
index 0000000..fe5a4d0
--- /dev/null
+++ b/src/third_party/glm/doc/api/dir_e29b03b892e0e25920d021a614d4db9b.html
@@ -0,0 +1,63 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: glm Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">glm Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:dir_577c788b67d63fb3b3b5752bd495d0f2"><td class="memItemLeft" align="right" valign="top">directory  </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_577c788b67d63fb3b3b5752bd495d0f2.html">doc</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:dir_5ce58d942b2d0776e17a9a58abc01e04"><td class="memItemLeft" align="right" valign="top">directory  </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/dir_e529a619cfdec1fa4c331fb042fd332f.html b/src/third_party/glm/doc/api/dir_e529a619cfdec1fa4c331fb042fd332f.html
new file mode 100644
index 0000000..b853ea1
--- /dev/null
+++ b/src/third_party/glm/doc/api/dir_e529a619cfdec1fa4c331fb042fd332f.html
@@ -0,0 +1,129 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: detail Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_275089585c7fc1b5fd5d7d42c69cb1da.html">D:</a></li><li class="navelem"><a class="el" href="dir_7b98f88bffbed4b390b5f8f520d9c08e.html">Source</a></li><li class="navelem"><a class="el" href="dir_1f76e953200861345293ade84ac7fb6c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_e29b03b892e0e25920d021a614d4db9b.html">glm</a></li><li class="navelem"><a class="el" href="dir_5ce58d942b2d0776e17a9a58abc01e04.html">glm</a></li><li class="navelem"><a class="el" href="dir_e529a619cfdec1fa4c331fb042fd332f.html">detail</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">detail Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:a00001"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00001.html">_features.hpp</a> <a href="a00001_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00002"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00002.html">_fixes.hpp</a> <a href="a00002_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00003"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00003.html">_noise.hpp</a> <a href="a00003_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00004"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00004.html">_swizzle.hpp</a> <a href="a00004_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00005"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00005.html">_swizzle_func.hpp</a> <a href="a00005_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00006"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00006.html">_vectorize.hpp</a> <a href="a00006_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00029"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00029.html">func_common.hpp</a> <a href="a00029_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00030"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00030.html">func_exponential.hpp</a> <a href="a00030_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00031"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00031.html">func_geometric.hpp</a> <a href="a00031_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00032"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00032.html">func_integer.hpp</a> <a href="a00032_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00033"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00033.html">func_matrix.hpp</a> <a href="a00033_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00034"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00034.html">func_packing.hpp</a> <a href="a00034_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00035"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00035.html">func_trigonometric.hpp</a> <a href="a00035_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00036"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00036.html">func_vector_relational.hpp</a> <a href="a00036_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00085"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00085.html">precision.hpp</a> <a href="a00085_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00098"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00098.html">setup.hpp</a> <a href="a00098_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00110"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00110.html">type_float.hpp</a> <a href="a00110_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00111"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00111.html">type_gentype.hpp</a> <a href="a00111_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00112"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00112.html">type_half.hpp</a> <a href="a00112_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00113"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00113.html">type_int.hpp</a> <a href="a00113_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00114"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00114.html">type_mat.hpp</a> <a href="a00114_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00115"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00115.html">type_mat2x2.hpp</a> <a href="a00115_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00116"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00116.html">type_mat2x3.hpp</a> <a href="a00116_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00117"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00117.html">type_mat2x4.hpp</a> <a href="a00117_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00118"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00118.html">type_mat3x2.hpp</a> <a href="a00118_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00119"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00119.html">type_mat3x3.hpp</a> <a href="a00119_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00120"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00120.html">type_mat3x4.hpp</a> <a href="a00120_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00121"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00121.html">type_mat4x2.hpp</a> <a href="a00121_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00122"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00122.html">type_mat4x3.hpp</a> <a href="a00122_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00123"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00123.html">type_mat4x4.hpp</a> <a href="a00123_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00127"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00127.html">type_vec.hpp</a> <a href="a00127_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00128"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00128.html">type_vec1.hpp</a> <a href="a00128_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00129"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00129.html">type_vec2.hpp</a> <a href="a00129_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00130"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00130.html">type_vec3.hpp</a> <a href="a00130_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:a00131"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00131.html">type_vec4.hpp</a> <a href="a00131_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/doc.png b/src/third_party/glm/doc/api/doc.png
new file mode 100644
index 0000000..17edabf
--- /dev/null
+++ b/src/third_party/glm/doc/api/doc.png
Binary files differ
diff --git a/src/third_party/glm/doc/api/doxygen.css b/src/third_party/glm/doc/api/doxygen.css
new file mode 100644
index 0000000..f0f4a4f
--- /dev/null
+++ b/src/third_party/glm/doc/api/doxygen.css
@@ -0,0 +1,865 @@
+/* The standard CSS for doxygen */
+
+body, table, div, p, dl
+{
+ font-family: Lucida Grande, Calibri, Verdana;
+ font-size: 14px;
+}
+
+body
+{
+ margin:0px;
+ padding:0px;
+ background-color:#bf6000;
+ background-repeat:no-repeat;
+ background-position:center center;
+ background-attachment:fixed;
+/*
+ background-image: -moz-linear-gradient(center top, #FFFFFF 0%, #FFF8F0 5%, #FFEEDD 95%, #FFDDBB);
+ background-image: -webkit-gradient(linear,center top,center bottom,from(#FFFFFF), color-stop(0.05,#FFF8F0), color-stop(0.05,#FFF8F0), color-stop(0.95,#FFEEDD), to(#FFDDBB));
+*/
+ min-height:1200px;
+ overflow:auto;
+}
+
+p
+{
+ background-color:#FFFFFF;
+}
+
+/* @group Heading Levels */
+
+h1
+{
+ color:#FF8000;
+ font-family: Lucida Grande, Cambria, Georgia;
+ font-size: 24px;
+ font-weight: bold;
+}
+
+h2
+{
+ color:#FF8000;
+ font-family: Lucida Grande, Cambria, Georgia;
+ font-size: 18px;
+ font-weight: bold;
+}
+
+h3 {
+ font-family: Lucida Grande, Cambria, Georgia;
+ font-size: 14px;
+ font-weight: bold;
+}
+
+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: #FFFFFF;
+ margin:0px;
+ margin-left:auto;
+ margin-right:auto;
+ padding-top:8px;
+ padding-bottom:8px;
+ padding-left:32px;
+ padding-right:32px;
+ width:936px;
+}
+
+div.textblock{
+ background-color: #FFFFFF;
+ padding-top: 4px;
+ padding-bottom: 4px;
+ padding-left: 32px;
+ padding-right: 32px;
+}
+
+a:hover {
+ text-decoration: underline;
+}
+
+a.qindex {
+ font-weight: bold;
+}
+
+a.qindexHL {
+ font-weight: bold;
+ background-color: #9CAFD4;
+ color: #ffffff;
+ border: 0px 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, consolas, "courier new";
+ font-size: 12px;
+}
+
+pre.fragment {
+ border: 0px solid #FF8000;
+ background-color: #FFF8F0;
+ padding: 4px 6px;
+ margin: 4px 8px 4px 2px;
+ overflow: auto;
+ word-wrap: break-word;
+ 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;
+}
+
+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 {
+ margin-left:auto;
+ margin-right:auto;
+ width:1000px;
+
+ text-align: right;
+ padding-right: 12px;
+ color: #FFEEDD;
+}
+
+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: 10px;
+}
+
+.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;
+ margin-left:auto;
+ margin-right:auto;
+ width:1000px;
+}
+
+/* @group Member Descriptions */
+
+table.memberdecls {
+ border-spacing: 0px;
+ padding: 0px;
+}
+
+.mdescLeft, .mdescRight,
+.memItemLeft, .memItemRight,
+.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
+ font-family: monospace, consolas, "courier new";
+ font-size: 12px;
+ 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 {
+ color: #000000;
+ font-weight: normal;
+ margin-left: 9px;
+}
+
+.memnav {
+ background-color: #000000;
+ border: 0px solid #A3B4D7;
+ text-align: center;
+ margin: 2px;
+ margin-right: 15px;
+ padding: 2px;
+}
+
+.memitem {
+ padding: 8px;
+ margin-bottom: 10px;
+}
+
+.memname {
+ font-family: monospace, consolas, "courier new";
+ font-weight: bold;
+ font-size: 12px;
+ white-space: nowrap;
+ margin-left: 6px;
+}
+
+.memproto {
+ border-top: 0px solid #FF8000;
+ border-left: 0px solid #FF8000;
+ border-right: 0px solid #FF8000;
+ padding: 6px 0px 6px 0px;
+ color: #000000;
+ 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-repeat:repeat-x;
+ background-color: #FFFFFF;
+ background-image: -moz-linear-gradient(center top, #FFF8F0 0%, #FFFFFF 60%, #FFFFFF 95%, #FFFFFF);
+ background-image: -webkit-gradient(linear,center top,center bottom,from(#FFF8F0), color-stop(0.2,#FFFFFF), color-stop(0.60,#FFFFFF), color-stop(0.95,#FFFFFF), to(#FFFFFF));
+}
+
+.memdoc {
+ /*font-family: Lucida Grande, Calibri, Verdana;*/
+ border-bottom: 0px solid #FF8000;
+ border-left: 0px solid #FF8000;
+ border-right: 0px 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%, #FFF8F0 90%, #FFEEDD);
+ /* 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.90,#FFF8F0), to(#FFEEDD));
+}
+
+.paramkey {
+ text-align: right;
+}
+
+.paramtype {
+ white-space: nowrap;
+}
+
+.paramname {
+ color: #FF8000;
+ white-space: nowrap;
+}
+.paramname em {
+ font-style: normal;
+}
+
+.params, .retval, .exception, .tparams {
+ border-spacing: 6px 2px;
+}
+
+.params .paramname, .retval .paramname {
+ color: #FF8000;
+ font-family: monospace, consolas, "courier new";
+ font-weight: bold;
+ font-size: 12px;
+ vertical-align: top;
+}
+
+.params .paramtype {
+ font-style: italic;
+ vertical-align: top;
+}
+
+.params .paramdir {
+ vertical-align: top;
+}
+
+
+
+
+/* @end */
+
+/* @group Directory (tree) */
+
+/* for the tree view */
+
+.ftvtree {
+ /*font-family: Lucida Grande, Calibri, Verdana;*/
+ margin: 0px;
+}
+
+/* these are for tree view when used as main index */
+
+.directory {
+ font-weight: bold;
+ margin: 5px;
+}
+
+.directory h3 {
+ margin: 0px;
+ margin-top: 1em;
+}
+
+/*
+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;
+}
+
+.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: 0px solid #000000;
+ padding: 3px 7px 2px;
+}
+
+table.doxtable th {
+ background-color: #000000;
+ 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;
+}
+
+.navpath ul
+{
+ background-color: #FFEEDD;
+ height:30px;
+ line-height:30px;
+ 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;
+}
+
+.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:#FFEEDD;
+}
+
+div.summary
+{
+ float: right;
+ font-size: 12px;
+ padding-right: 5px;
+ width: 160px;
+ text-align: right;
+}
+
+div.summary a
+{
+ white-space: nowrap;
+}
+
+div.ingroups
+{
+ padding-left: 5px;
+ width: 50%;
+ text-align: left;
+}
+
+div.ingroups a
+{
+ white-space: nowrap;
+}
+
+div.header
+{
+ background-color:#FFEEDD;
+ background-image: -moz-linear-gradient(center top, #FFEEDD 0%, #FFEEDD 5%, #FFEEDD 80%, #FFFFFF);
+ background-image: -webkit-gradient(linear,center top,center bottom,from(#FFEEDD), color-stop(0.05,#FFEEDD), color-stop(0.05,#FFEEDD), color-stop(0.80,#FFEEDD), to(#FFFFFF));
+
+ padding:0px;
+ margin:0px;
+ margin-left:auto;
+ margin-right:auto;
+ width:1000px;
+ border-bottom: 0px solid #FFC080;
+}
+
+div.headertitle
+{
+ margin: 0px;
+ padding: 5px;
+ padding-bottom:10px;
+ padding-top:10px;
+}
+
+div.title
+{
+ font-family: Lucida Grande, Cambria, Georgia;
+ font-size: 24px;
+ color: #FF7F00;
+}
+
+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: #FF7F00;
+ border-left:4px solid;
+ padding: 0 0 0 6px;
+}
+
+dl.note
+{
+ border-color: #FFDDBB;
+}
+
+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-family: Lucida Grande, Cambria, Georgia;*/
+ font-size: 24px;
+ margin: 0px;
+ padding: 0px;
+}
+
+#projectbrief
+{
+ /*font-family: Lucida Grande, Cambria, Georgia;*/
+ font-size: 18px;
+ margin: 0px;
+ padding: 0px;
+}
+
+#projectnumber
+{
+ /*font-family: Lucida Grande, Cambria, Georgia;*/
+ font-size: 14px;
+ margin: 0px;
+ padding: 0px;
+}
+
+#titlearea
+{
+ padding: 0px;
+ margin: 0px;
+ width: 100%;
+ border-bottom: 0px solid #FF8000;
+ background-color:#FFFFFF;
+}
+
+#top
+{
+ margin-left:auto;
+ margin-right:auto;
+ width:1000px;
+}
diff --git a/src/third_party/glm/doc/api/doxygen.png b/src/third_party/glm/doc/api/doxygen.png
new file mode 100644
index 0000000..3ff17d8
--- /dev/null
+++ b/src/third_party/glm/doc/api/doxygen.png
Binary files differ
diff --git a/src/third_party/glm/doc/api/dynsections.js b/src/third_party/glm/doc/api/dynsections.js
new file mode 100644
index 0000000..1e6bf07
--- /dev/null
+++ b/src/third_party/glm/doc/api/dynsections.js
@@ -0,0 +1,104 @@
+function toggleVisibility(linkObj)
+{
+ var base = $(linkObj).attr('id');
+ var summary = $('#'+base+'-summary');
+ var content = $('#'+base+'-content');
+ var trigger = $('#'+base+'-trigger');
+ var src=$(trigger).attr('src');
+ if (content.is(':visible')===true) {
+ content.hide();
+ summary.show();
+ $(linkObj).addClass('closed').removeClass('opened');
+ $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
+ } else {
+ content.show();
+ summary.hide();
+ $(linkObj).removeClass('closed').addClass('opened');
+ $(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
+ }
+ return false;
+}
+
+function updateStripes()
+{
+ $('table.directory tr').
+ removeClass('even').filter(':visible:even').addClass('even');
+}
+
+function toggleLevel(level)
+{
+ $('table.directory tr').each(function() {
+ var l = this.id.split('_').length-1;
+ var i = $('#img'+this.id.substring(3));
+ var a = $('#arr'+this.id.substring(3));
+ if (l<level+1) {
+ i.removeClass('iconfopen iconfclosed').addClass('iconfopen');
+ a.html('▼');
+ $(this).show();
+ } else if (l==level+1) {
+ i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');
+ a.html('►');
+ $(this).show();
+ } else {
+ $(this).hide();
+ }
+ });
+ updateStripes();
+}
+
+function toggleFolder(id)
+{
+ // the clicked row
+ var currentRow = $('#row_'+id);
+
+ // all rows after the clicked row
+ var rows = currentRow.nextAll("tr");
+
+ var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
+
+ // only match elements AFTER this one (can't hide elements before)
+ var childRows = rows.filter(function() { return this.id.match(re); });
+
+ // first row is visible we are HIDING
+ if (childRows.filter(':first').is(':visible')===true) {
+ // replace down arrow by right arrow for current row
+ var currentRowSpans = currentRow.find("span");
+ currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
+ currentRowSpans.filter(".arrow").html('►');
+ rows.filter("[id^=row_"+id+"]").hide(); // hide all children
+ } else { // we are SHOWING
+ // replace right arrow by down arrow for current row
+ var currentRowSpans = currentRow.find("span");
+ currentRowSpans.filter(".iconfclosed").removeClass("iconfclosed").addClass("iconfopen");
+ currentRowSpans.filter(".arrow").html('▼');
+ // replace down arrows by right arrows for child rows
+ var childRowsSpans = childRows.find("span");
+ childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
+ childRowsSpans.filter(".arrow").html('►');
+ childRows.show(); //show all children
+ }
+ updateStripes();
+}
+
+
+function toggleInherit(id)
+{
+ var rows = $('tr.inherit.'+id);
+ var img = $('tr.inherit_header.'+id+' img');
+ var src = $(img).attr('src');
+ if (rows.filter(':first').is(':visible')===true) {
+ rows.css('display','none');
+ $(img).attr('src',src.substring(0,src.length-8)+'closed.png');
+ } else {
+ rows.css('display','table-row'); // using show() causes jump in firefox
+ $(img).attr('src',src.substring(0,src.length-10)+'open.png');
+ }
+}
+
+
+$(document).ready(function() {
+ $('.code,.codeRef').each(function() {
+ $(this).data('powertip',$('#'+$(this).attr('href').replace(/.*\//,'').replace(/[^a-z_A-Z0-9]/g,'_')).html());
+ $(this).powerTip({ placement: 's', smartPlacement: true, mouseOnToPopup: true });
+ });
+});
diff --git a/src/third_party/glm/doc/api/files.html b/src/third_party/glm/doc/api/files.html
new file mode 100644
index 0000000..8d5ed1a
--- /dev/null
+++ b/src/third_party/glm/doc/api/files.html
@@ -0,0 +1,200 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: File List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="files.html"><span>File List</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">File List</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here is a list of all documented files with brief descriptions:</div><div class="directory">
+<table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00001_source.html"><span class="icondoc"></span></a><a class="el" href="a00001.html" target="_self">_features.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00002_source.html"><span class="icondoc"></span></a><a class="el" href="a00002.html" target="_self">_fixes.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00003_source.html"><span class="icondoc"></span></a><a class="el" href="a00003.html" target="_self">_noise.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00004_source.html"><span class="icondoc"></span></a><a class="el" href="a00004.html" target="_self">_swizzle.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00005_source.html"><span class="icondoc"></span></a><a class="el" href="a00005.html" target="_self">_swizzle_func.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_5_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00006_source.html"><span class="icondoc"></span></a><a class="el" href="a00006.html" target="_self">_vectorize.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00007_source.html"><span class="icondoc"></span></a><a class="el" href="a00007.html" target="_self">associated_min_max.hpp</a></td><td class="desc"><a class="el" href="a00181.html">GLM_GTX_associated_min_max</a> </td></tr>
+<tr id="row_7_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00008_source.html"><span class="icondoc"></span></a><a class="el" href="a00008.html" target="_self">bit.hpp</a></td><td class="desc"><a class="el" href="a00182.html">GLM_GTX_bit</a> </td></tr>
+<tr id="row_8_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00009_source.html"><span class="icondoc"></span></a><a class="el" href="a00009.html" target="_self">bitfield.hpp</a></td><td class="desc"><a class="el" href="a00160.html">GLM_GTC_bitfield</a> </td></tr>
+<tr id="row_9_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00010_source.html"><span class="icondoc"></span></a><a class="el" href="a00010.html" target="_self">closest_point.hpp</a></td><td class="desc"><a class="el" href="a00183.html">GLM_GTX_closest_point</a> </td></tr>
+<tr id="row_10_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00011_source.html"><span class="icondoc"></span></a><a class="el" href="a00011.html" target="_self">gtc/color_space.hpp</a></td><td class="desc"><a class="el" href="a00161.html">GLM_GTC_color_space</a> </td></tr>
+<tr id="row_11_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00012_source.html"><span class="icondoc"></span></a><a class="el" href="a00012.html" target="_self">gtx/color_space.hpp</a></td><td class="desc"><a class="el" href="a00184.html">GLM_GTX_color_space</a> </td></tr>
+<tr id="row_12_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00013_source.html"><span class="icondoc"></span></a><a class="el" href="a00013.html" target="_self">color_space_YCoCg.hpp</a></td><td class="desc"><a class="el" href="a00185.html">GLM_GTX_color_space_YCoCg</a> </td></tr>
+<tr id="row_13_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00014_source.html"><span class="icondoc"></span></a><a class="el" href="a00014.html" target="_self">common.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_14_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00015_source.html"><span class="icondoc"></span></a><a class="el" href="a00015.html" target="_self">gtx/common.hpp</a></td><td class="desc"><a class="el" href="a00186.html">GLM_GTX_common</a> </td></tr>
+<tr id="row_15_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00016_source.html"><span class="icondoc"></span></a><a class="el" href="a00016.html" target="_self">compatibility.hpp</a></td><td class="desc"><a class="el" href="a00187.html">GLM_GTX_compatibility</a> </td></tr>
+<tr id="row_16_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00017_source.html"><span class="icondoc"></span></a><a class="el" href="a00017.html" target="_self">component_wise.hpp</a></td><td class="desc"><a class="el" href="a00188.html">GLM_GTX_component_wise</a> </td></tr>
+<tr id="row_17_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00018_source.html"><span class="icondoc"></span></a><a class="el" href="a00018.html" target="_self">constants.hpp</a></td><td class="desc"><a class="el" href="a00162.html">GLM_GTC_constants</a> </td></tr>
+<tr id="row_18_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00019_source.html"><span class="icondoc"></span></a><a class="el" href="a00019.html" target="_self">dual_quaternion.hpp</a></td><td class="desc"><a class="el" href="a00189.html">GLM_GTX_dual_quaternion</a> </td></tr>
+<tr id="row_19_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00020_source.html"><span class="icondoc"></span></a><a class="el" href="a00020.html" target="_self">epsilon.hpp</a></td><td class="desc"><a class="el" href="a00163.html">GLM_GTC_epsilon</a> </td></tr>
+<tr id="row_20_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00021_source.html"><span class="icondoc"></span></a><a class="el" href="a00021.html" target="_self">euler_angles.hpp</a></td><td class="desc"><a class="el" href="a00190.html">GLM_GTX_euler_angles</a> </td></tr>
+<tr id="row_21_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00022_source.html"><span class="icondoc"></span></a><a class="el" href="a00022.html" target="_self">exponential.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_22_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00023_source.html"><span class="icondoc"></span></a><a class="el" href="a00023.html" target="_self">ext.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> (Dependence) </td></tr>
+<tr id="row_23_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00024_source.html"><span class="icondoc"></span></a><a class="el" href="a00024.html" target="_self">extend.hpp</a></td><td class="desc"><a class="el" href="a00191.html">GLM_GTX_extend</a> </td></tr>
+<tr id="row_24_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00025_source.html"><span class="icondoc"></span></a><a class="el" href="a00025.html" target="_self">extended_min_max.hpp</a></td><td class="desc">gtx_extended_min_max </td></tr>
+<tr id="row_25_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00026_source.html"><span class="icondoc"></span></a><a class="el" href="a00026.html" target="_self">fast_exponential.hpp</a></td><td class="desc"><a class="el" href="a00193.html">GLM_GTX_fast_exponential</a> </td></tr>
+<tr id="row_26_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00027_source.html"><span class="icondoc"></span></a><a class="el" href="a00027.html" target="_self">fast_square_root.hpp</a></td><td class="desc"><a class="el" href="a00194.html">GLM_GTX_fast_square_root</a> </td></tr>
+<tr id="row_27_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00028_source.html"><span class="icondoc"></span></a><a class="el" href="a00028.html" target="_self">fast_trigonometry.hpp</a></td><td class="desc"><a class="el" href="a00195.html">GLM_GTX_fast_trigonometry</a> </td></tr>
+<tr id="row_28_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00029_source.html"><span class="icondoc"></span></a><a class="el" href="a00029.html" target="_self">func_common.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_29_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00030_source.html"><span class="icondoc"></span></a><a class="el" href="a00030.html" target="_self">func_exponential.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_30_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00031_source.html"><span class="icondoc"></span></a><a class="el" href="a00031.html" target="_self">func_geometric.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_31_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00032_source.html"><span class="icondoc"></span></a><a class="el" href="a00032.html" target="_self">func_integer.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_32_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00033_source.html"><span class="icondoc"></span></a><a class="el" href="a00033.html" target="_self">func_matrix.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_33_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00034_source.html"><span class="icondoc"></span></a><a class="el" href="a00034.html" target="_self">func_packing.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_34_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00035_source.html"><span class="icondoc"></span></a><a class="el" href="a00035.html" target="_self">func_trigonometric.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_35_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00036_source.html"><span class="icondoc"></span></a><a class="el" href="a00036.html" target="_self">func_vector_relational.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_36_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00037_source.html"><span class="icondoc"></span></a><a class="el" href="a00037.html" target="_self">functions.hpp</a></td><td class="desc"><a class="el" href="a00164.html">GLM_GTC_functions</a> </td></tr>
+<tr id="row_37_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00038_source.html"><span class="icondoc"></span></a><a class="el" href="a00038.html" target="_self">fwd.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_38_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00039_source.html"><span class="icondoc"></span></a><a class="el" href="a00039.html" target="_self">geometric.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_39_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00040_source.html"><span class="icondoc"></span></a><a class="el" href="a00040.html" target="_self">glm.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_40_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00041_source.html"><span class="icondoc"></span></a><a class="el" href="a00041.html" target="_self">gradient_paint.hpp</a></td><td class="desc"><a class="el" href="a00196.html">GLM_GTX_gradient_paint</a> </td></tr>
+<tr id="row_41_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00042_source.html"><span class="icondoc"></span></a><a class="el" href="a00042.html" target="_self">handed_coordinate_space.hpp</a></td><td class="desc"><a class="el" href="a00197.html">GLM_GTX_handed_coordinate_space</a> </td></tr>
+<tr id="row_42_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00043_source.html"><span class="icondoc"></span></a><a class="el" href="a00043.html" target="_self">hash.hpp</a></td><td class="desc"><a class="el" href="a00198.html">GLM_GTX_hash</a> </td></tr>
+<tr id="row_43_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00044_source.html"><span class="icondoc"></span></a><a class="el" href="a00044.html" target="_self">gtc/integer.hpp</a></td><td class="desc"><a class="el" href="a00165.html">GLM_GTC_integer</a> </td></tr>
+<tr id="row_44_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00045_source.html"><span class="icondoc"></span></a><a class="el" href="a00045.html" target="_self">gtx/integer.hpp</a></td><td class="desc"><a class="el" href="a00199.html">GLM_GTX_integer</a> </td></tr>
+<tr id="row_45_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00046_source.html"><span class="icondoc"></span></a><a class="el" href="a00046.html" target="_self">integer.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_46_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00047_source.html"><span class="icondoc"></span></a><a class="el" href="a00047.html" target="_self">intersect.hpp</a></td><td class="desc"><a class="el" href="a00200.html">GLM_GTX_intersect</a> </td></tr>
+<tr id="row_47_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00048_source.html"><span class="icondoc"></span></a><a class="el" href="a00048.html" target="_self">io.hpp</a></td><td class="desc"><a class="el" href="a00201.html">GLM_GTX_io</a> </td></tr>
+<tr id="row_48_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00049_source.html"><span class="icondoc"></span></a><a class="el" href="a00049.html" target="_self">log_base.hpp</a></td><td class="desc"><a class="el" href="a00202.html">GLM_GTX_log_base</a> </td></tr>
+<tr id="row_49_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00050_source.html"><span class="icondoc"></span></a><b>man.doxy</b></td><td class="desc"></td></tr>
+<tr id="row_50_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00051_source.html"><span class="icondoc"></span></a><a class="el" href="a00051.html" target="_self">mat2x2.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_51_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00052_source.html"><span class="icondoc"></span></a><a class="el" href="a00052.html" target="_self">mat2x3.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_52_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00053_source.html"><span class="icondoc"></span></a><a class="el" href="a00053.html" target="_self">mat2x4.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_53_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00054_source.html"><span class="icondoc"></span></a><a class="el" href="a00054.html" target="_self">mat3x2.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_54_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00055_source.html"><span class="icondoc"></span></a><a class="el" href="a00055.html" target="_self">mat3x3.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_55_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00056_source.html"><span class="icondoc"></span></a><a class="el" href="a00056.html" target="_self">mat3x4.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_56_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00057_source.html"><span class="icondoc"></span></a><a class="el" href="a00057.html" target="_self">mat4x2.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_57_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00058_source.html"><span class="icondoc"></span></a><b>mat4x3.hpp</b></td><td class="desc"></td></tr>
+<tr id="row_58_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00059_source.html"><span class="icondoc"></span></a><a class="el" href="a00059.html" target="_self">mat4x4.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_59_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00060_source.html"><span class="icondoc"></span></a><a class="el" href="a00060.html" target="_self">matrix.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_60_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00061_source.html"><span class="icondoc"></span></a><a class="el" href="a00061.html" target="_self">matrix_access.hpp</a></td><td class="desc"><a class="el" href="a00166.html">GLM_GTC_matrix_access</a> </td></tr>
+<tr id="row_61_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00062_source.html"><span class="icondoc"></span></a><a class="el" href="a00062.html" target="_self">matrix_cross_product.hpp</a></td><td class="desc"><a class="el" href="a00203.html">GLM_GTX_matrix_cross_product</a> </td></tr>
+<tr id="row_62_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00063_source.html"><span class="icondoc"></span></a><a class="el" href="a00063.html" target="_self">matrix_decompose.hpp</a></td><td class="desc"><a class="el" href="a00204.html">GLM_GTX_matrix_decompose</a> </td></tr>
+<tr id="row_63_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00064_source.html"><span class="icondoc"></span></a><a class="el" href="a00064.html" target="_self">matrix_integer.hpp</a></td><td class="desc"><a class="el" href="a00167.html">GLM_GTC_matrix_integer</a> </td></tr>
+<tr id="row_64_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00065_source.html"><span class="icondoc"></span></a><a class="el" href="a00065.html" target="_self">matrix_interpolation.hpp</a></td><td class="desc"><a class="el" href="a00205.html">GLM_GTX_matrix_interpolation</a> </td></tr>
+<tr id="row_65_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00066_source.html"><span class="icondoc"></span></a><a class="el" href="a00066.html" target="_self">matrix_inverse.hpp</a></td><td class="desc"><a class="el" href="a00168.html">GLM_GTC_matrix_inverse</a> </td></tr>
+<tr id="row_66_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00067_source.html"><span class="icondoc"></span></a><a class="el" href="a00067.html" target="_self">matrix_major_storage.hpp</a></td><td class="desc"><a class="el" href="a00206.html">GLM_GTX_matrix_major_storage</a> </td></tr>
+<tr id="row_67_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00068_source.html"><span class="icondoc"></span></a><a class="el" href="a00068.html" target="_self">matrix_operation.hpp</a></td><td class="desc"><a class="el" href="a00207.html">GLM_GTX_matrix_operation</a> </td></tr>
+<tr id="row_68_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00069_source.html"><span class="icondoc"></span></a><a class="el" href="a00069.html" target="_self">matrix_query.hpp</a></td><td class="desc"><a class="el" href="a00208.html">GLM_GTX_matrix_query</a> </td></tr>
+<tr id="row_69_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00070_source.html"><span class="icondoc"></span></a><a class="el" href="a00070.html" target="_self">matrix_transform.hpp</a></td><td class="desc"><a class="el" href="a00169.html">GLM_GTC_matrix_transform</a> </td></tr>
+<tr id="row_70_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00071_source.html"><span class="icondoc"></span></a><a class="el" href="a00071.html" target="_self">matrix_transform_2d.hpp</a></td><td class="desc"><a class="el" href="a00209.html">GLM_GTX_matrix_transform_2d</a> </td></tr>
+<tr id="row_71_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00072_source.html"><span class="icondoc"></span></a><a class="el" href="a00072.html" target="_self">mixed_product.hpp</a></td><td class="desc"><a class="el" href="a00210.html">GLM_GTX_mixed_producte</a> </td></tr>
+<tr id="row_72_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00073_source.html"><span class="icondoc"></span></a><a class="el" href="a00073.html" target="_self">noise.hpp</a></td><td class="desc"><a class="el" href="a00170.html">GLM_GTC_noise</a> </td></tr>
+<tr id="row_73_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00074_source.html"><span class="icondoc"></span></a><a class="el" href="a00074.html" target="_self">norm.hpp</a></td><td class="desc"><a class="el" href="a00211.html">GLM_GTX_norm</a> </td></tr>
+<tr id="row_74_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00075_source.html"><span class="icondoc"></span></a><a class="el" href="a00075.html" target="_self">normal.hpp</a></td><td class="desc"><a class="el" href="a00212.html">GLM_GTX_normal</a> </td></tr>
+<tr id="row_75_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00076_source.html"><span class="icondoc"></span></a><a class="el" href="a00076.html" target="_self">normalize_dot.hpp</a></td><td class="desc"><a class="el" href="a00213.html">GLM_GTX_normalize_dot</a> </td></tr>
+<tr id="row_76_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00077_source.html"><span class="icondoc"></span></a><a class="el" href="a00077.html" target="_self">number_precision.hpp</a></td><td class="desc"><a class="el" href="a00214.html">GLM_GTX_number_precision</a> </td></tr>
+<tr id="row_77_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00078_source.html"><span class="icondoc"></span></a><a class="el" href="a00078.html" target="_self">optimum_pow.hpp</a></td><td class="desc"><a class="el" href="a00215.html">GLM_GTX_optimum_pow</a> </td></tr>
+<tr id="row_78_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00079_source.html"><span class="icondoc"></span></a><a class="el" href="a00079.html" target="_self">orthonormalize.hpp</a></td><td class="desc"><a class="el" href="a00216.html">GLM_GTX_orthonormalize</a> </td></tr>
+<tr id="row_79_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00080_source.html"><span class="icondoc"></span></a><a class="el" href="a00080.html" target="_self">gtc/packing.hpp</a></td><td class="desc"><a class="el" href="a00171.html">GLM_GTC_packing</a> </td></tr>
+<tr id="row_80_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00081_source.html"><span class="icondoc"></span></a><a class="el" href="a00081.html" target="_self">packing.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_81_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00082_source.html"><span class="icondoc"></span></a><b>pages.doxy</b></td><td class="desc"></td></tr>
+<tr id="row_82_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00083_source.html"><span class="icondoc"></span></a><a class="el" href="a00083.html" target="_self">perpendicular.hpp</a></td><td class="desc"><a class="el" href="a00217.html">GLM_GTX_perpendicular</a> </td></tr>
+<tr id="row_83_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00084_source.html"><span class="icondoc"></span></a><a class="el" href="a00084.html" target="_self">polar_coordinates.hpp</a></td><td class="desc"><a class="el" href="a00218.html">GLM_GTX_polar_coordinates</a> </td></tr>
+<tr id="row_84_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00085_source.html"><span class="icondoc"></span></a><a class="el" href="a00085.html" target="_self">precision.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_85_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00086_source.html"><span class="icondoc"></span></a><a class="el" href="a00086.html" target="_self">projection.hpp</a></td><td class="desc"><a class="el" href="a00219.html">GLM_GTX_projection</a> </td></tr>
+<tr id="row_86_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00087_source.html"><span class="icondoc"></span></a><a class="el" href="a00087.html" target="_self">gtc/quaternion.hpp</a></td><td class="desc"><a class="el" href="a00172.html">GLM_GTC_quaternion</a> </td></tr>
+<tr id="row_87_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00088_source.html"><span class="icondoc"></span></a><a class="el" href="a00088.html" target="_self">gtx/quaternion.hpp</a></td><td class="desc"><a class="el" href="a00220.html">GLM_GTX_quaternion</a> </td></tr>
+<tr id="row_88_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00089_source.html"><span class="icondoc"></span></a><a class="el" href="a00089.html" target="_self">random.hpp</a></td><td class="desc"><a class="el" href="a00173.html">GLM_GTC_random</a> </td></tr>
+<tr id="row_89_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00090_source.html"><span class="icondoc"></span></a><a class="el" href="a00090.html" target="_self">range.hpp</a></td><td class="desc"><a class="el" href="a00221.html">GLM_GTX_range</a> </td></tr>
+<tr id="row_90_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00091_source.html"><span class="icondoc"></span></a><a class="el" href="a00091.html" target="_self">raw_data.hpp</a></td><td class="desc"><a class="el" href="a00222.html">GLM_GTX_raw_data</a> </td></tr>
+<tr id="row_91_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00092_source.html"><span class="icondoc"></span></a><a class="el" href="a00092.html" target="_self">reciprocal.hpp</a></td><td class="desc"><a class="el" href="a00174.html">GLM_GTC_reciprocal</a> </td></tr>
+<tr id="row_92_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00093_source.html"><span class="icondoc"></span></a><a class="el" href="a00093.html" target="_self">rotate_normalized_axis.hpp</a></td><td class="desc"><a class="el" href="a00223.html">GLM_GTX_rotate_normalized_axis</a> </td></tr>
+<tr id="row_93_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00094_source.html"><span class="icondoc"></span></a><a class="el" href="a00094.html" target="_self">rotate_vector.hpp</a></td><td class="desc"><a class="el" href="a00224.html">GLM_GTX_rotate_vector</a> </td></tr>
+<tr id="row_94_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00095_source.html"><span class="icondoc"></span></a><a class="el" href="a00095.html" target="_self">round.hpp</a></td><td class="desc"><a class="el" href="a00175.html">GLM_GTC_round</a> </td></tr>
+<tr id="row_95_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00096_source.html"><span class="icondoc"></span></a><a class="el" href="a00096.html" target="_self">scalar_multiplication.hpp</a></td><td class="desc"><a class="el" href="a00155.html">GTX Extensions (Experimental)</a> </td></tr>
+<tr id="row_96_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00097_source.html"><span class="icondoc"></span></a><a class="el" href="a00097.html" target="_self">scalar_relational.hpp</a></td><td class="desc"><a class="el" href="a00225.html">GLM_GTX_scalar_relational</a> </td></tr>
+<tr id="row_97_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00098_source.html"><span class="icondoc"></span></a><a class="el" href="a00098.html" target="_self">setup.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_98_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00099_source.html"><span class="icondoc"></span></a><a class="el" href="a00099.html" target="_self">simd_mat4.hpp</a></td><td class="desc"><a class="el" href="a00226.html">GLM_GTX_simd_mat4</a> </td></tr>
+<tr id="row_99_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00100_source.html"><span class="icondoc"></span></a><a class="el" href="a00100.html" target="_self">simd_quat.hpp</a></td><td class="desc"><a class="el" href="a00227.html">GLM_GTX_simd_quat</a> </td></tr>
+<tr id="row_100_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00101_source.html"><span class="icondoc"></span></a><a class="el" href="a00101.html" target="_self">simd_vec4.hpp</a></td><td class="desc"><a class="el" href="a00228.html">GLM_GTX_simd_vec4</a> </td></tr>
+<tr id="row_101_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00102_source.html"><span class="icondoc"></span></a><a class="el" href="a00102.html" target="_self">spline.hpp</a></td><td class="desc"><a class="el" href="a00229.html">GLM_GTX_spline</a> </td></tr>
+<tr id="row_102_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00103_source.html"><span class="icondoc"></span></a><a class="el" href="a00103.html" target="_self">std_based_type.hpp</a></td><td class="desc"><a class="el" href="a00230.html">GLM_GTX_std_based_type</a> </td></tr>
+<tr id="row_103_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00104_source.html"><span class="icondoc"></span></a><a class="el" href="a00104.html" target="_self">string_cast.hpp</a></td><td class="desc"><a class="el" href="a00231.html">GLM_GTX_string_cast</a> </td></tr>
+<tr id="row_104_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00105_source.html"><span class="icondoc"></span></a><a class="el" href="a00105.html" target="_self">transform.hpp</a></td><td class="desc"><a class="el" href="a00232.html">GLM_GTX_transform</a> </td></tr>
+<tr id="row_105_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00106_source.html"><span class="icondoc"></span></a><a class="el" href="a00106.html" target="_self">transform2.hpp</a></td><td class="desc"><a class="el" href="a00233.html">GLM_GTX_transform2</a> </td></tr>
+<tr id="row_106_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00107_source.html"><span class="icondoc"></span></a><a class="el" href="a00107.html" target="_self">trigonometric.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_107_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00108_source.html"><span class="icondoc"></span></a><a class="el" href="a00108.html" target="_self">gtc/type_aligned.hpp</a></td><td class="desc"><a class="el" href="a00176.html">GLM_GTC_type_aligned</a> </td></tr>
+<tr id="row_108_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00109_source.html"><span class="icondoc"></span></a><a class="el" href="a00109.html" target="_self">gtx/type_aligned.hpp</a></td><td class="desc"><a class="el" href="a00234.html">GLM_GTX_type_aligned</a> </td></tr>
+<tr id="row_109_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00110_source.html"><span class="icondoc"></span></a><a class="el" href="a00110.html" target="_self">type_float.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_110_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00111_source.html"><span class="icondoc"></span></a><a class="el" href="a00111.html" target="_self">type_gentype.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_111_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00112_source.html"><span class="icondoc"></span></a><a class="el" href="a00112.html" target="_self">type_half.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_112_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00113_source.html"><span class="icondoc"></span></a><a class="el" href="a00113.html" target="_self">type_int.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_113_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00114_source.html"><span class="icondoc"></span></a><a class="el" href="a00114.html" target="_self">type_mat.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_114_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00115_source.html"><span class="icondoc"></span></a><a class="el" href="a00115.html" target="_self">type_mat2x2.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_115_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00116_source.html"><span class="icondoc"></span></a><a class="el" href="a00116.html" target="_self">type_mat2x3.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_116_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00117_source.html"><span class="icondoc"></span></a><a class="el" href="a00117.html" target="_self">type_mat2x4.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_117_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00118_source.html"><span class="icondoc"></span></a><a class="el" href="a00118.html" target="_self">type_mat3x2.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_118_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00119_source.html"><span class="icondoc"></span></a><a class="el" href="a00119.html" target="_self">type_mat3x3.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_119_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00120_source.html"><span class="icondoc"></span></a><a class="el" href="a00120.html" target="_self">type_mat3x4.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_120_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00121_source.html"><span class="icondoc"></span></a><a class="el" href="a00121.html" target="_self">type_mat4x2.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_121_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00122_source.html"><span class="icondoc"></span></a><a class="el" href="a00122.html" target="_self">type_mat4x3.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_122_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00123_source.html"><span class="icondoc"></span></a><a class="el" href="a00123.html" target="_self">type_mat4x4.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_123_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00124_source.html"><span class="icondoc"></span></a><a class="el" href="a00124.html" target="_self">type_precision.hpp</a></td><td class="desc"><a class="el" href="a00177.html">GLM_GTC_type_precision</a> </td></tr>
+<tr id="row_124_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00125_source.html"><span class="icondoc"></span></a><a class="el" href="a00125.html" target="_self">type_ptr.hpp</a></td><td class="desc"><a class="el" href="a00178.html">GLM_GTC_type_ptr</a> </td></tr>
+<tr id="row_125_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00126_source.html"><span class="icondoc"></span></a><a class="el" href="a00126.html" target="_self">type_trait.hpp</a></td><td class="desc"><a class="el" href="a00235.html">GLM_GTX_type_trait</a> </td></tr>
+<tr id="row_126_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00127_source.html"><span class="icondoc"></span></a><a class="el" href="a00127.html" target="_self">type_vec.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_127_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00128_source.html"><span class="icondoc"></span></a><a class="el" href="a00128.html" target="_self">type_vec1.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_128_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00129_source.html"><span class="icondoc"></span></a><a class="el" href="a00129.html" target="_self">type_vec2.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_129_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00130_source.html"><span class="icondoc"></span></a><a class="el" href="a00130.html" target="_self">type_vec3.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_130_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00131_source.html"><span class="icondoc"></span></a><a class="el" href="a00131.html" target="_self">type_vec4.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_131_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00132_source.html"><span class="icondoc"></span></a><a class="el" href="a00132.html" target="_self">ulp.hpp</a></td><td class="desc"><a class="el" href="a00179.html">GLM_GTC_ulp</a> </td></tr>
+<tr id="row_132_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00133_source.html"><span class="icondoc"></span></a><a class="el" href="a00133.html" target="_self">vec1.hpp</a></td><td class="desc"><a class="el" href="a00180.html">GLM_GTC_vec1</a> </td></tr>
+<tr id="row_133_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00134_source.html"><span class="icondoc"></span></a><a class="el" href="a00134.html" target="_self">vec2.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_134_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00135_source.html"><span class="icondoc"></span></a><a class="el" href="a00135.html" target="_self">vec3.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_135_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00136_source.html"><span class="icondoc"></span></a><a class="el" href="a00136.html" target="_self">vec4.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_136_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00137_source.html"><span class="icondoc"></span></a><a class="el" href="a00137.html" target="_self">vector_angle.hpp</a></td><td class="desc"><a class="el" href="a00236.html">GLM_GTX_vector_angle</a> </td></tr>
+<tr id="row_137_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00138_source.html"><span class="icondoc"></span></a><a class="el" href="a00138.html" target="_self">vector_query.hpp</a></td><td class="desc"><a class="el" href="a00237.html">GLM_GTX_vector_query</a> </td></tr>
+<tr id="row_138_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00139_source.html"><span class="icondoc"></span></a><a class="el" href="a00139.html" target="_self">vector_relational.hpp</a></td><td class="desc"><a class="el" href="a00156.html">GLM Core</a> </td></tr>
+<tr id="row_139_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a href="a00140_source.html"><span class="icondoc"></span></a><a class="el" href="a00140.html" target="_self">wrap.hpp</a></td><td class="desc"><a class="el" href="a00238.html">GLM_GTX_wrap</a> </td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/folderclosed.png b/src/third_party/glm/doc/api/folderclosed.png
new file mode 100644
index 0000000..bb8ab35
--- /dev/null
+++ b/src/third_party/glm/doc/api/folderclosed.png
Binary files differ
diff --git a/src/third_party/glm/doc/api/folderopen.png b/src/third_party/glm/doc/api/folderopen.png
new file mode 100644
index 0000000..d6c7f67
--- /dev/null
+++ b/src/third_party/glm/doc/api/folderopen.png
Binary files differ
diff --git a/src/third_party/glm/doc/api/index.html b/src/third_party/glm/doc/api/index.html
new file mode 100644
index 0000000..fb15d75
--- /dev/null
+++ b/src/third_party/glm/doc/api/index.html
@@ -0,0 +1,68 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: OpenGL Mathematics</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li class="current"><a href="index.html"><span>Main Page</span></a></li>
+ <li><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">OpenGL Mathematics </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p><a href="http://glm.g-truc.net">OpenGL Mathematics (GLM)</a> is a header only C++ mathematics library for graphics software based on the <a href="https://www.opengl.org/documentation/glsl/">OpenGL Shading Language (GLSL)</a> specification.</p>
+<p>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.</p>
+<p>This project isn't limited to GLSL features. An extension system, based on the GLSL extension conventions, provides extended capabilities: matrix transformations, quaternions, half-based types, random numbers, noise, etc...</p>
+<p>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 development context that requires a simple and convenient mathematics library.</p>
+<p>GLM is written in C++98 but can take advantage of C++11 when supported by the compiler. It is a platform independent library with no dependence and it officially supports the following compilers:</p><ul>
+<li><a href="https://developer.apple.com/Library/mac/documentation/CompilerTools/Conceptual/LLVMCompilerOverview/index.html">Apple Clang</a> 4.0 and higher</li>
+<li><a href="https://gcc.gnu.org/">GCC</a> 4.2 and higher</li>
+<li><a href="http://llvm.org/">LLVM</a> 3.0 and higher</li>
+<li><a href="https://software.intel.com/en-us/intel-compilers">Intel C++ Composer</a> XE 2013 and higher</li>
+<li><a href="http://www.visualstudio.com/">Visual Studio</a> 2010 and higher</li>
+<li><a href="https://developer.nvidia.com/about-cuda">CUDA</a> 4.0 and higher (experimental)</li>
+<li>Any conform C++98 compiler</li>
+</ul>
+<dl class="section note"><dt>Note</dt><dd>The Doxygen-generated documentation will often state that a type or function is defined in a namespace that is a child of the <a class="el" href="">glm </a> namespace. Please ignore this; All publicly available types and functions can be accessed as a direct children of the glm namespace.</dd></dl>
+<p>The source code is licensed under the <a href="http://glm.g-truc.net/copying.txt">Happy Bunny License (Modified MIT)</a> and <a href="http://glm.g-truc.net/copying.txt">MIT license</a>.</p>
+<p>These pages are the API reference only. For more information about how to use GLM, please have a look at <a href="http://glm.g-truc.net/glm.pdf">the manual</a>.</p>
+<p>Thanks for contributing to the project by <a href="https://github.com/g-truc/glm/issues">submitting tickets for bug reports and feature requests</a>. Any feedback is welcome at <a href="#" onclick="location.href='mai'+'lto:'+'glm'+'@g'+'-tr'+'uc'+'.ne'+'t'; return false;">glm@g<span style="display: none;">.nosp@m.</span>-tru<span style="display: none;">.nosp@m.</span>c.net</a>. </p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/jquery.js b/src/third_party/glm/doc/api/jquery.js
new file mode 100644
index 0000000..1f4d0b4
--- /dev/null
+++ b/src/third_party/glm/doc/api/jquery.js
@@ -0,0 +1,68 @@
+/*!
+ * jQuery JavaScript Library v1.7.1
+ * http://jquery.com/
+ *
+ * Copyright 2011, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2011, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Mon Nov 21 21:11:03 2011 -0500
+ */
+(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b4<b3;b4++){if((b9=arguments[b4])!=null){for(b2 in b9){b0=b5[b2];b1=b9[b2];if(b5===b1){continue}if(b8&&b1&&(bF.isPlainObject(b1)||(b6=bF.isArray(b1)))){if(b6){b6=false;b7=b0&&bF.isArray(b0)?b0:[]}else{b7=b0&&bF.isPlainObject(b0)?b0:{}}b5[b2]=bF.extend(b8,b7,b1)}else{if(b1!==L){b5[b2]=b1}}}}}return b5};bF.extend({noConflict:function(b0){if(bb.$===bF){bb.$=bH}if(b0&&bb.jQuery===bF){bb.jQuery=bU}return bF},isReady:false,readyWait:1,holdReady:function(b0){if(b0){bF.readyWait++}else{bF.ready(true)}},ready:function(b0){if((b0===true&&!--bF.readyWait)||(b0!==true&&!bF.isReady)){if(!av.body){return setTimeout(bF.ready,1)}bF.isReady=true;if(b0!==true&&--bF.readyWait>0){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b4<b5;){if(b6.apply(b3[b4++],b2)===false){break}}}}else{if(b0){for(b1 in b3){if(b6.call(b3[b1],b1,b3[b1])===false){break}}}else{for(;b4<b5;){if(b6.call(b3[b4],b4,b3[b4++])===false){break}}}}return b3},trim:bO?function(b0){return b0==null?"":bO.call(b0)}:function(b0){return b0==null?"":b0.toString().replace(bI,"").replace(bE,"")},makeArray:function(b3,b1){var b0=b1||[];if(b3!=null){var b2=bF.type(b3);if(b3.length==null||b2==="string"||b2==="function"||b2==="regexp"||bF.isWindow(b3)){bz.call(b0,b3)}else{bF.merge(b0,b3)}}return b0},inArray:function(b2,b3,b1){var b0;if(b3){if(bv){return bv.call(b3,b2,b1)}b0=b3.length;b1=b1?b1<0?Math.max(0,b0+b1):b1:0;for(;b1<b0;b1++){if(b1 in b3&&b3[b1]===b2){return b1}}}return -1},merge:function(b4,b2){var b3=b4.length,b1=0;if(typeof b2.length==="number"){for(var b0=b2.length;b1<b0;b1++){b4[b3++]=b2[b1]}}else{while(b2[b1]!==L){b4[b3++]=b2[b1++]}}b4.length=b3;return b4},grep:function(b1,b6,b0){var b2=[],b5;b0=!!b0;for(var b3=0,b4=b1.length;b3<b4;b3++){b5=!!b6(b1[b3],b3);if(b0!==b5){b2.push(b1[b3])}}return b2},map:function(b0,b7,b8){var b5,b6,b4=[],b2=0,b1=b0.length,b3=b0 instanceof bF||b1!==L&&typeof b1==="number"&&((b1>0&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b2<b1;b2++){b5=b7(b0[b2],b2,b8);if(b5!=null){b4[b4.length]=b5}}}else{for(b6 in b0){b5=b7(b0[b6],b6,b8);if(b5!=null){b4[b4.length]=b5}}}return b4.concat.apply([],b4)},guid:1,proxy:function(b4,b3){if(typeof b3==="string"){var b2=b4[b3];b3=b4;b4=b2}if(!bF.isFunction(b4)){return L}var b0=bK.call(arguments,2),b1=function(){return b4.apply(b3,b0.concat(bK.call(arguments)))};b1.guid=b4.guid=b4.guid||b1.guid||bF.guid++;return b1},access:function(b0,b8,b6,b2,b5,b7){var b1=b0.length;if(typeof b8==="object"){for(var b3 in b8){bF.access(b0,b3,b8[b3],b2,b5,b6)}return b0}if(b6!==L){b2=!b7&&b2&&bF.isFunction(b6);for(var b4=0;b4<b1;b4++){b5(b0[b4],b8,b2?b6.call(b0[b4],b4,b5(b0[b4],b8)):b6,b7)}return b0}return b1?b5(b0[0],b8):L},now:function(){return(new Date()).getTime()},uaMatch:function(b1){b1=b1.toLowerCase();var b0=by.exec(b1)||bR.exec(b1)||bQ.exec(b1)||b1.indexOf("compatible")<0&&bS.exec(b1)||[];return{browser:b0[1]||"",version:b0[2]||"0"}},sub:function(){function b0(b3,b4){return new b0.fn.init(b3,b4)}bF.extend(true,b0,this);b0.superclass=this;b0.fn=b0.prototype=this();b0.fn.constructor=b0;b0.sub=this.sub;b0.fn.init=function b2(b3,b4){if(b4&&b4 instanceof bF&&!(b4 instanceof b0)){b4=b0(b4)}return bF.fn.init.call(this,b3,b4,b1)};b0.fn.init.prototype=b0.fn;var b1=b0(av);return b0},browser:{}});bF.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(b1,b0){bx["[object "+b0+"]"]=b0.toLowerCase()});bV=bF.uaMatch(bX);if(bV.browser){bF.browser[bV.browser]=true;bF.browser.version=bV.version}if(bF.browser.webkit){bF.browser.safari=true}if(bM.test("\xA0")){bI=/^[\s\xA0]+/;bE=/[\s\xA0]+$/}bD=bF(av);if(av.addEventListener){e=function(){av.removeEventListener("DOMContentLoaded",e,false);bF.ready()}}else{if(av.attachEvent){e=function(){if(av.readyState==="complete"){av.detachEvent("onreadystatechange",e);bF.ready()}}}}function bw(){if(bF.isReady){return}try{av.documentElement.doScroll("left")}catch(b0){setTimeout(bw,1);return}bF.ready()}return bF})();var a2={};function X(e){var bv=a2[e]={},bw,bx;e=e.split(/\s+/);for(bw=0,bx=e.length;bw<bx;bw++){bv[e[bw]]=true}return bv}b.Callbacks=function(bw){bw=bw?(a2[bw]||X(bw)):{};var bB=[],bC=[],bx,by,bv,bz,bA,bE=function(bF){var bG,bJ,bI,bH,bK;for(bG=0,bJ=bF.length;bG<bJ;bG++){bI=bF[bG];bH=b.type(bI);if(bH==="array"){bE(bI)}else{if(bH==="function"){if(!bw.unique||!bD.has(bI)){bB.push(bI)}}}}},e=function(bG,bF){bF=bF||[];bx=!bw.memory||[bG,bF];by=true;bA=bv||0;bv=0;bz=bB.length;for(;bB&&bA<bz;bA++){if(bB[bA].apply(bG,bF)===false&&bw.stopOnFalse){bx=true;break}}by=false;if(bB){if(!bw.once){if(bC&&bC.length){bx=bC.shift();bD.fireWith(bx[0],bx[1])}}else{if(bx===true){bD.disable()}else{bB=[]}}}},bD={add:function(){if(bB){var bF=bB.length;bE(arguments);if(by){bz=bB.length}else{if(bx&&bx!==true){bv=bF;e(bx[0],bx[1])}}}return this},remove:function(){if(bB){var bF=arguments,bH=0,bI=bF.length;for(;bH<bI;bH++){for(var bG=0;bG<bB.length;bG++){if(bF[bH]===bB[bG]){if(by){if(bG<=bz){bz--;if(bG<=bA){bA--}}}bB.splice(bG--,1);if(bw.unique){break}}}}}return this},has:function(bG){if(bB){var bF=0,bH=bB.length;for(;bF<bH;bF++){if(bG===bB[bF]){return true}}}return false},empty:function(){bB=[];return this},disable:function(){bB=bC=bx=L;return this},disabled:function(){return !bB},lock:function(){bC=L;if(!bx||bx===true){bD.disable()}return this},locked:function(){return !bC},fireWith:function(bG,bF){if(bC){if(by){if(!bw.once){bC.push([bG,bF])}}else{if(!(bw.once&&bx)){e(bG,bF)}}}return this},fire:function(){bD.fireWith(this,arguments);return this},fired:function(){return !!bx}};return bD};var aJ=[].slice;b.extend({Deferred:function(by){var bx=b.Callbacks("once memory"),bw=b.Callbacks("once memory"),bv=b.Callbacks("memory"),e="pending",bA={resolve:bx,reject:bw,notify:bv},bC={done:bx.add,fail:bw.add,progress:bv.add,state:function(){return e},isResolved:bx.fired,isRejected:bw.fired,then:function(bE,bD,bF){bB.done(bE).fail(bD).progress(bF);return this},always:function(){bB.done.apply(bB,arguments).fail.apply(bB,arguments);return this},pipe:function(bF,bE,bD){return b.Deferred(function(bG){b.each({done:[bF,"resolve"],fail:[bE,"reject"],progress:[bD,"notify"]},function(bI,bL){var bH=bL[0],bK=bL[1],bJ;if(b.isFunction(bH)){bB[bI](function(){bJ=bH.apply(this,arguments);if(bJ&&b.isFunction(bJ.promise)){bJ.promise().then(bG.resolve,bG.reject,bG.notify)}else{bG[bK+"With"](this===bB?bG:this,[bJ])}})}else{bB[bI](bG[bK])}})}).promise()},promise:function(bE){if(bE==null){bE=bC}else{for(var bD in bC){bE[bD]=bC[bD]}}return bE}},bB=bC.promise({}),bz;for(bz in bA){bB[bz]=bA[bz].fire;bB[bz+"With"]=bA[bz].fireWith}bB.done(function(){e="resolved"},bw.disable,bv.lock).fail(function(){e="rejected"},bx.disable,bv.lock);if(by){by.call(bB,bB)}return bB},when:function(bA){var bx=aJ.call(arguments,0),bv=0,e=bx.length,bB=new Array(e),bw=e,by=e,bC=e<=1&&bA&&b.isFunction(bA.promise)?bA:b.Deferred(),bE=bC.promise();function bD(bF){return function(bG){bx[bF]=arguments.length>1?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv<e;bv++){if(bx[bv]&&bx[bv].promise&&b.isFunction(bx[bv].promise)){bx[bv].promise().then(bD(bv),bC.reject,bz(bv))}else{--bw}}if(!bw){bC.resolveWith(bC,bx)}}else{if(bC!==bA){bC.resolveWith(bC,e?[bA]:[])}}return bE}});b.support=(function(){var bJ,bI,bF,bG,bx,bE,bA,bD,bz,bK,bB,by,bw,bv=av.createElement("div"),bH=av.documentElement;bv.setAttribute("className","t");bv.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav></:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="<div "+e+"><div></div></div><table "+e+" cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="<div style='width:4px;'></div>";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA<bz;bA++){delete bB[bv[bA]]}if(!(by?S:b.isEmptyObject)(bB)){return}}}if(!by){delete e[bw].data;if(!S(e[bw])){return}}if(b.support.deleteExpando||!e.setInterval){delete e[bw]}else{e[bw]=null}if(bD){if(b.support.deleteExpando){delete bx[bC]}else{if(bx.removeAttribute){bx.removeAttribute(bC)}else{bx[bC]=null}}}},_data:function(bv,e,bw){return b.data(bv,e,bw,true)},acceptData:function(bv){if(bv.nodeName){var e=b.noData[bv.nodeName.toLowerCase()];if(e){return !(e===true||bv.getAttribute("classid")!==e)}}return true}});b.fn.extend({data:function(by,bA){var bB,e,bw,bz=null;if(typeof by==="undefined"){if(this.length){bz=b.data(this[0]);if(this[0].nodeType===1&&!b._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var bx=0,bv=e.length;bx<bv;bx++){bw=e[bx].name;if(bw.indexOf("data-")===0){bw=b.camelCase(bw.substring(5));a5(this[0],bw,bz[bw])}}b._data(this[0],"parsedAttrs",true)}}return bz}else{if(typeof by==="object"){return this.each(function(){b.data(this,by)})}}bB=by.split(".");bB[1]=bB[1]?"."+bB[1]:"";if(bA===L){bz=this.triggerHandler("getData"+bB[1]+"!",[bB[0]]);if(bz===L&&this.length){bz=b.data(this[0],by);bz=a5(this[0],by,bz)}return bz===L&&bB[1]?this.data(bB[0]):bz}else{return this.each(function(){var bC=b(this),bD=[bB[0],bA];bC.triggerHandler("setData"+bB[1]+"!",bD);b.data(this,by,bA);bC.triggerHandler("changeData"+bB[1]+"!",bD)})}},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function a5(bx,bw,by){if(by===L&&bx.nodeType===1){var bv="data-"+bw.replace(aA,"-$1").toLowerCase();by=bx.getAttribute(bv);if(typeof by==="string"){try{by=by==="true"?true:by==="false"?false:by==="null"?null:b.isNumeric(by)?parseFloat(by):aS.test(by)?b.parseJSON(by):by}catch(bz){}b.data(bx,bw,by)}else{by=L}}return by}function S(bv){for(var e in bv){if(e==="data"&&b.isEmptyObject(bv[e])){continue}if(e!=="toJSON"){return false}}return true}function bi(by,bx,bA){var bw=bx+"defer",bv=bx+"queue",e=bx+"mark",bz=b._data(by,bw);if(bz&&(bA==="queue"||!b._data(by,bv))&&(bA==="mark"||!b._data(by,e))){setTimeout(function(){if(!b._data(by,bv)&&!b._data(by,e)){b.removeData(by,bw,true);bz.fire()}},0)}}b.extend({_mark:function(bv,e){if(bv){e=(e||"fx")+"mark";b._data(bv,e,(b._data(bv,e)||0)+1)}},_unmark:function(by,bx,bv){if(by!==true){bv=bx;bx=by;by=false}if(bx){bv=bv||"fx";var e=bv+"mark",bw=by?0:((b._data(bx,e)||1)-1);if(bw){b._data(bx,e,bw)}else{b.removeData(bx,e,true);bi(bx,bv,"mark")}}},queue:function(bv,e,bx){var bw;if(bv){e=(e||"fx")+"queue";bw=b._data(bv,e);if(bx){if(!bw||b.isArray(bx)){bw=b._data(bv,e,b.makeArray(bx))}else{bw.push(bx)}}return bw||[]}},dequeue:function(by,bx){bx=bx||"fx";var bv=b.queue(by,bx),bw=bv.shift(),e={};if(bw==="inprogress"){bw=bv.shift()}if(bw){if(bx==="fx"){bv.unshift("inprogress")}b._data(by,bx+".run",e);bw.call(by,function(){b.dequeue(by,bx)},e)}if(!bv.length){b.removeData(by,bx+"queue "+bx+".run",true);bi(by,bx,"queue")}}});b.fn.extend({queue:function(e,bv){if(typeof e!=="string"){bv=e;e="fx"}if(bv===L){return b.queue(this[0],e)}return this.each(function(){var bw=b.queue(this,e,bv);if(e==="fx"&&bw[0]!=="inprogress"){b.dequeue(this,e)}})},dequeue:function(e){return this.each(function(){b.dequeue(this,e)})},delay:function(bv,e){bv=b.fx?b.fx.speeds[bv]||bv:bv;e=e||"fx";return this.queue(e,function(bx,bw){var by=setTimeout(bx,bv);bw.stop=function(){clearTimeout(by)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(bD,bw){if(typeof bD!=="string"){bw=bD;bD=L}bD=bD||"fx";var e=b.Deferred(),bv=this,by=bv.length,bB=1,bz=bD+"defer",bA=bD+"queue",bC=bD+"mark",bx;function bE(){if(!(--bB)){e.resolveWith(bv,[bv])}}while(by--){if((bx=b.data(bv[by],bz,L,true)||(b.data(bv[by],bA,L,true)||b.data(bv[by],bC,L,true))&&b.data(bv[by],bz,b.Callbacks("once memory"),true))){bB++;bx.add(bE)}}bE();return e.promise()}});var aP=/[\n\t\r]/g,af=/\s+/,aU=/\r/g,g=/^(?:button|input)$/i,D=/^(?:button|input|object|select|textarea)$/i,l=/^a(?:rea)?$/i,ao=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,F=b.support.getSetAttribute,be,aY,aF;b.fn.extend({attr:function(e,bv){return b.access(this,e,bv,true,b.attr)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,bv){return b.access(this,e,bv,true,b.prop)},removeProp:function(e){e=b.propFix[e]||e;return this.each(function(){try{this[e]=L;delete this[e]}catch(bv){}})},addClass:function(by){var bA,bw,bv,bx,bz,bB,e;if(b.isFunction(by)){return this.each(function(bC){b(this).addClass(by.call(this,bC,this.className))})}if(by&&typeof by==="string"){bA=by.split(af);for(bw=0,bv=this.length;bw<bv;bw++){bx=this[bw];if(bx.nodeType===1){if(!bx.className&&bA.length===1){bx.className=by}else{bz=" "+bx.className+" ";for(bB=0,e=bA.length;bB<e;bB++){if(!~bz.indexOf(" "+bA[bB]+" ")){bz+=bA[bB]+" "}}bx.className=b.trim(bz)}}}}return this},removeClass:function(bz){var bA,bw,bv,by,bx,bB,e;if(b.isFunction(bz)){return this.each(function(bC){b(this).removeClass(bz.call(this,bC,this.className))})}if((bz&&typeof bz==="string")||bz===L){bA=(bz||"").split(af);for(bw=0,bv=this.length;bw<bv;bw++){by=this[bw];if(by.nodeType===1&&by.className){if(bz){bx=(" "+by.className+" ").replace(aP," ");for(bB=0,e=bA.length;bB<e;bB++){bx=bx.replace(" "+bA[bB]+" "," ")}by.className=b.trim(bx)}else{by.className=""}}}}return this},toggleClass:function(bx,bv){var bw=typeof bx,e=typeof bv==="boolean";if(b.isFunction(bx)){return this.each(function(by){b(this).toggleClass(bx.call(this,by,this.className,bv),bv)})}return this.each(function(){if(bw==="string"){var bA,bz=0,by=b(this),bB=bv,bC=bx.split(af);while((bA=bC[bz++])){bB=e?bB:!by.hasClass(bA);by[bB?"addClass":"removeClass"](bA)}}else{if(bw==="undefined"||bw==="boolean"){if(this.className){b._data(this,"__className__",this.className)}this.className=this.className||bx===false?"":b._data(this,"__className__")||""}}})},hasClass:function(e){var bx=" "+e+" ",bw=0,bv=this.length;for(;bw<bv;bw++){if(this[bw].nodeType===1&&(" "+this[bw].className+" ").replace(aP," ").indexOf(bx)>-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv<bz;bv++){bx=bC[bv];if(bx.selected&&(b.support.optDisabled?!bx.disabled:bx.getAttribute("disabled")===null)&&(!bx.parentNode.disabled||!b.nodeName(bx.parentNode,"optgroup"))){bA=b(bx).val();if(bw){return bA}bB.push(bA)}}if(bw&&!bB.length&&bC.length){return b(bC[by]).val()}return bB},set:function(bv,bw){var e=b.makeArray(bw);b(bv).find("option").each(function(){this.selected=b.inArray(b(this).val(),e)>=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType;if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw<e;bw++){bv=bA[bw];if(bv){by=b.propFix[bv]||bv;b.attr(bx,bv,"");bx.removeAttribute(F?bv:by);if(ao.test(bv)&&by in bx){bx[by]=false}}}}},attrHooks:{type:{set:function(e,bv){if(g.test(e.nodeName)&&e.parentNode){b.error("type property can't be changed")}else{if(!b.support.radioValue&&bv==="radio"&&b.nodeName(e,"input")){var bw=e.value;e.setAttribute("type",bv);if(bw){e.value=bw}return bv}}}},value:{get:function(bv,e){if(be&&b.nodeName(bv,"button")){return be.get(bv,e)}return e in bv?bv.value:null},set:function(bv,bw,e){if(be&&b.nodeName(bv,"button")){return be.set(bv,bw,e)}bv.value=bw}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(bz,bx,bA){var bw,e,by,bv=bz.nodeType;if(!bz||bv===3||bv===8||bv===2){return}by=bv!==1||!b.isXMLDoc(bz);if(by){bx=b.propFix[bx]||bx;e=b.propHooks[bx]}if(bA!==L){if(e&&"set" in e&&(bw=e.set(bz,bA,bx))!==L){return bw}else{return(bz[bx]=bA)}}else{if(e&&"get" in e&&(bw=e.get(bz,bx))!==null){return bw}else{return bz[bx]}}},propHooks:{tabIndex:{get:function(bv){var e=bv.getAttributeNode("tabindex");return e&&e.specified?parseInt(e.value,10):D.test(bv.nodeName)||l.test(bv.nodeName)&&bv.href?0:L}}}});b.attrHooks.tabindex=b.propHooks.tabIndex;aY={get:function(bv,e){var bx,bw=b.prop(bv,e);return bw===true||typeof bw!=="boolean"&&(bx=bv.getAttributeNode(e))&&bx.nodeValue!==false?e.toLowerCase():L},set:function(bv,bx,e){var bw;if(bx===false){b.removeAttr(bv,e)}else{bw=b.propFix[e]||e;if(bw in bv){bv[bw]=true}bv.setAttribute(e,e.toLowerCase())}return e}};if(!F){aF={name:true,id:true};be=b.valHooks.button={get:function(bw,bv){var e;e=bw.getAttributeNode(bv);return e&&(aF[bv]?e.nodeValue!=="":e.specified)?e.nodeValue:L},set:function(bw,bx,bv){var e=bw.getAttributeNode(bv);if(!e){e=av.createAttribute(bv);bw.setAttributeNode(e)}return(e.nodeValue=bx+"")}};b.attrHooks.tabindex.set=be.set;b.each(["width","height"],function(bv,e){b.attrHooks[e]=b.extend(b.attrHooks[e],{set:function(bw,bx){if(bx===""){bw.setAttribute(e,"auto");return bx}}})});b.attrHooks.contenteditable={get:be.get,set:function(bv,bw,e){if(bw===""){bw="false"}be.set(bv,bw,e)}}}if(!b.support.hrefNormalized){b.each(["href","src","width","height"],function(bv,e){b.attrHooks[e]=b.extend(b.attrHooks[e],{get:function(bx){var bw=bx.getAttribute(e,2);return bw===null?L:bw}})})}if(!b.support.style){b.attrHooks.style={get:function(e){return e.style.cssText.toLowerCase()||L},set:function(e,bv){return(e.style.cssText=""+bv)}}}if(!b.support.optSelected){b.propHooks.selected=b.extend(b.propHooks.selected,{get:function(bv){var e=bv.parentNode;if(e){e.selectedIndex;if(e.parentNode){e.parentNode.selectedIndex}}return null}})}if(!b.support.enctype){b.propFix.enctype="encoding"}if(!b.support.checkOn){b.each(["radio","checkbox"],function(){b.valHooks[this]={get:function(e){return e.getAttribute("value")===null?"on":e.value}}})}b.each(["radio","checkbox"],function(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,bv){if(b.isArray(bv)){return(e.checked=b.inArray(b(e).val(),bv)>=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI<bC.length;bI++){bH=n.exec(bC[bI])||[];bF=bH[1];e=(bH[2]||"").split(".").sort();bE=b.event.special[bF]||{};bF=(by?bE.delegateType:bE.bindType)||bF;bE=b.event.special[bF]||{};bG=b.extend({type:bF,origType:bH[1],data:bA,handler:bJ,guid:bJ.guid,selector:by,quick:Y(by),namespace:e.join(".")},bv);bw=bK[bF];if(!bw){bw=bK[bF]=[];bw.delegateCount=0;if(!bE.setup||bE.setup.call(bx,bA,e,bB)===false){if(bx.addEventListener){bx.addEventListener(bF,bB,false)}else{if(bx.attachEvent){bx.attachEvent("on"+bF,bB)}}}}if(bE.add){bE.add.call(bx,bG);if(!bG.handler.guid){bG.handler.guid=bJ.guid}}if(by){bw.splice(bw.delegateCount++,0,bG)}else{bw.push(bG)}b.event.global[bF]=true}bx=null},global:{},remove:function(bJ,bE,bv,bH,bB){var bI=b.hasData(bJ)&&b._data(bJ),bF,bx,bz,bL,bC,bA,bG,bw,by,bK,bD,e;if(!bI||!(bw=bI.events)){return}bE=b.trim(bt(bE||"")).split(" ");for(bF=0;bF<bE.length;bF++){bx=n.exec(bE[bF])||[];bz=bL=bx[1];bC=bx[2];if(!bz){for(bz in bw){b.event.remove(bJ,bz+bE[bF],bv,bH,true)}continue}by=b.event.special[bz]||{};bz=(bH?by.delegateType:by.bindType)||bz;bD=bw[bz]||[];bA=bD.length;bC=bC?new RegExp("(^|\\.)"+bC.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(bG=0;bG<bD.length;bG++){e=bD[bG];if((bB||bL===e.origType)&&(!bv||bv.guid===e.guid)&&(!bC||bC.test(e.namespace))&&(!bH||bH===e.selector||bH==="**"&&e.selector)){bD.splice(bG--,1);if(e.selector){bD.delegateCount--}if(by.remove){by.remove.call(bJ,e)}}}if(bD.length===0&&bA!==bD.length){if(!by.teardown||by.teardown.call(bJ,bC)===false){b.removeEvent(bJ,bz,bI.handle)}delete bw[bz]}}if(b.isEmptyObject(bw)){bK=bI.handle;if(bK){bK.elem=null}b.removeData(bJ,["events","handle"],true)}},customEvent:{getData:true,setData:true,changeData:true},trigger:function(bv,bD,bA,bJ){if(bA&&(bA.nodeType===3||bA.nodeType===8)){return}var bG=bv.type||bv,bx=[],e,bw,bC,bH,bz,by,bF,bE,bB,bI;if(T.test(bG+b.event.triggered)){return}if(bG.indexOf("!")>=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bC<bB.length&&!bv.isPropagationStopped();bC++){bH=bB[bC][0];bv.type=bB[bC][1];bE=(b._data(bH,"events")||{})[bv.type]&&b._data(bH,"handle");if(bE){bE.apply(bH,bD)}bE=by&&bH[by];if(bE&&b.acceptData(bH)&&bE.apply(bH,bD)===false){bv.preventDefault()}}bv.type=bG;if(!bJ&&!bv.isDefaultPrevented()){if((!bF._default||bF._default.apply(bA.ownerDocument,bD)===false)&&!(bG==="click"&&b.nodeName(bA,"a"))&&b.acceptData(bA)){if(by&&bA[bG]&&((bG!=="focus"&&bG!=="blur")||bv.target.offsetWidth!==0)&&!b.isWindow(bA)){bz=bA[by];if(bz){bA[by]=null}b.event.triggered=bG;bA[bG]();b.event.triggered=L;if(bz){bA[by]=bz}}}}return bv.result},dispatch:function(e){e=b.event.fix(e||bb.event);var bz=((b._data(this,"events")||{})[e.type]||[]),bA=bz.delegateCount,bG=[].slice.call(arguments,0),by=!e.exclusive&&!e.namespace,bH=[],bC,bB,bK,bx,bF,bE,bv,bD,bI,bw,bJ;bG[0]=e;e.delegateTarget=this;if(bA&&!e.target.disabled&&!(e.button&&e.type==="click")){bx=b(this);bx.context=this.ownerDocument||this;for(bK=e.target;bK!=this;bK=bK.parentNode||this){bE={};bD=[];bx[0]=bK;for(bC=0;bC<bA;bC++){bI=bz[bC];bw=bI.selector;if(bE[bw]===L){bE[bw]=(bI.quick?j(bK,bI.quick):bx.is(bw))}if(bE[bw]){bD.push(bI)}}if(bD.length){bH.push({elem:bK,matches:bD})}}}if(bz.length>bA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC<bH.length&&!e.isPropagationStopped();bC++){bv=bH[bC];e.currentTarget=bv.elem;for(bB=0;bB<bv.matches.length&&!e.isImmediatePropagationStopped();bB++){bI=bv.matches[bB];if(by||(!e.namespace&&!bI.namespace)||e.namespace_re&&e.namespace_re.test(bI.namespace)){e.data=bI.data;e.handleObj=bI;bF=((b.event.special[bI.origType]||{}).handle||bI.handler).apply(bv.elem,bG);if(bF!==L){e.result=bF;if(bF===false){e.preventDefault();e.stopPropagation()}}}}}return e.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(bv,e){if(bv.which==null){bv.which=e.charCode!=null?e.charCode:e.keyCode}return bv}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(bx,bw){var by,bz,e,bv=bw.button,bA=bw.fromElement;if(bx.pageX==null&&bw.clientX!=null){by=bx.target.ownerDocument||av;bz=by.documentElement;e=by.body;bx.pageX=bw.clientX+(bz&&bz.scrollLeft||e&&e.scrollLeft||0)-(bz&&bz.clientLeft||e&&e.clientLeft||0);bx.pageY=bw.clientY+(bz&&bz.scrollTop||e&&e.scrollTop||0)-(bz&&bz.clientTop||e&&e.clientTop||0)}if(!bx.relatedTarget&&bA){bx.relatedTarget=bA===bx.target?bw.toElement:bA}if(!bx.which&&bv!==L){bx.which=(bv&1?1:(bv&2?3:(bv&4?2:0)))}return bx}},fix:function(bw){if(bw[b.expando]){return bw}var bv,bz,e=bw,bx=b.event.fixHooks[bw.type]||{},by=bx.props?this.props.concat(bx.props):this.props;bw=b.Event(e);for(bv=by.length;bv;){bz=by[--bv];bw[bz]=e[bz]}if(!bw.target){bw.target=e.srcElement||av}if(bw.target.nodeType===3){bw.target=bw.target.parentNode}if(bw.metaKey===L){bw.metaKey=bw.ctrlKey}return bx.filter?bx.filter(bw,e):bw},special:{ready:{setup:b.bindReady},load:{noBubble:true},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(bw,bv,e){if(b.isWindow(this)){this.onbeforeunload=e}},teardown:function(bv,e){if(this.onbeforeunload===e){this.onbeforeunload=null}}}},simulate:function(bw,by,bx,bv){var bz=b.extend(new b.Event(),bx,{type:bw,isSimulated:true,originalEvent:{}});if(bv){b.event.trigger(bz,null,by)}else{b.event.dispatch.call(by,bz)}if(bz.isDefaultPrevented()){bx.preventDefault()}}};b.event.handle=b.event.dispatch;b.removeEvent=av.removeEventListener?function(bv,e,bw){if(bv.removeEventListener){bv.removeEventListener(e,bw,false)}}:function(bv,e,bw){if(bv.detachEvent){bv.detachEvent("on"+e,bw)}};b.Event=function(bv,e){if(!(this instanceof b.Event)){return new b.Event(bv,e)}if(bv&&bv.type){this.originalEvent=bv;this.type=bv.type;this.isDefaultPrevented=(bv.defaultPrevented||bv.returnValue===false||bv.getPreventDefault&&bv.getPreventDefault())?i:bk}else{this.type=bv}if(e){b.extend(this,e)}this.timeStamp=bv&&bv.timeStamp||b.now();this[b.expando]=true};function bk(){return false}function i(){return true}b.Event.prototype={preventDefault:function(){this.isDefaultPrevented=i;var bv=this.originalEvent;if(!bv){return}if(bv.preventDefault){bv.preventDefault()}else{bv.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=i;var bv=this.originalEvent;if(!bv){return}if(bv.stopPropagation){bv.stopPropagation()}bv.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=i;this.stopPropagation()},isDefaultPrevented:bk,isPropagationStopped:bk,isImmediatePropagationStopped:bk};b.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(bv,e){b.event.special[bv]={delegateType:e,bindType:e,handle:function(bz){var bB=this,bA=bz.relatedTarget,by=bz.handleObj,bw=by.selector,bx;if(!bA||(bA!==bB&&!b.contains(bB,bA))){bz.type=by.origType;bx=by.handler.apply(this,arguments);bz.type=e}return bx}}});if(!b.support.submitBubbles){b.event.special.submit={setup:function(){if(b.nodeName(this,"form")){return false}b.event.add(this,"click._submit keypress._submit",function(bx){var bw=bx.target,bv=b.nodeName(bw,"input")||b.nodeName(bw,"button")?bw.form:L;if(bv&&!bv._submit_attached){b.event.add(bv,"submit._submit",function(e){if(this.parentNode&&!e.isTrigger){b.event.simulate("submit",this.parentNode,e,true)}});bv._submit_attached=true}})},teardown:function(){if(b.nodeName(this,"form")){return false}b.event.remove(this,"._submit")}}}if(!b.support.changeBubbles){b.event.special.change={setup:function(){if(bd.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio"){b.event.add(this,"propertychange._change",function(e){if(e.originalEvent.propertyName==="checked"){this._just_changed=true}});b.event.add(this,"click._change",function(e){if(this._just_changed&&!e.isTrigger){this._just_changed=false;b.event.simulate("change",this,e,true)}})}return false}b.event.add(this,"beforeactivate._change",function(bw){var bv=bw.target;if(bd.test(bv.nodeName)&&!bv._change_attached){b.event.add(bv,"change._change",function(e){if(this.parentNode&&!e.isSimulated&&!e.isTrigger){b.event.simulate("change",this.parentNode,e,true)}});bv._change_attached=true}})},handle:function(bv){var e=bv.target;if(this!==e||bv.isSimulated||bv.isTrigger||(e.type!=="radio"&&e.type!=="checkbox")){return bv.handleObj.handler.apply(this,arguments)}},teardown:function(){b.event.remove(this,"._change");return bd.test(this.nodeName)}}}if(!b.support.focusinBubbles){b.each({focus:"focusin",blur:"focusout"},function(bx,e){var bv=0,bw=function(by){b.event.simulate(e,by.target,b.event.fix(by),true)};b.event.special[e]={setup:function(){if(bv++===0){av.addEventListener(bx,bw,true)}},teardown:function(){if(--bv===0){av.removeEventListener(bx,bw,true)}}}})}b.fn.extend({on:function(bw,e,bz,by,bv){var bA,bx;if(typeof bw==="object"){if(typeof e!=="string"){bz=e;e=L}for(bx in bw){this.on(bx,e,bz,bw[bx],bv)}return this}if(bz==null&&by==null){by=e;bz=e=L}else{if(by==null){if(typeof e==="string"){by=bz;bz=L}else{by=bz;bz=e;e=L}}}if(by===false){by=bk}else{if(!by){return this}}if(bv===1){bA=by;by=function(bB){b().off(bB);return bA.apply(this,arguments)};by.guid=bA.guid||(bA.guid=b.guid++)}return this.each(function(){b.event.add(this,bw,by,bz,e)})},one:function(bv,e,bx,bw){return this.on.call(this,bv,e,bx,bw,1)},off:function(bw,e,by){if(bw&&bw.preventDefault&&bw.handleObj){var bv=bw.handleObj;b(bw.delegateTarget).off(bv.namespace?bv.type+"."+bv.namespace:bv.type,bv.selector,bv.handler);return this}if(typeof bw==="object"){for(var bx in bw){this.off(bx,e,bw[bx])}return this}if(e===false||typeof e==="function"){by=e;e=L}if(by===false){by=bk}return this.each(function(){b.event.remove(this,bw,by,e)})},bind:function(e,bw,bv){return this.on(e,null,bw,bv)},unbind:function(e,bv){return this.off(e,null,bv)},live:function(e,bw,bv){b(this.context).on(e,this.selector,bw,bv);return this},die:function(e,bv){b(this.context).off(e,this.selector||"**",bv);return this},delegate:function(e,bv,bx,bw){return this.on(bv,e,bx,bw)},undelegate:function(e,bv,bw){return arguments.length==1?this.off(e,"**"):this.off(bv,e,bw)},trigger:function(e,bv){return this.each(function(){b.event.trigger(e,bv,this)})},triggerHandler:function(e,bv){if(this[0]){return b.event.trigger(e,bv,this[0],true)}},toggle:function(bx){var bv=arguments,e=bx.guid||b.guid++,bw=0,by=function(bz){var bA=(b._data(this,"lastToggle"+bx.guid)||0)%bw;b._data(this,"lastToggle"+bx.guid,bA+1);bz.preventDefault();return bv[bA].apply(this,arguments)||false};by.guid=e;while(bw<bv.length){bv[bw++].guid=e}return this.click(by)},hover:function(e,bv){return this.mouseenter(e).mouseleave(bv||e)}});b.each(("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu").split(" "),function(bv,e){b.fn[e]=function(bx,bw){if(bw==null){bw=bx;bx=null}return arguments.length>0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}});
+/*!
+ * Sizzle CSS Selector Engine
+ * Copyright 2011, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ * More information: http://sizzlejs.com/
+ */
+(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e<bR.length;e++){if(bR[e]===bR[e-1]){bR.splice(e--,1)}}}}return bR};by.matches=function(e,bR){return by(e,null,null,bR)};by.matchesSelector=function(e,bR){return by(bR,null,null,[e]).length>0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS<bU;bS++){bV=bE.order[bS];if((bT=bE.leftMatch[bV].exec(bX))){bR=bT[1];bT.splice(1,1);if(bR.substr(bR.length-1)!=="\\"){bT[1]=(bT[1]||"").replace(bK,"");bW=bE.find[bV](bT,e,bY);if(bW!=null){bX=bX.replace(bE.match[bV],"");break}}}}if(!bW){bW=typeof e.getElementsByTagName!=="undefined"?e.getElementsByTagName("*"):[]}return{set:bW,expr:bX}};by.filter=function(b1,b0,b4,bU){var bW,e,bZ,b6,b3,bR,bT,bV,b2,bS=b1,b5=[],bY=b0,bX=b0&&b0[0]&&by.isXML(b0[0]);while(b1&&b0.length){for(bZ in bE.filter){if((bW=bE.leftMatch[bZ].exec(b1))!=null&&bW[2]){bR=bE.filter[bZ];bT=bW[1];e=false;bW.splice(1,1);if(bT.substr(bT.length-1)==="\\"){continue}if(bY===b5){b5=[]}if(bE.preFilter[bZ]){bW=bE.preFilter[bZ](bW,bY,b4,b5,bU,bX);if(!bW){e=b6=true}else{if(bW===true){continue}}}if(bW){for(bV=0;(b3=bY[bV])!=null;bV++){if(b3){b6=bR(b3,bW,bV,bY);b2=bU^b6;if(b4&&b6!=null){if(b2){e=true}else{bY[bV]=false}}else{if(b2){b5.push(b3);e=true}}}}}if(b6!==L){if(!b4){bY=b5}b1=b1.replace(bE.match[bZ],"");if(!e){return[]}break}}}if(b1===bS){if(e==null){by.error(b1)}else{break}}bS=b1}return bY};by.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)};var bw=by.getText=function(bU){var bS,bT,e=bU.nodeType,bR="";if(e){if(e===1||e===9){if(typeof bU.textContent==="string"){return bU.textContent}else{if(typeof bU.innerText==="string"){return bU.innerText.replace(bO,"")}else{for(bU=bU.firstChild;bU;bU=bU.nextSibling){bR+=bw(bU)}}}}else{if(e===3||e===4){return bU.nodeValue}}}else{for(bS=0;(bT=bU[bS]);bS++){if(bT.nodeType!==8){bR+=bw(bT)}}}return bR};var bE=by.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(e){return e.getAttribute("href")},type:function(e){return e.getAttribute("type")}},relative:{"+":function(bW,bR){var bT=typeof bR==="string",bV=bT&&!bQ.test(bR),bX=bT&&!bV;if(bV){bR=bR.toLowerCase()}for(var bS=0,e=bW.length,bU;bS<e;bS++){if((bU=bW[bS])){while((bU=bU.previousSibling)&&bU.nodeType!==1){}bW[bS]=bX||bU&&bU.nodeName.toLowerCase()===bR?bU||false:bU===bR}}if(bX){by.filter(bR,bW,true)}},">":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS<e;bS++){bV=bW[bS];if(bV){var bT=bV.parentNode;bW[bS]=bT.nodeName.toLowerCase()===bR?bT:false}}}else{for(;bS<e;bS++){bV=bW[bS];if(bV){bW[bS]=bU?bV.parentNode:bV.parentNode===bR}}if(bU){by.filter(bR,bW,true)}}},"":function(bT,bR,bV){var bU,bS=bI++,e=bN;if(typeof bR==="string"&&!bQ.test(bR)){bR=bR.toLowerCase();bU=bR;e=bv}e("parentNode",bR,bS,bT,bU,bV)},"~":function(bT,bR,bV){var bU,bS=bI++,e=bN;if(typeof bR==="string"&&!bQ.test(bR)){bR=bR.toLowerCase();bU=bR;e=bv}e("previousSibling",bR,bS,bT,bU,bV)}},find:{ID:function(bR,bS,bT){if(typeof bS.getElementById!=="undefined"&&!bT){var e=bS.getElementById(bR[1]);return e&&e.parentNode?[e]:[]}},NAME:function(bS,bV){if(typeof bV.getElementsByName!=="undefined"){var bR=[],bU=bV.getElementsByName(bS[1]);for(var bT=0,e=bU.length;bT<e;bT++){if(bU[bT].getAttribute("name")===bS[1]){bR.push(bU[bT])}}return bR.length===0?null:bR}},TAG:function(e,bR){if(typeof bR.getElementsByTagName!=="undefined"){return bR.getElementsByTagName(e[1])}}},preFilter:{CLASS:function(bT,bR,bS,e,bW,bX){bT=" "+bT[1].replace(bK,"")+" ";if(bX){return bT}for(var bU=0,bV;(bV=bR[bU])!=null;bU++){if(bV){if(bW^(bV.className&&(" "+bV.className+" ").replace(/[\t\n\r]/g," ").indexOf(bT)>=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1},lt:function(bS,bR,e){return bR<e[3]-0},gt:function(bS,bR,e){return bR>e[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV<bU;bV++){if(bT[bV]===bS){return false}}return true}else{by.error(e)}}}},CHILD:function(bS,bU){var bT,b0,bW,bZ,e,bV,bY,bX=bU[1],bR=bS;switch(bX){case"only":case"first":while((bR=bR.previousSibling)){if(bR.nodeType===1){return false}}if(bX==="first"){return true}bR=bS;case"last":while((bR=bR.nextSibling)){if(bR.nodeType===1){return false}}return true;case"nth":bT=bU[2];b0=bU[3];if(bT===1&&b0===0){return true}bW=bU[0];bZ=bS.parentNode;if(bZ&&(bZ[bC]!==bW||!bS.nodeIndex)){bV=0;for(bR=bZ.firstChild;bR;bR=bR.nextSibling){if(bR.nodeType===1){bR.nodeIndex=++bV}}bZ[bC]=bW}bY=bS.nodeIndex-b0;if(bT===0){return bY===0}else{return(bY%bT===0&&bY/bT>=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS<e;bS++){bR.push(bU[bS])}}else{for(;bU[bS];bS++){bR.push(bU[bS])}}}return bR}}var bJ,bG;if(av.documentElement.compareDocumentPosition){bJ=function(bR,e){if(bR===e){bB=true;return 0}if(!bR.compareDocumentPosition||!e.compareDocumentPosition){return bR.compareDocumentPosition?-1:1}return bR.compareDocumentPosition(e)&4?-1:1}}else{bJ=function(bY,bX){if(bY===bX){bB=true;return 0}else{if(bY.sourceIndex&&bX.sourceIndex){return bY.sourceIndex-bX.sourceIndex}}var bV,bR,bS=[],e=[],bU=bY.parentNode,bW=bX.parentNode,bZ=bU;if(bU===bW){return bG(bY,bX)}else{if(!bU){return -1}else{if(!bW){return 1}}}while(bZ){bS.unshift(bZ);bZ=bZ.parentNode}bZ=bW;while(bZ){e.unshift(bZ);bZ=bZ.parentNode}bV=bS.length;bR=e.length;for(var bT=0;bT<bV&&bT<bR;bT++){if(bS[bT]!==e[bT]){return bG(bS[bT],e[bT])}}return bT===bV?bG(bY,e[bT],-1):bG(bS[bT],bX,1)};bG=function(bR,e,bS){if(bR===e){return bS}var bT=bR.nextSibling;while(bT){if(bT===e){return -1}bT=bT.nextSibling}return 1}}(function(){var bR=av.createElement("div"),bS="script"+(new Date()).getTime(),e=av.documentElement;bR.innerHTML="<a name='"+bS+"'/>";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="<a href='#'></a>";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="<p class='TEST'></p>";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="<div class='test e'></div><div class='test'></div>";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT<bS;bT++){var e=bZ[bT];if(e){var bU=false;e=e[bR];while(e){if(e[bC]===bV){bU=bZ[e.sizset];break}if(e.nodeType===1&&!bY){e[bC]=bV;e.sizset=bT}if(e.nodeName.toLowerCase()===bW){bU=e;break}e=e[bR]}bZ[bT]=bU}}}function bN(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT<bS;bT++){var e=bZ[bT];if(e){var bU=false;e=e[bR];while(e){if(e[bC]===bV){bU=bZ[e.sizset];break}if(e.nodeType===1){if(!bY){e[bC]=bV;e.sizset=bT}if(typeof bW!=="string"){if(e===bW){bU=true;break}}else{if(by.filter(bW,[e]).length>0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT<bR;bT++){by(bS,bY[bT],bX,bW)}return by.filter(bU,bX)};by.attr=b.attr;by.selectors.attrMap={};b.find=by;b.expr=by.selectors;b.expr[":"]=b.expr.filters;b.unique=by.uniqueSort;b.text=by.getText;b.isXMLDoc=by.isXML;b.contains=by.contains})();var ab=/Until$/,aq=/^(?:parents|prevUntil|prevAll)/,a9=/,/,bp=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,H=b.expr.match.POS,ay={children:true,contents:true,next:true,prev:true};b.fn.extend({find:function(e){var bw=this,by,bv;if(typeof e!=="string"){return b(e).filter(function(){for(by=0,bv=bw.length;by<bv;by++){if(b.contains(bw[by],this)){return true}}})}var bx=this.pushStack("","find",e),bA,bB,bz;for(by=0,bv=this.length;by<bv;by++){bA=bx.length;b.find(e,this[by],bx);if(by>0){for(bB=bA;bB<bx.length;bB++){for(bz=0;bz<bA;bz++){if(bx[bz]===bx[bB]){bx.splice(bB--,1);break}}}}}return bx},has:function(bv){var e=b(bv);return this.filter(function(){for(var bx=0,bw=e.length;bx<bw;bx++){if(b.contains(this,e[bx])){return true}}})},not:function(e){return this.pushStack(aG(this,e,false),"not",e)},filter:function(e){return this.pushStack(aG(this,e,true),"filter",e)},is:function(e){return !!e&&(typeof e==="string"?H.test(e)?b(e,this.context).index(this[0])>=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw<by.length;bw++){if(b(bz).is(by[bw])){bv.push({selector:by[bw],elem:bz,level:bB})}}bz=bz.parentNode;bB++}return bv}var bA=H.test(by)||typeof by!=="string"?b(by,bx||this.context):0;for(bw=0,e=this.length;bw<e;bw++){bz=this[bw];while(bz){if(bA?bA.index(bz)>-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/<tbody/i,W=/<|&#?\w+;/,ae=/<(?:script|style)/i,O=/<(?:script|object|embed|option|style)/i,ah=new RegExp("<(?:"+aR+")","i"),o=/checked\s*(?:[^=]|=\s*.checked.)/i,bm=/\/(java|ecma)script/i,aN=/^\s*<!(?:\[CDATA\[|\-\-)/,ax={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},ac=a(av);ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div<div>","</div>"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1></$2>");try{for(var bw=0,bv=this.length;bw<bv;bw++){if(this[bw].nodeType===1){b.cleanData(this[bw].getElementsByTagName("*"));this[bw].innerHTML=bx}}}catch(by){this.empty().append(bx)}}else{if(b.isFunction(bx)){this.each(function(bz){var e=b(this);e.html(bx.call(this,bz,e.html()))})}else{this.empty().append(bx)}}}return this},replaceWith:function(e){if(this[0]&&this[0].parentNode){if(b.isFunction(e)){return this.each(function(bx){var bw=b(this),bv=bw.html();bw.replaceWith(e.call(this,bx,bv))})}if(typeof e!=="string"){e=b(e).detach()}return this.each(function(){var bw=this.nextSibling,bv=this.parentNode;b(this).remove();if(bw){b(bw).before(e)}else{b(bv).append(e)}})}else{return this.length?this.pushStack(b(b.isFunction(e)?e():e),"replaceWith",e):this}},detach:function(e){return this.remove(e,true)},domManip:function(bB,bF,bE){var bx,by,bA,bD,bC=bB[0],bv=[];if(!b.support.checkClone&&arguments.length===3&&typeof bC==="string"&&o.test(bC)){return this.each(function(){b(this).domManip(bB,bF,bE,true)})}if(b.isFunction(bC)){return this.each(function(bH){var bG=b(this);bB[0]=bC.call(this,bH,bF?bG.html():L);bG.domManip(bB,bF,bE)})}if(this[0]){bD=bC&&bC.parentNode;if(b.support.parentNode&&bD&&bD.nodeType===11&&bD.childNodes.length===this.length){bx={fragment:bD}}else{bx=b.buildFragment(bB,this,bv)}bA=bx.fragment;if(bA.childNodes.length===1){by=bA=bA.firstChild}else{by=bA.firstChild}if(by){bF=bF&&b.nodeName(by,"tr");for(var bw=0,e=this.length,bz=e-1;bw<e;bw++){bE.call(bF?ba(this[bw],by):this[bw],bx.cacheable||(e>1&&bw<bz)?b.clone(bA,true,true):bA)}}if(bv.length){b.each(bv,bo)}}return this}});function ba(e,bv){return b.nodeName(e,"table")?(e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody"))):e}function t(bB,bv){if(bv.nodeType!==1||!b.hasData(bB)){return}var by,bx,e,bA=b._data(bB),bz=b._data(bv,bA),bw=bA.events;if(bw){delete bz.handle;bz.events={};for(by in bw){for(bx=0,e=bw[by].length;bx<e;bx++){b.event.add(bv,by+(bw[by][bx].namespace?".":"")+bw[by][bx].namespace,bw[by][bx],bw[by][bx].data)}}}if(bz.data){bz.data=b.extend({},bz.data)}}function ai(bv,e){var bw;if(e.nodeType!==1){return}if(e.clearAttributes){e.clearAttributes()}if(e.mergeAttributes){e.mergeAttributes(bv)}bw=e.nodeName.toLowerCase();if(bw==="object"){e.outerHTML=bv.outerHTML}else{if(bw==="input"&&(bv.type==="checkbox"||bv.type==="radio")){if(bv.checked){e.defaultChecked=e.checked=bv.checked}if(e.value!==bv.value){e.value=bv.value}}else{if(bw==="option"){e.selected=bv.defaultSelected}else{if(bw==="input"||bw==="textarea"){e.defaultValue=bv.defaultValue}}}}e.removeAttribute(b.expando)}b.buildFragment=function(bz,bx,bv){var by,e,bw,bA,bB=bz[0];if(bx&&bx[0]){bA=bx[0].ownerDocument||bx[0]}if(!bA.createDocumentFragment){bA=av}if(bz.length===1&&typeof bB==="string"&&bB.length<512&&bA===av&&bB.charAt(0)==="<"&&!O.test(bB)&&(b.support.checkClone||!o.test(bB))&&(b.support.html5Clone||!ah.test(bB))){e=true;bw=b.fragments[bB];if(bw&&bw!==1){by=bw}}if(!by){by=bA.createDocumentFragment();b.clean(bz,bA,by,bv)}if(e){b.fragments[bB]=bw?by:1}return{fragment:by,cacheable:e}};b.fragments={};b.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,bv){b.fn[e]=function(bw){var bz=[],bC=b(bw),bB=this.length===1&&this[0].parentNode;if(bB&&bB.nodeType===11&&bB.childNodes.length===1&&bC.length===1){bC[bv](this[0]);return this}else{for(var bA=0,bx=bC.length;bA<bx;bA++){var by=(bA>0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1></$2>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]==="<table>"&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB<bG;bB++){E(bz[bB])}}else{E(bz)}}if(bz.nodeType){bI.push(bz)}else{bI=b.merge(bI,bz)}}if(bH){bF=function(bL){return !bL.type||bm.test(bL.type)};for(bE=0;bI[bE];bE++){if(bA&&b.nodeName(bI[bE],"script")&&(!bI[bE].type||bI[bE].type.toLowerCase()==="text/javascript")){bA.push(bI[bE].parentNode?bI[bE].parentNode.removeChild(bI[bE]):bI[bE])}else{if(bI[bE].nodeType===1){var bJ=b.grep(bI[bE].getElementsByTagName("script"),bF);bI.splice.apply(bI,[bE+1,0].concat(bJ))}bH.appendChild(bI[bE])}}}return bI},cleanData:function(bv){var by,bw,e=b.cache,bB=b.event.special,bA=b.support.deleteExpando;for(var bz=0,bx;(bx=bv[bz])!=null;bz++){if(bx.nodeName&&b.noData[bx.nodeName.toLowerCase()]){continue}bw=bx[b.expando];if(bw){by=e[bw];if(by&&by.events){for(var bC in by.events){if(bB[bC]){b.event.remove(bx,bC)}else{b.removeEvent(bx,bC,by.handle)}}if(by.handle){by.handle.elem=null}}if(bA){delete bx[b.expando]}else{if(bx.removeAttribute){bx.removeAttribute(b.expando)}}delete e[bw]}}}});function bo(e,bv){if(bv.src){b.ajax({url:bv.src,async:false,dataType:"script"})}else{b.globalEval((bv.text||bv.textContent||bv.innerHTML||"").replace(aN,"/*$0*/"))}if(bv.parentNode){bv.parentNode.removeChild(bv)}}var ak=/alpha\([^)]*\)/i,au=/opacity=([^)]*)/,z=/([A-Z]|^ms)/g,bc=/^-?\d+(?:px)?$/i,bn=/^-?\d/,I=/^([\-+])=([\-+.\de]+)/,a7={position:"absolute",visibility:"hidden",display:"block"},an=["Left","Right"],a1=["Top","Bottom"],Z,aI,aX;b.fn.css=function(e,bv){if(arguments.length===2&&bv===L){return this}return b.access(this,e,bv,true,function(bx,bw,by){return by!==L?b.style(bx,bw,by):b.css(bx,bw)})};b.extend({cssHooks:{opacity:{get:function(bw,bv){if(bv){var e=Z(bw,"opacity","opacity");return e===""?"1":e}else{return bw.style.opacity}}}},cssNumber:{fillOpacity:true,fontWeight:true,lineHeight:true,opacity:true,orphans:true,widows:true,zIndex:true,zoom:true},cssProps:{"float":b.support.cssFloat?"cssFloat":"styleFloat"},style:function(bx,bw,bD,by){if(!bx||bx.nodeType===3||bx.nodeType===8||!bx.style){return}var bB,bC,bz=b.camelCase(bw),bv=bx.style,bE=b.cssHooks[bz];bw=b.cssProps[bz]||bz;if(bD!==L){bC=typeof bD;if(bC==="string"&&(bB=I.exec(bD))){bD=(+(bB[1]+1)*+bB[2])+parseFloat(b.css(bx,bw));bC="number"}if(bD==null||bC==="number"&&isNaN(bD)){return}if(bC==="number"&&!b.cssNumber[bz]){bD+="px"}if(!bE||!("set" in bE)||(bD=bE.set(bx,bD))!==L){try{bv[bw]=bD}catch(bA){}}}else{if(bE&&"get" in bE&&(bB=bE.get(bx,false,by))!==L){return bB}return bv[bw]}},css:function(by,bx,bv){var bw,e;bx=b.camelCase(bx);e=b.cssHooks[bx];bx=b.cssProps[bx]||bx;if(bx==="cssFloat"){bx="float"}if(e&&"get" in e&&(bw=e.get(by,true,bv))!==L){return bw}else{if(Z){return Z(by,bx)}}},swap:function(bx,bw,by){var e={};for(var bv in bw){e[bv]=bx.style[bv];bx.style[bv]=bw[bv]}by.call(bx);for(bv in bw){bx.style[bv]=e[bv]}}});b.curCSS=b.css;b.each(["height","width"],function(bv,e){b.cssHooks[e]={get:function(by,bx,bw){var bz;if(bx){if(by.offsetWidth!==0){return p(by,e,bw)}else{b.swap(by,a7,function(){bz=p(by,e,bw)})}return bz}},set:function(bw,bx){if(bc.test(bx)){bx=parseFloat(bx);if(bx>=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length;if(bA>0){if(bv!=="border"){for(;bx<e;bx++){if(!bv){bA-=parseFloat(b.css(by,"padding"+bz[bx]))||0}if(bv==="margin"){bA+=parseFloat(b.css(by,bv+bz[bx]))||0}else{bA-=parseFloat(b.css(by,"border"+bz[bx]+"Width"))||0}}}return bA+"px"}bA=Z(by,bw,bw);if(bA<0||bA==null){bA=by.style[bw]||0}bA=parseFloat(bA)||0;if(bv){for(;bx<e;bx++){bA+=parseFloat(b.css(by,"padding"+bz[bx]))||0;if(bv!=="padding"){bA+=parseFloat(b.css(by,"border"+bz[bx]+"Width"))||0}if(bv==="margin"){bA+=parseFloat(b.css(by,bv+bz[bx]))||0}}}return bA+"px"}if(b.expr&&b.expr.filters){b.expr.filters.hidden=function(bw){var bv=bw.offsetWidth,e=bw.offsetHeight;return(bv===0&&e===0)||(!b.support.reliableHiddenOffsets&&((bw.style&&bw.style.display)||b.css(bw,"display"))==="none")};b.expr.filters.visible=function(e){return !b.expr.filters.hidden(e)}}var k=/%20/g,ap=/\[\]$/,bs=/\r?\n/g,bq=/#.*$/,aD=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,aZ=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,aM=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,aQ=/^(?:GET|HEAD)$/,c=/^\/\//,M=/\?/,a6=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw<bz;bw++){bv=bx[bw];bC=/^\+/.test(bv);if(bC){bv=bv.substr(1)||"*"}bB=e[bv]=e[bv]||[];bB[bC?"unshift":"push"](bA)}}}}function aW(bv,bE,bz,bD,bB,bx){bB=bB||bE.dataTypes[0];bx=bx||{};bx[bB]=true;var bA=bv[bB],bw=0,e=bA?bA.length:0,by=(bv===aa),bC;for(;bw<e&&(by||!bC);bw++){bC=bA[bw](bE,bz,bD);if(typeof bC==="string"){if(!by||bx[bC]){bC=L}else{bE.dataTypes.unshift(bC);bC=aW(bv,bE,bz,bD,bC,bx)}}}if((by||!bC)&&!bx["*"]){bC=aW(bv,bE,bz,bD,"*",bx)}return bC}function am(bw,bx){var bv,e,by=b.ajaxSettings.flatOptions||{};for(bv in bx){if(bx[bv]!==L){(by[bv]?bw:(e||(e={})))[bv]=bx[bv]}}if(e){b.extend(true,bw,e)}}b.fn.extend({load:function(bw,bz,bA){if(typeof bw!=="string"&&A){return A.apply(this,arguments)}else{if(!this.length){return this}}var by=bw.indexOf(" ");if(by>=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("<div>").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA<bw;bA++){if(bA===1){for(bE in bH.converters){if(typeof bE==="string"){bG[bE.toLowerCase()]=bH.converters[bE]}}}bx=bC;bC=bD[bA];if(bC==="*"){bC=bx}else{if(bx!=="*"&&bx!==bC){by=bx+" "+bC;bF=bG[by]||bG["* "+bC];if(!bF){e=L;for(bv in bG){bB=bv.split(" ");if(bB[0]===bx||bB[0]==="*"){e=bG[bB[1]+" "+bC];if(e){bv=bG[bv];if(bv===true){bF=e}else{if(e===true){bF=bv}}break}}}}if(!(bF||e)){b.error("No conversion from "+by.replace(" "," to "))}if(bF!==true){bz=bF?bF(bz):e(bv(bz))}}}}return bz}var aC=b.now(),u=/(\=)\?(&|$)|\?\?/i;b.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return b.expando+"_"+(aC++)}});b.ajaxPrefilter("json jsonp",function(bD,bA,bC){var bx=bD.contentType==="application/x-www-form-urlencoded"&&(typeof bD.data==="string");if(bD.dataTypes[0]==="jsonp"||bD.jsonp!==false&&(u.test(bD.url)||bx&&u.test(bD.data))){var bB,bw=bD.jsonpCallback=b.isFunction(bD.jsonpCallback)?bD.jsonpCallback():bD.jsonpCallback,bz=bb[bw],e=bD.url,by=bD.data,bv="$1"+bw+"$2";if(bD.jsonp!==false){e=e.replace(u,bv);if(bD.url===e){if(bx){by=by.replace(u,bv)}if(bD.data===by){e+=(/\?/.test(e)?"&":"?")+bD.jsonp+"="+bw}}}bD.url=e;bD.data=by;bb[bw]=function(bE){bB=[bE]};bC.always(function(){bb[bw]=bz;if(bB&&b.isFunction(bz)){bb[bw](bB[0])}});bD.converters["script json"]=function(){if(!bB){b.error(bw+" was not called")}return bB[0]};bD.dataTypes[0]="json";return"script"}});b.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(e){b.globalEval(e);return e}}});b.ajaxPrefilter("script",function(e){if(e.cache===L){e.cache=false}if(e.crossDomain){e.type="GET";e.global=false}});b.ajaxTransport("script",function(bw){if(bw.crossDomain){var e,bv=av.head||av.getElementsByTagName("head")[0]||av.documentElement;return{send:function(bx,by){e=av.createElement("script");e.async="async";if(bw.scriptCharset){e.charset=bw.scriptCharset}e.src=bw.url;e.onload=e.onreadystatechange=function(bA,bz){if(bz||!e.readyState||/loaded|complete/.test(e.readyState)){e.onload=e.onreadystatechange=null;if(bv&&e.parentNode){bv.removeChild(e)}e=L;if(!bz){by(200,"success")}}};bv.insertBefore(e,bv.firstChild)},abort:function(){if(e){e.onload(0,1)}}}}});var B=bb.ActiveXObject?function(){for(var e in N){N[e](0,1)}}:false,y=0,N;function aL(){try{return new bb.XMLHttpRequest()}catch(bv){}}function aj(){try{return new bb.ActiveXObject("Microsoft.XMLHTTP")}catch(bv){}}b.ajaxSettings.xhr=bb.ActiveXObject?function(){return !this.isLocal&&aL()||aj()}:aL;(function(e){b.extend(b.support,{ajax:!!e,cors:!!e&&("withCredentials" in e)})})(b.ajaxSettings.xhr());if(b.support.ajax){b.ajaxTransport(function(e){if(!e.crossDomain||b.support.cors){var bv;return{send:function(bB,bw){var bA=e.xhr(),bz,by;if(e.username){bA.open(e.type,e.url,e.async,e.username,e.password)}else{bA.open(e.type,e.url,e.async)}if(e.xhrFields){for(by in e.xhrFields){bA[by]=e.xhrFields[by]}}if(e.mimeType&&bA.overrideMimeType){bA.overrideMimeType(e.mimeType)}if(!e.crossDomain&&!bB["X-Requested-With"]){bB["X-Requested-With"]="XMLHttpRequest"}try{for(by in bB){bA.setRequestHeader(by,bB[by])}}catch(bx){}bA.send((e.hasContent&&e.data)||null);bv=function(bK,bE){var bF,bD,bC,bI,bH;try{if(bv&&(bE||bA.readyState===4)){bv=L;if(bz){bA.onreadystatechange=b.noop;if(B){delete N[bz]}}if(bE){if(bA.readyState!==4){bA.abort()}}else{bF=bA.status;bC=bA.getAllResponseHeaders();bI={};bH=bA.responseXML;if(bH&&bH.documentElement){bI.xml=bH}bI.text=bA.responseText;try{bD=bA.statusText}catch(bJ){bD=""}if(!bF&&e.isLocal&&!e.crossDomain){bF=bI.text?200:404}else{if(bF===1223){bF=204}}}}}catch(bG){if(!bE){bw(-1,bG)}}if(bI){bw(bF,bD,bI,bC)}};if(!e.async||bA.readyState===4){bv()}else{bz=++y;if(B){if(!N){N={};b(bb).unload(B)}N[bz]=bv}bA.onreadystatechange=bv}},abort:function(){if(bv){bv(0,1)}}}}})}var Q={},a8,m,aB=/^(?:toggle|show|hide)$/,aT=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,a3,aH=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],a4;b.fn.extend({show:function(bx,bA,bz){var bw,by;if(bx||bx===0){return this.animate(a0("show",3),bx,bA,bz)}else{for(var bv=0,e=this.length;bv<e;bv++){bw=this[bv];if(bw.style){by=bw.style.display;if(!b._data(bw,"olddisplay")&&by==="none"){by=bw.style.display=""}if(by===""&&b.css(bw,"display")==="none"){b._data(bw,"olddisplay",x(bw.nodeName))}}}for(bv=0;bv<e;bv++){bw=this[bv];if(bw.style){by=bw.style.display;if(by===""||by==="none"){bw.style.display=b._data(bw,"olddisplay")||""}}}return this}},hide:function(bx,bA,bz){if(bx||bx===0){return this.animate(a0("hide",3),bx,bA,bz)}else{var bw,by,bv=0,e=this.length;for(;bv<e;bv++){bw=this[bv];if(bw.style){by=b.css(bw,"display");if(by!=="none"&&!b._data(bw,"olddisplay")){b._data(bw,"olddisplay",by)}}}for(bv=0;bv<e;bv++){if(this[bv].style){this[bv].style.display="none"}}return this}},_toggle:b.fn.toggle,toggle:function(bw,bv,bx){var e=typeof bw==="boolean";if(b.isFunction(bw)&&b.isFunction(bv)){this._toggle.apply(this,arguments)}else{if(bw==null||e){this.each(function(){var by=e?bw:b(this).is(":hidden");b(this)[by?"show":"hide"]()})}else{this.animate(a0("toggle",3),bw,bv,bx)}}return this},fadeTo:function(e,bx,bw,bv){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:bx},e,bw,bv)},animate:function(bz,bw,by,bx){var e=b.speed(bw,by,bx);if(b.isEmptyObject(bz)){return this.each(e.complete,[false])}bz=b.extend({},bz);function bv(){if(e.queue===false){b._mark(this)}var bE=b.extend({},e),bK=this.nodeType===1,bI=bK&&b(this).is(":hidden"),bB,bF,bD,bJ,bH,bC,bG,bL,bA;bE.animatedProperties={};for(bD in bz){bB=b.camelCase(bD);if(bD!==bB){bz[bB]=bz[bD];delete bz[bD]}bF=bz[bB];if(b.isArray(bF)){bE.animatedProperties[bB]=bF[1];bF=bz[bB]=bF[0]}else{bE.animatedProperties[bB]=bE.specialEasing&&bE.specialEasing[bB]||bE.easing||"swing"}if(bF==="hide"&&bI||bF==="show"&&!bI){return bE.complete.call(this)}if(bK&&(bB==="height"||bB==="width")){bE.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY];if(b.css(this,"display")==="inline"&&b.css(this,"float")==="none"){if(!b.support.inlineBlockNeedsLayout||x(this.nodeName)==="inline"){this.style.display="inline-block"}else{this.style.zoom=1}}}}if(bE.overflow!=null){this.style.overflow="hidden"}for(bD in bz){bJ=new b.fx(this,bE,bD);bF=bz[bD];if(aB.test(bF)){bA=b._data(this,"toggle"+bD)||(bF==="toggle"?bI?"show":"hide":0);if(bA){b._data(this,"toggle"+bD,bA==="show"?"hide":"show");bJ[bA]()}else{bJ[bF]()}}else{bH=aT.exec(bF);bC=bJ.cur();if(bH){bG=parseFloat(bH[2]);bL=bH[3]||(b.cssNumber[bD]?"":"px");if(bL!=="px"){b.style(this,bD,(bG||1)+bL);bC=((bG||1)/bJ.cur())*bC;b.style(this,bD,bC+bL)}if(bH[1]){bG=((bH[1]==="-="?-1:1)*bG)+bC}bJ.custom(bC,bG,bL)}else{bJ.custom(bC,bF,"")}}}return true}return e.queue===false?this.each(bv):this.queue(e.queue,bv)},stop:function(bw,bv,e){if(typeof bw!=="string"){e=bv;bv=bw;bw=L}if(bv&&bw!==false){this.queue(bw||"fx",[])}return this.each(function(){var bx,by=false,bA=b.timers,bz=b._data(this);if(!e){b._unmark(true,this)}function bB(bE,bF,bD){var bC=bF[bD];b.removeData(bE,bD,true);bC.stop(e)}if(bw==null){for(bx in bz){if(bz[bx]&&bz[bx].stop&&bx.indexOf(".run")===bx.length-4){bB(this,bz,bx)}}}else{if(bz[bx=bw+".run"]&&bz[bx].stop){bB(this,bz,bx)}}for(bx=bA.length;bx--;){if(bA[bx].elem===this&&(bw==null||bA[bx].queue===bw)){if(e){bA[bx](true)}else{bA[bx].saveState()}by=true;bA.splice(bx,1)}}if(!(e&&by)){b.dequeue(this,bw)}})}});function bh(){setTimeout(at,0);return(a4=b.now())}function at(){a4=L}function a0(bv,e){var bw={};b.each(aH.concat.apply([],aH.slice(0,e)),function(){bw[this]=bv});return bw}b.each({slideDown:a0("show",1),slideUp:a0("hide",1),slideToggle:a0("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,bv){b.fn[e]=function(bw,by,bx){return this.animate(bv,bw,by,bx)}});b.extend({speed:function(bw,bx,bv){var e=bw&&typeof bw==="object"?b.extend({},bw):{complete:bv||!bv&&bx||b.isFunction(bw)&&bw,duration:bw,easing:bv&&bx||bx&&!b.isFunction(bx)&&bx};e.duration=b.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in b.fx.speeds?b.fx.speeds[e.duration]:b.fx.speeds._default;if(e.queue==null||e.queue===true){e.queue="fx"}e.old=e.complete;e.complete=function(by){if(b.isFunction(e.old)){e.old.call(this)}if(e.queue){b.dequeue(this,e.queue)}else{if(by!==false){b._unmark(this)}}};return e},easing:{linear:function(bw,bx,e,bv){return e+bv*bw},swing:function(bw,bx,e,bv){return((-Math.cos(bw*Math.PI)/2)+0.5)*bv+e}},timers:[],fx:function(bv,e,bw){this.options=e;this.elem=bv;this.prop=bw;e.orig=e.orig||{}}});b.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(b.fx.step[this.prop]||b.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var e,bv=b.css(this.elem,this.prop);return isNaN(e=parseFloat(bv))?!bv||bv==="auto"?0:bv:e},custom:function(bz,by,bx){var e=this,bw=b.fx;this.startTime=a4||bh();this.end=by;this.now=this.start=bz;this.pos=this.state=0;this.unit=bx||this.unit||(b.cssNumber[this.prop]?"":"px");function bv(bA){return e.step(bA)}bv.queue=this.options.queue;bv.elem=this.elem;bv.saveState=function(){if(e.options.hide&&b._data(e.elem,"fxshow"+e.prop)===L){b._data(e.elem,"fxshow"+e.prop,e.start)}};if(bv()&&b.timers.push(bv)&&!a3){a3=setInterval(bw.tick,bw.interval)}},show:function(){var e=b._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=e||b.style(this.elem,this.prop);this.options.show=true;if(e!==L){this.custom(this.cur(),e)}else{this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur())}b(this.elem).show()},hide:function(){this.options.orig[this.prop]=b._data(this.elem,"fxshow"+this.prop)||b.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(by){var bA,bB,bv,bx=a4||bh(),e=true,bz=this.elem,bw=this.options;if(by||bx>=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e<bv.length;e++){bw=bv[e];if(!bw()&&bv[e]===bw){bv.splice(e--,1)}}if(!bv.length){b.fx.stop()}},interval:13,stop:function(){clearInterval(a3);a3=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(e){b.style(e.elem,"opacity",e.now)},_default:function(e){if(e.elem.style&&e.elem.style[e.prop]!=null){e.elem.style[e.prop]=e.now+e.unit}else{e.elem[e.prop]=e.now}}}});b.each(["width","height"],function(e,bv){b.fx.step[bv]=function(bw){b.style(bw.elem,bv,Math.max(0,bw.now)+bw.unit)}});if(b.expr&&b.expr.filters){b.expr.filters.animated=function(e){return b.grep(b.timers,function(bv){return e===bv.elem}).length}}function x(bx){if(!Q[bx]){var e=av.body,bv=b("<"+bx+">").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b})}})(window);/*!
+ * jQuery UI 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI
+ */
+(function(a,d){a.ui=a.ui||{};if(a.ui.version){return}a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(e,f){return typeof e==="number"?this.each(function(){var g=this;setTimeout(function(){a(g).focus();if(f){f.call(g)}},e)}):this._focus.apply(this,arguments)},scrollParent:function(){var e;if((a.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){e=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(a.curCSS(this,"position",1))&&(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}else{e=this.parents().filter(function(){return(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!e.length?a(document):e},zIndex:function(h){if(h!==d){return this.css("zIndex",h)}if(this.length){var f=a(this[0]),e,g;while(f.length&&f[0]!==document){e=f.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){g=parseInt(f.css("zIndex"),10);if(!isNaN(g)&&g!==0){return g}}f=f.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(g,e){var f=e==="Width"?["Left","Right"]:["Top","Bottom"],h=e.toLowerCase(),k={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};function j(m,l,i,n){a.each(f,function(){l-=parseFloat(a.curCSS(m,"padding"+this,true))||0;if(i){l-=parseFloat(a.curCSS(m,"border"+this+"Width",true))||0}if(n){l-=parseFloat(a.curCSS(m,"margin"+this,true))||0}});return l}a.fn["inner"+e]=function(i){if(i===d){return k["inner"+e].call(this)}return this.each(function(){a(this).css(h,j(this,i)+"px")})};a.fn["outer"+e]=function(i,l){if(typeof i!=="number"){return k["outer"+e].call(this,i)}return this.each(function(){a(this).css(h,j(this,i,true,l)+"px")})}});function c(g,e){var j=g.nodeName.toLowerCase();if("area"===j){var i=g.parentNode,h=i.name,f;if(!g.href||!h||i.nodeName.toLowerCase()!=="map"){return false}f=a("img[usemap=#"+h+"]")[0];return !!f&&b(f)}return(/input|select|textarea|button|object/.test(j)?!g.disabled:"a"==j?g.href||e:e)&&b(g)}function b(e){return !a(e).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.extend(a.expr[":"],{data:function(g,f,e){return !!a.data(g,e[3])},focusable:function(e){return c(e,!isNaN(a.attr(e,"tabindex")))},tabbable:function(g){var e=a.attr(g,"tabindex"),f=isNaN(e);return(f||e>=0)&&c(g,!f)}});a(function(){var e=document.body,f=e.appendChild(f=document.createElement("div"));f.offsetHeight;a.extend(f.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=f.offsetHeight===100;a.support.selectstart="onselectstart" in f;e.removeChild(f).style.display="none"});a.extend(a.ui,{plugin:{add:function(f,g,j){var h=a.ui[f].prototype;for(var e in j){h.plugins[e]=h.plugins[e]||[];h.plugins[e].push([g,j[e]])}},call:function(e,g,f){var j=e.plugins[g];if(!j||!e.element[0].parentNode){return}for(var h=0;h<j.length;h++){if(e.options[j[h][0]]){j[h][1].apply(e.element,f)}}}},contains:function(f,e){return document.compareDocumentPosition?f.compareDocumentPosition(e)&16:f!==e&&f.contains(e)},hasScroll:function(h,f){if(a(h).css("overflow")==="hidden"){return false}var e=(f&&f==="left")?"scrollLeft":"scrollTop",g=false;if(h[e]>0){return true}h[e]=1;g=(h[e]>0);h[e]=0;return g},isOverAxis:function(f,e,g){return(f>e)&&(f<(e+g))},isOver:function(j,f,i,h,e,g){return a.ui.isOverAxis(j,i,e)&&a.ui.isOverAxis(f,h,g)}})})(jQuery);/*!
+ * jQuery UI Widget 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Widget
+ */
+(function(b,d){if(b.cleanData){var c=b.cleanData;b.cleanData=function(f){for(var g=0,h;(h=f[g])!=null;g++){try{b(h).triggerHandler("remove")}catch(j){}}c(f)}}else{var a=b.fn.remove;b.fn.remove=function(e,f){return this.each(function(){if(!f){if(!e||b.filter(e,[this]).length){b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(g){}})}}return a.call(b(this),e,f)})}}b.widget=function(f,h,e){var g=f.split(".")[0],j;f=f.split(".")[1];j=g+"-"+f;if(!e){e=h;h=b.Widget}b.expr[":"][j]=function(k){return !!b.data(k,f)};b[g]=b[g]||{};b[g][f]=function(k,l){if(arguments.length){this._createWidget(k,l)}};var i=new h();i.options=b.extend(true,{},i.options);b[g][f].prototype=b.extend(true,i,{namespace:g,widgetName:f,widgetEventPrefix:b[g][f].prototype.widgetEventPrefix||f,widgetBaseClass:j},e);b.widget.bridge(f,b[g][f])};b.widget.bridge=function(f,e){b.fn[f]=function(i){var g=typeof i==="string",h=Array.prototype.slice.call(arguments,1),j=this;i=!g&&h.length?b.extend.apply(null,[true,i].concat(h)):i;if(g&&i.charAt(0)==="_"){return j}if(g){this.each(function(){var k=b.data(this,f),l=k&&b.isFunction(k[i])?k[i].apply(k,h):k;if(l!==k&&l!==d){j=l;return false}})}else{this.each(function(){var k=b.data(this,f);if(k){k.option(i||{})._init()}else{b.data(this,f,new e(i,this))}})}return j}};b.Widget=function(e,f){if(arguments.length){this._createWidget(e,f)}};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(f,g){b.data(g,this.widgetName,this);this.element=b(g);this.options=b.extend(true,{},this.options,this._getCreateOptions(),f);var e=this;this.element.bind("remove."+this.widgetName,function(){e.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(f,g){var e=f;if(arguments.length===0){return b.extend({},this.options)}if(typeof f==="string"){if(g===d){return this.options[f]}e={};e[f]=g}this._setOptions(e);return this},_setOptions:function(f){var e=this;b.each(f,function(g,h){e._setOption(g,h)});return this},_setOption:function(e,f){this.options[e]=f;if(e==="disabled"){this.widget()[f?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",f)}return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(e,f,g){var j,i,h=this.options[e];g=g||{};f=b.Event(f);f.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase();f.target=this.element[0];i=f.originalEvent;if(i){for(j in i){if(!(j in f)){f[j]=i[j]}}}this.element.trigger(f,g);return !(b.isFunction(h)&&h.call(this.element[0],f,g)===false||f.isDefaultPrevented())}}})(jQuery);/*!
+ * jQuery UI Mouse 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Mouse
+ *
+ * Depends:
+ * jquery.ui.widget.js
+ */
+(function(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind("mousedown."+this.widgetName,function(e){return d._mouseDown(e)}).bind("click."+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+".preventClickEvent")){b.removeData(e.target,d.widgetName+".preventClickEvent");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(f){if(a){return}(this._mouseStarted&&this._mouseUp(f));this._mouseDownEvent=f;var e=this,g=(f.which==1),d=(typeof this.options.cancel=="string"&&f.target.nodeName?b(f.target).closest(this.options.cancel).length:false);if(!g||d||!this._mouseCapture(f)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(f)&&this._mouseDelayMet(f)){this._mouseStarted=(this._mouseStart(f)!==false);if(!this._mouseStarted){f.preventDefault();return true}}if(true===b.data(f.target,this.widgetName+".preventClickEvent")){b.removeData(f.target,this.widgetName+".preventClickEvent")}this._mouseMoveDelegate=function(h){return e._mouseMove(h)};this._mouseUpDelegate=function(h){return e._mouseUp(h)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);f.preventDefault();a=true;return true},_mouseMove:function(d){if(b.browser.msie&&!(document.documentMode>=9)&&!d.button){return this._mouseUp(d)}if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,d)!==false);(this._mouseStarted?this._mouseDrag(d):this._mouseUp(d))}return !this._mouseStarted},_mouseUp:function(d){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;if(d.target==this._mouseDownEvent.target){b.data(d.target,this.widgetName+".preventClickEvent",true)}this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return(Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance)},_mouseDelayMet:function(d){return this.mouseDelayMet},_mouseStart:function(d){},_mouseDrag:function(d){},_mouseStop:function(d){},_mouseCapture:function(d){return true}})})(jQuery);(function(c,d){c.widget("ui.resizable",c.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000},_create:function(){var f=this,k=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(k.aspectRatio),aspectRatio:k.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:k.helper||k.ghost||k.animate?k.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){this.element.wrap(c('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=k.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var l=this.handles.split(",");this.handles={};for(var g=0;g<l.length;g++){var j=c.trim(l[g]),e="ui-resizable-"+j;var h=c('<div class="ui-resizable-handle '+e+'"></div>');if(/sw|se|ne|nw/.test(j)){h.css({zIndex:++k.zIndex})}if("se"==j){h.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[j]=".ui-resizable-"+j;this.element.append(h)}}this._renderAxis=function(q){q=q||this.element;for(var n in this.handles){if(this.handles[n].constructor==String){this.handles[n]=c(this.handles[n],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=c(this.handles[n],this.element),p=0;p=/sw|ne|nw|se|n|s/.test(n)?o.outerHeight():o.outerWidth();var m=["padding",/ne|nw|n/.test(n)?"Top":/se|sw|s/.test(n)?"Bottom":/^e$/.test(n)?"Right":"Left"].join("");q.css(m,p);this._proportionallyResize()}if(!c(this.handles[n]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!f.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}f.axis=i&&i[1]?i[1]:"se"}});if(k.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){if(k.disabled){return}c(this).removeClass("ui-resizable-autohide");f._handles.show()},function(){if(k.disabled){return}if(!f.resizing){c(this).addClass("ui-resizable-autohide");f._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var e=function(g){c(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var f=this.element;f.after(this.originalElement.css({position:f.css("position"),width:f.outerWidth(),height:f.outerHeight(),top:f.css("top"),left:f.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(f){var g=false;for(var e in this.handles){if(c(this.handles[e])[0]==f.target){g=true}}return !this.options.disabled&&g},_mouseStart:function(g){var j=this.options,f=this.element.position(),e=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(e.is(".ui-draggable")||(/absolute/).test(e.css("position"))){e.css({position:"absolute",top:f.top,left:f.left})}this._renderProxy();var k=b(this.helper.css("left")),h=b(this.helper.css("top"));if(j.containment){k+=c(j.containment).scrollLeft()||0;h+=c(j.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:k,top:h};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:k,top:h};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:g.pageX,top:g.pageY};this.aspectRatio=(typeof j.aspectRatio=="number")?j.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var i=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",i=="auto"?this.axis+"-resize":i);e.addClass("ui-resizable-resizing");this._propagate("start",g);return true},_mouseDrag:function(e){var h=this.helper,g=this.options,m={},q=this,j=this.originalMousePosition,n=this.axis;var r=(e.pageX-j.left)||0,p=(e.pageY-j.top)||0;var i=this._change[n];if(!i){return false}var l=i.apply(this,[e,r,p]),k=c.browser.msie&&c.browser.version<7,f=this.sizeDiff;this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey){l=this._updateRatio(l,e)}l=this._respectSize(l,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(l);this._trigger("resize",e,this.ui());return false},_mouseStop:function(h){this.resizing=false;var i=this.options,m=this;if(this._helper){var g=this._proportionallyResizeElements,e=g.length&&(/textarea/i).test(g[0].nodeName),f=e&&c.ui.hasScroll(g[0],"left")?0:m.sizeDiff.height,k=e?0:m.sizeDiff.width;var n={width:(m.helper.width()-k),height:(m.helper.height()-f)},j=(parseInt(m.element.css("left"),10)+(m.position.left-m.originalPosition.left))||null,l=(parseInt(m.element.css("top"),10)+(m.position.top-m.originalPosition.top))||null;if(!i.animate){this.element.css(c.extend(n,{top:l,left:j}))}m.helper.height(m.size.height);m.helper.width(m.size.width);if(this._helper&&!i.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",h);if(this._helper){this.helper.remove()}return false},_updateVirtualBoundaries:function(g){var j=this.options,i,h,f,k,e;e={minWidth:a(j.minWidth)?j.minWidth:0,maxWidth:a(j.maxWidth)?j.maxWidth:Infinity,minHeight:a(j.minHeight)?j.minHeight:0,maxHeight:a(j.maxHeight)?j.maxHeight:Infinity};if(this._aspectRatio||g){i=e.minHeight*this.aspectRatio;f=e.minWidth/this.aspectRatio;h=e.maxHeight*this.aspectRatio;k=e.maxWidth/this.aspectRatio;if(i>e.minWidth){e.minWidth=i}if(f>e.minHeight){e.minHeight=f}if(h<e.maxWidth){e.maxWidth=h}if(k<e.maxHeight){e.maxHeight=k}}this._vBoundaries=e},_updateCache:function(e){var f=this.options;this.offset=this.helper.offset();if(a(e.left)){this.position.left=e.left}if(a(e.top)){this.position.top=e.top}if(a(e.height)){this.size.height=e.height}if(a(e.width)){this.size.width=e.width}},_updateRatio:function(h,g){var i=this.options,j=this.position,f=this.size,e=this.axis;if(a(h.height)){h.width=(h.height*this.aspectRatio)}else{if(a(h.width)){h.height=(h.width/this.aspectRatio)}}if(e=="sw"){h.left=j.left+(f.width-h.width);h.top=null}if(e=="nw"){h.top=j.top+(f.height-h.height);h.left=j.left+(f.width-h.width)}return h},_respectSize:function(l,g){var j=this.helper,i=this._vBoundaries,r=this._aspectRatio||g.shiftKey,q=this.axis,t=a(l.width)&&i.maxWidth&&(i.maxWidth<l.width),m=a(l.height)&&i.maxHeight&&(i.maxHeight<l.height),h=a(l.width)&&i.minWidth&&(i.minWidth>l.width),s=a(l.height)&&i.minHeight&&(i.minHeight>l.height);if(h){l.width=i.minWidth}if(s){l.height=i.minHeight}if(t){l.width=i.maxWidth}if(m){l.height=i.maxHeight}var f=this.originalPosition.left+this.originalSize.width,p=this.position.top+this.size.height;var k=/sw|nw|w/.test(q),e=/nw|ne|n/.test(q);if(h&&k){l.left=f-i.minWidth}if(t&&k){l.left=f-i.maxWidth}if(s&&e){l.top=p-i.minHeight}if(m&&e){l.top=p-i.maxHeight}var n=!l.width&&!l.height;if(n&&!l.left&&l.top){l.top=null}else{if(n&&!l.top&&l.left){l.left=null}}return l},_proportionallyResize:function(){var k=this.options;if(!this._proportionallyResizeElements.length){return}var g=this.helper||this.element;for(var f=0;f<this._proportionallyResizeElements.length;f++){var h=this._proportionallyResizeElements[f];if(!this.borderDif){var e=[h.css("borderTopWidth"),h.css("borderRightWidth"),h.css("borderBottomWidth"),h.css("borderLeftWidth")],j=[h.css("paddingTop"),h.css("paddingRight"),h.css("paddingBottom"),h.css("paddingLeft")];this.borderDif=c.map(e,function(l,n){var m=parseInt(l,10)||0,o=parseInt(j[n],10)||0;return m+o})}if(c.browser.msie&&!(!(c(g).is(":hidden")||c(g).parents(":hidden").length))){continue}h.css({height:(g.height()-this.borderDif[0]-this.borderDif[2])||0,width:(g.width()-this.borderDif[1]-this.borderDif[3])||0})}},_renderProxy:function(){var f=this.element,i=this.options;this.elementOffset=f.offset();if(this._helper){this.helper=this.helper||c('<div style="overflow:hidden;"></div>');var e=c.browser.msie&&c.browser.version<7,g=(e?1:0),h=(e?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++i.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(g,f,e){return{width:this.originalSize.width+f}},w:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{left:i.left+f,width:g.width-f}},n:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{top:i.top+e,height:g.height-e}},s:function(g,f,e){return{height:this.originalSize.height+e}},se:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},sw:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[g,f,e]))},ne:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},nw:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[g,f,e]))}},_propagate:function(f,e){c.ui.plugin.call(this,f,[e,this.ui()]);(f!="resize"&&this._trigger(f,e,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});c.extend(c.ui.resizable,{version:"1.8.18"});c.ui.plugin.add("resizable","alsoResize",{start:function(f,g){var e=c(this).data("resizable"),i=e.options;var h=function(j){c(j).each(function(){var k=c(this);k.data("resizable-alsoresize",{width:parseInt(k.width(),10),height:parseInt(k.height(),10),left:parseInt(k.css("left"),10),top:parseInt(k.css("top"),10)})})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.parentNode){if(i.alsoResize.length){i.alsoResize=i.alsoResize[0];h(i.alsoResize)}else{c.each(i.alsoResize,function(j){h(j)})}}else{h(i.alsoResize)}},resize:function(g,i){var f=c(this).data("resizable"),j=f.options,h=f.originalSize,l=f.originalPosition;var k={height:(f.size.height-h.height)||0,width:(f.size.width-h.width)||0,top:(f.position.top-l.top)||0,left:(f.position.left-l.left)||0},e=function(m,n){c(m).each(function(){var q=c(this),r=c(this).data("resizable-alsoresize"),p={},o=n&&n.length?n:q.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];c.each(o,function(s,u){var t=(r[u]||0)+(k[u]||0);if(t&&t>=0){p[u]=t||null}});q.css(p)})};if(typeof(j.alsoResize)=="object"&&!j.alsoResize.nodeType){c.each(j.alsoResize,function(m,n){e(m,n)})}else{e(j.alsoResize)}},stop:function(e,f){c(this).removeData("resizable-alsoresize")}});c.ui.plugin.add("resizable","animate",{stop:function(i,n){var p=c(this).data("resizable"),j=p.options;var h=p._proportionallyResizeElements,e=h.length&&(/textarea/i).test(h[0].nodeName),f=e&&c.ui.hasScroll(h[0],"left")?0:p.sizeDiff.height,l=e?0:p.sizeDiff.width;var g={width:(p.size.width-l),height:(p.size.height-f)},k=(parseInt(p.element.css("left"),10)+(p.position.left-p.originalPosition.left))||null,m=(parseInt(p.element.css("top"),10)+(p.position.top-p.originalPosition.top))||null;p.element.animate(c.extend(g,m&&k?{top:m,left:k}:{}),{duration:j.animateDuration,easing:j.animateEasing,step:function(){var o={width:parseInt(p.element.css("width"),10),height:parseInt(p.element.css("height"),10),top:parseInt(p.element.css("top"),10),left:parseInt(p.element.css("left"),10)};if(h&&h.length){c(h[0]).css({width:o.width,height:o.height})}p._updateCache(o);p._propagate("resize",i)}})}});c.ui.plugin.add("resizable","containment",{start:function(f,r){var t=c(this).data("resizable"),j=t.options,l=t.element;var g=j.containment,k=(g instanceof c)?g.get(0):(/parent/.test(g))?l.parent().get(0):g;if(!k){return}t.containerElement=c(k);if(/document/.test(g)||g==document){t.containerOffset={left:0,top:0};t.containerPosition={left:0,top:0};t.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var n=c(k),i=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){i[p]=b(n.css("padding"+o))});t.containerOffset=n.offset();t.containerPosition=n.position();t.containerSize={height:(n.innerHeight()-i[3]),width:(n.innerWidth()-i[1])};var q=t.containerOffset,e=t.containerSize.height,m=t.containerSize.width,h=(c.ui.hasScroll(k,"left")?k.scrollWidth:m),s=(c.ui.hasScroll(k)?k.scrollHeight:e);t.parentData={element:k,left:q.left,top:q.top,width:h,height:s}}},resize:function(g,q){var t=c(this).data("resizable"),i=t.options,f=t.containerSize,p=t.containerOffset,m=t.size,n=t.position,r=t._aspectRatio||g.shiftKey,e={top:0,left:0},h=t.containerElement;if(h[0]!=document&&(/static/).test(h.css("position"))){e=p}if(n.left<(t._helper?p.left:0)){t.size.width=t.size.width+(t._helper?(t.position.left-p.left):(t.position.left-e.left));if(r){t.size.height=t.size.width/i.aspectRatio}t.position.left=i.helper?p.left:0}if(n.top<(t._helper?p.top:0)){t.size.height=t.size.height+(t._helper?(t.position.top-p.top):t.position.top);if(r){t.size.width=t.size.height*i.aspectRatio}t.position.top=t._helper?p.top:0}t.offset.left=t.parentData.left+t.position.left;t.offset.top=t.parentData.top+t.position.top;var l=Math.abs((t._helper?t.offset.left-e.left:(t.offset.left-e.left))+t.sizeDiff.width),s=Math.abs((t._helper?t.offset.top-e.top:(t.offset.top-p.top))+t.sizeDiff.height);var k=t.containerElement.get(0)==t.element.parent().get(0),j=/relative|absolute/.test(t.containerElement.css("position"));if(k&&j){l-=t.parentData.left}if(l+t.size.width>=t.parentData.width){t.size.width=t.parentData.width-l;if(r){t.size.height=t.size.width/t.aspectRatio}}if(s+t.size.height>=t.parentData.height){t.size.height=t.parentData.height-s;if(r){t.size.width=t.size.height*t.aspectRatio}}},stop:function(f,n){var q=c(this).data("resizable"),g=q.options,l=q.position,m=q.containerOffset,e=q.containerPosition,i=q.containerElement;var j=c(q.helper),r=j.offset(),p=j.outerWidth()-q.sizeDiff.width,k=j.outerHeight()-q.sizeDiff.height;if(q._helper&&!g.animate&&(/relative/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}if(q._helper&&!g.animate&&(/static/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}}});c.ui.plugin.add("resizable","ghost",{start:function(g,h){var e=c(this).data("resizable"),i=e.options,f=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof i.ghost=="string"?i.ghost:"");e.ghost.appendTo(e.helper)},resize:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost){e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})}},stop:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost&&e.helper){e.helper.get(0).removeChild(e.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(e,m){var p=c(this).data("resizable"),h=p.options,k=p.size,i=p.originalSize,j=p.originalPosition,n=p.axis,l=h._aspectRatio||e.shiftKey;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var g=Math.round((k.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1),f=Math.round((k.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f}else{if(/^(ne)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f}else{if(/^(sw)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.left=j.left-g}else{p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f;p.position.left=j.left-g}}}}});var b=function(e){return parseInt(e,10)||0};var a=function(e){return !isNaN(parseInt(e,10))}})(jQuery);/*!
+ * jQuery hashchange event - v1.3 - 7/21/2010
+ * http://benalman.com/projects/jquery-hashchange-plugin/
+ *
+ * Copyright (c) 2010 "Cowboy" Ben Alman
+ * Dual licensed under the MIT and GPL licenses.
+ * http://benalman.com/about/license/
+ */
+(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$('<iframe tabindex="-1" title="empty"/>').hide().one("load",function(){r||l(a());n()}).attr("src",r||"javascript:0").insertAfter("body")[0].contentWindow;h.onpropertychange=function(){try{if(event.propertyName==="title"){q.document.title=h.title}}catch(s){}}}};j.stop=k;o=function(){return a(q.location.href)};l=function(v,s){var u=q.document,t=$.fn[c].domain;if(v!==s){u.title=h.title;u.open();t&&u.write('<script>document.domain="'+t+'"<\/script>');u.close();q.location.hash=v}}})();return j})()})(jQuery,this);(function(c){var a=c.scrollTo=function(f,e,d){c(window).scrollTo(f,e,d)};a.defaults={axis:"xy",duration:parseFloat(c.fn.jquery)>=1.3?0:1};a.window=function(d){return c(window)._scrollable()};c.fn._scrollable=function(){return this.map(function(){var e=this,d=!e.nodeName||c.inArray(e.nodeName.toLowerCase(),["iframe","#document","html","body"])!=-1;if(!d){return e}var f=(e.contentWindow||e).document||e.ownerDocument||e;return c.browser.safari||f.compatMode=="BackCompat"?f.body:f.documentElement})};c.fn.scrollTo=function(f,e,d){if(typeof e=="object"){d=e;e=0}if(typeof d=="function"){d={onAfter:d}}if(f=="max"){f=9000000000}d=c.extend({},a.defaults,d);e=e||d.speed||d.duration;d.queue=d.queue&&d.axis.length>1;if(d.queue){e/=2}d.offset=b(d.offset);d.over=b(d.over);return this._scrollable().each(function(){var l=this,j=c(l),k=f,i,g={},m=j.is("html,body");switch(typeof k){case"number":case"string":if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(k)){k=b(k);break}k=c(k,this);case"object":if(k.is||k.style){i=(k=c(k)).offset()}}c.each(d.axis.split(""),function(q,r){var s=r=="x"?"Left":"Top",u=s.toLowerCase(),p="scroll"+s,o=l[p],n=a.max(l,r);if(i){g[p]=i[u]+(m?0:o-j.offset()[u]);if(d.margin){g[p]-=parseInt(k.css("margin"+s))||0;g[p]-=parseInt(k.css("border"+s+"Width"))||0}g[p]+=d.offset[u]||0;if(d.over[u]){g[p]+=k[r=="x"?"width":"height"]()*d.over[u]}}else{var t=k[u];g[p]=t.slice&&t.slice(-1)=="%"?parseFloat(t)/100*n:t}if(/^\d+$/.test(g[p])){g[p]=g[p]<=0?0:Math.min(g[p],n)}if(!q&&d.queue){if(o!=g[p]){h(d.onAfterFirst)}delete g[p]}});h(d.onAfter);function h(n){j.animate(g,e,d.easing,n&&function(){n.call(this,f,d)})}}).end()};a.max=function(j,i){var h=i=="x"?"Width":"Height",e="scroll"+h;if(!c(j).is("html,body")){return j[e]-c(j)[h.toLowerCase()]()}var g="client"+h,f=j.ownerDocument.documentElement,d=j.ownerDocument.body;return Math.max(f[e],d[e])-Math.min(f[g],d[g])};function b(d){return typeof d=="object"?d:{top:d,left:d}}})(jQuery);/*!
+ PowerTip - v1.2.0 - 2013-04-03
+ http://stevenbenner.github.com/jquery-powertip/
+ Copyright (c) 2013 Steven Benner (http://stevenbenner.com/).
+ Released under MIT license.
+ https://raw.github.com/stevenbenner/jquery-powertip/master/LICENSE.txt
+*/
+(function(a){if(typeof define==="function"&&define.amd){define(["jquery"],a)}else{a(jQuery)}}(function(k){var A=k(document),s=k(window),w=k("body");var n="displayController",e="hasActiveHover",d="forcedOpen",u="hasMouseMove",f="mouseOnToPopup",g="originalTitle",y="powertip",o="powertipjq",l="powertiptarget",E=180/Math.PI;var c={isTipOpen:false,isFixedTipOpen:false,isClosing:false,tipOpenImminent:false,activeHover:null,currentX:0,currentY:0,previousX:0,previousY:0,desyncTimeout:null,mouseTrackingActive:false,delayInProgress:false,windowWidth:0,windowHeight:0,scrollTop:0,scrollLeft:0};var p={none:0,top:1,bottom:2,left:4,right:8};k.fn.powerTip=function(F,N){if(!this.length){return this}if(k.type(F)==="string"&&k.powerTip[F]){return k.powerTip[F].call(this,this,N)}var O=k.extend({},k.fn.powerTip.defaults,F),G=new x(O);h();this.each(function M(){var R=k(this),Q=R.data(y),P=R.data(o),T=R.data(l),S;if(R.data(n)){k.powerTip.destroy(R)}S=R.attr("title");if(!Q&&!T&&!P&&S){R.data(y,S);R.data(g,S);R.removeAttr("title")}R.data(n,new t(R,O,G))});if(!O.manual){this.on({"mouseenter.powertip":function J(P){k.powerTip.show(this,P)},"mouseleave.powertip":function L(){k.powerTip.hide(this)},"focus.powertip":function K(){k.powerTip.show(this)},"blur.powertip":function H(){k.powerTip.hide(this,true)},"keydown.powertip":function I(P){if(P.keyCode===27){k.powerTip.hide(this,true)}}})}return this};k.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false};k.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};k.powerTip={show:function z(F,G){if(G){i(G);c.previousX=G.pageX;c.previousY=G.pageY;k(F).data(n).show()}else{k(F).first().data(n).show(true,true)}return F},reposition:function r(F){k(F).first().data(n).resetPosition();return F},hide:function D(G,F){if(G){k(G).first().data(n).hide(F)}else{if(c.activeHover){c.activeHover.data(n).hide(true)}}return G},destroy:function C(G){k(G).off(".powertip").each(function F(){var I=k(this),H=[g,n,e,d];if(I.data(g)){I.attr("title",I.data(g));H.push(y)}I.removeData(H)});return G}};k.powerTip.showTip=k.powerTip.show;k.powerTip.closeTip=k.powerTip.hide;function b(){var F=this;F.top="auto";F.left="auto";F.right="auto";F.bottom="auto";F.set=function(H,G){if(k.isNumeric(G)){F[H]=Math.round(G)}}}function t(K,N,F){var J=null;function L(P,Q){M();if(!K.data(e)){if(!P){c.tipOpenImminent=true;J=setTimeout(function O(){J=null;I()},N.intentPollInterval)}else{if(Q){K.data(d,true)}F.showTip(K)}}}function G(P){M();c.tipOpenImminent=false;if(K.data(e)){K.data(d,false);if(!P){c.delayInProgress=true;J=setTimeout(function O(){J=null;F.hideTip(K);c.delayInProgress=false},N.closeDelay)}else{F.hideTip(K)}}}function I(){var Q=Math.abs(c.previousX-c.currentX),O=Math.abs(c.previousY-c.currentY),P=Q+O;if(P<N.intentSensitivity){F.showTip(K)}else{c.previousX=c.currentX;c.previousY=c.currentY;L()}}function M(){J=clearTimeout(J);c.delayInProgress=false}function H(){F.resetPosition(K)}this.show=L;this.hide=G;this.cancel=M;this.resetPosition=H}function j(){function G(M,L,J,O,P){var K=L.split("-")[0],N=new b(),I;if(q(M)){I=H(M,K)}else{I=F(M,K)}switch(L){case"n":N.set("left",I.left-(J/2));N.set("bottom",c.windowHeight-I.top+P);break;case"e":N.set("left",I.left+P);N.set("top",I.top-(O/2));break;case"s":N.set("left",I.left-(J/2));N.set("top",I.top+P);break;case"w":N.set("top",I.top-(O/2));N.set("right",c.windowWidth-I.left+P);break;case"nw":N.set("bottom",c.windowHeight-I.top+P);N.set("right",c.windowWidth-I.left-20);break;case"nw-alt":N.set("left",I.left);N.set("bottom",c.windowHeight-I.top+P);break;case"ne":N.set("left",I.left-20);N.set("bottom",c.windowHeight-I.top+P);break;case"ne-alt":N.set("bottom",c.windowHeight-I.top+P);N.set("right",c.windowWidth-I.left);break;case"sw":N.set("top",I.top+P);N.set("right",c.windowWidth-I.left-20);break;case"sw-alt":N.set("left",I.left);N.set("top",I.top+P);break;case"se":N.set("left",I.left-20);N.set("top",I.top+P);break;case"se-alt":N.set("top",I.top+P);N.set("right",c.windowWidth-I.left);break}return N}function F(K,J){var O=K.offset(),N=K.outerWidth(),I=K.outerHeight(),M,L;switch(J){case"n":M=O.left+N/2;L=O.top;break;case"e":M=O.left+N;L=O.top+I/2;break;case"s":M=O.left+N/2;L=O.top+I;break;case"w":M=O.left;L=O.top+I/2;break;case"nw":M=O.left;L=O.top;break;case"ne":M=O.left+N;L=O.top;break;case"sw":M=O.left;L=O.top+I;break;case"se":M=O.left+N;L=O.top+I;break}return{top:L,left:M}}function H(O,K){var S=O.closest("svg")[0],N=O[0],W=S.createSVGPoint(),L=N.getBBox(),V=N.getScreenCTM(),M=L.width/2,Q=L.height/2,P=[],I=["nw","n","ne","e","se","s","sw","w"],U,X,R,T;function J(){P.push(W.matrixTransform(V))}W.x=L.x;W.y=L.y;J();W.x+=M;J();W.x+=M;J();W.y+=Q;J();W.y+=Q;J();W.x-=M;J();W.x-=M;J();W.y-=Q;J();if(P[0].y!==P[1].y||P[0].x!==P[7].x){X=Math.atan2(V.b,V.a)*E;R=Math.ceil(((X%360)-22.5)/45);if(R<1){R+=8}while(R--){I.push(I.shift())}}for(T=0;T<P.length;T++){if(I[T]===K){U=P[T];break}}return{top:U.y+c.scrollTop,left:U.x+c.scrollLeft}}this.compute=G}function x(Q){var P=new j(),O=k("#"+Q.popupId);if(O.length===0){O=k("<div/>",{id:Q.popupId});if(w.length===0){w=k("body")}w.append(O)}if(Q.followMouse){if(!O.data(u)){A.on("mousemove",M);s.on("scroll",M);O.data(u,true)}}if(Q.mouseOnToPopup){O.on({mouseenter:function L(){if(O.data(f)){if(c.activeHover){c.activeHover.data(n).cancel()}}},mouseleave:function N(){if(c.activeHover){c.activeHover.data(n).hide()}}})}function I(S){S.data(e,true);O.queue(function R(T){H(S);T()})}function H(S){var U;if(!S.data(e)){return}if(c.isTipOpen){if(!c.isClosing){K(c.activeHover)}O.delay(100).queue(function R(V){H(S);V()});return}S.trigger("powerTipPreRender");U=B(S);if(U){O.empty().append(U)}else{return}S.trigger("powerTipRender");c.activeHover=S;c.isTipOpen=true;O.data(f,Q.mouseOnToPopup);if(!Q.followMouse){G(S);c.isFixedTipOpen=true}else{M()}O.fadeIn(Q.fadeInTime,function T(){if(!c.desyncTimeout){c.desyncTimeout=setInterval(J,500)}S.trigger("powerTipOpen")})}function K(R){c.isClosing=true;c.activeHover=null;c.isTipOpen=false;c.desyncTimeout=clearInterval(c.desyncTimeout);R.data(e,false);R.data(d,false);O.fadeOut(Q.fadeOutTime,function S(){var T=new b();c.isClosing=false;c.isFixedTipOpen=false;O.removeClass();T.set("top",c.currentY+Q.offset);T.set("left",c.currentX+Q.offset);O.css(T);R.trigger("powerTipClose")})}function M(){if(!c.isFixedTipOpen&&(c.isTipOpen||(c.tipOpenImminent&&O.data(u)))){var R=O.outerWidth(),V=O.outerHeight(),U=new b(),S,T;U.set("top",c.currentY+Q.offset);U.set("left",c.currentX+Q.offset);S=m(U,R,V);if(S!==p.none){T=a(S);if(T===1){if(S===p.right){U.set("left",c.windowWidth-R)}else{if(S===p.bottom){U.set("top",c.scrollTop+c.windowHeight-V)}}}else{U.set("left",c.currentX-R-Q.offset);U.set("top",c.currentY-V-Q.offset)}}O.css(U)}}function G(S){var R,T;if(Q.smartPlacement){R=k.fn.powerTip.smartPlacementLists[Q.placement];k.each(R,function(U,W){var V=m(F(S,W),O.outerWidth(),O.outerHeight());T=W;if(V===p.none){return false}})}else{F(S,Q.placement);T=Q.placement}O.addClass(T)}function F(U,T){var R=0,S,W,V=new b();V.set("top",0);V.set("left",0);O.css(V);do{S=O.outerWidth();W=O.outerHeight();V=P.compute(U,T,S,W,Q.offset);O.css(V)}while(++R<=5&&(S!==O.outerWidth()||W!==O.outerHeight()));return V}function J(){var R=false;if(c.isTipOpen&&!c.isClosing&&!c.delayInProgress){if(c.activeHover.data(e)===false||c.activeHover.is(":disabled")){R=true}else{if(!v(c.activeHover)&&!c.activeHover.is(":focus")&&!c.activeHover.data(d)){if(O.data(f)){if(!v(O)){R=true}}else{R=true}}}if(R){K(c.activeHover)}}}this.showTip=I;this.hideTip=K;this.resetPosition=G}function q(F){return window.SVGElement&&F[0] instanceof SVGElement}function h(){if(!c.mouseTrackingActive){c.mouseTrackingActive=true;k(function H(){c.scrollLeft=s.scrollLeft();c.scrollTop=s.scrollTop();c.windowWidth=s.width();c.windowHeight=s.height()});A.on("mousemove",i);s.on({resize:function G(){c.windowWidth=s.width();c.windowHeight=s.height()},scroll:function F(){var I=s.scrollLeft(),J=s.scrollTop();if(I!==c.scrollLeft){c.currentX+=I-c.scrollLeft;c.scrollLeft=I}if(J!==c.scrollTop){c.currentY+=J-c.scrollTop;c.scrollTop=J}}})}}function i(F){c.currentX=F.pageX;c.currentY=F.pageY}function v(F){var H=F.offset(),J=F[0].getBoundingClientRect(),I=J.right-J.left,G=J.bottom-J.top;return c.currentX>=H.left&&c.currentX<=H.left+I&&c.currentY>=H.top&&c.currentY<=H.top+G}function B(I){var G=I.data(y),F=I.data(o),K=I.data(l),H,J;if(G){if(k.isFunction(G)){G=G.call(I[0])}J=G}else{if(F){if(k.isFunction(F)){F=F.call(I[0])}if(F.length>0){J=F.clone(true,true)}}else{if(K){H=k("#"+K);if(H.length>0){J=H.html()}}}}return J}function m(M,L,K){var G=c.scrollTop,J=c.scrollLeft,I=G+c.windowHeight,F=J+c.windowWidth,H=p.none;if(M.top<G||Math.abs(M.bottom-c.windowHeight)-K<G){H|=p.top}if(M.top+K>I||Math.abs(M.bottom-c.windowHeight)>I){H|=p.bottom}if(M.left<J||M.right+L>F){H|=p.left}if(M.left+L>F||M.right<J){H|=p.right}return H}function a(G){var F=0;while(G){G&=G-1;F++}return F}}));
\ No newline at end of file
diff --git a/src/third_party/glm/doc/api/logo.png b/src/third_party/glm/doc/api/logo.png
new file mode 100644
index 0000000..80b5f9d
--- /dev/null
+++ b/src/third_party/glm/doc/api/logo.png
Binary files differ
diff --git a/src/third_party/glm/doc/api/modules.html b/src/third_party/glm/doc/api/modules.html
new file mode 100644
index 0000000..e9ae018
--- /dev/null
+++ b/src/third_party/glm/doc/api/modules.html
@@ -0,0 +1,149 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.10"/>
+<title>0.9.8: Modules</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectlogo"><img alt="Logo" src="logo.png"/></td>
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">0.9.8
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.10 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main Page</span></a></li>
+ <li class="current"><a href="modules.html"><span>Modules</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">Modules</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here is a list of all modules:</div><div class="directory">
+<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span><span onclick="javascript:toggleLevel(3);">3</span>]</div><table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;"> </span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">▼</span><a class="el" href="a00154.html" target="_self">GTC Extensions (Stable)</a></td><td class="desc">Functions and types that the GLSL specification doesn't define, but useful to have for a C++ program </td></tr>
+<tr id="row_0_0_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00160.html" target="_self">GLM_GTC_bitfield</a></td><td class="desc">Allow to perform bit operations on integer values </td></tr>
+<tr id="row_0_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00161.html" target="_self">GLM_GTC_color_space</a></td><td class="desc">Allow to perform bit operations on integer values </td></tr>
+<tr id="row_0_2_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00162.html" target="_self">GLM_GTC_constants</a></td><td class="desc">Provide a list of constants and precomputed useful values </td></tr>
+<tr id="row_0_3_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00163.html" target="_self">GLM_GTC_epsilon</a></td><td class="desc">Comparison functions for a user defined epsilon values </td></tr>
+<tr id="row_0_4_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00164.html" target="_self">GLM_GTC_functions</a></td><td class="desc">List of useful common functions </td></tr>
+<tr id="row_0_5_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00165.html" target="_self">GLM_GTC_integer</a></td><td class="desc">Allow to perform bit operations on integer values </td></tr>
+<tr id="row_0_6_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00166.html" target="_self">GLM_GTC_matrix_access</a></td><td class="desc">Defines functions to access rows or columns of a matrix easily </td></tr>
+<tr id="row_0_7_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00167.html" target="_self">GLM_GTC_matrix_integer</a></td><td class="desc">Defines a number of matrices with integer types </td></tr>
+<tr id="row_0_8_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00168.html" target="_self">GLM_GTC_matrix_inverse</a></td><td class="desc">Defines additional matrix inverting functions </td></tr>
+<tr id="row_0_9_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00169.html" target="_self">GLM_GTC_matrix_transform</a></td><td class="desc">Defines functions that generate common transformation matrices </td></tr>
+<tr id="row_0_10_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00170.html" target="_self">GLM_GTC_noise</a></td><td class="desc">Defines 2D, 3D and 4D procedural noise functions Based on the work of Stefan Gustavson and Ashima Arts on "webgl-noise": <a href="https://github.com/ashima/webgl-noise">https://github.com/ashima/webgl-noise</a> Following Stefan Gustavson's paper "Simplex noise demystified": <a href="http://www.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf">http://www.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf</a> <<a class="el" href="a00073.html" title="GLM_GTC_noise ">glm/gtc/noise.hpp</a>> need to be included to use these functionalities </td></tr>
+<tr id="row_0_11_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00171.html" target="_self">GLM_GTC_packing</a></td><td class="desc">This extension provides a set of function to convert vertors to packed formats </td></tr>
+<tr id="row_0_12_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00172.html" target="_self">GLM_GTC_quaternion</a></td><td class="desc">Defines a templated quaternion type and several quaternion operations </td></tr>
+<tr id="row_0_13_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00173.html" target="_self">GLM_GTC_random</a></td><td class="desc">Generate random number from various distribution methods </td></tr>
+<tr id="row_0_14_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00174.html" target="_self">GLM_GTC_reciprocal</a></td><td class="desc">Define secant, cosecant and cotangent functions </td></tr>
+<tr id="row_0_15_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00175.html" target="_self">GLM_GTC_round</a></td><td class="desc">Rounding value to specific boundings </td></tr>
+<tr id="row_0_16_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00176.html" target="_self">GLM_GTC_type_aligned</a></td><td class="desc">Aligned types </td></tr>
+<tr id="row_0_17_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00177.html" target="_self">GLM_GTC_type_precision</a></td><td class="desc">Defines specific C++-based precision types </td></tr>
+<tr id="row_0_18_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00178.html" target="_self">GLM_GTC_type_ptr</a></td><td class="desc">Handles the interaction between pointers and vector, matrix types </td></tr>
+<tr id="row_0_19_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00179.html" target="_self">GLM_GTC_ulp</a></td><td class="desc">Allow the measurement of the accuracy of a function against a reference implementation </td></tr>
+<tr id="row_0_20_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00180.html" target="_self">GLM_GTC_vec1</a></td><td class="desc">Add vec1, ivec1, uvec1 and bvec1 types </td></tr>
+<tr id="row_1_" class="even"><td class="entry"><span style="width:0px;display:inline-block;"> </span><span id="arr_1_" class="arrow" onclick="toggleFolder('1_')">▼</span><a class="el" href="a00155.html" target="_self">GTX Extensions (Experimental)</a></td><td class="desc">Functions and types that the GLSL specification doesn't define, but useful to have for a C++ program </td></tr>
+<tr id="row_1_0_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00181.html" target="_self">GLM_GTX_associated_min_max</a></td><td class="desc">Min and max functions that return associated values not the compared onces </td></tr>
+<tr id="row_1_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00182.html" target="_self">GLM_GTX_bit</a></td><td class="desc">Allow to perform bit operations on integer values </td></tr>
+<tr id="row_1_2_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00183.html" target="_self">GLM_GTX_closest_point</a></td><td class="desc">Find the point on a straight line which is the closet of a point </td></tr>
+<tr id="row_1_3_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00184.html" target="_self">GLM_GTX_color_space</a></td><td class="desc">Related to RGB to HSV conversions and operations </td></tr>
+<tr id="row_1_4_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00185.html" target="_self">GLM_GTX_color_space_YCoCg</a></td><td class="desc">RGB to YCoCg conversions and operations </td></tr>
+<tr id="row_1_5_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00186.html" target="_self">GLM_GTX_common</a></td><td class="desc">Provide functions to increase the compatibility with Cg and HLSL languages </td></tr>
+<tr id="row_1_6_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00187.html" target="_self">GLM_GTX_compatibility</a></td><td class="desc">Provide functions to increase the compatibility with Cg and HLSL languages </td></tr>
+<tr id="row_1_7_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00188.html" target="_self">GLM_GTX_component_wise</a></td><td class="desc">Operations between components of a type </td></tr>
+<tr id="row_1_8_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00189.html" target="_self">GLM_GTX_dual_quaternion</a></td><td class="desc">Defines a templated dual-quaternion type and several dual-quaternion operations </td></tr>
+<tr id="row_1_9_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00190.html" target="_self">GLM_GTX_euler_angles</a></td><td class="desc">Build matrices from Euler angles </td></tr>
+<tr id="row_1_10_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00191.html" target="_self">GLM_GTX_extend</a></td><td class="desc">Extend a position from a source to a position at a defined length </td></tr>
+<tr id="row_1_11_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00192.html" target="_self">GLM_GTX_extented_min_max</a></td><td class="desc">Min and max functions for 3 to 4 parameters </td></tr>
+<tr id="row_1_12_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00193.html" target="_self">GLM_GTX_fast_exponential</a></td><td class="desc">Fast but less accurate implementations of exponential based functions </td></tr>
+<tr id="row_1_13_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00194.html" target="_self">GLM_GTX_fast_square_root</a></td><td class="desc">Fast but less accurate implementations of square root based functions </td></tr>
+<tr id="row_1_14_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00195.html" target="_self">GLM_GTX_fast_trigonometry</a></td><td class="desc">Fast but less accurate implementations of trigonometric functions </td></tr>
+<tr id="row_1_15_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00196.html" target="_self">GLM_GTX_gradient_paint</a></td><td class="desc">Functions that return the color of procedural gradient for specific coordinates </td></tr>
+<tr id="row_1_16_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00197.html" target="_self">GLM_GTX_handed_coordinate_space</a></td><td class="desc">To know if a set of three basis vectors defines a right or left-handed coordinate system </td></tr>
+<tr id="row_1_17_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00198.html" target="_self">GLM_GTX_hash</a></td><td class="desc">Add std::hash support for glm types </td></tr>
+<tr id="row_1_18_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00199.html" target="_self">GLM_GTX_integer</a></td><td class="desc">Add support for integer for core functions </td></tr>
+<tr id="row_1_19_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00200.html" target="_self">GLM_GTX_intersect</a></td><td class="desc">Add intersection functions </td></tr>
+<tr id="row_1_20_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00201.html" target="_self">GLM_GTX_io</a></td><td class="desc">Std::[w]ostream support for glm types </td></tr>
+<tr id="row_1_21_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00202.html" target="_self">GLM_GTX_log_base</a></td><td class="desc">Logarithm for any base </td></tr>
+<tr id="row_1_22_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00203.html" target="_self">GLM_GTX_matrix_cross_product</a></td><td class="desc">Build cross product matrices </td></tr>
+<tr id="row_1_23_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00204.html" target="_self">GLM_GTX_matrix_decompose</a></td><td class="desc">Decomposes a model matrix to translations, rotation and scale components </td></tr>
+<tr id="row_1_24_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00205.html" target="_self">GLM_GTX_matrix_interpolation</a></td><td class="desc">Allows to directly interpolate two exiciting matrices </td></tr>
+<tr id="row_1_25_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00206.html" target="_self">GLM_GTX_matrix_major_storage</a></td><td class="desc">Build matrices with specific matrix order, row or column </td></tr>
+<tr id="row_1_26_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00207.html" target="_self">GLM_GTX_matrix_operation</a></td><td class="desc">Build diagonal matrices from vectors </td></tr>
+<tr id="row_1_27_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00208.html" target="_self">GLM_GTX_matrix_query</a></td><td class="desc">Query to evaluate matrix properties </td></tr>
+<tr id="row_1_28_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00209.html" target="_self">GLM_GTX_matrix_transform_2d</a></td><td class="desc">Defines functions that generate common 2d transformation matrices </td></tr>
+<tr id="row_1_29_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00210.html" target="_self">GLM_GTX_mixed_producte</a></td><td class="desc">Mixed product of 3 vectors </td></tr>
+<tr id="row_1_30_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00211.html" target="_self">GLM_GTX_norm</a></td><td class="desc">Various ways to compute vector norms </td></tr>
+<tr id="row_1_31_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00212.html" target="_self">GLM_GTX_normal</a></td><td class="desc">Compute the normal of a triangle </td></tr>
+<tr id="row_1_32_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00213.html" target="_self">GLM_GTX_normalize_dot</a></td><td class="desc">Dot product of vectors that need to be normalize with a single square root </td></tr>
+<tr id="row_1_33_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00214.html" target="_self">GLM_GTX_number_precision</a></td><td class="desc">Defined size types </td></tr>
+<tr id="row_1_34_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00215.html" target="_self">GLM_GTX_optimum_pow</a></td><td class="desc">Integer exponentiation of power functions </td></tr>
+<tr id="row_1_35_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00216.html" target="_self">GLM_GTX_orthonormalize</a></td><td class="desc">Orthonormalize matrices </td></tr>
+<tr id="row_1_36_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00217.html" target="_self">GLM_GTX_perpendicular</a></td><td class="desc">Perpendicular of a vector from other one </td></tr>
+<tr id="row_1_37_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00218.html" target="_self">GLM_GTX_polar_coordinates</a></td><td class="desc">Conversion from Euclidean space to polar space and revert </td></tr>
+<tr id="row_1_38_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00219.html" target="_self">GLM_GTX_projection</a></td><td class="desc">Projection of a vector to other one </td></tr>
+<tr id="row_1_39_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00220.html" target="_self">GLM_GTX_quaternion</a></td><td class="desc">Extented quaternion types and functions </td></tr>
+<tr id="row_1_40_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00221.html" target="_self">GLM_GTX_range</a></td><td class="desc">Defines begin and end for vectors and matrices </td></tr>
+<tr id="row_1_41_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00222.html" target="_self">GLM_GTX_raw_data</a></td><td class="desc">Projection of a vector to other one </td></tr>
+<tr id="row_1_42_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00223.html" target="_self">GLM_GTX_rotate_normalized_axis</a></td><td class="desc">Quaternions and matrices rotations around normalized axis </td></tr>
+<tr id="row_1_43_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00224.html" target="_self">GLM_GTX_rotate_vector</a></td><td class="desc">Function to directly rotate a vector </td></tr>
+<tr id="row_1_44_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00225.html" target="_self">GLM_GTX_scalar_relational</a></td><td class="desc">Extend a position from a source to a position at a defined length </td></tr>
+<tr id="row_1_45_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00226.html" target="_self">GLM_GTX_simd_mat4</a></td><td class="desc">SIMD implementation of mat4 type </td></tr>
+<tr id="row_1_46_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00227.html" target="_self">GLM_GTX_simd_quat</a></td><td class="desc">SIMD implementation of quat type </td></tr>
+<tr id="row_1_47_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00228.html" target="_self">GLM_GTX_simd_vec4</a></td><td class="desc">SIMD implementation of vec4 type </td></tr>
+<tr id="row_1_48_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00229.html" target="_self">GLM_GTX_spline</a></td><td class="desc">Spline functions </td></tr>
+<tr id="row_1_49_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00230.html" target="_self">GLM_GTX_std_based_type</a></td><td class="desc">Adds vector types based on STL value types </td></tr>
+<tr id="row_1_50_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00231.html" target="_self">GLM_GTX_string_cast</a></td><td class="desc">Setup strings for GLM type values </td></tr>
+<tr id="row_1_51_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00232.html" target="_self">GLM_GTX_transform</a></td><td class="desc">Add transformation matrices </td></tr>
+<tr id="row_1_52_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00233.html" target="_self">GLM_GTX_transform2</a></td><td class="desc">Add extra transformation matrices </td></tr>
+<tr id="row_1_53_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00234.html" target="_self">GLM_GTX_type_aligned</a></td><td class="desc">Defines aligned types </td></tr>
+<tr id="row_1_54_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00235.html" target="_self">GLM_GTX_type_trait</a></td><td class="desc">Defines traits for each type </td></tr>
+<tr id="row_1_55_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00236.html" target="_self">GLM_GTX_vector_angle</a></td><td class="desc">Compute angle between vectors </td></tr>
+<tr id="row_1_56_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00237.html" target="_self">GLM_GTX_vector_query</a></td><td class="desc">Query informations of vector types </td></tr>
+<tr id="row_1_57_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00238.html" target="_self">GLM_GTX_wrap</a></td><td class="desc">Wrapping mode of texture coordinates </td></tr>
+<tr id="row_2_"><td class="entry"><span style="width:0px;display:inline-block;"> </span><span id="arr_2_" class="arrow" onclick="toggleFolder('2_')">▼</span><a class="el" href="a00156.html" target="_self">GLM Core</a></td><td class="desc">The core of GLM, which implements exactly and only the GLSL specification to the degree possible </td></tr>
+<tr id="row_2_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00146.html" target="_self">Common functions</a></td><td class="desc">These all operate component-wise </td></tr>
+<tr id="row_2_1_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00147.html" target="_self">Exponential functions</a></td><td class="desc">These all operate component-wise </td></tr>
+<tr id="row_2_2_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00148.html" target="_self">Geometric functions</a></td><td class="desc">These operate on vectors as vectors, not component-wise </td></tr>
+<tr id="row_2_3_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00149.html" target="_self">Integer functions</a></td><td class="desc">These all operate component-wise </td></tr>
+<tr id="row_2_4_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00150.html" target="_self">Matrix functions</a></td><td class="desc">For each of the following built-in matrix functions, there is both a single-precision floating point version, where all arguments and return values are single precision, and a double-precision floating version, where all arguments and return values are double precision </td></tr>
+<tr id="row_2_5_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00151.html" target="_self">Floating-Point Pack and Unpack Functions</a></td><td class="desc">These functions do not operate component-wise, rather as described in each case </td></tr>
+<tr id="row_2_6_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00152.html" target="_self">Angle and Trigonometry Functions</a></td><td class="desc">Function parameters specified as angle are assumed to be in units of radians </td></tr>
+<tr id="row_2_7_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00153.html" target="_self">Vector Relational Functions</a></td><td class="desc">Relational and equality operators (<, <=, >, >=, ==, !=) are defined to operate on scalars and produce scalar Boolean results </td></tr>
+<tr id="row_2_8_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span id="arr_2_8_" class="arrow" onclick="toggleFolder('2_8_')">▼</span><a class="el" href="a00157.html" target="_self">Types</a></td><td class="desc">The standard types defined by the specification </td></tr>
+<tr id="row_2_8_0_"><td class="entry"><span style="width:48px;display:inline-block;"> </span><a class="el" href="a00158.html" target="_self">Precision types</a></td><td class="desc">Non-GLSL types that are used to define precision-based types </td></tr>
+<tr id="row_2_9_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00158.html" target="_self">Precision types</a></td><td class="desc">Non-GLSL types that are used to define precision-based types </td></tr>
+<tr id="row_2_10_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a class="el" href="a00159.html" target="_self">Template types</a></td><td class="desc">The generic template types used as the basis for the core types </td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.10
+</small></address>
+</body>
+</html>
diff --git a/src/third_party/glm/doc/api/nav_f.png b/src/third_party/glm/doc/api/nav_f.png
new file mode 100644
index 0000000..72a58a5
--- /dev/null
+++ b/src/third_party/glm/doc/api/nav_f.png
Binary files differ
diff --git a/src/third_party/glm/doc/api/nav_g.png b/src/third_party/glm/doc/api/nav_g.png
new file mode 100644
index 0000000..2093a23
--- /dev/null
+++ b/src/third_party/glm/doc/api/nav_g.png
Binary files differ
diff --git a/src/third_party/glm/doc/api/nav_h.png b/src/third_party/glm/doc/api/nav_h.png
new file mode 100644
index 0000000..33389b1
--- /dev/null
+++ b/src/third_party/glm/doc/api/nav_h.png
Binary files differ
diff --git a/src/third_party/glm/doc/api/open.png b/src/third_party/glm/doc/api/open.png
new file mode 100644
index 0000000..30f75c7
--- /dev/null
+++ b/src/third_party/glm/doc/api/open.png
Binary files differ
diff --git a/src/third_party/glm/doc/api/splitbar.png b/src/third_party/glm/doc/api/splitbar.png
new file mode 100644
index 0000000..fe895f2
--- /dev/null
+++ b/src/third_party/glm/doc/api/splitbar.png
Binary files differ
diff --git a/src/third_party/glm/doc/api/sync_off.png b/src/third_party/glm/doc/api/sync_off.png
new file mode 100644
index 0000000..3b443fc
--- /dev/null
+++ b/src/third_party/glm/doc/api/sync_off.png
Binary files differ
diff --git a/src/third_party/glm/doc/api/sync_on.png b/src/third_party/glm/doc/api/sync_on.png
new file mode 100644
index 0000000..e08320f
--- /dev/null
+++ b/src/third_party/glm/doc/api/sync_on.png
Binary files differ
diff --git a/src/third_party/glm/doc/api/tab_a.png b/src/third_party/glm/doc/api/tab_a.png
new file mode 100644
index 0000000..3b725c4
--- /dev/null
+++ b/src/third_party/glm/doc/api/tab_a.png
Binary files differ
diff --git a/src/third_party/glm/doc/api/tab_b.png b/src/third_party/glm/doc/api/tab_b.png
new file mode 100644
index 0000000..e2b4a86
--- /dev/null
+++ b/src/third_party/glm/doc/api/tab_b.png
Binary files differ
diff --git a/src/third_party/glm/doc/api/tab_h.png b/src/third_party/glm/doc/api/tab_h.png
new file mode 100644
index 0000000..fd5cb70
--- /dev/null
+++ b/src/third_party/glm/doc/api/tab_h.png
Binary files differ
diff --git a/src/third_party/glm/doc/api/tab_s.png b/src/third_party/glm/doc/api/tab_s.png
new file mode 100644
index 0000000..ab478c9
--- /dev/null
+++ b/src/third_party/glm/doc/api/tab_s.png
Binary files differ
diff --git a/src/third_party/glm/doc/api/tabs.css b/src/third_party/glm/doc/api/tabs.css
new file mode 100644
index 0000000..636277d
--- /dev/null
+++ b/src/third_party/glm/doc/api/tabs.css
@@ -0,0 +1,79 @@
+.tabs, .tabs2, .tabs3 {
+ background-image: -moz-linear-gradient(center top, #FFFFFF 0%, #FFFFFF 5%, #FFEEDD 95%, #FFEEDD);
+ background-image: -webkit-gradient(linear,center top,center bottom,from(#FFFFFF), color-stop(0.05,#FFFFFF), color-stop(0.05,#FFFFFF), color-stop(0.95,#FFEEDD), to(#FFEEDD));
+
+ /*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: -moz-linear-gradient(center top, #FFFFFF 0%, #FFFFFF 5%, #FFEEDD 95%, #FFEEDD);
+ background-image: -webkit-gradient(linear,center top,center bottom,from(#FFFFFF), color-stop(0.05,#FFFFFF), color-stop(0.05,#FFFFFF), color-stop(0.95,#FFEEDD), to(#FFEEDD));
+
+ /*background-image: url('tab_b.png');*/
+ line-height: 36px;
+ list-style: none;
+}
+
+.tablist a {
+ display: block;
+ padding: 0 20px;
+ font-weight: bold;
+
+ background-image: -moz-linear-gradient(center top, #FFFFFF 0%, #FFFFFF 5%, #FFEEDD 95%, #FFEEDD);
+ background-image: -webkit-gradient(linear,center top,center bottom,from(#FFFFFF), color-stop(0.05,#FFFFFF), color-stop(0.05,#FFFFFF), color-stop(0.95,#FFEEDD), to(#FFEEDD));
+
+ /*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: -moz-linear-gradient(center top, #FFFFFF 0%, #FFFFFF 5%, #FFEEDD 95%, #FFEEDD);
+ background-image: -webkit-gradient(linear,center top,center bottom,from(#FFFFFF), color-stop(0.05,#FFFFFF), color-stop(0.05,#FFFFFF), color-stop(0.95,#FFEEDD), to(#FFEEDD));
+
+ /*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: -moz-linear-gradient(center top, #FFFFFF 0%, #FFFFFF 5%, #FFEEDD 95%, #FFEEDD);
+ background-image: -webkit-gradient(linear,center top,center bottom,from(#FFFFFF), color-stop(0.05,#FFFFFF), color-stop(0.05,#FFFFFF), color-stop(0.95,#FFEEDD), to(#FFEEDD));
+
+ /*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);*/
+}
diff --git a/src/third_party/glm/doc/glm.docx b/src/third_party/glm/doc/glm.docx
new file mode 100644
index 0000000..ba99849
--- /dev/null
+++ b/src/third_party/glm/doc/glm.docx
Binary files differ
diff --git a/src/third_party/glm/doc/glm.pdf b/src/third_party/glm/doc/glm.pdf
new file mode 100644
index 0000000..444725c
--- /dev/null
+++ b/src/third_party/glm/doc/glm.pdf
Binary files differ
diff --git a/src/third_party/glm/doc/logo.png b/src/third_party/glm/doc/logo.png
new file mode 100644
index 0000000..80b5f9d
--- /dev/null
+++ b/src/third_party/glm/doc/logo.png
Binary files differ
diff --git a/src/third_party/glm/doc/man.doxy b/src/third_party/glm/doc/man.doxy
new file mode 100644
index 0000000..b80a70b
--- /dev/null
+++ b/src/third_party/glm/doc/man.doxy
@@ -0,0 +1,2396 @@
+# Doxyfile 1.8.10
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project.
+#
+# All text after a double hash (##) is considered a comment and is placed in
+# front of the TAG it is preceding.
+#
+# All text after a single hash (#) is considered a comment and will be ignored.
+# The format is:
+# TAG = value [value, ...]
+# For lists, items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (\" \").
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all text
+# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
+# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv
+# for the list of possible encodings.
+# The default value is: UTF-8.
+
+DOXYFILE_ENCODING = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
+# double-quotes, unless you are using Doxywizard) that should identify the
+# project for which the documentation is generated. This name is used in the
+# title of most generated pages and in a few other places.
+# The default value is: My Project.
+
+PROJECT_NAME = 0.9.8
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
+# could be handy for archiving the generated documentation or if some version
+# control system is used.
+
+PROJECT_NUMBER =
+
+# Using the PROJECT_BRIEF tag one can provide an optional one line description
+# for a project that appears at the top of each page and should give viewer a
+# quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF =
+
+# With the PROJECT_LOGO tag one can specify a logo or an icon that is included
+# in the documentation. The maximum height of the logo should not exceed 55
+# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
+# the logo to the output directory.
+
+PROJECT_LOGO = D:/Source/G-Truc/glm/doc/logo.png
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
+# into which the generated documentation will be written. If a relative path is
+# entered, it will be relative to the location where doxygen was started. If
+# left blank the current directory will be used.
+
+OUTPUT_DIRECTORY = .
+
+# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
+# directories (in 2 levels) under the output directory of each output format and
+# will distribute the generated files over these directories. Enabling this
+# option can be useful when feeding doxygen a huge amount of source files, where
+# putting all generated files in the same directory would otherwise causes
+# performance problems for the file system.
+# The default value is: NO.
+
+CREATE_SUBDIRS = NO
+
+# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
+# characters to appear in the names of generated files. If set to NO, non-ASCII
+# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
+# U+3044.
+# The default value is: NO.
+
+ALLOW_UNICODE_NAMES = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
+# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
+# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
+# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
+# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
+# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
+# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
+# Ukrainian and Vietnamese.
+# The default value is: English.
+
+OUTPUT_LANGUAGE = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member
+# descriptions after the members that are listed in the file and class
+# documentation (similar to Javadoc). Set to NO to disable this.
+# The default value is: YES.
+
+BRIEF_MEMBER_DESC = NO
+
+# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief
+# description of a member or function before the detailed description
+#
+# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+# The default value is: YES.
+
+REPEAT_BRIEF = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator that is
+# used to form the text in various listings. Each string in this list, if found
+# as the leading text of the brief description, will be stripped from the text
+# and the result, after processing the whole list, is used as the annotated
+# text. Otherwise, the brief description is used as-is. If left blank, the
+# following values are used ($name is automatically replaced with the name of
+# the entity):The $name class, The $name widget, The $name file, is, provides,
+# specifies, contains, represents, a, an and the.
+
+ABBREVIATE_BRIEF = "The $name class " \
+ "The $name widget " \
+ "The $name file " \
+ is \
+ provides \
+ specifies \
+ contains \
+ represents \
+ a \
+ an \
+ the
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# doxygen will generate a detailed section even if there is only a brief
+# description.
+# The default value is: NO.
+
+ALWAYS_DETAILED_SEC = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+# The default value is: NO.
+
+INLINE_INHERITED_MEMB = NO
+
+# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path
+# before files name in the file list and in the header files. If set to NO the
+# shortest path that makes the file name unique will be used
+# The default value is: YES.
+
+FULL_PATH_NAMES = NO
+
+# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
+# Stripping is only done if one of the specified strings matches the left-hand
+# part of the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the path to
+# strip.
+#
+# Note that you can specify absolute paths here, but also relative paths, which
+# will be relative from the directory where doxygen is started.
+# This tag requires that the tag FULL_PATH_NAMES is set to YES.
+
+STRIP_FROM_PATH = "C:/Documents and Settings/Groove/ "
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
+# path mentioned in the documentation of a class, which tells the reader which
+# header file to include in order to use a class. If left blank only the name of
+# the header file containing the class definition is used. Otherwise one should
+# specify the list of include paths that are normally passed to the compiler
+# using the -I flag.
+
+STRIP_FROM_INC_PATH =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
+# less readable) file names. This can be useful is your file systems doesn't
+# support long names like on DOS, Mac, or CD-ROM.
+# The default value is: NO.
+
+SHORT_NAMES = YES
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
+# first line (until the first dot) of a Javadoc-style comment as the brief
+# description. If set to NO, the Javadoc-style will behave just like regular Qt-
+# style comments (thus requiring an explicit @brief command for a brief
+# description.)
+# The default value is: NO.
+
+JAVADOC_AUTOBRIEF = YES
+
+# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
+# line (until the first dot) of a Qt-style comment as the brief description. If
+# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
+# requiring an explicit \brief command for a brief description.)
+# The default value is: NO.
+
+QT_AUTOBRIEF = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
+# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
+# a brief description. This used to be the default behavior. The new default is
+# to treat a multi-line C++ comment block as a detailed description. Set this
+# tag to YES if you prefer the old behavior instead.
+#
+# Note that setting this tag to YES also means that rational rose comments are
+# not recognized any more.
+# The default value is: NO.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
+# documentation from any documented member that it re-implements.
+# The default value is: YES.
+
+INHERIT_DOCS = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new
+# page for each member. If set to NO, the documentation of a member will be part
+# of the file/class/namespace that contains it.
+# The default value is: NO.
+
+SEPARATE_MEMBER_PAGES = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
+# uses this value to replace tabs by spaces in code fragments.
+# Minimum value: 1, maximum value: 16, default value: 4.
+
+TAB_SIZE = 8
+
+# This tag can be used to specify a number of aliases that act as commands in
+# the documentation. An alias has the form:
+# name=value
+# For example adding
+# "sideeffect=@par Side Effects:\n"
+# will allow you to put the command \sideeffect (or @sideeffect) in the
+# documentation, which will result in a user-defined paragraph with heading
+# "Side Effects:". You can put \n's in the value part of an alias to insert
+# newlines.
+
+ALIASES =
+
+# This tag can be used to specify a number of word-keyword mappings (TCL only).
+# A mapping has the form "name=value". For example adding "class=itcl::class"
+# will allow you to use the command class in the itcl::class meaning.
+
+TCL_SUBST =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
+# only. Doxygen will then generate output that is more tailored for C. For
+# instance, some of the names that are used will be different. The list of all
+# members will be omitted, etc.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_FOR_C = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
+# Python sources only. Doxygen will then generate output that is more tailored
+# for that language. For instance, namespaces will be presented as packages,
+# qualified scopes will look different, etc.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_JAVA = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources. Doxygen will then generate output that is tailored for Fortran.
+# The default value is: NO.
+
+OPTIMIZE_FOR_FORTRAN = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for VHDL.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_VHDL = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given
+# extension. Doxygen has a built-in mapping, but you can override or extend it
+# using this tag. The format is ext=language, where ext is a file extension, and
+# language is one of the parsers supported by doxygen: IDL, Java, Javascript,
+# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran:
+# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran:
+# Fortran. In the later case the parser tries to guess whether the code is fixed
+# or free formatted code, this is the default for Fortran type files), VHDL. For
+# instance to make doxygen treat .inc files as Fortran files (default is PHP),
+# and .f files as C (default is Fortran), use: inc=Fortran f=C.
+#
+# Note: For files without extension you can use no_extension as a placeholder.
+#
+# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
+# the files are not read by doxygen.
+
+EXTENSION_MAPPING =
+
+# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
+# according to the Markdown format, which allows for more readable
+# documentation. See http://daringfireball.net/projects/markdown/ for details.
+# The output of markdown processing is further processed by doxygen, so you can
+# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
+# case of backward compatibilities issues.
+# The default value is: YES.
+
+MARKDOWN_SUPPORT = YES
+
+# When enabled doxygen tries to link words that correspond to documented
+# classes, or namespaces to their corresponding documentation. Such a link can
+# be prevented in individual cases by putting a % sign in front of the word or
+# globally by setting AUTOLINK_SUPPORT to NO.
+# The default value is: YES.
+
+AUTOLINK_SUPPORT = YES
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should set this
+# tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string);
+# versus func(std::string) {}). This also make the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+# The default value is: NO.
+
+BUILTIN_STL_SUPPORT = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+# The default value is: NO.
+
+CPP_CLI_SUPPORT = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
+# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen
+# will parse them like normal C++ but will assume all classes use public instead
+# of private inheritance when no explicit protection keyword is present.
+# The default value is: NO.
+
+SIP_SUPPORT = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate
+# getter and setter methods for a property. Setting this option to YES will make
+# doxygen to replace the get and set methods by a property in the documentation.
+# This will only work if the methods are indeed getting or setting a simple
+# type. If this is not the case, or you want to show the methods anyway, you
+# should set this option to NO.
+# The default value is: YES.
+
+IDL_PROPERTY_SUPPORT = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+# The default value is: NO.
+
+DISTRIBUTE_GROUP_DOC = NO
+
+# If one adds a struct or class to a group and this option is enabled, then also
+# any nested class or struct is added to the same group. By default this option
+# is disabled and one has to add nested compounds explicitly via \ingroup.
+# The default value is: NO.
+
+GROUP_NESTED_COMPOUNDS = NO
+
+# Set the SUBGROUPING tag to YES to allow class member groups of the same type
+# (for instance a group of public functions) to be put as a subgroup of that
+# type (e.g. under the Public Functions section). Set it to NO to prevent
+# subgrouping. Alternatively, this can be done per class using the
+# \nosubgrouping command.
+# The default value is: YES.
+
+SUBGROUPING = NO
+
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
+# are shown inside the group in which they are included (e.g. using \ingroup)
+# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
+# and RTF).
+#
+# Note that this feature does not work in combination with
+# SEPARATE_MEMBER_PAGES.
+# The default value is: NO.
+
+INLINE_GROUPED_CLASSES = NO
+
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
+# with only public data fields or simple typedef fields will be shown inline in
+# the documentation of the scope in which they are defined (i.e. file,
+# namespace, or group documentation), provided this scope is documented. If set
+# to NO, structs, classes, and unions are shown on a separate page (for HTML and
+# Man pages) or section (for LaTeX and RTF).
+# The default value is: NO.
+
+INLINE_SIMPLE_STRUCTS = NO
+
+# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
+# enum is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically be
+# useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+# The default value is: NO.
+
+TYPEDEF_HIDES_STRUCT = NO
+
+# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
+# cache is used to resolve symbols given their name and scope. Since this can be
+# an expensive process and often the same symbol appears multiple times in the
+# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
+# doxygen will become slower. If the cache is too large, memory is wasted. The
+# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
+# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
+# symbols. At the end of a run doxygen will report the cache usage and suggest
+# the optimal cache size from a speed point of view.
+# Minimum value: 0, maximum value: 9, default value: 0.
+
+LOOKUP_CACHE_SIZE = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in
+# documentation are documented, even if no documentation was available. Private
+# class members and static file members will be hidden unless the
+# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
+# Note: This will also disable the warnings about undocumented members that are
+# normally produced when WARNINGS is set to YES.
+# The default value is: NO.
+
+EXTRACT_ALL = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will
+# be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PRIVATE = NO
+
+# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
+# scope will be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PACKAGE = NO
+
+# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be
+# included in the documentation.
+# The default value is: NO.
+
+EXTRACT_STATIC = YES
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined
+# locally in source files will be included in the documentation. If set to NO,
+# only classes defined in header files are included. Does not have any effect
+# for Java sources.
+# The default value is: YES.
+
+EXTRACT_LOCAL_CLASSES = NO
+
+# This flag is only useful for Objective-C code. If set to YES, local methods,
+# which are defined in the implementation section but not in the interface are
+# included in the documentation. If set to NO, only methods in the interface are
+# included.
+# The default value is: NO.
+
+EXTRACT_LOCAL_METHODS = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base name of
+# the file that contains the anonymous namespace. By default anonymous namespace
+# are hidden.
+# The default value is: NO.
+
+EXTRACT_ANON_NSPACES = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
+# undocumented members inside documented classes or files. If set to NO these
+# members will be included in the various overviews, but no documentation
+# section is generated. This option has no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
+
+HIDE_UNDOC_MEMBERS = YES
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy. If set
+# to NO, these classes will be included in the various overviews. This option
+# has no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
+
+HIDE_UNDOC_CLASSES = YES
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
+# (class|struct|union) declarations. If set to NO, these declarations will be
+# included in the documentation.
+# The default value is: NO.
+
+HIDE_FRIEND_COMPOUNDS = YES
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
+# documentation blocks found inside the body of a function. If set to NO, these
+# blocks will be appended to the function's detailed documentation block.
+# The default value is: NO.
+
+HIDE_IN_BODY_DOCS = YES
+
+# The INTERNAL_DOCS tag determines if documentation that is typed after a
+# \internal command is included. If the tag is set to NO then the documentation
+# will be excluded. Set it to YES to include the internal documentation.
+# The default value is: NO.
+
+INTERNAL_DOCS = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
+# names in lower-case letters. If set to YES, upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+# The default value is: system dependent.
+
+CASE_SENSE_NAMES = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
+# their full class and namespace scopes in the documentation. If set to YES, the
+# scope will be hidden.
+# The default value is: NO.
+
+HIDE_SCOPE_NAMES = YES
+
+# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
+# append additional text to a page's title, such as Class Reference. If set to
+# YES the compound reference will be hidden.
+# The default value is: NO.
+
+HIDE_COMPOUND_REFERENCE= NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
+# the files that are included by a file in the documentation of that file.
+# The default value is: YES.
+
+SHOW_INCLUDE_FILES = NO
+
+# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
+# grouped member an include statement to the documentation, telling the reader
+# which file to include in order to use the member.
+# The default value is: NO.
+
+SHOW_GROUPED_MEMB_INC = NO
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
+# files with double quotes in the documentation rather than with sharp brackets.
+# The default value is: NO.
+
+FORCE_LOCAL_INCLUDES = NO
+
+# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
+# documentation for inline members.
+# The default value is: YES.
+
+INLINE_INFO = NO
+
+# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
+# (detailed) documentation of file and class members alphabetically by member
+# name. If set to NO, the members will appear in declaration order.
+# The default value is: YES.
+
+SORT_MEMBER_DOCS = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
+# descriptions of file, namespace and class members alphabetically by member
+# name. If set to NO, the members will appear in declaration order. Note that
+# this will also influence the order of the classes in the class list.
+# The default value is: NO.
+
+SORT_BRIEF_DOCS = YES
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
+# (brief and detailed) documentation of class members so that constructors and
+# destructors are listed first. If set to NO the constructors will appear in the
+# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
+# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
+# member documentation.
+# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
+# detailed member documentation.
+# The default value is: NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
+# of group names into alphabetical order. If set to NO the group names will
+# appear in their defined order.
+# The default value is: NO.
+
+SORT_GROUP_NAMES = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
+# fully-qualified names, including namespaces. If set to NO, the class list will
+# be sorted only by class name, not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the alphabetical
+# list.
+# The default value is: NO.
+
+SORT_BY_SCOPE_NAME = YES
+
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
+# type resolution of all parameters of a function it will reject a match between
+# the prototype and the implementation of a member function even if there is
+# only one candidate or it is obvious which candidate to choose by doing a
+# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
+# accept a match between prototype and implementation in such cases.
+# The default value is: NO.
+
+STRICT_PROTO_MATCHING = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo
+# list. This list is created by putting \todo commands in the documentation.
+# The default value is: YES.
+
+GENERATE_TODOLIST = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test
+# list. This list is created by putting \test commands in the documentation.
+# The default value is: YES.
+
+GENERATE_TESTLIST = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug
+# list. This list is created by putting \bug commands in the documentation.
+# The default value is: YES.
+
+GENERATE_BUGLIST = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)
+# the deprecated list. This list is created by putting \deprecated commands in
+# the documentation.
+# The default value is: YES.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional documentation
+# sections, marked by \if <section_label> ... \endif and \cond <section_label>
+# ... \endcond blocks.
+
+ENABLED_SECTIONS =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
+# initial value of a variable or macro / define can have for it to appear in the
+# documentation. If the initializer consists of more lines than specified here
+# it will be hidden. Use a value of 0 to hide initializers completely. The
+# appearance of the value of individual variables and macros / defines can be
+# controlled using \showinitializer or \hideinitializer command in the
+# documentation regardless of this setting.
+# Minimum value: 0, maximum value: 10000, default value: 30.
+
+MAX_INITIALIZER_LINES = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
+# the bottom of the documentation of classes and structs. If set to YES, the
+# list will mention the files that were used to generate the documentation.
+# The default value is: YES.
+
+SHOW_USED_FILES = NO
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
+# will remove the Files entry from the Quick Index and from the Folder Tree View
+# (if specified).
+# The default value is: YES.
+
+SHOW_FILES = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
+# page. This will remove the Namespaces entry from the Quick Index and from the
+# Folder Tree View (if specified).
+# The default value is: YES.
+
+SHOW_NAMESPACES = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command command input-file, where command is the value of the
+# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
+# by doxygen. Whatever the program writes to standard output is used as the file
+# version. For an example see the documentation.
+
+FILE_VERSION_FILTER =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. To create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option. You can
+# optionally specify a file name after the option, if omitted DoxygenLayout.xml
+# will be used as the name of the layout file.
+#
+# Note that if you run doxygen from a directory containing a file called
+# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
+# tag is left empty.
+
+LAYOUT_FILE =
+
+# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
+# the reference definitions. This must be a list of .bib files. The .bib
+# extension is automatically appended if omitted. This requires the bibtex tool
+# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
+# For LaTeX the style of the bibliography can be controlled using
+# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
+# search path. See also \cite for info how to create references.
+
+CITE_BIB_FILES =
+
+#---------------------------------------------------------------------------
+# Configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated to
+# standard output by doxygen. If QUIET is set to YES this implies that the
+# messages are off.
+# The default value is: NO.
+
+QUIET = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES
+# this implies that the warnings are on.
+#
+# Tip: Turn warnings on while writing the documentation.
+# The default value is: YES.
+
+WARNINGS = YES
+
+# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate
+# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
+# will automatically be disabled.
+# The default value is: YES.
+
+WARN_IF_UNDOCUMENTED = YES
+
+# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some parameters
+# in a documented function, or documenting parameters that don't exist or using
+# markup commands wrongly.
+# The default value is: YES.
+
+WARN_IF_DOC_ERROR = YES
+
+# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
+# are documented, but have no documentation for their parameters or return
+# value. If set to NO, doxygen will only warn about wrong or incomplete
+# parameter documentation, but not about the absence of documentation.
+# The default value is: NO.
+
+WARN_NO_PARAMDOC = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that doxygen
+# can produce. The string should contain the $file, $line, and $text tags, which
+# will be replaced by the file and line number from which the warning originated
+# and the warning text. Optionally the format may contain $version, which will
+# be replaced by the version of the file (if it could be obtained via
+# FILE_VERSION_FILTER)
+# The default value is: $file:$line: $text.
+
+WARN_FORMAT = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning and error
+# messages should be written. If left blank the output is written to standard
+# error (stderr).
+
+WARN_LOGFILE =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag is used to specify the files and/or directories that contain
+# documented source files. You may enter file names like myfile.cpp or
+# directories like /usr/src/myproject. Separate the files or directories with
+# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
+# Note: If this tag is empty the current directory is searched.
+
+INPUT = ../glm \
+ .
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
+# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
+# documentation (see: http://www.gnu.org/software/libiconv) for the list of
+# possible encodings.
+# The default value is: UTF-8.
+
+INPUT_ENCODING = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
+# *.h) to filter out the source-files in the directories.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# read by doxygen.
+#
+# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,
+# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,
+# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc,
+# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd,
+# *.vhdl, *.ucf, *.qsf, *.as and *.js.
+
+FILE_PATTERNS = *.hpp \
+ *.doxy
+
+# The RECURSIVE tag can be used to specify whether or not subdirectories should
+# be searched for input files as well.
+# The default value is: NO.
+
+RECURSIVE = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should be
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+#
+# Note that relative paths are relative to the directory from which doxygen is
+# run.
+
+EXCLUDE =
+
+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are excluded
+# from the input.
+# The default value is: NO.
+
+EXCLUDE_SYMLINKS = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories.
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories for example use the pattern */test/*
+
+EXCLUDE_PATTERNS =
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories use the pattern */test/*
+
+EXCLUDE_SYMBOLS =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or directories
+# that contain example code fragments that are included (see the \include
+# command).
+
+EXAMPLE_PATH =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
+# *.h) to filter out the source-files in the directories. If left blank all
+# files are included.
+
+EXAMPLE_PATTERNS = *
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude commands
+# irrespective of the value of the RECURSIVE tag.
+# The default value is: NO.
+
+EXAMPLE_RECURSIVE = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or directories
+# that contain images that are to be included in the documentation (see the
+# \image command).
+
+IMAGE_PATH =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command:
+#
+# <filter> <input-file>
+#
+# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the
+# name of an input file. Doxygen will then use the output that the filter
+# program writes to standard output. If FILTER_PATTERNS is specified, this tag
+# will be ignored.
+#
+# Note that the filter must not add or remove lines; it is applied before the
+# code is scanned, but not when the output code is generated. If lines are added
+# or removed, the anchors will not be placed correctly.
+
+INPUT_FILTER =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis. Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match. The filters are a list of the form: pattern=filter
+# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
+# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
+# patterns match the file name, INPUT_FILTER is applied.
+
+FILTER_PATTERNS =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will also be used to filter the input files that are used for
+# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
+# The default value is: NO.
+
+FILTER_SOURCE_FILES = NO
+
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
+# it is also possible to disable source filtering for a specific pattern using
+# *.ext= (so without naming a filter).
+# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
+
+FILTER_SOURCE_PATTERNS =
+
+# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
+# is part of the input, its contents will be placed on the main page
+# (index.html). This can be useful if you have a project on for instance GitHub
+# and want to reuse the introduction page also for the doxygen output.
+
+USE_MDFILE_AS_MAINPAGE =
+
+#---------------------------------------------------------------------------
+# Configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will be
+# generated. Documented entities will be cross-referenced with these sources.
+#
+# Note: To get rid of all source code in the generated output, make sure that
+# also VERBATIM_HEADERS is set to NO.
+# The default value is: NO.
+
+SOURCE_BROWSER = YES
+
+# Setting the INLINE_SOURCES tag to YES will include the body of functions,
+# classes and enums directly into the documentation.
+# The default value is: NO.
+
+INLINE_SOURCES = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
+# special comment blocks from generated source code fragments. Normal C, C++ and
+# Fortran comments will always remain visible.
+# The default value is: YES.
+
+STRIP_CODE_COMMENTS = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
+# function all documented functions referencing it will be listed.
+# The default value is: NO.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES then for each documented function
+# all documented entities called/used by that function will be listed.
+# The default value is: NO.
+
+REFERENCES_RELATION = YES
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
+# to YES then the hyperlinks from functions in REFERENCES_RELATION and
+# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
+# link to the documentation.
+# The default value is: YES.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
+# source code will show a tooltip with additional information such as prototype,
+# brief description and links to the definition and documentation. Since this
+# will make the HTML file larger and loading of large files a bit slower, you
+# can opt to disable this feature.
+# The default value is: YES.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
+
+SOURCE_TOOLTIPS = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code will
+# point to the HTML generated by the htags(1) tool instead of doxygen built-in
+# source browser. The htags tool is part of GNU's global source tagging system
+# (see http://www.gnu.org/software/global/global.html). You will need version
+# 4.8.6 or higher.
+#
+# To use it do the following:
+# - Install the latest version of global
+# - Enable SOURCE_BROWSER and USE_HTAGS in the config file
+# - Make sure the INPUT points to the root of the source tree
+# - Run doxygen as normal
+#
+# Doxygen will invoke htags (and that will in turn invoke gtags), so these
+# tools must be available from the command line (i.e. in the search path).
+#
+# The result: instead of the source browser generated by doxygen, the links to
+# source code will now point to the output of htags.
+# The default value is: NO.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
+
+USE_HTAGS = NO
+
+# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
+# verbatim copy of the header file for each class for which an include is
+# specified. Set to NO to disable this.
+# See also: Section \class.
+# The default value is: YES.
+
+VERBATIM_HEADERS = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
+# compounds will be generated. Enable this if the project contains a lot of
+# classes, structs, unions or interfaces.
+# The default value is: YES.
+
+ALPHABETICAL_INDEX = NO
+
+# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
+# which the alphabetical index list will be split.
+# Minimum value: 1, maximum value: 20, default value: 5.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
+
+COLS_IN_ALPHA_INDEX = 5
+
+# In case all classes in a project start with a common prefix, all classes will
+# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
+# can be used to specify a prefix (or a list of prefixes) that should be ignored
+# while generating the index headers.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
+
+IGNORE_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output
+# The default value is: YES.
+
+GENERATE_HTML = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_OUTPUT = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
+# generated HTML page (for example: .htm, .php, .asp).
+# The default value is: .html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_FILE_EXTENSION = .html
+
+# The HTML_HEADER tag can be used to specify a user-defined HTML header file for
+# each generated HTML page. If the tag is left blank doxygen will generate a
+# standard header.
+#
+# To get valid HTML the header file that includes any scripts and style sheets
+# that doxygen needs, which is dependent on the configuration options used (e.g.
+# the setting GENERATE_TREEVIEW). It is highly recommended to start with a
+# default header using
+# doxygen -w html new_header.html new_footer.html new_stylesheet.css
+# YourConfigFile
+# and then modify the file new_header.html. See also section "Doxygen usage"
+# for information on how to generate the default header that doxygen normally
+# uses.
+# Note: The header is subject to change so you typically have to regenerate the
+# default header when upgrading to a newer version of doxygen. For a description
+# of the possible markers and block names see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_HEADER =
+
+# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
+# generated HTML page. If the tag is left blank doxygen will generate a standard
+# footer. See HTML_HEADER for more information on how to generate a default
+# footer and what special commands can be used inside the footer. See also
+# section "Doxygen usage" for information on how to generate the default footer
+# that doxygen normally uses.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_FOOTER =
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
+# sheet that is used by each HTML page. It can be used to fine-tune the look of
+# the HTML output. If left blank doxygen will generate a default style sheet.
+# See also section "Doxygen usage" for information on how to generate the style
+# sheet that doxygen normally uses.
+# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
+# it is more robust and this tag (HTML_STYLESHEET) will in the future become
+# obsolete.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_STYLESHEET =
+
+# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
+# cascading style sheets that are included after the standard style sheets
+# created by doxygen. Using this option one can overrule certain style aspects.
+# This is preferred over using HTML_STYLESHEET since it does not replace the
+# standard style sheet and is therefore more robust against future updates.
+# Doxygen will copy the style sheet files to the output directory.
+# Note: The order of the extra style sheet files is of importance (e.g. the last
+# style sheet in the list overrules the setting of the previous ones in the
+# list). For an example see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_EXTRA_STYLESHEET =
+
+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the HTML output directory. Note
+# that these files will be copied to the base HTML output directory. Use the
+# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that the
+# files will be copied as-is; there are no commands or markers available.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_EXTRA_FILES =
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
+# will adjust the colors in the style sheet and background images according to
+# this color. Hue is specified as an angle on a colorwheel, see
+# http://en.wikipedia.org/wiki/Hue for more information. For instance the value
+# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
+# purple, and 360 is red again.
+# Minimum value: 0, maximum value: 359, default value: 220.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_HUE = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
+# in the HTML output. For a value of 0 the output will use grayscales only. A
+# value of 255 will produce the most vivid colors.
+# Minimum value: 0, maximum value: 255, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_SAT = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
+# luminance component of the colors in the HTML output. Values below 100
+# gradually make the output lighter, whereas values above 100 make the output
+# darker. The value divided by 100 is the actual gamma applied, so 80 represents
+# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
+# change the gamma.
+# Minimum value: 40, maximum value: 240, default value: 80.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_GAMMA = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
+# page will contain the date and time when the page was generated. Setting this
+# to YES can help to show when doxygen was last run and thus if the
+# documentation is up to date.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_TIMESTAMP = NO
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_DYNAMIC_SECTIONS = NO
+
+# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
+# shown in the various tree structured indices initially; the user can expand
+# and collapse entries dynamically later on. Doxygen will expand the tree to
+# such a level that at most the specified number of entries are visible (unless
+# a fully collapsed tree already exceeds this amount). So setting the number of
+# entries 1 will produce a full collapsed tree by default. 0 is a special value
+# representing an infinite number of entries and will result in a full expanded
+# tree by default.
+# Minimum value: 0, maximum value: 9999, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_INDEX_NUM_ENTRIES = 100
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files will be
+# generated that can be used as input for Apple's Xcode 3 integrated development
+# environment (see: http://developer.apple.com/tools/xcode/), introduced with
+# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a
+# Makefile in the HTML output directory. Running make will produce the docset in
+# that directory and running make install will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
+# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# for more information.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_DOCSET = NO
+
+# This tag determines the name of the docset feed. A documentation feed provides
+# an umbrella under which multiple documentation sets from a single provider
+# (such as a company or product suite) can be grouped.
+# The default value is: Doxygen generated docs.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_FEEDNAME = "Doxygen generated docs"
+
+# This tag specifies a string that should uniquely identify the documentation
+# set bundle. This should be a reverse domain-name style string, e.g.
+# com.mycompany.MyDocSet. Doxygen will append .docset to the name.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_BUNDLE_ID = org.doxygen.Project
+
+# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
+# the documentation publisher. This should be a reverse domain-name style
+# string, e.g. com.mycompany.MyDocSet.documentation.
+# The default value is: org.doxygen.Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_PUBLISHER_ID = org.doxygen.Publisher
+
+# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
+# The default value is: Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_PUBLISHER_NAME = Publisher
+
+# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
+# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
+# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
+# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on
+# Windows.
+#
+# The HTML Help Workshop contains a compiler that can convert all HTML output
+# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
+# files are now used as the Windows 98 help format, and will replace the old
+# Windows help format (.hlp) on all Windows platforms in the future. Compressed
+# HTML files also contain an index, a table of contents, and you can search for
+# words in the documentation. The HTML workshop also contains a viewer for
+# compressed HTML files.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_HTMLHELP = NO
+
+# The CHM_FILE tag can be used to specify the file name of the resulting .chm
+# file. You can add a path in front of the file if the result should not be
+# written to the html output directory.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+CHM_FILE =
+
+# The HHC_LOCATION tag can be used to specify the location (absolute path
+# including file name) of the HTML help compiler (hhc.exe). If non-empty,
+# doxygen will try to run the HTML help compiler on the generated index.hhp.
+# The file has to be specified with full path.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+HHC_LOCATION =
+
+# The GENERATE_CHI flag controls if a separate .chi index file is generated
+# (YES) or that it should be included in the master .chm file (NO).
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+GENERATE_CHI = NO
+
+# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)
+# and project file content.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+CHM_INDEX_ENCODING =
+
+# The BINARY_TOC flag controls whether a binary table of contents is generated
+# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it
+# enables the Previous and Next buttons.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+BINARY_TOC = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members to
+# the table of contents of the HTML help documentation and to the tree view.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+TOC_EXPAND = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
+# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
+# (.qch) of the generated HTML documentation.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_QHP = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
+# the file name of the resulting .qch file. The path specified is relative to
+# the HTML output folder.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QCH_FILE =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
+# Project output. For more information please see Qt Help Project / Namespace
+# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_NAMESPACE = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
+# Help Project output. For more information please see Qt Help Project / Virtual
+# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-
+# folders).
+# The default value is: doc.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_VIRTUAL_FOLDER = doc
+
+# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
+# filter to add. For more information please see Qt Help Project / Custom
+# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
+# filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_CUST_FILTER_NAME =
+
+# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see Qt Help Project / Custom
+# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
+# filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_CUST_FILTER_ATTRS =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's filter section matches. Qt Help Project / Filter Attributes (see:
+# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_SECT_FILTER_ATTRS =
+
+# The QHG_LOCATION tag can be used to specify the location of Qt's
+# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
+# generated .qhp file.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHG_LOCATION =
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
+# generated, together with the HTML files, they form an Eclipse help plugin. To
+# install this plugin and make it available under the help contents menu in
+# Eclipse, the contents of the directory containing the HTML and XML files needs
+# to be copied into the plugins directory of eclipse. The name of the directory
+# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
+# After copying Eclipse needs to be restarted before the help appears.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_ECLIPSEHELP = NO
+
+# A unique identifier for the Eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have this
+# name. Each documentation set should have its own identifier.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
+
+ECLIPSE_DOC_ID = org.doxygen.Project
+
+# If you want full control over the layout of the generated HTML pages it might
+# be necessary to disable the index and replace it with your own. The
+# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
+# of each HTML page. A value of NO enables the index and the value YES disables
+# it. Since the tabs in the index contain the same information as the navigation
+# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+DISABLE_INDEX = NO
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information. If the tag
+# value is set to YES, a side panel will be generated containing a tree-like
+# index structure (just like the one that is generated for HTML Help). For this
+# to work a browser that supports JavaScript, DHTML, CSS and frames is required
+# (i.e. any modern browser). Windows users are probably better off using the
+# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can
+# further fine-tune the look of the index. As an example, the default style
+# sheet generated by doxygen has an example that shows how to put an image at
+# the root of the tree instead of the PROJECT_NAME. Since the tree basically has
+# the same information as the tab index, you could consider setting
+# DISABLE_INDEX to YES when enabling this option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_TREEVIEW = NO
+
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
+# doxygen will group on one line in the generated HTML documentation.
+#
+# Note that a value of 0 will completely suppress the enum values from appearing
+# in the overview section.
+# Minimum value: 0, maximum value: 20, default value: 4.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+ENUM_VALUES_PER_LINE = 4
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
+# to set the initial width (in pixels) of the frame in which the tree is shown.
+# Minimum value: 0, maximum value: 1500, default value: 250.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+TREEVIEW_WIDTH = 250
+
+# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to
+# external symbols imported via tag files in a separate window.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+EXT_LINKS_IN_WINDOW = NO
+
+# Use this tag to change the font size of LaTeX formulas included as images in
+# the HTML documentation. When you change the font size after a successful
+# doxygen run you need to manually remove any form_*.png images from the HTML
+# output directory to force them to be regenerated.
+# Minimum value: 8, maximum value: 50, default value: 10.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+FORMULA_FONTSIZE = 10
+
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images
+# generated for formulas are transparent PNGs. Transparent PNGs are not
+# supported properly for IE 6.0, but are supported on all modern browsers.
+#
+# Note that when changing this option you need to delete any form_*.png files in
+# the HTML output directory before the changes have effect.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+FORMULA_TRANSPARENT = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
+# http://www.mathjax.org) which uses client side Javascript for the rendering
+# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
+# installed or if you want to formulas look prettier in the HTML output. When
+# enabled you may also need to install MathJax separately and configure the path
+# to it using the MATHJAX_RELPATH option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+USE_MATHJAX = NO
+
+# When MathJax is enabled you can set the default output format to be used for
+# the MathJax output. See the MathJax site (see:
+# http://docs.mathjax.org/en/latest/output.html) for more details.
+# Possible values are: HTML-CSS (which is slower, but has the best
+# compatibility), NativeMML (i.e. MathML) and SVG.
+# The default value is: HTML-CSS.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_FORMAT = HTML-CSS
+
+# When MathJax is enabled you need to specify the location relative to the HTML
+# output directory using the MATHJAX_RELPATH option. The destination directory
+# should contain the MathJax.js script. For instance, if the mathjax directory
+# is located at the same level as the HTML output directory, then
+# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
+# Content Delivery Network so you can quickly see the result without installing
+# MathJax. However, it is strongly recommended to install a local copy of
+# MathJax from http://www.mathjax.org before deployment.
+# The default value is: http://cdn.mathjax.org/mathjax/latest.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_RELPATH = http://www.mathjax.org/mathjax
+
+# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
+# extension names that should be enabled during MathJax rendering. For example
+# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_EXTENSIONS =
+
+# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
+# of code that will be used on startup of the MathJax code. See the MathJax site
+# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
+# example see the documentation.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_CODEFILE =
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box for
+# the HTML output. The underlying search engine uses javascript and DHTML and
+# should work on any modern browser. Note that when using HTML help
+# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
+# there is already a search function so this one should typically be disabled.
+# For large projects the javascript based search engine can be slow, then
+# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
+# search using the keyboard; to jump to the search box use <access key> + S
+# (what the <access key> is depends on the OS and browser, but it is typically
+# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
+# key> to jump into the search results window, the results can be navigated
+# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
+# the search. The filter options can be selected when the cursor is inside the
+# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
+# to select a filter and <Enter> or <escape> to activate or cancel the filter
+# option.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+SEARCHENGINE = NO
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
+# implemented using a web server instead of a web client using Javascript. There
+# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
+# setting. When disabled, doxygen will generate a PHP script for searching and
+# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
+# and searching needs to be provided by external tools. See the section
+# "External Indexing and Searching" for details.
+# The default value is: NO.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SERVER_BASED_SEARCH = NO
+
+# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
+# script for searching. Instead the search results are written to an XML file
+# which needs to be processed by an external indexer. Doxygen will invoke an
+# external search engine pointed to by the SEARCHENGINE_URL option to obtain the
+# search results.
+#
+# Doxygen ships with an example indexer (doxyindexer) and search engine
+# (doxysearch.cgi) which are based on the open source search engine library
+# Xapian (see: http://xapian.org/).
+#
+# See the section "External Indexing and Searching" for details.
+# The default value is: NO.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTERNAL_SEARCH = NO
+
+# The SEARCHENGINE_URL should point to a search engine hosted by a web server
+# which will return the search results when EXTERNAL_SEARCH is enabled.
+#
+# Doxygen ships with an example indexer (doxyindexer) and search engine
+# (doxysearch.cgi) which are based on the open source search engine library
+# Xapian (see: http://xapian.org/). See the section "External Indexing and
+# Searching" for details.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SEARCHENGINE_URL =
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
+# search data is written to a file for indexing by an external tool. With the
+# SEARCHDATA_FILE tag the name of this file can be specified.
+# The default file is: searchdata.xml.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SEARCHDATA_FILE = searchdata.xml
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
+# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
+# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
+# projects and redirect the results back to the right project.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTERNAL_SEARCH_ID =
+
+# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
+# projects other than the one defined by this configuration file, but that are
+# all added to the same external search index. Each project needs to have a
+# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
+# to a relative location where the documentation can be found. The format is:
+# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTRA_SEARCH_MAPPINGS =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.
+# The default value is: YES.
+
+GENERATE_LATEX = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: latex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_OUTPUT = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked.
+#
+# Note that when enabling USE_PDFLATEX this option is only used for generating
+# bitmaps for formulas in the HTML output, but not in the Makefile that is
+# written to the output directory.
+# The default file is: latex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_CMD_NAME = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
+# index for LaTeX.
+# The default file is: makeindex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+MAKEINDEX_CMD_NAME = makeindex
+
+# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX
+# documents. This may be useful for small projects and may help to save some
+# trees in general.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+COMPACT_LATEX = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used by the
+# printer.
+# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
+# 14 inches) and executive (7.25 x 10.5 inches).
+# The default value is: a4.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+PAPER_TYPE = a4wide
+
+# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
+# that should be included in the LaTeX output. The package can be specified just
+# by its name or with the correct syntax as to be used with the LaTeX
+# \usepackage command. To get the times font for instance you can specify :
+# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times}
+# To use the option intlimits with the amsmath package you can specify:
+# EXTRA_PACKAGES=[intlimits]{amsmath}
+# If left blank no extra packages will be included.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+EXTRA_PACKAGES =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
+# generated LaTeX document. The header should contain everything until the first
+# chapter. If it is left blank doxygen will generate a standard header. See
+# section "Doxygen usage" for information on how to let doxygen write the
+# default header to a separate file.
+#
+# Note: Only use a user-defined header if you know what you are doing! The
+# following commands have a special meaning inside the header: $title,
+# $datetime, $date, $doxygenversion, $projectname, $projectnumber,
+# $projectbrief, $projectlogo. Doxygen will replace $title with the empty
+# string, for the replacement values of the other commands the user is referred
+# to HTML_HEADER.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_HEADER =
+
+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
+# generated LaTeX document. The footer should contain everything after the last
+# chapter. If it is left blank doxygen will generate a standard footer. See
+# LATEX_HEADER for more information on how to generate a default footer and what
+# special commands can be used inside the footer.
+#
+# Note: Only use a user-defined footer if you know what you are doing!
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_FOOTER =
+
+# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined
+# LaTeX style sheets that are included after the standard style sheets created
+# by doxygen. Using this option one can overrule certain style aspects. Doxygen
+# will copy the style sheet files to the output directory.
+# Note: The order of the extra style sheet files is of importance (e.g. the last
+# style sheet in the list overrules the setting of the previous ones in the
+# list).
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_EXTRA_STYLESHEET =
+
+# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the LATEX_OUTPUT output
+# directory. Note that the files will be copied as-is; there are no commands or
+# markers available.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_EXTRA_FILES =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
+# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
+# contain links (just like the HTML output) instead of page references. This
+# makes the output suitable for online browsing using a PDF viewer.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+PDF_HYPERLINKS = NO
+
+# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
+# the PDF file directly from the LaTeX files. Set this option to YES, to get a
+# higher quality PDF documentation.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+USE_PDFLATEX = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
+# command to the generated LaTeX files. This will instruct LaTeX to keep running
+# if errors occur, instead of asking the user for help. This option is also used
+# when generating formulas in HTML.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_BATCHMODE = NO
+
+# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
+# index chapters (such as File Index, Compound Index, etc.) in the output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_HIDE_INDICES = NO
+
+# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
+# code with syntax highlighting in the LaTeX output.
+#
+# Note that which sources are shown also depends on other settings such as
+# SOURCE_BROWSER.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_SOURCE_CODE = NO
+
+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
+# bibliography, e.g. plainnat, or ieeetr. See
+# http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
+# The default value is: plain.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_BIB_STYLE = plain
+
+#---------------------------------------------------------------------------
+# Configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The
+# RTF output is optimized for Word 97 and may not look too pretty with other RTF
+# readers/editors.
+# The default value is: NO.
+
+GENERATE_RTF = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: rtf.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_OUTPUT = glm.rtf
+
+# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF
+# documents. This may be useful for small projects and may help to save some
+# trees in general.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+COMPACT_RTF = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
+# contain hyperlink fields. The RTF file will contain links (just like the HTML
+# output) instead of page references. This makes the output suitable for online
+# browsing using Word or some other Word compatible readers that support those
+# fields.
+#
+# Note: WordPad (write) and others do not support links.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_HYPERLINKS = YES
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's config
+# file, i.e. a series of assignments. You only have to provide replacements,
+# missing definitions are set to their default value.
+#
+# See also section "Doxygen usage" for information on how to generate the
+# default style sheet that doxygen normally uses.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_STYLESHEET_FILE =
+
+# Set optional variables used in the generation of an RTF document. Syntax is
+# similar to doxygen's config file. A template extensions file can be generated
+# using doxygen -e rtf extensionFile.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_EXTENSIONS_FILE =
+
+# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code
+# with syntax highlighting in the RTF output.
+#
+# Note that which sources are shown also depends on other settings such as
+# SOURCE_BROWSER.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_SOURCE_CODE = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for
+# classes and files.
+# The default value is: NO.
+
+GENERATE_MAN = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it. A directory man3 will be created inside the directory specified by
+# MAN_OUTPUT.
+# The default directory is: man.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_OUTPUT = man
+
+# The MAN_EXTENSION tag determines the extension that is added to the generated
+# man pages. In case the manual section does not start with a number, the number
+# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
+# optional.
+# The default value is: .3.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_EXTENSION = .3
+
+# The MAN_SUBDIR tag determines the name of the directory created within
+# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
+# MAN_EXTENSION with the initial . removed.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_SUBDIR =
+
+# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
+# will generate one additional man file for each entity documented in the real
+# man page(s). These additional files only source the real man page, but without
+# them the man command would be unable to find the correct page.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_LINKS = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that
+# captures the structure of the code including all documentation.
+# The default value is: NO.
+
+GENERATE_XML = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: xml.
+# This tag requires that the tag GENERATE_XML is set to YES.
+
+XML_OUTPUT = xml
+
+# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program
+# listings (including syntax highlighting and cross-referencing information) to
+# the XML output. Note that enabling this will significantly increase the size
+# of the XML output.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_XML is set to YES.
+
+XML_PROGRAMLISTING = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to the DOCBOOK output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files
+# that can be used to generate PDF.
+# The default value is: NO.
+
+GENERATE_DOCBOOK = NO
+
+# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
+# front of it.
+# The default directory is: docbook.
+# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
+
+DOCBOOK_OUTPUT = docbook
+
+# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the
+# program listings (including syntax highlighting and cross-referencing
+# information) to the DOCBOOK output. Note that enabling this will significantly
+# increase the size of the DOCBOOK output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
+
+DOCBOOK_PROGRAMLISTING = NO
+
+#---------------------------------------------------------------------------
+# Configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an
+# AutoGen Definitions (see http://autogen.sf.net) file that captures the
+# structure of the code including all documentation. Note that this feature is
+# still experimental and incomplete at the moment.
+# The default value is: NO.
+
+GENERATE_AUTOGEN_DEF = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module
+# file that captures the structure of the code including all documentation.
+#
+# Note that this feature is still experimental and incomplete at the moment.
+# The default value is: NO.
+
+GENERATE_PERLMOD = NO
+
+# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary
+# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
+# output from the Perl module output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+PERLMOD_LATEX = NO
+
+# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely
+# formatted so it can be parsed by a human reader. This is useful if you want to
+# understand what is going on. On the other hand, if this tag is set to NO, the
+# size of the Perl module output will be much smaller and Perl will parse it
+# just the same.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+PERLMOD_PRETTY = YES
+
+# The names of the make variables in the generated doxyrules.make file are
+# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
+# so different doxyrules.make files included by the same Makefile don't
+# overwrite each other's variables.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all
+# C-preprocessor directives found in the sources and include files.
+# The default value is: YES.
+
+ENABLE_PREPROCESSING = YES
+
+# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names
+# in the source code. If set to NO, only conditional compilation will be
+# performed. Macro expansion can be done in a controlled way by setting
+# EXPAND_ONLY_PREDEF to YES.
+# The default value is: NO.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+MACRO_EXPANSION = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
+# the macro expansion is limited to the macros specified with the PREDEFINED and
+# EXPAND_AS_DEFINED tags.
+# The default value is: NO.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+EXPAND_ONLY_PREDEF = NO
+
+# If the SEARCH_INCLUDES tag is set to YES, the include files in the
+# INCLUDE_PATH will be searched if a #include is found.
+# The default value is: YES.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+SEARCH_INCLUDES = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by the
+# preprocessor.
+# This tag requires that the tag SEARCH_INCLUDES is set to YES.
+
+INCLUDE_PATH =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will be
+# used.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+INCLUDE_FILE_PATTERNS =
+
+# The PREDEFINED tag can be used to specify one or more macro names that are
+# defined before the preprocessor is started (similar to the -D option of e.g.
+# gcc). The argument of the tag is a list of macros of the form: name or
+# name=definition (no spaces). If the definition and the "=" are omitted, "=1"
+# is assumed. To prevent a macro definition from being undefined via #undef or
+# recursively expanded use the := operator instead of the = operator.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+PREDEFINED =
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
+# tag can be used to specify a list of macro names that should be expanded. The
+# macro definition that is found in the sources will be used. Use the PREDEFINED
+# tag if you want to use a different macro definition that overrules the
+# definition found in the source code.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+EXPAND_AS_DEFINED =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
+# remove all references to function-like macros that are alone on a line, have
+# an all uppercase name, and do not end with a semicolon. Such function macros
+# are typically used for boiler-plate code, and will confuse the parser if not
+# removed.
+# The default value is: YES.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+SKIP_FUNCTION_MACROS = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES tag can be used to specify one or more tag files. For each tag
+# file the location of the external documentation should be added. The format of
+# a tag file without this location is as follows:
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where loc1 and loc2 can be relative or absolute paths or URLs. See the
+# section "Linking to external documentation" for more information about the use
+# of tag files.
+# Note: Each tag file must have a unique name (where the name does NOT include
+# the path). If a tag file is not located in the directory in which doxygen is
+# run, you must also specify the path to the tagfile here.
+
+TAGFILES =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create a
+# tag file that is based on the input files it reads. See section "Linking to
+# external documentation" for more information about the usage of tag files.
+
+GENERATE_TAGFILE =
+
+# If the ALLEXTERNALS tag is set to YES, all external class will be listed in
+# the class index. If set to NO, only the inherited external classes will be
+# listed.
+# The default value is: NO.
+
+ALLEXTERNALS = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will be
+# listed.
+# The default value is: YES.
+
+EXTERNAL_GROUPS = YES
+
+# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in
+# the related pages index. If set to NO, only the current project's pages will
+# be listed.
+# The default value is: YES.
+
+EXTERNAL_PAGES = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of 'which perl').
+# The default file (with absolute path) is: /usr/bin/perl.
+
+PERL_PATH = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram
+# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
+# NO turns the diagrams off. Note that this option also works with HAVE_DOT
+# disabled, but it is recommended to install and use dot, since it yields more
+# powerful graphs.
+# The default value is: YES.
+
+CLASS_DIAGRAMS = YES
+
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see:
+# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# default search path.
+
+MSCGEN_PATH =
+
+# You can include diagrams made with dia in doxygen documentation. Doxygen will
+# then run dia to produce the diagram and insert it in the documentation. The
+# DIA_PATH tag allows you to specify the directory where the dia binary resides.
+# If left empty dia is assumed to be found in the default search path.
+
+DIA_PATH =
+
+# If set to YES the inheritance and collaboration graphs will hide inheritance
+# and usage relations if the target is undocumented or is not a class.
+# The default value is: YES.
+
+HIDE_UNDOC_RELATIONS = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz (see:
+# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
+# Bell Labs. The other options in this section have no effect if this option is
+# set to NO
+# The default value is: NO.
+
+HAVE_DOT = NO
+
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
+# to run in parallel. When set to 0 doxygen will base this on the number of
+# processors available in the system. You can set it explicitly to a value
+# larger than 0 to get control over the balance between CPU load and processing
+# speed.
+# Minimum value: 0, maximum value: 32, default value: 0.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_NUM_THREADS = 0
+
+# When you want a differently looking font in the dot files that doxygen
+# generates you can specify the font name using DOT_FONTNAME. You need to make
+# sure dot is able to find the font, which can be done by putting it in a
+# standard location or by setting the DOTFONTPATH environment variable or by
+# setting DOT_FONTPATH to the directory containing the font.
+# The default value is: Helvetica.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTNAME = Helvetica
+
+# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
+# dot graphs.
+# Minimum value: 4, maximum value: 24, default value: 10.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTSIZE = 10
+
+# By default doxygen will tell dot to use the default font as specified with
+# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
+# the path where dot can find it using this tag.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTPATH =
+
+# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
+# each documented class showing the direct and indirect inheritance relations.
+# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CLASS_GRAPH = YES
+
+# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
+# graph for each documented class showing the direct and indirect implementation
+# dependencies (inheritance, containment, and class references variables) of the
+# class with other documented classes.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+COLLABORATION_GRAPH = YES
+
+# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
+# groups, showing the direct groups dependencies.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GROUP_GRAPHS = YES
+
+# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+UML_LOOK = NO
+
+# If the UML_LOOK tag is enabled, the fields and methods are shown inside the
+# class node. If there are many fields or methods and many nodes the graph may
+# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
+# number of items for each type to make the size more manageable. Set this to 0
+# for no limit. Note that the threshold may be exceeded by 50% before the limit
+# is enforced. So when you set the threshold to 10, up to 15 fields may appear,
+# but if the number exceeds 15, the total amount of fields shown is limited to
+# 10.
+# Minimum value: 0, maximum value: 100, default value: 10.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+UML_LIMIT_NUM_FIELDS = 10
+
+# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
+# collaboration graphs will show the relations between templates and their
+# instances.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+TEMPLATE_RELATIONS = NO
+
+# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
+# YES then doxygen will generate a graph for each documented file showing the
+# direct and indirect include dependencies of the file with other documented
+# files.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INCLUDE_GRAPH = YES
+
+# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
+# set to YES then doxygen will generate a graph for each documented file showing
+# the direct and indirect include dependencies of the file with other documented
+# files.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INCLUDED_BY_GRAPH = YES
+
+# If the CALL_GRAPH tag is set to YES then doxygen will generate a call
+# dependency graph for every global function or class method.
+#
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable call graphs for selected
+# functions only using the \callgraph command. Disabling a call graph can be
+# accomplished by means of the command \hidecallgraph.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CALL_GRAPH = YES
+
+# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
+# dependency graph for every global function or class method.
+#
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable caller graphs for selected
+# functions only using the \callergraph command. Disabling a caller graph can be
+# accomplished by means of the command \hidecallergraph.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CALLER_GRAPH = YES
+
+# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
+# hierarchy of all classes instead of a textual one.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GRAPHICAL_HIERARCHY = YES
+
+# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
+# dependencies a directory has on other directories in a graphical way. The
+# dependency relations are determined by the #include relations between the
+# files in the directories.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DIRECTORY_GRAPH = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. For an explanation of the image formats see the section
+# output formats in the documentation of the dot tool (Graphviz (see:
+# http://www.graphviz.org/)).
+# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
+# to make the SVG files visible in IE 9+ (other browsers do not have this
+# requirement).
+# Possible values are: png, jpg, gif, svg, png:gd, png:gd:gd, png:cairo,
+# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and
+# png:gdiplus:gdiplus.
+# The default value is: png.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_IMAGE_FORMAT = png
+
+# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
+# enable generation of interactive SVG images that allow zooming and panning.
+#
+# Note that this requires a modern browser other than Internet Explorer. Tested
+# and working are Firefox, Chrome, Safari, and Opera.
+# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
+# the SVG files visible. Older versions of IE do not have SVG support.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INTERACTIVE_SVG = NO
+
+# The DOT_PATH tag can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_PATH =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the \dotfile
+# command).
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOTFILE_DIRS =
+
+# The MSCFILE_DIRS tag can be used to specify one or more directories that
+# contain msc files that are included in the documentation (see the \mscfile
+# command).
+
+MSCFILE_DIRS =
+
+# The DIAFILE_DIRS tag can be used to specify one or more directories that
+# contain dia files that are included in the documentation (see the \diafile
+# command).
+
+DIAFILE_DIRS =
+
+# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
+# path where java can find the plantuml.jar file. If left blank, it is assumed
+# PlantUML is not used or called during a preprocessing step. Doxygen will
+# generate a warning when it encounters a \startuml command in this case and
+# will not generate output for the diagram.
+
+PLANTUML_JAR_PATH =
+
+# When using plantuml, the specified paths are searched for files specified by
+# the !include statement in a plantuml block.
+
+PLANTUML_INCLUDE_PATH =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
+# that will be shown in the graph. If the number of nodes in a graph becomes
+# larger than this value, doxygen will truncate the graph, which is visualized
+# by representing a node as a red box. Note that doxygen if the number of direct
+# children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
+# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+# Minimum value: 0, maximum value: 10000, default value: 50.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_GRAPH_MAX_NODES = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
+# generated by dot. A depth value of 3 means that only nodes reachable from the
+# root by following a path via at most 3 edges will be shown. Nodes that lay
+# further from the root node will be omitted. Note that setting this option to 1
+# or 2 may greatly reduce the computation time needed for large code bases. Also
+# note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+# Minimum value: 0, maximum value: 1000, default value: 0.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+MAX_DOT_GRAPH_DEPTH = 1000
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not seem
+# to support this out of the box.
+#
+# Warning: Depending on the platform used, enabling this option may lead to
+# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
+# read).
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_TRANSPARENT = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10) support
+# this, this feature is disabled by default.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_MULTI_TARGETS = NO
+
+# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
+# explaining the meaning of the various boxes and arrows in the dot generated
+# graphs.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GENERATE_LEGEND = YES
+
+# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot
+# files that are used to generate the various graphs.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_CLEANUP = YES
diff --git a/src/third_party/glm/doc/pages.doxy b/src/third_party/glm/doc/pages.doxy
new file mode 100644
index 0000000..579b56f
--- /dev/null
+++ b/src/third_party/glm/doc/pages.doxy
@@ -0,0 +1,32 @@
+/*!
+ @mainpage OpenGL Mathematics
+
+ <a href="http://glm.g-truc.net">OpenGL Mathematics (GLM)</a> is a header only C++ mathematics library for graphics software based on the <a href="https://www.opengl.org/documentation/glsl/">OpenGL Shading Language (GLSL)</a> 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 to GLSL features. An extension system, based on the GLSL extension conventions, provides extended capabilities: matrix transformations, quaternions, half-based types, random numbers, noise, 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 development context that requires a simple and convenient mathematics library.
+
+ GLM is written in C++98 but can take advantage of C++11 when supported by the compiler. It is a platform independent library with no dependence and it officially supports the following compilers:
+ - <a href="https://developer.apple.com/Library/mac/documentation/CompilerTools/Conceptual/LLVMCompilerOverview/index.html">Apple Clang</a> 4.0 and higher
+ - <a href="https://gcc.gnu.org/">GCC</a> 4.2 and higher
+ - <a href="http://llvm.org/">LLVM</a> 3.0 and higher
+ - <a href="https://software.intel.com/en-us/intel-compilers">Intel C++ Composer</a> XE 2013 and higher
+ - <a href="http://www.visualstudio.com/">Visual Studio</a> 2010 and higher
+ - <a href="https://developer.nvidia.com/about-cuda">CUDA</a> 4.0 and higher (experimental)
+ - Any conform C++98 compiler
+
+ @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; All publicly available types and functions can be accessed as a direct children
+ of the glm namespace.
+
+ The source code is licensed under the <a href="http://glm.g-truc.net/copying.txt">Happy Bunny License (Modified MIT)</a> and <a href="http://glm.g-truc.net/copying.txt">MIT license</a>.
+
+ These pages are the API reference only. For more information about how to use GLM, please have a look at <a href="http://glm.g-truc.net/glm.pdf">the manual</a>.
+
+ Thanks for contributing to the project by <a href="https://github.com/g-truc/glm/issues">submitting tickets for bug reports and feature requests</a>.
+ Any feedback is welcome at glm@g-truc.net.
+**/
diff --git a/src/third_party/glm/doc/theme/doxygen.css b/src/third_party/glm/doc/theme/doxygen.css
new file mode 100644
index 0000000..f0f4a4f
--- /dev/null
+++ b/src/third_party/glm/doc/theme/doxygen.css
@@ -0,0 +1,865 @@
+/* The standard CSS for doxygen */
+
+body, table, div, p, dl
+{
+ font-family: Lucida Grande, Calibri, Verdana;
+ font-size: 14px;
+}
+
+body
+{
+ margin:0px;
+ padding:0px;
+ background-color:#bf6000;
+ background-repeat:no-repeat;
+ background-position:center center;
+ background-attachment:fixed;
+/*
+ background-image: -moz-linear-gradient(center top, #FFFFFF 0%, #FFF8F0 5%, #FFEEDD 95%, #FFDDBB);
+ background-image: -webkit-gradient(linear,center top,center bottom,from(#FFFFFF), color-stop(0.05,#FFF8F0), color-stop(0.05,#FFF8F0), color-stop(0.95,#FFEEDD), to(#FFDDBB));
+*/
+ min-height:1200px;
+ overflow:auto;
+}
+
+p
+{
+ background-color:#FFFFFF;
+}
+
+/* @group Heading Levels */
+
+h1
+{
+ color:#FF8000;
+ font-family: Lucida Grande, Cambria, Georgia;
+ font-size: 24px;
+ font-weight: bold;
+}
+
+h2
+{
+ color:#FF8000;
+ font-family: Lucida Grande, Cambria, Georgia;
+ font-size: 18px;
+ font-weight: bold;
+}
+
+h3 {
+ font-family: Lucida Grande, Cambria, Georgia;
+ font-size: 14px;
+ font-weight: bold;
+}
+
+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: #FFFFFF;
+ margin:0px;
+ margin-left:auto;
+ margin-right:auto;
+ padding-top:8px;
+ padding-bottom:8px;
+ padding-left:32px;
+ padding-right:32px;
+ width:936px;
+}
+
+div.textblock{
+ background-color: #FFFFFF;
+ padding-top: 4px;
+ padding-bottom: 4px;
+ padding-left: 32px;
+ padding-right: 32px;
+}
+
+a:hover {
+ text-decoration: underline;
+}
+
+a.qindex {
+ font-weight: bold;
+}
+
+a.qindexHL {
+ font-weight: bold;
+ background-color: #9CAFD4;
+ color: #ffffff;
+ border: 0px 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, consolas, "courier new";
+ font-size: 12px;
+}
+
+pre.fragment {
+ border: 0px solid #FF8000;
+ background-color: #FFF8F0;
+ padding: 4px 6px;
+ margin: 4px 8px 4px 2px;
+ overflow: auto;
+ word-wrap: break-word;
+ 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;
+}
+
+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 {
+ margin-left:auto;
+ margin-right:auto;
+ width:1000px;
+
+ text-align: right;
+ padding-right: 12px;
+ color: #FFEEDD;
+}
+
+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: 10px;
+}
+
+.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;
+ margin-left:auto;
+ margin-right:auto;
+ width:1000px;
+}
+
+/* @group Member Descriptions */
+
+table.memberdecls {
+ border-spacing: 0px;
+ padding: 0px;
+}
+
+.mdescLeft, .mdescRight,
+.memItemLeft, .memItemRight,
+.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
+ font-family: monospace, consolas, "courier new";
+ font-size: 12px;
+ 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 {
+ color: #000000;
+ font-weight: normal;
+ margin-left: 9px;
+}
+
+.memnav {
+ background-color: #000000;
+ border: 0px solid #A3B4D7;
+ text-align: center;
+ margin: 2px;
+ margin-right: 15px;
+ padding: 2px;
+}
+
+.memitem {
+ padding: 8px;
+ margin-bottom: 10px;
+}
+
+.memname {
+ font-family: monospace, consolas, "courier new";
+ font-weight: bold;
+ font-size: 12px;
+ white-space: nowrap;
+ margin-left: 6px;
+}
+
+.memproto {
+ border-top: 0px solid #FF8000;
+ border-left: 0px solid #FF8000;
+ border-right: 0px solid #FF8000;
+ padding: 6px 0px 6px 0px;
+ color: #000000;
+ 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-repeat:repeat-x;
+ background-color: #FFFFFF;
+ background-image: -moz-linear-gradient(center top, #FFF8F0 0%, #FFFFFF 60%, #FFFFFF 95%, #FFFFFF);
+ background-image: -webkit-gradient(linear,center top,center bottom,from(#FFF8F0), color-stop(0.2,#FFFFFF), color-stop(0.60,#FFFFFF), color-stop(0.95,#FFFFFF), to(#FFFFFF));
+}
+
+.memdoc {
+ /*font-family: Lucida Grande, Calibri, Verdana;*/
+ border-bottom: 0px solid #FF8000;
+ border-left: 0px solid #FF8000;
+ border-right: 0px 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%, #FFF8F0 90%, #FFEEDD);
+ /* 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.90,#FFF8F0), to(#FFEEDD));
+}
+
+.paramkey {
+ text-align: right;
+}
+
+.paramtype {
+ white-space: nowrap;
+}
+
+.paramname {
+ color: #FF8000;
+ white-space: nowrap;
+}
+.paramname em {
+ font-style: normal;
+}
+
+.params, .retval, .exception, .tparams {
+ border-spacing: 6px 2px;
+}
+
+.params .paramname, .retval .paramname {
+ color: #FF8000;
+ font-family: monospace, consolas, "courier new";
+ font-weight: bold;
+ font-size: 12px;
+ vertical-align: top;
+}
+
+.params .paramtype {
+ font-style: italic;
+ vertical-align: top;
+}
+
+.params .paramdir {
+ vertical-align: top;
+}
+
+
+
+
+/* @end */
+
+/* @group Directory (tree) */
+
+/* for the tree view */
+
+.ftvtree {
+ /*font-family: Lucida Grande, Calibri, Verdana;*/
+ margin: 0px;
+}
+
+/* these are for tree view when used as main index */
+
+.directory {
+ font-weight: bold;
+ margin: 5px;
+}
+
+.directory h3 {
+ margin: 0px;
+ margin-top: 1em;
+}
+
+/*
+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;
+}
+
+.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: 0px solid #000000;
+ padding: 3px 7px 2px;
+}
+
+table.doxtable th {
+ background-color: #000000;
+ 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;
+}
+
+.navpath ul
+{
+ background-color: #FFEEDD;
+ height:30px;
+ line-height:30px;
+ 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;
+}
+
+.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:#FFEEDD;
+}
+
+div.summary
+{
+ float: right;
+ font-size: 12px;
+ padding-right: 5px;
+ width: 160px;
+ text-align: right;
+}
+
+div.summary a
+{
+ white-space: nowrap;
+}
+
+div.ingroups
+{
+ padding-left: 5px;
+ width: 50%;
+ text-align: left;
+}
+
+div.ingroups a
+{
+ white-space: nowrap;
+}
+
+div.header
+{
+ background-color:#FFEEDD;
+ background-image: -moz-linear-gradient(center top, #FFEEDD 0%, #FFEEDD 5%, #FFEEDD 80%, #FFFFFF);
+ background-image: -webkit-gradient(linear,center top,center bottom,from(#FFEEDD), color-stop(0.05,#FFEEDD), color-stop(0.05,#FFEEDD), color-stop(0.80,#FFEEDD), to(#FFFFFF));
+
+ padding:0px;
+ margin:0px;
+ margin-left:auto;
+ margin-right:auto;
+ width:1000px;
+ border-bottom: 0px solid #FFC080;
+}
+
+div.headertitle
+{
+ margin: 0px;
+ padding: 5px;
+ padding-bottom:10px;
+ padding-top:10px;
+}
+
+div.title
+{
+ font-family: Lucida Grande, Cambria, Georgia;
+ font-size: 24px;
+ color: #FF7F00;
+}
+
+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: #FF7F00;
+ border-left:4px solid;
+ padding: 0 0 0 6px;
+}
+
+dl.note
+{
+ border-color: #FFDDBB;
+}
+
+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-family: Lucida Grande, Cambria, Georgia;*/
+ font-size: 24px;
+ margin: 0px;
+ padding: 0px;
+}
+
+#projectbrief
+{
+ /*font-family: Lucida Grande, Cambria, Georgia;*/
+ font-size: 18px;
+ margin: 0px;
+ padding: 0px;
+}
+
+#projectnumber
+{
+ /*font-family: Lucida Grande, Cambria, Georgia;*/
+ font-size: 14px;
+ margin: 0px;
+ padding: 0px;
+}
+
+#titlearea
+{
+ padding: 0px;
+ margin: 0px;
+ width: 100%;
+ border-bottom: 0px solid #FF8000;
+ background-color:#FFFFFF;
+}
+
+#top
+{
+ margin-left:auto;
+ margin-right:auto;
+ width:1000px;
+}
diff --git a/src/third_party/glm/doc/theme/tabs.css b/src/third_party/glm/doc/theme/tabs.css
new file mode 100644
index 0000000..636277d
--- /dev/null
+++ b/src/third_party/glm/doc/theme/tabs.css
@@ -0,0 +1,79 @@
+.tabs, .tabs2, .tabs3 {
+ background-image: -moz-linear-gradient(center top, #FFFFFF 0%, #FFFFFF 5%, #FFEEDD 95%, #FFEEDD);
+ background-image: -webkit-gradient(linear,center top,center bottom,from(#FFFFFF), color-stop(0.05,#FFFFFF), color-stop(0.05,#FFFFFF), color-stop(0.95,#FFEEDD), to(#FFEEDD));
+
+ /*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: -moz-linear-gradient(center top, #FFFFFF 0%, #FFFFFF 5%, #FFEEDD 95%, #FFEEDD);
+ background-image: -webkit-gradient(linear,center top,center bottom,from(#FFFFFF), color-stop(0.05,#FFFFFF), color-stop(0.05,#FFFFFF), color-stop(0.95,#FFEEDD), to(#FFEEDD));
+
+ /*background-image: url('tab_b.png');*/
+ line-height: 36px;
+ list-style: none;
+}
+
+.tablist a {
+ display: block;
+ padding: 0 20px;
+ font-weight: bold;
+
+ background-image: -moz-linear-gradient(center top, #FFFFFF 0%, #FFFFFF 5%, #FFEEDD 95%, #FFEEDD);
+ background-image: -webkit-gradient(linear,center top,center bottom,from(#FFFFFF), color-stop(0.05,#FFFFFF), color-stop(0.05,#FFFFFF), color-stop(0.95,#FFEEDD), to(#FFEEDD));
+
+ /*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: -moz-linear-gradient(center top, #FFFFFF 0%, #FFFFFF 5%, #FFEEDD 95%, #FFEEDD);
+ background-image: -webkit-gradient(linear,center top,center bottom,from(#FFFFFF), color-stop(0.05,#FFFFFF), color-stop(0.05,#FFFFFF), color-stop(0.95,#FFEEDD), to(#FFEEDD));
+
+ /*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: -moz-linear-gradient(center top, #FFFFFF 0%, #FFFFFF 5%, #FFEEDD 95%, #FFEEDD);
+ background-image: -webkit-gradient(linear,center top,center bottom,from(#FFFFFF), color-stop(0.05,#FFFFFF), color-stop(0.05,#FFFFFF), color-stop(0.95,#FFEEDD), to(#FFEEDD));
+
+ /*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);*/
+}
diff --git a/src/third_party/glm/glm/CMakeLists.txt b/src/third_party/glm/glm/CMakeLists.txt
new file mode 100644
index 0000000..d60a887
--- /dev/null
+++ b/src/third_party/glm/glm/CMakeLists.txt
@@ -0,0 +1,67 @@
+file(GLOB ROOT_SOURCE *.cpp)
+file(GLOB ROOT_INLINE *.inl)
+file(GLOB ROOT_HEADER *.hpp)
+file(GLOB ROOT_TEXT ../*.txt)
+file(GLOB ROOT_MD ../*.md)
+file(GLOB ROOT_NAT ../util/glm.natvis)
+
+file(GLOB_RECURSE CORE_SOURCE ./detail/*.cpp)
+file(GLOB_RECURSE CORE_INLINE ./detail/*.inl)
+file(GLOB_RECURSE CORE_HEADER ./detail/*.hpp)
+
+file(GLOB_RECURSE GTC_SOURCE ./gtc/*.cpp)
+file(GLOB_RECURSE GTC_INLINE ./gtc/*.inl)
+file(GLOB_RECURSE GTC_HEADER ./gtc/*.hpp)
+
+file(GLOB_RECURSE GTX_SOURCE ./gtx/*.cpp)
+file(GLOB_RECURSE GTX_INLINE ./gtx/*.inl)
+file(GLOB_RECURSE GTX_HEADER ./gtx/*.hpp)
+
+file(GLOB_RECURSE SIMD_SOURCE ./simd/*.cpp)
+file(GLOB_RECURSE SIMD_INLINE ./simd/*.inl)
+file(GLOB_RECURSE SIMD_HEADER ./simd/*.h)
+
+source_group("Text Files" FILES ${ROOT_TEXT} ${ROOT_MD})
+source_group("Core Files" FILES ${CORE_SOURCE})
+source_group("Core Files" FILES ${CORE_INLINE})
+source_group("Core Files" FILES ${CORE_HEADER})
+source_group("GTC Files" FILES ${GTC_SOURCE})
+source_group("GTC Files" FILES ${GTC_INLINE})
+source_group("GTC Files" FILES ${GTC_HEADER})
+source_group("GTX Files" FILES ${GTX_SOURCE})
+source_group("GTX Files" FILES ${GTX_INLINE})
+source_group("GTX Files" FILES ${GTX_HEADER})
+source_group("SIMD Files" FILES ${SIMD_SOURCE})
+source_group("SIMD Files" FILES ${SIMD_INLINE})
+source_group("SIMD Files" FILES ${SIMD_HEADER})
+
+include_directories(${CMAKE_CURRENT_SOURCE_DIR}/..)
+
+if(GLM_STATIC_LIBRARY_ENABLE OR GLM_DYNAMIC_LIBRARY_ENABLE)
+ if(GLM_STATIC_LIBRARY_ENABLE)
+ add_library(glm_static STATIC ${ROOT_TEXT} ${ROOT_MD} ${ROOT_NAT}
+ ${ROOT_SOURCE} ${ROOT_INLINE} ${ROOT_HEADER}
+ ${CORE_SOURCE} ${CORE_INLINE} ${CORE_HEADER}
+ ${GTC_SOURCE} ${GTC_INLINE} ${GTC_HEADER}
+ ${GTX_SOURCE} ${GTX_INLINE} ${GTX_HEADER}
+ ${SIMD_SOURCE} ${SIMD_INLINE} ${SIMD_HEADER})
+ endif(GLM_STATIC_LIBRARY_ENABLE)
+
+ if(GLM_DYNAMIC_LIBRARY_ENABLE)
+ add_library(glm_shared SHARED ${ROOT_TEXT} ${ROOT_MD} ${ROOT_NAT}
+ ${ROOT_SOURCE} ${ROOT_INLINE} ${ROOT_HEADER}
+ ${CORE_SOURCE} ${CORE_INLINE} ${CORE_HEADER}
+ ${GTC_SOURCE} ${GTC_INLINE} ${GTC_HEADER}
+ ${GTX_SOURCE} ${GTX_INLINE} ${GTX_HEADER}
+ ${SIMD_SOURCE} ${SIMD_INLINE} ${SIMD_HEADER})
+ endif(GLM_DYNAMIC_LIBRARY_ENABLE)
+
+else(GLM_STATIC_LIBRARY_ENABLE OR GLM_DYNAMIC_LIBRARY_ENABLE)
+ add_executable(glm_dummy ${ROOT_TEXT} ${ROOT_MD} ${ROOT_NAT}
+ ${ROOT_SOURCE} ${ROOT_INLINE} ${ROOT_HEADER}
+ ${CORE_SOURCE} ${CORE_INLINE} ${CORE_HEADER}
+ ${GTC_SOURCE} ${GTC_INLINE} ${GTC_HEADER}
+ ${GTX_SOURCE} ${GTX_INLINE} ${GTX_HEADER}
+ ${SIMD_SOURCE} ${SIMD_INLINE} ${SIMD_HEADER})
+
+endif(GLM_STATIC_LIBRARY_ENABLE OR GLM_DYNAMIC_LIBRARY_ENABLE)
diff --git a/src/third_party/glm/glm/common.hpp b/src/third_party/glm/glm/common.hpp
new file mode 100644
index 0000000..f57e800
--- /dev/null
+++ b/src/third_party/glm/glm/common.hpp
@@ -0,0 +1,6 @@
+/// @ref core
+/// @file glm/common.hpp
+
+#pragma once
+
+#include "detail/func_common.hpp"
diff --git a/src/third_party/glm/glm/detail/_features.hpp b/src/third_party/glm/glm/detail/_features.hpp
new file mode 100644
index 0000000..97dd633
--- /dev/null
+++ b/src/third_party/glm/glm/detail/_features.hpp
@@ -0,0 +1,399 @@
+/// @ref core
+/// @file glm/detail/_features.hpp
+
+#pragma once
+
+// #define GLM_CXX98_EXCEPTIONS
+// #define GLM_CXX98_RTTI
+
+// #define GLM_CXX11_RVALUE_REFERENCES
+// Rvalue references - GCC 4.3
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2118.html
+
+// GLM_CXX11_TRAILING_RETURN
+// Rvalue references for *this - GCC not supported
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2439.htm
+
+// GLM_CXX11_NONSTATIC_MEMBER_INIT
+// Initialization of class objects by rvalues - GCC any
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1610.html
+
+// GLM_CXX11_NONSTATIC_MEMBER_INIT
+// Non-static data member initializers - GCC 4.7
+// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2008/n2756.htm
+
+// #define GLM_CXX11_VARIADIC_TEMPLATE
+// Variadic templates - GCC 4.3
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2242.pdf
+
+//
+// Extending variadic template template parameters - GCC 4.4
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2555.pdf
+
+// #define GLM_CXX11_GENERALIZED_INITIALIZERS
+// Initializer lists - GCC 4.4
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm
+
+// #define GLM_CXX11_STATIC_ASSERT
+// Static assertions - GCC 4.3
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1720.html
+
+// #define GLM_CXX11_AUTO_TYPE
+// auto-typed variables - GCC 4.4
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1984.pdf
+
+// #define GLM_CXX11_AUTO_TYPE
+// Multi-declarator auto - GCC 4.4
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1737.pdf
+
+// #define GLM_CXX11_AUTO_TYPE
+// Removal of auto as a storage-class specifier - GCC 4.4
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2546.htm
+
+// #define GLM_CXX11_AUTO_TYPE
+// New function declarator syntax - GCC 4.4
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2541.htm
+
+// #define GLM_CXX11_LAMBDAS
+// New wording for C++0x lambdas - GCC 4.5
+// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2927.pdf
+
+// #define GLM_CXX11_DECLTYPE
+// Declared type of an expression - GCC 4.3
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2343.pdf
+
+//
+// Right angle brackets - GCC 4.3
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1757.html
+
+//
+// Default template arguments for function templates DR226 GCC 4.3
+// http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#226
+
+//
+// Solving the SFINAE problem for expressions DR339 GCC 4.4
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2634.html
+
+// #define GLM_CXX11_ALIAS_TEMPLATE
+// Template aliases N2258 GCC 4.7
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf
+
+//
+// Extern templates N1987 Yes
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1987.htm
+
+// #define GLM_CXX11_NULLPTR
+// Null pointer constant N2431 GCC 4.6
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2431.pdf
+
+// #define GLM_CXX11_STRONG_ENUMS
+// Strongly-typed enums N2347 GCC 4.4
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf
+
+//
+// Forward declarations for enums N2764 GCC 4.6
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2764.pdf
+
+//
+// Generalized attributes N2761 GCC 4.8
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2761.pdf
+
+//
+// Generalized constant expressions N2235 GCC 4.6
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235.pdf
+
+//
+// Alignment support N2341 GCC 4.8
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf
+
+// #define GLM_CXX11_DELEGATING_CONSTRUCTORS
+// Delegating constructors N1986 GCC 4.7
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1986.pdf
+
+//
+// Inheriting constructors N2540 GCC 4.8
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2540.htm
+
+// #define GLM_CXX11_EXPLICIT_CONVERSIONS
+// Explicit conversion operators N2437 GCC 4.5
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf
+
+//
+// New character types N2249 GCC 4.4
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2249.html
+
+//
+// Unicode string literals N2442 GCC 4.5
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm
+
+//
+// Raw string literals N2442 GCC 4.5
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm
+
+//
+// Universal character name literals N2170 GCC 4.5
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2170.html
+
+// #define GLM_CXX11_USER_LITERALS
+// User-defined literals N2765 GCC 4.7
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2765.pdf
+
+//
+// Standard Layout Types N2342 GCC 4.5
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2342.htm
+
+// #define GLM_CXX11_DEFAULTED_FUNCTIONS
+// #define GLM_CXX11_DELETED_FUNCTIONS
+// Defaulted and deleted functions N2346 GCC 4.4
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2346.htm
+
+//
+// Extended friend declarations N1791 GCC 4.7
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1791.pdf
+
+//
+// Extending sizeof N2253 GCC 4.4
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2253.html
+
+// #define GLM_CXX11_INLINE_NAMESPACES
+// Inline namespaces N2535 GCC 4.4
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2535.htm
+
+// #define GLM_CXX11_UNRESTRICTED_UNIONS
+// Unrestricted unions N2544 GCC 4.6
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf
+
+// #define GLM_CXX11_LOCAL_TYPE_TEMPLATE_ARGS
+// Local and unnamed types as template arguments N2657 GCC 4.5
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2657.htm
+
+// #define GLM_CXX11_RANGE_FOR
+// Range-based for N2930 GCC 4.6
+// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2930.html
+
+// #define GLM_CXX11_OVERRIDE_CONTROL
+// Explicit virtual overrides N2928 N3206 N3272 GCC 4.7
+// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2928.htm
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3206.htm
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3272.htm
+
+//
+// Minimal support for garbage collection and reachability-based leak detection N2670 No
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2670.htm
+
+// #define GLM_CXX11_NOEXCEPT
+// Allowing move constructors to throw [noexcept] N3050 GCC 4.6 (core language only)
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3050.html
+
+//
+// Defining move special member functions N3053 GCC 4.6
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3053.html
+
+//
+// Sequence points N2239 Yes
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html
+
+//
+// Atomic operations N2427 GCC 4.4
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html
+
+//
+// Strong Compare and Exchange N2748 GCC 4.5
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2427.html
+
+//
+// Bidirectional Fences N2752 GCC 4.8
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2752.htm
+
+//
+// Memory model N2429 GCC 4.8
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2429.htm
+
+//
+// Data-dependency ordering: atomics and memory model N2664 GCC 4.4
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2664.htm
+
+//
+// Propagating exceptions N2179 GCC 4.4
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2179.html
+
+//
+// Abandoning a process and at_quick_exit N2440 GCC 4.8
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2440.htm
+
+//
+// Allow atomics use in signal handlers N2547 Yes
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2547.htm
+
+//
+// Thread-local storage N2659 GCC 4.8
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2659.htm
+
+//
+// Dynamic initialization and destruction with concurrency N2660 GCC 4.3
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2660.htm
+
+//
+// __func__ predefined identifier N2340 GCC 4.3
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2340.htm
+
+//
+// C99 preprocessor N1653 GCC 4.3
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1653.htm
+
+//
+// long long N1811 GCC 4.3
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1811.pdf
+
+//
+// Extended integral types N1988 Yes
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1988.pdf
+
+#if(GLM_COMPILER & GLM_COMPILER_GCC)
+
+# if(GLM_COMPILER >= GLM_COMPILER_GCC43)
+# define GLM_CXX11_STATIC_ASSERT
+# endif
+
+#elif(GLM_COMPILER & GLM_COMPILER_CLANG)
+# if(__has_feature(cxx_exceptions))
+# define GLM_CXX98_EXCEPTIONS
+# endif
+
+# if(__has_feature(cxx_rtti))
+# define GLM_CXX98_RTTI
+# endif
+
+# if(__has_feature(cxx_access_control_sfinae))
+# define GLM_CXX11_ACCESS_CONTROL_SFINAE
+# endif
+
+# if(__has_feature(cxx_alias_templates))
+# define GLM_CXX11_ALIAS_TEMPLATE
+# endif
+
+# if(__has_feature(cxx_alignas))
+# define GLM_CXX11_ALIGNAS
+# endif
+
+# if(__has_feature(cxx_attributes))
+# define GLM_CXX11_ATTRIBUTES
+# endif
+
+# if(__has_feature(cxx_constexpr))
+# define GLM_CXX11_CONSTEXPR
+# endif
+
+# if(__has_feature(cxx_decltype))
+# define GLM_CXX11_DECLTYPE
+# endif
+
+# if(__has_feature(cxx_default_function_template_args))
+# define GLM_CXX11_DEFAULT_FUNCTION_TEMPLATE_ARGS
+# endif
+
+# if(__has_feature(cxx_defaulted_functions))
+# define GLM_CXX11_DEFAULTED_FUNCTIONS
+# endif
+
+# if(__has_feature(cxx_delegating_constructors))
+# define GLM_CXX11_DELEGATING_CONSTRUCTORS
+# endif
+
+# if(__has_feature(cxx_deleted_functions))
+# define GLM_CXX11_DELETED_FUNCTIONS
+# endif
+
+# if(__has_feature(cxx_explicit_conversions))
+# define GLM_CXX11_EXPLICIT_CONVERSIONS
+# endif
+
+# if(__has_feature(cxx_generalized_initializers))
+# define GLM_CXX11_GENERALIZED_INITIALIZERS
+# endif
+
+# if(__has_feature(cxx_implicit_moves))
+# define GLM_CXX11_IMPLICIT_MOVES
+# endif
+
+# if(__has_feature(cxx_inheriting_constructors))
+# define GLM_CXX11_INHERITING_CONSTRUCTORS
+# endif
+
+# if(__has_feature(cxx_inline_namespaces))
+# define GLM_CXX11_INLINE_NAMESPACES
+# endif
+
+# if(__has_feature(cxx_lambdas))
+# define GLM_CXX11_LAMBDAS
+# endif
+
+# if(__has_feature(cxx_local_type_template_args))
+# define GLM_CXX11_LOCAL_TYPE_TEMPLATE_ARGS
+# endif
+
+# if(__has_feature(cxx_noexcept))
+# define GLM_CXX11_NOEXCEPT
+# endif
+
+# if(__has_feature(cxx_nonstatic_member_init))
+# define GLM_CXX11_NONSTATIC_MEMBER_INIT
+# endif
+
+# if(__has_feature(cxx_nullptr))
+# define GLM_CXX11_NULLPTR
+# endif
+
+# if(__has_feature(cxx_override_control))
+# define GLM_CXX11_OVERRIDE_CONTROL
+# endif
+
+# if(__has_feature(cxx_reference_qualified_functions))
+# define GLM_CXX11_REFERENCE_QUALIFIED_FUNCTIONS
+# endif
+
+# if(__has_feature(cxx_range_for))
+# define GLM_CXX11_RANGE_FOR
+# endif
+
+# if(__has_feature(cxx_raw_string_literals))
+# define GLM_CXX11_RAW_STRING_LITERALS
+# endif
+
+# if(__has_feature(cxx_rvalue_references))
+# define GLM_CXX11_RVALUE_REFERENCES
+# endif
+
+# if(__has_feature(cxx_static_assert))
+# define GLM_CXX11_STATIC_ASSERT
+# endif
+
+# if(__has_feature(cxx_auto_type))
+# define GLM_CXX11_AUTO_TYPE
+# endif
+
+# if(__has_feature(cxx_strong_enums))
+# define GLM_CXX11_STRONG_ENUMS
+# endif
+
+# if(__has_feature(cxx_trailing_return))
+# define GLM_CXX11_TRAILING_RETURN
+# endif
+
+# if(__has_feature(cxx_unicode_literals))
+# define GLM_CXX11_UNICODE_LITERALS
+# endif
+
+# if(__has_feature(cxx_unrestricted_unions))
+# define GLM_CXX11_UNRESTRICTED_UNIONS
+# endif
+
+# if(__has_feature(cxx_user_literals))
+# define GLM_CXX11_USER_LITERALS
+# endif
+
+# if(__has_feature(cxx_variadic_templates))
+# define GLM_CXX11_VARIADIC_TEMPLATES
+# endif
+
+#endif//(GLM_COMPILER & GLM_COMPILER_CLANG)
diff --git a/src/third_party/glm/glm/detail/_fixes.hpp b/src/third_party/glm/glm/detail/_fixes.hpp
new file mode 100644
index 0000000..c957562
--- /dev/null
+++ b/src/third_party/glm/glm/detail/_fixes.hpp
@@ -0,0 +1,30 @@
+/// @ref core
+/// @file glm/detail/_fixes.hpp
+
+#include <cmath>
+
+//! Workaround for compatibility with other libraries
+#ifdef max
+#undef max
+#endif
+
+//! Workaround for compatibility with other libraries
+#ifdef min
+#undef min
+#endif
+
+//! Workaround for Android
+#ifdef isnan
+#undef isnan
+#endif
+
+//! Workaround for Android
+#ifdef isinf
+#undef isinf
+#endif
+
+//! Workaround for Chrone Native Client
+#ifdef log2
+#undef log2
+#endif
+
diff --git a/src/third_party/glm/glm/detail/_noise.hpp b/src/third_party/glm/glm/detail/_noise.hpp
new file mode 100644
index 0000000..89403f4
--- /dev/null
+++ b/src/third_party/glm/glm/detail/_noise.hpp
@@ -0,0 +1,107 @@
+/// @ref core
+/// @file glm/detail/_noise.hpp
+
+#pragma once
+
+#include "../vec2.hpp"
+#include "../vec3.hpp"
+#include "../vec4.hpp"
+#include "../common.hpp"
+
+namespace glm{
+namespace detail
+{
+ template <typename T>
+ GLM_FUNC_QUALIFIER T mod289(T const & x)
+ {
+ return x - floor(x * static_cast<T>(1.0) / static_cast<T>(289.0)) * static_cast<T>(289.0);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER T permute(T const & x)
+ {
+ return mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> permute(tvec2<T, P> const & x)
+ {
+ return mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> permute(tvec3<T, P> const & x)
+ {
+ return mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> permute(tvec4<T, P> const & x)
+ {
+ return mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x);
+ }
+/*
+ template <typename T, precision P, template<typename> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> permute(vecType<T, P> const & x)
+ {
+ return mod289(((x * T(34)) + T(1)) * x);
+ }
+*/
+ template <typename T>
+ GLM_FUNC_QUALIFIER T taylorInvSqrt(T const & r)
+ {
+ return T(1.79284291400159) - T(0.85373472095314) * r;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> taylorInvSqrt(tvec2<T, P> const & r)
+ {
+ return T(1.79284291400159) - T(0.85373472095314) * r;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> taylorInvSqrt(tvec3<T, P> const & r)
+ {
+ return T(1.79284291400159) - T(0.85373472095314) * r;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> taylorInvSqrt(tvec4<T, P> const & r)
+ {
+ return T(1.79284291400159) - T(0.85373472095314) * r;
+ }
+/*
+ template <typename T, precision P, template<typename> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> taylorInvSqrt(vecType<T, P> const & r)
+ {
+ return T(1.79284291400159) - T(0.85373472095314) * r;
+ }
+*/
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> fade(tvec2<T, P> const & t)
+ {
+ return (t * t * t) * (t * (t * T(6) - T(15)) + T(10));
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> fade(tvec3<T, P> const & t)
+ {
+ return (t * t * t) * (t * (t * T(6) - T(15)) + T(10));
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> fade(tvec4<T, P> const & t)
+ {
+ return (t * t * t) * (t * (t * T(6) - T(15)) + T(10));
+ }
+/*
+ template <typename T, precision P, template <typename> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> fade(vecType<T, P> const & t)
+ {
+ return (t * t * t) * (t * (t * T(6) - T(15)) + T(10));
+ }
+*/
+}//namespace detail
+}//namespace glm
+
diff --git a/src/third_party/glm/glm/detail/_swizzle.hpp b/src/third_party/glm/glm/detail/_swizzle.hpp
new file mode 100644
index 0000000..8e134d9
--- /dev/null
+++ b/src/third_party/glm/glm/detail/_swizzle.hpp
@@ -0,0 +1,797 @@
+/// @ref core
+/// @file glm/detail/_swizzle.hpp
+
+#pragma once
+
+namespace glm{
+namespace detail
+{
+ // Internal class for implementing swizzle operators
+ template <typename T, int N>
+ struct _swizzle_base0
+ {
+ protected:
+ GLM_FUNC_QUALIFIER T& elem(size_t i){ return (reinterpret_cast<T*>(_buffer))[i]; }
+ GLM_FUNC_QUALIFIER T const& elem(size_t i) const{ return (reinterpret_cast<const T*>(_buffer))[i]; }
+
+ // Use an opaque buffer to *ensure* the compiler doesn't call a constructor.
+ // The size 1 buffer is assumed to aligned to the actual members so that the
+ // elem()
+ char _buffer[1];
+ };
+
+ template <int N, typename T, precision P, template <typename, precision> class vecType, int E0, int E1, int E2, int E3, bool Aligned>
+ struct _swizzle_base1 : public _swizzle_base0<T, N>
+ {
+ };
+
+ template <typename T, precision P, template <typename, precision> class vecType, int E0, int E1, bool Aligned>
+ struct _swizzle_base1<2, T, P, vecType, E0,E1,-1,-2, Aligned> : public _swizzle_base0<T, 2>
+ {
+ GLM_FUNC_QUALIFIER vecType<T, P> operator ()() const { return vecType<T, P>(this->elem(E0), this->elem(E1)); }
+ };
+
+ template <typename T, precision P, template <typename, precision> class vecType, int E0, int E1, int E2, bool Aligned>
+ struct _swizzle_base1<3, T, P, vecType, E0,E1,E2,-1, Aligned> : public _swizzle_base0<T, 3>
+ {
+ GLM_FUNC_QUALIFIER vecType<T, P> operator ()() const { return vecType<T, P>(this->elem(E0), this->elem(E1), this->elem(E2)); }
+ };
+
+ template <typename T, precision P, template <typename, precision> class vecType, int E0, int E1, int E2, int E3, bool Aligned>
+ struct _swizzle_base1<4, T, P, vecType, E0,E1,E2,E3, Aligned> : public _swizzle_base0<T, 4>
+ {
+ GLM_FUNC_QUALIFIER vecType<T, P> operator ()() const { return vecType<T, P>(this->elem(E0), this->elem(E1), this->elem(E2), this->elem(E3)); }
+ };
+
+ // Internal class for implementing swizzle operators
+ /*
+ Template parameters:
+
+ ValueType = type of scalar values (e.g. float, double)
+ VecType = class the swizzle is applies to (e.g. tvec3<float>)
+ N = number of components in the vector (e.g. 3)
+ E0...3 = what index the n-th element of this swizzle refers to in the unswizzled vec
+
+ DUPLICATE_ELEMENTS = 1 if there is a repeated element, 0 otherwise (used to specialize swizzles
+ containing duplicate elements so that they cannot be used as r-values).
+ */
+ template <int N, typename T, precision P, template <typename, precision> class vecType, int E0, int E1, int E2, int E3, int DUPLICATE_ELEMENTS>
+ struct _swizzle_base2 : public _swizzle_base1<N, T, P, vecType, E0,E1,E2,E3, detail::is_aligned<P>::value>
+ {
+ GLM_FUNC_QUALIFIER _swizzle_base2& operator= (const T& t)
+ {
+ for (int i = 0; i < N; ++i)
+ (*this)[i] = t;
+ return *this;
+ }
+
+ GLM_FUNC_QUALIFIER _swizzle_base2& operator= (vecType<T, P> const& that)
+ {
+ struct op {
+ GLM_FUNC_QUALIFIER void operator() (T& e, T& t) { e = t; }
+ };
+ _apply_op(that, op());
+ return *this;
+ }
+
+ GLM_FUNC_QUALIFIER void operator -= (vecType<T, P> const& that)
+ {
+ struct op {
+ GLM_FUNC_QUALIFIER void operator() (T& e, T& t) { e -= t; }
+ };
+ _apply_op(that, op());
+ }
+
+ GLM_FUNC_QUALIFIER void operator += (vecType<T, P> const& that)
+ {
+ struct op {
+ GLM_FUNC_QUALIFIER void operator() (T& e, T& t) { e += t; }
+ };
+ _apply_op(that, op());
+ }
+
+ GLM_FUNC_QUALIFIER void operator *= (vecType<T, P> const& that)
+ {
+ struct op {
+ GLM_FUNC_QUALIFIER void operator() (T& e, T& t) { e *= t; }
+ };
+ _apply_op(that, op());
+ }
+
+ GLM_FUNC_QUALIFIER void operator /= (vecType<T, P> const& that)
+ {
+ struct op {
+ GLM_FUNC_QUALIFIER void operator() (T& e, T& t) { e /= t; }
+ };
+ _apply_op(that, op());
+ }
+
+ GLM_FUNC_QUALIFIER T& operator[](size_t i)
+ {
+ const int offset_dst[4] = { E0, E1, E2, E3 };
+ return this->elem(offset_dst[i]);
+ }
+ GLM_FUNC_QUALIFIER T operator[](size_t i) const
+ {
+ const int offset_dst[4] = { E0, E1, E2, E3 };
+ return this->elem(offset_dst[i]);
+ }
+
+ protected:
+ template <typename U>
+ GLM_FUNC_QUALIFIER void _apply_op(vecType<T, P> const& that, U op)
+ {
+ // Make a copy of the data in this == &that.
+ // The copier should optimize out the copy in cases where the function is
+ // properly inlined and the copy is not necessary.
+ T t[N];
+ for (int i = 0; i < N; ++i)
+ t[i] = that[i];
+ for (int i = 0; i < N; ++i)
+ op( (*this)[i], t[i] );
+ }
+ };
+
+ // Specialization for swizzles containing duplicate elements. These cannot be modified.
+ template <int N, typename T, precision P, template <typename, precision> class vecType, int E0, int E1, int E2, int E3>
+ struct _swizzle_base2<N, T, P, vecType, E0,E1,E2,E3, 1> : public _swizzle_base1<N, T, P, vecType, E0,E1,E2,E3, detail::is_aligned<P>::value>
+ {
+ struct Stub {};
+
+ GLM_FUNC_QUALIFIER _swizzle_base2& operator= (Stub const &) { return *this; }
+
+ GLM_FUNC_QUALIFIER T operator[] (size_t i) const
+ {
+ const int offset_dst[4] = { E0, E1, E2, E3 };
+ return this->elem(offset_dst[i]);
+ }
+ };
+
+ template <int N, typename T, precision P, template <typename, precision> class vecType, int E0, int E1, int E2, int E3>
+ struct _swizzle : public _swizzle_base2<N, T, P, vecType, E0, E1, E2, E3, (E0 == E1 || E0 == E2 || E0 == E3 || E1 == E2 || E1 == E3 || E2 == E3)>
+ {
+ typedef _swizzle_base2<N, T, P, vecType, E0, E1, E2, E3, (E0 == E1 || E0 == E2 || E0 == E3 || E1 == E2 || E1 == E3 || E2 == E3)> base_type;
+
+ using base_type::operator=;
+
+ GLM_FUNC_QUALIFIER operator vecType<T, P> () const { return (*this)(); }
+ };
+
+//
+// To prevent the C++ syntax from getting entirely overwhelming, define some alias macros
+//
+#define _GLM_SWIZZLE_TEMPLATE1 template <int N, typename T, precision P, template <typename, precision> class vecType, int E0, int E1, int E2, int E3>
+#define _GLM_SWIZZLE_TEMPLATE2 template <int N, typename T, precision P, template <typename, precision> class vecType, int E0, int E1, int E2, int E3, int F0, int F1, int F2, int F3>
+#define _GLM_SWIZZLE_TYPE1 _swizzle<N, T, P, vecType, E0, E1, E2, E3>
+#define _GLM_SWIZZLE_TYPE2 _swizzle<N, T, P, vecType, F0, F1, F2, F3>
+
+//
+// Wrapper for a binary operator (e.g. u.yy + v.zy)
+//
+#define _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND) \
+ _GLM_SWIZZLE_TEMPLATE2 \
+ GLM_FUNC_QUALIFIER vecType<T, P> operator OPERAND ( const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE2& b) \
+ { \
+ return a() OPERAND b(); \
+ } \
+ _GLM_SWIZZLE_TEMPLATE1 \
+ GLM_FUNC_QUALIFIER vecType<T, P> operator OPERAND ( const _GLM_SWIZZLE_TYPE1& a, const vecType<T, P>& b) \
+ { \
+ return a() OPERAND b; \
+ } \
+ _GLM_SWIZZLE_TEMPLATE1 \
+ GLM_FUNC_QUALIFIER vecType<T, P> operator OPERAND ( const vecType<T, P>& a, const _GLM_SWIZZLE_TYPE1& b) \
+ { \
+ return a OPERAND b(); \
+ }
+
+//
+// Wrapper for a operand between a swizzle and a binary (e.g. 1.0f - u.xyz)
+//
+#define _GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND) \
+ _GLM_SWIZZLE_TEMPLATE1 \
+ GLM_FUNC_QUALIFIER vecType<T, P> operator OPERAND ( const _GLM_SWIZZLE_TYPE1& a, const T& b) \
+ { \
+ return a() OPERAND b; \
+ } \
+ _GLM_SWIZZLE_TEMPLATE1 \
+ GLM_FUNC_QUALIFIER vecType<T, P> operator OPERAND ( const T& a, const _GLM_SWIZZLE_TYPE1& b) \
+ { \
+ return a OPERAND b(); \
+ }
+
+//
+// Macro for wrapping a function taking one argument (e.g. abs())
+//
+#define _GLM_SWIZZLE_FUNCTION_1_ARGS(RETURN_TYPE,FUNCTION) \
+ _GLM_SWIZZLE_TEMPLATE1 \
+ GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a) \
+ { \
+ return FUNCTION(a()); \
+ }
+
+//
+// Macro for wrapping a function taking two vector arguments (e.g. dot()).
+//
+#define _GLM_SWIZZLE_FUNCTION_2_ARGS(RETURN_TYPE,FUNCTION) \
+ _GLM_SWIZZLE_TEMPLATE2 \
+ GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE2& b) \
+ { \
+ return FUNCTION(a(), b()); \
+ } \
+ _GLM_SWIZZLE_TEMPLATE1 \
+ GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE1& b) \
+ { \
+ return FUNCTION(a(), b()); \
+ } \
+ _GLM_SWIZZLE_TEMPLATE1 \
+ GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const typename V& b) \
+ { \
+ return FUNCTION(a(), b); \
+ } \
+ _GLM_SWIZZLE_TEMPLATE1 \
+ GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const V& a, const _GLM_SWIZZLE_TYPE1& b) \
+ { \
+ return FUNCTION(a, b()); \
+ }
+
+//
+// Macro for wrapping a function take 2 vec arguments followed by a scalar (e.g. mix()).
+//
+#define _GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(RETURN_TYPE,FUNCTION) \
+ _GLM_SWIZZLE_TEMPLATE2 \
+ GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE2& b, const T& c) \
+ { \
+ return FUNCTION(a(), b(), c); \
+ } \
+ _GLM_SWIZZLE_TEMPLATE1 \
+ GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE1& b, const T& c) \
+ { \
+ return FUNCTION(a(), b(), c); \
+ } \
+ _GLM_SWIZZLE_TEMPLATE1 \
+ GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const typename S0::vec_type& b, const T& c)\
+ { \
+ return FUNCTION(a(), b, c); \
+ } \
+ _GLM_SWIZZLE_TEMPLATE1 \
+ GLM_FUNC_QUALIFIER typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const typename V& a, const _GLM_SWIZZLE_TYPE1& b, const T& c) \
+ { \
+ return FUNCTION(a, b(), c); \
+ }
+
+}//namespace detail
+}//namespace glm
+
+namespace glm
+{
+ namespace detail
+ {
+ _GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(-)
+ _GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(*)
+ _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(+)
+ _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(-)
+ _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(*)
+ _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(/)
+ }
+
+ //
+ // Swizzles are distinct types from the unswizzled type. The below macros will
+ // provide template specializations for the swizzle types for the given functions
+ // so that the compiler does not have any ambiguity to choosing how to handle
+ // the function.
+ //
+ // The alternative is to use the operator()() when calling the function in order
+ // to explicitly convert the swizzled type to the unswizzled type.
+ //
+
+ //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, abs);
+ //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, acos);
+ //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, acosh);
+ //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, all);
+ //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, any);
+
+ //_GLM_SWIZZLE_FUNCTION_2_ARGS(value_type, dot);
+ //_GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type, cross);
+ //_GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type, step);
+ //_GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(vec_type, mix);
+}
+
+#define _GLM_SWIZZLE2_2_MEMBERS(T, P, V, E0,E1) \
+ struct { detail::_swizzle<2, T, P, V, 0,0,-1,-2> E0 ## E0; }; \
+ struct { detail::_swizzle<2, T, P, V, 0,1,-1,-2> E0 ## E1; }; \
+ struct { detail::_swizzle<2, T, P, V, 1,0,-1,-2> E1 ## E0; }; \
+ struct { detail::_swizzle<2, T, P, V, 1,1,-1,-2> E1 ## E1; };
+
+#define _GLM_SWIZZLE2_3_MEMBERS(T, P, V, E0,E1) \
+ struct { detail::_swizzle<3,T, P, V, 0,0,0,-1> E0 ## E0 ## E0; }; \
+ struct { detail::_swizzle<3,T, P, V, 0,0,1,-1> E0 ## E0 ## E1; }; \
+ struct { detail::_swizzle<3,T, P, V, 0,1,0,-1> E0 ## E1 ## E0; }; \
+ struct { detail::_swizzle<3,T, P, V, 0,1,1,-1> E0 ## E1 ## E1; }; \
+ struct { detail::_swizzle<3,T, P, V, 1,0,0,-1> E1 ## E0 ## E0; }; \
+ struct { detail::_swizzle<3,T, P, V, 1,0,1,-1> E1 ## E0 ## E1; }; \
+ struct { detail::_swizzle<3,T, P, V, 1,1,0,-1> E1 ## E1 ## E0; }; \
+ struct { detail::_swizzle<3,T, P, V, 1,1,1,-1> E1 ## E1 ## E1; };
+
+#define _GLM_SWIZZLE2_4_MEMBERS(T, P, V, E0,E1) \
+ struct { detail::_swizzle<4,T, P, V, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \
+ struct { detail::_swizzle<4,T, P, V, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \
+ struct { detail::_swizzle<4,T, P, V, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \
+ struct { detail::_swizzle<4,T, P, V, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \
+ struct { detail::_swizzle<4,T, P, V, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \
+ struct { detail::_swizzle<4,T, P, V, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \
+ struct { detail::_swizzle<4,T, P, V, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \
+ struct { detail::_swizzle<4,T, P, V, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \
+ struct { detail::_swizzle<4,T, P, V, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \
+ struct { detail::_swizzle<4,T, P, V, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \
+ struct { detail::_swizzle<4,T, P, V, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \
+ struct { detail::_swizzle<4,T, P, V, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \
+ struct { detail::_swizzle<4,T, P, V, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \
+ struct { detail::_swizzle<4,T, P, V, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \
+ struct { detail::_swizzle<4,T, P, V, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \
+ struct { detail::_swizzle<4,T, P, V, 1,1,1,1> E1 ## E1 ## E1 ## E1; };
+
+#define _GLM_SWIZZLE3_2_MEMBERS(T, P, V, E0,E1,E2) \
+ struct { detail::_swizzle<2,T, P, V, 0,0,-1,-2> E0 ## E0; }; \
+ struct { detail::_swizzle<2,T, P, V, 0,1,-1,-2> E0 ## E1; }; \
+ struct { detail::_swizzle<2,T, P, V, 0,2,-1,-2> E0 ## E2; }; \
+ struct { detail::_swizzle<2,T, P, V, 1,0,-1,-2> E1 ## E0; }; \
+ struct { detail::_swizzle<2,T, P, V, 1,1,-1,-2> E1 ## E1; }; \
+ struct { detail::_swizzle<2,T, P, V, 1,2,-1,-2> E1 ## E2; }; \
+ struct { detail::_swizzle<2,T, P, V, 2,0,-1,-2> E2 ## E0; }; \
+ struct { detail::_swizzle<2,T, P, V, 2,1,-1,-2> E2 ## E1; }; \
+ struct { detail::_swizzle<2,T, P, V, 2,2,-1,-2> E2 ## E2; };
+
+#define _GLM_SWIZZLE3_3_MEMBERS(T, P, V ,E0,E1,E2) \
+ struct { detail::_swizzle<3, T, P, V, 0,0,0,-1> E0 ## E0 ## E0; }; \
+ struct { detail::_swizzle<3, T, P, V, 0,0,1,-1> E0 ## E0 ## E1; }; \
+ struct { detail::_swizzle<3, T, P, V, 0,0,2,-1> E0 ## E0 ## E2; }; \
+ struct { detail::_swizzle<3, T, P, V, 0,1,0,-1> E0 ## E1 ## E0; }; \
+ struct { detail::_swizzle<3, T, P, V, 0,1,1,-1> E0 ## E1 ## E1; }; \
+ struct { detail::_swizzle<3, T, P, V, 0,1,2,-1> E0 ## E1 ## E2; }; \
+ struct { detail::_swizzle<3, T, P, V, 0,2,0,-1> E0 ## E2 ## E0; }; \
+ struct { detail::_swizzle<3, T, P, V, 0,2,1,-1> E0 ## E2 ## E1; }; \
+ struct { detail::_swizzle<3, T, P, V, 0,2,2,-1> E0 ## E2 ## E2; }; \
+ struct { detail::_swizzle<3, T, P, V, 1,0,0,-1> E1 ## E0 ## E0; }; \
+ struct { detail::_swizzle<3, T, P, V, 1,0,1,-1> E1 ## E0 ## E1; }; \
+ struct { detail::_swizzle<3, T, P, V, 1,0,2,-1> E1 ## E0 ## E2; }; \
+ struct { detail::_swizzle<3, T, P, V, 1,1,0,-1> E1 ## E1 ## E0; }; \
+ struct { detail::_swizzle<3, T, P, V, 1,1,1,-1> E1 ## E1 ## E1; }; \
+ struct { detail::_swizzle<3, T, P, V, 1,1,2,-1> E1 ## E1 ## E2; }; \
+ struct { detail::_swizzle<3, T, P, V, 1,2,0,-1> E1 ## E2 ## E0; }; \
+ struct { detail::_swizzle<3, T, P, V, 1,2,1,-1> E1 ## E2 ## E1; }; \
+ struct { detail::_swizzle<3, T, P, V, 1,2,2,-1> E1 ## E2 ## E2; }; \
+ struct { detail::_swizzle<3, T, P, V, 2,0,0,-1> E2 ## E0 ## E0; }; \
+ struct { detail::_swizzle<3, T, P, V, 2,0,1,-1> E2 ## E0 ## E1; }; \
+ struct { detail::_swizzle<3, T, P, V, 2,0,2,-1> E2 ## E0 ## E2; }; \
+ struct { detail::_swizzle<3, T, P, V, 2,1,0,-1> E2 ## E1 ## E0; }; \
+ struct { detail::_swizzle<3, T, P, V, 2,1,1,-1> E2 ## E1 ## E1; }; \
+ struct { detail::_swizzle<3, T, P, V, 2,1,2,-1> E2 ## E1 ## E2; }; \
+ struct { detail::_swizzle<3, T, P, V, 2,2,0,-1> E2 ## E2 ## E0; }; \
+ struct { detail::_swizzle<3, T, P, V, 2,2,1,-1> E2 ## E2 ## E1; }; \
+ struct { detail::_swizzle<3, T, P, V, 2,2,2,-1> E2 ## E2 ## E2; };
+
+#define _GLM_SWIZZLE3_4_MEMBERS(T, P, V, E0,E1,E2) \
+ struct { detail::_swizzle<4,T, P, V, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \
+ struct { detail::_swizzle<4,T, P, V, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \
+ struct { detail::_swizzle<4,T, P, V, 0,0,0,2> E0 ## E0 ## E0 ## E2; }; \
+ struct { detail::_swizzle<4,T, P, V, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \
+ struct { detail::_swizzle<4,T, P, V, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \
+ struct { detail::_swizzle<4,T, P, V, 0,0,1,2> E0 ## E0 ## E1 ## E2; }; \
+ struct { detail::_swizzle<4,T, P, V, 0,0,2,0> E0 ## E0 ## E2 ## E0; }; \
+ struct { detail::_swizzle<4,T, P, V, 0,0,2,1> E0 ## E0 ## E2 ## E1; }; \
+ struct { detail::_swizzle<4,T, P, V, 0,0,2,2> E0 ## E0 ## E2 ## E2; }; \
+ struct { detail::_swizzle<4,T, P, V, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \
+ struct { detail::_swizzle<4,T, P, V, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \
+ struct { detail::_swizzle<4,T, P, V, 0,1,0,2> E0 ## E1 ## E0 ## E2; }; \
+ struct { detail::_swizzle<4,T, P, V, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \
+ struct { detail::_swizzle<4,T, P, V, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \
+ struct { detail::_swizzle<4,T, P, V, 0,1,1,2> E0 ## E1 ## E1 ## E2; }; \
+ struct { detail::_swizzle<4,T, P, V, 0,1,2,0> E0 ## E1 ## E2 ## E0; }; \
+ struct { detail::_swizzle<4,T, P, V, 0,1,2,1> E0 ## E1 ## E2 ## E1; }; \
+ struct { detail::_swizzle<4,T, P, V, 0,1,2,2> E0 ## E1 ## E2 ## E2; }; \
+ struct { detail::_swizzle<4,T, P, V, 0,2,0,0> E0 ## E2 ## E0 ## E0; }; \
+ struct { detail::_swizzle<4,T, P, V, 0,2,0,1> E0 ## E2 ## E0 ## E1; }; \
+ struct { detail::_swizzle<4,T, P, V, 0,2,0,2> E0 ## E2 ## E0 ## E2; }; \
+ struct { detail::_swizzle<4,T, P, V, 0,2,1,0> E0 ## E2 ## E1 ## E0; }; \
+ struct { detail::_swizzle<4,T, P, V, 0,2,1,1> E0 ## E2 ## E1 ## E1; }; \
+ struct { detail::_swizzle<4,T, P, V, 0,2,1,2> E0 ## E2 ## E1 ## E2; }; \
+ struct { detail::_swizzle<4,T, P, V, 0,2,2,0> E0 ## E2 ## E2 ## E0; }; \
+ struct { detail::_swizzle<4,T, P, V, 0,2,2,1> E0 ## E2 ## E2 ## E1; }; \
+ struct { detail::_swizzle<4,T, P, V, 0,2,2,2> E0 ## E2 ## E2 ## E2; }; \
+ struct { detail::_swizzle<4,T, P, V, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \
+ struct { detail::_swizzle<4,T, P, V, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \
+ struct { detail::_swizzle<4,T, P, V, 1,0,0,2> E1 ## E0 ## E0 ## E2; }; \
+ struct { detail::_swizzle<4,T, P, V, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \
+ struct { detail::_swizzle<4,T, P, V, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \
+ struct { detail::_swizzle<4,T, P, V, 1,0,1,2> E1 ## E0 ## E1 ## E2; }; \
+ struct { detail::_swizzle<4,T, P, V, 1,0,2,0> E1 ## E0 ## E2 ## E0; }; \
+ struct { detail::_swizzle<4,T, P, V, 1,0,2,1> E1 ## E0 ## E2 ## E1; }; \
+ struct { detail::_swizzle<4,T, P, V, 1,0,2,2> E1 ## E0 ## E2 ## E2; }; \
+ struct { detail::_swizzle<4,T, P, V, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \
+ struct { detail::_swizzle<4,T, P, V, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \
+ struct { detail::_swizzle<4,T, P, V, 1,1,0,2> E1 ## E1 ## E0 ## E2; }; \
+ struct { detail::_swizzle<4,T, P, V, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \
+ struct { detail::_swizzle<4,T, P, V, 1,1,1,1> E1 ## E1 ## E1 ## E1; }; \
+ struct { detail::_swizzle<4,T, P, V, 1,1,1,2> E1 ## E1 ## E1 ## E2; }; \
+ struct { detail::_swizzle<4,T, P, V, 1,1,2,0> E1 ## E1 ## E2 ## E0; }; \
+ struct { detail::_swizzle<4,T, P, V, 1,1,2,1> E1 ## E1 ## E2 ## E1; }; \
+ struct { detail::_swizzle<4,T, P, V, 1,1,2,2> E1 ## E1 ## E2 ## E2; }; \
+ struct { detail::_swizzle<4,T, P, V, 1,2,0,0> E1 ## E2 ## E0 ## E0; }; \
+ struct { detail::_swizzle<4,T, P, V, 1,2,0,1> E1 ## E2 ## E0 ## E1; }; \
+ struct { detail::_swizzle<4,T, P, V, 1,2,0,2> E1 ## E2 ## E0 ## E2; }; \
+ struct { detail::_swizzle<4,T, P, V, 1,2,1,0> E1 ## E2 ## E1 ## E0; }; \
+ struct { detail::_swizzle<4,T, P, V, 1,2,1,1> E1 ## E2 ## E1 ## E1; }; \
+ struct { detail::_swizzle<4,T, P, V, 1,2,1,2> E1 ## E2 ## E1 ## E2; }; \
+ struct { detail::_swizzle<4,T, P, V, 1,2,2,0> E1 ## E2 ## E2 ## E0; }; \
+ struct { detail::_swizzle<4,T, P, V, 1,2,2,1> E1 ## E2 ## E2 ## E1; }; \
+ struct { detail::_swizzle<4,T, P, V, 1,2,2,2> E1 ## E2 ## E2 ## E2; }; \
+ struct { detail::_swizzle<4,T, P, V, 2,0,0,0> E2 ## E0 ## E0 ## E0; }; \
+ struct { detail::_swizzle<4,T, P, V, 2,0,0,1> E2 ## E0 ## E0 ## E1; }; \
+ struct { detail::_swizzle<4,T, P, V, 2,0,0,2> E2 ## E0 ## E0 ## E2; }; \
+ struct { detail::_swizzle<4,T, P, V, 2,0,1,0> E2 ## E0 ## E1 ## E0; }; \
+ struct { detail::_swizzle<4,T, P, V, 2,0,1,1> E2 ## E0 ## E1 ## E1; }; \
+ struct { detail::_swizzle<4,T, P, V, 2,0,1,2> E2 ## E0 ## E1 ## E2; }; \
+ struct { detail::_swizzle<4,T, P, V, 2,0,2,0> E2 ## E0 ## E2 ## E0; }; \
+ struct { detail::_swizzle<4,T, P, V, 2,0,2,1> E2 ## E0 ## E2 ## E1; }; \
+ struct { detail::_swizzle<4,T, P, V, 2,0,2,2> E2 ## E0 ## E2 ## E2; }; \
+ struct { detail::_swizzle<4,T, P, V, 2,1,0,0> E2 ## E1 ## E0 ## E0; }; \
+ struct { detail::_swizzle<4,T, P, V, 2,1,0,1> E2 ## E1 ## E0 ## E1; }; \
+ struct { detail::_swizzle<4,T, P, V, 2,1,0,2> E2 ## E1 ## E0 ## E2; }; \
+ struct { detail::_swizzle<4,T, P, V, 2,1,1,0> E2 ## E1 ## E1 ## E0; }; \
+ struct { detail::_swizzle<4,T, P, V, 2,1,1,1> E2 ## E1 ## E1 ## E1; }; \
+ struct { detail::_swizzle<4,T, P, V, 2,1,1,2> E2 ## E1 ## E1 ## E2; }; \
+ struct { detail::_swizzle<4,T, P, V, 2,1,2,0> E2 ## E1 ## E2 ## E0; }; \
+ struct { detail::_swizzle<4,T, P, V, 2,1,2,1> E2 ## E1 ## E2 ## E1; }; \
+ struct { detail::_swizzle<4,T, P, V, 2,1,2,2> E2 ## E1 ## E2 ## E2; }; \
+ struct { detail::_swizzle<4,T, P, V, 2,2,0,0> E2 ## E2 ## E0 ## E0; }; \
+ struct { detail::_swizzle<4,T, P, V, 2,2,0,1> E2 ## E2 ## E0 ## E1; }; \
+ struct { detail::_swizzle<4,T, P, V, 2,2,0,2> E2 ## E2 ## E0 ## E2; }; \
+ struct { detail::_swizzle<4,T, P, V, 2,2,1,0> E2 ## E2 ## E1 ## E0; }; \
+ struct { detail::_swizzle<4,T, P, V, 2,2,1,1> E2 ## E2 ## E1 ## E1; }; \
+ struct { detail::_swizzle<4,T, P, V, 2,2,1,2> E2 ## E2 ## E1 ## E2; }; \
+ struct { detail::_swizzle<4,T, P, V, 2,2,2,0> E2 ## E2 ## E2 ## E0; }; \
+ struct { detail::_swizzle<4,T, P, V, 2,2,2,1> E2 ## E2 ## E2 ## E1; }; \
+ struct { detail::_swizzle<4,T, P, V, 2,2,2,2> E2 ## E2 ## E2 ## E2; };
+
+#define _GLM_SWIZZLE4_2_MEMBERS(T, P, V, E0,E1,E2,E3) \
+ struct { detail::_swizzle<2,T, P, V, 0,0,-1,-2> E0 ## E0; }; \
+ struct { detail::_swizzle<2,T, P, V, 0,1,-1,-2> E0 ## E1; }; \
+ struct { detail::_swizzle<2,T, P, V, 0,2,-1,-2> E0 ## E2; }; \
+ struct { detail::_swizzle<2,T, P, V, 0,3,-1,-2> E0 ## E3; }; \
+ struct { detail::_swizzle<2,T, P, V, 1,0,-1,-2> E1 ## E0; }; \
+ struct { detail::_swizzle<2,T, P, V, 1,1,-1,-2> E1 ## E1; }; \
+ struct { detail::_swizzle<2,T, P, V, 1,2,-1,-2> E1 ## E2; }; \
+ struct { detail::_swizzle<2,T, P, V, 1,3,-1,-2> E1 ## E3; }; \
+ struct { detail::_swizzle<2,T, P, V, 2,0,-1,-2> E2 ## E0; }; \
+ struct { detail::_swizzle<2,T, P, V, 2,1,-1,-2> E2 ## E1; }; \
+ struct { detail::_swizzle<2,T, P, V, 2,2,-1,-2> E2 ## E2; }; \
+ struct { detail::_swizzle<2,T, P, V, 2,3,-1,-2> E2 ## E3; }; \
+ struct { detail::_swizzle<2,T, P, V, 3,0,-1,-2> E3 ## E0; }; \
+ struct { detail::_swizzle<2,T, P, V, 3,1,-1,-2> E3 ## E1; }; \
+ struct { detail::_swizzle<2,T, P, V, 3,2,-1,-2> E3 ## E2; }; \
+ struct { detail::_swizzle<2,T, P, V, 3,3,-1,-2> E3 ## E3; };
+
+#define _GLM_SWIZZLE4_3_MEMBERS(T, P, V, E0,E1,E2,E3) \
+ struct { detail::_swizzle<3, T, P, V, 0,0,0,-1> E0 ## E0 ## E0; }; \
+ struct { detail::_swizzle<3, T, P, V, 0,0,1,-1> E0 ## E0 ## E1; }; \
+ struct { detail::_swizzle<3, T, P, V, 0,0,2,-1> E0 ## E0 ## E2; }; \
+ struct { detail::_swizzle<3, T, P, V, 0,0,3,-1> E0 ## E0 ## E3; }; \
+ struct { detail::_swizzle<3, T, P, V, 0,1,0,-1> E0 ## E1 ## E0; }; \
+ struct { detail::_swizzle<3, T, P, V, 0,1,1,-1> E0 ## E1 ## E1; }; \
+ struct { detail::_swizzle<3, T, P, V, 0,1,2,-1> E0 ## E1 ## E2; }; \
+ struct { detail::_swizzle<3, T, P, V, 0,1,3,-1> E0 ## E1 ## E3; }; \
+ struct { detail::_swizzle<3, T, P, V, 0,2,0,-1> E0 ## E2 ## E0; }; \
+ struct { detail::_swizzle<3, T, P, V, 0,2,1,-1> E0 ## E2 ## E1; }; \
+ struct { detail::_swizzle<3, T, P, V, 0,2,2,-1> E0 ## E2 ## E2; }; \
+ struct { detail::_swizzle<3, T, P, V, 0,2,3,-1> E0 ## E2 ## E3; }; \
+ struct { detail::_swizzle<3, T, P, V, 0,3,0,-1> E0 ## E3 ## E0; }; \
+ struct { detail::_swizzle<3, T, P, V, 0,3,1,-1> E0 ## E3 ## E1; }; \
+ struct { detail::_swizzle<3, T, P, V, 0,3,2,-1> E0 ## E3 ## E2; }; \
+ struct { detail::_swizzle<3, T, P, V, 0,3,3,-1> E0 ## E3 ## E3; }; \
+ struct { detail::_swizzle<3, T, P, V, 1,0,0,-1> E1 ## E0 ## E0; }; \
+ struct { detail::_swizzle<3, T, P, V, 1,0,1,-1> E1 ## E0 ## E1; }; \
+ struct { detail::_swizzle<3, T, P, V, 1,0,2,-1> E1 ## E0 ## E2; }; \
+ struct { detail::_swizzle<3, T, P, V, 1,0,3,-1> E1 ## E0 ## E3; }; \
+ struct { detail::_swizzle<3, T, P, V, 1,1,0,-1> E1 ## E1 ## E0; }; \
+ struct { detail::_swizzle<3, T, P, V, 1,1,1,-1> E1 ## E1 ## E1; }; \
+ struct { detail::_swizzle<3, T, P, V, 1,1,2,-1> E1 ## E1 ## E2; }; \
+ struct { detail::_swizzle<3, T, P, V, 1,1,3,-1> E1 ## E1 ## E3; }; \
+ struct { detail::_swizzle<3, T, P, V, 1,2,0,-1> E1 ## E2 ## E0; }; \
+ struct { detail::_swizzle<3, T, P, V, 1,2,1,-1> E1 ## E2 ## E1; }; \
+ struct { detail::_swizzle<3, T, P, V, 1,2,2,-1> E1 ## E2 ## E2; }; \
+ struct { detail::_swizzle<3, T, P, V, 1,2,3,-1> E1 ## E2 ## E3; }; \
+ struct { detail::_swizzle<3, T, P, V, 1,3,0,-1> E1 ## E3 ## E0; }; \
+ struct { detail::_swizzle<3, T, P, V, 1,3,1,-1> E1 ## E3 ## E1; }; \
+ struct { detail::_swizzle<3, T, P, V, 1,3,2,-1> E1 ## E3 ## E2; }; \
+ struct { detail::_swizzle<3, T, P, V, 1,3,3,-1> E1 ## E3 ## E3; }; \
+ struct { detail::_swizzle<3, T, P, V, 2,0,0,-1> E2 ## E0 ## E0; }; \
+ struct { detail::_swizzle<3, T, P, V, 2,0,1,-1> E2 ## E0 ## E1; }; \
+ struct { detail::_swizzle<3, T, P, V, 2,0,2,-1> E2 ## E0 ## E2; }; \
+ struct { detail::_swizzle<3, T, P, V, 2,0,3,-1> E2 ## E0 ## E3; }; \
+ struct { detail::_swizzle<3, T, P, V, 2,1,0,-1> E2 ## E1 ## E0; }; \
+ struct { detail::_swizzle<3, T, P, V, 2,1,1,-1> E2 ## E1 ## E1; }; \
+ struct { detail::_swizzle<3, T, P, V, 2,1,2,-1> E2 ## E1 ## E2; }; \
+ struct { detail::_swizzle<3, T, P, V, 2,1,3,-1> E2 ## E1 ## E3; }; \
+ struct { detail::_swizzle<3, T, P, V, 2,2,0,-1> E2 ## E2 ## E0; }; \
+ struct { detail::_swizzle<3, T, P, V, 2,2,1,-1> E2 ## E2 ## E1; }; \
+ struct { detail::_swizzle<3, T, P, V, 2,2,2,-1> E2 ## E2 ## E2; }; \
+ struct { detail::_swizzle<3, T, P, V, 2,2,3,-1> E2 ## E2 ## E3; }; \
+ struct { detail::_swizzle<3, T, P, V, 2,3,0,-1> E2 ## E3 ## E0; }; \
+ struct { detail::_swizzle<3, T, P, V, 2,3,1,-1> E2 ## E3 ## E1; }; \
+ struct { detail::_swizzle<3, T, P, V, 2,3,2,-1> E2 ## E3 ## E2; }; \
+ struct { detail::_swizzle<3, T, P, V, 2,3,3,-1> E2 ## E3 ## E3; }; \
+ struct { detail::_swizzle<3, T, P, V, 3,0,0,-1> E3 ## E0 ## E0; }; \
+ struct { detail::_swizzle<3, T, P, V, 3,0,1,-1> E3 ## E0 ## E1; }; \
+ struct { detail::_swizzle<3, T, P, V, 3,0,2,-1> E3 ## E0 ## E2; }; \
+ struct { detail::_swizzle<3, T, P, V, 3,0,3,-1> E3 ## E0 ## E3; }; \
+ struct { detail::_swizzle<3, T, P, V, 3,1,0,-1> E3 ## E1 ## E0; }; \
+ struct { detail::_swizzle<3, T, P, V, 3,1,1,-1> E3 ## E1 ## E1; }; \
+ struct { detail::_swizzle<3, T, P, V, 3,1,2,-1> E3 ## E1 ## E2; }; \
+ struct { detail::_swizzle<3, T, P, V, 3,1,3,-1> E3 ## E1 ## E3; }; \
+ struct { detail::_swizzle<3, T, P, V, 3,2,0,-1> E3 ## E2 ## E0; }; \
+ struct { detail::_swizzle<3, T, P, V, 3,2,1,-1> E3 ## E2 ## E1; }; \
+ struct { detail::_swizzle<3, T, P, V, 3,2,2,-1> E3 ## E2 ## E2; }; \
+ struct { detail::_swizzle<3, T, P, V, 3,2,3,-1> E3 ## E2 ## E3; }; \
+ struct { detail::_swizzle<3, T, P, V, 3,3,0,-1> E3 ## E3 ## E0; }; \
+ struct { detail::_swizzle<3, T, P, V, 3,3,1,-1> E3 ## E3 ## E1; }; \
+ struct { detail::_swizzle<3, T, P, V, 3,3,2,-1> E3 ## E3 ## E2; }; \
+ struct { detail::_swizzle<3, T, P, V, 3,3,3,-1> E3 ## E3 ## E3; };
+
+#define _GLM_SWIZZLE4_4_MEMBERS(T, P, V, E0,E1,E2,E3) \
+ struct { detail::_swizzle<4, T, P, V, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,0,0,2> E0 ## E0 ## E0 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,0,0,3> E0 ## E0 ## E0 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,0,1,2> E0 ## E0 ## E1 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,0,1,3> E0 ## E0 ## E1 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,0,2,0> E0 ## E0 ## E2 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,0,2,1> E0 ## E0 ## E2 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,0,2,2> E0 ## E0 ## E2 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,0,2,3> E0 ## E0 ## E2 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,0,3,0> E0 ## E0 ## E3 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,0,3,1> E0 ## E0 ## E3 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,0,3,2> E0 ## E0 ## E3 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,0,3,3> E0 ## E0 ## E3 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,1,0,2> E0 ## E1 ## E0 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,1,0,3> E0 ## E1 ## E0 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,1,1,2> E0 ## E1 ## E1 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,1,1,3> E0 ## E1 ## E1 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,1,2,0> E0 ## E1 ## E2 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,1,2,1> E0 ## E1 ## E2 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,1,2,2> E0 ## E1 ## E2 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,1,2,3> E0 ## E1 ## E2 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,1,3,0> E0 ## E1 ## E3 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,1,3,1> E0 ## E1 ## E3 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,1,3,2> E0 ## E1 ## E3 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,1,3,3> E0 ## E1 ## E3 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,2,0,0> E0 ## E2 ## E0 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,2,0,1> E0 ## E2 ## E0 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,2,0,2> E0 ## E2 ## E0 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,2,0,3> E0 ## E2 ## E0 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,2,1,0> E0 ## E2 ## E1 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,2,1,1> E0 ## E2 ## E1 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,2,1,2> E0 ## E2 ## E1 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,2,1,3> E0 ## E2 ## E1 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,2,2,0> E0 ## E2 ## E2 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,2,2,1> E0 ## E2 ## E2 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,2,2,2> E0 ## E2 ## E2 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,2,2,3> E0 ## E2 ## E2 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,2,3,0> E0 ## E2 ## E3 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,2,3,1> E0 ## E2 ## E3 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,2,3,2> E0 ## E2 ## E3 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,2,3,3> E0 ## E2 ## E3 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,3,0,0> E0 ## E3 ## E0 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,3,0,1> E0 ## E3 ## E0 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,3,0,2> E0 ## E3 ## E0 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,3,0,3> E0 ## E3 ## E0 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,3,1,0> E0 ## E3 ## E1 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,3,1,1> E0 ## E3 ## E1 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,3,1,2> E0 ## E3 ## E1 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,3,1,3> E0 ## E3 ## E1 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,3,2,0> E0 ## E3 ## E2 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,3,2,1> E0 ## E3 ## E2 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,3,2,2> E0 ## E3 ## E2 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,3,2,3> E0 ## E3 ## E2 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,3,3,0> E0 ## E3 ## E3 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,3,3,1> E0 ## E3 ## E3 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,3,3,2> E0 ## E3 ## E3 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 0,3,3,3> E0 ## E3 ## E3 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,0,0,2> E1 ## E0 ## E0 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,0,0,3> E1 ## E0 ## E0 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,0,1,2> E1 ## E0 ## E1 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,0,1,3> E1 ## E0 ## E1 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,0,2,0> E1 ## E0 ## E2 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,0,2,1> E1 ## E0 ## E2 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,0,2,2> E1 ## E0 ## E2 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,0,2,3> E1 ## E0 ## E2 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,0,3,0> E1 ## E0 ## E3 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,0,3,1> E1 ## E0 ## E3 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,0,3,2> E1 ## E0 ## E3 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,0,3,3> E1 ## E0 ## E3 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,1,0,2> E1 ## E1 ## E0 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,1,0,3> E1 ## E1 ## E0 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,1,1,1> E1 ## E1 ## E1 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,1,1,2> E1 ## E1 ## E1 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,1,1,3> E1 ## E1 ## E1 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,1,2,0> E1 ## E1 ## E2 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,1,2,1> E1 ## E1 ## E2 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,1,2,2> E1 ## E1 ## E2 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,1,2,3> E1 ## E1 ## E2 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,1,3,0> E1 ## E1 ## E3 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,1,3,1> E1 ## E1 ## E3 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,1,3,2> E1 ## E1 ## E3 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,1,3,3> E1 ## E1 ## E3 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,2,0,0> E1 ## E2 ## E0 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,2,0,1> E1 ## E2 ## E0 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,2,0,2> E1 ## E2 ## E0 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,2,0,3> E1 ## E2 ## E0 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,2,1,0> E1 ## E2 ## E1 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,2,1,1> E1 ## E2 ## E1 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,2,1,2> E1 ## E2 ## E1 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,2,1,3> E1 ## E2 ## E1 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,2,2,0> E1 ## E2 ## E2 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,2,2,1> E1 ## E2 ## E2 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,2,2,2> E1 ## E2 ## E2 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,2,2,3> E1 ## E2 ## E2 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,2,3,0> E1 ## E2 ## E3 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,2,3,1> E1 ## E2 ## E3 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,2,3,2> E1 ## E2 ## E3 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,2,3,3> E1 ## E2 ## E3 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,3,0,0> E1 ## E3 ## E0 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,3,0,1> E1 ## E3 ## E0 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,3,0,2> E1 ## E3 ## E0 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,3,0,3> E1 ## E3 ## E0 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,3,1,0> E1 ## E3 ## E1 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,3,1,1> E1 ## E3 ## E1 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,3,1,2> E1 ## E3 ## E1 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,3,1,3> E1 ## E3 ## E1 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,3,2,0> E1 ## E3 ## E2 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,3,2,1> E1 ## E3 ## E2 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,3,2,2> E1 ## E3 ## E2 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,3,2,3> E1 ## E3 ## E2 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,3,3,0> E1 ## E3 ## E3 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,3,3,1> E1 ## E3 ## E3 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,3,3,2> E1 ## E3 ## E3 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 1,3,3,3> E1 ## E3 ## E3 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,0,0,0> E2 ## E0 ## E0 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,0,0,1> E2 ## E0 ## E0 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,0,0,2> E2 ## E0 ## E0 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,0,0,3> E2 ## E0 ## E0 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,0,1,0> E2 ## E0 ## E1 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,0,1,1> E2 ## E0 ## E1 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,0,1,2> E2 ## E0 ## E1 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,0,1,3> E2 ## E0 ## E1 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,0,2,0> E2 ## E0 ## E2 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,0,2,1> E2 ## E0 ## E2 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,0,2,2> E2 ## E0 ## E2 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,0,2,3> E2 ## E0 ## E2 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,0,3,0> E2 ## E0 ## E3 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,0,3,1> E2 ## E0 ## E3 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,0,3,2> E2 ## E0 ## E3 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,0,3,3> E2 ## E0 ## E3 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,1,0,0> E2 ## E1 ## E0 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,1,0,1> E2 ## E1 ## E0 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,1,0,2> E2 ## E1 ## E0 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,1,0,3> E2 ## E1 ## E0 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,1,1,0> E2 ## E1 ## E1 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,1,1,1> E2 ## E1 ## E1 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,1,1,2> E2 ## E1 ## E1 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,1,1,3> E2 ## E1 ## E1 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,1,2,0> E2 ## E1 ## E2 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,1,2,1> E2 ## E1 ## E2 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,1,2,2> E2 ## E1 ## E2 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,1,2,3> E2 ## E1 ## E2 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,1,3,0> E2 ## E1 ## E3 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,1,3,1> E2 ## E1 ## E3 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,1,3,2> E2 ## E1 ## E3 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,1,3,3> E2 ## E1 ## E3 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,2,0,0> E2 ## E2 ## E0 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,2,0,1> E2 ## E2 ## E0 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,2,0,2> E2 ## E2 ## E0 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,2,0,3> E2 ## E2 ## E0 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,2,1,0> E2 ## E2 ## E1 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,2,1,1> E2 ## E2 ## E1 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,2,1,2> E2 ## E2 ## E1 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,2,1,3> E2 ## E2 ## E1 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,2,2,0> E2 ## E2 ## E2 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,2,2,1> E2 ## E2 ## E2 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,2,2,2> E2 ## E2 ## E2 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,2,2,3> E2 ## E2 ## E2 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,2,3,0> E2 ## E2 ## E3 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,2,3,1> E2 ## E2 ## E3 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,2,3,2> E2 ## E2 ## E3 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,2,3,3> E2 ## E2 ## E3 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,3,0,0> E2 ## E3 ## E0 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,3,0,1> E2 ## E3 ## E0 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,3,0,2> E2 ## E3 ## E0 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,3,0,3> E2 ## E3 ## E0 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,3,1,0> E2 ## E3 ## E1 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,3,1,1> E2 ## E3 ## E1 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,3,1,2> E2 ## E3 ## E1 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,3,1,3> E2 ## E3 ## E1 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,3,2,0> E2 ## E3 ## E2 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,3,2,1> E2 ## E3 ## E2 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,3,2,2> E2 ## E3 ## E2 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,3,2,3> E2 ## E3 ## E2 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,3,3,0> E2 ## E3 ## E3 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,3,3,1> E2 ## E3 ## E3 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,3,3,2> E2 ## E3 ## E3 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 2,3,3,3> E2 ## E3 ## E3 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,0,0,0> E3 ## E0 ## E0 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,0,0,1> E3 ## E0 ## E0 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,0,0,2> E3 ## E0 ## E0 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,0,0,3> E3 ## E0 ## E0 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,0,1,0> E3 ## E0 ## E1 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,0,1,1> E3 ## E0 ## E1 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,0,1,2> E3 ## E0 ## E1 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,0,1,3> E3 ## E0 ## E1 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,0,2,0> E3 ## E0 ## E2 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,0,2,1> E3 ## E0 ## E2 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,0,2,2> E3 ## E0 ## E2 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,0,2,3> E3 ## E0 ## E2 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,0,3,0> E3 ## E0 ## E3 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,0,3,1> E3 ## E0 ## E3 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,0,3,2> E3 ## E0 ## E3 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,0,3,3> E3 ## E0 ## E3 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,1,0,0> E3 ## E1 ## E0 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,1,0,1> E3 ## E1 ## E0 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,1,0,2> E3 ## E1 ## E0 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,1,0,3> E3 ## E1 ## E0 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,1,1,0> E3 ## E1 ## E1 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,1,1,1> E3 ## E1 ## E1 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,1,1,2> E3 ## E1 ## E1 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,1,1,3> E3 ## E1 ## E1 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,1,2,0> E3 ## E1 ## E2 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,1,2,1> E3 ## E1 ## E2 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,1,2,2> E3 ## E1 ## E2 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,1,2,3> E3 ## E1 ## E2 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,1,3,0> E3 ## E1 ## E3 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,1,3,1> E3 ## E1 ## E3 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,1,3,2> E3 ## E1 ## E3 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,1,3,3> E3 ## E1 ## E3 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,2,0,0> E3 ## E2 ## E0 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,2,0,1> E3 ## E2 ## E0 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,2,0,2> E3 ## E2 ## E0 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,2,0,3> E3 ## E2 ## E0 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,2,1,0> E3 ## E2 ## E1 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,2,1,1> E3 ## E2 ## E1 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,2,1,2> E3 ## E2 ## E1 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,2,1,3> E3 ## E2 ## E1 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,2,2,0> E3 ## E2 ## E2 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,2,2,1> E3 ## E2 ## E2 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,2,2,2> E3 ## E2 ## E2 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,2,2,3> E3 ## E2 ## E2 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,2,3,0> E3 ## E2 ## E3 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,2,3,1> E3 ## E2 ## E3 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,2,3,2> E3 ## E2 ## E3 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,2,3,3> E3 ## E2 ## E3 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,3,0,0> E3 ## E3 ## E0 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,3,0,1> E3 ## E3 ## E0 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,3,0,2> E3 ## E3 ## E0 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,3,0,3> E3 ## E3 ## E0 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,3,1,0> E3 ## E3 ## E1 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,3,1,1> E3 ## E3 ## E1 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,3,1,2> E3 ## E3 ## E1 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,3,1,3> E3 ## E3 ## E1 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,3,2,0> E3 ## E3 ## E2 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,3,2,1> E3 ## E3 ## E2 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,3,2,2> E3 ## E3 ## E2 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,3,2,3> E3 ## E3 ## E2 ## E3; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,3,3,0> E3 ## E3 ## E3 ## E0; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,3,3,1> E3 ## E3 ## E3 ## E1; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,3,3,2> E3 ## E3 ## E3 ## E2; }; \
+ struct { detail::_swizzle<4, T, P, V, 3,3,3,3> E3 ## E3 ## E3 ## E3; };
diff --git a/src/third_party/glm/glm/detail/_swizzle_func.hpp b/src/third_party/glm/glm/detail/_swizzle_func.hpp
new file mode 100644
index 0000000..4b37edb
--- /dev/null
+++ b/src/third_party/glm/glm/detail/_swizzle_func.hpp
@@ -0,0 +1,696 @@
+/// @ref core
+/// @file glm/detail/_swizzle_func.hpp
+
+#pragma once
+
+#define GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B) \
+ SWIZZLED_TYPE<TMPL_TYPE, PRECISION> A ## B() CONST \
+ { \
+ return SWIZZLED_TYPE<TMPL_TYPE, PRECISION>(this->A, this->B); \
+ }
+
+#define GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C) \
+ SWIZZLED_TYPE<TMPL_TYPE, PRECISION> A ## B ## C() CONST \
+ { \
+ return SWIZZLED_TYPE<TMPL_TYPE, PRECISION>(this->A, this->B, this->C); \
+ }
+
+#define GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C, D) \
+ SWIZZLED_TYPE<TMPL_TYPE, PRECISION> A ## B ## C ## D() CONST \
+ { \
+ return SWIZZLED_TYPE<TMPL_TYPE, PRECISION>(this->A, this->B, this->C, this->D); \
+ }
+
+#define GLM_SWIZZLE_GEN_VEC2_ENTRY_DEF(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B) \
+ template <typename TMPL_TYPE> \
+ SWIZZLED_TYPE<TMPL_TYPE> CLASS_TYPE<TMPL_TYPE, PRECISION>::A ## B() CONST \
+ { \
+ return SWIZZLED_TYPE<TMPL_TYPE, PRECISION>(this->A, this->B); \
+ }
+
+#define GLM_SWIZZLE_GEN_VEC3_ENTRY_DEF(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C) \
+ template <typename TMPL_TYPE> \
+ SWIZZLED_TYPE<TMPL_TYPE> CLASS_TYPE<TMPL_TYPE, PRECISION>::A ## B ## C() CONST \
+ { \
+ return SWIZZLED_TYPE<TMPL_TYPE, PRECISION>(this->A, this->B, this->C); \
+ }
+
+#define GLM_SWIZZLE_GEN_VEC4_ENTRY_DEF(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C, D) \
+ template <typename TMPL_TYPE> \
+ SWIZZLED_TYPE<TMPL_TYPE> CLASS_TYPE<TMPL_TYPE, PRECISION>::A ## B ## C ## D() CONST \
+ { \
+ return SWIZZLED_TYPE<TMPL_TYPE, PRECISION>(this->A, this->B, this->C, this->D); \
+ }
+
+#define GLM_MUTABLE
+
+#define GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A)
+
+#define GLM_SWIZZLE_GEN_REF_FROM_VEC2(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE) \
+ GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, x, y) \
+ GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, r, g) \
+ GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, s, t)
+
+//GLM_SWIZZLE_GEN_REF_FROM_VEC2(valType, detail::vec2, detail::ref2)
+
+#define GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, C) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, C) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, A) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, B)
+
+#define GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, C, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, C, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, A, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, B, A)
+
+#define GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, A, B, C) \
+ GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C) \
+ GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C)
+
+#define GLM_SWIZZLE_GEN_REF_FROM_VEC3(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE) \
+ GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, x, y, z) \
+ GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, r, g, b) \
+ GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, s, t, p)
+
+//GLM_SWIZZLE_GEN_REF_FROM_VEC3(valType, detail::vec3, detail::ref2, detail::ref3)
+
+#define GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, C) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, D) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, C) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, D) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, A) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, B) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, D) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, D, A) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, D, B) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, D, C)
+
+#define GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, B, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, B, D) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, C, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, C, D) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, D, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, D, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, A, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, A, D) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, C, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, C, D) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, D, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, D, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, A, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, A, D) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, B, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, B, D) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, D, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, D, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, A, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, A, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, B, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, B, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, C, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, C, B)
+
+#define GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, C, B, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, C, D, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, D, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, D, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, B, D, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , A, B, C, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, C, A, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, C, D, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, D, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, D, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, A, D, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , B, A, C, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, B, A, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, B, D, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, D, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, D, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, A, D, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , C, A, B, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, C, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, C, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, A, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, A, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, B, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, , D, B, C, A)
+
+#define GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D) \
+ GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C, D) \
+ GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C, D) \
+ GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D)
+
+#define GLM_SWIZZLE_GEN_REF_FROM_VEC4(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \
+ GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y, z, w) \
+ GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g, b, a) \
+ GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t, p, q)
+
+//GLM_SWIZZLE_GEN_REF_FROM_VEC4(valType, detail::vec4, detail::ref2, detail::ref3, detail::ref4)
+
+#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B)
+
+#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B)
+
+#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, B)
+
+#define GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B) \
+ GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B) \
+ GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B)
+
+#define GLM_SWIZZLE_GEN_VEC_FROM_VEC2(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \
+ GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y) \
+ GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g) \
+ GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t)
+
+//GLM_SWIZZLE_GEN_VEC_FROM_VEC2(valType, detail::vec2, detail::vec2, detail::vec3, detail::vec4)
+
+#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C)
+
+#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C)
+
+#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, C)
+
+#define GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B, C) \
+ GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C) \
+ GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B, C)
+
+#define GLM_SWIZZLE_GEN_VEC_FROM_VEC3(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \
+ GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y, z) \
+ GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g, b) \
+ GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t, p)
+
+//GLM_SWIZZLE_GEN_VEC_FROM_VEC3(valType, detail::vec3, detail::vec2, detail::vec3, detail::vec4)
+
+#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C) \
+ GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D)
+
+#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C) \
+ GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D)
+
+#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, D) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, A) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, B) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, C) \
+ GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, D)
+
+#define GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D) \
+ GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C, D) \
+ GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C, D) \
+ GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D)
+
+#define GLM_SWIZZLE_GEN_VEC_FROM_VEC4(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \
+ GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y, z, w) \
+ GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g, b, a) \
+ GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, PRECISION, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t, p, q)
+
+//GLM_SWIZZLE_GEN_VEC_FROM_VEC4(valType, detail::vec4, detail::vec2, detail::vec3, detail::vec4)
diff --git a/src/third_party/glm/glm/detail/_vectorize.hpp b/src/third_party/glm/glm/detail/_vectorize.hpp
new file mode 100644
index 0000000..a08ed34
--- /dev/null
+++ b/src/third_party/glm/glm/detail/_vectorize.hpp
@@ -0,0 +1,131 @@
+/// @ref core
+/// @file glm/detail/_vectorize.hpp
+
+#pragma once
+
+#include "type_vec1.hpp"
+#include "type_vec2.hpp"
+#include "type_vec3.hpp"
+#include "type_vec4.hpp"
+
+namespace glm{
+namespace detail
+{
+ template <typename R, typename T, precision P, template <typename, precision> class vecType>
+ struct functor1{};
+
+ template <typename R, typename T, precision P>
+ struct functor1<R, T, P, tvec1>
+ {
+ GLM_FUNC_QUALIFIER static tvec1<R, P> call(R (*Func) (T x), tvec1<T, P> const & v)
+ {
+ return tvec1<R, P>(Func(v.x));
+ }
+ };
+
+ template <typename R, typename T, precision P>
+ struct functor1<R, T, P, tvec2>
+ {
+ GLM_FUNC_QUALIFIER static tvec2<R, P> call(R (*Func) (T x), tvec2<T, P> const & v)
+ {
+ return tvec2<R, P>(Func(v.x), Func(v.y));
+ }
+ };
+
+ template <typename R, typename T, precision P>
+ struct functor1<R, T, P, tvec3>
+ {
+ GLM_FUNC_QUALIFIER static tvec3<R, P> call(R (*Func) (T x), tvec3<T, P> const & v)
+ {
+ return tvec3<R, P>(Func(v.x), Func(v.y), Func(v.z));
+ }
+ };
+
+ template <typename R, typename T, precision P>
+ struct functor1<R, T, P, tvec4>
+ {
+ GLM_FUNC_QUALIFIER static tvec4<R, P> call(R (*Func) (T x), tvec4<T, P> const & v)
+ {
+ return tvec4<R, P>(Func(v.x), Func(v.y), Func(v.z), Func(v.w));
+ }
+ };
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ struct functor2{};
+
+ template <typename T, precision P>
+ struct functor2<T, P, tvec1>
+ {
+ GLM_FUNC_QUALIFIER static tvec1<T, P> call(T (*Func) (T x, T y), tvec1<T, P> const & a, tvec1<T, P> const & b)
+ {
+ return tvec1<T, P>(Func(a.x, b.x));
+ }
+ };
+
+ template <typename T, precision P>
+ struct functor2<T, P, tvec2>
+ {
+ GLM_FUNC_QUALIFIER static tvec2<T, P> call(T (*Func) (T x, T y), tvec2<T, P> const & a, tvec2<T, P> const & b)
+ {
+ return tvec2<T, P>(Func(a.x, b.x), Func(a.y, b.y));
+ }
+ };
+
+ template <typename T, precision P>
+ struct functor2<T, P, tvec3>
+ {
+ GLM_FUNC_QUALIFIER static tvec3<T, P> call(T (*Func) (T x, T y), tvec3<T, P> const & a, tvec3<T, P> const & b)
+ {
+ return tvec3<T, P>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z));
+ }
+ };
+
+ template <typename T, precision P>
+ struct functor2<T, P, tvec4>
+ {
+ GLM_FUNC_QUALIFIER static tvec4<T, P> call(T (*Func) (T x, T y), tvec4<T, P> const & a, tvec4<T, P> const & b)
+ {
+ return tvec4<T, P>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z), Func(a.w, b.w));
+ }
+ };
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ struct functor2_vec_sca{};
+
+ template <typename T, precision P>
+ struct functor2_vec_sca<T, P, tvec1>
+ {
+ GLM_FUNC_QUALIFIER static tvec1<T, P> call(T (*Func) (T x, T y), tvec1<T, P> const & a, T b)
+ {
+ return tvec1<T, P>(Func(a.x, b));
+ }
+ };
+
+ template <typename T, precision P>
+ struct functor2_vec_sca<T, P, tvec2>
+ {
+ GLM_FUNC_QUALIFIER static tvec2<T, P> call(T (*Func) (T x, T y), tvec2<T, P> const & a, T b)
+ {
+ return tvec2<T, P>(Func(a.x, b), Func(a.y, b));
+ }
+ };
+
+ template <typename T, precision P>
+ struct functor2_vec_sca<T, P, tvec3>
+ {
+ GLM_FUNC_QUALIFIER static tvec3<T, P> call(T (*Func) (T x, T y), tvec3<T, P> const & a, T b)
+ {
+ return tvec3<T, P>(Func(a.x, b), Func(a.y, b), Func(a.z, b));
+ }
+ };
+
+ template <typename T, precision P>
+ struct functor2_vec_sca<T, P, tvec4>
+ {
+ GLM_FUNC_QUALIFIER static tvec4<T, P> call(T (*Func) (T x, T y), tvec4<T, P> const & a, T b)
+ {
+ return tvec4<T, P>(Func(a.x, b), Func(a.y, b), Func(a.z, b), Func(a.w, b));
+ }
+ };
+}//namespace detail
+}//namespace glm
diff --git a/src/third_party/glm/glm/detail/dummy.cpp b/src/third_party/glm/glm/detail/dummy.cpp
new file mode 100644
index 0000000..a519a6d
--- /dev/null
+++ b/src/third_party/glm/glm/detail/dummy.cpp
@@ -0,0 +1,207 @@
+/// @ref core
+/// @file glm/core/dummy.cpp
+///
+/// GLM is a header only library. There is nothing to compile.
+/// dummy.cpp exist only a wordaround for CMake file.
+
+/*
+#define GLM_MESSAGES
+#include <glm/glm.hpp>
+#include <glm/ext.hpp>
+#include <limits>
+
+struct material
+{
+ glm::vec4 emission; // Ecm
+ glm::vec4 ambient; // Acm
+ glm::vec4 diffuse; // Dcm
+ glm::vec4 specular; // Scm
+ float shininess; // Srm
+};
+
+struct light
+{
+ glm::vec4 ambient; // Acli
+ glm::vec4 diffuse; // Dcli
+ glm::vec4 specular; // Scli
+ glm::vec4 position; // Ppli
+ glm::vec4 halfVector; // Derived: Hi
+ glm::vec3 spotDirection; // Sdli
+ float spotExponent; // Srli
+ float spotCutoff; // Crli
+ // (range: [0.0,90.0], 180.0)
+ float spotCosCutoff; // Derived: cos(Crli)
+ // (range: [1.0,0.0],-1.0)
+ float constantAttenuation; // K0
+ float linearAttenuation; // K1
+ float quadraticAttenuation;// K2
+};
+
+
+// Sample 1
+#include <glm/vec3.hpp>// glm::vec3
+#include <glm/geometric.hpp>// glm::cross, glm::normalize
+
+glm::vec3 computeNormal
+(
+ glm::vec3 const & a,
+ glm::vec3 const & b,
+ glm::vec3 const & c
+)
+{
+ return glm::normalize(glm::cross(c - a, b - a));
+}
+
+typedef unsigned int GLuint;
+#define GL_FALSE 0
+void glUniformMatrix4fv(GLuint, int, int, float*){}
+
+// Sample 2
+#include <glm/vec3.hpp> // glm::vec3
+#include <glm/vec4.hpp> // glm::vec4, glm::ivec4
+#include <glm/mat4x4.hpp> // glm::mat4
+#include <glm/gtc/matrix_transform.hpp> // glm::translate, glm::rotate, glm::scale, glm::perspective
+#include <glm/gtc/type_ptr.hpp> // glm::value_ptr
+void func(GLuint LocationMVP, float Translate, glm::vec2 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), glm::vec3(0.0f, 0.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(LocationMVP, 1, GL_FALSE, glm::value_ptr(MVP));
+}
+
+// Sample 3
+#include <glm/vec2.hpp>// glm::vec2
+#include <glm/packing.hpp>// glm::packUnorm2x16
+#include <glm/integer.hpp>// glm::uint
+#include <glm/gtc/type_precision.hpp>// glm::i8vec2, glm::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::uint);
+glm::uint const PositionDataF16[VertexCount] =
+{
+ glm::uint(glm::packUnorm2x16(glm::vec2(-1.0f, -1.0f))),
+ glm::uint(glm::packUnorm2x16(glm::vec2( 1.0f, -1.0f))),
+ glm::uint(glm::packUnorm2x16(glm::vec2( 1.0f, 1.0f))),
+ glm::uint(glm::packUnorm2x16(glm::vec2(-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)
+};
+
+struct intersection
+{
+ glm::vec4 position;
+ glm::vec3 normal;
+};
+*/
+
+
+/*
+// Sample 4
+#include <glm/vec3.hpp>// glm::vec3
+#include <glm/geometric.hpp>// glm::normalize, glm::dot, glm::reflect
+#include <glm/exponential.hpp>// glm::pow
+#include <glm/gtc/random.hpp>// glm::vecRand3
+glm::vec3 lighting
+(
+ intersection const & Intersection,
+ material const & Material,
+ light const & Light,
+ glm::vec3 const & View
+)
+{
+ glm::vec3 Color(0.0f);
+ glm::vec3 LightVertor(glm::normalize(
+ Light.position - Intersection.position +
+ glm::vecRand3(0.0f, Light.inaccuracy));
+
+ if(!shadow(Intersection.position, 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(
+ glm::normalize(-LightVector),
+ glm::normalize(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;
+}
+*/
+
+/*
+template <typename T, glm::precision P, template<typename, glm::precision> class vecType>
+T normalizeDotA(vecType<T, P> const & x, vecType<T, P> const & y)
+{
+ return glm::dot(x, y) * glm::inversesqrt(glm::dot(x, x) * glm::dot(y, y));
+}
+
+#define GLM_TEMPLATE_GENTYPE typename T, glm::precision P, template<typename, glm::precision> class
+
+template <GLM_TEMPLATE_GENTYPE vecType>
+T normalizeDotB(vecType<T, P> const & x, vecType<T, P> const & y)
+{
+ return glm::dot(x, y) * glm::inversesqrt(glm::dot(x, x) * glm::dot(y, y));
+}
+
+template <typename vecType>
+typename vecType::value_type normalizeDotC(vecType const & a, vecType const & b)
+{
+ return glm::dot(a, b) * glm::inversesqrt(glm::dot(a, a) * glm::dot(b, b));
+}
+*/
+int main()
+{
+/*
+ glm::vec1 o(1);
+ glm::vec2 a(1);
+ glm::vec3 b(1);
+ glm::vec4 c(1);
+
+ glm::quat q;
+ glm::dualquat p;
+
+ glm::mat4 m(1);
+
+ float a0 = normalizeDotA(a, a);
+ float b0 = normalizeDotB(b, b);
+ float c0 = normalizeDotC(c, c);
+*/
+ return 0;
+}
diff --git a/src/third_party/glm/glm/detail/func_common.hpp b/src/third_party/glm/glm/detail/func_common.hpp
new file mode 100644
index 0000000..871fed6
--- /dev/null
+++ b/src/third_party/glm/glm/detail/func_common.hpp
@@ -0,0 +1,427 @@
+/// @ref core
+/// @file glm/detail/func_common.hpp
+///
+/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+///
+/// @defgroup core_func_common Common functions
+/// @ingroup core
+///
+/// These all operate component-wise. The description is per component.
+
+#pragma once
+
+#include "setup.hpp"
+#include "precision.hpp"
+#include "type_int.hpp"
+#include "_fixes.hpp"
+
+namespace glm
+{
+ /// @addtogroup core_func_common
+ /// @{
+
+ /// Returns x if x >= 0; otherwise, it returns -x.
+ ///
+ /// @tparam genType floating-point or signed integer; scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/abs.xml">GLSL abs man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType abs(genType x);
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> abs(vecType<T, P> const & x);
+
+ /// Returns 1.0 if x > 0, 0.0 if x == 0, or -1.0 if x < 0.
+ ///
+ /// @tparam genType Floating-point or signed integer; scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/sign.xml">GLSL sign man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> sign(vecType<T, P> const & x);
+
+ /// Returns a value equal to the nearest integer that is less then or equal to x.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/floor.xml">GLSL floor man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> floor(vecType<T, P> const & x);
+
+ /// Returns a value equal to the nearest integer to x
+ /// whose absolute value is not larger than the absolute value of x.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/trunc.xml">GLSL trunc man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> trunc(vecType<T, P> const & x);
+
+ /// Returns a value equal to the nearest integer to x.
+ /// The fraction 0.5 will round in a direction chosen by the
+ /// implementation, presumably the direction that is fastest.
+ /// This includes the possibility that round(x) returns the
+ /// same value as roundEven(x) for all values of x.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/round.xml">GLSL round man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> round(vecType<T, P> const & x);
+
+ /// Returns a value equal to the nearest integer to x.
+ /// A fractional part of 0.5 will round toward the nearest even
+ /// integer. (Both 3.5 and 4.5 for x will return 4.0.)
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/roundEven.xml">GLSL roundEven man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ /// @see <a href="http://developer.amd.com/documentation/articles/pages/New-Round-to-Even-Technique.aspx">New round to even technique</a>
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> roundEven(vecType<T, P> const & x);
+
+ /// Returns a value equal to the nearest integer
+ /// that is greater than or equal to x.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/ceil.xml">GLSL ceil man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> ceil(vecType<T, P> const & x);
+
+ /// Return x - floor(x).
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/fract.xml">GLSL fract man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType fract(genType x);
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> fract(vecType<T, P> const & x);
+
+ /// Modulus. Returns x - y * floor(x / y)
+ /// for each component in x using the floating point value y.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/mod.xml">GLSL mod man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType mod(genType x, genType y);
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> mod(vecType<T, P> const & x, T y);
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> mod(vecType<T, P> const & x, vecType<T, P> const & y);
+
+ /// Returns the fractional part of x and sets i to the integer
+ /// part (as a whole number floating point value). Both the
+ /// return value and the output parameter will have the same
+ /// sign as x.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/modf.xml">GLSL modf man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType modf(genType x, genType & i);
+
+ /// Returns y if y < x; otherwise, it returns x.
+ ///
+ /// @tparam genType Floating-point or integer; scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/min.xml">GLSL min man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType min(genType x, genType y);
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> min(vecType<T, P> const & x, T y);
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> min(vecType<T, P> const & x, vecType<T, P> const & y);
+
+ /// Returns y if x < y; otherwise, it returns x.
+ ///
+ /// @tparam genType Floating-point or integer; scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/max.xml">GLSL max man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType max(genType x, genType y);
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> max(vecType<T, P> const & x, T y);
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> max(vecType<T, P> const & x, vecType<T, P> const & y);
+
+ /// Returns min(max(x, minVal), maxVal) for each component in x
+ /// using the floating-point values minVal and maxVal.
+ ///
+ /// @tparam genType Floating-point or integer; scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/clamp.xml">GLSL clamp man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType clamp(genType x, genType minVal, genType maxVal);
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> clamp(vecType<T, P> const & x, T minVal, T maxVal);
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> clamp(vecType<T, P> const & x, vecType<T, P> const & minVal, vecType<T, P> const & maxVal);
+
+ /// If genTypeU is a floating scalar or vector:
+ /// Returns x * (1.0 - a) + y * a, i.e., the linear blend of
+ /// x and y using the floating-point value a.
+ /// The value for a is not restricted to the range [0, 1].
+ ///
+ /// If genTypeU is a boolean scalar or vector:
+ /// Selects which vector each returned component comes
+ /// from. For a component of <a> that is false, the
+ /// corresponding component of x is returned. For a
+ /// component of a that is true, the corresponding
+ /// component of y is returned. Components of x and y that
+ /// are not selected are allowed to be invalid floating point
+ /// values and will have no effect on the results. Thus, this
+ /// provides different functionality than
+ /// genType mix(genType x, genType y, genType(a))
+ /// where a is a Boolean vector.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/mix.xml">GLSL mix man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ ///
+ /// @param[in] x Value to interpolate.
+ /// @param[in] y Value to interpolate.
+ /// @param[in] a Interpolant.
+ ///
+ /// @tparam genTypeT Floating point scalar or vector.
+ /// @tparam genTypeU Floating point or boolean scalar or vector. It can't be a vector if it is the length of genTypeT.
+ ///
+ /// @code
+ /// #include <glm/glm.hpp>
+ /// ...
+ /// float a;
+ /// bool b;
+ /// glm::dvec3 e;
+ /// glm::dvec3 f;
+ /// glm::vec4 g;
+ /// glm::vec4 h;
+ /// ...
+ /// glm::vec4 r = glm::mix(g, h, a); // Interpolate with a floating-point scalar two vectors.
+ /// glm::vec4 s = glm::mix(g, h, b); // Teturns g or h;
+ /// glm::dvec3 t = glm::mix(e, f, a); // Types of the third parameter is not required to match with the first and the second.
+ /// glm::vec4 u = glm::mix(g, h, r); // Interpolations can be perform per component with a vector for the last parameter.
+ /// @endcode
+ template <typename T, typename U, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> mix(vecType<T, P> const & x, vecType<T, P> const & y, vecType<U, P> const & a);
+
+ template <typename T, typename U, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> mix(vecType<T, P> const & x, vecType<T, P> const & y, U a);
+
+ template <typename genTypeT, typename genTypeU>
+ GLM_FUNC_DECL genTypeT mix(genTypeT x, genTypeT y, genTypeU a);
+
+ /// Returns 0.0 if x < edge, otherwise it returns 1.0 for each component of a genType.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/step.xml">GLSL step man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType step(genType edge, genType x);
+
+ /// Returns 0.0 if x < edge, otherwise it returns 1.0.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/step.xml">GLSL step man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <template <typename, precision> class vecType, typename T, precision P>
+ GLM_FUNC_DECL vecType<T, P> step(T edge, vecType<T, P> const & x);
+
+ /// Returns 0.0 if x < edge, otherwise it returns 1.0.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/step.xml">GLSL step man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <template <typename, precision> class vecType, typename T, precision P>
+ GLM_FUNC_DECL vecType<T, P> step(vecType<T, P> const & edge, vecType<T, P> const & x);
+
+ /// Returns 0.0 if x <= edge0 and 1.0 if x >= edge1 and
+ /// performs smooth Hermite interpolation between 0 and 1
+ /// when edge0 < x < edge1. This is useful in cases where
+ /// you would want a threshold function with a smooth
+ /// transition. This is equivalent to:
+ /// genType t;
+ /// t = clamp ((x - edge0) / (edge1 - edge0), 0, 1);
+ /// return t * t * (3 - 2 * t);
+ /// Results are undefined if edge0 >= edge1.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/smoothstep.xml">GLSL smoothstep man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType smoothstep(genType edge0, genType edge1, genType x);
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> smoothstep(T edge0, T edge1, vecType<T, P> const & x);
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> smoothstep(vecType<T, P> const & edge0, vecType<T, P> const & edge1, vecType<T, P> const & x);
+
+ /// Returns true if x holds a NaN (not a number)
+ /// representation in the underlying implementation's set of
+ /// floating point representations. Returns false otherwise,
+ /// including for implementations with no NaN
+ /// representations.
+ ///
+ /// /!\ When using compiler fast math, this function may fail.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/isnan.xml">GLSL isnan man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<bool, P> isnan(vecType<T, P> const & x);
+
+ /// Returns true if x holds a positive infinity or negative
+ /// infinity representation in the underlying implementation's
+ /// set of floating point representations. Returns false
+ /// otherwise, including for implementations with no infinity
+ /// representations.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/isinf.xml">GLSL isinf man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<bool, P> isinf(vecType<T, P> const & x);
+
+ /// Returns a signed integer value representing
+ /// the encoding of a floating-point value. The floating-point
+ /// value's bit-level representation is preserved.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/floatBitsToInt.xml">GLSL floatBitsToInt man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ GLM_FUNC_DECL int floatBitsToInt(float const & v);
+
+ /// Returns a signed integer value representing
+ /// the encoding of a floating-point value. The floatingpoint
+ /// value's bit-level representation is preserved.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/floatBitsToInt.xml">GLSL floatBitsToInt man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <template <typename, precision> class vecType, precision P>
+ GLM_FUNC_DECL vecType<int, P> floatBitsToInt(vecType<float, P> const & v);
+
+ /// Returns a unsigned integer value representing
+ /// the encoding of a floating-point value. The floatingpoint
+ /// value's bit-level representation is preserved.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/floatBitsToUint.xml">GLSL floatBitsToUint man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ GLM_FUNC_DECL uint floatBitsToUint(float const & v);
+
+ /// Returns a unsigned integer value representing
+ /// the encoding of a floating-point value. The floatingpoint
+ /// value's bit-level representation is preserved.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/floatBitsToUint.xml">GLSL floatBitsToUint man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <template <typename, precision> class vecType, precision P>
+ GLM_FUNC_DECL vecType<uint, P> floatBitsToUint(vecType<float, P> const & v);
+
+ /// Returns a floating-point value corresponding to a signed
+ /// integer encoding of a floating-point value.
+ /// If an inf or NaN is passed in, it will not signal, and the
+ /// resulting floating point value is unspecified. Otherwise,
+ /// the bit-level representation is preserved.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/intBitsToFloat.xml">GLSL intBitsToFloat man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ GLM_FUNC_DECL float intBitsToFloat(int const & v);
+
+ /// Returns a floating-point value corresponding to a signed
+ /// integer encoding of a floating-point value.
+ /// If an inf or NaN is passed in, it will not signal, and the
+ /// resulting floating point value is unspecified. Otherwise,
+ /// the bit-level representation is preserved.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/intBitsToFloat.xml">GLSL intBitsToFloat man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <template <typename, precision> class vecType, precision P>
+ GLM_FUNC_DECL vecType<float, P> intBitsToFloat(vecType<int, P> const & v);
+
+ /// Returns a floating-point value corresponding to a
+ /// unsigned integer encoding of a floating-point value.
+ /// If an inf or NaN is passed in, it will not signal, and the
+ /// resulting floating point value is unspecified. Otherwise,
+ /// the bit-level representation is preserved.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/uintBitsToFloat.xml">GLSL uintBitsToFloat man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ GLM_FUNC_DECL float uintBitsToFloat(uint const & v);
+
+ /// Returns a floating-point value corresponding to a
+ /// unsigned integer encoding of a floating-point value.
+ /// If an inf or NaN is passed in, it will not signal, and the
+ /// resulting floating point value is unspecified. Otherwise,
+ /// the bit-level representation is preserved.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/uintBitsToFloat.xml">GLSL uintBitsToFloat man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <template <typename, precision> class vecType, precision P>
+ GLM_FUNC_DECL vecType<float, P> uintBitsToFloat(vecType<uint, P> const & v);
+
+ /// Computes and returns a * b + c.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/fma.xml">GLSL fma man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType fma(genType const & a, genType const & b, genType const & c);
+
+ /// Splits x into a floating-point significand in the range
+ /// [0.5, 1.0) and an integral exponent of two, such that:
+ /// x = significand * exp(2, exponent)
+ ///
+ /// The significand is returned by the function and the
+ /// exponent is returned in the parameter exp. For a
+ /// floating-point value of zero, the significant and exponent
+ /// are both zero. For a floating-point value that is an
+ /// infinity or is not a number, the results are undefined.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/frexp.xml">GLSL frexp man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <typename genType, typename genIType>
+ GLM_FUNC_DECL genType frexp(genType const & x, genIType & exp);
+
+ /// Builds a floating-point number from x and the
+ /// corresponding integral exponent of two in exp, returning:
+ /// significand * exp(2, exponent)
+ ///
+ /// If this product is too large to be represented in the
+ /// floating-point type, the result is undefined.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/ldexp.xml">GLSL ldexp man page</a>;
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <typename genType, typename genIType>
+ GLM_FUNC_DECL genType ldexp(genType const & x, genIType const & exp);
+
+ /// @}
+}//namespace glm
+
+#include "func_common.inl"
+
diff --git a/src/third_party/glm/glm/detail/func_common.inl b/src/third_party/glm/glm/detail/func_common.inl
new file mode 100644
index 0000000..6c39092
--- /dev/null
+++ b/src/third_party/glm/glm/detail/func_common.inl
@@ -0,0 +1,848 @@
+/// @ref core
+/// @file glm/detail/func_common.inl
+
+#include "func_vector_relational.hpp"
+#include "type_vec2.hpp"
+#include "type_vec3.hpp"
+#include "type_vec4.hpp"
+#include "_vectorize.hpp"
+#include <limits>
+
+namespace glm
+{
+ // min
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType min(genType x, genType y)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559 || std::numeric_limits<genType>::is_integer, "'min' only accept floating-point or integer inputs");
+ return x < y ? x : y;
+ }
+
+ // max
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType max(genType x, genType y)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559 || std::numeric_limits<genType>::is_integer, "'max' only accept floating-point or integer inputs");
+
+ return x > y ? x : y;
+ }
+
+ // abs
+ template <>
+ GLM_FUNC_QUALIFIER int32 abs(int32 x)
+ {
+ int32 const y = x >> 31;
+ return (x ^ y) - y;
+ }
+
+ // round
+# if GLM_HAS_CXX11_STL
+ using ::std::round;
+# else
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType round(genType x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'round' only accept floating-point inputs");
+
+ return x < static_cast<genType>(0) ? static_cast<genType>(int(x - static_cast<genType>(0.5))) : static_cast<genType>(int(x + static_cast<genType>(0.5)));
+ }
+# endif
+
+ // trunc
+# if GLM_HAS_CXX11_STL
+ using ::std::trunc;
+# else
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType trunc(genType x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'trunc' only accept floating-point inputs");
+
+ return x < static_cast<genType>(0) ? -std::floor(-x) : std::floor(x);
+ }
+# endif
+
+}//namespace glm
+
+namespace glm{
+namespace detail
+{
+ template <typename genFIType, bool /*signed*/>
+ struct compute_abs
+ {};
+
+ template <typename genFIType>
+ struct compute_abs<genFIType, true>
+ {
+ GLM_FUNC_QUALIFIER static genFIType call(genFIType x)
+ {
+ GLM_STATIC_ASSERT(
+ std::numeric_limits<genFIType>::is_iec559 || std::numeric_limits<genFIType>::is_signed,
+ "'abs' only accept floating-point and integer scalar or vector inputs");
+
+ return x >= genFIType(0) ? x : -x;
+ // TODO, perf comp with: *(((int *) &x) + 1) &= 0x7fffffff;
+ }
+ };
+
+ #if GLM_COMPILER & GLM_COMPILER_CUDA
+ template <>
+ struct compute_abs<float, true>
+ {
+ GLM_FUNC_QUALIFIER static float call(float x)
+ {
+ return fabsf(x);
+ }
+ };
+ #endif
+
+ template <typename genFIType>
+ struct compute_abs<genFIType, false>
+ {
+ GLM_FUNC_QUALIFIER static genFIType call(genFIType x)
+ {
+ GLM_STATIC_ASSERT(
+ !std::numeric_limits<genFIType>::is_signed && std::numeric_limits<genFIType>::is_integer,
+ "'abs' only accept floating-point and integer scalar or vector inputs");
+ return x;
+ }
+ };
+
+ template <typename T, precision P, template <typename, precision> class vecType, bool Aligned>
+ struct compute_abs_vector
+ {
+ GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x)
+ {
+ return detail::functor1<T, T, P, vecType>::call(abs, x);
+ }
+ };
+
+ template <typename T, typename U, precision P, template <typename, precision> class vecType, bool Aligned>
+ struct compute_mix_vector
+ {
+ GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x, vecType<T, P> const & y, vecType<U, P> const & a)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<U>::is_iec559, "'mix' only accept floating-point inputs for the interpolator a");
+
+ return vecType<T, P>(vecType<U, P>(x) + a * vecType<U, P>(y - x));
+ }
+ };
+
+ template <typename T, precision P, template <typename, precision> class vecType, bool Aligned>
+ struct compute_mix_vector<T, bool, P, vecType, Aligned>
+ {
+ GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x, vecType<T, P> const & y, vecType<bool, P> const & a)
+ {
+ vecType<T, P> Result(uninitialize);
+ for(length_t i = 0; i < x.length(); ++i)
+ Result[i] = a[i] ? y[i] : x[i];
+ return Result;
+ }
+ };
+
+ template <typename T, typename U, precision P, template <typename, precision> class vecType, bool Aligned>
+ struct compute_mix_scalar
+ {
+ GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x, vecType<T, P> const & y, U const & a)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<U>::is_iec559, "'mix' only accept floating-point inputs for the interpolator a");
+
+ return vecType<T, P>(vecType<U, P>(x) + a * vecType<U, P>(y - x));
+ }
+ };
+
+ template <typename T, precision P, template <typename, precision> class vecType, bool Aligned>
+ struct compute_mix_scalar<T, bool, P, vecType, Aligned>
+ {
+ GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x, vecType<T, P> const & y, bool const & a)
+ {
+ return a ? y : x;
+ }
+ };
+
+ template <typename T, typename U>
+ struct compute_mix
+ {
+ GLM_FUNC_QUALIFIER static T call(T const & x, T const & y, U const & a)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<U>::is_iec559, "'mix' only accept floating-point inputs for the interpolator a");
+
+ return static_cast<T>(static_cast<U>(x) + a * static_cast<U>(y - x));
+ }
+ };
+
+ template <typename T>
+ struct compute_mix<T, bool>
+ {
+ GLM_FUNC_QUALIFIER static T call(T const & x, T const & y, bool const & a)
+ {
+ return a ? y : x;
+ }
+ };
+
+ template <typename T, precision P, template <typename, precision> class vecType, bool isFloat, bool Aligned>
+ struct compute_sign
+ {
+ GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x)
+ {
+ return vecType<T, P>(glm::lessThan(vecType<T, P>(0), x)) - vecType<T, P>(glm::lessThan(x, vecType<T, P>(0)));
+ }
+ };
+
+# if GLM_ARCH == GLM_ARCH_X86
+ template <typename T, precision P, template <typename, precision> class vecType, bool Aligned>
+ struct compute_sign<T, P, vecType, false, Aligned>
+ {
+ GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x)
+ {
+ T const Shift(static_cast<T>(sizeof(T) * 8 - 1));
+ vecType<T, P> const y(vecType<typename make_unsigned<T>::type, P>(-x) >> typename make_unsigned<T>::type(Shift));
+
+ return (x >> Shift) | y;
+ }
+ };
+# endif
+
+ template <typename T, precision P, template <typename, precision> class vecType, bool Aligned>
+ struct compute_floor
+ {
+ GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x)
+ {
+ return detail::functor1<T, T, P, vecType>::call(std::floor, x);
+ }
+ };
+
+ template <typename T, precision P, template <typename, precision> class vecType, bool Aligned>
+ struct compute_ceil
+ {
+ GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x)
+ {
+ return detail::functor1<T, T, P, vecType>::call(std::ceil, x);
+ }
+ };
+
+ template <typename T, precision P, template <typename, precision> class vecType, bool Aligned>
+ struct compute_fract
+ {
+ GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x)
+ {
+ return x - floor(x);
+ }
+ };
+
+ template <typename T, precision P, template <typename, precision> class vecType, bool Aligned>
+ struct compute_trunc
+ {
+ GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x)
+ {
+ return detail::functor1<T, T, P, vecType>::call(trunc, x);
+ }
+ };
+
+ template <typename T, precision P, template <typename, precision> class vecType, bool Aligned>
+ struct compute_round
+ {
+ GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x)
+ {
+ return detail::functor1<T, T, P, vecType>::call(round, x);
+ }
+ };
+
+ template <typename T, precision P, template <typename, precision> class vecType, bool Aligned>
+ struct compute_mod
+ {
+ GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & a, vecType<T, P> const & b)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'mod' only accept floating-point inputs. Include <glm/gtc/integer.hpp> for integer inputs.");
+ return a - b * floor(a / b);
+ }
+ };
+
+ template <typename T, precision P, template <typename, precision> class vecType, bool Aligned>
+ struct compute_min_vector
+ {
+ GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x, vecType<T, P> const & y)
+ {
+ return detail::functor2<T, P, vecType>::call(min, x, y);
+ }
+ };
+
+ template <typename T, precision P, template <typename, precision> class vecType, bool Aligned>
+ struct compute_max_vector
+ {
+ GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x, vecType<T, P> const & y)
+ {
+ return detail::functor2<T, P, vecType>::call(max, x, y);
+ }
+ };
+
+ template <typename T, precision P, template <typename, precision> class vecType, bool Aligned>
+ struct compute_clamp_vector
+ {
+ GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x, vecType<T, P> const & minVal, vecType<T, P> const & maxVal)
+ {
+ return min(max(x, minVal), maxVal);
+ }
+ };
+
+ template <typename T, precision P, template <typename, precision> class vecType, bool Aligned>
+ struct compute_step_vector
+ {
+ GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & edge, vecType<T, P> const & x)
+ {
+ return mix(vecType<T, P>(1), vecType<T, P>(0), glm::lessThan(x, edge));
+ }
+ };
+
+ template <typename T, precision P, template <typename, precision> class vecType, bool Aligned>
+ struct compute_smoothstep_vector
+ {
+ GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & edge0, vecType<T, P> const & edge1, vecType<T, P> const & x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'step' only accept floating-point inputs");
+ vecType<T, P> const tmp(clamp((x - edge0) / (edge1 - edge0), static_cast<T>(0), static_cast<T>(1)));
+ return tmp * tmp * (static_cast<T>(3) - static_cast<T>(2) * tmp);
+ }
+ };
+}//namespace detail
+
+ template <typename genFIType>
+ GLM_FUNC_QUALIFIER genFIType abs(genFIType x)
+ {
+ return detail::compute_abs<genFIType, std::numeric_limits<genFIType>::is_signed>::call(x);
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> abs(vecType<T, P> const & x)
+ {
+ return detail::compute_abs_vector<T, P, vecType, detail::is_aligned<P>::value>::call(x);
+ }
+
+ // sign
+ // fast and works for any type
+ template <typename genFIType>
+ GLM_FUNC_QUALIFIER genFIType sign(genFIType x)
+ {
+ GLM_STATIC_ASSERT(
+ std::numeric_limits<genFIType>::is_iec559 || (std::numeric_limits<genFIType>::is_signed && std::numeric_limits<genFIType>::is_integer),
+ "'sign' only accept signed inputs");
+
+ return detail::compute_sign<genFIType, defaultp, tvec1, std::numeric_limits<genFIType>::is_iec559, highp>::call(tvec1<genFIType>(x)).x;
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> sign(vecType<T, P> const & x)
+ {
+ GLM_STATIC_ASSERT(
+ std::numeric_limits<T>::is_iec559 || (std::numeric_limits<T>::is_signed && std::numeric_limits<T>::is_integer),
+ "'sign' only accept signed inputs");
+
+ return detail::compute_sign<T, P, vecType, std::numeric_limits<T>::is_iec559, detail::is_aligned<P>::value>::call(x);
+ }
+
+ // floor
+ using ::std::floor;
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> floor(vecType<T, P> const & x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'floor' only accept floating-point inputs.");
+ return detail::compute_floor<T, P, vecType, detail::is_aligned<P>::value>::call(x);
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> trunc(vecType<T, P> const & x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'trunc' only accept floating-point inputs");
+ return detail::compute_trunc<T, P, vecType, detail::is_aligned<P>::value>::call(x);
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> round(vecType<T, P> const & x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'round' only accept floating-point inputs");
+ return detail::compute_round<T, P, vecType, detail::is_aligned<P>::value>::call(x);
+ }
+
+/*
+ // roundEven
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType roundEven(genType const& x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'roundEven' only accept floating-point inputs");
+
+ return genType(int(x + genType(int(x) % 2)));
+ }
+*/
+
+ // roundEven
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType roundEven(genType x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'roundEven' only accept floating-point inputs");
+
+ int Integer = static_cast<int>(x);
+ genType IntegerPart = static_cast<genType>(Integer);
+ genType FractionalPart = fract(x);
+
+ if(FractionalPart > static_cast<genType>(0.5) || FractionalPart < static_cast<genType>(0.5))
+ {
+ return round(x);
+ }
+ else if((Integer % 2) == 0)
+ {
+ return IntegerPart;
+ }
+ else if(x <= static_cast<genType>(0)) // Work around...
+ {
+ return IntegerPart - static_cast<genType>(1);
+ }
+ else
+ {
+ return IntegerPart + static_cast<genType>(1);
+ }
+ //else // Bug on MinGW 4.5.2
+ //{
+ // return mix(IntegerPart + genType(-1), IntegerPart + genType(1), x <= genType(0));
+ //}
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> roundEven(vecType<T, P> const & x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'roundEven' only accept floating-point inputs");
+ return detail::functor1<T, T, P, vecType>::call(roundEven, x);
+ }
+
+ // ceil
+ using ::std::ceil;
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> ceil(vecType<T, P> const & x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'ceil' only accept floating-point inputs");
+ return detail::compute_ceil<T, P, vecType, detail::is_aligned<P>::value>::call(x);
+ }
+
+ // fract
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType fract(genType x)
+ {
+ return fract(tvec1<genType>(x)).x;
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> fract(vecType<T, P> const & x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'fract' only accept floating-point inputs");
+ return detail::compute_fract<T, P, vecType, detail::is_aligned<P>::value>::call(x);
+ }
+
+ // mod
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType mod(genType x, genType y)
+ {
+# if GLM_COMPILER & GLM_COMPILER_CUDA
+ // Another Cuda compiler bug https://github.com/g-truc/glm/issues/530
+ tvec1<genType, defaultp> Result(mod(tvec1<genType, defaultp>(x), y));
+ return Result.x;
+# else
+ return mod(tvec1<genType, defaultp>(x), y).x;
+# endif
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> mod(vecType<T, P> const & x, T y)
+ {
+ return detail::compute_mod<T, P, vecType, detail::is_aligned<P>::value>::call(x, vecType<T, P>(y));
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> mod(vecType<T, P> const & x, vecType<T, P> const & y)
+ {
+ return detail::compute_mod<T, P, vecType, detail::is_aligned<P>::value>::call(x, y);
+ }
+
+ // modf
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType modf(genType x, genType & i)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'modf' only accept floating-point inputs");
+ return std::modf(x, &i);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec1<T, P> modf(tvec1<T, P> const & x, tvec1<T, P> & i)
+ {
+ return tvec1<T, P>(
+ modf(x.x, i.x));
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> modf(tvec2<T, P> const & x, tvec2<T, P> & i)
+ {
+ return tvec2<T, P>(
+ modf(x.x, i.x),
+ modf(x.y, i.y));
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> modf(tvec3<T, P> const & x, tvec3<T, P> & i)
+ {
+ return tvec3<T, P>(
+ modf(x.x, i.x),
+ modf(x.y, i.y),
+ modf(x.z, i.z));
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> modf(tvec4<T, P> const & x, tvec4<T, P> & i)
+ {
+ return tvec4<T, P>(
+ modf(x.x, i.x),
+ modf(x.y, i.y),
+ modf(x.z, i.z),
+ modf(x.w, i.w));
+ }
+
+ //// Only valid if (INT_MIN <= x-y <= INT_MAX)
+ //// min(x,y)
+ //r = y + ((x - y) & ((x - y) >> (sizeof(int) *
+ //CHAR_BIT - 1)));
+ //// max(x,y)
+ //r = x - ((x - y) & ((x - y) >> (sizeof(int) *
+ //CHAR_BIT - 1)));
+
+ // min
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> min(vecType<T, P> const & a, T b)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'min' only accept floating-point inputs for the interpolator a");
+ return detail::compute_min_vector<T, P, vecType, detail::is_aligned<P>::value>::call(a, vecType<T, P>(b));
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> min(vecType<T, P> const & a, vecType<T, P> const & b)
+ {
+ return detail::compute_min_vector<T, P, vecType, detail::is_aligned<P>::value>::call(a, b);
+ }
+
+ // max
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> max(vecType<T, P> const & a, T b)
+ {
+ return detail::compute_max_vector<T, P, vecType, detail::is_aligned<P>::value>::call(a, vecType<T, P>(b));
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> max(vecType<T, P> const & a, vecType<T, P> const & b)
+ {
+ return detail::compute_max_vector<T, P, vecType, detail::is_aligned<P>::value>::call(a, b);
+ }
+
+ // clamp
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType clamp(genType x, genType minVal, genType maxVal)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559 || std::numeric_limits<genType>::is_integer, "'clamp' only accept floating-point or integer inputs");
+ return min(max(x, minVal), maxVal);
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> clamp(vecType<T, P> const & x, T minVal, T maxVal)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || std::numeric_limits<T>::is_integer, "'clamp' only accept floating-point or integer inputs");
+ return detail::compute_clamp_vector<T, P, vecType, detail::is_aligned<P>::value>::call(x, vecType<T, P>(minVal), vecType<T, P>(maxVal));
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> clamp(vecType<T, P> const & x, vecType<T, P> const & minVal, vecType<T, P> const & maxVal)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || std::numeric_limits<T>::is_integer, "'clamp' only accept floating-point or integer inputs");
+ return detail::compute_clamp_vector<T, P, vecType, detail::is_aligned<P>::value>::call(x, minVal, maxVal);
+ }
+
+ template <typename genTypeT, typename genTypeU>
+ GLM_FUNC_QUALIFIER genTypeT mix(genTypeT x, genTypeT y, genTypeU a)
+ {
+ return detail::compute_mix<genTypeT, genTypeU>::call(x, y, a);
+ }
+
+ template <typename T, typename U, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> mix(vecType<T, P> const & x, vecType<T, P> const & y, U a)
+ {
+ return detail::compute_mix_scalar<T, U, P, vecType, detail::is_aligned<P>::value>::call(x, y, a);
+ }
+
+ template <typename T, typename U, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> mix(vecType<T, P> const & x, vecType<T, P> const & y, vecType<U, P> const & a)
+ {
+ return detail::compute_mix_vector<T, U, P, vecType, detail::is_aligned<P>::value>::call(x, y, a);
+ }
+
+ // step
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType step(genType edge, genType x)
+ {
+ return mix(static_cast<genType>(1), static_cast<genType>(0), glm::lessThan(x, edge));
+ }
+
+ template <template <typename, precision> class vecType, typename T, precision P>
+ GLM_FUNC_QUALIFIER vecType<T, P> step(T edge, vecType<T, P> const & x)
+ {
+ return detail::compute_step_vector<T, P, vecType, detail::is_aligned<P>::value>::call(vecType<T, P>(edge), x);
+ }
+
+ template <template <typename, precision> class vecType, typename T, precision P>
+ GLM_FUNC_QUALIFIER vecType<T, P> step(vecType<T, P> const & edge, vecType<T, P> const & x)
+ {
+ return detail::compute_step_vector<T, P, vecType, detail::is_aligned<P>::value>::call(edge, x);
+ }
+
+ // smoothstep
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType smoothstep(genType edge0, genType edge1, genType x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'smoothstep' only accept floating-point inputs");
+
+ genType const tmp(clamp((x - edge0) / (edge1 - edge0), genType(0), genType(1)));
+ return tmp * tmp * (genType(3) - genType(2) * tmp);
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> smoothstep(T edge0, T edge1, vecType<T, P> const & x)
+ {
+ return detail::compute_smoothstep_vector<T, P, vecType, detail::is_aligned<P>::value>::call(vecType<T, P>(edge0), vecType<T, P>(edge1), x);
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> smoothstep(vecType<T, P> const & edge0, vecType<T, P> const & edge1, vecType<T, P> const & x)
+ {
+ return detail::compute_smoothstep_vector<T, P, vecType, detail::is_aligned<P>::value>::call(edge0, edge1, x);
+ }
+
+# if GLM_HAS_CXX11_STL
+ using std::isnan;
+# else
+ template <typename genType>
+ GLM_FUNC_QUALIFIER bool isnan(genType x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'isnan' only accept floating-point inputs");
+
+# if GLM_HAS_CXX11_STL
+ return std::isnan(x);
+# elif GLM_COMPILER & GLM_COMPILER_VC
+ return _isnan(x) != 0;
+# elif GLM_COMPILER & GLM_COMPILER_INTEL
+# if GLM_PLATFORM & GLM_PLATFORM_WINDOWS
+ return _isnan(x) != 0;
+# else
+ return ::isnan(x) != 0;
+# endif
+# elif (GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG)) && (GLM_PLATFORM & GLM_PLATFORM_ANDROID) && __cplusplus < 201103L
+ return _isnan(x) != 0;
+# elif GLM_COMPILER & GLM_COMPILER_CUDA
+ return isnan(x) != 0;
+# else
+ return std::isnan(x);
+# endif
+ }
+# endif
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<bool, P> isnan(vecType<T, P> const & x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'isnan' only accept floating-point inputs");
+
+ return detail::functor1<bool, T, P, vecType>::call(isnan, x);
+ }
+
+# if GLM_HAS_CXX11_STL
+ using std::isinf;
+# else
+ template <typename genType>
+ GLM_FUNC_QUALIFIER bool isinf(genType x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'isinf' only accept floating-point inputs");
+
+# if GLM_HAS_CXX11_STL
+ return std::isinf(x);
+# elif GLM_COMPILER & (GLM_COMPILER_INTEL | GLM_COMPILER_VC)
+# if(GLM_PLATFORM & GLM_PLATFORM_WINDOWS)
+ return _fpclass(x) == _FPCLASS_NINF || _fpclass(x) == _FPCLASS_PINF;
+# else
+ return ::isinf(x);
+# endif
+# elif GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG)
+# if(GLM_PLATFORM & GLM_PLATFORM_ANDROID && __cplusplus < 201103L)
+ return _isinf(x) != 0;
+# else
+ return std::isinf(x);
+# endif
+# elif GLM_COMPILER & GLM_COMPILER_CUDA
+ // http://developer.download.nvidia.com/compute/cuda/4_2/rel/toolkit/docs/online/group__CUDA__MATH__DOUBLE_g13431dd2b40b51f9139cbb7f50c18fab.html#g13431dd2b40b51f9139cbb7f50c18fab
+ return isinf(double(x)) != 0;
+# else
+ return std::isinf(x);
+# endif
+ }
+# endif
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<bool, P> isinf(vecType<T, P> const & x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'isnan' only accept floating-point inputs");
+
+ return detail::functor1<bool, T, P, vecType>::call(isinf, x);
+ }
+
+ GLM_FUNC_QUALIFIER int floatBitsToInt(float const & v)
+ {
+ return reinterpret_cast<int&>(const_cast<float&>(v));
+ }
+
+ template <template <typename, precision> class vecType, precision P>
+ GLM_FUNC_QUALIFIER vecType<int, P> floatBitsToInt(vecType<float, P> const & v)
+ {
+ return reinterpret_cast<vecType<int, P>&>(const_cast<vecType<float, P>&>(v));
+ }
+
+ GLM_FUNC_QUALIFIER uint floatBitsToUint(float const & v)
+ {
+ return reinterpret_cast<uint&>(const_cast<float&>(v));
+ }
+
+ template <template <typename, precision> class vecType, precision P>
+ GLM_FUNC_QUALIFIER vecType<uint, P> floatBitsToUint(vecType<float, P> const & v)
+ {
+ return reinterpret_cast<vecType<uint, P>&>(const_cast<vecType<float, P>&>(v));
+ }
+
+ GLM_FUNC_QUALIFIER float intBitsToFloat(int const & v)
+ {
+ return reinterpret_cast<float&>(const_cast<int&>(v));
+ }
+
+ template <template <typename, precision> class vecType, precision P>
+ GLM_FUNC_QUALIFIER vecType<float, P> intBitsToFloat(vecType<int, P> const & v)
+ {
+ return reinterpret_cast<vecType<float, P>&>(const_cast<vecType<int, P>&>(v));
+ }
+
+ GLM_FUNC_QUALIFIER float uintBitsToFloat(uint const & v)
+ {
+ return reinterpret_cast<float&>(const_cast<uint&>(v));
+ }
+
+ template <template <typename, precision> class vecType, precision P>
+ GLM_FUNC_QUALIFIER vecType<float, P> uintBitsToFloat(vecType<uint, P> const & v)
+ {
+ return reinterpret_cast<vecType<float, P>&>(const_cast<vecType<uint, P>&>(v));
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType fma(genType const & a, genType const & b, genType const & c)
+ {
+ return a * b + c;
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType frexp(genType x, int & exp)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'frexp' only accept floating-point inputs");
+
+ return std::frexp(x, &exp);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec1<T, P> frexp(tvec1<T, P> const & x, tvec1<int, P> & exp)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'frexp' only accept floating-point inputs");
+
+ return tvec1<T, P>(std::frexp(x.x, &exp.x));
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> frexp(tvec2<T, P> const & x, tvec2<int, P> & exp)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'frexp' only accept floating-point inputs");
+
+ return tvec2<T, P>(
+ frexp(x.x, exp.x),
+ frexp(x.y, exp.y));
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> frexp(tvec3<T, P> const & x, tvec3<int, P> & exp)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'frexp' only accept floating-point inputs");
+
+ return tvec3<T, P>(
+ frexp(x.x, exp.x),
+ frexp(x.y, exp.y),
+ frexp(x.z, exp.z));
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> frexp(tvec4<T, P> const & x, tvec4<int, P> & exp)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'frexp' only accept floating-point inputs");
+
+ return tvec4<T, P>(
+ frexp(x.x, exp.x),
+ frexp(x.y, exp.y),
+ frexp(x.z, exp.z),
+ frexp(x.w, exp.w));
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType ldexp(genType const & x, int const & exp)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'ldexp' only accept floating-point inputs");
+
+ return std::ldexp(x, exp);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec1<T, P> ldexp(tvec1<T, P> const & x, tvec1<int, P> const & exp)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'ldexp' only accept floating-point inputs");
+
+ return tvec1<T, P>(
+ ldexp(x.x, exp.x));
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> ldexp(tvec2<T, P> const & x, tvec2<int, P> const & exp)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'ldexp' only accept floating-point inputs");
+
+ return tvec2<T, P>(
+ ldexp(x.x, exp.x),
+ ldexp(x.y, exp.y));
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> ldexp(tvec3<T, P> const & x, tvec3<int, P> const & exp)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'ldexp' only accept floating-point inputs");
+
+ return tvec3<T, P>(
+ ldexp(x.x, exp.x),
+ ldexp(x.y, exp.y),
+ ldexp(x.z, exp.z));
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> ldexp(tvec4<T, P> const & x, tvec4<int, P> const & exp)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'ldexp' only accept floating-point inputs");
+
+ return tvec4<T, P>(
+ ldexp(x.x, exp.x),
+ ldexp(x.y, exp.y),
+ ldexp(x.z, exp.z),
+ ldexp(x.w, exp.w));
+ }
+}//namespace glm
+
+#if GLM_ARCH != GLM_ARCH_PURE && GLM_HAS_UNRESTRICTED_UNIONS
+# include "func_common_simd.inl"
+#endif
diff --git a/src/third_party/glm/glm/detail/func_common_simd.inl b/src/third_party/glm/glm/detail/func_common_simd.inl
new file mode 100644
index 0000000..c76f180
--- /dev/null
+++ b/src/third_party/glm/glm/detail/func_common_simd.inl
@@ -0,0 +1,231 @@
+/// @ref core
+/// @file glm/detail/func_common_simd.inl
+
+#if GLM_ARCH & GLM_ARCH_SSE2_BIT
+
+#include "../simd/common.h"
+
+#include <immintrin.h>
+
+namespace glm{
+namespace detail
+{
+ template <precision P>
+ struct compute_abs_vector<float, P, tvec4, true>
+ {
+ GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const & v)
+ {
+ tvec4<float, P> result(uninitialize);
+ result.data = glm_vec4_abs(v.data);
+ return result;
+ }
+ };
+
+ template <precision P>
+ struct compute_abs_vector<int, P, tvec4, true>
+ {
+ GLM_FUNC_QUALIFIER static tvec4<int, P> call(tvec4<int, P> const & v)
+ {
+ tvec4<int, P> result(uninitialize);
+ result.data = glm_ivec4_abs(v.data);
+ return result;
+ }
+ };
+
+ template <precision P>
+ struct compute_floor<float, P, tvec4, true>
+ {
+ GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const & v)
+ {
+ tvec4<float, P> result(uninitialize);
+ result.data = glm_vec4_floor(v.data);
+ return result;
+ }
+ };
+
+ template <precision P>
+ struct compute_ceil<float, P, tvec4, true>
+ {
+ GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const & v)
+ {
+ tvec4<float, P> result(uninitialize);
+ result.data = glm_vec4_ceil(v.data);
+ return result;
+ }
+ };
+
+ template <precision P>
+ struct compute_fract<float, P, tvec4, true>
+ {
+ GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const & v)
+ {
+ tvec4<float, P> result(uninitialize);
+ result.data = glm_vec4_fract(v.data);
+ return result;
+ }
+ };
+
+ template <precision P>
+ struct compute_round<float, P, tvec4, true>
+ {
+ GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const & v)
+ {
+ tvec4<float, P> result(uninitialize);
+ result.data = glm_vec4_round(v.data);
+ return result;
+ }
+ };
+
+ template <precision P>
+ struct compute_mod<float, P, tvec4, true>
+ {
+ GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const & x, tvec4<float, P> const & y)
+ {
+ tvec4<float, P> result(uninitialize);
+ result.data = glm_vec4_mod(x.data, y.data);
+ return result;
+ }
+ };
+
+ template <precision P>
+ struct compute_min_vector<float, P, tvec4, true>
+ {
+ GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const & v1, tvec4<float, P> const & v2)
+ {
+ tvec4<float, P> result(uninitialize);
+ result.data = _mm_min_ps(v1.data, v2.data);
+ return result;
+ }
+ };
+
+ template <precision P>
+ struct compute_min_vector<int32, P, tvec4, true>
+ {
+ GLM_FUNC_QUALIFIER static tvec4<int32, P> call(tvec4<int32, P> const & v1, tvec4<int32, P> const & v2)
+ {
+ tvec4<int32, P> result(uninitialize);
+ result.data = _mm_min_epi32(v1.data, v2.data);
+ return result;
+ }
+ };
+
+ template <precision P>
+ struct compute_min_vector<uint32, P, tvec4, true>
+ {
+ GLM_FUNC_QUALIFIER static tvec4<int32, P> call(tvec4<uint32, P> const & v1, tvec4<uint32, P> const & v2)
+ {
+ tvec4<uint32, P> result(uninitialize);
+ result.data = _mm_min_epu32(v1.data, v2.data);
+ return result;
+ }
+ };
+
+ template <precision P>
+ struct compute_max_vector<float, P, tvec4, true>
+ {
+ GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const & v1, tvec4<float, P> const & v2)
+ {
+ tvec4<float, P> result(uninitialize);
+ result.data = _mm_max_ps(v1.data, v2.data);
+ return result;
+ }
+ };
+
+ template <precision P>
+ struct compute_max_vector<int32, P, tvec4, true>
+ {
+ GLM_FUNC_QUALIFIER static tvec4<int32, P> call(tvec4<int32, P> const & v1, tvec4<int32, P> const & v2)
+ {
+ tvec4<int32, P> result(uninitialize);
+ result.data = _mm_max_epi32(v1.data, v2.data);
+ return result;
+ }
+ };
+
+ template <precision P>
+ struct compute_max_vector<uint32, P, tvec4, true>
+ {
+ GLM_FUNC_QUALIFIER static tvec4<uint32, P> call(tvec4<uint32, P> const & v1, tvec4<uint32, P> const & v2)
+ {
+ tvec4<uint32, P> result(uninitialize);
+ result.data = _mm_max_epu32(v1.data, v2.data);
+ return result;
+ }
+ };
+
+ template <precision P>
+ struct compute_clamp_vector<float, P, tvec4, true>
+ {
+ GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const & x, tvec4<float, P> const & minVal, tvec4<float, P> const & maxVal)
+ {
+ tvec4<float, P> result(uninitialize);
+ result.data = _mm_min_ps(_mm_max_ps(x.data, minVal.data), maxVal.data);
+ return result;
+ }
+ };
+
+ template <precision P>
+ struct compute_clamp_vector<int32, P, tvec4, true>
+ {
+ GLM_FUNC_QUALIFIER static tvec4<int32, P> call(tvec4<int32, P> const & x, tvec4<int32, P> const & minVal, tvec4<int32, P> const & maxVal)
+ {
+ tvec4<int32, P> result(uninitialize);
+ result.data = _mm_min_epi32(_mm_max_epi32(x.data, minVal.data), maxVal.data);
+ return result;
+ }
+ };
+
+ template <precision P>
+ struct compute_clamp_vector<uint32, P, tvec4, true>
+ {
+ GLM_FUNC_QUALIFIER static tvec4<uint32, P> call(tvec4<uint32, P> const & x, tvec4<uint32, P> const & minVal, tvec4<uint32, P> const & maxVal)
+ {
+ tvec4<uint32, P> result(uninitialize);
+ result.data = _mm_min_epu32(_mm_max_epu32(x.data, minVal.data), maxVal.data);
+ return result;
+ }
+ };
+
+ template <precision P>
+ struct compute_mix_vector<float, bool, P, tvec4, true>
+ {
+ GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const & x, tvec4<float, P> const & y, tvec4<bool, P> const & a)
+ {
+ __m128i const Load = _mm_set_epi32(-(int)a.w, -(int)a.z, -(int)a.y, -(int)a.x);
+ __m128 const Mask = _mm_castsi128_ps(Load);
+
+ tvec4<float, P> Result(uninitialize);
+# if 0 && GLM_ARCH & GLM_ARCH_AVX
+ Result.data = _mm_blendv_ps(x.data, y.data, Mask);
+# else
+ Result.data = _mm_or_ps(_mm_and_ps(Mask, y.data), _mm_andnot_ps(Mask, x.data));
+# endif
+ return Result;
+ }
+ };
+/* FIXME
+ template <precision P>
+ struct compute_step_vector<float, P, tvec4>
+ {
+ GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const& edge, tvec4<float, P> const& x)
+ {
+ tvec4<float, P> result(uninitialize);
+ result.data = glm_vec4_step(edge.data, x.data);
+ return result;
+ }
+ };
+*/
+ template <precision P>
+ struct compute_smoothstep_vector<float, P, tvec4, true>
+ {
+ GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const& edge0, tvec4<float, P> const& edge1, tvec4<float, P> const& x)
+ {
+ tvec4<float, P> result(uninitialize);
+ result.data = glm_vec4_smoothstep(edge0.data, edge1.data, x.data);
+ return result;
+ }
+ };
+}//namespace detail
+}//namespace glm
+
+#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT
diff --git a/src/third_party/glm/glm/detail/func_exponential.hpp b/src/third_party/glm/glm/detail/func_exponential.hpp
new file mode 100644
index 0000000..a83de0b
--- /dev/null
+++ b/src/third_party/glm/glm/detail/func_exponential.hpp
@@ -0,0 +1,103 @@
+/// @ref core
+/// @file glm/detail/func_exponential.hpp
+///
+/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a>
+///
+/// @defgroup core_func_exponential Exponential functions
+/// @ingroup core
+///
+/// These all operate component-wise. The description is per component.
+
+#pragma once
+
+#include "type_vec1.hpp"
+#include "type_vec2.hpp"
+#include "type_vec3.hpp"
+#include "type_vec4.hpp"
+#include <cmath>
+
+namespace glm
+{
+ /// @addtogroup core_func_exponential
+ /// @{
+
+ /// Returns 'base' raised to the power 'exponent'.
+ ///
+ /// @param base Floating point value. pow function is defined for input values of 'base' defined in the range (inf-, inf+) in the limit of the type precision.
+ /// @param exponent Floating point value representing the 'exponent'.
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/pow.xml">GLSL pow man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a>
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> pow(vecType<T, P> const & base, vecType<T, P> const & exponent);
+
+ /// Returns the natural exponentiation of x, i.e., e^x.
+ ///
+ /// @param v exp function is defined for input values of v defined in the range (inf-, inf+) in the limit of the type precision.
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/exp.xml">GLSL exp man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a>
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> exp(vecType<T, P> const & v);
+
+ /// Returns the natural logarithm of v, i.e.,
+ /// returns the value y which satisfies the equation x = e^y.
+ /// Results are undefined if v <= 0.
+ ///
+ /// @param v log function is defined for input values of v defined in the range (0, inf+) in the limit of the type precision.
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/log.xml">GLSL log man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a>
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> log(vecType<T, P> const & v);
+
+ /// Returns 2 raised to the v power.
+ ///
+ /// @param v exp2 function is defined for input values of v defined in the range (inf-, inf+) in the limit of the type precision.
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/exp2.xml">GLSL exp2 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a>
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> exp2(vecType<T, P> const & v);
+
+ /// Returns the base 2 log of x, i.e., returns the value y,
+ /// which satisfies the equation x = 2 ^ y.
+ ///
+ /// @param v log2 function is defined for input values of v defined in the range (0, inf+) in the limit of the type precision.
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/log2.xml">GLSL log2 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a>
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> log2(vecType<T, P> const & v);
+
+ /// Returns the positive square root of v.
+ ///
+ /// @param v sqrt function is defined for input values of v defined in the range [0, inf+) in the limit of the type precision.
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/sqrt.xml">GLSL sqrt man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a>
+ //template <typename genType>
+ //GLM_FUNC_DECL genType sqrt(genType const & x);
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> sqrt(vecType<T, P> const & v);
+
+ /// Returns the reciprocal of the positive square root of v.
+ ///
+ /// @param v inversesqrt function is defined for input values of v defined in the range [0, inf+) in the limit of the type precision.
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/inversesqrt.xml">GLSL inversesqrt man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a>
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> inversesqrt(vecType<T, P> const & v);
+
+ /// @}
+}//namespace glm
+
+#include "func_exponential.inl"
diff --git a/src/third_party/glm/glm/detail/func_exponential.inl b/src/third_party/glm/glm/detail/func_exponential.inl
new file mode 100644
index 0000000..227fe91
--- /dev/null
+++ b/src/third_party/glm/glm/detail/func_exponential.inl
@@ -0,0 +1,146 @@
+/// @ref core
+/// @file glm/detail/func_exponential.inl
+
+#include "func_vector_relational.hpp"
+#include "_vectorize.hpp"
+#include <limits>
+#include <cmath>
+#include <cassert>
+
+namespace glm{
+namespace detail
+{
+# if GLM_HAS_CXX11_STL
+ using std::log2;
+# else
+ template <typename genType>
+ genType log2(genType Value)
+ {
+ return std::log(Value) * static_cast<genType>(1.4426950408889634073599246810019);
+ }
+# endif
+
+ template <typename T, precision P, template <class, precision> class vecType, bool isFloat, bool Aligned>
+ struct compute_log2
+ {
+ GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & vec)
+ {
+ return detail::functor1<T, T, P, vecType>::call(log2, vec);
+ }
+ };
+
+ template <template <class, precision> class vecType, typename T, precision P, bool Aligned>
+ struct compute_sqrt
+ {
+ GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x)
+ {
+ return detail::functor1<T, T, P, vecType>::call(std::sqrt, x);
+ }
+ };
+
+ template <template <class, precision> class vecType, typename T, precision P, bool Aligned>
+ struct compute_inversesqrt
+ {
+ GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x)
+ {
+ return static_cast<T>(1) / sqrt(x);
+ }
+ };
+
+ template <template <class, precision> class vecType, bool Aligned>
+ struct compute_inversesqrt<vecType, float, lowp, Aligned>
+ {
+ GLM_FUNC_QUALIFIER static vecType<float, lowp> call(vecType<float, lowp> const & x)
+ {
+ vecType<float, lowp> tmp(x);
+ vecType<float, lowp> xhalf(tmp * 0.5f);
+ vecType<uint, lowp>* p = reinterpret_cast<vecType<uint, lowp>*>(const_cast<vecType<float, lowp>*>(&x));
+ vecType<uint, lowp> i = vecType<uint, lowp>(0x5f375a86) - (*p >> vecType<uint, lowp>(1));
+ vecType<float, lowp>* ptmp = reinterpret_cast<vecType<float, lowp>*>(&i);
+ tmp = *ptmp;
+ tmp = tmp * (1.5f - xhalf * tmp * tmp);
+ return tmp;
+ }
+ };
+}//namespace detail
+
+ // pow
+ using std::pow;
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> pow(vecType<T, P> const & base, vecType<T, P> const & exponent)
+ {
+ return detail::functor2<T, P, vecType>::call(pow, base, exponent);
+ }
+
+ // exp
+ using std::exp;
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> exp(vecType<T, P> const & x)
+ {
+ return detail::functor1<T, T, P, vecType>::call(exp, x);
+ }
+
+ // log
+ using std::log;
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> log(vecType<T, P> const & x)
+ {
+ return detail::functor1<T, T, P, vecType>::call(log, x);
+ }
+
+ //exp2, ln2 = 0.69314718055994530941723212145818f
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType exp2(genType x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'exp2' only accept floating-point inputs");
+
+ return std::exp(static_cast<genType>(0.69314718055994530941723212145818) * x);
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> exp2(vecType<T, P> const & x)
+ {
+ return detail::functor1<T, T, P, vecType>::call(exp2, x);
+ }
+
+ // log2, ln2 = 0.69314718055994530941723212145818f
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType log2(genType x)
+ {
+ return log2(tvec1<genType>(x)).x;
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> log2(vecType<T, P> const & x)
+ {
+ return detail::compute_log2<T, P, vecType, std::numeric_limits<T>::is_iec559, detail::is_aligned<P>::value>::call(x);
+ }
+
+ // sqrt
+ using std::sqrt;
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> sqrt(vecType<T, P> const & x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'sqrt' only accept floating-point inputs");
+ return detail::compute_sqrt<vecType, T, P, detail::is_aligned<P>::value>::call(x);
+ }
+
+ // inversesqrt
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType inversesqrt(genType x)
+ {
+ return static_cast<genType>(1) / sqrt(x);
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> inversesqrt(vecType<T, P> const & x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'inversesqrt' only accept floating-point inputs");
+ return detail::compute_inversesqrt<vecType, T, P, detail::is_aligned<P>::value>::call(x);
+ }
+}//namespace glm
+
+#if GLM_ARCH != GLM_ARCH_PURE && GLM_HAS_UNRESTRICTED_UNIONS
+# include "func_exponential_simd.inl"
+#endif
+
diff --git a/src/third_party/glm/glm/detail/func_exponential_simd.inl b/src/third_party/glm/glm/detail/func_exponential_simd.inl
new file mode 100644
index 0000000..d7529ba
--- /dev/null
+++ b/src/third_party/glm/glm/detail/func_exponential_simd.inl
@@ -0,0 +1,35 @@
+/// @ref core
+/// @file glm/detail/func_exponential_simd.inl
+
+#include "../simd/exponential.h"
+
+#if GLM_ARCH & GLM_ARCH_SSE2_BIT
+
+namespace glm{
+namespace detail
+{
+ template <precision P>
+ struct compute_sqrt<tvec4, float, P, true>
+ {
+ GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const & v)
+ {
+ tvec4<float, P> result(uninitialize);
+ result.data = _mm_sqrt_ps(v.data);
+ return result;
+ }
+ };
+
+ template <>
+ struct compute_sqrt<tvec4, float, aligned_lowp, true>
+ {
+ GLM_FUNC_QUALIFIER static tvec4<float, aligned_lowp> call(tvec4<float, aligned_lowp> const & v)
+ {
+ tvec4<float, aligned_lowp> result(uninitialize);
+ result.data = glm_vec4_sqrt_lowp(v.data);
+ return result;
+ }
+ };
+}//namespace detail
+}//namespace glm
+
+#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT
diff --git a/src/third_party/glm/glm/detail/func_geometric.hpp b/src/third_party/glm/glm/detail/func_geometric.hpp
new file mode 100644
index 0000000..2f39bf5
--- /dev/null
+++ b/src/third_party/glm/glm/detail/func_geometric.hpp
@@ -0,0 +1,113 @@
+/// @ref core
+/// @file glm/detail/func_geometric.hpp
+///
+/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>
+///
+/// @defgroup core_func_geometric Geometric functions
+/// @ingroup core
+///
+/// These operate on vectors as vectors, not component-wise.
+
+#pragma once
+
+#include "type_vec3.hpp"
+
+namespace glm
+{
+ /// @addtogroup core_func_geometric
+ /// @{
+
+ /// Returns the length of x, i.e., sqrt(x * x).
+ ///
+ /// @tparam genType Floating-point vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/length.xml">GLSL length man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL T length(
+ vecType<T, P> const & x);
+
+ /// Returns the distance betwwen p0 and p1, i.e., length(p0 - p1).
+ ///
+ /// @tparam genType Floating-point vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/distance.xml">GLSL distance man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL T distance(
+ vecType<T, P> const & p0,
+ vecType<T, P> const & p1);
+
+ /// Returns the dot product of x and y, i.e., result = x * y.
+ ///
+ /// @tparam genType Floating-point vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/dot.xml">GLSL dot man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL T dot(
+ vecType<T, P> const & x,
+ vecType<T, P> const & y);
+
+ /// Returns the cross product of x and y.
+ ///
+ /// @tparam valType Floating-point scalar types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/cross.xml">GLSL cross man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> cross(
+ tvec3<T, P> const & x,
+ tvec3<T, P> const & y);
+
+ /// Returns a vector in the same direction as x but with length of 1.
+ /// According to issue 10 GLSL 1.10 specification, if length(x) == 0 then result is undefined and generate an error.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/normalize.xml">GLSL normalize man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> normalize(
+ vecType<T, P> const & x);
+
+ /// If dot(Nref, I) < 0.0, return N, otherwise, return -N.
+ ///
+ /// @tparam genType Floating-point vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/faceforward.xml">GLSL faceforward man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> faceforward(
+ vecType<T, P> const & N,
+ vecType<T, P> const & I,
+ vecType<T, P> const & Nref);
+
+ /// For the incident vector I and surface orientation N,
+ /// returns the reflection direction : result = I - 2.0 * dot(N, I) * N.
+ ///
+ /// @tparam genType Floating-point vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/reflect.xml">GLSL reflect man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL genType reflect(
+ genType const & I,
+ genType const & N);
+
+ /// For the incident vector I and surface normal N,
+ /// and the ratio of indices of refraction eta,
+ /// return the refraction vector.
+ ///
+ /// @tparam genType Floating-point vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/refract.xml">GLSL refract man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> refract(
+ vecType<T, P> const & I,
+ vecType<T, P> const & N,
+ T eta);
+
+ /// @}
+}//namespace glm
+
+#include "func_geometric.inl"
diff --git a/src/third_party/glm/glm/detail/func_geometric.inl b/src/third_party/glm/glm/detail/func_geometric.inl
new file mode 100644
index 0000000..07137c3
--- /dev/null
+++ b/src/third_party/glm/glm/detail/func_geometric.inl
@@ -0,0 +1,247 @@
+/// @ref core
+/// @file glm/detail/func_geometric.inl
+
+#include "func_exponential.hpp"
+#include "func_common.hpp"
+#include "type_vec2.hpp"
+#include "type_vec4.hpp"
+#include "type_float.hpp"
+
+namespace glm{
+namespace detail
+{
+ template <template <typename, precision> class vecType, typename T, precision P, bool Aligned>
+ struct compute_length
+ {
+ GLM_FUNC_QUALIFIER static T call(vecType<T, P> const & v)
+ {
+ return sqrt(dot(v, v));
+ }
+ };
+
+ template <template <typename, precision> class vecType, typename T, precision P, bool Aligned>
+ struct compute_distance
+ {
+ GLM_FUNC_QUALIFIER static T call(vecType<T, P> const & p0, vecType<T, P> const & p1)
+ {
+ return length(p1 - p0);
+ }
+ };
+
+ template <template <class, precision> class vecType, typename T, precision P, bool Aligned>
+ struct compute_dot{};
+
+ template <typename T, precision P, bool Aligned>
+ struct compute_dot<tvec1, T, P, Aligned>
+ {
+ GLM_FUNC_QUALIFIER static T call(tvec1<T, P> const & a, tvec1<T, P> const & b)
+ {
+ return a.x * b.x;
+ }
+ };
+
+ template <typename T, precision P, bool Aligned>
+ struct compute_dot<tvec2, T, P, Aligned>
+ {
+ GLM_FUNC_QUALIFIER static T call(tvec2<T, P> const & x, tvec2<T, P> const & y)
+ {
+ tvec2<T, P> tmp(x * y);
+ return tmp.x + tmp.y;
+ }
+ };
+
+ template <typename T, precision P, bool Aligned>
+ struct compute_dot<tvec3, T, P, Aligned>
+ {
+ GLM_FUNC_QUALIFIER static T call(tvec3<T, P> const & x, tvec3<T, P> const & y)
+ {
+ tvec3<T, P> tmp(x * y);
+ return tmp.x + tmp.y + tmp.z;
+ }
+ };
+
+ template <typename T, precision P, bool Aligned>
+ struct compute_dot<tvec4, T, P, Aligned>
+ {
+ GLM_FUNC_QUALIFIER static T call(tvec4<T, P> const & x, tvec4<T, P> const & y)
+ {
+ tvec4<T, P> tmp(x * y);
+ return (tmp.x + tmp.y) + (tmp.z + tmp.w);
+ }
+ };
+
+ template <typename T, precision P, bool Aligned>
+ struct compute_cross
+ {
+ GLM_FUNC_QUALIFIER static tvec3<T, P> call(tvec3<T, P> const & x, tvec3<T, P> const & y)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'cross' accepts only floating-point inputs");
+
+ return tvec3<T, P>(
+ x.y * y.z - y.y * x.z,
+ x.z * y.x - y.z * x.x,
+ x.x * y.y - y.x * x.y);
+ }
+ };
+
+ template <typename T, precision P, template <typename, precision> class vecType, bool Aligned>
+ struct compute_normalize
+ {
+ GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & v)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'normalize' accepts only floating-point inputs");
+
+ return v * inversesqrt(dot(v, v));
+ }
+ };
+
+ template <typename T, precision P, template <typename, precision> class vecType, bool Aligned>
+ struct compute_faceforward
+ {
+ GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & N, vecType<T, P> const & I, vecType<T, P> const & Nref)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'normalize' accepts only floating-point inputs");
+
+ return dot(Nref, I) < static_cast<T>(0) ? N : -N;
+ }
+ };
+
+ template <typename T, precision P, template <typename, precision> class vecType, bool Aligned>
+ struct compute_reflect
+ {
+ GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & I, vecType<T, P> const & N)
+ {
+ return I - N * dot(N, I) * static_cast<T>(2);
+ }
+ };
+
+ template <typename T, precision P, template <typename, precision> class vecType, bool Aligned>
+ struct compute_refract
+ {
+ GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & I, vecType<T, P> const & N, T eta)
+ {
+ T const dotValue(dot(N, I));
+ T const k(static_cast<T>(1) - eta * eta * (static_cast<T>(1) - dotValue * dotValue));
+ return (eta * I - (eta * dotValue + std::sqrt(k)) * N) * static_cast<T>(k >= static_cast<T>(0));
+ }
+ };
+}//namespace detail
+
+ // length
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType length(genType x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'length' accepts only floating-point inputs");
+
+ return abs(x);
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER T length(vecType<T, P> const & v)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'length' accepts only floating-point inputs");
+
+ return detail::compute_length<vecType, T, P, detail::is_aligned<P>::value>::call(v);
+ }
+
+ // distance
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType distance(genType const & p0, genType const & p1)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'distance' accepts only floating-point inputs");
+
+ return length(p1 - p0);
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER T distance(vecType<T, P> const & p0, vecType<T, P> const & p1)
+ {
+ return detail::compute_distance<vecType, T, P, detail::is_aligned<P>::value>::call(p0, p1);
+ }
+
+ // dot
+ template <typename T>
+ GLM_FUNC_QUALIFIER T dot(T x, T y)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'dot' accepts only floating-point inputs");
+ return x * y;
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER T dot(vecType<T, P> const & x, vecType<T, P> const & y)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'dot' accepts only floating-point inputs");
+ return detail::compute_dot<vecType, T, P, detail::is_aligned<P>::value>::call(x, y);
+ }
+
+ // cross
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> cross(tvec3<T, P> const & x, tvec3<T, P> const & y)
+ {
+ return detail::compute_cross<T, P, detail::is_aligned<P>::value>::call(x, y);
+ }
+
+ // normalize
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType normalize(genType const & x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'normalize' accepts only floating-point inputs");
+
+ return x < genType(0) ? genType(-1) : genType(1);
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> normalize(vecType<T, P> const & x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'normalize' accepts only floating-point inputs");
+
+ return detail::compute_normalize<T, P, vecType, detail::is_aligned<P>::value>::call(x);
+ }
+
+ // faceforward
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType faceforward(genType const & N, genType const & I, genType const & Nref)
+ {
+ return dot(Nref, I) < static_cast<genType>(0) ? N : -N;
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> faceforward(vecType<T, P> const & N, vecType<T, P> const & I, vecType<T, P> const & Nref)
+ {
+ return detail::compute_faceforward<T, P, vecType, detail::is_aligned<P>::value>::call(N, I, Nref);
+ }
+
+ // reflect
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType reflect(genType const & I, genType const & N)
+ {
+ return I - N * dot(N, I) * genType(2);
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> reflect(vecType<T, P> const & I, vecType<T, P> const & N)
+ {
+ return detail::compute_reflect<T, P, vecType, detail::is_aligned<P>::value>::call(I, N);
+ }
+
+ // refract
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType refract(genType const & I, genType const & N, genType eta)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'refract' accepts only floating-point inputs");
+ genType const dotValue(dot(N, I));
+ genType const k(static_cast<genType>(1) - eta * eta * (static_cast<genType>(1) - dotValue * dotValue));
+ return (eta * I - (eta * dotValue + sqrt(k)) * N) * static_cast<genType>(k >= static_cast<genType>(0));
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> refract(vecType<T, P> const & I, vecType<T, P> const & N, T eta)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'refract' accepts only floating-point inputs");
+ return detail::compute_refract<T, P, vecType, detail::is_aligned<P>::value>::call(I, N, eta);
+ }
+}//namespace glm
+
+#if GLM_ARCH != GLM_ARCH_PURE && GLM_HAS_UNRESTRICTED_UNIONS
+# include "func_geometric_simd.inl"
+#endif
diff --git a/src/third_party/glm/glm/detail/func_geometric_simd.inl b/src/third_party/glm/glm/detail/func_geometric_simd.inl
new file mode 100644
index 0000000..f0d14a2
--- /dev/null
+++ b/src/third_party/glm/glm/detail/func_geometric_simd.inl
@@ -0,0 +1,99 @@
+/// @ref core
+/// @file glm/detail/func_geometric_simd.inl
+
+#include "../simd/geometric.h"
+
+#if GLM_ARCH & GLM_ARCH_SSE2_BIT
+
+namespace glm{
+namespace detail
+{
+ template <precision P>
+ struct compute_length<tvec4, float, P, true>
+ {
+ GLM_FUNC_QUALIFIER static float call(tvec4<float, P> const & v)
+ {
+ return _mm_cvtss_f32(glm_vec4_length(v.data));
+ }
+ };
+
+ template <precision P>
+ struct compute_distance<tvec4, float, P, true>
+ {
+ GLM_FUNC_QUALIFIER static float call(tvec4<float, P> const & p0, tvec4<float, P> const & p1)
+ {
+ return _mm_cvtss_f32(glm_vec4_distance(p0.data, p1.data));
+ }
+ };
+
+ template <precision P>
+ struct compute_dot<tvec4, float, P, true>
+ {
+ GLM_FUNC_QUALIFIER static float call(tvec4<float, P> const& x, tvec4<float, P> const& y)
+ {
+ return _mm_cvtss_f32(glm_vec1_dot(x.data, y.data));
+ }
+ };
+
+ template <precision P>
+ struct compute_cross<float, P, true>
+ {
+ GLM_FUNC_QUALIFIER static tvec3<float, P> call(tvec3<float, P> const & a, tvec3<float, P> const & b)
+ {
+ __m128 const set0 = _mm_set_ps(0.0f, a.z, a.y, a.x);
+ __m128 const set1 = _mm_set_ps(0.0f, b.z, b.y, b.x);
+ __m128 const xpd0 = glm_vec4_cross(set0, set1);
+
+ tvec4<float, P> result(uninitialize);
+ result.data = xpd0;
+ return tvec3<float, P>(result);
+ }
+ };
+
+ template <precision P>
+ struct compute_normalize<float, P, tvec4, true>
+ {
+ GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const & v)
+ {
+ tvec4<float, P> result(uninitialize);
+ result.data = glm_vec4_normalize(v.data);
+ return result;
+ }
+ };
+
+ template <precision P>
+ struct compute_faceforward<float, P, tvec4, true>
+ {
+ GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const& N, tvec4<float, P> const& I, tvec4<float, P> const& Nref)
+ {
+ tvec4<float, P> result(uninitialize);
+ result.data = glm_vec4_faceforward(N.data, I.data, Nref.data);
+ return result;
+ }
+ };
+
+ template <precision P>
+ struct compute_reflect<float, P, tvec4, true>
+ {
+ GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const& I, tvec4<float, P> const& N)
+ {
+ tvec4<float, P> result(uninitialize);
+ result.data = glm_vec4_reflect(I.data, N.data);
+ return result;
+ }
+ };
+
+ template <precision P>
+ struct compute_refract<float, P, tvec4, true>
+ {
+ GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const& I, tvec4<float, P> const& N, float eta)
+ {
+ tvec4<float, P> result(uninitialize);
+ result.data = glm_vec4_refract(I.data, N.data, _mm_set1_ps(eta));
+ return result;
+ }
+ };
+}//namespace detail
+}//namespace glm
+
+#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT
diff --git a/src/third_party/glm/glm/detail/func_integer.hpp b/src/third_party/glm/glm/detail/func_integer.hpp
new file mode 100644
index 0000000..bd195a9
--- /dev/null
+++ b/src/third_party/glm/glm/detail/func_integer.hpp
@@ -0,0 +1,203 @@
+/// @ref core
+/// @file glm/detail/func_integer.hpp
+///
+/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>
+///
+/// @defgroup core_func_integer Integer functions
+/// @ingroup core
+///
+/// These all operate component-wise. The description is per component.
+/// The notation [a, b] means the set of bits from bit-number a through bit-number
+/// b, inclusive. The lowest-order bit is bit 0.
+
+#pragma once
+
+#include "setup.hpp"
+#include "precision.hpp"
+#include "func_common.hpp"
+#include "func_vector_relational.hpp"
+
+namespace glm
+{
+ /// @addtogroup core_func_integer
+ /// @{
+
+ /// Adds 32-bit unsigned integer x and y, returning the sum
+ /// modulo pow(2, 32). The value carry is set to 0 if the sum was
+ /// less than pow(2, 32), or to 1 otherwise.
+ ///
+ /// @tparam genUType Unsigned integer scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/uaddCarry.xml">GLSL uaddCarry man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>
+ template <precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<uint, P> uaddCarry(
+ vecType<uint, P> const & x,
+ vecType<uint, P> const & y,
+ vecType<uint, P> & carry);
+
+ /// Subtracts the 32-bit unsigned integer y from x, returning
+ /// the difference if non-negative, or pow(2, 32) plus the difference
+ /// otherwise. The value borrow is set to 0 if x >= y, or to 1 otherwise.
+ ///
+ /// @tparam genUType Unsigned integer scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/usubBorrow.xml">GLSL usubBorrow man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>
+ template <precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<uint, P> usubBorrow(
+ vecType<uint, P> const & x,
+ vecType<uint, P> const & y,
+ vecType<uint, P> & borrow);
+
+ /// Multiplies 32-bit integers x and y, producing a 64-bit
+ /// result. The 32 least-significant bits are returned in lsb.
+ /// The 32 most-significant bits are returned in msb.
+ ///
+ /// @tparam genUType Unsigned integer scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/umulExtended.xml">GLSL umulExtended man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>
+ template <precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL void umulExtended(
+ vecType<uint, P> const & x,
+ vecType<uint, P> const & y,
+ vecType<uint, P> & msb,
+ vecType<uint, P> & lsb);
+
+ /// Multiplies 32-bit integers x and y, producing a 64-bit
+ /// result. The 32 least-significant bits are returned in lsb.
+ /// The 32 most-significant bits are returned in msb.
+ ///
+ /// @tparam genIType Signed integer scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/imulExtended.xml">GLSL imulExtended man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>
+ template <precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL void imulExtended(
+ vecType<int, P> const & x,
+ vecType<int, P> const & y,
+ vecType<int, P> & msb,
+ vecType<int, P> & lsb);
+
+ /// Extracts bits [offset, offset + bits - 1] from value,
+ /// returning them in the least significant bits of the result.
+ /// For unsigned data types, the most significant bits of the
+ /// result will be set to zero. For signed data types, the
+ /// most significant bits will be set to the value of bit offset + base - 1.
+ ///
+ /// If bits is zero, the result will be zero. The result will be
+ /// undefined if offset or bits is negative, or if the sum of
+ /// offset and bits is greater than the number of bits used
+ /// to store the operand.
+ ///
+ /// @tparam T Signed or unsigned integer scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/bitfieldExtract.xml">GLSL bitfieldExtract man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> bitfieldExtract(
+ vecType<T, P> const & Value,
+ int Offset,
+ int Bits);
+
+ /// Returns the insertion the bits least-significant bits of insert into base.
+ ///
+ /// The result will have bits [offset, offset + bits - 1] taken
+ /// from bits [0, bits - 1] of insert, and all other bits taken
+ /// directly from the corresponding bits of base. If bits is
+ /// zero, the result will simply be base. The result will be
+ /// undefined if offset or bits is negative, or if the sum of
+ /// offset and bits is greater than the number of bits used to
+ /// store the operand.
+ ///
+ /// @tparam T Signed or unsigned integer scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/bitfieldInsert.xml">GLSL bitfieldInsert man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> bitfieldInsert(
+ vecType<T, P> const & Base,
+ vecType<T, P> const & Insert,
+ int Offset,
+ int Bits);
+
+ /// Returns the reversal of the bits of value.
+ /// The bit numbered n of the result will be taken from bit (bits - 1) - n of value,
+ /// where bits is the total number of bits used to represent value.
+ ///
+ /// @tparam T Signed or unsigned integer scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/bitfieldReverse.xml">GLSL bitfieldReverse man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> bitfieldReverse(vecType<T, P> const & v);
+
+ /// Returns the number of bits set to 1 in the binary representation of value.
+ ///
+ /// @tparam T Signed or unsigned integer scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/bitCount.xml">GLSL bitCount man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL int bitCount(genType v);
+
+ /// Returns the number of bits set to 1 in the binary representation of value.
+ ///
+ /// @tparam T Signed or unsigned integer scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/bitCount.xml">GLSL bitCount man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<int, P> bitCount(vecType<T, P> const & v);
+
+ /// Returns the bit number of the least significant bit set to
+ /// 1 in the binary representation of value.
+ /// If value is zero, -1 will be returned.
+ ///
+ /// @tparam T Signed or unsigned integer scalar types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/findLSB.xml">GLSL findLSB man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>
+ template <typename genIUType>
+ GLM_FUNC_DECL int findLSB(genIUType x);
+
+ /// Returns the bit number of the least significant bit set to
+ /// 1 in the binary representation of value.
+ /// If value is zero, -1 will be returned.
+ ///
+ /// @tparam T Signed or unsigned integer scalar types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/findLSB.xml">GLSL findLSB man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<int, P> findLSB(vecType<T, P> const & v);
+
+ /// Returns the bit number of the most significant bit in the binary representation of value.
+ /// For positive integers, the result will be the bit number of the most significant bit set to 1.
+ /// For negative integers, the result will be the bit number of the most significant
+ /// bit set to 0. For a value of zero or negative one, -1 will be returned.
+ ///
+ /// @tparam T Signed or unsigned integer scalar types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/findMSB.xml">GLSL findMSB man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>
+ template <typename genIUType>
+ GLM_FUNC_DECL int findMSB(genIUType x);
+
+ /// Returns the bit number of the most significant bit in the binary representation of value.
+ /// For positive integers, the result will be the bit number of the most significant bit set to 1.
+ /// For negative integers, the result will be the bit number of the most significant
+ /// bit set to 0. For a value of zero or negative one, -1 will be returned.
+ ///
+ /// @tparam T Signed or unsigned integer scalar types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/findMSB.xml">GLSL findMSB man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<int, P> findMSB(vecType<T, P> const & v);
+
+ /// @}
+}//namespace glm
+
+#include "func_integer.inl"
diff --git a/src/third_party/glm/glm/detail/func_integer.inl b/src/third_party/glm/glm/detail/func_integer.inl
new file mode 100644
index 0000000..47be412
--- /dev/null
+++ b/src/third_party/glm/glm/detail/func_integer.inl
@@ -0,0 +1,375 @@
+/// @ref core
+/// @file glm/detail/func_integer.inl
+
+#include "type_vec2.hpp"
+#include "type_vec3.hpp"
+#include "type_vec4.hpp"
+#include "type_int.hpp"
+#include "_vectorize.hpp"
+#if(GLM_ARCH & GLM_ARCH_X86 && GLM_COMPILER & GLM_COMPILER_VC)
+# include <intrin.h>
+# pragma intrinsic(_BitScanReverse)
+#endif//(GLM_ARCH & GLM_ARCH_X86 && GLM_COMPILER & GLM_COMPILER_VC)
+#include <limits>
+
+#if !GLM_HAS_EXTENDED_INTEGER_TYPE
+# if GLM_COMPILER & GLM_COMPILER_GCC
+# pragma GCC diagnostic ignored "-Wlong-long"
+# endif
+# if (GLM_COMPILER & GLM_COMPILER_CLANG)
+# pragma clang diagnostic ignored "-Wc++11-long-long"
+# endif
+#endif
+
+namespace glm{
+namespace detail
+{
+ template <typename T>
+ GLM_FUNC_QUALIFIER T mask(T Bits)
+ {
+ return Bits >= sizeof(T) * 8 ? ~static_cast<T>(0) : (static_cast<T>(1) << Bits) - static_cast<T>(1);
+ }
+
+ template <typename T, glm::precision P, template <typename, glm::precision> class vecType, bool Aligned, bool EXEC>
+ struct compute_bitfieldReverseStep
+ {
+ GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & v, T, T)
+ {
+ return v;
+ }
+ };
+
+ template <typename T, glm::precision P, template <typename, glm::precision> class vecType, bool Aligned>
+ struct compute_bitfieldReverseStep<T, P, vecType, Aligned, true>
+ {
+ GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & v, T Mask, T Shift)
+ {
+ return (v & Mask) << Shift | (v & (~Mask)) >> Shift;
+ }
+ };
+
+ template <typename T, glm::precision P, template <typename, glm::precision> class vecType, bool Aligned, bool EXEC>
+ struct compute_bitfieldBitCountStep
+ {
+ GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & v, T, T)
+ {
+ return v;
+ }
+ };
+
+ template <typename T, glm::precision P, template <typename, glm::precision> class vecType, bool Aligned>
+ struct compute_bitfieldBitCountStep<T, P, vecType, Aligned, true>
+ {
+ GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & v, T Mask, T Shift)
+ {
+ return (v & Mask) + ((v >> Shift) & Mask);
+ }
+ };
+
+ template <typename genIUType, size_t Bits>
+ struct compute_findLSB
+ {
+ GLM_FUNC_QUALIFIER static int call(genIUType Value)
+ {
+ if(Value == 0)
+ return -1;
+
+ return glm::bitCount(~Value & (Value - static_cast<genIUType>(1)));
+ }
+ };
+
+# if GLM_HAS_BITSCAN_WINDOWS
+ template <typename genIUType>
+ struct compute_findLSB<genIUType, 32>
+ {
+ GLM_FUNC_QUALIFIER static int call(genIUType Value)
+ {
+ unsigned long Result(0);
+ unsigned char IsNotNull = _BitScanForward(&Result, *reinterpret_cast<unsigned long*>(&Value));
+ return IsNotNull ? int(Result) : -1;
+ }
+ };
+
+# if !((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_MODEL == GLM_MODEL_32))
+ template <typename genIUType>
+ struct compute_findLSB<genIUType, 64>
+ {
+ GLM_FUNC_QUALIFIER static int call(genIUType Value)
+ {
+ unsigned long Result(0);
+ unsigned char IsNotNull = _BitScanForward64(&Result, *reinterpret_cast<unsigned __int64*>(&Value));
+ return IsNotNull ? int(Result) : -1;
+ }
+ };
+# endif
+# endif//GLM_HAS_BITSCAN_WINDOWS
+
+ template <typename T, glm::precision P, template <class, glm::precision> class vecType, bool EXEC = true>
+ struct compute_findMSB_step_vec
+ {
+ GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x, T Shift)
+ {
+ return x | (x >> Shift);
+ }
+ };
+
+ template <typename T, glm::precision P, template <typename, glm::precision> class vecType>
+ struct compute_findMSB_step_vec<T, P, vecType, false>
+ {
+ GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x, T)
+ {
+ return x;
+ }
+ };
+
+ template <typename T, glm::precision P, template <typename, glm::precision> class vecType, int>
+ struct compute_findMSB_vec
+ {
+ GLM_FUNC_QUALIFIER static vecType<int, P> call(vecType<T, P> const & vec)
+ {
+ vecType<T, P> x(vec);
+ x = compute_findMSB_step_vec<T, P, vecType, sizeof(T) * 8 >= 8>::call(x, static_cast<T>( 1));
+ x = compute_findMSB_step_vec<T, P, vecType, sizeof(T) * 8 >= 8>::call(x, static_cast<T>( 2));
+ x = compute_findMSB_step_vec<T, P, vecType, sizeof(T) * 8 >= 8>::call(x, static_cast<T>( 4));
+ x = compute_findMSB_step_vec<T, P, vecType, sizeof(T) * 8 >= 16>::call(x, static_cast<T>( 8));
+ x = compute_findMSB_step_vec<T, P, vecType, sizeof(T) * 8 >= 32>::call(x, static_cast<T>(16));
+ x = compute_findMSB_step_vec<T, P, vecType, sizeof(T) * 8 >= 64>::call(x, static_cast<T>(32));
+ return vecType<int, P>(sizeof(T) * 8 - 1) - glm::bitCount(~x);
+ }
+ };
+
+# if GLM_HAS_BITSCAN_WINDOWS
+ template <typename genIUType>
+ GLM_FUNC_QUALIFIER int compute_findMSB_32(genIUType Value)
+ {
+ unsigned long Result(0);
+ unsigned char IsNotNull = _BitScanReverse(&Result, *reinterpret_cast<unsigned long*>(&Value));
+ return IsNotNull ? int(Result) : -1;
+ }
+
+ template <typename T, glm::precision P, template<typename, glm::precision> class vecType>
+ struct compute_findMSB_vec<T, P, vecType, 32>
+ {
+ GLM_FUNC_QUALIFIER static vecType<int, P> call(vecType<T, P> const & x)
+ {
+ return detail::functor1<int, T, P, vecType>::call(compute_findMSB_32, x);
+ }
+ };
+
+# if !((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_MODEL == GLM_MODEL_32))
+ template <typename genIUType>
+ GLM_FUNC_QUALIFIER int compute_findMSB_64(genIUType Value)
+ {
+ unsigned long Result(0);
+ unsigned char IsNotNull = _BitScanReverse64(&Result, *reinterpret_cast<unsigned __int64*>(&Value));
+ return IsNotNull ? int(Result) : -1;
+ }
+
+ template <typename T, glm::precision P, template <class, glm::precision> class vecType>
+ struct compute_findMSB_vec<T, P, vecType, 64>
+ {
+ GLM_FUNC_QUALIFIER static vecType<int, P> call(vecType<T, P> const & x)
+ {
+ return detail::functor1<int, T, P, vecType>::call(compute_findMSB_64, x);
+ }
+ };
+# endif
+# endif//GLM_HAS_BITSCAN_WINDOWS
+}//namespace detail
+
+ // uaddCarry
+ GLM_FUNC_QUALIFIER uint uaddCarry(uint const & x, uint const & y, uint & Carry)
+ {
+ uint64 const Value64(static_cast<uint64>(x) + static_cast<uint64>(y));
+ uint64 const Max32((static_cast<uint64>(1) << static_cast<uint64>(32)) - static_cast<uint64>(1));
+ Carry = Value64 > Max32 ? 1u : 0u;
+ return static_cast<uint32>(Value64 % (Max32 + static_cast<uint64>(1)));
+ }
+
+ template <precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<uint, P> uaddCarry(vecType<uint, P> const & x, vecType<uint, P> const & y, vecType<uint, P> & Carry)
+ {
+ vecType<uint64, P> Value64(vecType<uint64, P>(x) + vecType<uint64, P>(y));
+ vecType<uint64, P> Max32((static_cast<uint64>(1) << static_cast<uint64>(32)) - static_cast<uint64>(1));
+ Carry = mix(vecType<uint32, P>(0), vecType<uint32, P>(1), greaterThan(Value64, Max32));
+ return vecType<uint32,P>(Value64 % (Max32 + static_cast<uint64>(1)));
+ }
+
+ // usubBorrow
+ GLM_FUNC_QUALIFIER uint usubBorrow(uint const & x, uint const & y, uint & Borrow)
+ {
+ GLM_STATIC_ASSERT(sizeof(uint) == sizeof(uint32), "uint and uint32 size mismatch");
+
+ Borrow = x >= y ? static_cast<uint32>(0) : static_cast<uint32>(1);
+ if(y >= x)
+ return y - x;
+ else
+ return static_cast<uint32>((static_cast<int64>(1) << static_cast<int64>(32)) + (static_cast<int64>(y) - static_cast<int64>(x)));
+ }
+
+ template <precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<uint, P> usubBorrow(vecType<uint, P> const & x, vecType<uint, P> const & y, vecType<uint, P> & Borrow)
+ {
+ Borrow = mix(vecType<uint, P>(1), vecType<uint, P>(0), greaterThanEqual(x, y));
+ vecType<uint, P> const YgeX(y - x);
+ vecType<uint, P> const XgeY(vecType<uint32, P>((static_cast<int64>(1) << static_cast<int64>(32)) + (vecType<int64, P>(y) - vecType<int64, P>(x))));
+ return mix(XgeY, YgeX, greaterThanEqual(y, x));
+ }
+
+ // umulExtended
+ GLM_FUNC_QUALIFIER void umulExtended(uint const & x, uint const & y, uint & msb, uint & lsb)
+ {
+ GLM_STATIC_ASSERT(sizeof(uint) == sizeof(uint32), "uint and uint32 size mismatch");
+
+ uint64 Value64 = static_cast<uint64>(x) * static_cast<uint64>(y);
+ msb = static_cast<uint>(Value64 >> static_cast<uint64>(32));
+ lsb = static_cast<uint>(Value64);
+ }
+
+ template <precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER void umulExtended(vecType<uint, P> const & x, vecType<uint, P> const & y, vecType<uint, P> & msb, vecType<uint, P> & lsb)
+ {
+ GLM_STATIC_ASSERT(sizeof(uint) == sizeof(uint32), "uint and uint32 size mismatch");
+
+ vecType<uint64, P> Value64(vecType<uint64, P>(x) * vecType<uint64, P>(y));
+ msb = vecType<uint32, P>(Value64 >> static_cast<uint64>(32));
+ lsb = vecType<uint32, P>(Value64);
+ }
+
+ // imulExtended
+ GLM_FUNC_QUALIFIER void imulExtended(int x, int y, int & msb, int & lsb)
+ {
+ GLM_STATIC_ASSERT(sizeof(int) == sizeof(int32), "int and int32 size mismatch");
+
+ int64 Value64 = static_cast<int64>(x) * static_cast<int64>(y);
+ msb = static_cast<int>(Value64 >> static_cast<int64>(32));
+ lsb = static_cast<int>(Value64);
+ }
+
+ template <precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER void imulExtended(vecType<int, P> const & x, vecType<int, P> const & y, vecType<int, P> & msb, vecType<int, P> & lsb)
+ {
+ GLM_STATIC_ASSERT(sizeof(int) == sizeof(int32), "int and int32 size mismatch");
+
+ vecType<int64, P> Value64(vecType<int64, P>(x) * vecType<int64, P>(y));
+ lsb = vecType<int32, P>(Value64 & static_cast<int64>(0xFFFFFFFF));
+ msb = vecType<int32, P>((Value64 >> static_cast<int64>(32)) & static_cast<int64>(0xFFFFFFFF));
+ }
+
+ // bitfieldExtract
+ template <typename genIUType>
+ GLM_FUNC_QUALIFIER genIUType bitfieldExtract(genIUType Value, int Offset, int Bits)
+ {
+ return bitfieldExtract(tvec1<genIUType>(Value), Offset, Bits).x;
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> bitfieldExtract(vecType<T, P> const & Value, int Offset, int Bits)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, "'bitfieldExtract' only accept integer inputs");
+
+ return (Value >> static_cast<T>(Offset)) & static_cast<T>(detail::mask(Bits));
+ }
+
+ // bitfieldInsert
+ template <typename genIUType>
+ GLM_FUNC_QUALIFIER genIUType bitfieldInsert(genIUType const & Base, genIUType const & Insert, int Offset, int Bits)
+ {
+ return bitfieldInsert(tvec1<genIUType>(Base), tvec1<genIUType>(Insert), Offset, Bits).x;
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> bitfieldInsert(vecType<T, P> const & Base, vecType<T, P> const & Insert, int Offset, int Bits)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, "'bitfieldInsert' only accept integer values");
+
+ T const Mask = static_cast<T>(detail::mask(Bits) << Offset);
+ return (Base & ~Mask) | (Insert & Mask);
+ }
+
+ // bitfieldReverse
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType bitfieldReverse(genType x)
+ {
+ return bitfieldReverse(glm::tvec1<genType, glm::defaultp>(x)).x;
+ }
+
+ template <typename T, glm::precision P, template <typename, glm::precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> bitfieldReverse(vecType<T, P> const & v)
+ {
+ vecType<T, P> x(v);
+ x = detail::compute_bitfieldReverseStep<T, P, vecType, detail::is_aligned<P>::value, sizeof(T) * 8>= 2>::call(x, T(0x5555555555555555ull), static_cast<T>( 1));
+ x = detail::compute_bitfieldReverseStep<T, P, vecType, detail::is_aligned<P>::value, sizeof(T) * 8>= 4>::call(x, T(0x3333333333333333ull), static_cast<T>( 2));
+ x = detail::compute_bitfieldReverseStep<T, P, vecType, detail::is_aligned<P>::value, sizeof(T) * 8>= 8>::call(x, T(0x0F0F0F0F0F0F0F0Full), static_cast<T>( 4));
+ x = detail::compute_bitfieldReverseStep<T, P, vecType, detail::is_aligned<P>::value, sizeof(T) * 8>= 16>::call(x, T(0x00FF00FF00FF00FFull), static_cast<T>( 8));
+ x = detail::compute_bitfieldReverseStep<T, P, vecType, detail::is_aligned<P>::value, sizeof(T) * 8>= 32>::call(x, T(0x0000FFFF0000FFFFull), static_cast<T>(16));
+ x = detail::compute_bitfieldReverseStep<T, P, vecType, detail::is_aligned<P>::value, sizeof(T) * 8>= 64>::call(x, T(0x00000000FFFFFFFFull), static_cast<T>(32));
+ return x;
+ }
+
+ // bitCount
+ template <typename genType>
+ GLM_FUNC_QUALIFIER int bitCount(genType x)
+ {
+ return bitCount(glm::tvec1<genType, glm::defaultp>(x)).x;
+ }
+
+ template <typename T, glm::precision P, template <typename, glm::precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<int, P> bitCount(vecType<T, P> const & v)
+ {
+ #if GLM_COMPILER & GLM_COMPILER_VC
+ #pragma warning(push)
+ #pragma warning(disable : 4310) //cast truncates constant value
+ #endif
+ vecType<typename detail::make_unsigned<T>::type, P> x(*reinterpret_cast<vecType<typename detail::make_unsigned<T>::type, P> const *>(&v));
+ x = detail::compute_bitfieldBitCountStep<typename detail::make_unsigned<T>::type, P, vecType, detail::is_aligned<P>::value, sizeof(T) * 8>= 2>::call(x, typename detail::make_unsigned<T>::type(0x5555555555555555ull), typename detail::make_unsigned<T>::type( 1));
+ x = detail::compute_bitfieldBitCountStep<typename detail::make_unsigned<T>::type, P, vecType, detail::is_aligned<P>::value, sizeof(T) * 8>= 4>::call(x, typename detail::make_unsigned<T>::type(0x3333333333333333ull), typename detail::make_unsigned<T>::type( 2));
+ x = detail::compute_bitfieldBitCountStep<typename detail::make_unsigned<T>::type, P, vecType, detail::is_aligned<P>::value, sizeof(T) * 8>= 8>::call(x, typename detail::make_unsigned<T>::type(0x0F0F0F0F0F0F0F0Full), typename detail::make_unsigned<T>::type( 4));
+ x = detail::compute_bitfieldBitCountStep<typename detail::make_unsigned<T>::type, P, vecType, detail::is_aligned<P>::value, sizeof(T) * 8>= 16>::call(x, typename detail::make_unsigned<T>::type(0x00FF00FF00FF00FFull), typename detail::make_unsigned<T>::type( 8));
+ x = detail::compute_bitfieldBitCountStep<typename detail::make_unsigned<T>::type, P, vecType, detail::is_aligned<P>::value, sizeof(T) * 8>= 32>::call(x, typename detail::make_unsigned<T>::type(0x0000FFFF0000FFFFull), typename detail::make_unsigned<T>::type(16));
+ x = detail::compute_bitfieldBitCountStep<typename detail::make_unsigned<T>::type, P, vecType, detail::is_aligned<P>::value, sizeof(T) * 8>= 64>::call(x, typename detail::make_unsigned<T>::type(0x00000000FFFFFFFFull), typename detail::make_unsigned<T>::type(32));
+ return vecType<int, P>(x);
+ #if GLM_COMPILER & GLM_COMPILER_VC
+ #pragma warning(pop)
+ #endif
+ }
+
+ // findLSB
+ template <typename genIUType>
+ GLM_FUNC_QUALIFIER int findLSB(genIUType Value)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, "'findLSB' only accept integer values");
+
+ return detail::compute_findLSB<genIUType, sizeof(genIUType) * 8>::call(Value);
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<int, P> findLSB(vecType<T, P> const & x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, "'findLSB' only accept integer values");
+
+ return detail::functor1<int, T, P, vecType>::call(findLSB, x);
+ }
+
+ // findMSB
+ template <typename genIUType>
+ GLM_FUNC_QUALIFIER int findMSB(genIUType x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, "'findMSB' only accept integer values");
+
+ return findMSB(tvec1<genIUType>(x)).x;
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<int, P> findMSB(vecType<T, P> const & x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, "'findMSB' only accept integer values");
+
+ return detail::compute_findMSB_vec<T, P, vecType, sizeof(T) * 8>::call(x);
+ }
+}//namespace glm
+
+#if GLM_ARCH != GLM_ARCH_PURE && GLM_HAS_UNRESTRICTED_UNIONS
+# include "func_integer_simd.inl"
+#endif
+
diff --git a/src/third_party/glm/glm/detail/func_integer_simd.inl b/src/third_party/glm/glm/detail/func_integer_simd.inl
new file mode 100644
index 0000000..c79e861
--- /dev/null
+++ b/src/third_party/glm/glm/detail/func_integer_simd.inl
@@ -0,0 +1,66 @@
+/// @ref core
+/// @file glm/detail/func_integer_simd.inl
+
+#include "../simd/integer.h"
+
+#if GLM_ARCH & GLM_ARCH_SSE2_BIT
+
+namespace glm{
+namespace detail
+{
+ template <glm::precision P>
+ struct compute_bitfieldReverseStep<uint32, P, tvec4, true, true>
+ {
+ GLM_FUNC_QUALIFIER static tvec4<uint32, P> call(tvec4<uint32, P> const & v, uint32 Mask, uint32 Shift)
+ {
+ __m128i const set0 = v.data;
+
+ __m128i const set1 = _mm_set1_epi32(Mask);
+ __m128i const and1 = _mm_and_si128(set0, set1);
+ __m128i const sft1 = _mm_slli_epi32(and1, Shift);
+
+ __m128i const set2 = _mm_andnot_si128(set0, _mm_set1_epi32(-1));
+ __m128i const and2 = _mm_and_si128(set0, set2);
+ __m128i const sft2 = _mm_srai_epi32(and2, Shift);
+
+ __m128i const or0 = _mm_or_si128(sft1, sft2);
+
+ return or0;
+ }
+ };
+
+ template <glm::precision P>
+ struct compute_bitfieldBitCountStep<uint32, P, tvec4, true, true>
+ {
+ GLM_FUNC_QUALIFIER static tvec4<uint32, P> call(tvec4<uint32, P> const & v, uint32 Mask, uint32 Shift)
+ {
+ __m128i const set0 = v.data;
+
+ __m128i const set1 = _mm_set1_epi32(Mask);
+ __m128i const and0 = _mm_and_si128(set0, set1);
+ __m128i const sft0 = _mm_slli_epi32(set0, Shift);
+ __m128i const and1 = _mm_and_si128(sft0, set1);
+ __m128i const add0 = _mm_add_epi32(and0, and1);
+
+ return add0;
+ }
+ };
+}//namespace detail
+
+# if GLM_ARCH & GLM_ARCH_AVX_BIT
+ template <>
+ GLM_FUNC_QUALIFIER int bitCount(uint32 x)
+ {
+ return _mm_popcnt_u32(x);
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER int bitCount(uint64 x)
+ {
+ return static_cast<int>(_mm_popcnt_u64(x));
+ }
+# endif
+
+}//namespace glm
+
+#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT
diff --git a/src/third_party/glm/glm/detail/func_matrix.hpp b/src/third_party/glm/glm/detail/func_matrix.hpp
new file mode 100644
index 0000000..77fdb3f
--- /dev/null
+++ b/src/third_party/glm/glm/detail/func_matrix.hpp
@@ -0,0 +1,149 @@
+/// @ref core
+/// @file glm/detail/func_matrix.hpp
+///
+/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>
+///
+/// @defgroup core_func_matrix Matrix functions
+/// @ingroup core
+///
+/// For each of the following built-in matrix functions, there is both a
+/// single-precision floating point version, where all arguments and return values
+/// are single precision, and a double-precision floating version, where all
+/// arguments and return values are double precision. Only the single-precision
+/// floating point version is shown.
+
+#pragma once
+
+// Dependencies
+#include "../detail/precision.hpp"
+#include "../detail/setup.hpp"
+#include "../detail/type_mat.hpp"
+#include "../vec2.hpp"
+#include "../vec3.hpp"
+#include "../vec4.hpp"
+#include "../mat2x2.hpp"
+#include "../mat2x3.hpp"
+#include "../mat2x4.hpp"
+#include "../mat3x2.hpp"
+#include "../mat3x3.hpp"
+#include "../mat3x4.hpp"
+#include "../mat4x2.hpp"
+#include "../mat4x3.hpp"
+#include "../mat4x4.hpp"
+
+namespace glm{
+namespace detail
+{
+ template <typename T, precision P>
+ struct outerProduct_trait<T, P, tvec2, tvec2>
+ {
+ typedef tmat2x2<T, P> type;
+ };
+
+ template <typename T, precision P>
+ struct outerProduct_trait<T, P, tvec2, tvec3>
+ {
+ typedef tmat3x2<T, P> type;
+ };
+
+ template <typename T, precision P>
+ struct outerProduct_trait<T, P, tvec2, tvec4>
+ {
+ typedef tmat4x2<T, P> type;
+ };
+
+ template <typename T, precision P>
+ struct outerProduct_trait<T, P, tvec3, tvec2>
+ {
+ typedef tmat2x3<T, P> type;
+ };
+
+ template <typename T, precision P>
+ struct outerProduct_trait<T, P, tvec3, tvec3>
+ {
+ typedef tmat3x3<T, P> type;
+ };
+
+ template <typename T, precision P>
+ struct outerProduct_trait<T, P, tvec3, tvec4>
+ {
+ typedef tmat4x3<T, P> type;
+ };
+
+ template <typename T, precision P>
+ struct outerProduct_trait<T, P, tvec4, tvec2>
+ {
+ typedef tmat2x4<T, P> type;
+ };
+
+ template <typename T, precision P>
+ struct outerProduct_trait<T, P, tvec4, tvec3>
+ {
+ typedef tmat3x4<T, P> type;
+ };
+
+ template <typename T, precision P>
+ struct outerProduct_trait<T, P, tvec4, tvec4>
+ {
+ typedef tmat4x4<T, P> type;
+ };
+
+}//namespace detail
+
+ /// @addtogroup core_func_matrix
+ /// @{
+
+ /// Multiply matrix x by matrix y component-wise, i.e.,
+ /// result[i][j] is the scalar product of x[i][j] and y[i][j].
+ ///
+ /// @tparam matType Floating-point matrix types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/matrixCompMult.xml">GLSL matrixCompMult man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>
+ template <typename T, precision P, template <typename, precision> class matType>
+ GLM_FUNC_DECL matType<T, P> matrixCompMult(matType<T, P> const & x, matType<T, P> const & y);
+
+ /// Treats the first parameter c as a column vector
+ /// and the second parameter r as a row vector
+ /// and does a linear algebraic matrix multiply c * r.
+ ///
+ /// @tparam matType Floating-point matrix types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/outerProduct.xml">GLSL outerProduct man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>
+ template <typename T, precision P, template <typename, precision> class vecTypeA, template <typename, precision> class vecTypeB>
+ GLM_FUNC_DECL typename detail::outerProduct_trait<T, P, vecTypeA, vecTypeB>::type outerProduct(vecTypeA<T, P> const & c, vecTypeB<T, P> const & r);
+
+ /// Returns the transposed matrix of x
+ ///
+ /// @tparam matType Floating-point matrix types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/transpose.xml">GLSL transpose man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>
+# if((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2012))
+ template <typename T, precision P, template <typename, precision> class matType>
+ GLM_FUNC_DECL typename matType<T, P>::transpose_type transpose(matType<T, P> const & x);
+# endif
+
+ /// Return the determinant of a squared matrix.
+ ///
+ /// @tparam valType Floating-point scalar types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/determinant.xml">GLSL determinant man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>
+ template <typename T, precision P, template <typename, precision> class matType>
+ GLM_FUNC_DECL T determinant(matType<T, P> const & m);
+
+ /// Return the inverse of a squared matrix.
+ ///
+ /// @tparam valType Floating-point scalar types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/inverse.xml">GLSL inverse man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>
+ template <typename T, precision P, template <typename, precision> class matType>
+ GLM_FUNC_DECL matType<T, P> inverse(matType<T, P> const & m);
+
+ /// @}
+}//namespace glm
+
+#include "func_matrix.inl"
diff --git a/src/third_party/glm/glm/detail/func_matrix.inl b/src/third_party/glm/glm/detail/func_matrix.inl
new file mode 100644
index 0000000..fcd1de3
--- /dev/null
+++ b/src/third_party/glm/glm/detail/func_matrix.inl
@@ -0,0 +1,401 @@
+/// @ref core
+/// @file glm/detail/func_matrix.inl
+
+#include "../geometric.hpp"
+#include <limits>
+
+namespace glm{
+namespace detail
+{
+ template <template <typename, precision> class matType, typename T, precision P, bool Aligned>
+ struct compute_matrixCompMult
+ {
+ GLM_FUNC_QUALIFIER static matType<T, P> call(matType<T, P> const& x, matType<T, P> const& y)
+ {
+ matType<T, P> result(uninitialize);
+ for(length_t i = 0; i < result.length(); ++i)
+ result[i] = x[i] * y[i];
+ return result;
+ }
+ };
+
+ template <template <class, precision> class matType, typename T, precision P, bool Aligned>
+ struct compute_transpose{};
+
+ template <typename T, precision P, bool Aligned>
+ struct compute_transpose<tmat2x2, T, P, Aligned>
+ {
+ GLM_FUNC_QUALIFIER static tmat2x2<T, P> call(tmat2x2<T, P> const & m)
+ {
+ tmat2x2<T, P> result(uninitialize);
+ result[0][0] = m[0][0];
+ result[0][1] = m[1][0];
+ result[1][0] = m[0][1];
+ result[1][1] = m[1][1];
+ return result;
+ }
+ };
+
+ template <typename T, precision P, bool Aligned>
+ struct compute_transpose<tmat2x3, T, P, Aligned>
+ {
+ GLM_FUNC_QUALIFIER static tmat3x2<T, P> call(tmat2x3<T, P> const & m)
+ {
+ tmat3x2<T, P> result(uninitialize);
+ result[0][0] = m[0][0];
+ result[0][1] = m[1][0];
+ result[1][0] = m[0][1];
+ result[1][1] = m[1][1];
+ result[2][0] = m[0][2];
+ result[2][1] = m[1][2];
+ return result;
+ }
+ };
+
+ template <typename T, precision P, bool Aligned>
+ struct compute_transpose<tmat2x4, T, P, Aligned>
+ {
+ GLM_FUNC_QUALIFIER static tmat4x2<T, P> call(tmat2x4<T, P> const & m)
+ {
+ tmat4x2<T, P> result(uninitialize);
+ result[0][0] = m[0][0];
+ result[0][1] = m[1][0];
+ result[1][0] = m[0][1];
+ result[1][1] = m[1][1];
+ result[2][0] = m[0][2];
+ result[2][1] = m[1][2];
+ result[3][0] = m[0][3];
+ result[3][1] = m[1][3];
+ return result;
+ }
+ };
+
+ template <typename T, precision P, bool Aligned>
+ struct compute_transpose<tmat3x2, T, P, Aligned>
+ {
+ GLM_FUNC_QUALIFIER static tmat2x3<T, P> call(tmat3x2<T, P> const & m)
+ {
+ tmat2x3<T, P> result(uninitialize);
+ result[0][0] = m[0][0];
+ result[0][1] = m[1][0];
+ result[0][2] = m[2][0];
+ result[1][0] = m[0][1];
+ result[1][1] = m[1][1];
+ result[1][2] = m[2][1];
+ return result;
+ }
+ };
+
+ template <typename T, precision P, bool Aligned>
+ struct compute_transpose<tmat3x3, T, P, Aligned>
+ {
+ GLM_FUNC_QUALIFIER static tmat3x3<T, P> call(tmat3x3<T, P> const & m)
+ {
+ tmat3x3<T, P> result(uninitialize);
+ result[0][0] = m[0][0];
+ result[0][1] = m[1][0];
+ result[0][2] = m[2][0];
+
+ result[1][0] = m[0][1];
+ result[1][1] = m[1][1];
+ result[1][2] = m[2][1];
+
+ result[2][0] = m[0][2];
+ result[2][1] = m[1][2];
+ result[2][2] = m[2][2];
+ return result;
+ }
+ };
+
+ template <typename T, precision P, bool Aligned>
+ struct compute_transpose<tmat3x4, T, P, Aligned>
+ {
+ GLM_FUNC_QUALIFIER static tmat4x3<T, P> call(tmat3x4<T, P> const & m)
+ {
+ tmat4x3<T, P> result(uninitialize);
+ result[0][0] = m[0][0];
+ result[0][1] = m[1][0];
+ result[0][2] = m[2][0];
+ result[1][0] = m[0][1];
+ result[1][1] = m[1][1];
+ result[1][2] = m[2][1];
+ result[2][0] = m[0][2];
+ result[2][1] = m[1][2];
+ result[2][2] = m[2][2];
+ result[3][0] = m[0][3];
+ result[3][1] = m[1][3];
+ result[3][2] = m[2][3];
+ return result;
+ }
+ };
+
+ template <typename T, precision P, bool Aligned>
+ struct compute_transpose<tmat4x2, T, P, Aligned>
+ {
+ GLM_FUNC_QUALIFIER static tmat2x4<T, P> call(tmat4x2<T, P> const & m)
+ {
+ tmat2x4<T, P> result(uninitialize);
+ result[0][0] = m[0][0];
+ result[0][1] = m[1][0];
+ result[0][2] = m[2][0];
+ result[0][3] = m[3][0];
+ result[1][0] = m[0][1];
+ result[1][1] = m[1][1];
+ result[1][2] = m[2][1];
+ result[1][3] = m[3][1];
+ return result;
+ }
+ };
+
+ template <typename T, precision P, bool Aligned>
+ struct compute_transpose<tmat4x3, T, P, Aligned>
+ {
+ GLM_FUNC_QUALIFIER static tmat3x4<T, P> call(tmat4x3<T, P> const & m)
+ {
+ tmat3x4<T, P> result(uninitialize);
+ result[0][0] = m[0][0];
+ result[0][1] = m[1][0];
+ result[0][2] = m[2][0];
+ result[0][3] = m[3][0];
+ result[1][0] = m[0][1];
+ result[1][1] = m[1][1];
+ result[1][2] = m[2][1];
+ result[1][3] = m[3][1];
+ result[2][0] = m[0][2];
+ result[2][1] = m[1][2];
+ result[2][2] = m[2][2];
+ result[2][3] = m[3][2];
+ return result;
+ }
+ };
+
+ template <typename T, precision P, bool Aligned>
+ struct compute_transpose<tmat4x4, T, P, Aligned>
+ {
+ GLM_FUNC_QUALIFIER static tmat4x4<T, P> call(tmat4x4<T, P> const & m)
+ {
+ tmat4x4<T, P> result(uninitialize);
+ result[0][0] = m[0][0];
+ result[0][1] = m[1][0];
+ result[0][2] = m[2][0];
+ result[0][3] = m[3][0];
+
+ result[1][0] = m[0][1];
+ result[1][1] = m[1][1];
+ result[1][2] = m[2][1];
+ result[1][3] = m[3][1];
+
+ result[2][0] = m[0][2];
+ result[2][1] = m[1][2];
+ result[2][2] = m[2][2];
+ result[2][3] = m[3][2];
+
+ result[3][0] = m[0][3];
+ result[3][1] = m[1][3];
+ result[3][2] = m[2][3];
+ result[3][3] = m[3][3];
+ return result;
+ }
+ };
+
+ template <template <typename, precision> class matType, typename T, precision P, bool Aligned>
+ struct compute_determinant{};
+
+ template <typename T, precision P, bool Aligned>
+ struct compute_determinant<tmat2x2, T, P, Aligned>
+ {
+ GLM_FUNC_QUALIFIER static T call(tmat2x2<T, P> const & m)
+ {
+ return m[0][0] * m[1][1] - m[1][0] * m[0][1];
+ }
+ };
+
+ template <typename T, precision P, bool Aligned>
+ struct compute_determinant<tmat3x3, T, P, Aligned>
+ {
+ GLM_FUNC_QUALIFIER static T call(tmat3x3<T, P> const & m)
+ {
+ return
+ + m[0][0] * (m[1][1] * m[2][2] - m[2][1] * m[1][2])
+ - m[1][0] * (m[0][1] * m[2][2] - m[2][1] * m[0][2])
+ + m[2][0] * (m[0][1] * m[1][2] - m[1][1] * m[0][2]);
+ }
+ };
+
+ template <typename T, precision P, bool Aligned>
+ struct compute_determinant<tmat4x4, T, P, Aligned>
+ {
+ GLM_FUNC_QUALIFIER static T call(tmat4x4<T, P> const & m)
+ {
+ T SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];
+ T SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3];
+ T SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2];
+ T SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3];
+ T SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2];
+ T SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1];
+
+ tvec4<T, P> DetCof(
+ + (m[1][1] * SubFactor00 - m[1][2] * SubFactor01 + m[1][3] * SubFactor02),
+ - (m[1][0] * SubFactor00 - m[1][2] * SubFactor03 + m[1][3] * SubFactor04),
+ + (m[1][0] * SubFactor01 - m[1][1] * SubFactor03 + m[1][3] * SubFactor05),
+ - (m[1][0] * SubFactor02 - m[1][1] * SubFactor04 + m[1][2] * SubFactor05));
+
+ return
+ m[0][0] * DetCof[0] + m[0][1] * DetCof[1] +
+ m[0][2] * DetCof[2] + m[0][3] * DetCof[3];
+ }
+ };
+
+ template <template <typename, precision> class matType, typename T, precision P, bool Aligned>
+ struct compute_inverse{};
+
+ template <typename T, precision P, bool Aligned>
+ struct compute_inverse<tmat2x2, T, P, Aligned>
+ {
+ GLM_FUNC_QUALIFIER static tmat2x2<T, P> call(tmat2x2<T, P> const& m)
+ {
+ T OneOverDeterminant = static_cast<T>(1) / (
+ + m[0][0] * m[1][1]
+ - m[1][0] * m[0][1]);
+
+ tmat2x2<T, P> Inverse(
+ + m[1][1] * OneOverDeterminant,
+ - m[0][1] * OneOverDeterminant,
+ - m[1][0] * OneOverDeterminant,
+ + m[0][0] * OneOverDeterminant);
+
+ return Inverse;
+ }
+ };
+
+ template <typename T, precision P, bool Aligned>
+ struct compute_inverse<tmat3x3, T, P, Aligned>
+ {
+ GLM_FUNC_QUALIFIER static tmat3x3<T, P> call(tmat3x3<T, P> const& m)
+ {
+ T OneOverDeterminant = static_cast<T>(1) / (
+ + m[0][0] * (m[1][1] * m[2][2] - m[2][1] * m[1][2])
+ - m[1][0] * (m[0][1] * m[2][2] - m[2][1] * m[0][2])
+ + m[2][0] * (m[0][1] * m[1][2] - m[1][1] * m[0][2]));
+
+ tmat3x3<T, P> Inverse(uninitialize);
+ Inverse[0][0] = + (m[1][1] * m[2][2] - m[2][1] * m[1][2]) * OneOverDeterminant;
+ Inverse[1][0] = - (m[1][0] * m[2][2] - m[2][0] * m[1][2]) * OneOverDeterminant;
+ Inverse[2][0] = + (m[1][0] * m[2][1] - m[2][0] * m[1][1]) * OneOverDeterminant;
+ Inverse[0][1] = - (m[0][1] * m[2][2] - m[2][1] * m[0][2]) * OneOverDeterminant;
+ Inverse[1][1] = + (m[0][0] * m[2][2] - m[2][0] * m[0][2]) * OneOverDeterminant;
+ Inverse[2][1] = - (m[0][0] * m[2][1] - m[2][0] * m[0][1]) * OneOverDeterminant;
+ Inverse[0][2] = + (m[0][1] * m[1][2] - m[1][1] * m[0][2]) * OneOverDeterminant;
+ Inverse[1][2] = - (m[0][0] * m[1][2] - m[1][0] * m[0][2]) * OneOverDeterminant;
+ Inverse[2][2] = + (m[0][0] * m[1][1] - m[1][0] * m[0][1]) * OneOverDeterminant;
+
+ return Inverse;
+ }
+ };
+
+ template <typename T, precision P, bool Aligned>
+ struct compute_inverse<tmat4x4, T, P, Aligned>
+ {
+ GLM_FUNC_QUALIFIER static tmat4x4<T, P> call(tmat4x4<T, P> const& m)
+ {
+ T Coef00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];
+ T Coef02 = m[1][2] * m[3][3] - m[3][2] * m[1][3];
+ T Coef03 = m[1][2] * m[2][3] - m[2][2] * m[1][3];
+
+ T Coef04 = m[2][1] * m[3][3] - m[3][1] * m[2][3];
+ T Coef06 = m[1][1] * m[3][3] - m[3][1] * m[1][3];
+ T Coef07 = m[1][1] * m[2][3] - m[2][1] * m[1][3];
+
+ T Coef08 = m[2][1] * m[3][2] - m[3][1] * m[2][2];
+ T Coef10 = m[1][1] * m[3][2] - m[3][1] * m[1][2];
+ T Coef11 = m[1][1] * m[2][2] - m[2][1] * m[1][2];
+
+ T Coef12 = m[2][0] * m[3][3] - m[3][0] * m[2][3];
+ T Coef14 = m[1][0] * m[3][3] - m[3][0] * m[1][3];
+ T Coef15 = m[1][0] * m[2][3] - m[2][0] * m[1][3];
+
+ T Coef16 = m[2][0] * m[3][2] - m[3][0] * m[2][2];
+ T Coef18 = m[1][0] * m[3][2] - m[3][0] * m[1][2];
+ T Coef19 = m[1][0] * m[2][2] - m[2][0] * m[1][2];
+
+ T Coef20 = m[2][0] * m[3][1] - m[3][0] * m[2][1];
+ T Coef22 = m[1][0] * m[3][1] - m[3][0] * m[1][1];
+ T Coef23 = m[1][0] * m[2][1] - m[2][0] * m[1][1];
+
+ tvec4<T, P> Fac0(Coef00, Coef00, Coef02, Coef03);
+ tvec4<T, P> Fac1(Coef04, Coef04, Coef06, Coef07);
+ tvec4<T, P> Fac2(Coef08, Coef08, Coef10, Coef11);
+ tvec4<T, P> Fac3(Coef12, Coef12, Coef14, Coef15);
+ tvec4<T, P> Fac4(Coef16, Coef16, Coef18, Coef19);
+ tvec4<T, P> Fac5(Coef20, Coef20, Coef22, Coef23);
+
+ tvec4<T, P> Vec0(m[1][0], m[0][0], m[0][0], m[0][0]);
+ tvec4<T, P> Vec1(m[1][1], m[0][1], m[0][1], m[0][1]);
+ tvec4<T, P> Vec2(m[1][2], m[0][2], m[0][2], m[0][2]);
+ tvec4<T, P> Vec3(m[1][3], m[0][3], m[0][3], m[0][3]);
+
+ tvec4<T, P> Inv0(Vec1 * Fac0 - Vec2 * Fac1 + Vec3 * Fac2);
+ tvec4<T, P> Inv1(Vec0 * Fac0 - Vec2 * Fac3 + Vec3 * Fac4);
+ tvec4<T, P> Inv2(Vec0 * Fac1 - Vec1 * Fac3 + Vec3 * Fac5);
+ tvec4<T, P> Inv3(Vec0 * Fac2 - Vec1 * Fac4 + Vec2 * Fac5);
+
+ tvec4<T, P> SignA(+1, -1, +1, -1);
+ tvec4<T, P> SignB(-1, +1, -1, +1);
+ tmat4x4<T, P> Inverse(Inv0 * SignA, Inv1 * SignB, Inv2 * SignA, Inv3 * SignB);
+
+ tvec4<T, P> Row0(Inverse[0][0], Inverse[1][0], Inverse[2][0], Inverse[3][0]);
+
+ tvec4<T, P> Dot0(m[0] * Row0);
+ T Dot1 = (Dot0.x + Dot0.y) + (Dot0.z + Dot0.w);
+
+ T OneOverDeterminant = static_cast<T>(1) / Dot1;
+
+ return Inverse * OneOverDeterminant;
+ }
+ };
+}//namespace detail
+
+ template <typename T, precision P, template <typename, precision> class matType>
+ GLM_FUNC_QUALIFIER matType<T, P> matrixCompMult(matType<T, P> const & x, matType<T, P> const & y)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'matrixCompMult' only accept floating-point inputs");
+ return detail::compute_matrixCompMult<matType, T, P, detail::is_aligned<P>::value>::call(x, y);
+ }
+
+ template<typename T, precision P, template <typename, precision> class vecTypeA, template <typename, precision> class vecTypeB>
+ GLM_FUNC_QUALIFIER typename detail::outerProduct_trait<T, P, vecTypeA, vecTypeB>::type outerProduct(vecTypeA<T, P> const & c, vecTypeB<T, P> const & r)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'outerProduct' only accept floating-point inputs");
+
+ typename detail::outerProduct_trait<T, P, vecTypeA, vecTypeB>::type m(uninitialize);
+ for(length_t i = 0; i < m.length(); ++i)
+ m[i] = c * r[i];
+ return m;
+ }
+
+ template <typename T, precision P, template <typename, precision> class matType>
+ GLM_FUNC_QUALIFIER typename matType<T, P>::transpose_type transpose(matType<T, P> const & m)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'transpose' only accept floating-point inputs");
+ return detail::compute_transpose<matType, T, P, detail::is_aligned<P>::value>::call(m);
+ }
+
+ template <typename T, precision P, template <typename, precision> class matType>
+ GLM_FUNC_QUALIFIER T determinant(matType<T, P> const & m)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'determinant' only accept floating-point inputs");
+ return detail::compute_determinant<matType, T, P, detail::is_aligned<P>::value>::call(m);
+ }
+
+ template <typename T, precision P, template <typename, precision> class matType>
+ GLM_FUNC_QUALIFIER matType<T, P> inverse(matType<T, P> const & m)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'inverse' only accept floating-point inputs");
+ return detail::compute_inverse<matType, T, P, detail::is_aligned<P>::value>::call(m);
+ }
+}//namespace glm
+
+#if GLM_ARCH != GLM_ARCH_PURE && GLM_HAS_UNRESTRICTED_UNIONS
+# include "func_matrix_simd.inl"
+#endif
+
diff --git a/src/third_party/glm/glm/detail/func_matrix_simd.inl b/src/third_party/glm/glm/detail/func_matrix_simd.inl
new file mode 100644
index 0000000..61b0a5b
--- /dev/null
+++ b/src/third_party/glm/glm/detail/func_matrix_simd.inl
@@ -0,0 +1,88 @@
+/// @ref core
+/// @file glm/detail/func_matrix_simd.inl
+
+#if GLM_ARCH & GLM_ARCH_SSE2_BIT
+
+#include "type_mat4x4.hpp"
+#include "func_geometric.hpp"
+#include "../simd/matrix.h"
+
+namespace glm{
+namespace detail
+{
+ template <precision P>
+ struct compute_matrixCompMult<tmat4x4, float, P, true>
+ {
+ GLM_STATIC_ASSERT(detail::is_aligned<P>::value, "Specialization requires aligned");
+
+ GLM_FUNC_QUALIFIER static tmat4x4<float, P> call(tmat4x4<float, P> const & x, tmat4x4<float, P> const & y)
+ {
+ tmat4x4<float, P> result(uninitialize);
+ glm_mat4_matrixCompMult(
+ *(glm_vec4 const (*)[4])&x[0].data,
+ *(glm_vec4 const (*)[4])&y[0].data,
+ *(glm_vec4(*)[4])&result[0].data);
+ return result;
+ }
+ };
+
+ template <precision P>
+ struct compute_transpose<tmat4x4, float, P, true>
+ {
+ GLM_FUNC_QUALIFIER static tmat4x4<float, P> call(tmat4x4<float, P> const & m)
+ {
+ tmat4x4<float, P> result(uninitialize);
+ glm_mat4_transpose(
+ *(glm_vec4 const (*)[4])&m[0].data,
+ *(glm_vec4(*)[4])&result[0].data);
+ return result;
+ }
+ };
+
+ template <precision P>
+ struct compute_determinant<tmat4x4, float, P, true>
+ {
+ GLM_FUNC_QUALIFIER static float call(tmat4x4<float, P> const& m)
+ {
+ return _mm_cvtss_f32(glm_mat4_determinant(*reinterpret_cast<__m128 const(*)[4]>(&m[0].data)));
+ }
+ };
+
+ template <precision P>
+ struct compute_inverse<tmat4x4, float, P, true>
+ {
+ GLM_FUNC_QUALIFIER static tmat4x4<float, P> call(tmat4x4<float, P> const& m)
+ {
+ tmat4x4<float, P> Result(uninitialize);
+ glm_mat4_inverse(*reinterpret_cast<__m128 const(*)[4]>(&m[0].data), *reinterpret_cast<__m128(*)[4]>(&Result[0].data));
+ return Result;
+ }
+ };
+}//namespace detail
+
+ template<>
+ GLM_FUNC_QUALIFIER tmat4x4<float, aligned_lowp> outerProduct<float, aligned_lowp, tvec4, tvec4>(tvec4<float, aligned_lowp> const & c, tvec4<float, aligned_lowp> const & r)
+ {
+ tmat4x4<float, aligned_lowp> m(uninitialize);
+ glm_mat4_outerProduct(c.data, r.data, *reinterpret_cast<__m128(*)[4]>(&m[0].data));
+ return m;
+ }
+
+ template<>
+ GLM_FUNC_QUALIFIER tmat4x4<float, aligned_mediump> outerProduct<float, aligned_mediump, tvec4, tvec4>(tvec4<float, aligned_mediump> const & c, tvec4<float, aligned_mediump> const & r)
+ {
+ tmat4x4<float, aligned_mediump> m(uninitialize);
+ glm_mat4_outerProduct(c.data, r.data, *reinterpret_cast<__m128(*)[4]>(&m[0].data));
+ return m;
+ }
+
+ template<>
+ GLM_FUNC_QUALIFIER tmat4x4<float, aligned_highp> outerProduct<float, aligned_highp, tvec4, tvec4>(tvec4<float, aligned_highp> const & c, tvec4<float, aligned_highp> const & r)
+ {
+ tmat4x4<float, aligned_highp> m(uninitialize);
+ glm_mat4_outerProduct(c.data, r.data, *reinterpret_cast<__m128(*)[4]>(&m[0].data));
+ return m;
+ }
+}//namespace glm
+
+#endif
diff --git a/src/third_party/glm/glm/detail/func_packing.hpp b/src/third_party/glm/glm/detail/func_packing.hpp
new file mode 100644
index 0000000..47e074b
--- /dev/null
+++ b/src/third_party/glm/glm/detail/func_packing.hpp
@@ -0,0 +1,168 @@
+/// @ref core
+/// @file glm/detail/func_packing.hpp
+///
+/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
+/// @see gtc_packing
+///
+/// @defgroup core_func_packing Floating-Point Pack and Unpack Functions
+/// @ingroup core
+///
+/// These functions do not operate component-wise, rather as described in each case.
+
+#pragma once
+
+#include "type_vec2.hpp"
+#include "type_vec4.hpp"
+
+namespace glm
+{
+ /// @addtogroup core_func_packing
+ /// @{
+
+ /// First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.
+ /// Then, the results are packed into the returned 32-bit unsigned integer.
+ ///
+ /// The conversion for component c of v to fixed point is done as follows:
+ /// packUnorm2x16: round(clamp(c, 0, +1) * 65535.0)
+ ///
+ /// The first component of the vector will be written to the least significant bits of the output;
+ /// the last component will be written to the most significant bits.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packUnorm2x16.xml">GLSL packUnorm2x16 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
+ GLM_FUNC_DECL uint packUnorm2x16(vec2 const & v);
+
+ /// First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.
+ /// Then, the results are packed into the returned 32-bit unsigned integer.
+ ///
+ /// The conversion for component c of v to fixed point is done as follows:
+ /// packSnorm2x16: round(clamp(v, -1, +1) * 32767.0)
+ ///
+ /// The first component of the vector will be written to the least significant bits of the output;
+ /// the last component will be written to the most significant bits.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packSnorm2x16.xml">GLSL packSnorm2x16 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
+ GLM_FUNC_DECL uint packSnorm2x16(vec2 const & v);
+
+ /// First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.
+ /// Then, the results are packed into the returned 32-bit unsigned integer.
+ ///
+ /// The conversion for component c of v to fixed point is done as follows:
+ /// packUnorm4x8: round(clamp(c, 0, +1) * 255.0)
+ ///
+ /// The first component of the vector will be written to the least significant bits of the output;
+ /// the last component will be written to the most significant bits.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packUnorm4x8.xml">GLSL packUnorm4x8 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
+ GLM_FUNC_DECL uint packUnorm4x8(vec4 const & v);
+
+ /// First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.
+ /// Then, the results are packed into the returned 32-bit unsigned integer.
+ ///
+ /// The conversion for component c of v to fixed point is done as follows:
+ /// packSnorm4x8: round(clamp(c, -1, +1) * 127.0)
+ ///
+ /// The first component of the vector will be written to the least significant bits of the output;
+ /// the last component will be written to the most significant bits.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packSnorm4x8.xml">GLSL packSnorm4x8 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
+ GLM_FUNC_DECL uint packSnorm4x8(vec4 const & v);
+
+ /// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.
+ /// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.
+ ///
+ /// The conversion for unpacked fixed-point value f to floating point is done as follows:
+ /// unpackUnorm2x16: f / 65535.0
+ ///
+ /// The first component of the returned vector will be extracted from the least significant bits of the input;
+ /// the last component will be extracted from the most significant bits.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackUnorm2x16.xml">GLSL unpackUnorm2x16 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
+ GLM_FUNC_DECL vec2 unpackUnorm2x16(uint p);
+
+ /// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.
+ /// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.
+ ///
+ /// The conversion for unpacked fixed-point value f to floating point is done as follows:
+ /// unpackSnorm2x16: clamp(f / 32767.0, -1, +1)
+ ///
+ /// The first component of the returned vector will be extracted from the least significant bits of the input;
+ /// the last component will be extracted from the most significant bits.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackSnorm2x16.xml">GLSL unpackSnorm2x16 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
+ GLM_FUNC_DECL vec2 unpackSnorm2x16(uint p);
+
+ /// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.
+ /// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.
+ ///
+ /// The conversion for unpacked fixed-point value f to floating point is done as follows:
+ /// unpackUnorm4x8: f / 255.0
+ ///
+ /// The first component of the returned vector will be extracted from the least significant bits of the input;
+ /// the last component will be extracted from the most significant bits.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackUnorm4x8.xml">GLSL unpackUnorm4x8 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
+ GLM_FUNC_DECL vec4 unpackUnorm4x8(uint p);
+
+ /// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.
+ /// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.
+ ///
+ /// The conversion for unpacked fixed-point value f to floating point is done as follows:
+ /// unpackSnorm4x8: clamp(f / 127.0, -1, +1)
+ ///
+ /// The first component of the returned vector will be extracted from the least significant bits of the input;
+ /// the last component will be extracted from the most significant bits.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackSnorm4x8.xml">GLSL unpackSnorm4x8 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
+ GLM_FUNC_DECL vec4 unpackSnorm4x8(uint p);
+
+ /// Returns a double-precision value obtained by packing the components of v into a 64-bit value.
+ /// If an IEEE 754 Inf or NaN is created, it will not signal, and the resulting floating point value is unspecified.
+ /// Otherwise, the bit- level representation of v is preserved.
+ /// The first vector component specifies the 32 least significant bits;
+ /// the second component specifies the 32 most significant bits.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packDouble2x32.xml">GLSL packDouble2x32 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
+ GLM_FUNC_DECL double packDouble2x32(uvec2 const & v);
+
+ /// Returns a two-component unsigned integer vector representation of v.
+ /// The bit-level representation of v is preserved.
+ /// The first component of the vector contains the 32 least significant bits of the double;
+ /// the second component consists the 32 most significant bits.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackDouble2x32.xml">GLSL unpackDouble2x32 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
+ GLM_FUNC_DECL uvec2 unpackDouble2x32(double v);
+
+ /// Returns an unsigned integer obtained by converting the components of a two-component floating-point vector
+ /// to the 16-bit floating-point representation found in the OpenGL Specification,
+ /// and then packing these two 16- bit integers into a 32-bit unsigned integer.
+ /// The first vector component specifies the 16 least-significant bits of the result;
+ /// the second component specifies the 16 most-significant bits.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packHalf2x16.xml">GLSL packHalf2x16 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
+ GLM_FUNC_DECL uint packHalf2x16(vec2 const & v);
+
+ /// Returns a two-component floating-point vector with components obtained by unpacking a 32-bit unsigned integer into a pair of 16-bit values,
+ /// interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification,
+ /// and converting them to 32-bit floating-point values.
+ /// The first component of the vector is obtained from the 16 least-significant bits of v;
+ /// the second component is obtained from the 16 most-significant bits of v.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackHalf2x16.xml">GLSL unpackHalf2x16 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
+ GLM_FUNC_DECL vec2 unpackHalf2x16(uint v);
+
+ /// @}
+}//namespace glm
+
+#include "func_packing.inl"
diff --git a/src/third_party/glm/glm/detail/func_packing.inl b/src/third_party/glm/glm/detail/func_packing.inl
new file mode 100644
index 0000000..505c80a
--- /dev/null
+++ b/src/third_party/glm/glm/detail/func_packing.inl
@@ -0,0 +1,190 @@
+/// @ref core
+/// @file glm/detail/func_packing.inl
+
+#include "func_common.hpp"
+#include "type_half.hpp"
+#include "../fwd.hpp"
+
+namespace glm
+{
+ GLM_FUNC_QUALIFIER uint packUnorm2x16(vec2 const & v)
+ {
+ union
+ {
+ u16 in[2];
+ uint out;
+ } u;
+
+ u16vec2 result(round(clamp(v, 0.0f, 1.0f) * 65535.0f));
+
+ u.in[0] = result[0];
+ u.in[1] = result[1];
+
+ return u.out;
+ }
+
+ GLM_FUNC_QUALIFIER vec2 unpackUnorm2x16(uint p)
+ {
+ union
+ {
+ uint in;
+ u16 out[2];
+ } u;
+
+ u.in = p;
+
+ return vec2(u.out[0], u.out[1]) * 1.5259021896696421759365224689097e-5f;
+ }
+
+ GLM_FUNC_QUALIFIER uint packSnorm2x16(vec2 const & v)
+ {
+ union
+ {
+ i16 in[2];
+ uint out;
+ } u;
+
+ i16vec2 result(round(clamp(v, -1.0f, 1.0f) * 32767.0f));
+
+ u.in[0] = result[0];
+ u.in[1] = result[1];
+
+ return u.out;
+ }
+
+ GLM_FUNC_QUALIFIER vec2 unpackSnorm2x16(uint p)
+ {
+ union
+ {
+ uint in;
+ i16 out[2];
+ } u;
+
+ u.in = p;
+
+ return clamp(vec2(u.out[0], u.out[1]) * 3.0518509475997192297128208258309e-5f, -1.0f, 1.0f);
+ }
+
+ GLM_FUNC_QUALIFIER uint packUnorm4x8(vec4 const & v)
+ {
+ union
+ {
+ u8 in[4];
+ uint out;
+ } u;
+
+ u8vec4 result(round(clamp(v, 0.0f, 1.0f) * 255.0f));
+
+ u.in[0] = result[0];
+ u.in[1] = result[1];
+ u.in[2] = result[2];
+ u.in[3] = result[3];
+
+ return u.out;
+ }
+
+ GLM_FUNC_QUALIFIER vec4 unpackUnorm4x8(uint p)
+ {
+ union
+ {
+ uint in;
+ u8 out[4];
+ } u;
+
+ u.in = p;
+
+ return vec4(u.out[0], u.out[1], u.out[2], u.out[3]) * 0.0039215686274509803921568627451f;
+ }
+
+ GLM_FUNC_QUALIFIER uint packSnorm4x8(vec4 const & v)
+ {
+ union
+ {
+ i8 in[4];
+ uint out;
+ } u;
+
+ i8vec4 result(round(clamp(v, -1.0f, 1.0f) * 127.0f));
+
+ u.in[0] = result[0];
+ u.in[1] = result[1];
+ u.in[2] = result[2];
+ u.in[3] = result[3];
+
+ return u.out;
+ }
+
+ GLM_FUNC_QUALIFIER glm::vec4 unpackSnorm4x8(uint p)
+ {
+ union
+ {
+ uint in;
+ i8 out[4];
+ } u;
+
+ u.in = p;
+
+ return clamp(vec4(u.out[0], u.out[1], u.out[2], u.out[3]) * 0.0078740157480315f, -1.0f, 1.0f);
+ }
+
+ GLM_FUNC_QUALIFIER double packDouble2x32(uvec2 const & v)
+ {
+ union
+ {
+ uint in[2];
+ double out;
+ } u;
+
+ u.in[0] = v[0];
+ u.in[1] = v[1];
+
+ return u.out;
+ }
+
+ GLM_FUNC_QUALIFIER uvec2 unpackDouble2x32(double v)
+ {
+ union
+ {
+ double in;
+ uint out[2];
+ } u;
+
+ u.in = v;
+
+ return uvec2(u.out[0], u.out[1]);
+ }
+
+ GLM_FUNC_QUALIFIER uint packHalf2x16(vec2 const & v)
+ {
+ union
+ {
+ i16 in[2];
+ uint out;
+ } u;
+
+ u.in[0] = detail::toFloat16(v.x);
+ u.in[1] = detail::toFloat16(v.y);
+
+ return u.out;
+ }
+
+ GLM_FUNC_QUALIFIER vec2 unpackHalf2x16(uint v)
+ {
+ union
+ {
+ uint in;
+ i16 out[2];
+ } u;
+
+ u.in = v;
+
+ return vec2(
+ detail::toFloat32(u.out[0]),
+ detail::toFloat32(u.out[1]));
+ }
+}//namespace glm
+
+#if GLM_ARCH != GLM_ARCH_PURE && GLM_HAS_UNRESTRICTED_UNIONS
+# include "func_packing_simd.inl"
+#endif
+
diff --git a/src/third_party/glm/glm/detail/func_packing_simd.inl b/src/third_party/glm/glm/detail/func_packing_simd.inl
new file mode 100644
index 0000000..1d4a522
--- /dev/null
+++ b/src/third_party/glm/glm/detail/func_packing_simd.inl
@@ -0,0 +1,9 @@
+/// @ref core
+/// @file glm/detail/func_packing_simd.inl
+
+namespace glm{
+namespace detail
+{
+
+}//namespace detail
+}//namespace glm
diff --git a/src/third_party/glm/glm/detail/func_trigonometric.hpp b/src/third_party/glm/glm/detail/func_trigonometric.hpp
new file mode 100644
index 0000000..719cff0
--- /dev/null
+++ b/src/third_party/glm/glm/detail/func_trigonometric.hpp
@@ -0,0 +1,176 @@
+/// @ref core
+/// @file glm/detail/func_trigonometric.hpp
+///
+/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
+///
+/// @defgroup core_func_trigonometric Angle and Trigonometry Functions
+/// @ingroup core
+///
+/// Function parameters specified as angle are assumed to be in units of radians.
+/// In no case will any of these functions result in a divide by zero error. If
+/// the divisor of a ratio is 0, then results will be undefined.
+///
+/// These all operate component-wise. The description is per component.
+
+#pragma once
+
+#include "setup.hpp"
+#include "precision.hpp"
+
+namespace glm
+{
+ /// @addtogroup core_func_trigonometric
+ /// @{
+
+ /// Converts degrees to radians and returns the result.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/radians.xml">GLSL radians man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL GLM_CONSTEXPR vecType<T, P> radians(vecType<T, P> const & degrees);
+
+ /// Converts radians to degrees and returns the result.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/degrees.xml">GLSL degrees man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL GLM_CONSTEXPR vecType<T, P> degrees(vecType<T, P> const & radians);
+
+ /// The standard trigonometric sine function.
+ /// The values returned by this function will range from [-1, 1].
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/sin.xml">GLSL sin man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> sin(vecType<T, P> const & angle);
+
+ /// The standard trigonometric cosine function.
+ /// The values returned by this function will range from [-1, 1].
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/cos.xml">GLSL cos man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> cos(vecType<T, P> const & angle);
+
+ /// The standard trigonometric tangent function.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/tan.xml">GLSL tan man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> tan(vecType<T, P> const & angle);
+
+ /// Arc sine. Returns an angle whose sine is x.
+ /// The range of values returned by this function is [-PI/2, PI/2].
+ /// Results are undefined if |x| > 1.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/asin.xml">GLSL asin man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> asin(vecType<T, P> const & x);
+
+ /// Arc cosine. Returns an angle whose sine is x.
+ /// The range of values returned by this function is [0, PI].
+ /// Results are undefined if |x| > 1.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/acos.xml">GLSL acos man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> acos(vecType<T, P> const & x);
+
+ /// Arc tangent. Returns an angle whose tangent is y/x.
+ /// The signs of x and y are used to determine what
+ /// quadrant the angle is in. The range of values returned
+ /// by this function is [-PI, PI]. Results are undefined
+ /// if x and y are both 0.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/atan.xml">GLSL atan man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> atan(vecType<T, P> const & y, vecType<T, P> const & x);
+
+ /// Arc tangent. Returns an angle whose tangent is y_over_x.
+ /// The range of values returned by this function is [-PI/2, PI/2].
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/atan.xml">GLSL atan man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> atan(vecType<T, P> const & y_over_x);
+
+ /// Returns the hyperbolic sine function, (exp(x) - exp(-x)) / 2
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/sinh.xml">GLSL sinh man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> sinh(vecType<T, P> const & angle);
+
+ /// Returns the hyperbolic cosine function, (exp(x) + exp(-x)) / 2
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/cosh.xml">GLSL cosh man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> cosh(vecType<T, P> const & angle);
+
+ /// Returns the hyperbolic tangent function, sinh(angle) / cosh(angle)
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/tanh.xml">GLSL tanh man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> tanh(vecType<T, P> const & angle);
+
+ /// Arc hyperbolic sine; returns the inverse of sinh.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/asinh.xml">GLSL asinh man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> asinh(vecType<T, P> const & x);
+
+ /// Arc hyperbolic cosine; returns the non-negative inverse
+ /// of cosh. Results are undefined if x < 1.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/acosh.xml">GLSL acosh man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> acosh(vecType<T, P> const & x);
+
+ /// Arc hyperbolic tangent; returns the inverse of tanh.
+ /// Results are undefined if abs(x) >= 1.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/atanh.xml">GLSL atanh man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> atanh(vecType<T, P> const & x);
+
+ /// @}
+}//namespace glm
+
+#include "func_trigonometric.inl"
diff --git a/src/third_party/glm/glm/detail/func_trigonometric.inl b/src/third_party/glm/glm/detail/func_trigonometric.inl
new file mode 100644
index 0000000..2986673
--- /dev/null
+++ b/src/third_party/glm/glm/detail/func_trigonometric.inl
@@ -0,0 +1,200 @@
+/// @ref core
+/// @file glm/detail/func_trigonometric.inl
+
+#include "_vectorize.hpp"
+#include <cmath>
+#include <limits>
+
+namespace glm
+{
+ // radians
+ template <typename genType>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType radians(genType degrees)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'radians' only accept floating-point input");
+
+ return degrees * static_cast<genType>(0.01745329251994329576923690768489);
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR vecType<T, P> radians(vecType<T, P> const & v)
+ {
+ return detail::functor1<T, T, P, vecType>::call(radians, v);
+ }
+
+ // degrees
+ template <typename genType>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType degrees(genType radians)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'degrees' only accept floating-point input");
+
+ return radians * static_cast<genType>(57.295779513082320876798154814105);
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR vecType<T, P> degrees(vecType<T, P> const & v)
+ {
+ return detail::functor1<T, T, P, vecType>::call(degrees, v);
+ }
+
+ // sin
+ using ::std::sin;
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> sin(vecType<T, P> const & v)
+ {
+ return detail::functor1<T, T, P, vecType>::call(sin, v);
+ }
+
+ // cos
+ using std::cos;
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> cos(vecType<T, P> const & v)
+ {
+ return detail::functor1<T, T, P, vecType>::call(cos, v);
+ }
+
+ // tan
+ using std::tan;
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> tan(vecType<T, P> const & v)
+ {
+ return detail::functor1<T, T, P, vecType>::call(tan, v);
+ }
+
+ // asin
+ using std::asin;
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> asin(vecType<T, P> const & v)
+ {
+ return detail::functor1<T, T, P, vecType>::call(asin, v);
+ }
+
+ // acos
+ using std::acos;
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> acos(vecType<T, P> const & v)
+ {
+ return detail::functor1<T, T, P, vecType>::call(acos, v);
+ }
+
+ // atan
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType atan(genType y, genType x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'atan' only accept floating-point input");
+
+ return ::std::atan2(y, x);
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> atan(vecType<T, P> const & a, vecType<T, P> const & b)
+ {
+ return detail::functor2<T, P, vecType>::call(::std::atan2, a, b);
+ }
+
+ using std::atan;
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> atan(vecType<T, P> const & v)
+ {
+ return detail::functor1<T, T, P, vecType>::call(atan, v);
+ }
+
+ // sinh
+ using std::sinh;
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> sinh(vecType<T, P> const & v)
+ {
+ return detail::functor1<T, T, P, vecType>::call(sinh, v);
+ }
+
+ // cosh
+ using std::cosh;
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> cosh(vecType<T, P> const & v)
+ {
+ return detail::functor1<T, T, P, vecType>::call(cosh, v);
+ }
+
+ // tanh
+ using std::tanh;
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> tanh(vecType<T, P> const & v)
+ {
+ return detail::functor1<T, T, P, vecType>::call(tanh, v);
+ }
+
+ // asinh
+# if GLM_HAS_CXX11_STL
+ using std::asinh;
+# else
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType asinh(genType x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'asinh' only accept floating-point input");
+
+ return (x < static_cast<genType>(0) ? static_cast<genType>(-1) : (x > static_cast<genType>(0) ? static_cast<genType>(1) : static_cast<genType>(0))) * log(std::abs(x) + sqrt(static_cast<genType>(1) + x * x));
+ }
+# endif
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> asinh(vecType<T, P> const & v)
+ {
+ return detail::functor1<T, T, P, vecType>::call(asinh, v);
+ }
+
+ // acosh
+# if GLM_HAS_CXX11_STL
+ using std::acosh;
+# else
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType acosh(genType x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'acosh' only accept floating-point input");
+
+ if(x < static_cast<genType>(1))
+ return static_cast<genType>(0);
+ return log(x + sqrt(x * x - static_cast<genType>(1)));
+ }
+# endif
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> acosh(vecType<T, P> const & v)
+ {
+ return detail::functor1<T, T, P, vecType>::call(acosh, v);
+ }
+
+ // atanh
+# if GLM_HAS_CXX11_STL
+ using std::atanh;
+# else
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType atanh(genType x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'atanh' only accept floating-point input");
+
+ if(std::abs(x) >= static_cast<genType>(1))
+ return 0;
+ return static_cast<genType>(0.5) * log((static_cast<genType>(1) + x) / (static_cast<genType>(1) - x));
+ }
+# endif
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> atanh(vecType<T, P> const & v)
+ {
+ return detail::functor1<T, T, P, vecType>::call(atanh, v);
+ }
+}//namespace glm
+
+#if GLM_ARCH != GLM_ARCH_PURE && GLM_HAS_UNRESTRICTED_UNIONS
+# include "func_trigonometric_simd.inl"
+#endif
+
diff --git a/src/third_party/glm/glm/detail/func_trigonometric_simd.inl b/src/third_party/glm/glm/detail/func_trigonometric_simd.inl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/third_party/glm/glm/detail/func_trigonometric_simd.inl
diff --git a/src/third_party/glm/glm/detail/func_vector_relational.hpp b/src/third_party/glm/glm/detail/func_vector_relational.hpp
new file mode 100644
index 0000000..ec0f68a
--- /dev/null
+++ b/src/third_party/glm/glm/detail/func_vector_relational.hpp
@@ -0,0 +1,111 @@
+/// @ref core
+/// @file glm/detail/func_vector_relational.hpp
+///
+/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a>
+///
+/// @defgroup core_func_vector_relational Vector Relational Functions
+/// @ingroup core
+///
+/// Relational and equality operators (<, <=, >, >=, ==, !=) are defined to
+/// operate on scalars and produce scalar Boolean results. For vector results,
+/// use the following built-in functions.
+///
+/// In all cases, the sizes of all the input and return vectors for any particular
+/// call must match.
+
+#pragma once
+
+#include "precision.hpp"
+#include "setup.hpp"
+
+namespace glm
+{
+ /// @addtogroup core_func_vector_relational
+ /// @{
+
+ /// Returns the component-wise comparison result of x < y.
+ ///
+ /// @tparam vecType Floating-point or integer vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/lessThan.xml">GLSL lessThan man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a>
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<bool, P> lessThan(vecType<T, P> const & x, vecType<T, P> const & y);
+
+ /// Returns the component-wise comparison of result x <= y.
+ ///
+ /// @tparam vecType Floating-point or integer vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/lessThanEqual.xml">GLSL lessThanEqual man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a>
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<bool, P> lessThanEqual(vecType<T, P> const & x, vecType<T, P> const & y);
+
+ /// Returns the component-wise comparison of result x > y.
+ ///
+ /// @tparam vecType Floating-point or integer vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/greaterThan.xml">GLSL greaterThan man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a>
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<bool, P> greaterThan(vecType<T, P> const & x, vecType<T, P> const & y);
+
+ /// Returns the component-wise comparison of result x >= y.
+ ///
+ /// @tparam vecType Floating-point or integer vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/greaterThanEqual.xml">GLSL greaterThanEqual man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a>
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<bool, P> greaterThanEqual(vecType<T, P> const & x, vecType<T, P> const & y);
+
+ /// Returns the component-wise comparison of result x == y.
+ ///
+ /// @tparam vecType Floating-point, integer or boolean vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/equal.xml">GLSL equal man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a>
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<bool, P> equal(vecType<T, P> const & x, vecType<T, P> const & y);
+
+ /// Returns the component-wise comparison of result x != y.
+ ///
+ /// @tparam vecType Floating-point, integer or boolean vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/notEqual.xml">GLSL notEqual man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a>
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<bool, P> notEqual(vecType<T, P> const & x, vecType<T, P> const & y);
+
+ /// Returns true if any component of x is true.
+ ///
+ /// @tparam vecType Boolean vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/any.xml">GLSL any man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a>
+ template <precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL bool any(vecType<bool, P> const & v);
+
+ /// Returns true if all components of x are true.
+ ///
+ /// @tparam vecType Boolean vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/all.xml">GLSL all man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a>
+ template <precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL bool all(vecType<bool, P> const & v);
+
+ /// Returns the component-wise logical complement of x.
+ /// /!\ Because of language incompatibilities between C++ and GLSL, GLM defines the function not but not_ instead.
+ ///
+ /// @tparam vecType Boolean vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/not.xml">GLSL not man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a>
+ template <precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<bool, P> not_(vecType<bool, P> const & v);
+
+ /// @}
+}//namespace glm
+
+#include "func_vector_relational.inl"
diff --git a/src/third_party/glm/glm/detail/func_vector_relational.inl b/src/third_party/glm/glm/detail/func_vector_relational.inl
new file mode 100644
index 0000000..3d8d2b7
--- /dev/null
+++ b/src/third_party/glm/glm/detail/func_vector_relational.inl
@@ -0,0 +1,105 @@
+/// @ref core
+/// @file glm/detail/func_vector_relational.inl
+
+#include <limits>
+
+namespace glm
+{
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<bool, P> lessThan(vecType<T, P> const & x, vecType<T, P> const & y)
+ {
+ assert(x.length() == y.length());
+
+ vecType<bool, P> Result(uninitialize);
+ for(length_t i = 0; i < x.length(); ++i)
+ Result[i] = x[i] < y[i];
+
+ return Result;
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<bool, P> lessThanEqual(vecType<T, P> const & x, vecType<T, P> const & y)
+ {
+ assert(x.length() == y.length());
+
+ vecType<bool, P> Result(uninitialize);
+ for(length_t i = 0; i < x.length(); ++i)
+ Result[i] = x[i] <= y[i];
+ return Result;
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<bool, P> greaterThan(vecType<T, P> const & x, vecType<T, P> const & y)
+ {
+ assert(x.length() == y.length());
+
+ vecType<bool, P> Result(uninitialize);
+ for(length_t i = 0; i < x.length(); ++i)
+ Result[i] = x[i] > y[i];
+ return Result;
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<bool, P> greaterThanEqual(vecType<T, P> const & x, vecType<T, P> const & y)
+ {
+ assert(x.length() == y.length());
+
+ vecType<bool, P> Result(uninitialize);
+ for(length_t i = 0; i < x.length(); ++i)
+ Result[i] = x[i] >= y[i];
+ return Result;
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<bool, P> equal(vecType<T, P> const & x, vecType<T, P> const & y)
+ {
+ assert(x.length() == y.length());
+
+ vecType<bool, P> Result(uninitialize);
+ for(length_t i = 0; i < x.length(); ++i)
+ Result[i] = x[i] == y[i];
+ return Result;
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<bool, P> notEqual(vecType<T, P> const & x, vecType<T, P> const & y)
+ {
+ assert(x.length() == y.length());
+
+ vecType<bool, P> Result(uninitialize);
+ for(length_t i = 0; i < x.length(); ++i)
+ Result[i] = x[i] != y[i];
+ return Result;
+ }
+
+ template <precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER bool any(vecType<bool, P> const & v)
+ {
+ bool Result = false;
+ for(length_t i = 0; i < v.length(); ++i)
+ Result = Result || v[i];
+ return Result;
+ }
+
+ template <precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER bool all(vecType<bool, P> const & v)
+ {
+ bool Result = true;
+ for(length_t i = 0; i < v.length(); ++i)
+ Result = Result && v[i];
+ return Result;
+ }
+
+ template <precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<bool, P> not_(vecType<bool, P> const & v)
+ {
+ vecType<bool, P> Result(uninitialize);
+ for(length_t i = 0; i < v.length(); ++i)
+ Result[i] = !v[i];
+ return Result;
+ }
+}//namespace glm
+
+#if GLM_ARCH != GLM_ARCH_PURE && GLM_HAS_UNRESTRICTED_UNIONS
+# include "func_vector_relational_simd.inl"
+#endif
diff --git a/src/third_party/glm/glm/detail/func_vector_relational_simd.inl b/src/third_party/glm/glm/detail/func_vector_relational_simd.inl
new file mode 100644
index 0000000..faab59b8
--- /dev/null
+++ b/src/third_party/glm/glm/detail/func_vector_relational_simd.inl
@@ -0,0 +1,9 @@
+/// @ref core
+/// @file glm/detail/func_vector_relational_simd.inl
+
+namespace glm{
+namespace detail
+{
+
+}//namespace detail
+}//namespace glm
diff --git a/src/third_party/glm/glm/detail/glm.cpp b/src/third_party/glm/glm/detail/glm.cpp
new file mode 100644
index 0000000..da3be4e
--- /dev/null
+++ b/src/third_party/glm/glm/detail/glm.cpp
@@ -0,0 +1,257 @@
+/// @ref core
+/// @file glm/glm.cpp
+
+#include <glm/glm.hpp>
+#include <glm/gtc/quaternion.hpp>
+#include <glm/gtx/dual_quaternion.hpp>
+
+namespace glm
+{
+// tvec1 type explicit instantiation
+template struct tvec1<uint8, lowp>;
+template struct tvec1<uint16, lowp>;
+template struct tvec1<uint32, lowp>;
+template struct tvec1<uint64, lowp>;
+template struct tvec1<int8, lowp>;
+template struct tvec1<int16, lowp>;
+template struct tvec1<int32, lowp>;
+template struct tvec1<int64, lowp>;
+template struct tvec1<float32, lowp>;
+template struct tvec1<float64, lowp>;
+
+template struct tvec1<uint8, mediump>;
+template struct tvec1<uint16, mediump>;
+template struct tvec1<uint32, mediump>;
+template struct tvec1<uint64, mediump>;
+template struct tvec1<int8, mediump>;
+template struct tvec1<int16, mediump>;
+template struct tvec1<int32, mediump>;
+template struct tvec1<int64, mediump>;
+template struct tvec1<float32, mediump>;
+template struct tvec1<float64, mediump>;
+
+template struct tvec1<uint8, highp>;
+template struct tvec1<uint16, highp>;
+template struct tvec1<uint32, highp>;
+template struct tvec1<uint64, highp>;
+template struct tvec1<int8, highp>;
+template struct tvec1<int16, highp>;
+template struct tvec1<int32, highp>;
+template struct tvec1<int64, highp>;
+template struct tvec1<float32, highp>;
+template struct tvec1<float64, highp>;
+
+// tvec2 type explicit instantiation
+template struct tvec2<uint8, lowp>;
+template struct tvec2<uint16, lowp>;
+template struct tvec2<uint32, lowp>;
+template struct tvec2<uint64, lowp>;
+template struct tvec2<int8, lowp>;
+template struct tvec2<int16, lowp>;
+template struct tvec2<int32, lowp>;
+template struct tvec2<int64, lowp>;
+template struct tvec2<float32, lowp>;
+template struct tvec2<float64, lowp>;
+
+template struct tvec2<uint8, mediump>;
+template struct tvec2<uint16, mediump>;
+template struct tvec2<uint32, mediump>;
+template struct tvec2<uint64, mediump>;
+template struct tvec2<int8, mediump>;
+template struct tvec2<int16, mediump>;
+template struct tvec2<int32, mediump>;
+template struct tvec2<int64, mediump>;
+template struct tvec2<float32, mediump>;
+template struct tvec2<float64, mediump>;
+
+template struct tvec2<uint8, highp>;
+template struct tvec2<uint16, highp>;
+template struct tvec2<uint32, highp>;
+template struct tvec2<uint64, highp>;
+template struct tvec2<int8, highp>;
+template struct tvec2<int16, highp>;
+template struct tvec2<int32, highp>;
+template struct tvec2<int64, highp>;
+template struct tvec2<float32, highp>;
+template struct tvec2<float64, highp>;
+
+// tvec3 type explicit instantiation
+template struct tvec3<uint8, lowp>;
+template struct tvec3<uint16, lowp>;
+template struct tvec3<uint32, lowp>;
+template struct tvec3<uint64, lowp>;
+template struct tvec3<int8, lowp>;
+template struct tvec3<int16, lowp>;
+template struct tvec3<int32, lowp>;
+template struct tvec3<int64, lowp>;
+template struct tvec3<float32, lowp>;
+template struct tvec3<float64, lowp>;
+
+template struct tvec3<uint8, mediump>;
+template struct tvec3<uint16, mediump>;
+template struct tvec3<uint32, mediump>;
+template struct tvec3<uint64, mediump>;
+template struct tvec3<int8, mediump>;
+template struct tvec3<int16, mediump>;
+template struct tvec3<int32, mediump>;
+template struct tvec3<int64, mediump>;
+template struct tvec3<float32, mediump>;
+template struct tvec3<float64, mediump>;
+
+template struct tvec3<uint8, highp>;
+template struct tvec3<uint16, highp>;
+template struct tvec3<uint32, highp>;
+template struct tvec3<uint64, highp>;
+template struct tvec3<int8, highp>;
+template struct tvec3<int16, highp>;
+template struct tvec3<int32, highp>;
+template struct tvec3<int64, highp>;
+template struct tvec3<float32, highp>;
+template struct tvec3<float64, highp>;
+
+// tvec4 type explicit instantiation
+template struct tvec4<uint8, lowp>;
+template struct tvec4<uint16, lowp>;
+template struct tvec4<uint32, lowp>;
+template struct tvec4<uint64, lowp>;
+template struct tvec4<int8, lowp>;
+template struct tvec4<int16, lowp>;
+template struct tvec4<int32, lowp>;
+template struct tvec4<int64, lowp>;
+template struct tvec4<float32, lowp>;
+template struct tvec4<float64, lowp>;
+
+template struct tvec4<uint8, mediump>;
+template struct tvec4<uint16, mediump>;
+template struct tvec4<uint32, mediump>;
+template struct tvec4<uint64, mediump>;
+template struct tvec4<int8, mediump>;
+template struct tvec4<int16, mediump>;
+template struct tvec4<int32, mediump>;
+template struct tvec4<int64, mediump>;
+template struct tvec4<float32, mediump>;
+template struct tvec4<float64, mediump>;
+
+template struct tvec4<uint8, highp>;
+template struct tvec4<uint16, highp>;
+template struct tvec4<uint32, highp>;
+template struct tvec4<uint64, highp>;
+template struct tvec4<int8, highp>;
+template struct tvec4<int16, highp>;
+template struct tvec4<int32, highp>;
+template struct tvec4<int64, highp>;
+template struct tvec4<float32, highp>;
+template struct tvec4<float64, highp>;
+
+// tmat2x2 type explicit instantiation
+template struct tmat2x2<float32, lowp>;
+template struct tmat2x2<float64, lowp>;
+
+template struct tmat2x2<float32, mediump>;
+template struct tmat2x2<float64, mediump>;
+
+template struct tmat2x2<float32, highp>;
+template struct tmat2x2<float64, highp>;
+
+// tmat2x3 type explicit instantiation
+template struct tmat2x3<float32, lowp>;
+template struct tmat2x3<float64, lowp>;
+
+template struct tmat2x3<float32, mediump>;
+template struct tmat2x3<float64, mediump>;
+
+template struct tmat2x3<float32, highp>;
+template struct tmat2x3<float64, highp>;
+
+// tmat2x4 type explicit instantiation
+template struct tmat2x4<float32, lowp>;
+template struct tmat2x4<float64, lowp>;
+
+template struct tmat2x4<float32, mediump>;
+template struct tmat2x4<float64, mediump>;
+
+template struct tmat2x4<float32, highp>;
+template struct tmat2x4<float64, highp>;
+
+// tmat3x2 type explicit instantiation
+template struct tmat3x2<float32, lowp>;
+template struct tmat3x2<float64, lowp>;
+
+template struct tmat3x2<float32, mediump>;
+template struct tmat3x2<float64, mediump>;
+
+template struct tmat3x2<float32, highp>;
+template struct tmat3x2<float64, highp>;
+
+// tmat3x3 type explicit instantiation
+template struct tmat3x3<float32, lowp>;
+template struct tmat3x3<float64, lowp>;
+
+template struct tmat3x3<float32, mediump>;
+template struct tmat3x3<float64, mediump>;
+
+template struct tmat3x3<float32, highp>;
+template struct tmat3x3<float64, highp>;
+
+// tmat3x4 type explicit instantiation
+template struct tmat3x4<float32, lowp>;
+template struct tmat3x4<float64, lowp>;
+
+template struct tmat3x4<float32, mediump>;
+template struct tmat3x4<float64, mediump>;
+
+template struct tmat3x4<float32, highp>;
+template struct tmat3x4<float64, highp>;
+
+// tmat4x2 type explicit instantiation
+template struct tmat4x2<float32, lowp>;
+template struct tmat4x2<float64, lowp>;
+
+template struct tmat4x2<float32, mediump>;
+template struct tmat4x2<float64, mediump>;
+
+template struct tmat4x2<float32, highp>;
+template struct tmat4x2<float64, highp>;
+
+// tmat4x3 type explicit instantiation
+template struct tmat4x3<float32, lowp>;
+template struct tmat4x3<float64, lowp>;
+
+template struct tmat4x3<float32, mediump>;
+template struct tmat4x3<float64, mediump>;
+
+template struct tmat4x3<float32, highp>;
+template struct tmat4x3<float64, highp>;
+
+// tmat4x4 type explicit instantiation
+template struct tmat4x4<float32, lowp>;
+template struct tmat4x4<float64, lowp>;
+
+template struct tmat4x4<float32, mediump>;
+template struct tmat4x4<float64, mediump>;
+
+template struct tmat4x4<float32, highp>;
+template struct tmat4x4<float64, highp>;
+
+// tquat type explicit instantiation
+template struct tquat<float32, lowp>;
+template struct tquat<float64, lowp>;
+
+template struct tquat<float32, mediump>;
+template struct tquat<float64, mediump>;
+
+template struct tquat<float32, highp>;
+template struct tquat<float64, highp>;
+
+//tdualquat type explicit instantiation
+template struct tdualquat<float32, lowp>;
+template struct tdualquat<float64, lowp>;
+
+template struct tdualquat<float32, mediump>;
+template struct tdualquat<float64, mediump>;
+
+template struct tdualquat<float32, highp>;
+template struct tdualquat<float64, highp>;
+
+}//namespace glm
+
diff --git a/src/third_party/glm/glm/detail/precision.hpp b/src/third_party/glm/glm/detail/precision.hpp
new file mode 100644
index 0000000..7c54437
--- /dev/null
+++ b/src/third_party/glm/glm/detail/precision.hpp
@@ -0,0 +1,63 @@
+/// @ref core
+/// @file glm/detail/precision.hpp
+
+#pragma once
+
+#include "setup.hpp"
+
+namespace glm
+{
+ enum precision
+ {
+ packed_highp,
+ packed_mediump,
+ packed_lowp,
+
+# if GLM_HAS_ALIGNED_TYPE
+ aligned_highp,
+ aligned_mediump,
+ aligned_lowp,
+ aligned = aligned_highp,
+# endif
+
+ highp = packed_highp,
+ mediump = packed_mediump,
+ lowp = packed_lowp,
+ packed = packed_highp,
+
+# if GLM_HAS_ALIGNED_TYPE && defined(GLM_FORCE_ALIGNED)
+ defaultp = aligned_highp
+# else
+ defaultp = highp
+# endif
+ };
+
+namespace detail
+{
+ template <glm::precision P>
+ struct is_aligned
+ {
+ static const bool value = false;
+ };
+
+# if GLM_HAS_ALIGNED_TYPE
+ template<>
+ struct is_aligned<glm::aligned_lowp>
+ {
+ static const bool value = true;
+ };
+
+ template<>
+ struct is_aligned<glm::aligned_mediump>
+ {
+ static const bool value = true;
+ };
+
+ template<>
+ struct is_aligned<glm::aligned_highp>
+ {
+ static const bool value = true;
+ };
+# endif
+}//namespace detail
+}//namespace glm
diff --git a/src/third_party/glm/glm/detail/setup.hpp b/src/third_party/glm/glm/detail/setup.hpp
new file mode 100644
index 0000000..51c7c1a
--- /dev/null
+++ b/src/third_party/glm/glm/detail/setup.hpp
@@ -0,0 +1,777 @@
+/// @ref core
+/// @file glm/detail/setup.hpp
+
+#pragma once
+
+#if defined(GLM_FORCE_SWIZZLE) && defined(GLM_FORCE_UNRESTRICTED_GENTYPE)
+# error "Both GLM_FORCE_SWIZZLE and GLM_FORCE_UNRESTRICTED_GENTYPE can't be defined at the same time"
+#endif
+
+///////////////////////////////////////////////////////////////////////////////////
+// Messages
+
+#define GLM_MESSAGES_ENABLED 1
+#define GLM_MESSAGES_DISABLE 0
+
+#if defined(GLM_FORCE_MESSAGES)
+# define GLM_MESSAGES GLM_MESSAGES_ENABLED
+#else
+# define GLM_MESSAGES GLM_MESSAGES_DISABLE
+#endif
+
+#include <cassert>
+#include <cstddef>
+#include "../simd/platform.h"
+
+///////////////////////////////////////////////////////////////////////////////////
+// Version
+
+#define GLM_VERSION 99
+#define GLM_VERSION_MAJOR 0
+#define GLM_VERSION_MINOR 9
+#define GLM_VERSION_PATCH 9
+#define GLM_VERSION_REVISION 0
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_MESSAGE_VERSION_DISPLAYED)
+# define GLM_MESSAGE_VERSION_DISPLAYED
+# pragma message ("GLM: version 0.9.9.0")
+#endif//GLM_MESSAGES
+
+// Report compiler detection
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_MESSAGE_COMPILER_DISPLAYED)
+# define GLM_MESSAGE_COMPILER_DISPLAYED
+# if GLM_COMPILER & GLM_COMPILER_CUDA
+# pragma message("GLM: CUDA compiler detected")
+# elif GLM_COMPILER & GLM_COMPILER_VC
+# pragma message("GLM: Visual C++ compiler detected")
+# elif GLM_COMPILER & GLM_COMPILER_CLANG
+# pragma message("GLM: Clang compiler detected")
+# elif GLM_COMPILER & GLM_COMPILER_INTEL
+# pragma message("GLM: Intel Compiler detected")
+# elif GLM_COMPILER & GLM_COMPILER_GCC
+# pragma message("GLM: GCC compiler detected")
+# else
+# pragma message("GLM: Compiler not detected")
+# endif
+#endif//GLM_MESSAGES
+
+///////////////////////////////////////////////////////////////////////////////////
+// Build model
+
+#if defined(__arch64__) || defined(__LP64__) || defined(_M_X64) || defined(__ppc64__) || defined(__x86_64__)
+# define GLM_MODEL GLM_MODEL_64
+#elif defined(__i386__) || defined(__ppc__)
+# define GLM_MODEL GLM_MODEL_32
+#else
+# define GLM_MODEL GLM_MODEL_32
+#endif//
+
+#if !defined(GLM_MODEL) && GLM_COMPILER != 0
+# error "GLM_MODEL undefined, your compiler may not be supported by GLM. Add #define GLM_MODEL 0 to ignore this message."
+#endif//GLM_MODEL
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_MESSAGE_MODEL_DISPLAYED)
+# define GLM_MESSAGE_MODEL_DISPLAYED
+# if(GLM_MODEL == GLM_MODEL_64)
+# pragma message("GLM: 64 bits model")
+# elif(GLM_MODEL == GLM_MODEL_32)
+# pragma message("GLM: 32 bits model")
+# endif//GLM_MODEL
+#endif//GLM_MESSAGES
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_MESSAGE_ARCH_DISPLAYED)
+# define GLM_MESSAGE_ARCH_DISPLAYED
+# if(GLM_ARCH == GLM_ARCH_PURE)
+# pragma message("GLM: Platform independent code")
+# elif(GLM_ARCH == GLM_ARCH_AVX2)
+# pragma message("GLM: AVX2 instruction set")
+# elif(GLM_ARCH == GLM_ARCH_AVX)
+# pragma message("GLM: AVX instruction set")
+# elif(GLM_ARCH == GLM_ARCH_SSE42)
+# pragma message("GLM: SSE4.2 instruction set")
+# elif(GLM_ARCH == GLM_ARCH_SSE41)
+# pragma message("GLM: SSE4.1 instruction set")
+# elif(GLM_ARCH == GLM_ARCH_SSSE3)
+# pragma message("GLM: SSSE3 instruction set")
+# elif(GLM_ARCH == GLM_ARCH_SSE3)
+# pragma message("GLM: SSE3 instruction set")
+# elif(GLM_ARCH == GLM_ARCH_SSE2)
+# pragma message("GLM: SSE2 instruction set")
+# elif(GLM_ARCH == GLM_ARCH_X86)
+# pragma message("GLM: x86 instruction set")
+# elif(GLM_ARCH == GLM_ARCH_NEON)
+# pragma message("GLM: NEON instruction set")
+# elif(GLM_ARCH == GLM_ARCH_ARM)
+# pragma message("GLM: ARM instruction set")
+# elif(GLM_ARCH == GLM_ARCH_MIPS)
+# pragma message("GLM: MIPS instruction set")
+# elif(GLM_ARCH == GLM_ARCH_PPC)
+# pragma message("GLM: PowerPC architechture")
+# endif//GLM_ARCH
+#endif//GLM_MESSAGES
+
+///////////////////////////////////////////////////////////////////////////////////
+// C++ Version
+
+// User defines: GLM_FORCE_CXX98, GLM_FORCE_CXX03, GLM_FORCE_CXX11, GLM_FORCE_CXX14
+
+#define GLM_LANG_CXX98_FLAG (1 << 1)
+#define GLM_LANG_CXX03_FLAG (1 << 2)
+#define GLM_LANG_CXX0X_FLAG (1 << 3)
+#define GLM_LANG_CXX11_FLAG (1 << 4)
+#define GLM_LANG_CXX1Y_FLAG (1 << 5)
+#define GLM_LANG_CXX14_FLAG (1 << 6)
+#define GLM_LANG_CXX1Z_FLAG (1 << 7)
+#define GLM_LANG_CXXMS_FLAG (1 << 8)
+#define GLM_LANG_CXXGNU_FLAG (1 << 9)
+
+#define GLM_LANG_CXX98 GLM_LANG_CXX98_FLAG
+#define GLM_LANG_CXX03 (GLM_LANG_CXX98 | GLM_LANG_CXX03_FLAG)
+#define GLM_LANG_CXX0X (GLM_LANG_CXX03 | GLM_LANG_CXX0X_FLAG)
+#define GLM_LANG_CXX11 (GLM_LANG_CXX0X | GLM_LANG_CXX11_FLAG)
+#define GLM_LANG_CXX1Y (GLM_LANG_CXX11 | GLM_LANG_CXX1Y_FLAG)
+#define GLM_LANG_CXX14 (GLM_LANG_CXX1Y | GLM_LANG_CXX14_FLAG)
+#define GLM_LANG_CXX1Z (GLM_LANG_CXX14 | GLM_LANG_CXX1Z_FLAG)
+#define GLM_LANG_CXXMS GLM_LANG_CXXMS_FLAG
+#define GLM_LANG_CXXGNU GLM_LANG_CXXGNU_FLAG
+
+#if defined(GLM_FORCE_CXX14)
+# undef GLM_FORCE_CXX11
+# undef GLM_FORCE_CXX03
+# undef GLM_FORCE_CXX98
+# define GLM_LANG GLM_LANG_CXX14
+#elif defined(GLM_FORCE_CXX11)
+# undef GLM_FORCE_CXX03
+# undef GLM_FORCE_CXX98
+# define GLM_LANG GLM_LANG_CXX11
+#elif defined(GLM_FORCE_CXX03)
+# undef GLM_FORCE_CXX98
+# define GLM_LANG GLM_LANG_CXX03
+#elif defined(GLM_FORCE_CXX98)
+# define GLM_LANG GLM_LANG_CXX98
+#else
+# if GLM_COMPILER & GLM_COMPILER_CLANG
+# if __cplusplus >= 201402L // GLM_COMPILER_CLANG34 + -std=c++14
+# define GLM_LANG GLM_LANG_CXX14
+# elif __has_feature(cxx_decltype_auto) && __has_feature(cxx_aggregate_nsdmi) // GLM_COMPILER_CLANG33 + -std=c++1y
+# define GLM_LANG GLM_LANG_CXX1Y
+# elif __cplusplus >= 201103L // GLM_COMPILER_CLANG33 + -std=c++11
+# define GLM_LANG GLM_LANG_CXX11
+# elif __has_feature(cxx_static_assert) // GLM_COMPILER_CLANG29 + -std=c++11
+# define GLM_LANG GLM_LANG_CXX0X
+# elif __cplusplus >= 199711L
+# define GLM_LANG GLM_LANG_CXX98
+# else
+# define GLM_LANG GLM_LANG_CXX
+# endif
+# elif GLM_COMPILER & GLM_COMPILER_GCC
+# if __cplusplus >= 201402L
+# define GLM_LANG GLM_LANG_CXX14
+# elif __cplusplus >= 201103L
+# define GLM_LANG GLM_LANG_CXX11
+# elif defined(__GXX_EXPERIMENTAL_CXX0X__)
+# define GLM_LANG GLM_LANG_CXX0X
+# else
+# define GLM_LANG GLM_LANG_CXX98
+# endif
+# elif GLM_COMPILER & GLM_COMPILER_VC
+# ifdef _MSC_EXTENSIONS
+# if __cplusplus >= 201402L
+# define GLM_LANG (GLM_LANG_CXX14 | GLM_LANG_CXXMS_FLAG)
+//# elif GLM_COMPILER >= GLM_COMPILER_VC2015
+//# define GLM_LANG (GLM_LANG_CXX1Y | GLM_LANG_CXXMS_FLAG)
+# elif __cplusplus >= 201103L
+# define GLM_LANG (GLM_LANG_CXX11 | GLM_LANG_CXXMS_FLAG)
+# elif GLM_COMPILER >= GLM_COMPILER_VC2010
+# define GLM_LANG (GLM_LANG_CXX0X | GLM_LANG_CXXMS_FLAG)
+# elif __cplusplus >= 199711L
+# define GLM_LANG (GLM_LANG_CXX98 | GLM_LANG_CXXMS_FLAG)
+# else
+# define GLM_LANG (GLM_LANG_CXX | GLM_LANG_CXXMS_FLAG)
+# endif
+# else
+# if __cplusplus >= 201402L
+# define GLM_LANG GLM_LANG_CXX14
+# elif __cplusplus >= 201103L
+# define GLM_LANG GLM_LANG_CXX11
+# elif GLM_COMPILER >= GLM_COMPILER_VC2010
+# define GLM_LANG GLM_LANG_CXX0X
+# elif __cplusplus >= 199711L
+# define GLM_LANG GLM_LANG_CXX98
+# else
+# define GLM_LANG GLM_LANG_CXX
+# endif
+# endif
+# elif GLM_COMPILER & GLM_COMPILER_INTEL
+# ifdef _MSC_EXTENSIONS
+# define GLM_MSC_EXT GLM_LANG_CXXMS_FLAG
+# else
+# define GLM_MSC_EXT 0
+# endif
+# if __cplusplus >= 201402L
+# define GLM_LANG (GLM_LANG_CXX14 | GLM_MSC_EXT)
+# elif __cplusplus >= 201103L
+# define GLM_LANG (GLM_LANG_CXX11 | GLM_MSC_EXT)
+# elif __INTEL_CXX11_MODE__
+# define GLM_LANG (GLM_LANG_CXX0X | GLM_MSC_EXT)
+# elif __cplusplus >= 199711L
+# define GLM_LANG (GLM_LANG_CXX98 | GLM_MSC_EXT)
+# else
+# define GLM_LANG (GLM_LANG_CXX | GLM_MSC_EXT)
+# endif
+# elif GLM_COMPILER & GLM_COMPILER_CUDA
+# ifdef _MSC_EXTENSIONS
+# define GLM_MSC_EXT GLM_LANG_CXXMS_FLAG
+# else
+# define GLM_MSC_EXT 0
+# endif
+# if GLM_COMPILER >= GLM_COMPILER_CUDA75
+# define GLM_LANG (GLM_LANG_CXX0X | GLM_MSC_EXT)
+# else
+# define GLM_LANG (GLM_LANG_CXX98 | GLM_MSC_EXT)
+# endif
+# else // Unknown compiler
+# if __cplusplus >= 201402L
+# define GLM_LANG GLM_LANG_CXX14
+# elif __cplusplus >= 201103L
+# define GLM_LANG GLM_LANG_CXX11
+# elif __cplusplus >= 199711L
+# define GLM_LANG GLM_LANG_CXX98
+# else
+# define GLM_LANG GLM_LANG_CXX // Good luck with that!
+# endif
+# ifndef GLM_FORCE_PURE
+# define GLM_FORCE_PURE
+# endif
+# endif
+#endif
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_MESSAGE_LANG_DISPLAYED)
+# define GLM_MESSAGE_LANG_DISPLAYED
+
+# if GLM_LANG & GLM_LANG_CXX1Z_FLAG
+# pragma message("GLM: C++1z")
+# elif GLM_LANG & GLM_LANG_CXX14_FLAG
+# pragma message("GLM: C++14")
+# elif GLM_LANG & GLM_LANG_CXX1Y_FLAG
+# pragma message("GLM: C++1y")
+# elif GLM_LANG & GLM_LANG_CXX11_FLAG
+# pragma message("GLM: C++11")
+# elif GLM_LANG & GLM_LANG_CXX0X_FLAG
+# pragma message("GLM: C++0x")
+# elif GLM_LANG & GLM_LANG_CXX03_FLAG
+# pragma message("GLM: C++03")
+# elif GLM_LANG & GLM_LANG_CXX98_FLAG
+# pragma message("GLM: C++98")
+# else
+# pragma message("GLM: C++ language undetected")
+# endif//GLM_LANG
+
+# if GLM_LANG & (GLM_LANG_CXXGNU_FLAG | GLM_LANG_CXXMS_FLAG)
+# pragma message("GLM: Language extensions enabled")
+# endif//GLM_LANG
+#endif//GLM_MESSAGES
+
+///////////////////////////////////////////////////////////////////////////////////
+// Has of C++ features
+
+// http://clang.llvm.org/cxx_status.html
+// http://gcc.gnu.org/projects/cxx0x.html
+// http://msdn.microsoft.com/en-us/library/vstudio/hh567368(v=vs.120).aspx
+
+#if GLM_COMPILER & GLM_COMPILER_CLANG
+# if defined(_LIBCPP_VERSION) && GLM_LANG & GLM_LANG_CXX11_FLAG
+# define GLM_HAS_CXX11_STL 1
+# else
+# define GLM_HAS_CXX11_STL 0
+# endif
+#else
+# define GLM_HAS_CXX11_STL ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
+ ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC48)) || \
+ ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2013)) || \
+ ((GLM_PLATFORM != GLM_PLATFORM_WINDOWS) && (GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL15))))
+#endif
+
+// N1720
+#if GLM_COMPILER & GLM_COMPILER_CLANG
+# define GLM_HAS_STATIC_ASSERT __has_feature(cxx_static_assert)
+#elif GLM_LANG & GLM_LANG_CXX11_FLAG
+# define GLM_HAS_STATIC_ASSERT 1
+#else
+# define GLM_HAS_STATIC_ASSERT ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
+ ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC43)) || \
+ ((GLM_COMPILER & GLM_COMPILER_CUDA)) || \
+ ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2010))))
+#endif
+
+// N1988
+#if GLM_LANG & GLM_LANG_CXX11_FLAG
+# define GLM_HAS_EXTENDED_INTEGER_TYPE 1
+#else
+# define GLM_HAS_EXTENDED_INTEGER_TYPE (\
+ ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2012)) || \
+ ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_CUDA)) || \
+ ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC43)) || \
+ ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_CLANG) && (GLM_COMPILER >= GLM_COMPILER_CLANG30)))
+#endif
+
+// N2235
+#if GLM_COMPILER & GLM_COMPILER_CLANG
+# define GLM_HAS_CONSTEXPR __has_feature(cxx_constexpr)
+# define GLM_HAS_CONSTEXPR_PARTIAL GLM_HAS_CONSTEXPR
+#elif GLM_LANG & GLM_LANG_CXX11_FLAG
+# define GLM_HAS_CONSTEXPR 1
+# define GLM_HAS_CONSTEXPR_PARTIAL GLM_HAS_CONSTEXPR
+#else
+# define GLM_HAS_CONSTEXPR ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
+ ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC48)))) // GCC 4.6 support constexpr but there is a compiler bug causing a crash
+# define GLM_HAS_CONSTEXPR_PARTIAL (GLM_HAS_CONSTEXPR || ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2015)))
+#endif
+
+// N2672
+#if GLM_COMPILER & GLM_COMPILER_CLANG
+# define GLM_HAS_INITIALIZER_LISTS __has_feature(cxx_generalized_initializers)
+#elif GLM_LANG & GLM_LANG_CXX11_FLAG
+# define GLM_HAS_INITIALIZER_LISTS 1
+#else
+# define GLM_HAS_INITIALIZER_LISTS ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
+ ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC44)) || \
+ ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2013)) || \
+ ((GLM_COMPILER & GLM_COMPILER_CUDA) && (GLM_COMPILER >= GLM_COMPILER_CUDA75))))
+#endif
+
+// N2544 Unrestricted unions http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf
+#if GLM_COMPILER & GLM_COMPILER_CLANG
+# define GLM_HAS_UNRESTRICTED_UNIONS __has_feature(cxx_unrestricted_unions)
+#elif GLM_LANG & (GLM_LANG_CXX11_FLAG | GLM_LANG_CXXMS_FLAG)
+# define GLM_HAS_UNRESTRICTED_UNIONS 1
+#else
+# define GLM_HAS_UNRESTRICTED_UNIONS (GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
+ ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_LANG & GLM_LANG_CXXMS_FLAG)) || \
+ ((GLM_COMPILER & GLM_COMPILER_CUDA) && (GLM_COMPILER >= GLM_COMPILER_CUDA75)) || \
+ ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC46)))
+#endif
+
+// N2346
+#if defined(GLM_FORCE_UNRESTRICTED_GENTYPE)
+# define GLM_HAS_DEFAULTED_FUNCTIONS 0
+#elif GLM_COMPILER & GLM_COMPILER_CLANG
+# define GLM_HAS_DEFAULTED_FUNCTIONS __has_feature(cxx_defaulted_functions)
+#elif GLM_LANG & GLM_LANG_CXX11_FLAG
+# define GLM_HAS_DEFAULTED_FUNCTIONS 1
+#else
+# define GLM_HAS_DEFAULTED_FUNCTIONS ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
+ ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC44)) || \
+ ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2013)) || \
+ ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL12)) || \
+ (GLM_COMPILER & GLM_COMPILER_CUDA)))
+#endif
+
+// N2118
+#if GLM_COMPILER & GLM_COMPILER_CLANG
+# define GLM_HAS_RVALUE_REFERENCES __has_feature(cxx_rvalue_references)
+#elif GLM_LANG & GLM_LANG_CXX11_FLAG
+# define GLM_HAS_RVALUE_REFERENCES 1
+#else
+# define GLM_HAS_RVALUE_REFERENCES ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
+ ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC43)) || \
+ ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2012)) || \
+ ((GLM_COMPILER & GLM_COMPILER_CUDA) && (GLM_COMPILER >= GLM_COMPILER_CUDA50))))
+#endif
+
+// N2437 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf
+#if GLM_COMPILER & GLM_COMPILER_CLANG
+# define GLM_HAS_EXPLICIT_CONVERSION_OPERATORS __has_feature(cxx_explicit_conversions)
+#elif GLM_LANG & GLM_LANG_CXX11_FLAG
+# define GLM_HAS_EXPLICIT_CONVERSION_OPERATORS 1
+#else
+# define GLM_HAS_EXPLICIT_CONVERSION_OPERATORS ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
+ ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC45)) || \
+ ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL14)) || \
+ ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2013)) || \
+ ((GLM_COMPILER & GLM_COMPILER_CUDA) && (GLM_COMPILER >= GLM_COMPILER_CUDA50))))
+#endif
+
+// N2258 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf
+#if GLM_COMPILER & GLM_COMPILER_CLANG
+# define GLM_HAS_TEMPLATE_ALIASES __has_feature(cxx_alias_templates)
+#elif GLM_LANG & GLM_LANG_CXX11_FLAG
+# define GLM_HAS_TEMPLATE_ALIASES 1
+#else
+# define GLM_HAS_TEMPLATE_ALIASES ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
+ ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL12_1)) || \
+ ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC47)) || \
+ ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2013)) || \
+ ((GLM_COMPILER & GLM_COMPILER_CUDA) && (GLM_COMPILER >= GLM_COMPILER_CUDA50))))
+#endif
+
+// N2930 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2930.html
+#if GLM_COMPILER & GLM_COMPILER_CLANG
+# define GLM_HAS_RANGE_FOR __has_feature(cxx_range_for)
+#elif GLM_LANG & GLM_LANG_CXX11_FLAG
+# define GLM_HAS_RANGE_FOR 1
+#else
+# define GLM_HAS_RANGE_FOR ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
+ ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC46)) || \
+ ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL13)) || \
+ ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2012)) || \
+ ((GLM_COMPILER & GLM_COMPILER_CUDA) && (GLM_COMPILER >= GLM_COMPILER_CUDA50))))
+#endif
+
+// N2341 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf
+#if GLM_COMPILER & GLM_COMPILER_CLANG
+# define GLM_HAS_ALIGNOF __has_feature(c_alignof)
+#elif GLM_LANG & GLM_LANG_CXX11_FLAG
+# define GLM_HAS_ALIGNOF 1
+#else
+# define GLM_HAS_ALIGNOF ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
+ ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC48)) || \
+ ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL15)) || \
+ ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2015)) || \
+ ((GLM_COMPILER & GLM_COMPILER_CUDA) && (GLM_COMPILER >= GLM_COMPILER_CUDA70))))
+#endif
+
+//
+#if GLM_LANG & GLM_LANG_CXX11_FLAG
+# define GLM_HAS_ASSIGNABLE 1
+#else
+# define GLM_HAS_ASSIGNABLE ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
+ ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC49))))
+#endif
+
+//
+#define GLM_HAS_TRIVIAL_QUERIES 0
+
+//
+#if GLM_LANG & GLM_LANG_CXX11_FLAG
+# define GLM_HAS_MAKE_SIGNED 1
+#else
+# define GLM_HAS_MAKE_SIGNED ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\
+ ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2013)) || \
+ ((GLM_COMPILER & GLM_COMPILER_CUDA) && (GLM_COMPILER >= GLM_COMPILER_CUDA50))))
+#endif
+
+#if GLM_ARCH == GLM_ARCH_PURE
+# define GLM_HAS_BITSCAN_WINDOWS 0
+#else
+# define GLM_HAS_BITSCAN_WINDOWS ((GLM_PLATFORM & GLM_PLATFORM_WINDOWS) && (\
+ (GLM_COMPILER & (GLM_COMPILER_VC | GLM_COMPILER_INTEL))))
+#endif
+
+// OpenMP
+#ifdef _OPENMP
+# if GLM_COMPILER & GLM_COMPILER_GCC
+# if GLM_COMPILER >= GLM_COMPILER_GCC61
+# define GLM_HAS_OPENMP 45
+# elif GLM_COMPILER >= GLM_COMPILER_GCC49
+# define GLM_HAS_OPENMP 40
+# elif GLM_COMPILER >= GLM_COMPILER_GCC47
+# define GLM_HAS_OPENMP 31
+# elif GLM_COMPILER >= GLM_COMPILER_GCC44
+# define GLM_HAS_OPENMP 30
+# elif GLM_COMPILER >= GLM_COMPILER_GCC42
+# define GLM_HAS_OPENMP 25
+# else
+# define GLM_HAS_OPENMP 0
+# endif
+# elif GLM_COMPILER & GLM_COMPILER_CLANG
+# if GLM_COMPILER >= GLM_COMPILER_CLANG38
+# define GLM_HAS_OPENMP 31
+# else
+# define GLM_HAS_OPENMP 0
+# endif
+# elif GLM_COMPILER & GLM_COMPILER_VC
+# if GLM_COMPILER >= GLM_COMPILER_VC2010
+# define GLM_HAS_OPENMP 20
+# else
+# define GLM_HAS_OPENMP 0
+# endif
+# elif GLM_COMPILER & GLM_COMPILER_INTEL
+# if GLM_COMPILER >= GLM_COMPILER_INTEL16
+# define GLM_HAS_OPENMP 40
+# elif GLM_COMPILER >= GLM_COMPILER_INTEL12
+# define GLM_HAS_OPENMP 31
+# else
+# define GLM_HAS_OPENMP 0
+# endif
+# else
+# define GLM_HAS_OPENMP 0
+# endif// GLM_COMPILER & GLM_COMPILER_VC
+#endif
+
+///////////////////////////////////////////////////////////////////////////////////
+// Static assert
+
+#if GLM_HAS_STATIC_ASSERT
+# define GLM_STATIC_ASSERT(x, message) static_assert(x, message)
+#elif defined(BOOST_STATIC_ASSERT)
+# define GLM_STATIC_ASSERT(x, message) BOOST_STATIC_ASSERT(x)
+#elif GLM_COMPILER & GLM_COMPILER_VC
+# define GLM_STATIC_ASSERT(x, message) typedef char __CASSERT__##__LINE__[(x) ? 1 : -1]
+#else
+# define GLM_STATIC_ASSERT(x, message)
+# define GLM_STATIC_ASSERT_NULL
+#endif//GLM_LANG
+
+///////////////////////////////////////////////////////////////////////////////////
+// Qualifiers
+
+#if GLM_COMPILER & GLM_COMPILER_CUDA
+# define GLM_CUDA_FUNC_DEF __device__ __host__
+# define GLM_CUDA_FUNC_DECL __device__ __host__
+#else
+# define GLM_CUDA_FUNC_DEF
+# define GLM_CUDA_FUNC_DECL
+#endif
+
+#if GLM_COMPILER & GLM_COMPILER_GCC
+# define GLM_VAR_USED __attribute__ ((unused))
+#else
+# define GLM_VAR_USED
+#endif
+
+#if defined(GLM_FORCE_INLINE)
+# if GLM_COMPILER & GLM_COMPILER_VC
+# define GLM_INLINE __forceinline
+# define GLM_NEVER_INLINE __declspec((noinline))
+# elif GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG)
+# define GLM_INLINE inline __attribute__((__always_inline__))
+# define GLM_NEVER_INLINE __attribute__((__noinline__))
+# elif GLM_COMPILER & GLM_COMPILER_CUDA
+# define GLM_INLINE __forceinline__
+# define GLM_NEVER_INLINE __noinline__
+# else
+# define GLM_INLINE inline
+# define GLM_NEVER_INLINE
+# endif//GLM_COMPILER
+#else
+# define GLM_INLINE inline
+# define GLM_NEVER_INLINE
+#endif//defined(GLM_FORCE_INLINE)
+
+#define GLM_FUNC_DECL GLM_CUDA_FUNC_DECL
+#define GLM_FUNC_QUALIFIER GLM_CUDA_FUNC_DEF GLM_INLINE
+
+///////////////////////////////////////////////////////////////////////////////////
+// Swizzle operators
+
+// User defines: GLM_FORCE_SWIZZLE
+
+#define GLM_SWIZZLE_ENABLED 1
+#define GLM_SWIZZLE_DISABLE 0
+
+#if defined(GLM_FORCE_SWIZZLE)
+# define GLM_SWIZZLE GLM_SWIZZLE_ENABLED
+#else
+# define GLM_SWIZZLE GLM_SWIZZLE_DISABLE
+#endif
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_MESSAGE_SWIZZLE_DISPLAYED)
+# define GLM_MESSAGE_SWIZZLE_DISPLAYED
+# if GLM_SWIZZLE == GLM_SWIZZLE_ENABLED
+# pragma message("GLM: Swizzling operators enabled")
+# else
+# pragma message("GLM: Swizzling operators disabled, #define GLM_SWIZZLE to enable swizzle operators")
+# endif
+#endif//GLM_MESSAGES
+
+///////////////////////////////////////////////////////////////////////////////////
+// Allows using not basic types as genType
+
+// #define GLM_FORCE_UNRESTRICTED_GENTYPE
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_MESSAGE_UNRESTRICTED_GENTYPE_DISPLAYED)
+# define GLM_MESSAGE_UNRESTRICTED_GENTYPE_DISPLAYED
+# ifdef GLM_FORCE_UNRESTRICTED_GENTYPE
+# pragma message("GLM: Use unrestricted genType")
+# endif
+#endif//GLM_MESSAGES
+
+///////////////////////////////////////////////////////////////////////////////////
+// Clip control
+
+#define GLM_DEPTH_ZERO_TO_ONE 0x00000001
+#define GLM_DEPTH_NEGATIVE_ONE_TO_ONE 0x00000002
+
+#ifdef GLM_FORCE_DEPTH_ZERO_TO_ONE
+# define GLM_DEPTH_CLIP_SPACE GLM_DEPTH_ZERO_TO_ONE
+#else
+# define GLM_DEPTH_CLIP_SPACE GLM_DEPTH_NEGATIVE_ONE_TO_ONE
+#endif
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_MESSAGE_DEPTH_DISPLAYED)
+# define GLM_MESSAGE_DEPTH_DISPLAYED
+# if GLM_DEPTH_CLIP_SPACE == GLM_DEPTH_ZERO_TO_ONE
+# pragma message("GLM: Depth clip space: Zero to one")
+# else
+# pragma message("GLM: Depth clip space: negative one to one")
+# endif
+#endif//GLM_MESSAGES
+
+///////////////////////////////////////////////////////////////////////////////////
+// Coordinate system, define GLM_FORCE_LEFT_HANDED before including GLM
+// to use left handed coordinate system by default.
+
+#define GLM_LEFT_HANDED 0x00000001 // For DirectX, Metal, Vulkan
+#define GLM_RIGHT_HANDED 0x00000002 // For OpenGL, default in GLM
+
+#ifdef GLM_FORCE_LEFT_HANDED
+# define GLM_COORDINATE_SYSTEM GLM_LEFT_HANDED
+#else
+# define GLM_COORDINATE_SYSTEM GLM_RIGHT_HANDED
+#endif
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_MESSAGE_HANDED_DISPLAYED)
+# define GLM_MESSAGE_HANDED_DISPLAYED
+# if GLM_COORDINATE_SYSTEM == GLM_LEFT_HANDED
+# pragma message("GLM: Coordinate system: left handed")
+# else
+# pragma message("GLM: Coordinate system: right handed")
+# endif
+#endif//GLM_MESSAGES
+
+///////////////////////////////////////////////////////////////////////////////////
+// Qualifiers
+
+#if (GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))
+# define GLM_DEPRECATED __declspec(deprecated)
+# define GLM_ALIGN(x) __declspec(align(x))
+# define GLM_ALIGNED_STRUCT(x) struct __declspec(align(x))
+# define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef __declspec(align(alignment)) type name
+# define GLM_RESTRICT_FUNC __declspec(restrict)
+# define GLM_RESTRICT __restrict
+# if GLM_COMPILER >= GLM_COMPILER_VC2013
+# define GLM_VECTOR_CALL __vectorcall
+# else
+# define GLM_VECTOR_CALL
+# endif
+#elif GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG | GLM_COMPILER_INTEL)
+# define GLM_DEPRECATED __attribute__((__deprecated__))
+# define GLM_ALIGN(x) __attribute__((aligned(x)))
+# define GLM_ALIGNED_STRUCT(x) struct __attribute__((aligned(x)))
+# define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name __attribute__((aligned(alignment)))
+# define GLM_RESTRICT_FUNC __restrict__
+# define GLM_RESTRICT __restrict__
+# if GLM_COMPILER & GLM_COMPILER_CLANG
+# if GLM_COMPILER >= GLM_COMPILER_CLANG37
+# define GLM_VECTOR_CALL __vectorcall
+# else
+# define GLM_VECTOR_CALL
+# endif
+# else
+# define GLM_VECTOR_CALL
+# endif
+#elif GLM_COMPILER & GLM_COMPILER_CUDA
+# define GLM_DEPRECATED
+# define GLM_ALIGN(x) __align__(x)
+# define GLM_ALIGNED_STRUCT(x) struct __align__(x)
+# define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name __align__(x)
+# define GLM_RESTRICT_FUNC __restrict__
+# define GLM_RESTRICT __restrict__
+# define GLM_VECTOR_CALL
+#else
+# define GLM_DEPRECATED
+# define GLM_ALIGN
+# define GLM_ALIGNED_STRUCT(x) struct
+# define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name
+# define GLM_RESTRICT_FUNC
+# define GLM_RESTRICT
+# define GLM_VECTOR_CALL
+#endif//GLM_COMPILER
+
+#if GLM_HAS_DEFAULTED_FUNCTIONS
+# define GLM_DEFAULT = default
+# ifdef GLM_FORCE_NO_CTOR_INIT
+# define GLM_DEFAULT_CTOR = default
+# else
+# define GLM_DEFAULT_CTOR
+# endif
+#else
+# define GLM_DEFAULT
+# define GLM_DEFAULT_CTOR
+#endif
+
+#if GLM_HAS_CONSTEXPR
+# define GLM_CONSTEXPR constexpr
+# define GLM_CONSTEXPR_CTOR constexpr
+# define GLM_RELAXED_CONSTEXPR constexpr
+#elif GLM_HAS_CONSTEXPR_PARTIAL
+# define GLM_CONSTEXPR constexpr
+# define GLM_CONSTEXPR_CTOR
+# define GLM_RELAXED_CONSTEXPR const
+#else
+# define GLM_CONSTEXPR
+# define GLM_CONSTEXPR_CTOR
+# define GLM_RELAXED_CONSTEXPR const
+#endif
+
+#if GLM_ARCH == GLM_ARCH_PURE
+# define GLM_CONSTEXPR_SIMD GLM_CONSTEXPR
+#else
+# define GLM_CONSTEXPR_SIMD
+#endif
+
+#ifdef GLM_FORCE_EXPLICIT_CTOR
+# define GLM_EXPLICIT explicit
+#else
+# define GLM_EXPLICIT
+#endif
+
+///////////////////////////////////////////////////////////////////////////////////
+
+#define GLM_HAS_ALIGNED_TYPE GLM_HAS_UNRESTRICTED_UNIONS
+
+///////////////////////////////////////////////////////////////////////////////////
+// Length type
+
+// User defines: GLM_FORCE_SIZE_T_LENGTH GLM_FORCE_SIZE_FUNC
+
+namespace glm
+{
+ using std::size_t;
+# if defined(GLM_FORCE_SIZE_T_LENGTH)
+ typedef size_t length_t;
+# else
+ typedef int length_t;
+# endif
+}//namespace glm
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_MESSAGE_FORCE_SIZE_T_LENGTH)
+# define GLM_MESSAGE_FORCE_SIZE_T_LENGTH
+# if defined GLM_FORCE_SIZE_T_LENGTH
+# pragma message("GLM: .length() returns glm::length_t, a typedef of std::size_t")
+# else
+# pragma message("GLM: .length() returns glm::length_t, a typedef of int following the GLSL specification")
+# endif
+#endif//GLM_MESSAGES
+
+///////////////////////////////////////////////////////////////////////////////////
+// countof
+
+#ifndef __has_feature
+# define __has_feature(x) 0 // Compatibility with non-clang compilers.
+#endif
+
+#if GLM_HAS_CONSTEXPR_PARTIAL
+ namespace glm
+ {
+ template <typename T, std::size_t N>
+ constexpr std::size_t countof(T const (&)[N])
+ {
+ return N;
+ }
+ }//namespace glm
+# define GLM_COUNTOF(arr) glm::countof(arr)
+#elif defined(_MSC_VER)
+# define GLM_COUNTOF(arr) _countof(arr)
+#else
+# define GLM_COUNTOF(arr) sizeof(arr) / sizeof(arr[0])
+#endif
+
+///////////////////////////////////////////////////////////////////////////////////
+// Uninitialize constructors
+
+namespace glm
+{
+ enum ctor{uninitialize};
+}//namespace glm
diff --git a/src/third_party/glm/glm/detail/type_float.hpp b/src/third_party/glm/glm/detail/type_float.hpp
new file mode 100644
index 0000000..900a3fb
--- /dev/null
+++ b/src/third_party/glm/glm/detail/type_float.hpp
@@ -0,0 +1,67 @@
+/// @ref core
+/// @file glm/detail/type_float.hpp
+
+#pragma once
+
+#include "setup.hpp"
+
+namespace glm{
+namespace detail
+{
+ typedef float float32;
+ typedef double float64;
+}//namespace detail
+
+ typedef float lowp_float_t;
+ typedef float mediump_float_t;
+ typedef double highp_float_t;
+
+ /// @addtogroup core_precision
+ /// @{
+
+ /// Low precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.4 Floats</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef lowp_float_t lowp_float;
+
+ /// Medium precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.4 Floats</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef mediump_float_t mediump_float;
+
+ /// High precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.4 Floats</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef highp_float_t highp_float;
+
+#if(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
+ typedef mediump_float float_t;
+#elif(defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
+ typedef highp_float float_t;
+#elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
+ typedef mediump_float float_t;
+#elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && defined(GLM_PRECISION_LOWP_FLOAT))
+ typedef lowp_float float_t;
+#else
+# error "GLM error: multiple default precision requested for floating-point types"
+#endif
+
+ typedef float float32;
+ typedef double float64;
+
+////////////////////
+// check type sizes
+#ifndef GLM_STATIC_ASSERT_NULL
+ GLM_STATIC_ASSERT(sizeof(glm::float32) == 4, "float32 size isn't 4 bytes on this platform");
+ GLM_STATIC_ASSERT(sizeof(glm::float64) == 8, "float64 size isn't 8 bytes on this platform");
+#endif//GLM_STATIC_ASSERT_NULL
+
+ /// @}
+
+}//namespace glm
diff --git a/src/third_party/glm/glm/detail/type_gentype.hpp b/src/third_party/glm/glm/detail/type_gentype.hpp
new file mode 100644
index 0000000..8fd202e
--- /dev/null
+++ b/src/third_party/glm/glm/detail/type_gentype.hpp
@@ -0,0 +1,195 @@
+/// @ref core
+/// @file glm/detail/type_gentype.hpp
+
+#pragma once
+
+namespace glm
+{
+ enum profile
+ {
+ nice,
+ fast,
+ simd
+ };
+
+ typedef std::size_t sizeType;
+
+namespace detail
+{
+ template
+ <
+ typename VALTYPE,
+ template <typename> class TYPE
+ >
+ struct genType
+ {
+ public:
+ enum ctor{null};
+
+ typedef VALTYPE value_type;
+ typedef VALTYPE & value_reference;
+ typedef VALTYPE * value_pointer;
+ typedef VALTYPE const * value_const_pointer;
+ typedef TYPE<bool> bool_type;
+
+ typedef sizeType size_type;
+ static bool is_vector();
+ static bool is_matrix();
+
+ typedef TYPE<VALTYPE> type;
+ typedef TYPE<VALTYPE> * pointer;
+ typedef TYPE<VALTYPE> const * const_pointer;
+ typedef TYPE<VALTYPE> const * const const_pointer_const;
+ typedef TYPE<VALTYPE> * const pointer_const;
+ typedef TYPE<VALTYPE> & reference;
+ typedef TYPE<VALTYPE> const & const_reference;
+ typedef TYPE<VALTYPE> const & param_type;
+
+ //////////////////////////////////////
+ // Address (Implementation details)
+
+ value_const_pointer value_address() const{return value_pointer(this);}
+ value_pointer value_address(){return value_pointer(this);}
+
+ //protected:
+ // enum kind
+ // {
+ // GEN_TYPE,
+ // VEC_TYPE,
+ // MAT_TYPE
+ // };
+
+ // typedef typename TYPE::kind kind;
+ };
+
+ template
+ <
+ typename VALTYPE,
+ template <typename> class TYPE
+ >
+ bool genType<VALTYPE, TYPE>::is_vector()
+ {
+ return true;
+ }
+/*
+ template <typename valTypeT, unsigned int colT, unsigned int rowT, profile proT = nice>
+ class base
+ {
+ public:
+ //////////////////////////////////////
+ // Traits
+
+ typedef sizeType size_type;
+ typedef valTypeT value_type;
+
+ typedef base<value_type, colT, rowT> class_type;
+
+ typedef base<bool, colT, rowT> bool_type;
+ typedef base<value_type, rowT, 1> col_type;
+ typedef base<value_type, colT, 1> row_type;
+ typedef base<value_type, rowT, colT> transpose_type;
+
+ static size_type col_size();
+ static size_type row_size();
+ static size_type value_size();
+ static bool is_scalar();
+ static bool is_vector();
+ static bool is_matrix();
+
+ private:
+ // Data
+ col_type value[colT];
+
+ public:
+ //////////////////////////////////////
+ // Constructors
+ base();
+ base(class_type const & m);
+
+ explicit base(T const & x);
+ explicit base(value_type const * const x);
+ explicit base(col_type const * const x);
+
+ //////////////////////////////////////
+ // Conversions
+ template <typename vU, uint cU, uint rU, profile pU>
+ explicit base(base<vU, cU, rU, pU> const & m);
+
+ //////////////////////////////////////
+ // Accesses
+ col_type& operator[](size_type i);
+ col_type const & operator[](size_type i) const;
+
+ //////////////////////////////////////
+ // Unary updatable operators
+ class_type& operator= (class_type const & x);
+ class_type& operator+= (T const & x);
+ class_type& operator+= (class_type const & x);
+ class_type& operator-= (T const & x);
+ class_type& operator-= (class_type const & x);
+ class_type& operator*= (T const & x);
+ class_type& operator*= (class_type const & x);
+ class_type& operator/= (T const & x);
+ class_type& operator/= (class_type const & x);
+ class_type& operator++ ();
+ class_type& operator-- ();
+ };
+*/
+
+ //template <typename T>
+ //struct traits
+ //{
+ // static const bool is_signed = false;
+ // static const bool is_float = false;
+ // static const bool is_vector = false;
+ // static const bool is_matrix = false;
+ // static const bool is_genType = false;
+ // static const bool is_genIType = false;
+ // static const bool is_genUType = false;
+ //};
+
+ //template <>
+ //struct traits<half>
+ //{
+ // static const bool is_float = true;
+ // static const bool is_genType = true;
+ //};
+
+ //template <>
+ //struct traits<float>
+ //{
+ // static const bool is_float = true;
+ // static const bool is_genType = true;
+ //};
+
+ //template <>
+ //struct traits<double>
+ //{
+ // static const bool is_float = true;
+ // static const bool is_genType = true;
+ //};
+
+ //template <typename genType>
+ //struct desc
+ //{
+ // typedef genType type;
+ // typedef genType * pointer;
+ // typedef genType const* const_pointer;
+ // typedef genType const *const const_pointer_const;
+ // typedef genType *const pointer_const;
+ // typedef genType & reference;
+ // typedef genType const& const_reference;
+ // typedef genType const& param_type;
+
+ // typedef typename genType::value_type value_type;
+ // typedef typename genType::size_type size_type;
+ // static const typename size_type value_size;
+ //};
+
+ //template <typename genType>
+ //const typename desc<genType>::size_type desc<genType>::value_size = genType::value_size();
+
+}//namespace detail
+}//namespace glm
+
+//#include "type_gentype.inl"
diff --git a/src/third_party/glm/glm/detail/type_gentype.inl b/src/third_party/glm/glm/detail/type_gentype.inl
new file mode 100644
index 0000000..6a90288
--- /dev/null
+++ b/src/third_party/glm/glm/detail/type_gentype.inl
@@ -0,0 +1,341 @@
+/// @ref core
+/// @file glm/detail/type_gentype.inl
+
+namespace glm{
+namespace detail{
+
+/////////////////////////////////
+// Static functions
+
+template <typename vT, uint cT, uint rT, profile pT>
+typename base<vT, cT, rT, pT>::size_type base<vT, cT, rT, pT>::col_size()
+{
+ return cT;
+}
+
+template <typename vT, uint cT, uint rT, profile pT>
+typename base<vT, cT, rT, pT>::size_type base<vT, cT, rT, pT>::row_size()
+{
+ return rT;
+}
+
+template <typename vT, uint cT, uint rT, profile pT>
+typename base<vT, cT, rT, pT>::size_type base<vT, cT, rT, pT>::value_size()
+{
+ return rT * cT;
+}
+
+template <typename vT, uint cT, uint rT, profile pT>
+bool base<vT, cT, rT, pT>::is_scalar()
+{
+ return rT == 1 && cT == 1;
+}
+
+template <typename vT, uint cT, uint rT, profile pT>
+bool base<vT, cT, rT, pT>::is_vector()
+{
+ return rT == 1;
+}
+
+template <typename vT, uint cT, uint rT, profile pT>
+bool base<vT, cT, rT, pT>::is_matrix()
+{
+ return rT != 1;
+}
+
+/////////////////////////////////
+// Constructor
+
+template <typename vT, uint cT, uint rT, profile pT>
+base<vT, cT, rT, pT>::base()
+{
+ memset(&this->value, 0, cT * rT * sizeof(vT));
+}
+
+template <typename vT, uint cT, uint rT, profile pT>
+base<vT, cT, rT, pT>::base
+(
+ typename base<vT, cT, rT, pT>::class_type const & m
+)
+{
+ for
+ (
+ typename genType<vT, cT, rT, pT>::size_type i = typename base<vT, cT, rT, pT>::size_type(0);
+ i < base<vT, cT, rT, pT>::col_size();
+ ++i
+ )
+ {
+ this->value[i] = m[i];
+ }
+}
+
+template <typename vT, uint cT, uint rT, profile pT>
+base<vT, cT, rT, pT>::base
+(
+ typename base<vT, cT, rT, pT>::T const & x
+)
+{
+ if(rT == 1) // vector
+ {
+ for
+ (
+ typename base<vT, cT, rT, pT>::size_type i = typename base<vT, cT, rT, pT>::size_type(0);
+ i < base<vT, cT, rT, pT>::col_size();
+ ++i
+ )
+ {
+ this->value[i][rT] = x;
+ }
+ }
+ else // matrix
+ {
+ memset(&this->value, 0, cT * rT * sizeof(vT));
+
+ typename base<vT, cT, rT, pT>::size_type stop = cT < rT ? cT : rT;
+
+ for
+ (
+ typename base<vT, cT, rT, pT>::size_type i = typename base<vT, cT, rT, pT>::size_type(0);
+ i < stop;
+ ++i
+ )
+ {
+ this->value[i][i] = x;
+ }
+ }
+}
+
+template <typename vT, uint cT, uint rT, profile pT>
+base<vT, cT, rT, pT>::base
+(
+ typename base<vT, cT, rT, pT>::value_type const * const x
+)
+{
+ memcpy(&this->value, &x.value, cT * rT * sizeof(vT));
+}
+
+template <typename vT, uint cT, uint rT, profile pT>
+base<vT, cT, rT, pT>::base
+(
+ typename base<vT, cT, rT, pT>::col_type const * const x
+)
+{
+ for
+ (
+ typename base<vT, cT, rT, pT>::size_type i = typename base<vT, cT, rT, pT>::size_type(0);
+ i < base<vT, cT, rT, pT>::col_size();
+ ++i
+ )
+ {
+ this->value[i] = x[i];
+ }
+}
+
+template <typename vT, uint cT, uint rT, profile pT>
+template <typename vU, uint cU, uint rU, profile pU>
+base<vT, cT, rT, pT>::base
+(
+ base<vU, cU, rU, pU> const & m
+)
+{
+ for
+ (
+ typename base<vT, cT, rT, pT>::size_type i = typename base<vT, cT, rT, pT>::size_type(0);
+ i < base<vT, cT, rT, pT>::col_size();
+ ++i
+ )
+ {
+ this->value[i] = base<vT, cT, rT, pT>(m[i]);
+ }
+}
+
+//////////////////////////////////////
+// Accesses
+
+template <typename vT, uint cT, uint rT, profile pT>
+typename base<vT, cT, rT, pT>::col_type& base<vT, cT, rT, pT>::operator[]
+(
+ typename base<vT, cT, rT, pT>::size_type i
+)
+{
+ return this->value[i];
+}
+
+template <typename vT, uint cT, uint rT, profile pT>
+typename base<vT, cT, rT, pT>::col_type const & base<vT, cT, rT, pT>::operator[]
+(
+ typename base<vT, cT, rT, pT>::size_type i
+) const
+{
+ return this->value[i];
+}
+
+//////////////////////////////////////
+// Unary updatable operators
+
+template <typename vT, uint cT, uint rT, profile pT>
+typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator=
+(
+ typename base<vT, cT, rT, pT>::class_type const & x
+)
+{
+ memcpy(&this->value, &x.value, cT * rT * sizeof(vT));
+ return *this;
+}
+
+template <typename vT, uint cT, uint rT, profile pT>
+typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator+=
+(
+ typename base<vT, cT, rT, pT>::T const & x
+)
+{
+ typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size();
+ typename base<vT, cT, rT, pT>::size_type stop_row = x.row_size();
+
+ for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
+ for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
+ this->value[j][i] += x;
+
+ return *this;
+}
+
+template <typename vT, uint cT, uint rT, profile pT>
+typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator+=
+(
+ typename base<vT, cT, rT, pT>::class_type const & x
+)
+{
+ typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size();
+ typename base<vT, cT, rT, pT>::size_type stop_row = x.row_size();
+
+ for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
+ for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
+ this->value[j][i] += x[j][i];
+
+ return *this;
+}
+
+template <typename vT, uint cT, uint rT, profile pT>
+typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator-=
+(
+ typename base<vT, cT, rT, pT>::T const & x
+)
+{
+ typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size();
+ typename base<vT, cT, rT, pT>::size_type stop_row = x.row_size();
+
+ for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
+ for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
+ this->value[j][i] -= x;
+
+ return *this;
+}
+
+template <typename vT, uint cT, uint rT, profile pT>
+typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator-=
+(
+ typename base<vT, cT, rT, pT>::class_type const & x
+)
+{
+ typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size();
+ typename base<vT, cT, rT, pT>::size_type stop_row = x.row_size();
+
+ for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
+ for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
+ this->value[j][i] -= x[j][i];
+
+ return *this;
+}
+
+template <typename vT, uint cT, uint rT, profile pT>
+typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator*=
+(
+ typename base<vT, cT, rT, pT>::T const & x
+)
+{
+ typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size();
+ typename base<vT, cT, rT, pT>::size_type stop_row = x.row_size();
+
+ for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
+ for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
+ this->value[j][i] *= x;
+
+ return *this;
+}
+
+template <typename vT, uint cT, uint rT, profile pT>
+typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator*=
+(
+ typename base<vT, cT, rT, pT>::class_type const & x
+)
+{
+ typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size();
+ typename base<vT, cT, rT, pT>::size_type stop_row = x.row_size();
+
+ for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
+ for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
+ this->value[j][i] *= x[j][i];
+
+ return *this;
+}
+
+template <typename vT, uint cT, uint rT, profile pT>
+typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator/=
+(
+ typename base<vT, cT, rT, pT>::T const & x
+)
+{
+ typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size();
+ typename base<vT, cT, rT, pT>::size_type stop_row = x.row_size();
+
+ for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
+ for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
+ this->value[j][i] /= x;
+
+ return *this;
+}
+
+template <typename vT, uint cT, uint rT, profile pT>
+typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator/=
+(
+ typename base<vT, cT, rT, pT>::class_type const & x
+)
+{
+ typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size();
+ typename base<vT, cT, rT, pT>::size_type stop_row = x.row_size();
+
+ for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
+ for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
+ this->value[j][i] /= x[j][i];
+
+ return *this;
+}
+
+template <typename vT, uint cT, uint rT, profile pT>
+typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator++ ()
+{
+ typename base<vT, cT, rT, pT>::size_type stop_col = col_size();
+ typename base<vT, cT, rT, pT>::size_type stop_row = row_size();
+
+ for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
+ for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
+ ++this->value[j][i];
+
+ return *this;
+}
+
+template <typename vT, uint cT, uint rT, profile pT>
+typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator-- ()
+{
+ typename base<vT, cT, rT, pT>::size_type stop_col = col_size();
+ typename base<vT, cT, rT, pT>::size_type stop_row = row_size();
+
+ for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
+ for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
+ --this->value[j][i];
+
+ return *this;
+}
+
+} //namespace detail
+} //namespace glm
diff --git a/src/third_party/glm/glm/detail/type_half.hpp b/src/third_party/glm/glm/detail/type_half.hpp
new file mode 100644
index 0000000..c3ef617
--- /dev/null
+++ b/src/third_party/glm/glm/detail/type_half.hpp
@@ -0,0 +1,19 @@
+/// @ref core
+/// @file glm/detail/type_half.hpp
+
+#pragma once
+
+#include "setup.hpp"
+
+namespace glm{
+namespace detail
+{
+ typedef short hdata;
+
+ GLM_FUNC_DECL float toFloat32(hdata value);
+ GLM_FUNC_DECL hdata toFloat16(float const & value);
+
+}//namespace detail
+}//namespace glm
+
+#include "type_half.inl"
diff --git a/src/third_party/glm/glm/detail/type_half.inl b/src/third_party/glm/glm/detail/type_half.inl
new file mode 100644
index 0000000..78d3e26
--- /dev/null
+++ b/src/third_party/glm/glm/detail/type_half.inl
@@ -0,0 +1,244 @@
+/// @ref core
+/// @file glm/detail/type_half.inl
+
+namespace glm{
+namespace detail
+{
+ GLM_FUNC_QUALIFIER float overflow()
+ {
+ volatile float f = 1e10;
+
+ for(int i = 0; i < 10; ++i)
+ f *= f; // this will overflow before the for loop terminates
+ return f;
+ }
+
+ union uif32
+ {
+ GLM_FUNC_QUALIFIER uif32() :
+ i(0)
+ {}
+
+ GLM_FUNC_QUALIFIER uif32(float f_) :
+ f(f_)
+ {}
+
+ GLM_FUNC_QUALIFIER uif32(uint32 i_) :
+ i(i_)
+ {}
+
+ float f;
+ uint32 i;
+ };
+
+ GLM_FUNC_QUALIFIER float toFloat32(hdata value)
+ {
+ int s = (value >> 15) & 0x00000001;
+ int e = (value >> 10) & 0x0000001f;
+ int m = value & 0x000003ff;
+
+ if(e == 0)
+ {
+ if(m == 0)
+ {
+ //
+ // Plus or minus zero
+ //
+
+ detail::uif32 result;
+ result.i = (unsigned int)(s << 31);
+ return result.f;
+ }
+ else
+ {
+ //
+ // Denormalized number -- renormalize it
+ //
+
+ while(!(m & 0x00000400))
+ {
+ m <<= 1;
+ e -= 1;
+ }
+
+ e += 1;
+ m &= ~0x00000400;
+ }
+ }
+ else if(e == 31)
+ {
+ if(m == 0)
+ {
+ //
+ // Positive or negative infinity
+ //
+
+ uif32 result;
+ result.i = (unsigned int)((s << 31) | 0x7f800000);
+ return result.f;
+ }
+ else
+ {
+ //
+ // Nan -- preserve sign and significand bits
+ //
+
+ uif32 result;
+ result.i = (unsigned int)((s << 31) | 0x7f800000 | (m << 13));
+ return result.f;
+ }
+ }
+
+ //
+ // Normalized number
+ //
+
+ e = e + (127 - 15);
+ m = m << 13;
+
+ //
+ // Assemble s, e and m.
+ //
+
+ uif32 Result;
+ Result.i = (unsigned int)((s << 31) | (e << 23) | m);
+ return Result.f;
+ }
+
+ GLM_FUNC_QUALIFIER hdata toFloat16(float const & f)
+ {
+ uif32 Entry;
+ Entry.f = f;
+ int i = (int)Entry.i;
+
+ //
+ // Our floating point number, f, is represented by the bit
+ // pattern in integer i. Disassemble that bit pattern into
+ // the sign, s, the exponent, e, and the significand, m.
+ // Shift s into the position where it will go in in the
+ // resulting half number.
+ // Adjust e, accounting for the different exponent bias
+ // of float and half (127 versus 15).
+ //
+
+ int s = (i >> 16) & 0x00008000;
+ int e = ((i >> 23) & 0x000000ff) - (127 - 15);
+ int m = i & 0x007fffff;
+
+ //
+ // Now reassemble s, e and m into a half:
+ //
+
+ if(e <= 0)
+ {
+ if(e < -10)
+ {
+ //
+ // E is less than -10. The absolute value of f is
+ // less than half_MIN (f may be a small normalized
+ // float, a denormalized float or a zero).
+ //
+ // We convert f to a half zero.
+ //
+
+ return hdata(s);
+ }
+
+ //
+ // E is between -10 and 0. F is a normalized float,
+ // whose magnitude is less than __half_NRM_MIN.
+ //
+ // We convert f to a denormalized half.
+ //
+
+ m = (m | 0x00800000) >> (1 - e);
+
+ //
+ // Round to nearest, round "0.5" up.
+ //
+ // Rounding may cause the significand to overflow and make
+ // our number normalized. Because of the way a half's bits
+ // are laid out, we don't have to treat this case separately;
+ // the code below will handle it correctly.
+ //
+
+ if(m & 0x00001000)
+ m += 0x00002000;
+
+ //
+ // Assemble the half from s, e (zero) and m.
+ //
+
+ return hdata(s | (m >> 13));
+ }
+ else if(e == 0xff - (127 - 15))
+ {
+ if(m == 0)
+ {
+ //
+ // F is an infinity; convert f to a half
+ // infinity with the same sign as f.
+ //
+
+ return hdata(s | 0x7c00);
+ }
+ else
+ {
+ //
+ // F is a NAN; we produce a half NAN that preserves
+ // the sign bit and the 10 leftmost bits of the
+ // significand of f, with one exception: If the 10
+ // leftmost bits are all zero, the NAN would turn
+ // into an infinity, so we have to set at least one
+ // bit in the significand.
+ //
+
+ m >>= 13;
+
+ return hdata(s | 0x7c00 | m | (m == 0));
+ }
+ }
+ else
+ {
+ //
+ // E is greater than zero. F is a normalized float.
+ // We try to convert f to a normalized half.
+ //
+
+ //
+ // Round to nearest, round "0.5" up
+ //
+
+ if(m & 0x00001000)
+ {
+ m += 0x00002000;
+
+ if(m & 0x00800000)
+ {
+ m = 0; // overflow in significand,
+ e += 1; // adjust exponent
+ }
+ }
+
+ //
+ // Handle exponent overflow
+ //
+
+ if (e > 30)
+ {
+ overflow(); // Cause a hardware floating point overflow;
+
+ return hdata(s | 0x7c00);
+ // if this returns, the half becomes an
+ } // infinity with the same sign as f.
+
+ //
+ // Assemble the half from s, e and m.
+ //
+
+ return hdata(s | (e << 10) | (m >> 13));
+ }
+ }
+
+}//namespace detail
+}//namespace glm
diff --git a/src/third_party/glm/glm/detail/type_int.hpp b/src/third_party/glm/glm/detail/type_int.hpp
new file mode 100644
index 0000000..764a32c
--- /dev/null
+++ b/src/third_party/glm/glm/detail/type_int.hpp
@@ -0,0 +1,306 @@
+/// @ref core
+/// @file glm/detail/type_int.hpp
+
+#pragma once
+
+#include "setup.hpp"
+#if GLM_HAS_MAKE_SIGNED
+# include <type_traits>
+#endif
+
+#if GLM_HAS_EXTENDED_INTEGER_TYPE
+# include <cstdint>
+#endif
+
+namespace glm{
+namespace detail
+{
+# if GLM_HAS_EXTENDED_INTEGER_TYPE
+ typedef std::int8_t int8;
+ typedef std::int16_t int16;
+ typedef std::int32_t int32;
+ typedef std::int64_t int64;
+
+ typedef std::uint8_t uint8;
+ typedef std::uint16_t uint16;
+ typedef std::uint32_t uint32;
+ typedef std::uint64_t uint64;
+# else
+# if(defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) // C99 detected, 64 bit types available
+ typedef int64_t sint64;
+ typedef uint64_t uint64;
+
+# elif GLM_COMPILER & GLM_COMPILER_VC
+ typedef signed __int64 sint64;
+ typedef unsigned __int64 uint64;
+
+# elif GLM_COMPILER & GLM_COMPILER_GCC
+# pragma GCC diagnostic ignored "-Wlong-long"
+ __extension__ typedef signed long long sint64;
+ __extension__ typedef unsigned long long uint64;
+
+# elif (GLM_COMPILER & GLM_COMPILER_CLANG)
+# pragma clang diagnostic ignored "-Wc++11-long-long"
+ typedef signed long long sint64;
+ typedef unsigned long long uint64;
+
+# else//unknown compiler
+ typedef signed long long sint64;
+ typedef unsigned long long uint64;
+# endif//GLM_COMPILER
+
+ typedef signed char int8;
+ typedef signed short int16;
+ typedef signed int int32;
+ typedef sint64 int64;
+
+ typedef unsigned char uint8;
+ typedef unsigned short uint16;
+ typedef unsigned int uint32;
+ typedef uint64 uint64;
+#endif//
+
+ typedef signed int lowp_int_t;
+ typedef signed int mediump_int_t;
+ typedef signed int highp_int_t;
+
+ typedef unsigned int lowp_uint_t;
+ typedef unsigned int mediump_uint_t;
+ typedef unsigned int highp_uint_t;
+
+# if GLM_HAS_MAKE_SIGNED
+ using std::make_signed;
+ using std::make_unsigned;
+
+# else//GLM_HAS_MAKE_SIGNED
+ template <typename genType>
+ struct make_signed
+ {};
+
+ template <>
+ struct make_signed<char>
+ {
+ typedef char type;
+ };
+
+ template <>
+ struct make_signed<short>
+ {
+ typedef short type;
+ };
+
+ template <>
+ struct make_signed<int>
+ {
+ typedef int type;
+ };
+
+ template <>
+ struct make_signed<long>
+ {
+ typedef long type;
+ };
+
+ template <>
+ struct make_signed<unsigned char>
+ {
+ typedef char type;
+ };
+
+ template <>
+ struct make_signed<unsigned short>
+ {
+ typedef short type;
+ };
+
+ template <>
+ struct make_signed<unsigned int>
+ {
+ typedef int type;
+ };
+
+ template <>
+ struct make_signed<unsigned long>
+ {
+ typedef long type;
+ };
+
+ template <typename genType>
+ struct make_unsigned
+ {};
+
+ template <>
+ struct make_unsigned<char>
+ {
+ typedef unsigned char type;
+ };
+
+ template <>
+ struct make_unsigned<short>
+ {
+ typedef unsigned short type;
+ };
+
+ template <>
+ struct make_unsigned<int>
+ {
+ typedef unsigned int type;
+ };
+
+ template <>
+ struct make_unsigned<long>
+ {
+ typedef unsigned long type;
+ };
+
+ template <>
+ struct make_unsigned<unsigned char>
+ {
+ typedef unsigned char type;
+ };
+
+ template <>
+ struct make_unsigned<unsigned short>
+ {
+ typedef unsigned short type;
+ };
+
+ template <>
+ struct make_unsigned<unsigned int>
+ {
+ typedef unsigned int type;
+ };
+
+ template <>
+ struct make_unsigned<unsigned long>
+ {
+ typedef unsigned long type;
+ };
+
+ template <>
+ struct make_signed<long long>
+ {
+ typedef long long type;
+ };
+
+ template <>
+ struct make_signed<unsigned long long>
+ {
+ typedef long long type;
+ };
+
+ template <>
+ struct make_unsigned<long long>
+ {
+ typedef unsigned long long type;
+ };
+
+ template <>
+ struct make_unsigned<unsigned long long>
+ {
+ typedef unsigned long long type;
+ };
+# endif//GLM_HAS_MAKE_SIGNED
+}//namespace detail
+
+ typedef detail::int8 int8;
+ typedef detail::int16 int16;
+ typedef detail::int32 int32;
+ typedef detail::int64 int64;
+
+ typedef detail::uint8 uint8;
+ typedef detail::uint16 uint16;
+ typedef detail::uint32 uint32;
+ typedef detail::uint64 uint64;
+
+ /// @addtogroup core_precision
+ /// @{
+
+ /// Low precision signed integer.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.3 Integers</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::lowp_int_t lowp_int;
+
+ /// Medium precision signed integer.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.3 Integers</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::mediump_int_t mediump_int;
+
+ /// High precision signed integer.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.3 Integers</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::highp_int_t highp_int;
+
+ /// Low precision unsigned integer.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.3 Integers</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::lowp_uint_t lowp_uint;
+
+ /// Medium precision unsigned integer.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.3 Integers</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::mediump_uint_t mediump_uint;
+
+ /// High precision unsigned integer.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.3 Integers</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef detail::highp_uint_t highp_uint;
+
+#if(!defined(GLM_PRECISION_HIGHP_INT) && !defined(GLM_PRECISION_MEDIUMP_INT) && !defined(GLM_PRECISION_LOWP_INT))
+ typedef mediump_int int_t;
+#elif(defined(GLM_PRECISION_HIGHP_INT) && !defined(GLM_PRECISION_MEDIUMP_INT) && !defined(GLM_PRECISION_LOWP_INT))
+ typedef highp_int int_t;
+#elif(!defined(GLM_PRECISION_HIGHP_INT) && defined(GLM_PRECISION_MEDIUMP_INT) && !defined(GLM_PRECISION_LOWP_INT))
+ typedef mediump_int int_t;
+#elif(!defined(GLM_PRECISION_HIGHP_INT) && !defined(GLM_PRECISION_MEDIUMP_INT) && defined(GLM_PRECISION_LOWP_INT))
+ typedef lowp_int int_t;
+#else
+# error "GLM error: multiple default precision requested for signed integer types"
+#endif
+
+#if(!defined(GLM_PRECISION_HIGHP_UINT) && !defined(GLM_PRECISION_MEDIUMP_UINT) && !defined(GLM_PRECISION_LOWP_UINT))
+ typedef mediump_uint uint_t;
+#elif(defined(GLM_PRECISION_HIGHP_UINT) && !defined(GLM_PRECISION_MEDIUMP_UINT) && !defined(GLM_PRECISION_LOWP_UINT))
+ typedef highp_uint uint_t;
+#elif(!defined(GLM_PRECISION_HIGHP_UINT) && defined(GLM_PRECISION_MEDIUMP_UINT) && !defined(GLM_PRECISION_LOWP_UINT))
+ typedef mediump_uint uint_t;
+#elif(!defined(GLM_PRECISION_HIGHP_UINT) && !defined(GLM_PRECISION_MEDIUMP_UINT) && defined(GLM_PRECISION_LOWP_UINT))
+ typedef lowp_uint uint_t;
+#else
+# error "GLM error: multiple default precision requested for unsigned integer types"
+#endif
+
+ /// Unsigned integer type.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.3 Integers</a>
+ typedef unsigned int uint;
+
+ /// @}
+
+////////////////////
+// check type sizes
+#ifndef GLM_STATIC_ASSERT_NULL
+ GLM_STATIC_ASSERT(sizeof(glm::int8) == 1, "int8 size isn't 1 byte on this platform");
+ GLM_STATIC_ASSERT(sizeof(glm::int16) == 2, "int16 size isn't 2 bytes on this platform");
+ GLM_STATIC_ASSERT(sizeof(glm::int32) == 4, "int32 size isn't 4 bytes on this platform");
+ GLM_STATIC_ASSERT(sizeof(glm::int64) == 8, "int64 size isn't 8 bytes on this platform");
+
+ GLM_STATIC_ASSERT(sizeof(glm::uint8) == 1, "uint8 size isn't 1 byte on this platform");
+ GLM_STATIC_ASSERT(sizeof(glm::uint16) == 2, "uint16 size isn't 2 bytes on this platform");
+ GLM_STATIC_ASSERT(sizeof(glm::uint32) == 4, "uint32 size isn't 4 bytes on this platform");
+ GLM_STATIC_ASSERT(sizeof(glm::uint64) == 8, "uint64 size isn't 8 bytes on this platform");
+#endif//GLM_STATIC_ASSERT_NULL
+
+}//namespace glm
diff --git a/src/third_party/glm/glm/detail/type_mat.hpp b/src/third_party/glm/glm/detail/type_mat.hpp
new file mode 100644
index 0000000..aad74e5
--- /dev/null
+++ b/src/third_party/glm/glm/detail/type_mat.hpp
@@ -0,0 +1,767 @@
+/// @ref core
+/// @file glm/detail/type_mat.hpp
+
+#pragma once
+
+#include "precision.hpp"
+
+namespace glm{
+namespace detail
+{
+ template <typename T, precision P, template <class, precision> class colType, template <class, precision> class rowType>
+ struct outerProduct_trait{};
+}//namespace detail
+
+ template <typename T, precision P> struct tvec2;
+ template <typename T, precision P> struct tvec3;
+ template <typename T, precision P> struct tvec4;
+ template <typename T, precision P> struct tmat2x2;
+ template <typename T, precision P> struct tmat2x3;
+ template <typename T, precision P> struct tmat2x4;
+ template <typename T, precision P> struct tmat3x2;
+ template <typename T, precision P> struct tmat3x3;
+ template <typename T, precision P> struct tmat3x4;
+ template <typename T, precision P> struct tmat4x2;
+ template <typename T, precision P> struct tmat4x3;
+ template <typename T, precision P> struct tmat4x4;
+
+ template <typename T, precision P, template <typename, precision> class matType>
+ GLM_FUNC_DECL matType<T, P> inverse(matType<T, P> const & m);
+
+ /// @addtogroup core_precision
+ /// @{
+
+ /// 2 columns of 2 components matrix of low precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat2x2<float, lowp> lowp_mat2;
+
+ /// 2 columns of 2 components matrix of medium precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat2x2<float, mediump> mediump_mat2;
+
+ /// 2 columns of 2 components matrix of high precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat2x2<float, highp> highp_mat2;
+
+ /// 2 columns of 2 components matrix of low precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat2x2<float, lowp> lowp_mat2x2;
+
+ /// 2 columns of 2 components matrix of medium precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat2x2<float, mediump> mediump_mat2x2;
+
+ /// 2 columns of 2 components matrix of high precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat2x2<float, highp> highp_mat2x2;
+
+ /// @}
+
+ /// @addtogroup core_precision
+ /// @{
+
+ /// 2 columns of 3 components matrix of low precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat2x3<float, lowp> lowp_mat2x3;
+
+ /// 2 columns of 3 components matrix of medium precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat2x3<float, mediump> mediump_mat2x3;
+
+ /// 2 columns of 3 components matrix of high precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat2x3<float, highp> highp_mat2x3;
+
+ /// @}
+
+ /// @addtogroup core_precision
+ /// @{
+
+ /// 2 columns of 4 components matrix of low precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat2x4<float, lowp> lowp_mat2x4;
+
+ /// 2 columns of 4 components matrix of medium precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat2x4<float, mediump> mediump_mat2x4;
+
+ /// 2 columns of 4 components matrix of high precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat2x4<float, highp> highp_mat2x4;
+
+ /// @}
+
+ /// @addtogroup core_precision
+ /// @{
+
+ /// 3 columns of 2 components matrix of low precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat3x2<float, lowp> lowp_mat3x2;
+
+ /// 3 columns of 2 components matrix of medium precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat3x2<float, mediump> mediump_mat3x2;
+
+ /// 3 columns of 2 components matrix of high precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat3x2<float, highp> highp_mat3x2;
+
+ /// @}
+
+ /// @addtogroup core_precision
+ /// @{
+
+ /// 3 columns of 3 components matrix of low precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat3x3<float, lowp> lowp_mat3;
+
+ /// 3 columns of 3 components matrix of medium precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat3x3<float, mediump> mediump_mat3;
+
+ /// 3 columns of 3 components matrix of high precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat3x3<float, highp> highp_mat3;
+
+ /// 3 columns of 3 components matrix of low precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat3x3<float, lowp> lowp_mat3x3;
+
+ /// 3 columns of 3 components matrix of medium precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat3x3<float, mediump> mediump_mat3x3;
+
+ /// 3 columns of 3 components matrix of high precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat3x3<float, highp> highp_mat3x3;
+
+ /// @}
+
+ /// @addtogroup core_precision
+ /// @{
+
+ /// 3 columns of 4 components matrix of low precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat3x4<float, lowp> lowp_mat3x4;
+
+ /// 3 columns of 4 components matrix of medium precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat3x4<float, mediump> mediump_mat3x4;
+
+ /// 3 columns of 4 components matrix of high precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat3x4<float, highp> highp_mat3x4;
+
+ /// @}
+
+ /// @addtogroup core_precision
+ /// @{
+
+ /// 4 columns of 2 components matrix of low precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat4x2<float, lowp> lowp_mat4x2;
+
+ /// 4 columns of 2 components matrix of medium precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat4x2<float, mediump> mediump_mat4x2;
+
+ /// 4 columns of 2 components matrix of high precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat4x2<float, highp> highp_mat4x2;
+
+ /// @}
+
+ /// @addtogroup core_precision
+ /// @{
+
+ /// 4 columns of 3 components matrix of low precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat4x3<float, lowp> lowp_mat4x3;
+
+ /// 4 columns of 3 components matrix of medium precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat4x3<float, mediump> mediump_mat4x3;
+
+ /// 4 columns of 3 components matrix of high precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat4x3<float, highp> highp_mat4x3;
+
+ /// @}
+
+
+ /// @addtogroup core_precision
+ /// @{
+
+ /// 4 columns of 4 components matrix of low precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat4x4<float, lowp> lowp_mat4;
+
+ /// 4 columns of 4 components matrix of medium precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat4x4<float, mediump> mediump_mat4;
+
+ /// 4 columns of 4 components matrix of high precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat4x4<float, highp> highp_mat4;
+
+ /// 4 columns of 4 components matrix of low precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat4x4<float, lowp> lowp_mat4x4;
+
+ /// 4 columns of 4 components matrix of medium precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat4x4<float, mediump> mediump_mat4x4;
+
+ /// 4 columns of 4 components matrix of high precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat4x4<float, highp> highp_mat4x4;
+
+ /// @}
+
+ /// @addtogroup core_types
+ /// @{
+
+ //////////////////////////
+ // Float definition
+
+#if(defined(GLM_PRECISION_LOWP_FLOAT))
+ typedef lowp_mat2x2 mat2x2;
+ typedef lowp_mat2x3 mat2x3;
+ typedef lowp_mat2x4 mat2x4;
+ typedef lowp_mat3x2 mat3x2;
+ typedef lowp_mat3x3 mat3x3;
+ typedef lowp_mat3x4 mat3x4;
+ typedef lowp_mat4x2 mat4x2;
+ typedef lowp_mat4x3 mat4x3;
+ typedef lowp_mat4x4 mat4x4;
+#elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))
+ typedef mediump_mat2x2 mat2x2;
+ typedef mediump_mat2x3 mat2x3;
+ typedef mediump_mat2x4 mat2x4;
+ typedef mediump_mat3x2 mat3x2;
+ typedef mediump_mat3x3 mat3x3;
+ typedef mediump_mat3x4 mat3x4;
+ typedef mediump_mat4x2 mat4x2;
+ typedef mediump_mat4x3 mat4x3;
+ typedef mediump_mat4x4 mat4x4;
+#else
+ //! 2 columns of 2 components matrix of floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ typedef highp_mat2x2 mat2x2;
+
+ //! 2 columns of 3 components matrix of floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ typedef highp_mat2x3 mat2x3;
+
+ //! 2 columns of 4 components matrix of floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ typedef highp_mat2x4 mat2x4;
+
+ //! 3 columns of 2 components matrix of floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ typedef highp_mat3x2 mat3x2;
+
+ //! 3 columns of 3 components matrix of floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ typedef highp_mat3x3 mat3x3;
+
+ //! 3 columns of 4 components matrix of floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ typedef highp_mat3x4 mat3x4;
+
+ //! 4 columns of 2 components matrix of floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ typedef highp_mat4x2 mat4x2;
+
+ //! 4 columns of 3 components matrix of floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ typedef highp_mat4x3 mat4x3;
+
+ //! 4 columns of 4 components matrix of floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ typedef highp_mat4x4 mat4x4;
+
+#endif//GLM_PRECISION
+
+ //! 2 columns of 2 components matrix of floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ typedef mat2x2 mat2;
+
+ //! 3 columns of 3 components matrix of floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ typedef mat3x3 mat3;
+
+ //! 4 columns of 4 components matrix of floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ typedef mat4x4 mat4;
+
+ //////////////////////////
+ // Double definition
+
+ /// @addtogroup core_precision
+ /// @{
+
+ /// 2 columns of 2 components matrix of low precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat2x2<double, lowp> lowp_dmat2;
+
+ /// 2 columns of 2 components matrix of medium precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat2x2<double, mediump> mediump_dmat2;
+
+ /// 2 columns of 2 components matrix of high precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat2x2<double, highp> highp_dmat2;
+
+ /// 2 columns of 2 components matrix of low precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat2x2<double, lowp> lowp_dmat2x2;
+
+ /// 2 columns of 2 components matrix of medium precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat2x2<double, mediump> mediump_dmat2x2;
+
+ /// 2 columns of 2 components matrix of high precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat2x2<double, highp> highp_dmat2x2;
+
+ /// @}
+
+ /// @addtogroup core_precision
+ /// @{
+
+ /// 2 columns of 3 components matrix of low precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat2x3<double, lowp> lowp_dmat2x3;
+
+ /// 2 columns of 3 components matrix of medium precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat2x3<double, mediump> mediump_dmat2x3;
+
+ /// 2 columns of 3 components matrix of high precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat2x3<double, highp> highp_dmat2x3;
+
+ /// @}
+
+ /// @addtogroup core_precision
+ /// @{
+
+ /// 2 columns of 4 components matrix of low precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat2x4<double, lowp> lowp_dmat2x4;
+
+ /// 2 columns of 4 components matrix of medium precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat2x4<double, mediump> mediump_dmat2x4;
+
+ /// 2 columns of 4 components matrix of high precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat2x4<double, highp> highp_dmat2x4;
+
+ /// @}
+
+ /// @addtogroup core_precision
+ /// @{
+
+ /// 3 columns of 2 components matrix of low precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat3x2<double, lowp> lowp_dmat3x2;
+
+ /// 3 columns of 2 components matrix of medium precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat3x2<double, mediump> mediump_dmat3x2;
+
+ /// 3 columns of 2 components matrix of high precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat3x2<double, highp> highp_dmat3x2;
+
+ /// @}
+
+ /// @addtogroup core_precision
+ /// @{
+
+ /// 3 columns of 3 components matrix of low precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat3x3<float, lowp> lowp_dmat3;
+
+ /// 3 columns of 3 components matrix of medium precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat3x3<double, mediump> mediump_dmat3;
+
+ /// 3 columns of 3 components matrix of high precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat3x3<double, highp> highp_dmat3;
+
+ /// 3 columns of 3 components matrix of low precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat3x3<double, lowp> lowp_dmat3x3;
+
+ /// 3 columns of 3 components matrix of medium precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat3x3<double, mediump> mediump_dmat3x3;
+
+ /// 3 columns of 3 components matrix of high precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat3x3<double, highp> highp_dmat3x3;
+
+ /// @}
+
+ /// @addtogroup core_precision
+ /// @{
+
+ /// 3 columns of 4 components matrix of low precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat3x4<double, lowp> lowp_dmat3x4;
+
+ /// 3 columns of 4 components matrix of medium precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat3x4<double, mediump> mediump_dmat3x4;
+
+ /// 3 columns of 4 components matrix of high precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat3x4<double, highp> highp_dmat3x4;
+
+ /// @}
+
+ /// @addtogroup core_precision
+ /// @{
+
+ /// 4 columns of 2 components matrix of low precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat4x2<double, lowp> lowp_dmat4x2;
+
+ /// 4 columns of 2 components matrix of medium precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat4x2<double, mediump> mediump_dmat4x2;
+
+ /// 4 columns of 2 components matrix of high precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat4x2<double, highp> highp_dmat4x2;
+
+ /// @}
+
+ /// @addtogroup core_precision
+ /// @{
+
+ /// 4 columns of 3 components matrix of low precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat4x3<double, lowp> lowp_dmat4x3;
+
+ /// 4 columns of 3 components matrix of medium precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat4x3<double, mediump> mediump_dmat4x3;
+
+ /// 4 columns of 3 components matrix of high precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat4x3<double, highp> highp_dmat4x3;
+
+ /// @}
+
+ /// @addtogroup core_precision
+ /// @{
+
+ /// 4 columns of 4 components matrix of low precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat4x4<double, lowp> lowp_dmat4;
+
+ /// 4 columns of 4 components matrix of medium precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat4x4<double, mediump> mediump_dmat4;
+
+ /// 4 columns of 4 components matrix of high precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat4x4<double, highp> highp_dmat4;
+
+ /// 4 columns of 4 components matrix of low precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat4x4<double, lowp> lowp_dmat4x4;
+
+ /// 4 columns of 4 components matrix of medium precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat4x4<double, mediump> mediump_dmat4x4;
+
+ /// 4 columns of 4 components matrix of high precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat4x4<double, highp> highp_dmat4x4;
+
+ /// @}
+
+#if(defined(GLM_PRECISION_LOWP_DOUBLE))
+ typedef lowp_dmat2x2 dmat2x2;
+ typedef lowp_dmat2x3 dmat2x3;
+ typedef lowp_dmat2x4 dmat2x4;
+ typedef lowp_dmat3x2 dmat3x2;
+ typedef lowp_dmat3x3 dmat3x3;
+ typedef lowp_dmat3x4 dmat3x4;
+ typedef lowp_dmat4x2 dmat4x2;
+ typedef lowp_dmat4x3 dmat4x3;
+ typedef lowp_dmat4x4 dmat4x4;
+#elif(defined(GLM_PRECISION_MEDIUMP_DOUBLE))
+ typedef mediump_dmat2x2 dmat2x2;
+ typedef mediump_dmat2x3 dmat2x3;
+ typedef mediump_dmat2x4 dmat2x4;
+ typedef mediump_dmat3x2 dmat3x2;
+ typedef mediump_dmat3x3 dmat3x3;
+ typedef mediump_dmat3x4 dmat3x4;
+ typedef mediump_dmat4x2 dmat4x2;
+ typedef mediump_dmat4x3 dmat4x3;
+ typedef mediump_dmat4x4 dmat4x4;
+#else //defined(GLM_PRECISION_HIGHP_DOUBLE)
+
+ //! 2 * 2 matrix of double-precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ typedef highp_dmat2x2 dmat2;
+
+ //! 3 * 3 matrix of double-precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ typedef highp_dmat3x3 dmat3;
+
+ //! 4 * 4 matrix of double-precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ typedef highp_dmat4x4 dmat4;
+
+ //! 2 * 2 matrix of double-precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ typedef highp_dmat2x2 dmat2x2;
+
+ //! 2 * 3 matrix of double-precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ typedef highp_dmat2x3 dmat2x3;
+
+ //! 2 * 4 matrix of double-precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ typedef highp_dmat2x4 dmat2x4;
+
+ //! 3 * 2 matrix of double-precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ typedef highp_dmat3x2 dmat3x2;
+
+ /// 3 * 3 matrix of double-precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ typedef highp_dmat3x3 dmat3x3;
+
+ /// 3 * 4 matrix of double-precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ typedef highp_dmat3x4 dmat3x4;
+
+ /// 4 * 2 matrix of double-precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ typedef highp_dmat4x2 dmat4x2;
+
+ /// 4 * 3 matrix of double-precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ typedef highp_dmat4x3 dmat4x3;
+
+ /// 4 * 4 matrix of double-precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ typedef highp_dmat4x4 dmat4x4;
+
+#endif//GLM_PRECISION
+
+ /// @}
+}//namespace glm
diff --git a/src/third_party/glm/glm/detail/type_mat.inl b/src/third_party/glm/glm/detail/type_mat.inl
new file mode 100644
index 0000000..5714995
--- /dev/null
+++ b/src/third_party/glm/glm/detail/type_mat.inl
@@ -0,0 +1,3 @@
+/// @ref core
+/// @file glm/detail/type_mat.inl
+
diff --git a/src/third_party/glm/glm/detail/type_mat2x2.hpp b/src/third_party/glm/glm/detail/type_mat2x2.hpp
new file mode 100644
index 0000000..d51389b
--- /dev/null
+++ b/src/third_party/glm/glm/detail/type_mat2x2.hpp
@@ -0,0 +1,183 @@
+/// @ref core
+/// @file glm/detail/type_mat2x2.hpp
+
+#pragma once
+
+#include "../fwd.hpp"
+#include "type_vec2.hpp"
+#include "type_mat.hpp"
+#include <limits>
+#include <cstddef>
+
+namespace glm
+{
+ template <typename T, precision P = defaultp>
+ struct tmat2x2
+ {
+ typedef tvec2<T, P> col_type;
+ typedef tvec2<T, P> row_type;
+ typedef tmat2x2<T, P> type;
+ typedef tmat2x2<T, P> transpose_type;
+ typedef T value_type;
+
+ private:
+ col_type value[2];
+
+ public:
+ // -- Constructors --
+
+ GLM_FUNC_DECL tmat2x2() GLM_DEFAULT_CTOR;
+ GLM_FUNC_DECL tmat2x2(tmat2x2<T, P> const & m) GLM_DEFAULT;
+ template <precision Q>
+ GLM_FUNC_DECL tmat2x2(tmat2x2<T, Q> const & m);
+
+ GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tmat2x2(ctor);
+ GLM_FUNC_DECL explicit tmat2x2(T scalar);
+ GLM_FUNC_DECL tmat2x2(
+ T const & x1, T const & y1,
+ T const & x2, T const & y2);
+ GLM_FUNC_DECL tmat2x2(
+ col_type const & v1,
+ col_type const & v2);
+
+ // -- Conversions --
+
+ template <typename U, typename V, typename M, typename N>
+ GLM_FUNC_DECL tmat2x2(
+ U const & x1, V const & y1,
+ M const & x2, N const & y2);
+
+ template <typename U, typename V>
+ GLM_FUNC_DECL tmat2x2(
+ tvec2<U, P> const & v1,
+ tvec2<V, P> const & v2);
+
+ // -- Matrix conversions --
+
+ template <typename U, precision Q>
+ GLM_FUNC_DECL GLM_EXPLICIT tmat2x2(tmat2x2<U, Q> const & m);
+
+ GLM_FUNC_DECL GLM_EXPLICIT tmat2x2(tmat3x3<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat2x2(tmat4x4<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat2x2(tmat2x3<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat2x2(tmat3x2<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat2x2(tmat2x4<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat2x2(tmat4x2<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat2x2(tmat3x4<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat2x2(tmat4x3<T, P> const & x);
+
+ // -- Accesses --
+
+ typedef length_t length_type;
+ GLM_FUNC_DECL GLM_CONSTEXPR length_type length() const;
+
+ GLM_FUNC_DECL col_type & operator[](length_type i);
+ GLM_FUNC_DECL col_type const & operator[](length_type i) const;
+
+ // -- Unary arithmetic operators --
+
+ GLM_FUNC_DECL tmat2x2<T, P> & operator=(tmat2x2<T, P> const & v) GLM_DEFAULT;
+
+ template <typename U>
+ GLM_FUNC_DECL tmat2x2<T, P> & operator=(tmat2x2<U, P> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat2x2<T, P> & operator+=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat2x2<T, P> & operator+=(tmat2x2<U, P> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat2x2<T, P> & operator-=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat2x2<T, P> & operator-=(tmat2x2<U, P> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat2x2<T, P> & operator*=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat2x2<T, P> & operator*=(tmat2x2<U, P> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat2x2<T, P> & operator/=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat2x2<T, P> & operator/=(tmat2x2<U, P> const & m);
+
+ // -- Increment and decrement operators --
+
+ GLM_FUNC_DECL tmat2x2<T, P> & operator++ ();
+ GLM_FUNC_DECL tmat2x2<T, P> & operator-- ();
+ GLM_FUNC_DECL tmat2x2<T, P> operator++(int);
+ GLM_FUNC_DECL tmat2x2<T, P> operator--(int);
+ };
+
+ // -- Unary operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat2x2<T, P> operator+(tmat2x2<T, P> const & m);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat2x2<T, P> operator-(tmat2x2<T, P> const & m);
+
+ // -- Binary operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat2x2<T, P> operator+(tmat2x2<T, P> const & m, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat2x2<T, P> operator+(T scalar, tmat2x2<T, P> const & m);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat2x2<T, P> operator+(tmat2x2<T, P> const & m1, tmat2x2<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat2x2<T, P> operator-(tmat2x2<T, P> const & m, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat2x2<T, P> operator-(T scalar, tmat2x2<T, P> const & m);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat2x2<T, P> operator-(tmat2x2<T, P> const & m1, tmat2x2<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat2x2<T, P> operator*(tmat2x2<T, P> const & m, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat2x2<T, P> operator*(T scalar, tmat2x2<T, P> const & m);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL typename tmat2x2<T, P>::col_type operator*(tmat2x2<T, P> const & m, typename tmat2x2<T, P>::row_type const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL typename tmat2x2<T, P>::row_type operator*(typename tmat2x2<T, P>::col_type const & v, tmat2x2<T, P> const & m);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat2x2<T, P> operator*(tmat2x2<T, P> const & m1, tmat2x2<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x2<T, P> operator*(tmat2x2<T, P> const & m1, tmat3x2<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x2<T, P> operator*(tmat2x2<T, P> const & m1, tmat4x2<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat2x2<T, P> operator/(tmat2x2<T, P> const & m, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat2x2<T, P> operator/(T scalar, tmat2x2<T, P> const & m);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL typename tmat2x2<T, P>::col_type operator/(tmat2x2<T, P> const & m, typename tmat2x2<T, P>::row_type const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL typename tmat2x2<T, P>::row_type operator/(typename tmat2x2<T, P>::col_type const & v, tmat2x2<T, P> const & m);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat2x2<T, P> operator/(tmat2x2<T, P> const & m1, tmat2x2<T, P> const & m2);
+
+ // -- Boolean operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL bool operator==(tmat2x2<T, P> const & m1, tmat2x2<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL bool operator!=(tmat2x2<T, P> const & m1, tmat2x2<T, P> const & m2);
+} //namespace glm
+
+#ifndef GLM_EXTERNAL_TEMPLATE
+#include "type_mat2x2.inl"
+#endif
diff --git a/src/third_party/glm/glm/detail/type_mat2x2.inl b/src/third_party/glm/glm/detail/type_mat2x2.inl
new file mode 100644
index 0000000..92940ef
--- /dev/null
+++ b/src/third_party/glm/glm/detail/type_mat2x2.inl
@@ -0,0 +1,490 @@
+/// @ref core
+/// @file glm/detail/type_mat2x2.inl
+
+#include "func_matrix.hpp"
+
+namespace glm
+{
+ // -- Constructors --
+
+# if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT)
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2()
+ {
+# ifndef GLM_FORCE_NO_CTOR_INIT
+ this->value[0] = col_type(1, 0);
+ this->value[1] = col_type(0, 1);
+# endif
+ }
+# endif
+
+# if !GLM_HAS_DEFAULTED_FUNCTIONS
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2(tmat2x2<T, P> const & m)
+ {
+ this->value[0] = m.value[0];
+ this->value[1] = m.value[1];
+ }
+# endif//!GLM_HAS_DEFAULTED_FUNCTIONS
+
+ template <typename T, precision P>
+ template <precision Q>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2(tmat2x2<T, Q> const & m)
+ {
+ this->value[0] = m.value[0];
+ this->value[1] = m.value[1];
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tmat2x2<T, P>::tmat2x2(ctor)
+ {}
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2(T scalar)
+ {
+ this->value[0] = col_type(scalar, 0);
+ this->value[1] = col_type(0, scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2
+ (
+ T const & x0, T const & y0,
+ T const & x1, T const & y1
+ )
+ {
+ this->value[0] = col_type(x0, y0);
+ this->value[1] = col_type(x1, y1);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2(col_type const & v0, col_type const & v1)
+ {
+ this->value[0] = v0;
+ this->value[1] = v1;
+ }
+
+ // -- Conversion constructors --
+
+ template <typename T, precision P>
+ template <typename X1, typename Y1, typename X2, typename Y2>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2
+ (
+ X1 const & x1, Y1 const & y1,
+ X2 const & x2, Y2 const & y2
+ )
+ {
+ this->value[0] = col_type(static_cast<T>(x1), value_type(y1));
+ this->value[1] = col_type(static_cast<T>(x2), value_type(y2));
+ }
+
+ template <typename T, precision P>
+ template <typename V1, typename V2>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2(tvec2<V1, P> const & v1, tvec2<V2, P> const & v2)
+ {
+ this->value[0] = col_type(v1);
+ this->value[1] = col_type(v2);
+ }
+
+ // -- mat2x2 matrix conversions --
+
+ template <typename T, precision P>
+ template <typename U, precision Q>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2(tmat2x2<U, Q> const & m)
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2(tmat3x3<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2(tmat4x4<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2(tmat2x3<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2(tmat3x2<T, P> const & m)
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2(tmat2x4<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2(tmat4x2<T, P> const & m)
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2(tmat3x4<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P>::tmat2x2(tmat4x3<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ }
+
+ // -- Accesses --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tmat2x2<T, P>::length_type tmat2x2<T, P>::length() const
+ {
+ return 2;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER typename tmat2x2<T, P>::col_type & tmat2x2<T, P>::operator[](typename tmat2x2<T, P>::length_type i)
+ {
+ assert(i < this->length());
+ return this->value[i];
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER typename tmat2x2<T, P>::col_type const & tmat2x2<T, P>::operator[](typename tmat2x2<T, P>::length_type i) const
+ {
+ assert(i < this->length());
+ return this->value[i];
+ }
+
+ // -- Unary updatable operators --
+
+# if !GLM_HAS_DEFAULTED_FUNCTIONS
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P>& tmat2x2<T, P>::operator=(tmat2x2<T, P> const & m)
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ return *this;
+ }
+# endif//!GLM_HAS_DEFAULTED_FUNCTIONS
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P>& tmat2x2<T, P>::operator=(tmat2x2<U, P> const & m)
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P>& tmat2x2<T, P>::operator+=(U scalar)
+ {
+ this->value[0] += scalar;
+ this->value[1] += scalar;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P>& tmat2x2<T, P>::operator+=(tmat2x2<U, P> const & m)
+ {
+ this->value[0] += m[0];
+ this->value[1] += m[1];
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P>& tmat2x2<T, P>::operator-=(U scalar)
+ {
+ this->value[0] -= scalar;
+ this->value[1] -= scalar;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P>& tmat2x2<T, P>::operator-=(tmat2x2<U, P> const & m)
+ {
+ this->value[0] -= m[0];
+ this->value[1] -= m[1];
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P>& tmat2x2<T, P>::operator*=(U scalar)
+ {
+ this->value[0] *= scalar;
+ this->value[1] *= scalar;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P>& tmat2x2<T, P>::operator*=(tmat2x2<U, P> const & m)
+ {
+ return (*this = *this * m);
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P>& tmat2x2<T, P>::operator/=(U scalar)
+ {
+ this->value[0] /= scalar;
+ this->value[1] /= scalar;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P>& tmat2x2<T, P>::operator/=(tmat2x2<U, P> const & m)
+ {
+ return *this *= inverse(m);
+ }
+
+ // -- Increment and decrement operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P>& tmat2x2<T, P>::operator++()
+ {
+ ++this->value[0];
+ ++this->value[1];
+ return *this;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P>& tmat2x2<T, P>::operator--()
+ {
+ --this->value[0];
+ --this->value[1];
+ return *this;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P> tmat2x2<T, P>::operator++(int)
+ {
+ tmat2x2<T, P> Result(*this);
+ ++*this;
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P> tmat2x2<T, P>::operator--(int)
+ {
+ tmat2x2<T, P> Result(*this);
+ --*this;
+ return Result;
+ }
+
+ // -- Unary arithmetic operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P> operator+(tmat2x2<T, P> const & m)
+ {
+ return m;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P> operator-(tmat2x2<T, P> const & m)
+ {
+ return tmat2x2<T, P>(
+ -m[0],
+ -m[1]);
+ }
+
+ // -- Binary arithmetic operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P> operator+(tmat2x2<T, P> const & m, T scalar)
+ {
+ return tmat2x2<T, P>(
+ m[0] + scalar,
+ m[1] + scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P> operator+(T scalar, tmat2x2<T, P> const & m)
+ {
+ return tmat2x2<T, P>(
+ m[0] + scalar,
+ m[1] + scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P> operator+(tmat2x2<T, P> const & m1, tmat2x2<T, P> const & m2)
+ {
+ return tmat2x2<T, P>(
+ m1[0] + m2[0],
+ m1[1] + m2[1]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P> operator-(tmat2x2<T, P> const & m, T scalar)
+ {
+ return tmat2x2<T, P>(
+ m[0] - scalar,
+ m[1] - scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P> operator-(T scalar, tmat2x2<T, P> const & m)
+ {
+ return tmat2x2<T, P>(
+ scalar - m[0],
+ scalar - m[1]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P> operator-(tmat2x2<T, P> const & m1, tmat2x2<T, P> const & m2)
+ {
+ return tmat2x2<T, P>(
+ m1[0] - m2[0],
+ m1[1] - m2[1]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P> operator*(tmat2x2<T, P> const & m, T scalar)
+ {
+ return tmat2x2<T, P>(
+ m[0] * scalar,
+ m[1] * scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P> operator*(T scalar, tmat2x2<T, P> const & m)
+ {
+ return tmat2x2<T, P>(
+ m[0] * scalar,
+ m[1] * scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER typename tmat2x2<T, P>::col_type operator*
+ (
+ tmat2x2<T, P> const & m,
+ typename tmat2x2<T, P>::row_type const & v
+ )
+ {
+ return tvec2<T, P>(
+ m[0][0] * v.x + m[1][0] * v.y,
+ m[0][1] * v.x + m[1][1] * v.y);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER typename tmat2x2<T, P>::row_type operator*
+ (
+ typename tmat2x2<T, P>::col_type const & v,
+ tmat2x2<T, P> const & m
+ )
+ {
+ return tvec2<T, P>(
+ v.x * m[0][0] + v.y * m[0][1],
+ v.x * m[1][0] + v.y * m[1][1]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P> operator*(tmat2x2<T, P> const & m1, tmat2x2<T, P> const & m2)
+ {
+ return tmat2x2<T, P>(
+ m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1],
+ m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1],
+ m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1],
+ m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x2<T, P> operator*(tmat2x2<T, P> const & m1, tmat3x2<T, P> const & m2)
+ {
+ return tmat3x2<T, P>(
+ m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1],
+ m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1],
+ m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1],
+ m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1],
+ m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1],
+ m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x2<T, P> operator*(tmat2x2<T, P> const & m1, tmat4x2<T, P> const & m2)
+ {
+ return tmat4x2<T, P>(
+ m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1],
+ m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1],
+ m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1],
+ m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1],
+ m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1],
+ m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1],
+ m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1],
+ m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P> operator/(tmat2x2<T, P> const & m, T scalar)
+ {
+ return tmat2x2<T, P>(
+ m[0] / scalar,
+ m[1] / scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P> operator/(T scalar, tmat2x2<T, P> const & m)
+ {
+ return tmat2x2<T, P>(
+ scalar / m[0],
+ scalar / m[1]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER typename tmat2x2<T, P>::col_type operator/(tmat2x2<T, P> const & m, typename tmat2x2<T, P>::row_type const & v)
+ {
+ return inverse(m) * v;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER typename tmat2x2<T, P>::row_type operator/(typename tmat2x2<T, P>::col_type const & v, tmat2x2<T, P> const & m)
+ {
+ return v * inverse(m);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P> operator/(tmat2x2<T, P> const & m1, tmat2x2<T, P> const & m2)
+ {
+ tmat2x2<T, P> m1_copy(m1);
+ return m1_copy /= m2;
+ }
+
+ // -- Boolean operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER bool operator==(tmat2x2<T, P> const & m1, tmat2x2<T, P> const & m2)
+ {
+ return (m1[0] == m2[0]) && (m1[1] == m2[1]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER bool operator!=(tmat2x2<T, P> const & m1, tmat2x2<T, P> const & m2)
+ {
+ return (m1[0] != m2[0]) || (m1[1] != m2[1]);
+ }
+} //namespace glm
diff --git a/src/third_party/glm/glm/detail/type_mat2x3.hpp b/src/third_party/glm/glm/detail/type_mat2x3.hpp
new file mode 100644
index 0000000..0b48727
--- /dev/null
+++ b/src/third_party/glm/glm/detail/type_mat2x3.hpp
@@ -0,0 +1,165 @@
+/// @ref core
+/// @file glm/detail/type_mat2x3.hpp
+
+#pragma once
+
+#include "../fwd.hpp"
+#include "type_vec2.hpp"
+#include "type_vec3.hpp"
+#include "type_mat.hpp"
+#include <limits>
+#include <cstddef>
+
+namespace glm
+{
+ template <typename T, precision P = defaultp>
+ struct tmat2x3
+ {
+ typedef tvec3<T, P> col_type;
+ typedef tvec2<T, P> row_type;
+ typedef tmat2x3<T, P> type;
+ typedef tmat3x2<T, P> transpose_type;
+ typedef T value_type;
+
+ private:
+ col_type value[2];
+
+ public:
+ // -- Constructors --
+
+ GLM_FUNC_DECL tmat2x3() GLM_DEFAULT_CTOR;
+ GLM_FUNC_DECL tmat2x3(tmat2x3<T, P> const & m) GLM_DEFAULT;
+ template <precision Q>
+ GLM_FUNC_DECL tmat2x3(tmat2x3<T, Q> const & m);
+
+ GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tmat2x3(ctor);
+ GLM_FUNC_DECL explicit tmat2x3(T scalar);
+ GLM_FUNC_DECL tmat2x3(
+ T x0, T y0, T z0,
+ T x1, T y1, T z1);
+ GLM_FUNC_DECL tmat2x3(
+ col_type const & v0,
+ col_type const & v1);
+
+ // -- Conversions --
+
+ template <typename X1, typename Y1, typename Z1, typename X2, typename Y2, typename Z2>
+ GLM_FUNC_DECL tmat2x3(
+ X1 x1, Y1 y1, Z1 z1,
+ X2 x2, Y2 y2, Z2 z2);
+
+ template <typename U, typename V>
+ GLM_FUNC_DECL tmat2x3(
+ tvec3<U, P> const & v1,
+ tvec3<V, P> const & v2);
+
+ // -- Matrix conversions --
+
+ template <typename U, precision Q>
+ GLM_FUNC_DECL GLM_EXPLICIT tmat2x3(tmat2x3<U, Q> const & m);
+
+ GLM_FUNC_DECL GLM_EXPLICIT tmat2x3(tmat2x2<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat2x3(tmat3x3<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat2x3(tmat4x4<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat2x3(tmat2x4<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat2x3(tmat3x2<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat2x3(tmat3x4<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat2x3(tmat4x2<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat2x3(tmat4x3<T, P> const & x);
+
+ // -- Accesses --
+
+ typedef length_t length_type;
+ GLM_FUNC_DECL GLM_CONSTEXPR length_type length() const;
+
+ GLM_FUNC_DECL col_type & operator[](length_type i);
+ GLM_FUNC_DECL col_type const & operator[](length_type i) const;
+
+ // -- Unary arithmetic operators --
+
+ GLM_FUNC_DECL tmat2x3<T, P> & operator=(tmat2x3<T, P> const & m) GLM_DEFAULT;
+
+ template <typename U>
+ GLM_FUNC_DECL tmat2x3<T, P> & operator=(tmat2x3<U, P> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat2x3<T, P> & operator+=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat2x3<T, P> & operator+=(tmat2x3<U, P> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat2x3<T, P> & operator-=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat2x3<T, P> & operator-=(tmat2x3<U, P> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat2x3<T, P> & operator*=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat2x3<T, P> & operator/=(U s);
+
+ // -- Increment and decrement operators --
+
+ GLM_FUNC_DECL tmat2x3<T, P> & operator++ ();
+ GLM_FUNC_DECL tmat2x3<T, P> & operator-- ();
+ GLM_FUNC_DECL tmat2x3<T, P> operator++(int);
+ GLM_FUNC_DECL tmat2x3<T, P> operator--(int);
+ };
+
+ // -- Unary operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat2x3<T, P> operator+(tmat2x3<T, P> const & m);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat2x3<T, P> operator-(tmat2x3<T, P> const & m);
+
+ // -- Binary operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat2x3<T, P> operator+(tmat2x3<T, P> const & m, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat2x3<T, P> operator+(tmat2x3<T, P> const & m1, tmat2x3<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat2x3<T, P> operator-(tmat2x3<T, P> const & m, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat2x3<T, P> operator-(tmat2x3<T, P> const & m1, tmat2x3<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat2x3<T, P> operator*(tmat2x3<T, P> const & m, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat2x3<T, P> operator*(T scalar, tmat2x3<T, P> const & m);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL typename tmat2x3<T, P>::col_type operator*(tmat2x3<T, P> const & m, typename tmat2x3<T, P>::row_type const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL typename tmat2x3<T, P>::row_type operator*(typename tmat2x3<T, P>::col_type const & v, tmat2x3<T, P> const & m);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat2x3<T, P> operator*(tmat2x3<T, P> const & m1, tmat2x2<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x3<T, P> operator*(tmat2x3<T, P> const & m1, tmat3x2<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x3<T, P> operator*(tmat2x3<T, P> const & m1, tmat4x2<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat2x3<T, P> operator/(tmat2x3<T, P> const & m, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat2x3<T, P> operator/(T scalar, tmat2x3<T, P> const & m);
+
+ // -- Boolean operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL bool operator==(tmat2x3<T, P> const & m1, tmat2x3<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL bool operator!=(tmat2x3<T, P> const & m1, tmat2x3<T, P> const & m2);
+}//namespace glm
+
+#ifndef GLM_EXTERNAL_TEMPLATE
+#include "type_mat2x3.inl"
+#endif
diff --git a/src/third_party/glm/glm/detail/type_mat2x3.inl b/src/third_party/glm/glm/detail/type_mat2x3.inl
new file mode 100644
index 0000000..8b13f8b
--- /dev/null
+++ b/src/third_party/glm/glm/detail/type_mat2x3.inl
@@ -0,0 +1,464 @@
+/// @ref core
+/// @file glm/detail/type_mat2x3.inl
+
+namespace glm
+{
+ // -- Constructors --
+
+# if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT)
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3()
+ {
+# ifndef GLM_FORCE_NO_CTOR_INIT
+ this->value[0] = col_type(1, 0, 0);
+ this->value[1] = col_type(0, 1, 0);
+# endif
+ }
+# endif
+
+# if !GLM_HAS_DEFAULTED_FUNCTIONS
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3(tmat2x3<T, P> const & m)
+ {
+ this->value[0] = m.value[0];
+ this->value[1] = m.value[1];
+ }
+# endif//!GLM_HAS_DEFAULTED_FUNCTIONS
+
+ template <typename T, precision P>
+ template <precision Q>
+ GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3(tmat2x3<T, Q> const & m)
+ {
+ this->value[0] = m.value[0];
+ this->value[1] = m.value[1];
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tmat2x3<T, P>::tmat2x3(ctor)
+ {}
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3(T scalar)
+ {
+ this->value[0] = col_type(scalar, 0, 0);
+ this->value[1] = col_type(0, scalar, 0);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3
+ (
+ T x0, T y0, T z0,
+ T x1, T y1, T z1
+ )
+ {
+ this->value[0] = col_type(x0, y0, z0);
+ this->value[1] = col_type(x1, y1, z1);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3(col_type const & v0, col_type const & v1)
+ {
+ this->value[0] = v0;
+ this->value[1] = v1;
+ }
+
+ // -- Conversion constructors --
+
+ template <typename T, precision P>
+ template <
+ typename X1, typename Y1, typename Z1,
+ typename X2, typename Y2, typename Z2>
+ GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3
+ (
+ X1 x1, Y1 y1, Z1 z1,
+ X2 x2, Y2 y2, Z2 z2
+ )
+ {
+ this->value[0] = col_type(static_cast<T>(x1), value_type(y1), value_type(z1));
+ this->value[1] = col_type(static_cast<T>(x2), value_type(y2), value_type(z2));
+ }
+
+ template <typename T, precision P>
+ template <typename V1, typename V2>
+ GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3(tvec3<V1, P> const & v1, tvec3<V2, P> const & v2)
+ {
+ this->value[0] = col_type(v1);
+ this->value[1] = col_type(v2);
+ }
+
+ // -- Matrix conversions --
+
+ template <typename T, precision P>
+ template <typename U, precision Q>
+ GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3(tmat2x3<U, Q> const & m)
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3(tmat2x2<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0], 0);
+ this->value[1] = col_type(m[1], 0);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3(tmat3x3<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3(tmat4x4<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3(tmat2x4<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3(tmat3x2<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0], 0);
+ this->value[1] = col_type(m[1], 0);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3(tmat3x4<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3(tmat4x2<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0], 0);
+ this->value[1] = col_type(m[1], 0);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x3<T, P>::tmat2x3(tmat4x3<T, P> const & m)
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ }
+
+ // -- Accesses --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tmat2x3<T, P>::length_type tmat2x3<T, P>::length() const
+ {
+ return 2;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER typename tmat2x3<T, P>::col_type & tmat2x3<T, P>::operator[](typename tmat2x3<T, P>::length_type i)
+ {
+ assert(i < this->length());
+ return this->value[i];
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER typename tmat2x3<T, P>::col_type const & tmat2x3<T, P>::operator[](typename tmat2x3<T, P>::length_type i) const
+ {
+ assert(i < this->length());
+ return this->value[i];
+ }
+
+ // -- Unary updatable operators --
+
+# if !GLM_HAS_DEFAULTED_FUNCTIONS
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x3<T, P>& tmat2x3<T, P>::operator=(tmat2x3<T, P> const & m)
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ return *this;
+ }
+# endif//!GLM_HAS_DEFAULTED_FUNCTIONS
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x3<T, P>& tmat2x3<T, P>::operator=(tmat2x3<U, P> const & m)
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x3<T, P> & tmat2x3<T, P>::operator+=(U s)
+ {
+ this->value[0] += s;
+ this->value[1] += s;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x3<T, P>& tmat2x3<T, P>::operator+=(tmat2x3<U, P> const & m)
+ {
+ this->value[0] += m[0];
+ this->value[1] += m[1];
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x3<T, P>& tmat2x3<T, P>::operator-=(U s)
+ {
+ this->value[0] -= s;
+ this->value[1] -= s;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x3<T, P>& tmat2x3<T, P>::operator-=(tmat2x3<U, P> const & m)
+ {
+ this->value[0] -= m[0];
+ this->value[1] -= m[1];
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x3<T, P>& tmat2x3<T, P>::operator*=(U s)
+ {
+ this->value[0] *= s;
+ this->value[1] *= s;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x3<T, P> & tmat2x3<T, P>::operator/=(U s)
+ {
+ this->value[0] /= s;
+ this->value[1] /= s;
+ return *this;
+ }
+
+ // -- Increment and decrement operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x3<T, P> & tmat2x3<T, P>::operator++()
+ {
+ ++this->value[0];
+ ++this->value[1];
+ return *this;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x3<T, P> & tmat2x3<T, P>::operator--()
+ {
+ --this->value[0];
+ --this->value[1];
+ return *this;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x3<T, P> tmat2x3<T, P>::operator++(int)
+ {
+ tmat2x3<T, P> Result(*this);
+ ++*this;
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x3<T, P> tmat2x3<T, P>::operator--(int)
+ {
+ tmat2x3<T, P> Result(*this);
+ --*this;
+ return Result;
+ }
+
+ // -- Unary arithmetic operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x3<T, P> operator+(tmat2x3<T, P> const & m)
+ {
+ return m;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x3<T, P> operator-(tmat2x3<T, P> const & m)
+ {
+ return tmat2x3<T, P>(
+ -m[0],
+ -m[1]);
+ }
+
+ // -- Binary arithmetic operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x3<T, P> operator+(tmat2x3<T, P> const & m, T scalar)
+ {
+ return tmat2x3<T, P>(
+ m[0] + scalar,
+ m[1] + scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x3<T, P> operator+(tmat2x3<T, P> const & m1, tmat2x3<T, P> const & m2)
+ {
+ return tmat2x3<T, P>(
+ m1[0] + m2[0],
+ m1[1] + m2[1]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x3<T, P> operator-(tmat2x3<T, P> const & m, T scalar)
+ {
+ return tmat2x3<T, P>(
+ m[0] - scalar,
+ m[1] - scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x3<T, P> operator-(tmat2x3<T, P> const & m1, tmat2x3<T, P> const & m2)
+ {
+ return tmat2x3<T, P>(
+ m1[0] - m2[0],
+ m1[1] - m2[1]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x3<T, P> operator*(tmat2x3<T, P> const & m, T scalar)
+ {
+ return tmat2x3<T, P>(
+ m[0] * scalar,
+ m[1] * scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x3<T, P> operator*(T scalar, tmat2x3<T, P> const & m)
+ {
+ return tmat2x3<T, P>(
+ m[0] * scalar,
+ m[1] * scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER typename tmat2x3<T, P>::col_type operator*
+ (
+ tmat2x3<T, P> const & m,
+ typename tmat2x3<T, P>::row_type const & v)
+ {
+ return typename tmat2x3<T, P>::col_type(
+ m[0][0] * v.x + m[1][0] * v.y,
+ m[0][1] * v.x + m[1][1] * v.y,
+ m[0][2] * v.x + m[1][2] * v.y);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER typename tmat2x3<T, P>::row_type operator*
+ (
+ typename tmat2x3<T, P>::col_type const & v,
+ tmat2x3<T, P> const & m)
+ {
+ return typename tmat2x3<T, P>::row_type(
+ v.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2],
+ v.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x3<T, P> operator*(tmat2x3<T, P> const & m1, tmat2x2<T, P> const & m2)
+ {
+ return tmat2x3<T, P>(
+ m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1],
+ m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1],
+ m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1],
+ m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1],
+ m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1],
+ m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> operator*(tmat2x3<T, P> const & m1, tmat3x2<T, P> const & m2)
+ {
+ T SrcA00 = m1[0][0];
+ T SrcA01 = m1[0][1];
+ T SrcA02 = m1[0][2];
+ T SrcA10 = m1[1][0];
+ T SrcA11 = m1[1][1];
+ T SrcA12 = m1[1][2];
+
+ T SrcB00 = m2[0][0];
+ T SrcB01 = m2[0][1];
+ T SrcB10 = m2[1][0];
+ T SrcB11 = m2[1][1];
+ T SrcB20 = m2[2][0];
+ T SrcB21 = m2[2][1];
+
+ tmat3x3<T, P> Result(uninitialize);
+ Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01;
+ Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01;
+ Result[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01;
+ Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11;
+ Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11;
+ Result[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11;
+ Result[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21;
+ Result[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21;
+ Result[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21;
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x3<T, P> operator*(tmat2x3<T, P> const & m1, tmat4x2<T, P> const & m2)
+ {
+ return tmat4x3<T, P>(
+ m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1],
+ m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1],
+ m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1],
+ m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1],
+ m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1],
+ m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1],
+ m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1],
+ m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1],
+ m1[0][2] * m2[2][0] + m1[1][2] * m2[2][1],
+ m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1],
+ m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1],
+ m1[0][2] * m2[3][0] + m1[1][2] * m2[3][1]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x3<T, P> operator/(tmat2x3<T, P> const & m, T scalar)
+ {
+ return tmat2x3<T, P>(
+ m[0] / scalar,
+ m[1] / scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x3<T, P> operator/(T scalar, tmat2x3<T, P> const & m)
+ {
+ return tmat2x3<T, P>(
+ scalar / m[0],
+ scalar / m[1]);
+ }
+
+ // -- Boolean operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER bool operator==(tmat2x3<T, P> const & m1, tmat2x3<T, P> const & m2)
+ {
+ return (m1[0] == m2[0]) && (m1[1] == m2[1]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER bool operator!=(tmat2x3<T, P> const & m1, tmat2x3<T, P> const & m2)
+ {
+ return (m1[0] != m2[0]) || (m1[1] != m2[1]);
+ }
+} //namespace glm
diff --git a/src/third_party/glm/glm/detail/type_mat2x4.hpp b/src/third_party/glm/glm/detail/type_mat2x4.hpp
new file mode 100644
index 0000000..741968e
--- /dev/null
+++ b/src/third_party/glm/glm/detail/type_mat2x4.hpp
@@ -0,0 +1,167 @@
+/// @ref core
+/// @file glm/detail/type_mat2x4.hpp
+
+#pragma once
+
+#include "../fwd.hpp"
+#include "type_vec2.hpp"
+#include "type_vec4.hpp"
+#include "type_mat.hpp"
+#include <limits>
+#include <cstddef>
+
+namespace glm
+{
+ template <typename T, precision P = defaultp>
+ struct tmat2x4
+ {
+ typedef tvec4<T, P> col_type;
+ typedef tvec2<T, P> row_type;
+ typedef tmat2x4<T, P> type;
+ typedef tmat4x2<T, P> transpose_type;
+ typedef T value_type;
+
+ private:
+ col_type value[2];
+
+ public:
+ // -- Constructors --
+
+ GLM_FUNC_DECL tmat2x4() GLM_DEFAULT_CTOR;
+ GLM_FUNC_DECL tmat2x4(tmat2x4<T, P> const & m) GLM_DEFAULT;
+ template <precision Q>
+ GLM_FUNC_DECL tmat2x4(tmat2x4<T, Q> const & m);
+
+ GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tmat2x4(ctor);
+ GLM_FUNC_DECL explicit tmat2x4(T scalar);
+ GLM_FUNC_DECL tmat2x4(
+ T x0, T y0, T z0, T w0,
+ T x1, T y1, T z1, T w1);
+ GLM_FUNC_DECL tmat2x4(
+ col_type const & v0,
+ col_type const & v1);
+
+ // -- Conversions --
+
+ template <
+ typename X1, typename Y1, typename Z1, typename W1,
+ typename X2, typename Y2, typename Z2, typename W2>
+ GLM_FUNC_DECL tmat2x4(
+ X1 x1, Y1 y1, Z1 z1, W1 w1,
+ X2 x2, Y2 y2, Z2 z2, W2 w2);
+
+ template <typename U, typename V>
+ GLM_FUNC_DECL tmat2x4(
+ tvec4<U, P> const & v1,
+ tvec4<V, P> const & v2);
+
+ // -- Matrix conversions --
+
+ template <typename U, precision Q>
+ GLM_FUNC_DECL GLM_EXPLICIT tmat2x4(tmat2x4<U, Q> const & m);
+
+ GLM_FUNC_DECL GLM_EXPLICIT tmat2x4(tmat2x2<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat2x4(tmat3x3<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat2x4(tmat4x4<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat2x4(tmat2x3<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat2x4(tmat3x2<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat2x4(tmat3x4<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat2x4(tmat4x2<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat2x4(tmat4x3<T, P> const & x);
+
+ // -- Accesses --
+
+ typedef length_t length_type;
+ GLM_FUNC_DECL GLM_CONSTEXPR length_type length() const;
+
+ GLM_FUNC_DECL col_type & operator[](length_type i);
+ GLM_FUNC_DECL col_type const & operator[](length_type i) const;
+
+ // -- Unary arithmetic operators --
+
+ GLM_FUNC_DECL tmat2x4<T, P> & operator=(tmat2x4<T, P> const & m) GLM_DEFAULT;
+
+ template <typename U>
+ GLM_FUNC_DECL tmat2x4<T, P> & operator=(tmat2x4<U, P> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat2x4<T, P> & operator+=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat2x4<T, P> & operator+=(tmat2x4<U, P> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat2x4<T, P> & operator-=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat2x4<T, P> & operator-=(tmat2x4<U, P> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat2x4<T, P> & operator*=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat2x4<T, P> & operator/=(U s);
+
+ // -- Increment and decrement operators --
+
+ GLM_FUNC_DECL tmat2x4<T, P> & operator++ ();
+ GLM_FUNC_DECL tmat2x4<T, P> & operator-- ();
+ GLM_FUNC_DECL tmat2x4<T, P> operator++(int);
+ GLM_FUNC_DECL tmat2x4<T, P> operator--(int);
+ };
+
+ // -- Unary operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat2x4<T, P> operator+(tmat2x4<T, P> const & m);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat2x4<T, P> operator-(tmat2x4<T, P> const & m);
+
+ // -- Binary operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat2x4<T, P> operator+(tmat2x4<T, P> const & m, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat2x4<T, P> operator+(tmat2x4<T, P> const & m1, tmat2x4<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat2x4<T, P> operator-(tmat2x4<T, P> const & m, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat2x4<T, P> operator-(tmat2x4<T, P> const & m1, tmat2x4<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat2x4<T, P> operator*(tmat2x4<T, P> const & m, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat2x4<T, P> operator*(T scalar, tmat2x4<T, P> const & m);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL typename tmat2x4<T, P>::col_type operator*(tmat2x4<T, P> const & m, typename tmat2x4<T, P>::row_type const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL typename tmat2x4<T, P>::row_type operator*(typename tmat2x4<T, P>::col_type const & v, tmat2x4<T, P> const & m);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x4<T, P> operator*(tmat2x4<T, P> const & m1, tmat4x2<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat2x4<T, P> operator*(tmat2x4<T, P> const & m1, tmat2x2<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x4<T, P> operator*(tmat2x4<T, P> const & m1, tmat3x2<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat2x4<T, P> operator/(tmat2x4<T, P> const & m, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat2x4<T, P> operator/(T scalar, tmat2x4<T, P> const & m);
+
+ // -- Boolean operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL bool operator==(tmat2x4<T, P> const & m1, tmat2x4<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL bool operator!=(tmat2x4<T, P> const & m1, tmat2x4<T, P> const & m2);
+}//namespace glm
+
+#ifndef GLM_EXTERNAL_TEMPLATE
+#include "type_mat2x4.inl"
+#endif
diff --git a/src/third_party/glm/glm/detail/type_mat2x4.inl b/src/third_party/glm/glm/detail/type_mat2x4.inl
new file mode 100644
index 0000000..47fd9fa
--- /dev/null
+++ b/src/third_party/glm/glm/detail/type_mat2x4.inl
@@ -0,0 +1,473 @@
+/// @ref core
+/// @file glm/detail/type_mat2x4.inl
+
+namespace glm
+{
+ // -- Constructors --
+
+# if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT)
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x4<T, P>::tmat2x4()
+ {
+# ifndef GLM_FORCE_NO_CTOR_INIT
+ this->value[0] = col_type(1, 0, 0, 0);
+ this->value[1] = col_type(0, 1, 0, 0);
+# endif
+ }
+# endif
+
+# if !GLM_HAS_DEFAULTED_FUNCTIONS
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x4<T, P>::tmat2x4(tmat2x4<T, P> const & m)
+ {
+ this->value[0] = m.value[0];
+ this->value[1] = m.value[1];
+ }
+# endif//!GLM_HAS_DEFAULTED_FUNCTIONS
+
+ template <typename T, precision P>
+ template <precision Q>
+ GLM_FUNC_QUALIFIER tmat2x4<T, P>::tmat2x4(tmat2x4<T, Q> const & m)
+ {
+ this->value[0] = m.value[0];
+ this->value[1] = m.value[1];
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tmat2x4<T, P>::tmat2x4(ctor)
+ {}
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x4<T, P>::tmat2x4(T scalar)
+ {
+ value_type const Zero(0);
+ this->value[0] = col_type(scalar, Zero, Zero, Zero);
+ this->value[1] = col_type(Zero, scalar, Zero, Zero);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x4<T, P>::tmat2x4
+ (
+ T x0, T y0, T z0, T w0,
+ T x1, T y1, T z1, T w1
+ )
+ {
+ this->value[0] = col_type(x0, y0, z0, w0);
+ this->value[1] = col_type(x1, y1, z1, w1);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x4<T, P>::tmat2x4(col_type const & v0, col_type const & v1)
+ {
+ this->value[0] = v0;
+ this->value[1] = v1;
+ }
+
+ // -- Conversion constructors --
+
+ template <typename T, precision P>
+ template <
+ typename X1, typename Y1, typename Z1, typename W1,
+ typename X2, typename Y2, typename Z2, typename W2>
+ GLM_FUNC_QUALIFIER tmat2x4<T, P>::tmat2x4
+ (
+ X1 x1, Y1 y1, Z1 z1, W1 w1,
+ X2 x2, Y2 y2, Z2 z2, W2 w2
+ )
+ {
+ this->value[0] = col_type(static_cast<T>(x1), value_type(y1), value_type(z1), value_type(w1));
+ this->value[1] = col_type(static_cast<T>(x2), value_type(y2), value_type(z2), value_type(w2));
+ }
+
+ template <typename T, precision P>
+ template <typename V1, typename V2>
+ GLM_FUNC_QUALIFIER tmat2x4<T, P>::tmat2x4(tvec4<V1, P> const & v1, tvec4<V2, P> const & v2)
+ {
+ this->value[0] = col_type(v1);
+ this->value[1] = col_type(v2);
+ }
+
+ // -- Matrix conversions --
+
+ template <typename T, precision P>
+ template <typename U, precision Q>
+ GLM_FUNC_QUALIFIER tmat2x4<T, P>::tmat2x4(tmat2x4<U, Q> const & m)
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x4<T, P>::tmat2x4(tmat2x2<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0], 0, 0);
+ this->value[1] = col_type(m[1], 0, 0);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x4<T, P>::tmat2x4(tmat3x3<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0], 0);
+ this->value[1] = col_type(m[1], 0);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x4<T, P>::tmat2x4(tmat4x4<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x4<T, P>::tmat2x4(tmat2x3<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0], 0);
+ this->value[1] = col_type(m[1], 0);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x4<T, P>::tmat2x4(tmat3x2<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0], 0, 0);
+ this->value[1] = col_type(m[1], 0, 0);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x4<T, P>::tmat2x4(tmat3x4<T, P> const & m)
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x4<T, P>::tmat2x4(tmat4x2<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0], 0, 0);
+ this->value[1] = col_type(m[1], 0, 0);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x4<T, P>::tmat2x4(tmat4x3<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0], 0);
+ this->value[1] = col_type(m[1], 0);
+ }
+
+ // -- Accesses --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tmat2x4<T, P>::length_type tmat2x4<T, P>::length() const
+ {
+ return 2;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER typename tmat2x4<T, P>::col_type & tmat2x4<T, P>::operator[](typename tmat2x4<T, P>::length_type i)
+ {
+ assert(i < this->length());
+ return this->value[i];
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER typename tmat2x4<T, P>::col_type const & tmat2x4<T, P>::operator[](typename tmat2x4<T, P>::length_type i) const
+ {
+ assert(i < this->length());
+ return this->value[i];
+ }
+
+ // -- Unary updatable operators --
+
+# if !GLM_HAS_DEFAULTED_FUNCTIONS
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x4<T, P>& tmat2x4<T, P>::operator=(tmat2x4<T, P> const & m)
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ return *this;
+ }
+# endif//!GLM_HAS_DEFAULTED_FUNCTIONS
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x4<T, P>& tmat2x4<T, P>::operator=(tmat2x4<U, P> const & m)
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x4<T, P>& tmat2x4<T, P>::operator+=(U s)
+ {
+ this->value[0] += s;
+ this->value[1] += s;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x4<T, P>& tmat2x4<T, P>::operator+=(tmat2x4<U, P> const & m)
+ {
+ this->value[0] += m[0];
+ this->value[1] += m[1];
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x4<T, P>& tmat2x4<T, P>::operator-=(U s)
+ {
+ this->value[0] -= s;
+ this->value[1] -= s;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x4<T, P>& tmat2x4<T, P>::operator-=(tmat2x4<U, P> const & m)
+ {
+ this->value[0] -= m[0];
+ this->value[1] -= m[1];
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x4<T, P>& tmat2x4<T, P>::operator*=(U s)
+ {
+ this->value[0] *= s;
+ this->value[1] *= s;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat2x4<T, P> & tmat2x4<T, P>::operator/=(U s)
+ {
+ this->value[0] /= s;
+ this->value[1] /= s;
+ return *this;
+ }
+
+ // -- Increment and decrement operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x4<T, P>& tmat2x4<T, P>::operator++()
+ {
+ ++this->value[0];
+ ++this->value[1];
+ return *this;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x4<T, P>& tmat2x4<T, P>::operator--()
+ {
+ --this->value[0];
+ --this->value[1];
+ return *this;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x4<T, P> tmat2x4<T, P>::operator++(int)
+ {
+ tmat2x4<T, P> Result(*this);
+ ++*this;
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x4<T, P> tmat2x4<T, P>::operator--(int)
+ {
+ tmat2x4<T, P> Result(*this);
+ --*this;
+ return Result;
+ }
+
+ // -- Unary arithmetic operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x4<T, P> operator+(tmat2x4<T, P> const & m)
+ {
+ return m;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x4<T, P> operator-(tmat2x4<T, P> const & m)
+ {
+ return tmat2x4<T, P>(
+ -m[0],
+ -m[1]);
+ }
+
+ // -- Binary arithmetic operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x4<T, P> operator+(tmat2x4<T, P> const & m, T scalar)
+ {
+ return tmat2x4<T, P>(
+ m[0] + scalar,
+ m[1] + scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x4<T, P> operator+(tmat2x4<T, P> const & m1, tmat2x4<T, P> const & m2)
+ {
+ return tmat2x4<T, P>(
+ m1[0] + m2[0],
+ m1[1] + m2[1]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x4<T, P> operator-(tmat2x4<T, P> const & m, T scalar)
+ {
+ return tmat2x4<T, P>(
+ m[0] - scalar,
+ m[1] - scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x4<T, P> operator-(tmat2x4<T, P> const & m1, tmat2x4<T, P> const & m2)
+ {
+ return tmat2x4<T, P>(
+ m1[0] - m2[0],
+ m1[1] - m2[1]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x4<T, P> operator*(tmat2x4<T, P> const & m, T scalar)
+ {
+ return tmat2x4<T, P>(
+ m[0] * scalar,
+ m[1] * scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x4<T, P> operator*(T scalar, tmat2x4<T, P> const & m)
+ {
+ return tmat2x4<T, P>(
+ m[0] * scalar,
+ m[1] * scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER typename tmat2x4<T, P>::col_type operator*(tmat2x4<T, P> const & m, typename tmat2x4<T, P>::row_type const & v)
+ {
+ return typename tmat2x4<T, P>::col_type(
+ m[0][0] * v.x + m[1][0] * v.y,
+ m[0][1] * v.x + m[1][1] * v.y,
+ m[0][2] * v.x + m[1][2] * v.y,
+ m[0][3] * v.x + m[1][3] * v.y);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER typename tmat2x4<T, P>::row_type operator*(typename tmat2x4<T, P>::col_type const & v, tmat2x4<T, P> const & m)
+ {
+ return typename tmat2x4<T, P>::row_type(
+ v.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2] + v.w * m[0][3],
+ v.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2] + v.w * m[1][3]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> operator*(tmat2x4<T, P> const & m1, tmat4x2<T, P> const & m2)
+ {
+ T SrcA00 = m1[0][0];
+ T SrcA01 = m1[0][1];
+ T SrcA02 = m1[0][2];
+ T SrcA03 = m1[0][3];
+ T SrcA10 = m1[1][0];
+ T SrcA11 = m1[1][1];
+ T SrcA12 = m1[1][2];
+ T SrcA13 = m1[1][3];
+
+ T SrcB00 = m2[0][0];
+ T SrcB01 = m2[0][1];
+ T SrcB10 = m2[1][0];
+ T SrcB11 = m2[1][1];
+ T SrcB20 = m2[2][0];
+ T SrcB21 = m2[2][1];
+ T SrcB30 = m2[3][0];
+ T SrcB31 = m2[3][1];
+
+ tmat4x4<T, P> Result(uninitialize);
+ Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01;
+ Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01;
+ Result[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01;
+ Result[0][3] = SrcA03 * SrcB00 + SrcA13 * SrcB01;
+ Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11;
+ Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11;
+ Result[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11;
+ Result[1][3] = SrcA03 * SrcB10 + SrcA13 * SrcB11;
+ Result[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21;
+ Result[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21;
+ Result[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21;
+ Result[2][3] = SrcA03 * SrcB20 + SrcA13 * SrcB21;
+ Result[3][0] = SrcA00 * SrcB30 + SrcA10 * SrcB31;
+ Result[3][1] = SrcA01 * SrcB30 + SrcA11 * SrcB31;
+ Result[3][2] = SrcA02 * SrcB30 + SrcA12 * SrcB31;
+ Result[3][3] = SrcA03 * SrcB30 + SrcA13 * SrcB31;
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x4<T, P> operator*(tmat2x4<T, P> const & m1, tmat2x2<T, P> const & m2)
+ {
+ return tmat2x4<T, P>(
+ m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1],
+ m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1],
+ m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1],
+ m1[0][3] * m2[0][0] + m1[1][3] * m2[0][1],
+ m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1],
+ m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1],
+ m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1],
+ m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x4<T, P> operator*(tmat2x4<T, P> const & m1, tmat3x2<T, P> const & m2)
+ {
+ return tmat3x4<T, P>(
+ m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1],
+ m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1],
+ m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1],
+ m1[0][3] * m2[0][0] + m1[1][3] * m2[0][1],
+ m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1],
+ m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1],
+ m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1],
+ m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1],
+ m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1],
+ m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1],
+ m1[0][2] * m2[2][0] + m1[1][2] * m2[2][1],
+ m1[0][3] * m2[2][0] + m1[1][3] * m2[2][1]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x4<T, P> operator/(tmat2x4<T, P> const & m, T scalar)
+ {
+ return tmat2x4<T, P>(
+ m[0] / scalar,
+ m[1] / scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x4<T, P> operator/(T scalar, tmat2x4<T, P> const & m)
+ {
+ return tmat2x4<T, P>(
+ scalar / m[0],
+ scalar / m[1]);
+ }
+
+ // -- Boolean operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER bool operator==(tmat2x4<T, P> const & m1, tmat2x4<T, P> const & m2)
+ {
+ return (m1[0] == m2[0]) && (m1[1] == m2[1]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER bool operator!=(tmat2x4<T, P> const & m1, tmat2x4<T, P> const & m2)
+ {
+ return (m1[0] != m2[0]) || (m1[1] != m2[1]);
+ }
+} //namespace glm
diff --git a/src/third_party/glm/glm/detail/type_mat3x2.hpp b/src/third_party/glm/glm/detail/type_mat3x2.hpp
new file mode 100644
index 0000000..5d20fd8
--- /dev/null
+++ b/src/third_party/glm/glm/detail/type_mat3x2.hpp
@@ -0,0 +1,173 @@
+/// @ref core
+/// @file glm/detail/type_mat3x2.hpp
+
+#pragma once
+
+#include "../fwd.hpp"
+#include "type_vec2.hpp"
+#include "type_vec3.hpp"
+#include "type_mat.hpp"
+#include <limits>
+#include <cstddef>
+
+namespace glm
+{
+ template <typename T, precision P = defaultp>
+ struct tmat3x2
+ {
+ typedef tvec2<T, P> col_type;
+ typedef tvec3<T, P> row_type;
+ typedef tmat3x2<T, P> type;
+ typedef tmat2x3<T, P> transpose_type;
+ typedef T value_type;
+
+ private:
+ col_type value[3];
+
+ public:
+ // -- Constructors --
+
+ GLM_FUNC_DECL tmat3x2() GLM_DEFAULT_CTOR;
+ GLM_FUNC_DECL tmat3x2(tmat3x2<T, P> const & m) GLM_DEFAULT;
+ template <precision Q>
+ GLM_FUNC_DECL tmat3x2(tmat3x2<T, Q> const & m);
+
+ GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tmat3x2(ctor);
+ GLM_FUNC_DECL explicit tmat3x2(T scalar);
+ GLM_FUNC_DECL tmat3x2(
+ T x0, T y0,
+ T x1, T y1,
+ T x2, T y2);
+ GLM_FUNC_DECL tmat3x2(
+ col_type const & v0,
+ col_type const & v1,
+ col_type const & v2);
+
+ // -- Conversions --
+
+ template<
+ typename X1, typename Y1,
+ typename X2, typename Y2,
+ typename X3, typename Y3>
+ GLM_FUNC_DECL tmat3x2(
+ X1 x1, Y1 y1,
+ X2 x2, Y2 y2,
+ X3 x3, Y3 y3);
+
+ template <typename V1, typename V2, typename V3>
+ GLM_FUNC_DECL tmat3x2(
+ tvec2<V1, P> const & v1,
+ tvec2<V2, P> const & v2,
+ tvec2<V3, P> const & v3);
+
+ // -- Matrix conversions --
+
+ template <typename U, precision Q>
+ GLM_FUNC_DECL GLM_EXPLICIT tmat3x2(tmat3x2<U, Q> const & m);
+
+ GLM_FUNC_DECL GLM_EXPLICIT tmat3x2(tmat2x2<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat3x2(tmat3x3<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat3x2(tmat4x4<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat3x2(tmat2x3<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat3x2(tmat2x4<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat3x2(tmat3x4<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat3x2(tmat4x2<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat3x2(tmat4x3<T, P> const & x);
+
+ // -- Accesses --
+
+ typedef length_t length_type;
+ GLM_FUNC_DECL GLM_CONSTEXPR length_type length() const;
+
+ GLM_FUNC_DECL col_type & operator[](length_type i);
+ GLM_FUNC_DECL col_type const & operator[](length_type i) const;
+
+ // -- Unary arithmetic operators --
+
+ GLM_FUNC_DECL tmat3x2<T, P> & operator=(tmat3x2<T, P> const & m) GLM_DEFAULT;
+
+ template <typename U>
+ GLM_FUNC_DECL tmat3x2<T, P> & operator=(tmat3x2<U, P> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat3x2<T, P> & operator+=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat3x2<T, P> & operator+=(tmat3x2<U, P> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat3x2<T, P> & operator-=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat3x2<T, P> & operator-=(tmat3x2<U, P> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat3x2<T, P> & operator*=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat3x2<T, P> & operator/=(U s);
+
+ // -- Increment and decrement operators --
+
+ GLM_FUNC_DECL tmat3x2<T, P> & operator++ ();
+ GLM_FUNC_DECL tmat3x2<T, P> & operator-- ();
+ GLM_FUNC_DECL tmat3x2<T, P> operator++(int);
+ GLM_FUNC_DECL tmat3x2<T, P> operator--(int);
+ };
+
+ // -- Unary operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x2<T, P> operator+(tmat3x2<T, P> const & m);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x2<T, P> operator-(tmat3x2<T, P> const & m);
+
+ // -- Binary operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x2<T, P> operator+(tmat3x2<T, P> const & m, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x2<T, P> operator+(tmat3x2<T, P> const & m1, tmat3x2<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x2<T, P> operator-(tmat3x2<T, P> const & m, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x2<T, P> operator-(tmat3x2<T, P> const & m1, tmat3x2<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x2<T, P> operator*(tmat3x2<T, P> const & m, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x2<T, P> operator*(T scalar, tmat3x2<T, P> const & m);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL typename tmat3x2<T, P>::col_type operator*(tmat3x2<T, P> const & m, typename tmat3x2<T, P>::row_type const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL typename tmat3x2<T, P>::row_type operator*(typename tmat3x2<T, P>::col_type const & v, tmat3x2<T, P> const & m);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat2x2<T, P> operator*(tmat3x2<T, P> const & m1, tmat2x3<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x2<T, P> operator*(tmat3x2<T, P> const & m1, tmat3x3<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x2<T, P> operator*(tmat3x2<T, P> const & m1, tmat4x3<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x2<T, P> operator/(tmat3x2<T, P> const & m, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x2<T, P> operator/(T scalar, tmat3x2<T, P> const & m);
+
+ // -- Boolean operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL bool operator==(tmat3x2<T, P> const & m1, tmat3x2<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL bool operator!=(tmat3x2<T, P> const & m1, tmat3x2<T, P> const & m2);
+
+}//namespace glm
+
+#ifndef GLM_EXTERNAL_TEMPLATE
+#include "type_mat3x2.inl"
+#endif
diff --git a/src/third_party/glm/glm/detail/type_mat3x2.inl b/src/third_party/glm/glm/detail/type_mat3x2.inl
new file mode 100644
index 0000000..af0c768
--- /dev/null
+++ b/src/third_party/glm/glm/detail/type_mat3x2.inl
@@ -0,0 +1,498 @@
+/// @ref core
+/// @file glm/detail/type_mat3x2.inl
+
+namespace glm
+{
+ // -- Constructors --
+
+# if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT)
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x2<T, P>::tmat3x2()
+ {
+# ifndef GLM_FORCE_NO_CTOR_INIT
+ this->value[0] = col_type(1, 0);
+ this->value[1] = col_type(0, 1);
+ this->value[2] = col_type(0, 0);
+# endif
+ }
+# endif
+
+# if !GLM_HAS_DEFAULTED_FUNCTIONS
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x2<T, P>::tmat3x2(tmat3x2<T, P> const & m)
+ {
+ this->value[0] = m.value[0];
+ this->value[1] = m.value[1];
+ this->value[2] = m.value[2];
+ }
+# endif//!GLM_HAS_DEFAULTED_FUNCTIONS
+
+ template <typename T, precision P>
+ template <precision Q>
+ GLM_FUNC_QUALIFIER tmat3x2<T, P>::tmat3x2(tmat3x2<T, Q> const & m)
+ {
+ this->value[0] = m.value[0];
+ this->value[1] = m.value[1];
+ this->value[2] = m.value[2];
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tmat3x2<T, P>::tmat3x2(ctor)
+ {}
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x2<T, P>::tmat3x2(T scalar)
+ {
+ this->value[0] = col_type(scalar, 0);
+ this->value[1] = col_type(0, scalar);
+ this->value[2] = col_type(0, 0);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x2<T, P>::tmat3x2
+ (
+ T x0, T y0,
+ T x1, T y1,
+ T x2, T y2
+ )
+ {
+ this->value[0] = col_type(x0, y0);
+ this->value[1] = col_type(x1, y1);
+ this->value[2] = col_type(x2, y2);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x2<T, P>::tmat3x2
+ (
+ col_type const & v0,
+ col_type const & v1,
+ col_type const & v2
+ )
+ {
+ this->value[0] = v0;
+ this->value[1] = v1;
+ this->value[2] = v2;
+ }
+
+ // -- Conversion constructors --
+
+ template <typename T, precision P>
+ template <
+ typename X1, typename Y1,
+ typename X2, typename Y2,
+ typename X3, typename Y3>
+ GLM_FUNC_QUALIFIER tmat3x2<T, P>::tmat3x2
+ (
+ X1 x1, Y1 y1,
+ X2 x2, Y2 y2,
+ X3 x3, Y3 y3
+ )
+ {
+ this->value[0] = col_type(static_cast<T>(x1), value_type(y1));
+ this->value[1] = col_type(static_cast<T>(x2), value_type(y2));
+ this->value[2] = col_type(static_cast<T>(x3), value_type(y3));
+ }
+
+ template <typename T, precision P>
+ template <typename V1, typename V2, typename V3>
+ GLM_FUNC_QUALIFIER tmat3x2<T, P>::tmat3x2
+ (
+ tvec2<V1, P> const & v1,
+ tvec2<V2, P> const & v2,
+ tvec2<V3, P> const & v3
+ )
+ {
+ this->value[0] = col_type(v1);
+ this->value[1] = col_type(v2);
+ this->value[2] = col_type(v3);
+ }
+
+ // -- Matrix conversions --
+
+ template <typename T, precision P>
+ template <typename U, precision Q>
+ GLM_FUNC_QUALIFIER tmat3x2<T, P>::tmat3x2(tmat3x2<U, Q> const & m)
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(m[2]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x2<T, P>::tmat3x2(tmat2x2<T, P> const & m)
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ this->value[2] = col_type(0);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x2<T, P>::tmat3x2(tmat3x3<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(m[2]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x2<T, P>::tmat3x2(tmat4x4<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(m[2]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x2<T, P>::tmat3x2(tmat2x3<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(T(0));
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x2<T, P>::tmat3x2(tmat2x4<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(T(0));
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x2<T, P>::tmat3x2(tmat3x4<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(m[2]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x2<T, P>::tmat3x2(tmat4x2<T, P> const & m)
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ this->value[2] = m[2];
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x2<T, P>::tmat3x2(tmat4x3<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(m[2]);
+ }
+
+ // -- Accesses --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tmat3x2<T, P>::length_type tmat3x2<T, P>::length() const
+ {
+ return 3;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER typename tmat3x2<T, P>::col_type & tmat3x2<T, P>::operator[](typename tmat3x2<T, P>::length_type i)
+ {
+ assert(i < this->length());
+ return this->value[i];
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER typename tmat3x2<T, P>::col_type const & tmat3x2<T, P>::operator[](typename tmat3x2<T, P>::length_type i) const
+ {
+ assert(i < this->length());
+ return this->value[i];
+ }
+
+ // -- Unary updatable operators --
+
+# if !GLM_HAS_DEFAULTED_FUNCTIONS
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x2<T, P>& tmat3x2<T, P>::operator=(tmat3x2<T, P> const & m)
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ this->value[2] = m[2];
+ return *this;
+ }
+# endif//!GLM_HAS_DEFAULTED_FUNCTIONS
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x2<T, P>& tmat3x2<T, P>::operator=(tmat3x2<U, P> const & m)
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ this->value[2] = m[2];
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x2<T, P>& tmat3x2<T, P>::operator+=(U s)
+ {
+ this->value[0] += s;
+ this->value[1] += s;
+ this->value[2] += s;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x2<T, P>& tmat3x2<T, P>::operator+=(tmat3x2<U, P> const & m)
+ {
+ this->value[0] += m[0];
+ this->value[1] += m[1];
+ this->value[2] += m[2];
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x2<T, P>& tmat3x2<T, P>::operator-=(U s)
+ {
+ this->value[0] -= s;
+ this->value[1] -= s;
+ this->value[2] -= s;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x2<T, P>& tmat3x2<T, P>::operator-=(tmat3x2<U, P> const & m)
+ {
+ this->value[0] -= m[0];
+ this->value[1] -= m[1];
+ this->value[2] -= m[2];
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x2<T, P>& tmat3x2<T, P>::operator*=(U s)
+ {
+ this->value[0] *= s;
+ this->value[1] *= s;
+ this->value[2] *= s;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x2<T, P> & tmat3x2<T, P>::operator/=(U s)
+ {
+ this->value[0] /= s;
+ this->value[1] /= s;
+ this->value[2] /= s;
+ return *this;
+ }
+
+ // -- Increment and decrement operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x2<T, P>& tmat3x2<T, P>::operator++()
+ {
+ ++this->value[0];
+ ++this->value[1];
+ ++this->value[2];
+ return *this;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x2<T, P>& tmat3x2<T, P>::operator--()
+ {
+ --this->value[0];
+ --this->value[1];
+ --this->value[2];
+ return *this;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x2<T, P> tmat3x2<T, P>::operator++(int)
+ {
+ tmat3x2<T, P> Result(*this);
+ ++*this;
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x2<T, P> tmat3x2<T, P>::operator--(int)
+ {
+ tmat3x2<T, P> Result(*this);
+ --*this;
+ return Result;
+ }
+
+ // -- Unary arithmetic operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x2<T, P> operator+(tmat3x2<T, P> const & m)
+ {
+ return m;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x2<T, P> operator-(tmat3x2<T, P> const & m)
+ {
+ return tmat3x2<T, P>(
+ -m[0],
+ -m[1],
+ -m[2]);
+ }
+
+ // -- Binary arithmetic operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x2<T, P> operator+(tmat3x2<T, P> const & m, T scalar)
+ {
+ return tmat3x2<T, P>(
+ m[0] + scalar,
+ m[1] + scalar,
+ m[2] + scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x2<T, P> operator+(tmat3x2<T, P> const & m1, tmat3x2<T, P> const & m2)
+ {
+ return tmat3x2<T, P>(
+ m1[0] + m2[0],
+ m1[1] + m2[1],
+ m1[2] + m2[2]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x2<T, P> operator-(tmat3x2<T, P> const & m, T scalar)
+ {
+ return tmat3x2<T, P>(
+ m[0] - scalar,
+ m[1] - scalar,
+ m[2] - scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x2<T, P> operator-(tmat3x2<T, P> const & m1, tmat3x2<T, P> const & m2)
+ {
+ return tmat3x2<T, P>(
+ m1[0] - m2[0],
+ m1[1] - m2[1],
+ m1[2] - m2[2]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x2<T, P> operator*(tmat3x2<T, P> const & m, T scalar)
+ {
+ return tmat3x2<T, P>(
+ m[0] * scalar,
+ m[1] * scalar,
+ m[2] * scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x2<T, P> operator*(T scalar, tmat3x2<T, P> const & m)
+ {
+ return tmat3x2<T, P>(
+ m[0] * scalar,
+ m[1] * scalar,
+ m[2] * scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER typename tmat3x2<T, P>::col_type operator*(tmat3x2<T, P> const & m, typename tmat3x2<T, P>::row_type const & v)
+ {
+ return typename tmat3x2<T, P>::col_type(
+ m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z,
+ m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER typename tmat3x2<T, P>::row_type operator*(typename tmat3x2<T, P>::col_type const & v, tmat3x2<T, P> const & m)
+ {
+ return typename tmat3x2<T, P>::row_type(
+ v.x * m[0][0] + v.y * m[0][1],
+ v.x * m[1][0] + v.y * m[1][1],
+ v.x * m[2][0] + v.y * m[2][1]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P> operator*(tmat3x2<T, P> const & m1, tmat2x3<T, P> const & m2)
+ {
+ const T SrcA00 = m1[0][0];
+ const T SrcA01 = m1[0][1];
+ const T SrcA10 = m1[1][0];
+ const T SrcA11 = m1[1][1];
+ const T SrcA20 = m1[2][0];
+ const T SrcA21 = m1[2][1];
+
+ const T SrcB00 = m2[0][0];
+ const T SrcB01 = m2[0][1];
+ const T SrcB02 = m2[0][2];
+ const T SrcB10 = m2[1][0];
+ const T SrcB11 = m2[1][1];
+ const T SrcB12 = m2[1][2];
+
+ tmat2x2<T, P> Result(uninitialize);
+ Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02;
+ Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02;
+ Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12;
+ Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11 + SrcA21 * SrcB12;
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x2<T, P> operator*(tmat3x2<T, P> const & m1, tmat3x3<T, P> const & m2)
+ {
+ return tmat3x2<T, P>(
+ m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2],
+ m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2],
+ m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2],
+ m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2],
+ m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2],
+ m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x2<T, P> operator*(tmat3x2<T, P> const & m1, tmat4x3<T, P> const & m2)
+ {
+ return tmat4x2<T, P>(
+ m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2],
+ m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2],
+ m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2],
+ m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2],
+ m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2],
+ m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2],
+ m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1] + m1[2][0] * m2[3][2],
+ m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1] + m1[2][1] * m2[3][2]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x2<T, P> operator/(tmat3x2<T, P> const & m, T scalar)
+ {
+ return tmat3x2<T, P>(
+ m[0] / scalar,
+ m[1] / scalar,
+ m[2] / scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x2<T, P> operator/(T scalar, tmat3x2<T, P> const & m)
+ {
+ return tmat3x2<T, P>(
+ scalar / m[0],
+ scalar / m[1],
+ scalar / m[2]);
+ }
+
+ // -- Boolean operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER bool operator==(tmat3x2<T, P> const & m1, tmat3x2<T, P> const & m2)
+ {
+ return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER bool operator!=(tmat3x2<T, P> const & m1, tmat3x2<T, P> const & m2)
+ {
+ return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]);
+ }
+} //namespace glm
diff --git a/src/third_party/glm/glm/detail/type_mat3x3.hpp b/src/third_party/glm/glm/detail/type_mat3x3.hpp
new file mode 100644
index 0000000..25e3a49
--- /dev/null
+++ b/src/third_party/glm/glm/detail/type_mat3x3.hpp
@@ -0,0 +1,190 @@
+/// @ref core
+/// @file glm/detail/type_mat3x3.hpp
+
+#pragma once
+
+#include "../fwd.hpp"
+#include "type_vec3.hpp"
+#include "type_mat.hpp"
+#include <limits>
+#include <cstddef>
+
+namespace glm
+{
+ template <typename T, precision P = defaultp>
+ struct tmat3x3
+ {
+ typedef tvec3<T, P> col_type;
+ typedef tvec3<T, P> row_type;
+ typedef tmat3x3<T, P> type;
+ typedef tmat3x3<T, P> transpose_type;
+ typedef T value_type;
+
+ private:
+ col_type value[3];
+
+ public:
+ // -- Constructors --
+
+ GLM_FUNC_DECL tmat3x3() GLM_DEFAULT_CTOR;
+ GLM_FUNC_DECL tmat3x3(tmat3x3<T, P> const & m) GLM_DEFAULT;
+ template <precision Q>
+ GLM_FUNC_DECL tmat3x3(tmat3x3<T, Q> const & m);
+
+ GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tmat3x3(ctor);
+ GLM_FUNC_DECL explicit tmat3x3(T scalar);
+ GLM_FUNC_DECL tmat3x3(
+ T x0, T y0, T z0,
+ T x1, T y1, T z1,
+ T x2, T y2, T z2);
+ GLM_FUNC_DECL tmat3x3(
+ col_type const & v0,
+ col_type const & v1,
+ col_type const & v2);
+
+ // -- Conversions --
+
+ template<
+ typename X1, typename Y1, typename Z1,
+ typename X2, typename Y2, typename Z2,
+ typename X3, typename Y3, typename Z3>
+ GLM_FUNC_DECL tmat3x3(
+ X1 x1, Y1 y1, Z1 z1,
+ X2 x2, Y2 y2, Z2 z2,
+ X3 x3, Y3 y3, Z3 z3);
+
+ template <typename V1, typename V2, typename V3>
+ GLM_FUNC_DECL tmat3x3(
+ tvec3<V1, P> const & v1,
+ tvec3<V2, P> const & v2,
+ tvec3<V3, P> const & v3);
+
+ // -- Matrix conversions --
+
+ template <typename U, precision Q>
+ GLM_FUNC_DECL GLM_EXPLICIT tmat3x3(tmat3x3<U, Q> const & m);
+
+ GLM_FUNC_DECL GLM_EXPLICIT tmat3x3(tmat2x2<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat3x3(tmat4x4<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat3x3(tmat2x3<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat3x3(tmat3x2<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat3x3(tmat2x4<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat3x3(tmat4x2<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat3x3(tmat3x4<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat3x3(tmat4x3<T, P> const & x);
+
+ // -- Accesses --
+
+ typedef length_t length_type;
+ GLM_FUNC_DECL GLM_CONSTEXPR length_type length() const;
+
+ GLM_FUNC_DECL col_type & operator[](length_type i);
+ GLM_FUNC_DECL col_type const & operator[](length_type i) const;
+
+ // -- Unary arithmetic operators --
+
+ GLM_FUNC_DECL tmat3x3<T, P> & operator=(tmat3x3<T, P> const & m) GLM_DEFAULT;
+
+ template <typename U>
+ GLM_FUNC_DECL tmat3x3<T, P> & operator=(tmat3x3<U, P> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat3x3<T, P> & operator+=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat3x3<T, P> & operator+=(tmat3x3<U, P> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat3x3<T, P> & operator-=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat3x3<T, P> & operator-=(tmat3x3<U, P> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat3x3<T, P> & operator*=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat3x3<T, P> & operator*=(tmat3x3<U, P> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat3x3<T, P> & operator/=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat3x3<T, P> & operator/=(tmat3x3<U, P> const & m);
+
+ // -- Increment and decrement operators --
+
+ GLM_FUNC_DECL tmat3x3<T, P> & operator++();
+ GLM_FUNC_DECL tmat3x3<T, P> & operator--();
+ GLM_FUNC_DECL tmat3x3<T, P> operator++(int);
+ GLM_FUNC_DECL tmat3x3<T, P> operator--(int);
+ };
+
+ // -- Unary operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x3<T, P> operator+(tmat3x3<T, P> const & m);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x3<T, P> operator-(tmat3x3<T, P> const & m);
+
+ // -- Binary operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x3<T, P> operator+(tmat3x3<T, P> const & m, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x3<T, P> operator+(T scalar, tmat3x3<T, P> const & m);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x3<T, P> operator+(tmat3x3<T, P> const & m1, tmat3x3<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x3<T, P> operator-(tmat3x3<T, P> const & m, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x3<T, P> operator-(T scalar, tmat3x3<T, P> const & m);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x3<T, P> operator-(tmat3x3<T, P> const & m1, tmat3x3<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x3<T, P> operator*(tmat3x3<T, P> const & m, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x3<T, P> operator*(T scalar, tmat3x3<T, P> const & m);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL typename tmat3x3<T, P>::col_type operator*(tmat3x3<T, P> const & m, typename tmat3x3<T, P>::row_type const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL typename tmat3x3<T, P>::row_type operator*(typename tmat3x3<T, P>::col_type const & v, tmat3x3<T, P> const & m);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x3<T, P> operator*(tmat3x3<T, P> const & m1, tmat3x3<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat2x3<T, P> operator*(tmat3x3<T, P> const & m1, tmat2x3<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x3<T, P> operator*(tmat3x3<T, P> const & m1, tmat4x3<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x3<T, P> operator/(tmat3x3<T, P> const & m, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x3<T, P> operator/(T scalar, tmat3x3<T, P> const & m);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL typename tmat3x3<T, P>::col_type operator/(tmat3x3<T, P> const & m, typename tmat3x3<T, P>::row_type const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL typename tmat3x3<T, P>::row_type operator/(typename tmat3x3<T, P>::col_type const & v, tmat3x3<T, P> const & m);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x3<T, P> operator/(tmat3x3<T, P> const & m1, tmat3x3<T, P> const & m2);
+
+ // -- Boolean operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL bool operator==(tmat3x3<T, P> const & m1, tmat3x3<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL bool operator!=(tmat3x3<T, P> const & m1, tmat3x3<T, P> const & m2);
+}//namespace glm
+
+#ifndef GLM_EXTERNAL_TEMPLATE
+#include "type_mat3x3.inl"
+#endif
diff --git a/src/third_party/glm/glm/detail/type_mat3x3.inl b/src/third_party/glm/glm/detail/type_mat3x3.inl
new file mode 100644
index 0000000..aec8e19
--- /dev/null
+++ b/src/third_party/glm/glm/detail/type_mat3x3.inl
@@ -0,0 +1,567 @@
+/// @ref core
+/// @file glm/detail/type_mat3x3.inl
+
+#include "func_matrix.hpp"
+
+namespace glm
+{
+ // -- Constructors --
+
+# if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT)
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P>::tmat3x3()
+ {
+# ifndef GLM_FORCE_NO_CTOR_INIT
+ this->value[0] = col_type(1, 0, 0);
+ this->value[1] = col_type(0, 1, 0);
+ this->value[2] = col_type(0, 0, 1);
+# endif
+ }
+# endif
+
+# if !GLM_HAS_DEFAULTED_FUNCTIONS
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P>::tmat3x3(tmat3x3<T, P> const & m)
+ {
+ this->value[0] = m.value[0];
+ this->value[1] = m.value[1];
+ this->value[2] = m.value[2];
+ }
+# endif//!GLM_HAS_DEFAULTED_FUNCTIONS
+
+ template <typename T, precision P>
+ template <precision Q>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P>::tmat3x3(tmat3x3<T, Q> const & m)
+ {
+ this->value[0] = m.value[0];
+ this->value[1] = m.value[1];
+ this->value[2] = m.value[2];
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tmat3x3<T, P>::tmat3x3(ctor)
+ {}
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P>::tmat3x3(T scalar)
+ {
+ this->value[0] = col_type(scalar, 0, 0);
+ this->value[1] = col_type(0, scalar, 0);
+ this->value[2] = col_type(0, 0, scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P>::tmat3x3
+ (
+ T x0, T y0, T z0,
+ T x1, T y1, T z1,
+ T x2, T y2, T z2
+ )
+ {
+ this->value[0] = col_type(x0, y0, z0);
+ this->value[1] = col_type(x1, y1, z1);
+ this->value[2] = col_type(x2, y2, z2);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P>::tmat3x3
+ (
+ col_type const & v0,
+ col_type const & v1,
+ col_type const & v2
+ )
+ {
+ this->value[0] = v0;
+ this->value[1] = v1;
+ this->value[2] = v2;
+ }
+
+ // -- Conversion constructors --
+
+ template <typename T, precision P>
+ template <
+ typename X1, typename Y1, typename Z1,
+ typename X2, typename Y2, typename Z2,
+ typename X3, typename Y3, typename Z3>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P>::tmat3x3
+ (
+ X1 x1, Y1 y1, Z1 z1,
+ X2 x2, Y2 y2, Z2 z2,
+ X3 x3, Y3 y3, Z3 z3
+ )
+ {
+ this->value[0] = col_type(static_cast<T>(x1), value_type(y1), value_type(z1));
+ this->value[1] = col_type(static_cast<T>(x2), value_type(y2), value_type(z2));
+ this->value[2] = col_type(static_cast<T>(x3), value_type(y3), value_type(z3));
+ }
+
+ template <typename T, precision P>
+ template <typename V1, typename V2, typename V3>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P>::tmat3x3
+ (
+ tvec3<V1, P> const & v1,
+ tvec3<V2, P> const & v2,
+ tvec3<V3, P> const & v3
+ )
+ {
+ this->value[0] = col_type(v1);
+ this->value[1] = col_type(v2);
+ this->value[2] = col_type(v3);
+ }
+
+ // -- Matrix conversions --
+
+ template <typename T, precision P>
+ template <typename U, precision Q>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P>::tmat3x3(tmat3x3<U, Q> const & m)
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(m[2]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P>::tmat3x3(tmat2x2<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0], 0);
+ this->value[1] = col_type(m[1], 0);
+ this->value[2] = col_type(0, 0, 1);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P>::tmat3x3(tmat4x4<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(m[2]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P>::tmat3x3(tmat2x3<T, P> const & m)
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ this->value[2] = col_type(0, 0, 1);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P>::tmat3x3(tmat3x2<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0], 0);
+ this->value[1] = col_type(m[1], 0);
+ this->value[2] = col_type(m[2], 1);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P>::tmat3x3(tmat2x4<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(0, 0, 1);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P>::tmat3x3(tmat4x2<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0], 0);
+ this->value[1] = col_type(m[1], 0);
+ this->value[2] = col_type(m[2], 1);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P>::tmat3x3(tmat3x4<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(m[2]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P>::tmat3x3(tmat4x3<T, P> const & m)
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ this->value[2] = m[2];
+ }
+
+ // -- Accesses --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tmat3x3<T, P>::length_type tmat3x3<T, P>::length() const
+ {
+ return 3;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER typename tmat3x3<T, P>::col_type & tmat3x3<T, P>::operator[](typename tmat3x3<T, P>::length_type i)
+ {
+ assert(i < this->length());
+ return this->value[i];
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER typename tmat3x3<T, P>::col_type const & tmat3x3<T, P>::operator[](typename tmat3x3<T, P>::length_type i) const
+ {
+ assert(i < this->length());
+ return this->value[i];
+ }
+
+ // -- Unary updatable operators --
+
+# if !GLM_HAS_DEFAULTED_FUNCTIONS
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> & tmat3x3<T, P>::operator=(tmat3x3<T, P> const & m)
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ this->value[2] = m[2];
+ return *this;
+ }
+# endif//!GLM_HAS_DEFAULTED_FUNCTIONS
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> & tmat3x3<T, P>::operator=(tmat3x3<U, P> const & m)
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ this->value[2] = m[2];
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> & tmat3x3<T, P>::operator+=(U s)
+ {
+ this->value[0] += s;
+ this->value[1] += s;
+ this->value[2] += s;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> & tmat3x3<T, P>::operator+=(tmat3x3<U, P> const & m)
+ {
+ this->value[0] += m[0];
+ this->value[1] += m[1];
+ this->value[2] += m[2];
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> & tmat3x3<T, P>::operator-=(U s)
+ {
+ this->value[0] -= s;
+ this->value[1] -= s;
+ this->value[2] -= s;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> & tmat3x3<T, P>::operator-=(tmat3x3<U, P> const & m)
+ {
+ this->value[0] -= m[0];
+ this->value[1] -= m[1];
+ this->value[2] -= m[2];
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> & tmat3x3<T, P>::operator*=(U s)
+ {
+ this->value[0] *= s;
+ this->value[1] *= s;
+ this->value[2] *= s;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> & tmat3x3<T, P>::operator*=(tmat3x3<U, P> const & m)
+ {
+ return (*this = *this * m);
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> & tmat3x3<T, P>::operator/=(U s)
+ {
+ this->value[0] /= s;
+ this->value[1] /= s;
+ this->value[2] /= s;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> & tmat3x3<T, P>::operator/=(tmat3x3<U, P> const & m)
+ {
+ return *this *= inverse(m);
+ }
+
+ // -- Increment and decrement operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> & tmat3x3<T, P>::operator++()
+ {
+ ++this->value[0];
+ ++this->value[1];
+ ++this->value[2];
+ return *this;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> & tmat3x3<T, P>::operator--()
+ {
+ --this->value[0];
+ --this->value[1];
+ --this->value[2];
+ return *this;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> tmat3x3<T, P>::operator++(int)
+ {
+ tmat3x3<T, P> Result(*this);
+ ++*this;
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> tmat3x3<T, P>::operator--(int)
+ {
+ tmat3x3<T, P> Result(*this);
+ --*this;
+ return Result;
+ }
+
+ // -- Unary arithmetic operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> operator+(tmat3x3<T, P> const & m)
+ {
+ return m;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> operator-(tmat3x3<T, P> const & m)
+ {
+ return tmat3x3<T, P>(
+ -m[0],
+ -m[1],
+ -m[2]);
+ }
+
+ // -- Binary arithmetic operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> operator+(tmat3x3<T, P> const & m, T scalar)
+ {
+ return tmat3x3<T, P>(
+ m[0] + scalar,
+ m[1] + scalar,
+ m[2] + scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> operator+(T scalar, tmat3x3<T, P> const & m)
+ {
+ return tmat3x3<T, P>(
+ m[0] + scalar,
+ m[1] + scalar,
+ m[2] + scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> operator+(tmat3x3<T, P> const & m1, tmat3x3<T, P> const & m2)
+ {
+ return tmat3x3<T, P>(
+ m1[0] + m2[0],
+ m1[1] + m2[1],
+ m1[2] + m2[2]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> operator-(tmat3x3<T, P> const & m, T scalar)
+ {
+ return tmat3x3<T, P>(
+ m[0] - scalar,
+ m[1] - scalar,
+ m[2] - scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> operator-(T scalar, tmat3x3<T, P> const & m)
+ {
+ return tmat3x3<T, P>(
+ scalar - m[0],
+ scalar - m[1],
+ scalar - m[2]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> operator-(tmat3x3<T, P> const & m1, tmat3x3<T, P> const & m2)
+ {
+ return tmat3x3<T, P>(
+ m1[0] - m2[0],
+ m1[1] - m2[1],
+ m1[2] - m2[2]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> operator*(tmat3x3<T, P> const & m, T scalar)
+ {
+ return tmat3x3<T, P>(
+ m[0] * scalar,
+ m[1] * scalar,
+ m[2] * scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> operator*(T scalar, tmat3x3<T, P> const & m)
+ {
+ return tmat3x3<T, P>(
+ m[0] * scalar,
+ m[1] * scalar,
+ m[2] * scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER typename tmat3x3<T, P>::col_type operator*(tmat3x3<T, P> const & m, typename tmat3x3<T, P>::row_type const & v)
+ {
+ return typename tmat3x3<T, P>::col_type(
+ m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z,
+ m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z,
+ m[0][2] * v.x + m[1][2] * v.y + m[2][2] * v.z);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER typename tmat3x3<T, P>::row_type operator*(typename tmat3x3<T, P>::col_type const & v, tmat3x3<T, P> const & m)
+ {
+ return typename tmat3x3<T, P>::row_type(
+ m[0][0] * v.x + m[0][1] * v.y + m[0][2] * v.z,
+ m[1][0] * v.x + m[1][1] * v.y + m[1][2] * v.z,
+ m[2][0] * v.x + m[2][1] * v.y + m[2][2] * v.z);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> operator*(tmat3x3<T, P> const & m1, tmat3x3<T, P> const & m2)
+ {
+ T const SrcA00 = m1[0][0];
+ T const SrcA01 = m1[0][1];
+ T const SrcA02 = m1[0][2];
+ T const SrcA10 = m1[1][0];
+ T const SrcA11 = m1[1][1];
+ T const SrcA12 = m1[1][2];
+ T const SrcA20 = m1[2][0];
+ T const SrcA21 = m1[2][1];
+ T const SrcA22 = m1[2][2];
+
+ T const SrcB00 = m2[0][0];
+ T const SrcB01 = m2[0][1];
+ T const SrcB02 = m2[0][2];
+ T const SrcB10 = m2[1][0];
+ T const SrcB11 = m2[1][1];
+ T const SrcB12 = m2[1][2];
+ T const SrcB20 = m2[2][0];
+ T const SrcB21 = m2[2][1];
+ T const SrcB22 = m2[2][2];
+
+ tmat3x3<T, P> Result(uninitialize);
+ Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02;
+ Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02;
+ Result[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01 + SrcA22 * SrcB02;
+ Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12;
+ Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11 + SrcA21 * SrcB12;
+ Result[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11 + SrcA22 * SrcB12;
+ Result[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21 + SrcA20 * SrcB22;
+ Result[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21 + SrcA21 * SrcB22;
+ Result[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21 + SrcA22 * SrcB22;
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x3<T, P> operator*(tmat3x3<T, P> const & m1, tmat2x3<T, P> const & m2)
+ {
+ return tmat2x3<T, P>(
+ m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2],
+ m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2],
+ m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2],
+ m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2],
+ m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2],
+ m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x3<T, P> operator*(tmat3x3<T, P> const & m1, tmat4x3<T, P> const & m2)
+ {
+ return tmat4x3<T, P>(
+ m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2],
+ m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2],
+ m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2],
+ m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2],
+ m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2],
+ m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2],
+ m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2],
+ m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2],
+ m1[0][2] * m2[2][0] + m1[1][2] * m2[2][1] + m1[2][2] * m2[2][2],
+ m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1] + m1[2][0] * m2[3][2],
+ m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1] + m1[2][1] * m2[3][2],
+ m1[0][2] * m2[3][0] + m1[1][2] * m2[3][1] + m1[2][2] * m2[3][2]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> operator/(tmat3x3<T, P> const & m, T scalar)
+ {
+ return tmat3x3<T, P>(
+ m[0] / scalar,
+ m[1] / scalar,
+ m[2] / scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> operator/(T scalar, tmat3x3<T, P> const & m)
+ {
+ return tmat3x3<T, P>(
+ scalar / m[0],
+ scalar / m[1],
+ scalar / m[2]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER typename tmat3x3<T, P>::col_type operator/(tmat3x3<T, P> const & m, typename tmat3x3<T, P>::row_type const & v)
+ {
+ return inverse(m) * v;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER typename tmat3x3<T, P>::row_type operator/(typename tmat3x3<T, P>::col_type const & v, tmat3x3<T, P> const & m)
+ {
+ return v * inverse(m);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> operator/(tmat3x3<T, P> const & m1, tmat3x3<T, P> const & m2)
+ {
+ tmat3x3<T, P> m1_copy(m1);
+ return m1_copy /= m2;
+ }
+
+ // -- Boolean operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER bool operator==(tmat3x3<T, P> const & m1, tmat3x3<T, P> const & m2)
+ {
+ return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER bool operator!=(tmat3x3<T, P> const & m1, tmat3x3<T, P> const & m2)
+ {
+ return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]);
+ }
+} //namespace glm
diff --git a/src/third_party/glm/glm/detail/type_mat3x4.hpp b/src/third_party/glm/glm/detail/type_mat3x4.hpp
new file mode 100644
index 0000000..76e7169
--- /dev/null
+++ b/src/third_party/glm/glm/detail/type_mat3x4.hpp
@@ -0,0 +1,172 @@
+/// @ref core
+/// @file glm/detail/type_mat3x4.hpp
+
+#pragma once
+
+#include "../fwd.hpp"
+#include "type_vec3.hpp"
+#include "type_vec4.hpp"
+#include "type_mat.hpp"
+#include <limits>
+#include <cstddef>
+
+namespace glm
+{
+ template <typename T, precision P = defaultp>
+ struct tmat3x4
+ {
+ typedef tvec4<T, P> col_type;
+ typedef tvec3<T, P> row_type;
+ typedef tmat3x4<T, P> type;
+ typedef tmat4x3<T, P> transpose_type;
+ typedef T value_type;
+
+ private:
+ col_type value[3];
+
+ public:
+ // -- Constructors --
+
+ GLM_FUNC_DECL tmat3x4() GLM_DEFAULT_CTOR;
+ GLM_FUNC_DECL tmat3x4(tmat3x4<T, P> const & m) GLM_DEFAULT;
+ template <precision Q>
+ GLM_FUNC_DECL tmat3x4(tmat3x4<T, Q> const & m);
+
+ GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tmat3x4(ctor);
+ GLM_FUNC_DECL explicit tmat3x4(T scalar);
+ GLM_FUNC_DECL tmat3x4(
+ T x0, T y0, T z0, T w0,
+ T x1, T y1, T z1, T w1,
+ T x2, T y2, T z2, T w2);
+ GLM_FUNC_DECL tmat3x4(
+ col_type const & v0,
+ col_type const & v1,
+ col_type const & v2);
+
+ // -- Conversions --
+
+ template<
+ typename X1, typename Y1, typename Z1, typename W1,
+ typename X2, typename Y2, typename Z2, typename W2,
+ typename X3, typename Y3, typename Z3, typename W3>
+ GLM_FUNC_DECL tmat3x4(
+ X1 x1, Y1 y1, Z1 z1, W1 w1,
+ X2 x2, Y2 y2, Z2 z2, W2 w2,
+ X3 x3, Y3 y3, Z3 z3, W3 w3);
+
+ template <typename V1, typename V2, typename V3>
+ GLM_FUNC_DECL tmat3x4(
+ tvec4<V1, P> const & v1,
+ tvec4<V2, P> const & v2,
+ tvec4<V3, P> const & v3);
+
+ // -- Matrix conversions --
+
+ template <typename U, precision Q>
+ GLM_FUNC_DECL GLM_EXPLICIT tmat3x4(tmat3x4<U, Q> const & m);
+
+ GLM_FUNC_DECL GLM_EXPLICIT tmat3x4(tmat2x2<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat3x4(tmat3x3<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat3x4(tmat4x4<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat3x4(tmat2x3<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat3x4(tmat3x2<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat3x4(tmat2x4<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat3x4(tmat4x2<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat3x4(tmat4x3<T, P> const & x);
+
+ // -- Accesses --
+
+ typedef length_t length_type;
+ GLM_FUNC_DECL GLM_CONSTEXPR length_type length() const;
+
+ GLM_FUNC_DECL col_type & operator[](length_type i);
+ GLM_FUNC_DECL col_type const & operator[](length_type i) const;
+
+ // -- Unary arithmetic operators --
+
+ GLM_FUNC_DECL tmat3x4<T, P> & operator=(tmat3x4<T, P> const & m) GLM_DEFAULT;
+
+ template <typename U>
+ GLM_FUNC_DECL tmat3x4<T, P> & operator=(tmat3x4<U, P> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat3x4<T, P> & operator+=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat3x4<T, P> & operator+=(tmat3x4<U, P> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat3x4<T, P> & operator-=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat3x4<T, P> & operator-=(tmat3x4<U, P> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat3x4<T, P> & operator*=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat3x4<T, P> & operator/=(U s);
+
+ // -- Increment and decrement operators --
+
+ GLM_FUNC_DECL tmat3x4<T, P> & operator++();
+ GLM_FUNC_DECL tmat3x4<T, P> & operator--();
+ GLM_FUNC_DECL tmat3x4<T, P> operator++(int);
+ GLM_FUNC_DECL tmat3x4<T, P> operator--(int);
+ };
+
+ // -- Unary operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x4<T, P> operator+(tmat3x4<T, P> const & m);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x4<T, P> operator-(tmat3x4<T, P> const & m);
+
+ // -- Binary operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x4<T, P> operator+(tmat3x4<T, P> const & m, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x4<T, P> operator+(tmat3x4<T, P> const & m1, tmat3x4<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x4<T, P> operator-(tmat3x4<T, P> const & m, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x4<T, P> operator-(tmat3x4<T, P> const & m1, tmat3x4<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x4<T, P> operator*(tmat3x4<T, P> const & m, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x4<T, P> operator*(T scalar, tmat3x4<T, P> const & m);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL typename tmat3x4<T, P>::col_type operator*(tmat3x4<T, P> const & m, typename tmat3x4<T, P>::row_type const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL typename tmat3x4<T, P>::row_type operator*(typename tmat3x4<T, P>::col_type const & v, tmat3x4<T, P> const & m);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x4<T, P> operator*(tmat3x4<T, P> const & m1, tmat4x3<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat2x4<T, P> operator*(tmat3x4<T, P> const & m1, tmat2x3<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x4<T, P> operator*(tmat3x4<T, P> const & m1, tmat3x3<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x4<T, P> operator/(tmat3x4<T, P> const & m, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x4<T, P> operator/(T scalar, tmat3x4<T, P> const & m);
+
+ // -- Boolean operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL bool operator==(tmat3x4<T, P> const & m1, tmat3x4<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL bool operator!=(tmat3x4<T, P> const & m1, tmat3x4<T, P> const & m2);
+}//namespace glm
+
+#ifndef GLM_EXTERNAL_TEMPLATE
+#include "type_mat3x4.inl"
+#endif
diff --git a/src/third_party/glm/glm/detail/type_mat3x4.inl b/src/third_party/glm/glm/detail/type_mat3x4.inl
new file mode 100644
index 0000000..7f55e9a
--- /dev/null
+++ b/src/third_party/glm/glm/detail/type_mat3x4.inl
@@ -0,0 +1,538 @@
+/// @ref core
+/// @file glm/detail/type_mat3x4.inl
+
+namespace glm
+{
+ // -- Constructors --
+
+# if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT)
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x4<T, P>::tmat3x4()
+ {
+# ifndef GLM_FORCE_NO_CTOR_INIT
+ this->value[0] = col_type(1, 0, 0, 0);
+ this->value[1] = col_type(0, 1, 0, 0);
+ this->value[2] = col_type(0, 0, 1, 0);
+# endif
+ }
+# endif
+
+# if !GLM_HAS_DEFAULTED_FUNCTIONS
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x4<T, P>::tmat3x4(tmat3x4<T, P> const & m)
+ {
+ this->value[0] = m.value[0];
+ this->value[1] = m.value[1];
+ this->value[2] = m.value[2];
+ }
+# endif//!GLM_HAS_DEFAULTED_FUNCTIONS
+
+ template <typename T, precision P>
+ template <precision Q>
+ GLM_FUNC_QUALIFIER tmat3x4<T, P>::tmat3x4(tmat3x4<T, Q> const & m)
+ {
+ this->value[0] = m.value[0];
+ this->value[1] = m.value[1];
+ this->value[2] = m.value[2];
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tmat3x4<T, P>::tmat3x4(ctor)
+ {}
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x4<T, P>::tmat3x4(T scalar)
+ {
+ this->value[0] = col_type(scalar, 0, 0, 0);
+ this->value[1] = col_type(0, scalar, 0, 0);
+ this->value[2] = col_type(0, 0, scalar, 0);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x4<T, P>::tmat3x4
+ (
+ T x0, T y0, T z0, T w0,
+ T x1, T y1, T z1, T w1,
+ T x2, T y2, T z2, T w2
+ )
+ {
+ this->value[0] = col_type(x0, y0, z0, w0);
+ this->value[1] = col_type(x1, y1, z1, w1);
+ this->value[2] = col_type(x2, y2, z2, w2);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x4<T, P>::tmat3x4
+ (
+ col_type const & v0,
+ col_type const & v1,
+ col_type const & v2
+ )
+ {
+ this->value[0] = v0;
+ this->value[1] = v1;
+ this->value[2] = v2;
+ }
+
+ // -- Conversion constructors --
+
+ template <typename T, precision P>
+ template <
+ typename X1, typename Y1, typename Z1, typename W1,
+ typename X2, typename Y2, typename Z2, typename W2,
+ typename X3, typename Y3, typename Z3, typename W3>
+ GLM_FUNC_QUALIFIER tmat3x4<T, P>::tmat3x4
+ (
+ X1 x1, Y1 y1, Z1 z1, W1 w1,
+ X2 x2, Y2 y2, Z2 z2, W2 w2,
+ X3 x3, Y3 y3, Z3 z3, W3 w3
+ )
+ {
+ this->value[0] = col_type(static_cast<T>(x1), value_type(y1), value_type(z1), value_type(w1));
+ this->value[1] = col_type(static_cast<T>(x2), value_type(y2), value_type(z2), value_type(w2));
+ this->value[2] = col_type(static_cast<T>(x3), value_type(y3), value_type(z3), value_type(w3));
+ }
+
+ template <typename T, precision P>
+ template <typename V1, typename V2, typename V3>
+ GLM_FUNC_QUALIFIER tmat3x4<T, P>::tmat3x4
+ (
+ tvec4<V1, P> const & v1,
+ tvec4<V2, P> const & v2,
+ tvec4<V3, P> const & v3
+ )
+ {
+ this->value[0] = col_type(v1);
+ this->value[1] = col_type(v2);
+ this->value[2] = col_type(v3);
+ }
+
+ // -- Matrix conversions --
+
+ template <typename T, precision P>
+ template <typename U, precision Q>
+ GLM_FUNC_QUALIFIER tmat3x4<T, P>::tmat3x4(tmat3x4<U, Q> const & m)
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(m[2]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x4<T, P>::tmat3x4(tmat2x2<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0], 0, 0);
+ this->value[1] = col_type(m[1], 0, 0);
+ this->value[2] = col_type(0, 0, 1, 0);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x4<T, P>::tmat3x4(tmat3x3<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0], 0);
+ this->value[1] = col_type(m[1], 0);
+ this->value[2] = col_type(m[2], 0);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x4<T, P>::tmat3x4(tmat4x4<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(m[2]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x4<T, P>::tmat3x4(tmat2x3<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0], 0);
+ this->value[1] = col_type(m[1], 0);
+ this->value[2] = col_type(0, 0, 1, 0);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x4<T, P>::tmat3x4(tmat3x2<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0], 0, 0);
+ this->value[1] = col_type(m[1], 0, 0);
+ this->value[2] = col_type(m[2], 1, 0);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x4<T, P>::tmat3x4(tmat2x4<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(0, 0, 1, 0);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x4<T, P>::tmat3x4(tmat4x2<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0], 0, 0);
+ this->value[1] = col_type(m[1], 0, 0);
+ this->value[2] = col_type(m[2], 1, 0);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x4<T, P>::tmat3x4(tmat4x3<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0], 0);
+ this->value[1] = col_type(m[1], 0);
+ this->value[2] = col_type(m[2], 0);
+ }
+
+ // -- Accesses --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tmat3x4<T, P>::length_type tmat3x4<T, P>::length() const
+ {
+ return 3;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER typename tmat3x4<T, P>::col_type & tmat3x4<T, P>::operator[](typename tmat3x4<T, P>::length_type i)
+ {
+ assert(i < this->length());
+ return this->value[i];
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER typename tmat3x4<T, P>::col_type const & tmat3x4<T, P>::operator[](typename tmat3x4<T, P>::length_type i) const
+ {
+ assert(i < this->length());
+ return this->value[i];
+ }
+
+ // -- Unary updatable operators --
+
+# if !GLM_HAS_DEFAULTED_FUNCTIONS
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x4<T, P>& tmat3x4<T, P>::operator=(tmat3x4<T, P> const & m)
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ this->value[2] = m[2];
+ return *this;
+ }
+# endif//!GLM_HAS_DEFAULTED_FUNCTIONS
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x4<T, P>& tmat3x4<T, P>::operator=(tmat3x4<U, P> const & m)
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ this->value[2] = m[2];
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x4<T, P>& tmat3x4<T, P>::operator+=(U s)
+ {
+ this->value[0] += s;
+ this->value[1] += s;
+ this->value[2] += s;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x4<T, P>& tmat3x4<T, P>::operator+=(tmat3x4<U, P> const & m)
+ {
+ this->value[0] += m[0];
+ this->value[1] += m[1];
+ this->value[2] += m[2];
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x4<T, P>& tmat3x4<T, P>::operator-=(U s)
+ {
+ this->value[0] -= s;
+ this->value[1] -= s;
+ this->value[2] -= s;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x4<T, P>& tmat3x4<T, P>::operator-=(tmat3x4<U, P> const & m)
+ {
+ this->value[0] -= m[0];
+ this->value[1] -= m[1];
+ this->value[2] -= m[2];
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x4<T, P>& tmat3x4<T, P>::operator*=(U s)
+ {
+ this->value[0] *= s;
+ this->value[1] *= s;
+ this->value[2] *= s;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat3x4<T, P> & tmat3x4<T, P>::operator/=(U s)
+ {
+ this->value[0] /= s;
+ this->value[1] /= s;
+ this->value[2] /= s;
+ return *this;
+ }
+
+ // -- Increment and decrement operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x4<T, P>& tmat3x4<T, P>::operator++()
+ {
+ ++this->value[0];
+ ++this->value[1];
+ ++this->value[2];
+ return *this;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x4<T, P>& tmat3x4<T, P>::operator--()
+ {
+ --this->value[0];
+ --this->value[1];
+ --this->value[2];
+ return *this;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x4<T, P> tmat3x4<T, P>::operator++(int)
+ {
+ tmat3x4<T, P> Result(*this);
+ ++*this;
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x4<T, P> tmat3x4<T, P>::operator--(int)
+ {
+ tmat3x4<T, P> Result(*this);
+ --*this;
+ return Result;
+ }
+
+ // -- Unary arithmetic operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x4<T, P> operator+(tmat3x4<T, P> const & m)
+ {
+ return m;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x4<T, P> operator-(tmat3x4<T, P> const & m)
+ {
+ return tmat3x4<T, P>(
+ -m[0],
+ -m[1],
+ -m[2]);
+ }
+
+ // -- Binary arithmetic operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x4<T, P> operator+(tmat3x4<T, P> const & m, T scalar)
+ {
+ return tmat3x4<T, P>(
+ m[0] + scalar,
+ m[1] + scalar,
+ m[2] + scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x4<T, P> operator+(tmat3x4<T, P> const & m1, tmat3x4<T, P> const & m2)
+ {
+ return tmat3x4<T, P>(
+ m1[0] + m2[0],
+ m1[1] + m2[1],
+ m1[2] + m2[2]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x4<T, P> operator-(tmat3x4<T, P> const & m, T scalar)
+ {
+ return tmat3x4<T, P>(
+ m[0] - scalar,
+ m[1] - scalar,
+ m[2] - scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x4<T, P> operator-(tmat3x4<T, P> const & m1, tmat3x4<T, P> const & m2)
+ {
+ return tmat3x4<T, P>(
+ m1[0] - m2[0],
+ m1[1] - m2[1],
+ m1[2] - m2[2]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x4<T, P> operator*(tmat3x4<T, P> const & m, T scalar)
+ {
+ return tmat3x4<T, P>(
+ m[0] * scalar,
+ m[1] * scalar,
+ m[2] * scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x4<T, P> operator*(T scalar, tmat3x4<T, P> const & m)
+ {
+ return tmat3x4<T, P>(
+ m[0] * scalar,
+ m[1] * scalar,
+ m[2] * scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER typename tmat3x4<T, P>::col_type operator*
+ (
+ tmat3x4<T, P> const & m,
+ typename tmat3x4<T, P>::row_type const & v
+ )
+ {
+ return typename tmat3x4<T, P>::col_type(
+ m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z,
+ m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z,
+ m[0][2] * v.x + m[1][2] * v.y + m[2][2] * v.z,
+ m[0][3] * v.x + m[1][3] * v.y + m[2][3] * v.z);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER typename tmat3x4<T, P>::row_type operator*
+ (
+ typename tmat3x4<T, P>::col_type const & v,
+ tmat3x4<T, P> const & m
+ )
+ {
+ return typename tmat3x4<T, P>::row_type(
+ v.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2] + v.w * m[0][3],
+ v.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2] + v.w * m[1][3],
+ v.x * m[2][0] + v.y * m[2][1] + v.z * m[2][2] + v.w * m[2][3]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> operator*(tmat3x4<T, P> const & m1, tmat4x3<T, P> const & m2)
+ {
+ const T SrcA00 = m1[0][0];
+ const T SrcA01 = m1[0][1];
+ const T SrcA02 = m1[0][2];
+ const T SrcA03 = m1[0][3];
+ const T SrcA10 = m1[1][0];
+ const T SrcA11 = m1[1][1];
+ const T SrcA12 = m1[1][2];
+ const T SrcA13 = m1[1][3];
+ const T SrcA20 = m1[2][0];
+ const T SrcA21 = m1[2][1];
+ const T SrcA22 = m1[2][2];
+ const T SrcA23 = m1[2][3];
+
+ const T SrcB00 = m2[0][0];
+ const T SrcB01 = m2[0][1];
+ const T SrcB02 = m2[0][2];
+ const T SrcB10 = m2[1][0];
+ const T SrcB11 = m2[1][1];
+ const T SrcB12 = m2[1][2];
+ const T SrcB20 = m2[2][0];
+ const T SrcB21 = m2[2][1];
+ const T SrcB22 = m2[2][2];
+ const T SrcB30 = m2[3][0];
+ const T SrcB31 = m2[3][1];
+ const T SrcB32 = m2[3][2];
+
+ tmat4x4<T, P> Result(uninitialize);
+ Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02;
+ Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02;
+ Result[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01 + SrcA22 * SrcB02;
+ Result[0][3] = SrcA03 * SrcB00 + SrcA13 * SrcB01 + SrcA23 * SrcB02;
+ Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12;
+ Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11 + SrcA21 * SrcB12;
+ Result[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11 + SrcA22 * SrcB12;
+ Result[1][3] = SrcA03 * SrcB10 + SrcA13 * SrcB11 + SrcA23 * SrcB12;
+ Result[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21 + SrcA20 * SrcB22;
+ Result[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21 + SrcA21 * SrcB22;
+ Result[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21 + SrcA22 * SrcB22;
+ Result[2][3] = SrcA03 * SrcB20 + SrcA13 * SrcB21 + SrcA23 * SrcB22;
+ Result[3][0] = SrcA00 * SrcB30 + SrcA10 * SrcB31 + SrcA20 * SrcB32;
+ Result[3][1] = SrcA01 * SrcB30 + SrcA11 * SrcB31 + SrcA21 * SrcB32;
+ Result[3][2] = SrcA02 * SrcB30 + SrcA12 * SrcB31 + SrcA22 * SrcB32;
+ Result[3][3] = SrcA03 * SrcB30 + SrcA13 * SrcB31 + SrcA23 * SrcB32;
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x4<T, P> operator*(tmat3x4<T, P> const & m1, tmat2x3<T, P> const & m2)
+ {
+ return tmat2x4<T, P>(
+ m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2],
+ m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2],
+ m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2],
+ m1[0][3] * m2[0][0] + m1[1][3] * m2[0][1] + m1[2][3] * m2[0][2],
+ m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2],
+ m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2],
+ m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2],
+ m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1] + m1[2][3] * m2[1][2]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x4<T, P> operator*(tmat3x4<T, P> const & m1, tmat3x3<T, P> const & m2)
+ {
+ return tmat3x4<T, P>(
+ m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2],
+ m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2],
+ m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2],
+ m1[0][3] * m2[0][0] + m1[1][3] * m2[0][1] + m1[2][3] * m2[0][2],
+ m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2],
+ m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2],
+ m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2],
+ m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1] + m1[2][3] * m2[1][2],
+ m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2],
+ m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2],
+ m1[0][2] * m2[2][0] + m1[1][2] * m2[2][1] + m1[2][2] * m2[2][2],
+ m1[0][3] * m2[2][0] + m1[1][3] * m2[2][1] + m1[2][3] * m2[2][2]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x4<T, P> operator/(tmat3x4<T, P> const & m, T scalar)
+ {
+ return tmat3x4<T, P>(
+ m[0] / scalar,
+ m[1] / scalar,
+ m[2] / scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x4<T, P> operator/(T scalar, tmat3x4<T, P> const & m)
+ {
+ return tmat3x4<T, P>(
+ scalar / m[0],
+ scalar / m[1],
+ scalar / m[2]);
+ }
+
+ // -- Boolean operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER bool operator==(tmat3x4<T, P> const & m1, tmat3x4<T, P> const & m2)
+ {
+ return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER bool operator!=(tmat3x4<T, P> const & m1, tmat3x4<T, P> const & m2)
+ {
+ return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]);
+ }
+} //namespace glm
diff --git a/src/third_party/glm/glm/detail/type_mat4x2.hpp b/src/third_party/glm/glm/detail/type_mat4x2.hpp
new file mode 100644
index 0000000..53a5d07
--- /dev/null
+++ b/src/third_party/glm/glm/detail/type_mat4x2.hpp
@@ -0,0 +1,177 @@
+/// @ref core
+/// @file glm/detail/type_mat4x2.hpp
+
+#pragma once
+
+#include "../fwd.hpp"
+#include "type_vec2.hpp"
+#include "type_vec4.hpp"
+#include "type_mat.hpp"
+#include <limits>
+#include <cstddef>
+
+namespace glm
+{
+ template <typename T, precision P = defaultp>
+ struct tmat4x2
+ {
+ typedef tvec2<T, P> col_type;
+ typedef tvec4<T, P> row_type;
+ typedef tmat4x2<T, P> type;
+ typedef tmat2x4<T, P> transpose_type;
+ typedef T value_type;
+
+ private:
+ col_type value[4];
+
+ public:
+ // -- Constructors --
+
+ GLM_FUNC_DECL tmat4x2() GLM_DEFAULT_CTOR;
+ GLM_FUNC_DECL tmat4x2(tmat4x2<T, P> const & m) GLM_DEFAULT;
+ template <precision Q>
+ GLM_FUNC_DECL tmat4x2(tmat4x2<T, Q> const & m);
+
+ GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tmat4x2(ctor);
+ GLM_FUNC_DECL explicit tmat4x2(T scalar);
+ GLM_FUNC_DECL tmat4x2(
+ T x0, T y0,
+ T x1, T y1,
+ T x2, T y2,
+ T x3, T y3);
+ GLM_FUNC_DECL tmat4x2(
+ col_type const & v0,
+ col_type const & v1,
+ col_type const & v2,
+ col_type const & v3);
+
+ // -- Conversions --
+
+ template <
+ typename X1, typename Y1,
+ typename X2, typename Y2,
+ typename X3, typename Y3,
+ typename X4, typename Y4>
+ GLM_FUNC_DECL tmat4x2(
+ X1 x1, Y1 y1,
+ X2 x2, Y2 y2,
+ X3 x3, Y3 y3,
+ X4 x4, Y4 y4);
+
+ template <typename V1, typename V2, typename V3, typename V4>
+ GLM_FUNC_DECL tmat4x2(
+ tvec2<V1, P> const & v1,
+ tvec2<V2, P> const & v2,
+ tvec2<V3, P> const & v3,
+ tvec2<V4, P> const & v4);
+
+ // -- Matrix conversions --
+
+ template <typename U, precision Q>
+ GLM_FUNC_DECL GLM_EXPLICIT tmat4x2(tmat4x2<U, Q> const & m);
+
+ GLM_FUNC_DECL GLM_EXPLICIT tmat4x2(tmat2x2<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat4x2(tmat3x3<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat4x2(tmat4x4<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat4x2(tmat2x3<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat4x2(tmat3x2<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat4x2(tmat2x4<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat4x2(tmat4x3<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat4x2(tmat3x4<T, P> const & x);
+
+ // -- Accesses --
+
+ typedef length_t length_type;
+ GLM_FUNC_DECL GLM_CONSTEXPR length_type length() const;
+
+ GLM_FUNC_DECL col_type & operator[](length_type i);
+ GLM_FUNC_DECL col_type const & operator[](length_type i) const;
+
+ // -- Unary arithmetic operators --
+
+ GLM_FUNC_DECL tmat4x2<T, P> & operator=(tmat4x2<T, P> const & m) GLM_DEFAULT;
+
+ template <typename U>
+ GLM_FUNC_DECL tmat4x2<T, P> & operator=(tmat4x2<U, P> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat4x2<T, P> & operator+=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat4x2<T, P> & operator+=(tmat4x2<U, P> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat4x2<T, P> & operator-=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat4x2<T, P> & operator-=(tmat4x2<U, P> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat4x2<T, P> & operator*=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat4x2<T, P> & operator/=(U s);
+
+ // -- Increment and decrement operators --
+
+ GLM_FUNC_DECL tmat4x2<T, P> & operator++ ();
+ GLM_FUNC_DECL tmat4x2<T, P> & operator-- ();
+ GLM_FUNC_DECL tmat4x2<T, P> operator++(int);
+ GLM_FUNC_DECL tmat4x2<T, P> operator--(int);
+ };
+
+ // -- Unary operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x2<T, P> operator+(tmat4x2<T, P> const & m);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x2<T, P> operator-(tmat4x2<T, P> const & m);
+
+ // -- Binary operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x2<T, P> operator+(tmat4x2<T, P> const & m, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x2<T, P> operator+(tmat4x2<T, P> const & m1, tmat4x2<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x2<T, P> operator-(tmat4x2<T, P> const & m, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x2<T, P> operator-(tmat4x2<T, P> const & m1, tmat4x2<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x2<T, P> operator*(tmat4x2<T, P> const & m, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x2<T, P> operator*(T scalar, tmat4x2<T, P> const & m);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL typename tmat4x2<T, P>::col_type operator*(tmat4x2<T, P> const & m, typename tmat4x2<T, P>::row_type const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL typename tmat4x2<T, P>::row_type operator*(typename tmat4x2<T, P>::col_type const & v, tmat4x2<T, P> const & m);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat2x2<T, P> operator*(tmat4x2<T, P> const & m1, tmat2x4<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x2<T, P> operator*(tmat4x2<T, P> const & m1, tmat3x4<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x2<T, P> operator*(tmat4x2<T, P> const & m1, tmat4x4<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x2<T, P> operator/(tmat4x2<T, P> const & m, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x2<T, P> operator/(T scalar, tmat4x2<T, P> const & m);
+
+ // -- Boolean operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL bool operator==(tmat4x2<T, P> const & m1, tmat4x2<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL bool operator!=(tmat4x2<T, P> const & m1, tmat4x2<T, P> const & m2);
+}//namespace glm
+
+#ifndef GLM_EXTERNAL_TEMPLATE
+#include "type_mat4x2.inl"
+#endif
diff --git a/src/third_party/glm/glm/detail/type_mat4x2.inl b/src/third_party/glm/glm/detail/type_mat4x2.inl
new file mode 100644
index 0000000..cbf1b34
--- /dev/null
+++ b/src/third_party/glm/glm/detail/type_mat4x2.inl
@@ -0,0 +1,551 @@
+/// @ref core
+/// @file glm/detail/type_mat4x2.inl
+
+namespace glm
+{
+# ifdef GLM_STATIC_CONST_MEMBERS
+ template<typename T, precision P>
+ const tmat4x2<T, P> tmat4x2<T, P>::ZERO(static_cast<T>(0));
+
+ template<typename T, precision P>
+ const tmat4x2<T, P> tmat4x2<T, P>::IDENTITY(static_cast<T>(1));
+# endif
+ // -- Constructors --
+
+# if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT)
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x2<T, P>::tmat4x2()
+ {
+# ifndef GLM_FORCE_NO_CTOR_INIT
+ this->value[0] = col_type(1, 0);
+ this->value[1] = col_type(0, 1);
+ this->value[2] = col_type(0, 0);
+ this->value[3] = col_type(0, 0);
+# endif
+ }
+# endif
+
+# if !GLM_HAS_DEFAULTED_FUNCTIONS
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x2<T, P>::tmat4x2(tmat4x2<T, P> const & m)
+ {
+ this->value[0] = m.value[0];
+ this->value[1] = m.value[1];
+ this->value[2] = m.value[2];
+ this->value[3] = m.value[3];
+ }
+# endif//!GLM_HAS_DEFAULTED_FUNCTIONS
+
+ template <typename T, precision P>
+ template <precision Q>
+ GLM_FUNC_QUALIFIER tmat4x2<T, P>::tmat4x2(tmat4x2<T, Q> const & m)
+ {
+ this->value[0] = m.value[0];
+ this->value[1] = m.value[1];
+ this->value[2] = m.value[2];
+ this->value[3] = m.value[3];
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tmat4x2<T, P>::tmat4x2(ctor)
+ {}
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x2<T, P>::tmat4x2(T scalar)
+ {
+ this->value[0] = col_type(scalar, 0);
+ this->value[1] = col_type(0, scalar);
+ this->value[2] = col_type(0, 0);
+ this->value[3] = col_type(0, 0);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x2<T, P>::tmat4x2
+ (
+ T x0, T y0,
+ T x1, T y1,
+ T x2, T y2,
+ T x3, T y3
+ )
+ {
+ this->value[0] = col_type(x0, y0);
+ this->value[1] = col_type(x1, y1);
+ this->value[2] = col_type(x2, y2);
+ this->value[3] = col_type(x3, y3);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x2<T, P>::tmat4x2
+ (
+ col_type const & v0,
+ col_type const & v1,
+ col_type const & v2,
+ col_type const & v3
+ )
+ {
+ this->value[0] = v0;
+ this->value[1] = v1;
+ this->value[2] = v2;
+ this->value[3] = v3;
+ }
+
+ // -- Conversion constructors --
+
+ template <typename T, precision P>
+ template <
+ typename X1, typename Y1,
+ typename X2, typename Y2,
+ typename X3, typename Y3,
+ typename X4, typename Y4>
+ GLM_FUNC_QUALIFIER tmat4x2<T, P>::tmat4x2
+ (
+ X1 x1, Y1 y1,
+ X2 x2, Y2 y2,
+ X3 x3, Y3 y3,
+ X4 x4, Y4 y4
+ )
+ {
+ this->value[0] = col_type(static_cast<T>(x1), value_type(y1));
+ this->value[1] = col_type(static_cast<T>(x2), value_type(y2));
+ this->value[2] = col_type(static_cast<T>(x3), value_type(y3));
+ this->value[3] = col_type(static_cast<T>(x4), value_type(y4));
+ }
+
+ template <typename T, precision P>
+ template <typename V1, typename V2, typename V3, typename V4>
+ GLM_FUNC_QUALIFIER tmat4x2<T, P>::tmat4x2
+ (
+ tvec2<V1, P> const & v1,
+ tvec2<V2, P> const & v2,
+ tvec2<V3, P> const & v3,
+ tvec2<V4, P> const & v4
+ )
+ {
+ this->value[0] = col_type(v1);
+ this->value[1] = col_type(v2);
+ this->value[2] = col_type(v3);
+ this->value[3] = col_type(v4);
+ }
+
+ // -- Conversion --
+
+ template <typename T, precision P>
+ template <typename U, precision Q>
+ GLM_FUNC_QUALIFIER tmat4x2<T, P>::tmat4x2(tmat4x2<U, Q> const & m)
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(m[2]);
+ this->value[3] = col_type(m[3]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x2<T, P>::tmat4x2(tmat2x2<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(0);
+ this->value[3] = col_type(0);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x2<T, P>::tmat4x2(tmat3x3<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(m[2]);
+ this->value[3] = col_type(0);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x2<T, P>::tmat4x2(tmat4x4<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(m[2]);
+ this->value[3] = col_type(m[3]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x2<T, P>::tmat4x2(tmat2x3<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(0);
+ this->value[3] = col_type(0);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x2<T, P>::tmat4x2(tmat3x2<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(m[2]);
+ this->value[3] = col_type(0);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x2<T, P>::tmat4x2(tmat2x4<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(0);
+ this->value[3] = col_type(0);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x2<T, P>::tmat4x2(tmat4x3<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(m[2]);
+ this->value[3] = col_type(m[3]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x2<T, P>::tmat4x2(tmat3x4<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(m[2]);
+ this->value[3] = col_type(0);
+ }
+
+ // -- Accesses --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tmat4x2<T, P>::length_type tmat4x2<T, P>::length() const
+ {
+ return 4;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER typename tmat4x2<T, P>::col_type & tmat4x2<T, P>::operator[](typename tmat4x2<T, P>::length_type i)
+ {
+ assert(i < this->length());
+ return this->value[i];
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER typename tmat4x2<T, P>::col_type const & tmat4x2<T, P>::operator[](typename tmat4x2<T, P>::length_type i) const
+ {
+ assert(i < this->length());
+ return this->value[i];
+ }
+
+ // -- Unary updatable operators --
+
+# if !GLM_HAS_DEFAULTED_FUNCTIONS
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x2<T, P>& tmat4x2<T, P>::operator=(tmat4x2<T, P> const & m)
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ this->value[2] = m[2];
+ this->value[3] = m[3];
+ return *this;
+ }
+# endif//!GLM_HAS_DEFAULTED_FUNCTIONS
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x2<T, P>& tmat4x2<T, P>::operator=(tmat4x2<U, P> const & m)
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ this->value[2] = m[2];
+ this->value[3] = m[3];
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x2<T, P> & tmat4x2<T, P>::operator+=(U s)
+ {
+ this->value[0] += s;
+ this->value[1] += s;
+ this->value[2] += s;
+ this->value[3] += s;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x2<T, P> & tmat4x2<T, P>::operator+=(tmat4x2<U, P> const & m)
+ {
+ this->value[0] += m[0];
+ this->value[1] += m[1];
+ this->value[2] += m[2];
+ this->value[3] += m[3];
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x2<T, P> & tmat4x2<T, P>::operator-=(U s)
+ {
+ this->value[0] -= s;
+ this->value[1] -= s;
+ this->value[2] -= s;
+ this->value[3] -= s;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x2<T, P> & tmat4x2<T, P>::operator-=(tmat4x2<U, P> const & m)
+ {
+ this->value[0] -= m[0];
+ this->value[1] -= m[1];
+ this->value[2] -= m[2];
+ this->value[3] -= m[3];
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x2<T, P> & tmat4x2<T, P>::operator*=(U s)
+ {
+ this->value[0] *= s;
+ this->value[1] *= s;
+ this->value[2] *= s;
+ this->value[3] *= s;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x2<T, P> & tmat4x2<T, P>::operator/=(U s)
+ {
+ this->value[0] /= s;
+ this->value[1] /= s;
+ this->value[2] /= s;
+ this->value[3] /= s;
+ return *this;
+ }
+
+ // -- Increment and decrement operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x2<T, P> & tmat4x2<T, P>::operator++()
+ {
+ ++this->value[0];
+ ++this->value[1];
+ ++this->value[2];
+ ++this->value[3];
+ return *this;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x2<T, P> & tmat4x2<T, P>::operator--()
+ {
+ --this->value[0];
+ --this->value[1];
+ --this->value[2];
+ --this->value[3];
+ return *this;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x2<T, P> tmat4x2<T, P>::operator++(int)
+ {
+ tmat4x2<T, P> Result(*this);
+ ++*this;
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x2<T, P> tmat4x2<T, P>::operator--(int)
+ {
+ tmat4x2<T, P> Result(*this);
+ --*this;
+ return Result;
+ }
+
+ // -- Unary arithmetic operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x2<T, P> operator+(tmat4x2<T, P> const & m)
+ {
+ return m;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x2<T, P> operator-(tmat4x2<T, P> const & m)
+ {
+ return tmat4x2<T, P>(
+ -m[0],
+ -m[1],
+ -m[2],
+ -m[3]);
+ }
+
+ // -- Binary arithmetic operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x2<T, P> operator+(tmat4x2<T, P> const & m, T scalar)
+ {
+ return tmat4x2<T, P>(
+ m[0] + scalar,
+ m[1] + scalar,
+ m[2] + scalar,
+ m[3] + scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x2<T, P> operator+(tmat4x2<T, P> const & m1, tmat4x2<T, P> const & m2)
+ {
+ return tmat4x2<T, P>(
+ m1[0] + m2[0],
+ m1[1] + m2[1],
+ m1[2] + m2[2],
+ m1[3] + m2[3]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x2<T, P> operator-(tmat4x2<T, P> const & m, T scalar)
+ {
+ return tmat4x2<T, P>(
+ m[0] - scalar,
+ m[1] - scalar,
+ m[2] - scalar,
+ m[3] - scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x2<T, P> operator-(tmat4x2<T, P> const & m1, tmat4x2<T, P> const & m2)
+ {
+ return tmat4x2<T, P>(
+ m1[0] - m2[0],
+ m1[1] - m2[1],
+ m1[2] - m2[2],
+ m1[3] - m2[3]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x2<T, P> operator*(tmat4x2<T, P> const & m, T scalar)
+ {
+ return tmat4x2<T, P>(
+ m[0] * scalar,
+ m[1] * scalar,
+ m[2] * scalar,
+ m[3] * scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x2<T, P> operator*(T scalar, tmat4x2<T, P> const & m)
+ {
+ return tmat4x2<T, P>(
+ m[0] * scalar,
+ m[1] * scalar,
+ m[2] * scalar,
+ m[3] * scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER typename tmat4x2<T, P>::col_type operator*(tmat4x2<T, P> const & m, typename tmat4x2<T, P>::row_type const & v)
+ {
+ return typename tmat4x2<T, P>::col_type(
+ m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z + m[3][0] * v.w,
+ m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z + m[3][1] * v.w);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER typename tmat4x2<T, P>::row_type operator*(typename tmat4x2<T, P>::col_type const & v, tmat4x2<T, P> const & m)
+ {
+ return typename tmat4x2<T, P>::row_type(
+ v.x * m[0][0] + v.y * m[0][1],
+ v.x * m[1][0] + v.y * m[1][1],
+ v.x * m[2][0] + v.y * m[2][1],
+ v.x * m[3][0] + v.y * m[3][1]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P> operator*(tmat4x2<T, P> const & m1, tmat2x4<T, P> const & m2)
+ {
+ T const SrcA00 = m1[0][0];
+ T const SrcA01 = m1[0][1];
+ T const SrcA10 = m1[1][0];
+ T const SrcA11 = m1[1][1];
+ T const SrcA20 = m1[2][0];
+ T const SrcA21 = m1[2][1];
+ T const SrcA30 = m1[3][0];
+ T const SrcA31 = m1[3][1];
+
+ T const SrcB00 = m2[0][0];
+ T const SrcB01 = m2[0][1];
+ T const SrcB02 = m2[0][2];
+ T const SrcB03 = m2[0][3];
+ T const SrcB10 = m2[1][0];
+ T const SrcB11 = m2[1][1];
+ T const SrcB12 = m2[1][2];
+ T const SrcB13 = m2[1][3];
+
+ tmat2x2<T, P> Result(uninitialize);
+ Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02 + SrcA30 * SrcB03;
+ Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02 + SrcA31 * SrcB03;
+ Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12 + SrcA30 * SrcB13;
+ Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11 + SrcA21 * SrcB12 + SrcA31 * SrcB13;
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x2<T, P> operator*(tmat4x2<T, P> const & m1, tmat3x4<T, P> const & m2)
+ {
+ return tmat3x2<T, P>(
+ m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3],
+ m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3],
+ m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3],
+ m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3],
+ m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2] + m1[3][0] * m2[2][3],
+ m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2] + m1[3][1] * m2[2][3]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x2<T, P> operator*(tmat4x2<T, P> const & m1, tmat4x4<T, P> const & m2)
+ {
+ return tmat4x2<T, P>(
+ m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3],
+ m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3],
+ m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3],
+ m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3],
+ m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2] + m1[3][0] * m2[2][3],
+ m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2] + m1[3][1] * m2[2][3],
+ m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1] + m1[2][0] * m2[3][2] + m1[3][0] * m2[3][3],
+ m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1] + m1[2][1] * m2[3][2] + m1[3][1] * m2[3][3]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x2<T, P> operator/(tmat4x2<T, P> const & m, T scalar)
+ {
+ return tmat4x2<T, P>(
+ m[0] / scalar,
+ m[1] / scalar,
+ m[2] / scalar,
+ m[3] / scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x2<T, P> operator/(T scalar, tmat4x2<T, P> const & m)
+ {
+ return tmat4x2<T, P>(
+ scalar / m[0],
+ scalar / m[1],
+ scalar / m[2],
+ scalar / m[3]);
+ }
+
+ // -- Boolean operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER bool operator==(tmat4x2<T, P> const & m1, tmat4x2<T, P> const & m2)
+ {
+ return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]) && (m1[3] == m2[3]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER bool operator!=(tmat4x2<T, P> const & m1, tmat4x2<T, P> const & m2)
+ {
+ return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]) || (m1[3] != m2[3]);
+ }
+} //namespace glm
diff --git a/src/third_party/glm/glm/detail/type_mat4x3.hpp b/src/third_party/glm/glm/detail/type_mat4x3.hpp
new file mode 100644
index 0000000..15c328e
--- /dev/null
+++ b/src/third_party/glm/glm/detail/type_mat4x3.hpp
@@ -0,0 +1,177 @@
+/// @ref core
+/// @file glm/detail/type_mat4x3.hpp
+
+#pragma once
+
+#include "../fwd.hpp"
+#include "type_vec3.hpp"
+#include "type_vec4.hpp"
+#include "type_mat.hpp"
+#include <limits>
+#include <cstddef>
+
+namespace glm
+{
+ template <typename T, precision P = defaultp>
+ struct tmat4x3
+ {
+ typedef tvec3<T, P> col_type;
+ typedef tvec4<T, P> row_type;
+ typedef tmat4x3<T, P> type;
+ typedef tmat3x4<T, P> transpose_type;
+ typedef T value_type;
+
+ private:
+ col_type value[4];
+
+ public:
+ // -- Constructors --
+
+ GLM_FUNC_DECL tmat4x3() GLM_DEFAULT_CTOR;
+ GLM_FUNC_DECL tmat4x3(tmat4x3<T, P> const & m) GLM_DEFAULT;
+ template <precision Q>
+ GLM_FUNC_DECL tmat4x3(tmat4x3<T, Q> const & m);
+
+ GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tmat4x3(ctor);
+ GLM_FUNC_DECL explicit tmat4x3(T const & x);
+ GLM_FUNC_DECL tmat4x3(
+ T const & x0, T const & y0, T const & z0,
+ T const & x1, T const & y1, T const & z1,
+ T const & x2, T const & y2, T const & z2,
+ T const & x3, T const & y3, T const & z3);
+ GLM_FUNC_DECL tmat4x3(
+ col_type const & v0,
+ col_type const & v1,
+ col_type const & v2,
+ col_type const & v3);
+
+ // -- Conversions --
+
+ template <
+ typename X1, typename Y1, typename Z1,
+ typename X2, typename Y2, typename Z2,
+ typename X3, typename Y3, typename Z3,
+ typename X4, typename Y4, typename Z4>
+ GLM_FUNC_DECL tmat4x3(
+ X1 const & x1, Y1 const & y1, Z1 const & z1,
+ X2 const & x2, Y2 const & y2, Z2 const & z2,
+ X3 const & x3, Y3 const & y3, Z3 const & z3,
+ X4 const & x4, Y4 const & y4, Z4 const & z4);
+
+ template <typename V1, typename V2, typename V3, typename V4>
+ GLM_FUNC_DECL tmat4x3(
+ tvec3<V1, P> const & v1,
+ tvec3<V2, P> const & v2,
+ tvec3<V3, P> const & v3,
+ tvec3<V4, P> const & v4);
+
+ // -- Matrix conversions --
+
+ template <typename U, precision Q>
+ GLM_FUNC_DECL GLM_EXPLICIT tmat4x3(tmat4x3<U, Q> const & m);
+
+ GLM_FUNC_DECL GLM_EXPLICIT tmat4x3(tmat2x2<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat4x3(tmat3x3<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat4x3(tmat4x4<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat4x3(tmat2x3<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat4x3(tmat3x2<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat4x3(tmat2x4<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat4x3(tmat4x2<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat4x3(tmat3x4<T, P> const & x);
+
+ // -- Accesses --
+
+ typedef length_t length_type;
+ GLM_FUNC_DECL GLM_CONSTEXPR length_type length() const;
+
+ GLM_FUNC_DECL col_type & operator[](length_type i);
+ GLM_FUNC_DECL col_type const & operator[](length_type i) const;
+
+ // -- Unary arithmetic operators --
+
+ GLM_FUNC_DECL tmat4x3<T, P> & operator=(tmat4x3<T, P> const & m) GLM_DEFAULT;
+
+ template <typename U>
+ GLM_FUNC_DECL tmat4x3<T, P> & operator=(tmat4x3<U, P> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat4x3<T, P> & operator+=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat4x3<T, P> & operator+=(tmat4x3<U, P> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat4x3<T, P> & operator-=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat4x3<T, P> & operator-=(tmat4x3<U, P> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat4x3<T, P> & operator*=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat4x3<T, P> & operator/=(U s);
+
+ // -- Increment and decrement operators --
+
+ GLM_FUNC_DECL tmat4x3<T, P> & operator++();
+ GLM_FUNC_DECL tmat4x3<T, P> & operator--();
+ GLM_FUNC_DECL tmat4x3<T, P> operator++(int);
+ GLM_FUNC_DECL tmat4x3<T, P> operator--(int);
+ };
+
+ // -- Unary operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x3<T, P> operator+(tmat4x3<T, P> const & m);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x3<T, P> operator-(tmat4x3<T, P> const & m);
+
+ // -- Binary operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x3<T, P> operator+(tmat4x3<T, P> const & m, T const & s);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x3<T, P> operator+(tmat4x3<T, P> const & m1, tmat4x3<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x3<T, P> operator-(tmat4x3<T, P> const & m, T const & s);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x3<T, P> operator-(tmat4x3<T, P> const & m1, tmat4x3<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x3<T, P> operator*(tmat4x3<T, P> const & m, T const & s);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x3<T, P> operator*(T const & s, tmat4x3<T, P> const & m);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL typename tmat4x3<T, P>::col_type operator*(tmat4x3<T, P> const & m, typename tmat4x3<T, P>::row_type const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL typename tmat4x3<T, P>::row_type operator*(typename tmat4x3<T, P>::col_type const & v, tmat4x3<T, P> const & m);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat2x3<T, P> operator*(tmat4x3<T, P> const & m1, tmat2x4<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x3<T, P> operator*(tmat4x3<T, P> const & m1, tmat3x4<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x3<T, P> operator*(tmat4x3<T, P> const & m1, tmat4x4<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x3<T, P> operator/(tmat4x3<T, P> const & m, T const & s);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x3<T, P> operator/(T const & s, tmat4x3<T, P> const & m);
+
+ // -- Boolean operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL bool operator==(tmat4x3<T, P> const & m1, tmat4x3<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL bool operator!=(tmat4x3<T, P> const & m1, tmat4x3<T, P> const & m2);
+}//namespace glm
+
+#ifndef GLM_EXTERNAL_TEMPLATE
+#include "type_mat4x3.inl"
+#endif //GLM_EXTERNAL_TEMPLATE
diff --git a/src/third_party/glm/glm/detail/type_mat4x3.inl b/src/third_party/glm/glm/detail/type_mat4x3.inl
new file mode 100644
index 0000000..2aa8289
--- /dev/null
+++ b/src/third_party/glm/glm/detail/type_mat4x3.inl
@@ -0,0 +1,568 @@
+/// @ref core
+/// @file glm/detail/type_mat4x3.inl
+
+namespace glm
+{
+ // -- Constructors --
+
+# if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT)
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x3<T, P>::tmat4x3()
+ {
+# ifndef GLM_FORCE_NO_CTOR_INIT
+ this->value[0] = col_type(1, 0, 0);
+ this->value[1] = col_type(0, 1, 0);
+ this->value[2] = col_type(0, 0, 1);
+ this->value[3] = col_type(0, 0, 0);
+# endif
+ }
+# endif
+
+# if !GLM_HAS_DEFAULTED_FUNCTIONS
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x3<T, P>::tmat4x3(tmat4x3<T, P> const & m)
+ {
+ this->value[0] = m.value[0];
+ this->value[1] = m.value[1];
+ this->value[2] = m.value[2];
+ this->value[3] = m.value[3];
+ }
+# endif//!GLM_HAS_DEFAULTED_FUNCTIONS
+
+ template <typename T, precision P>
+ template <precision Q>
+ GLM_FUNC_QUALIFIER tmat4x3<T, P>::tmat4x3(tmat4x3<T, Q> const & m)
+ {
+ this->value[0] = m.value[0];
+ this->value[1] = m.value[1];
+ this->value[2] = m.value[2];
+ this->value[3] = m.value[3];
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tmat4x3<T, P>::tmat4x3(ctor)
+ {}
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x3<T, P>::tmat4x3(T const & s)
+ {
+ this->value[0] = col_type(s, 0, 0);
+ this->value[1] = col_type(0, s, 0);
+ this->value[2] = col_type(0, 0, s);
+ this->value[3] = col_type(0, 0, 0);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x3<T, P>::tmat4x3
+ (
+ T const & x0, T const & y0, T const & z0,
+ T const & x1, T const & y1, T const & z1,
+ T const & x2, T const & y2, T const & z2,
+ T const & x3, T const & y3, T const & z3
+ )
+ {
+ this->value[0] = col_type(x0, y0, z0);
+ this->value[1] = col_type(x1, y1, z1);
+ this->value[2] = col_type(x2, y2, z2);
+ this->value[3] = col_type(x3, y3, z3);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x3<T, P>::tmat4x3
+ (
+ col_type const & v0,
+ col_type const & v1,
+ col_type const & v2,
+ col_type const & v3
+ )
+ {
+ this->value[0] = v0;
+ this->value[1] = v1;
+ this->value[2] = v2;
+ this->value[3] = v3;
+ }
+
+ // -- Conversion constructors --
+
+ template <typename T, precision P>
+ template <
+ typename X1, typename Y1, typename Z1,
+ typename X2, typename Y2, typename Z2,
+ typename X3, typename Y3, typename Z3,
+ typename X4, typename Y4, typename Z4>
+ GLM_FUNC_QUALIFIER tmat4x3<T, P>::tmat4x3
+ (
+ X1 const & x1, Y1 const & y1, Z1 const & z1,
+ X2 const & x2, Y2 const & y2, Z2 const & z2,
+ X3 const & x3, Y3 const & y3, Z3 const & z3,
+ X4 const & x4, Y4 const & y4, Z4 const & z4
+ )
+ {
+ this->value[0] = col_type(static_cast<T>(x1), value_type(y1), value_type(z1));
+ this->value[1] = col_type(static_cast<T>(x2), value_type(y2), value_type(z2));
+ this->value[2] = col_type(static_cast<T>(x3), value_type(y3), value_type(z3));
+ this->value[3] = col_type(static_cast<T>(x4), value_type(y4), value_type(z4));
+ }
+
+ template <typename T, precision P>
+ template <typename V1, typename V2, typename V3, typename V4>
+ GLM_FUNC_QUALIFIER tmat4x3<T, P>::tmat4x3
+ (
+ tvec3<V1, P> const & v1,
+ tvec3<V2, P> const & v2,
+ tvec3<V3, P> const & v3,
+ tvec3<V4, P> const & v4
+ )
+ {
+ this->value[0] = col_type(v1);
+ this->value[1] = col_type(v2);
+ this->value[2] = col_type(v3);
+ this->value[3] = col_type(v4);
+ }
+
+ // -- Matrix conversions --
+
+ template <typename T, precision P>
+ template <typename U, precision Q>
+ GLM_FUNC_QUALIFIER tmat4x3<T, P>::tmat4x3(tmat4x3<U, Q> const & m)
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(m[2]);
+ this->value[3] = col_type(m[3]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x3<T, P>::tmat4x3(tmat2x2<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0], 0);
+ this->value[1] = col_type(m[1], 0);
+ this->value[2] = col_type(0, 0, 1);
+ this->value[3] = col_type(0);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x3<T, P>::tmat4x3(tmat3x3<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(m[2]);
+ this->value[3] = col_type(0);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x3<T, P>::tmat4x3(tmat4x4<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(m[2]);
+ this->value[3] = col_type(m[3]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x3<T, P>::tmat4x3(tmat2x3<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(0, 0, 1);
+ this->value[3] = col_type(0);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x3<T, P>::tmat4x3(tmat3x2<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0], 0);
+ this->value[1] = col_type(m[1], 0);
+ this->value[2] = col_type(m[2], 1);
+ this->value[3] = col_type(0);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x3<T, P>::tmat4x3(tmat2x4<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(0, 0, 1);
+ this->value[3] = col_type(0);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x3<T, P>::tmat4x3(tmat4x2<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0], 0);
+ this->value[1] = col_type(m[1], 0);
+ this->value[2] = col_type(m[2], 1);
+ this->value[3] = col_type(m[3], 0);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x3<T, P>::tmat4x3(tmat3x4<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(m[2]);
+ this->value[3] = col_type(0);
+ }
+
+ // -- Accesses --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tmat4x3<T, P>::length_type tmat4x3<T, P>::length() const
+ {
+ return 4;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER typename tmat4x3<T, P>::col_type & tmat4x3<T, P>::operator[](typename tmat4x3<T, P>::length_type i)
+ {
+ assert(i < this->length());
+ return this->value[i];
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER typename tmat4x3<T, P>::col_type const & tmat4x3<T, P>::operator[](typename tmat4x3<T, P>::length_type i) const
+ {
+ assert(i < this->length());
+ return this->value[i];
+ }
+
+ // -- Unary updatable operators --
+
+# if !GLM_HAS_DEFAULTED_FUNCTIONS
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x3<T, P>& tmat4x3<T, P>::operator=(tmat4x3<T, P> const & m)
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ this->value[2] = m[2];
+ this->value[3] = m[3];
+ return *this;
+ }
+# endif//!GLM_HAS_DEFAULTED_FUNCTIONS
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x3<T, P>& tmat4x3<T, P>::operator=(tmat4x3<U, P> const & m)
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ this->value[2] = m[2];
+ this->value[3] = m[3];
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x3<T, P> & tmat4x3<T, P>::operator+=(U s)
+ {
+ this->value[0] += s;
+ this->value[1] += s;
+ this->value[2] += s;
+ this->value[3] += s;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x3<T, P> & tmat4x3<T, P>::operator+=(tmat4x3<U, P> const & m)
+ {
+ this->value[0] += m[0];
+ this->value[1] += m[1];
+ this->value[2] += m[2];
+ this->value[3] += m[3];
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x3<T, P> & tmat4x3<T, P>::operator-=(U s)
+ {
+ this->value[0] -= s;
+ this->value[1] -= s;
+ this->value[2] -= s;
+ this->value[3] -= s;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x3<T, P> & tmat4x3<T, P>::operator-=(tmat4x3<U, P> const & m)
+ {
+ this->value[0] -= m[0];
+ this->value[1] -= m[1];
+ this->value[2] -= m[2];
+ this->value[3] -= m[3];
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x3<T, P> & tmat4x3<T, P>::operator*=(U s)
+ {
+ this->value[0] *= s;
+ this->value[1] *= s;
+ this->value[2] *= s;
+ this->value[3] *= s;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x3<T, P> & tmat4x3<T, P>::operator/=(U s)
+ {
+ this->value[0] /= s;
+ this->value[1] /= s;
+ this->value[2] /= s;
+ this->value[3] /= s;
+ return *this;
+ }
+
+ // -- Increment and decrement operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x3<T, P> & tmat4x3<T, P>::operator++()
+ {
+ ++this->value[0];
+ ++this->value[1];
+ ++this->value[2];
+ ++this->value[3];
+ return *this;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x3<T, P> & tmat4x3<T, P>::operator--()
+ {
+ --this->value[0];
+ --this->value[1];
+ --this->value[2];
+ --this->value[3];
+ return *this;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x3<T, P> tmat4x3<T, P>::operator++(int)
+ {
+ tmat4x3<T, P> Result(*this);
+ ++*this;
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x3<T, P> tmat4x3<T, P>::operator--(int)
+ {
+ tmat4x3<T, P> Result(*this);
+ --*this;
+ return Result;
+ }
+
+ // -- Unary arithmetic operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x3<T, P> operator+(tmat4x3<T, P> const & m)
+ {
+ return m;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x3<T, P> operator-(tmat4x3<T, P> const & m)
+ {
+ return tmat4x3<T, P>(
+ -m[0],
+ -m[1],
+ -m[2],
+ -m[3]);
+ }
+
+ // -- Binary arithmetic operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x3<T, P> operator+(tmat4x3<T, P> const & m, T const & s)
+ {
+ return tmat4x3<T, P>(
+ m[0] + s,
+ m[1] + s,
+ m[2] + s,
+ m[3] + s);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x3<T, P> operator+(tmat4x3<T, P> const & m1, tmat4x3<T, P> const & m2)
+ {
+ return tmat4x3<T, P>(
+ m1[0] + m2[0],
+ m1[1] + m2[1],
+ m1[2] + m2[2],
+ m1[3] + m2[3]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x3<T, P> operator-(tmat4x3<T, P> const & m, T const & s)
+ {
+ return tmat4x3<T, P>(
+ m[0] - s,
+ m[1] - s,
+ m[2] - s,
+ m[3] - s);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x3<T, P> operator-(tmat4x3<T, P> const & m1, tmat4x3<T, P> const & m2)
+ {
+ return tmat4x3<T, P>(
+ m1[0] - m2[0],
+ m1[1] - m2[1],
+ m1[2] - m2[2],
+ m1[3] - m2[3]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x3<T, P> operator*(tmat4x3<T, P> const & m, T const & s)
+ {
+ return tmat4x3<T, P>(
+ m[0] * s,
+ m[1] * s,
+ m[2] * s,
+ m[3] * s);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x3<T, P> operator*(T const & s, tmat4x3<T, P> const & m)
+ {
+ return tmat4x3<T, P>(
+ m[0] * s,
+ m[1] * s,
+ m[2] * s,
+ m[3] * s);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER typename tmat4x3<T, P>::col_type operator*
+ (
+ tmat4x3<T, P> const & m,
+ typename tmat4x3<T, P>::row_type const & v)
+ {
+ return typename tmat4x3<T, P>::col_type(
+ m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z + m[3][0] * v.w,
+ m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z + m[3][1] * v.w,
+ m[0][2] * v.x + m[1][2] * v.y + m[2][2] * v.z + m[3][2] * v.w);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER typename tmat4x3<T, P>::row_type operator*
+ (
+ typename tmat4x3<T, P>::col_type const & v,
+ tmat4x3<T, P> const & m)
+ {
+ return typename tmat4x3<T, P>::row_type(
+ v.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2],
+ v.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2],
+ v.x * m[2][0] + v.y * m[2][1] + v.z * m[2][2],
+ v.x * m[3][0] + v.y * m[3][1] + v.z * m[3][2]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x3<T, P> operator*(tmat4x3<T, P> const & m1, tmat2x4<T, P> const & m2)
+ {
+ return tmat2x3<T, P>(
+ m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3],
+ m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3],
+ m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2] + m1[3][2] * m2[0][3],
+ m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3],
+ m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3],
+ m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2] + m1[3][2] * m2[1][3]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> operator*(tmat4x3<T, P> const & m1, tmat3x4<T, P> const & m2)
+ {
+ T const SrcA00 = m1[0][0];
+ T const SrcA01 = m1[0][1];
+ T const SrcA02 = m1[0][2];
+ T const SrcA10 = m1[1][0];
+ T const SrcA11 = m1[1][1];
+ T const SrcA12 = m1[1][2];
+ T const SrcA20 = m1[2][0];
+ T const SrcA21 = m1[2][1];
+ T const SrcA22 = m1[2][2];
+ T const SrcA30 = m1[3][0];
+ T const SrcA31 = m1[3][1];
+ T const SrcA32 = m1[3][2];
+
+ T const SrcB00 = m2[0][0];
+ T const SrcB01 = m2[0][1];
+ T const SrcB02 = m2[0][2];
+ T const SrcB03 = m2[0][3];
+ T const SrcB10 = m2[1][0];
+ T const SrcB11 = m2[1][1];
+ T const SrcB12 = m2[1][2];
+ T const SrcB13 = m2[1][3];
+ T const SrcB20 = m2[2][0];
+ T const SrcB21 = m2[2][1];
+ T const SrcB22 = m2[2][2];
+ T const SrcB23 = m2[2][3];
+
+ tmat3x3<T, P> Result(uninitialize);
+ Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02 + SrcA30 * SrcB03;
+ Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02 + SrcA31 * SrcB03;
+ Result[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01 + SrcA22 * SrcB02 + SrcA32 * SrcB03;
+ Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12 + SrcA30 * SrcB13;
+ Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11 + SrcA21 * SrcB12 + SrcA31 * SrcB13;
+ Result[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11 + SrcA22 * SrcB12 + SrcA32 * SrcB13;
+ Result[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21 + SrcA20 * SrcB22 + SrcA30 * SrcB23;
+ Result[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21 + SrcA21 * SrcB22 + SrcA31 * SrcB23;
+ Result[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21 + SrcA22 * SrcB22 + SrcA32 * SrcB23;
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x3<T, P> operator*(tmat4x3<T, P> const & m1, tmat4x4<T, P> const & m2)
+ {
+ return tmat4x3<T, P>(
+ m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3],
+ m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3],
+ m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2] + m1[3][2] * m2[0][3],
+ m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3],
+ m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3],
+ m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2] + m1[3][2] * m2[1][3],
+ m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2] + m1[3][0] * m2[2][3],
+ m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2] + m1[3][1] * m2[2][3],
+ m1[0][2] * m2[2][0] + m1[1][2] * m2[2][1] + m1[2][2] * m2[2][2] + m1[3][2] * m2[2][3],
+ m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1] + m1[2][0] * m2[3][2] + m1[3][0] * m2[3][3],
+ m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1] + m1[2][1] * m2[3][2] + m1[3][1] * m2[3][3],
+ m1[0][2] * m2[3][0] + m1[1][2] * m2[3][1] + m1[2][2] * m2[3][2] + m1[3][2] * m2[3][3]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x3<T, P> operator/(tmat4x3<T, P> const & m, T const & s)
+ {
+ return tmat4x3<T, P>(
+ m[0] / s,
+ m[1] / s,
+ m[2] / s,
+ m[3] / s);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x3<T, P> operator/(T const & s, tmat4x3<T, P> const & m)
+ {
+ return tmat4x3<T, P>(
+ s / m[0],
+ s / m[1],
+ s / m[2],
+ s / m[3]);
+ }
+
+ // -- Boolean operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER bool operator==(tmat4x3<T, P> const & m1, tmat4x3<T, P> const & m2)
+ {
+ return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]) && (m1[3] == m2[3]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER bool operator!=(tmat4x3<T, P> const & m1, tmat4x3<T, P> const & m2)
+ {
+ return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]) || (m1[3] != m2[3]);
+ }
+} //namespace glm
diff --git a/src/third_party/glm/glm/detail/type_mat4x4.hpp b/src/third_party/glm/glm/detail/type_mat4x4.hpp
new file mode 100644
index 0000000..d004394
--- /dev/null
+++ b/src/third_party/glm/glm/detail/type_mat4x4.hpp
@@ -0,0 +1,195 @@
+/// @ref core
+/// @file glm/detail/type_mat4x4.hpp
+
+#pragma once
+
+#include "../fwd.hpp"
+#include "type_vec4.hpp"
+#include "type_mat.hpp"
+#include <limits>
+#include <cstddef>
+
+namespace glm
+{
+ template <typename T, precision P = defaultp>
+ struct tmat4x4
+ {
+ typedef tvec4<T, P> col_type;
+ typedef tvec4<T, P> row_type;
+ typedef tmat4x4<T, P> type;
+ typedef tmat4x4<T, P> transpose_type;
+ typedef T value_type;
+
+ private:
+ col_type value[4];
+
+ public:
+ // -- Constructors --
+
+ GLM_FUNC_DECL tmat4x4() GLM_DEFAULT_CTOR;
+ GLM_FUNC_DECL tmat4x4(tmat4x4<T, P> const & m) GLM_DEFAULT;
+ template <precision Q>
+ GLM_FUNC_DECL tmat4x4(tmat4x4<T, Q> const & m);
+
+ GLM_FUNC_DECL explicit tmat4x4(ctor);
+ GLM_FUNC_DECL explicit tmat4x4(T const & x);
+ GLM_FUNC_DECL tmat4x4(
+ T const & x0, T const & y0, T const & z0, T const & w0,
+ T const & x1, T const & y1, T const & z1, T const & w1,
+ T const & x2, T const & y2, T const & z2, T const & w2,
+ T const & x3, T const & y3, T const & z3, T const & w3);
+ GLM_FUNC_DECL tmat4x4(
+ col_type const & v0,
+ col_type const & v1,
+ col_type const & v2,
+ col_type const & v3);
+
+ // -- Conversions --
+
+ template <
+ typename X1, typename Y1, typename Z1, typename W1,
+ typename X2, typename Y2, typename Z2, typename W2,
+ typename X3, typename Y3, typename Z3, typename W3,
+ typename X4, typename Y4, typename Z4, typename W4>
+ GLM_FUNC_DECL tmat4x4(
+ X1 const & x1, Y1 const & y1, Z1 const & z1, W1 const & w1,
+ X2 const & x2, Y2 const & y2, Z2 const & z2, W2 const & w2,
+ X3 const & x3, Y3 const & y3, Z3 const & z3, W3 const & w3,
+ X4 const & x4, Y4 const & y4, Z4 const & z4, W4 const & w4);
+
+ template <typename V1, typename V2, typename V3, typename V4>
+ GLM_FUNC_DECL tmat4x4(
+ tvec4<V1, P> const & v1,
+ tvec4<V2, P> const & v2,
+ tvec4<V3, P> const & v3,
+ tvec4<V4, P> const & v4);
+
+ // -- Matrix conversions --
+
+ template <typename U, precision Q>
+ GLM_FUNC_DECL GLM_EXPLICIT tmat4x4(tmat4x4<U, Q> const & m);
+
+ GLM_FUNC_DECL GLM_EXPLICIT tmat4x4(tmat2x2<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat4x4(tmat3x3<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat4x4(tmat2x3<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat4x4(tmat3x2<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat4x4(tmat2x4<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat4x4(tmat4x2<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat4x4(tmat3x4<T, P> const & x);
+ GLM_FUNC_DECL GLM_EXPLICIT tmat4x4(tmat4x3<T, P> const & x);
+
+ // -- Accesses --
+
+ typedef length_t length_type;
+ GLM_FUNC_DECL GLM_CONSTEXPR length_type length() const;
+
+ GLM_FUNC_DECL col_type & operator[](length_type i);
+ GLM_FUNC_DECL col_type const & operator[](length_type i) const;
+
+ // -- Unary arithmetic operators --
+
+ GLM_FUNC_DECL tmat4x4<T, P> & operator=(tmat4x4<T, P> const & m) GLM_DEFAULT;
+
+ template <typename U>
+ GLM_FUNC_DECL tmat4x4<T, P> & operator=(tmat4x4<U, P> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat4x4<T, P> & operator+=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat4x4<T, P> & operator+=(tmat4x4<U, P> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat4x4<T, P> & operator-=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat4x4<T, P> & operator-=(tmat4x4<U, P> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat4x4<T, P> & operator*=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat4x4<T, P> & operator*=(tmat4x4<U, P> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tmat4x4<T, P> & operator/=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tmat4x4<T, P> & operator/=(tmat4x4<U, P> const & m);
+
+ // -- Increment and decrement operators --
+
+ GLM_FUNC_DECL tmat4x4<T, P> & operator++();
+ GLM_FUNC_DECL tmat4x4<T, P> & operator--();
+ GLM_FUNC_DECL tmat4x4<T, P> operator++(int);
+ GLM_FUNC_DECL tmat4x4<T, P> operator--(int);
+ };
+
+ // -- Unary operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x4<T, P> operator+(tmat4x4<T, P> const & m);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x4<T, P> operator-(tmat4x4<T, P> const & m);
+
+ // -- Binary operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x4<T, P> operator+(tmat4x4<T, P> const & m, T const & s);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x4<T, P> operator+(T const & s, tmat4x4<T, P> const & m);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x4<T, P> operator+(tmat4x4<T, P> const & m1, tmat4x4<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x4<T, P> operator-(tmat4x4<T, P> const & m, T const & s);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x4<T, P> operator-(T const & s, tmat4x4<T, P> const & m);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x4<T, P> operator-(tmat4x4<T, P> const & m1, tmat4x4<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x4<T, P> operator*(tmat4x4<T, P> const & m, T const & s);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x4<T, P> operator*(T const & s, tmat4x4<T, P> const & m);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL typename tmat4x4<T, P>::col_type operator*(tmat4x4<T, P> const & m, typename tmat4x4<T, P>::row_type const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL typename tmat4x4<T, P>::row_type operator*(typename tmat4x4<T, P>::col_type const & v, tmat4x4<T, P> const & m);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat2x4<T, P> operator*(tmat4x4<T, P> const & m1, tmat2x4<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x4<T, P> operator*(tmat4x4<T, P> const & m1, tmat3x4<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x4<T, P> operator*(tmat4x4<T, P> const & m1, tmat4x4<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x4<T, P> operator/(tmat4x4<T, P> const & m, T const & s);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x4<T, P> operator/(T const & s, tmat4x4<T, P> const & m);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL typename tmat4x4<T, P>::col_type operator/(tmat4x4<T, P> const & m, typename tmat4x4<T, P>::row_type const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL typename tmat4x4<T, P>::row_type operator/(typename tmat4x4<T, P>::col_type const & v, tmat4x4<T, P> const & m);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x4<T, P> operator/(tmat4x4<T, P> const & m1, tmat4x4<T, P> const & m2);
+
+ // -- Boolean operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL bool operator==(tmat4x4<T, P> const & m1, tmat4x4<T, P> const & m2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL bool operator!=(tmat4x4<T, P> const & m1, tmat4x4<T, P> const & m2);
+}//namespace glm
+
+#ifndef GLM_EXTERNAL_TEMPLATE
+#include "type_mat4x4.inl"
+#endif//GLM_EXTERNAL_TEMPLATE
diff --git a/src/third_party/glm/glm/detail/type_mat4x4.inl b/src/third_party/glm/glm/detail/type_mat4x4.inl
new file mode 100644
index 0000000..81b2750
--- /dev/null
+++ b/src/third_party/glm/glm/detail/type_mat4x4.inl
@@ -0,0 +1,677 @@
+/// @ref core
+/// @file glm/detail/type_mat4x4.inl
+
+#include "func_matrix.hpp"
+
+namespace glm
+{
+ // -- Constructors --
+
+# if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT)
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P>::tmat4x4()
+ {
+# ifndef GLM_FORCE_NO_CTOR_INIT
+ this->value[0] = col_type(1, 0, 0, 0);
+ this->value[1] = col_type(0, 1, 0, 0);
+ this->value[2] = col_type(0, 0, 1, 0);
+ this->value[3] = col_type(0, 0, 0, 1);
+# endif
+ }
+# endif
+
+# if !GLM_HAS_DEFAULTED_FUNCTIONS
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P>::tmat4x4(tmat4x4<T, P> const & m)
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ this->value[2] = m[2];
+ this->value[3] = m[3];
+ }
+# endif//!GLM_HAS_DEFAULTED_FUNCTIONS
+
+ template <typename T, precision P>
+ template <precision Q>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P>::tmat4x4(tmat4x4<T, Q> const & m)
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ this->value[2] = m[2];
+ this->value[3] = m[3];
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P>::tmat4x4(ctor)
+ {}
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P>::tmat4x4(T const & s)
+ {
+ this->value[0] = col_type(s, 0, 0, 0);
+ this->value[1] = col_type(0, s, 0, 0);
+ this->value[2] = col_type(0, 0, s, 0);
+ this->value[3] = col_type(0, 0, 0, s);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P>::tmat4x4
+ (
+ T const & x0, T const & y0, T const & z0, T const & w0,
+ T const & x1, T const & y1, T const & z1, T const & w1,
+ T const & x2, T const & y2, T const & z2, T const & w2,
+ T const & x3, T const & y3, T const & z3, T const & w3
+ )
+ {
+ this->value[0] = col_type(x0, y0, z0, w0);
+ this->value[1] = col_type(x1, y1, z1, w1);
+ this->value[2] = col_type(x2, y2, z2, w2);
+ this->value[3] = col_type(x3, y3, z3, w3);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P>::tmat4x4
+ (
+ col_type const & v0,
+ col_type const & v1,
+ col_type const & v2,
+ col_type const & v3
+ )
+ {
+ this->value[0] = v0;
+ this->value[1] = v1;
+ this->value[2] = v2;
+ this->value[3] = v3;
+ }
+
+ template <typename T, precision P>
+ template <typename U, precision Q>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P>::tmat4x4
+ (
+ tmat4x4<U, Q> const & m
+ )
+ {
+ this->value[0] = col_type(m[0]);
+ this->value[1] = col_type(m[1]);
+ this->value[2] = col_type(m[2]);
+ this->value[3] = col_type(m[3]);
+ }
+
+ // -- Conversions --
+
+ template <typename T, precision P>
+ template <
+ typename X1, typename Y1, typename Z1, typename W1,
+ typename X2, typename Y2, typename Z2, typename W2,
+ typename X3, typename Y3, typename Z3, typename W3,
+ typename X4, typename Y4, typename Z4, typename W4>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P>::tmat4x4
+ (
+ X1 const & x1, Y1 const & y1, Z1 const & z1, W1 const & w1,
+ X2 const & x2, Y2 const & y2, Z2 const & z2, W2 const & w2,
+ X3 const & x3, Y3 const & y3, Z3 const & z3, W3 const & w3,
+ X4 const & x4, Y4 const & y4, Z4 const & z4, W4 const & w4
+ )
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<X1>::is_iec559 || std::numeric_limits<X1>::is_integer, "*mat4x4 constructor only takes float and integer types, 1st parameter type invalid.");
+ GLM_STATIC_ASSERT(std::numeric_limits<Y1>::is_iec559 || std::numeric_limits<Y1>::is_integer, "*mat4x4 constructor only takes float and integer types, 2nd parameter type invalid.");
+ GLM_STATIC_ASSERT(std::numeric_limits<Z1>::is_iec559 || std::numeric_limits<Z1>::is_integer, "*mat4x4 constructor only takes float and integer types, 3rd parameter type invalid.");
+ GLM_STATIC_ASSERT(std::numeric_limits<W1>::is_iec559 || std::numeric_limits<W1>::is_integer, "*mat4x4 constructor only takes float and integer types, 4th parameter type invalid.");
+
+ GLM_STATIC_ASSERT(std::numeric_limits<X2>::is_iec559 || std::numeric_limits<X2>::is_integer, "*mat4x4 constructor only takes float and integer types, 5th parameter type invalid.");
+ GLM_STATIC_ASSERT(std::numeric_limits<Y2>::is_iec559 || std::numeric_limits<Y2>::is_integer, "*mat4x4 constructor only takes float and integer types, 6th parameter type invalid.");
+ GLM_STATIC_ASSERT(std::numeric_limits<Z2>::is_iec559 || std::numeric_limits<Z2>::is_integer, "*mat4x4 constructor only takes float and integer types, 7th parameter type invalid.");
+ GLM_STATIC_ASSERT(std::numeric_limits<W2>::is_iec559 || std::numeric_limits<W2>::is_integer, "*mat4x4 constructor only takes float and integer types, 8th parameter type invalid.");
+
+ GLM_STATIC_ASSERT(std::numeric_limits<X3>::is_iec559 || std::numeric_limits<X3>::is_integer, "*mat4x4 constructor only takes float and integer types, 9th parameter type invalid.");
+ GLM_STATIC_ASSERT(std::numeric_limits<Y3>::is_iec559 || std::numeric_limits<Y3>::is_integer, "*mat4x4 constructor only takes float and integer types, 10th parameter type invalid.");
+ GLM_STATIC_ASSERT(std::numeric_limits<Z3>::is_iec559 || std::numeric_limits<Z3>::is_integer, "*mat4x4 constructor only takes float and integer types, 11th parameter type invalid.");
+ GLM_STATIC_ASSERT(std::numeric_limits<W3>::is_iec559 || std::numeric_limits<W3>::is_integer, "*mat4x4 constructor only takes float and integer types, 12th parameter type invalid.");
+
+ GLM_STATIC_ASSERT(std::numeric_limits<X4>::is_iec559 || std::numeric_limits<X4>::is_integer, "*mat4x4 constructor only takes float and integer types, 13th parameter type invalid.");
+ GLM_STATIC_ASSERT(std::numeric_limits<Y4>::is_iec559 || std::numeric_limits<Y4>::is_integer, "*mat4x4 constructor only takes float and integer types, 14th parameter type invalid.");
+ GLM_STATIC_ASSERT(std::numeric_limits<Z4>::is_iec559 || std::numeric_limits<Z4>::is_integer, "*mat4x4 constructor only takes float and integer types, 15th parameter type invalid.");
+ GLM_STATIC_ASSERT(std::numeric_limits<W4>::is_iec559 || std::numeric_limits<W4>::is_integer, "*mat4x4 constructor only takes float and integer types, 16th parameter type invalid.");
+
+ this->value[0] = col_type(static_cast<T>(x1), value_type(y1), value_type(z1), value_type(w1));
+ this->value[1] = col_type(static_cast<T>(x2), value_type(y2), value_type(z2), value_type(w2));
+ this->value[2] = col_type(static_cast<T>(x3), value_type(y3), value_type(z3), value_type(w3));
+ this->value[3] = col_type(static_cast<T>(x4), value_type(y4), value_type(z4), value_type(w4));
+ }
+
+ template <typename T, precision P>
+ template <typename V1, typename V2, typename V3, typename V4>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P>::tmat4x4
+ (
+ tvec4<V1, P> const & v1,
+ tvec4<V2, P> const & v2,
+ tvec4<V3, P> const & v3,
+ tvec4<V4, P> const & v4
+ )
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<V1>::is_iec559 || std::numeric_limits<V1>::is_integer, "*mat4x4 constructor only takes float and integer types, 1st parameter type invalid.");
+ GLM_STATIC_ASSERT(std::numeric_limits<V2>::is_iec559 || std::numeric_limits<V2>::is_integer, "*mat4x4 constructor only takes float and integer types, 2nd parameter type invalid.");
+ GLM_STATIC_ASSERT(std::numeric_limits<V3>::is_iec559 || std::numeric_limits<V3>::is_integer, "*mat4x4 constructor only takes float and integer types, 3rd parameter type invalid.");
+ GLM_STATIC_ASSERT(std::numeric_limits<V4>::is_iec559 || std::numeric_limits<V4>::is_integer, "*mat4x4 constructor only takes float and integer types, 4th parameter type invalid.");
+
+ this->value[0] = col_type(v1);
+ this->value[1] = col_type(v2);
+ this->value[2] = col_type(v3);
+ this->value[3] = col_type(v4);
+ }
+
+ // -- Matrix conversions --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P>::tmat4x4(tmat2x2<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0], 0, 0);
+ this->value[1] = col_type(m[1], 0, 0);
+ this->value[2] = col_type(0, 0, 1, 0);
+ this->value[3] = col_type(0, 0, 0, 1);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P>::tmat4x4(tmat3x3<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0], 0);
+ this->value[1] = col_type(m[1], 0);
+ this->value[2] = col_type(m[2], 0);
+ this->value[3] = col_type(0, 0, 0, 1);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P>::tmat4x4(tmat2x3<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0], 0);
+ this->value[1] = col_type(m[1], 0);
+ this->value[2] = col_type(0, 0, 1, 0);
+ this->value[3] = col_type(0, 0, 0, 1);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P>::tmat4x4(tmat3x2<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0], 0, 0);
+ this->value[1] = col_type(m[1], 0, 0);
+ this->value[2] = col_type(m[2], 1, 0);
+ this->value[3] = col_type(0, 0, 0, 1);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P>::tmat4x4(tmat2x4<T, P> const & m)
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ this->value[2] = col_type(0, 0, 1, 0);
+ this->value[3] = col_type(0, 0, 0, 1);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P>::tmat4x4(tmat4x2<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0], 0, 0);
+ this->value[1] = col_type(m[1], 0, 0);
+ this->value[2] = col_type(0, 0, 1, 0);
+ this->value[3] = col_type(0, 0, 0, 1);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P>::tmat4x4(tmat3x4<T, P> const & m)
+ {
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ this->value[2] = m[2];
+ this->value[3] = col_type(0, 0, 0, 1);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P>::tmat4x4(tmat4x3<T, P> const & m)
+ {
+ this->value[0] = col_type(m[0], 0);
+ this->value[1] = col_type(m[1], 0);
+ this->value[2] = col_type(m[2], 0);
+ this->value[3] = col_type(m[3], 1);
+ }
+
+ // -- Accesses --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tmat4x4<T, P>::length_type tmat4x4<T, P>::length() const
+ {
+ return 4;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER typename tmat4x4<T, P>::col_type & tmat4x4<T, P>::operator[](typename tmat4x4<T, P>::length_type i)
+ {
+ assert(i < this->length());
+ return this->value[i];
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER typename tmat4x4<T, P>::col_type const & tmat4x4<T, P>::operator[](typename tmat4x4<T, P>::length_type i) const
+ {
+ assert(i < this->length());
+ return this->value[i];
+ }
+
+ // -- Unary arithmetic operators --
+
+# if !GLM_HAS_DEFAULTED_FUNCTIONS
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P>& tmat4x4<T, P>::operator=(tmat4x4<T, P> const & m)
+ {
+ //memcpy could be faster
+ //memcpy(&this->value, &m.value, 16 * sizeof(valType));
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ this->value[2] = m[2];
+ this->value[3] = m[3];
+ return *this;
+ }
+# endif//!GLM_HAS_DEFAULTED_FUNCTIONS
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P>& tmat4x4<T, P>::operator=(tmat4x4<U, P> const & m)
+ {
+ //memcpy could be faster
+ //memcpy(&this->value, &m.value, 16 * sizeof(valType));
+ this->value[0] = m[0];
+ this->value[1] = m[1];
+ this->value[2] = m[2];
+ this->value[3] = m[3];
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P>& tmat4x4<T, P>::operator+=(U s)
+ {
+ this->value[0] += s;
+ this->value[1] += s;
+ this->value[2] += s;
+ this->value[3] += s;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P>& tmat4x4<T, P>::operator+=(tmat4x4<U, P> const & m)
+ {
+ this->value[0] += m[0];
+ this->value[1] += m[1];
+ this->value[2] += m[2];
+ this->value[3] += m[3];
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> & tmat4x4<T, P>::operator-=(U s)
+ {
+ this->value[0] -= s;
+ this->value[1] -= s;
+ this->value[2] -= s;
+ this->value[3] -= s;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> & tmat4x4<T, P>::operator-=(tmat4x4<U, P> const & m)
+ {
+ this->value[0] -= m[0];
+ this->value[1] -= m[1];
+ this->value[2] -= m[2];
+ this->value[3] -= m[3];
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> & tmat4x4<T, P>::operator*=(U s)
+ {
+ this->value[0] *= s;
+ this->value[1] *= s;
+ this->value[2] *= s;
+ this->value[3] *= s;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> & tmat4x4<T, P>::operator*=(tmat4x4<U, P> const & m)
+ {
+ return (*this = *this * m);
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> & tmat4x4<T, P>::operator/=(U s)
+ {
+ this->value[0] /= s;
+ this->value[1] /= s;
+ this->value[2] /= s;
+ this->value[3] /= s;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> & tmat4x4<T, P>::operator/=(tmat4x4<U, P> const & m)
+ {
+ return *this *= inverse(m);
+ }
+
+ // -- Increment and decrement operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> & tmat4x4<T, P>::operator++()
+ {
+ ++this->value[0];
+ ++this->value[1];
+ ++this->value[2];
+ ++this->value[3];
+ return *this;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> & tmat4x4<T, P>::operator--()
+ {
+ --this->value[0];
+ --this->value[1];
+ --this->value[2];
+ --this->value[3];
+ return *this;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> tmat4x4<T, P>::operator++(int)
+ {
+ tmat4x4<T, P> Result(*this);
+ ++*this;
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> tmat4x4<T, P>::operator--(int)
+ {
+ tmat4x4<T, P> Result(*this);
+ --*this;
+ return Result;
+ }
+
+ // -- Unary constant operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> operator+(tmat4x4<T, P> const & m)
+ {
+ return m;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> operator-(tmat4x4<T, P> const & m)
+ {
+ return tmat4x4<T, P>(
+ -m[0],
+ -m[1],
+ -m[2],
+ -m[3]);
+ }
+
+ // -- Binary arithmetic operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> operator+(tmat4x4<T, P> const & m, T const & s)
+ {
+ return tmat4x4<T, P>(
+ m[0] + s,
+ m[1] + s,
+ m[2] + s,
+ m[3] + s);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> operator+(T const & s, tmat4x4<T, P> const & m)
+ {
+ return tmat4x4<T, P>(
+ m[0] + s,
+ m[1] + s,
+ m[2] + s,
+ m[3] + s);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> operator+(tmat4x4<T, P> const & m1, tmat4x4<T, P> const & m2)
+ {
+ return tmat4x4<T, P>(
+ m1[0] + m2[0],
+ m1[1] + m2[1],
+ m1[2] + m2[2],
+ m1[3] + m2[3]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> operator-(tmat4x4<T, P> const & m, T const & s)
+ {
+ return tmat4x4<T, P>(
+ m[0] - s,
+ m[1] - s,
+ m[2] - s,
+ m[3] - s);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> operator-(T const & s, tmat4x4<T, P> const & m)
+ {
+ return tmat4x4<T, P>(
+ s - m[0],
+ s - m[1],
+ s - m[2],
+ s - m[3]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> operator-(tmat4x4<T, P> const & m1, tmat4x4<T, P> const & m2)
+ {
+ return tmat4x4<T, P>(
+ m1[0] - m2[0],
+ m1[1] - m2[1],
+ m1[2] - m2[2],
+ m1[3] - m2[3]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> operator*(tmat4x4<T, P> const & m, T const & s)
+ {
+ return tmat4x4<T, P>(
+ m[0] * s,
+ m[1] * s,
+ m[2] * s,
+ m[3] * s);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> operator*(T const & s, tmat4x4<T, P> const & m)
+ {
+ return tmat4x4<T, P>(
+ m[0] * s,
+ m[1] * s,
+ m[2] * s,
+ m[3] * s);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER typename tmat4x4<T, P>::col_type operator*
+ (
+ tmat4x4<T, P> const & m,
+ typename tmat4x4<T, P>::row_type const & v
+ )
+ {
+/*
+ __m128 v0 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 v1 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(1, 1, 1, 1));
+ __m128 v2 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(2, 2, 2, 2));
+ __m128 v3 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(3, 3, 3, 3));
+
+ __m128 m0 = _mm_mul_ps(m[0].data, v0);
+ __m128 m1 = _mm_mul_ps(m[1].data, v1);
+ __m128 a0 = _mm_add_ps(m0, m1);
+
+ __m128 m2 = _mm_mul_ps(m[2].data, v2);
+ __m128 m3 = _mm_mul_ps(m[3].data, v3);
+ __m128 a1 = _mm_add_ps(m2, m3);
+
+ __m128 a2 = _mm_add_ps(a0, a1);
+
+ return typename tmat4x4<T, P>::col_type(a2);
+*/
+
+ typename tmat4x4<T, P>::col_type const Mov0(v[0]);
+ typename tmat4x4<T, P>::col_type const Mov1(v[1]);
+ typename tmat4x4<T, P>::col_type const Mul0 = m[0] * Mov0;
+ typename tmat4x4<T, P>::col_type const Mul1 = m[1] * Mov1;
+ typename tmat4x4<T, P>::col_type const Add0 = Mul0 + Mul1;
+ typename tmat4x4<T, P>::col_type const Mov2(v[2]);
+ typename tmat4x4<T, P>::col_type const Mov3(v[3]);
+ typename tmat4x4<T, P>::col_type const Mul2 = m[2] * Mov2;
+ typename tmat4x4<T, P>::col_type const Mul3 = m[3] * Mov3;
+ typename tmat4x4<T, P>::col_type const Add1 = Mul2 + Mul3;
+ typename tmat4x4<T, P>::col_type const Add2 = Add0 + Add1;
+ return Add2;
+
+/*
+ return typename tmat4x4<T, P>::col_type(
+ m[0][0] * v[0] + m[1][0] * v[1] + m[2][0] * v[2] + m[3][0] * v[3],
+ m[0][1] * v[0] + m[1][1] * v[1] + m[2][1] * v[2] + m[3][1] * v[3],
+ m[0][2] * v[0] + m[1][2] * v[1] + m[2][2] * v[2] + m[3][2] * v[3],
+ m[0][3] * v[0] + m[1][3] * v[1] + m[2][3] * v[2] + m[3][3] * v[3]);
+*/
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER typename tmat4x4<T, P>::row_type operator*
+ (
+ typename tmat4x4<T, P>::col_type const & v,
+ tmat4x4<T, P> const & m
+ )
+ {
+ return typename tmat4x4<T, P>::row_type(
+ m[0][0] * v[0] + m[0][1] * v[1] + m[0][2] * v[2] + m[0][3] * v[3],
+ m[1][0] * v[0] + m[1][1] * v[1] + m[1][2] * v[2] + m[1][3] * v[3],
+ m[2][0] * v[0] + m[2][1] * v[1] + m[2][2] * v[2] + m[2][3] * v[3],
+ m[3][0] * v[0] + m[3][1] * v[1] + m[3][2] * v[2] + m[3][3] * v[3]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x4<T, P> operator*(tmat4x4<T, P> const & m1, tmat2x4<T, P> const & m2)
+ {
+ return tmat2x4<T, P>(
+ m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3],
+ m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3],
+ m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2] + m1[3][2] * m2[0][3],
+ m1[0][3] * m2[0][0] + m1[1][3] * m2[0][1] + m1[2][3] * m2[0][2] + m1[3][3] * m2[0][3],
+ m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3],
+ m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3],
+ m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2] + m1[3][2] * m2[1][3],
+ m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1] + m1[2][3] * m2[1][2] + m1[3][3] * m2[1][3]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x4<T, P> operator*(tmat4x4<T, P> const & m1, tmat3x4<T, P> const & m2)
+ {
+ return tmat3x4<T, P>(
+ m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3],
+ m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3],
+ m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2] + m1[3][2] * m2[0][3],
+ m1[0][3] * m2[0][0] + m1[1][3] * m2[0][1] + m1[2][3] * m2[0][2] + m1[3][3] * m2[0][3],
+ m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3],
+ m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3],
+ m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2] + m1[3][2] * m2[1][3],
+ m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1] + m1[2][3] * m2[1][2] + m1[3][3] * m2[1][3],
+ m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2] + m1[3][0] * m2[2][3],
+ m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2] + m1[3][1] * m2[2][3],
+ m1[0][2] * m2[2][0] + m1[1][2] * m2[2][1] + m1[2][2] * m2[2][2] + m1[3][2] * m2[2][3],
+ m1[0][3] * m2[2][0] + m1[1][3] * m2[2][1] + m1[2][3] * m2[2][2] + m1[3][3] * m2[2][3]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> operator*(tmat4x4<T, P> const & m1, tmat4x4<T, P> const & m2)
+ {
+ typename tmat4x4<T, P>::col_type const SrcA0 = m1[0];
+ typename tmat4x4<T, P>::col_type const SrcA1 = m1[1];
+ typename tmat4x4<T, P>::col_type const SrcA2 = m1[2];
+ typename tmat4x4<T, P>::col_type const SrcA3 = m1[3];
+
+ typename tmat4x4<T, P>::col_type const SrcB0 = m2[0];
+ typename tmat4x4<T, P>::col_type const SrcB1 = m2[1];
+ typename tmat4x4<T, P>::col_type const SrcB2 = m2[2];
+ typename tmat4x4<T, P>::col_type const SrcB3 = m2[3];
+
+ tmat4x4<T, P> Result(uninitialize);
+ Result[0] = SrcA0 * SrcB0[0] + SrcA1 * SrcB0[1] + SrcA2 * SrcB0[2] + SrcA3 * SrcB0[3];
+ Result[1] = SrcA0 * SrcB1[0] + SrcA1 * SrcB1[1] + SrcA2 * SrcB1[2] + SrcA3 * SrcB1[3];
+ Result[2] = SrcA0 * SrcB2[0] + SrcA1 * SrcB2[1] + SrcA2 * SrcB2[2] + SrcA3 * SrcB2[3];
+ Result[3] = SrcA0 * SrcB3[0] + SrcA1 * SrcB3[1] + SrcA2 * SrcB3[2] + SrcA3 * SrcB3[3];
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> operator/(tmat4x4<T, P> const & m, T const & s)
+ {
+ return tmat4x4<T, P>(
+ m[0] / s,
+ m[1] / s,
+ m[2] / s,
+ m[3] / s);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> operator/(T const & s, tmat4x4<T, P> const & m)
+ {
+ return tmat4x4<T, P>(
+ s / m[0],
+ s / m[1],
+ s / m[2],
+ s / m[3]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER typename tmat4x4<T, P>::col_type operator/(tmat4x4<T, P> const & m, typename tmat4x4<T, P>::row_type const & v)
+ {
+ return inverse(m) * v;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER typename tmat4x4<T, P>::row_type operator/(typename tmat4x4<T, P>::col_type const & v, tmat4x4<T, P> const & m)
+ {
+ return v * inverse(m);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> operator/(tmat4x4<T, P> const & m1, tmat4x4<T, P> const & m2)
+ {
+ tmat4x4<T, P> m1_copy(m1);
+ return m1_copy /= m2;
+ }
+
+ // -- Boolean operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER bool operator==(tmat4x4<T, P> const & m1, tmat4x4<T, P> const & m2)
+ {
+ return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]) && (m1[3] == m2[3]);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER bool operator!=(tmat4x4<T, P> const & m1, tmat4x4<T, P> const & m2)
+ {
+ return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]) || (m1[3] != m2[3]);
+ }
+}//namespace glm
+
+#if GLM_ARCH != GLM_ARCH_PURE
+# include "type_mat4x4_simd.inl"
+#endif
diff --git a/src/third_party/glm/glm/detail/type_mat4x4_simd.inl b/src/third_party/glm/glm/detail/type_mat4x4_simd.inl
new file mode 100644
index 0000000..09d0b1f
--- /dev/null
+++ b/src/third_party/glm/glm/detail/type_mat4x4_simd.inl
@@ -0,0 +1,7 @@
+/// @ref core
+/// @file glm/detail/type_mat4x4_sse2.inl
+
+namespace glm
+{
+
+}//namespace glm
diff --git a/src/third_party/glm/glm/detail/type_vec.hpp b/src/third_party/glm/glm/detail/type_vec.hpp
new file mode 100644
index 0000000..7849db6
--- /dev/null
+++ b/src/third_party/glm/glm/detail/type_vec.hpp
@@ -0,0 +1,576 @@
+/// @ref core
+/// @file glm/detail/type_vec.hpp
+
+#pragma once
+
+#include "precision.hpp"
+#include "type_int.hpp"
+
+namespace glm{
+namespace detail
+{
+ template <typename T, std::size_t size, bool aligned>
+ struct storage
+ {
+ typedef struct type {
+ uint8 data[size];
+ } type;
+ };
+
+ #define GLM_ALIGNED_STORAGE_TYPE_STRUCT(x) \
+ template <typename T> \
+ struct storage<T, x, true> { \
+ GLM_ALIGNED_STRUCT(x) type { \
+ uint8 data[x]; \
+ }; \
+ };
+
+ GLM_ALIGNED_STORAGE_TYPE_STRUCT(1)
+ GLM_ALIGNED_STORAGE_TYPE_STRUCT(2)
+ GLM_ALIGNED_STORAGE_TYPE_STRUCT(4)
+ GLM_ALIGNED_STORAGE_TYPE_STRUCT(8)
+ GLM_ALIGNED_STORAGE_TYPE_STRUCT(16)
+ GLM_ALIGNED_STORAGE_TYPE_STRUCT(32)
+ GLM_ALIGNED_STORAGE_TYPE_STRUCT(64)
+
+# if GLM_ARCH & GLM_ARCH_SSE2_BIT
+ template <>
+ struct storage<float, 16, true>
+ {
+ typedef glm_vec4 type;
+ };
+
+ template <>
+ struct storage<int, 16, true>
+ {
+ typedef glm_ivec4 type;
+ };
+
+ template <>
+ struct storage<unsigned int, 16, true>
+ {
+ typedef glm_uvec4 type;
+ };
+/*
+# else
+ typedef union __declspec(align(16)) glm_128
+ {
+ unsigned __int8 data[16];
+ } glm_128;
+
+ template <>
+ struct storage<float, 16, true>
+ {
+ typedef glm_128 type;
+ };
+
+ template <>
+ struct storage<int, 16, true>
+ {
+ typedef glm_128 type;
+ };
+
+ template <>
+ struct storage<unsigned int, 16, true>
+ {
+ typedef glm_128 type;
+ };
+*/
+# endif
+
+# if (GLM_ARCH & GLM_ARCH_AVX_BIT)
+ template <>
+ struct storage<double, 32, true>
+ {
+ typedef glm_dvec4 type;
+ };
+# endif
+
+# if (GLM_ARCH & GLM_ARCH_AVX2_BIT)
+ template <>
+ struct storage<int64, 32, true>
+ {
+ typedef glm_i64vec4 type;
+ };
+
+ template <>
+ struct storage<uint64, 32, true>
+ {
+ typedef glm_u64vec4 type;
+ };
+# endif
+}//namespace detail
+
+ template <typename T, precision P> struct tvec1;
+ template <typename T, precision P> struct tvec2;
+ template <typename T, precision P> struct tvec3;
+ template <typename T, precision P> struct tvec4;
+
+ typedef tvec1<float, highp> highp_vec1_t;
+ typedef tvec1<float, mediump> mediump_vec1_t;
+ typedef tvec1<float, lowp> lowp_vec1_t;
+ typedef tvec1<double, highp> highp_dvec1_t;
+ typedef tvec1<double, mediump> mediump_dvec1_t;
+ typedef tvec1<double, lowp> lowp_dvec1_t;
+ typedef tvec1<int, highp> highp_ivec1_t;
+ typedef tvec1<int, mediump> mediump_ivec1_t;
+ typedef tvec1<int, lowp> lowp_ivec1_t;
+ typedef tvec1<uint, highp> highp_uvec1_t;
+ typedef tvec1<uint, mediump> mediump_uvec1_t;
+ typedef tvec1<uint, lowp> lowp_uvec1_t;
+ typedef tvec1<bool, highp> highp_bvec1_t;
+ typedef tvec1<bool, mediump> mediump_bvec1_t;
+ typedef tvec1<bool, lowp> lowp_bvec1_t;
+
+ /// @addtogroup core_precision
+ /// @{
+
+ /// 2 components vector of high single-precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tvec2<float, highp> highp_vec2;
+
+ /// 2 components vector of medium single-precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tvec2<float, mediump> mediump_vec2;
+
+ /// 2 components vector of low single-precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tvec2<float, lowp> lowp_vec2;
+
+ /// 2 components vector of high double-precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tvec2<double, highp> highp_dvec2;
+
+ /// 2 components vector of medium double-precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tvec2<double, mediump> mediump_dvec2;
+
+ /// 2 components vector of low double-precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tvec2<double, lowp> lowp_dvec2;
+
+ /// 2 components vector of high precision signed integer numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tvec2<int, highp> highp_ivec2;
+
+ /// 2 components vector of medium precision signed integer numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tvec2<int, mediump> mediump_ivec2;
+
+ /// 2 components vector of low precision signed integer numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tvec2<int, lowp> lowp_ivec2;
+
+ /// 2 components vector of high precision unsigned integer numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tvec2<uint, highp> highp_uvec2;
+
+ /// 2 components vector of medium precision unsigned integer numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tvec2<uint, mediump> mediump_uvec2;
+
+ /// 2 components vector of low precision unsigned integer numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tvec2<uint, lowp> lowp_uvec2;
+
+ /// 2 components vector of high precision bool numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tvec2<bool, highp> highp_bvec2;
+
+ /// 2 components vector of medium precision bool numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tvec2<bool, mediump> mediump_bvec2;
+
+ /// 2 components vector of low precision bool numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tvec2<bool, lowp> lowp_bvec2;
+
+ /// @}
+
+ /// @addtogroup core_precision
+ /// @{
+
+ /// 3 components vector of high single-precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tvec3<float, highp> highp_vec3;
+
+ /// 3 components vector of medium single-precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tvec3<float, mediump> mediump_vec3;
+
+ /// 3 components vector of low single-precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tvec3<float, lowp> lowp_vec3;
+
+ /// 3 components vector of high double-precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tvec3<double, highp> highp_dvec3;
+
+ /// 3 components vector of medium double-precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tvec3<double, mediump> mediump_dvec3;
+
+ /// 3 components vector of low double-precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tvec3<double, lowp> lowp_dvec3;
+
+ /// 3 components vector of high precision signed integer numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tvec3<int, highp> highp_ivec3;
+
+ /// 3 components vector of medium precision signed integer numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tvec3<int, mediump> mediump_ivec3;
+
+ /// 3 components vector of low precision signed integer numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tvec3<int, lowp> lowp_ivec3;
+
+ /// 3 components vector of high precision unsigned integer numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tvec3<uint, highp> highp_uvec3;
+
+ /// 3 components vector of medium precision unsigned integer numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tvec3<uint, mediump> mediump_uvec3;
+
+ /// 3 components vector of low precision unsigned integer numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tvec3<uint, lowp> lowp_uvec3;
+
+ /// 3 components vector of high precision bool numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tvec3<bool, highp> highp_bvec3;
+
+ /// 3 components vector of medium precision bool numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tvec3<bool, mediump> mediump_bvec3;
+
+ /// 3 components vector of low precision bool numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tvec3<bool, lowp> lowp_bvec3;
+
+ /// @}
+
+ /// @addtogroup core_precision
+ /// @{
+
+ /// 4 components vector of high single-precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tvec4<float, highp> highp_vec4;
+
+ /// 4 components vector of medium single-precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tvec4<float, mediump> mediump_vec4;
+
+ /// 4 components vector of low single-precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tvec4<float, lowp> lowp_vec4;
+
+ /// 4 components vector of high double-precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tvec4<double, highp> highp_dvec4;
+
+ /// 4 components vector of medium double-precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tvec4<double, mediump> mediump_dvec4;
+
+ /// 4 components vector of low double-precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tvec4<double, lowp> lowp_dvec4;
+
+ /// 4 components vector of high precision signed integer numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tvec4<int, highp> highp_ivec4;
+
+ /// 4 components vector of medium precision signed integer numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tvec4<int, mediump> mediump_ivec4;
+
+ /// 4 components vector of low precision signed integer numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tvec4<int, lowp> lowp_ivec4;
+
+ /// 4 components vector of high precision unsigned integer numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tvec4<uint, highp> highp_uvec4;
+
+ /// 4 components vector of medium precision unsigned integer numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tvec4<uint, mediump> mediump_uvec4;
+
+ /// 4 components vector of low precision unsigned integer numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tvec4<uint, lowp> lowp_uvec4;
+
+ /// 4 components vector of high precision bool numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tvec4<bool, highp> highp_bvec4;
+
+ /// 4 components vector of medium precision bool numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tvec4<bool, mediump> mediump_bvec4;
+
+ /// 4 components vector of low precision bool numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tvec4<bool, lowp> lowp_bvec4;
+
+ /// @}
+
+ /// @addtogroup core_types
+ /// @{
+
+ // -- Default float definition --
+
+#if(defined(GLM_PRECISION_LOWP_FLOAT))
+ typedef lowp_vec2 vec2;
+ typedef lowp_vec3 vec3;
+ typedef lowp_vec4 vec4;
+#elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))
+ typedef mediump_vec2 vec2;
+ typedef mediump_vec3 vec3;
+ typedef mediump_vec4 vec4;
+#else //defined(GLM_PRECISION_HIGHP_FLOAT)
+ /// 2 components vector of floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ typedef highp_vec2 vec2;
+
+ //! 3 components vector of floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ typedef highp_vec3 vec3;
+
+ //! 4 components vector of floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ typedef highp_vec4 vec4;
+#endif//GLM_PRECISION
+
+ // -- Default double definition --
+
+#if(defined(GLM_PRECISION_LOWP_DOUBLE))
+ typedef lowp_dvec2 dvec2;
+ typedef lowp_dvec3 dvec3;
+ typedef lowp_dvec4 dvec4;
+#elif(defined(GLM_PRECISION_MEDIUMP_DOUBLE))
+ typedef mediump_dvec2 dvec2;
+ typedef mediump_dvec3 dvec3;
+ typedef mediump_dvec4 dvec4;
+#else //defined(GLM_PRECISION_HIGHP_DOUBLE)
+ /// 2 components vector of double-precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ typedef highp_dvec2 dvec2;
+
+ //! 3 components vector of double-precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ typedef highp_dvec3 dvec3;
+
+ //! 4 components vector of double-precision floating-point numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ typedef highp_dvec4 dvec4;
+#endif//GLM_PRECISION
+
+ // -- Signed integer definition --
+
+#if(defined(GLM_PRECISION_LOWP_INT))
+ typedef lowp_ivec2 ivec2;
+ typedef lowp_ivec3 ivec3;
+ typedef lowp_ivec4 ivec4;
+#elif(defined(GLM_PRECISION_MEDIUMP_INT))
+ typedef mediump_ivec2 ivec2;
+ typedef mediump_ivec3 ivec3;
+ typedef mediump_ivec4 ivec4;
+#else //defined(GLM_PRECISION_HIGHP_INT)
+ /// 2 components vector of signed integer numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ typedef highp_ivec2 ivec2;
+
+ /// 3 components vector of signed integer numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ typedef highp_ivec3 ivec3;
+
+ /// 4 components vector of signed integer numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ typedef highp_ivec4 ivec4;
+#endif//GLM_PRECISION
+
+ // -- Unsigned integer definition --
+
+#if(defined(GLM_PRECISION_LOWP_UINT))
+ typedef lowp_uvec2 uvec2;
+ typedef lowp_uvec3 uvec3;
+ typedef lowp_uvec4 uvec4;
+#elif(defined(GLM_PRECISION_MEDIUMP_UINT))
+ typedef mediump_uvec2 uvec2;
+ typedef mediump_uvec3 uvec3;
+ typedef mediump_uvec4 uvec4;
+#else //defined(GLM_PRECISION_HIGHP_UINT)
+ /// 2 components vector of unsigned integer numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ typedef highp_uvec2 uvec2;
+
+ /// 3 components vector of unsigned integer numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ typedef highp_uvec3 uvec3;
+
+ /// 4 components vector of unsigned integer numbers.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ typedef highp_uvec4 uvec4;
+#endif//GLM_PRECISION
+
+ // -- Boolean definition --
+
+#if(defined(GLM_PRECISION_LOWP_BOOL))
+ typedef lowp_bvec2 bvec2;
+ typedef lowp_bvec3 bvec3;
+ typedef lowp_bvec4 bvec4;
+#elif(defined(GLM_PRECISION_MEDIUMP_BOOL))
+ typedef mediump_bvec2 bvec2;
+ typedef mediump_bvec3 bvec3;
+ typedef mediump_bvec4 bvec4;
+#else //defined(GLM_PRECISION_HIGHP_BOOL)
+ /// 2 components vector of boolean.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ typedef highp_bvec2 bvec2;
+
+ /// 3 components vector of boolean.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ typedef highp_bvec3 bvec3;
+
+ /// 4 components vector of boolean.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
+ typedef highp_bvec4 bvec4;
+#endif//GLM_PRECISION
+
+ /// @}
+}//namespace glm
diff --git a/src/third_party/glm/glm/detail/type_vec.inl b/src/third_party/glm/glm/detail/type_vec.inl
new file mode 100644
index 0000000..2238a1b
--- /dev/null
+++ b/src/third_party/glm/glm/detail/type_vec.inl
@@ -0,0 +1,2 @@
+/// @ref core
+/// @file glm/detail/type_vec.inl
diff --git a/src/third_party/glm/glm/detail/type_vec1.hpp b/src/third_party/glm/glm/detail/type_vec1.hpp
new file mode 100644
index 0000000..dd673a7
--- /dev/null
+++ b/src/third_party/glm/glm/detail/type_vec1.hpp
@@ -0,0 +1,299 @@
+/// @ref core
+/// @file glm/detail/type_vec1.hpp
+
+#pragma once
+
+#include "../fwd.hpp"
+#include "type_vec.hpp"
+#if GLM_SWIZZLE == GLM_SWIZZLE_ENABLED
+# if GLM_HAS_UNRESTRICTED_UNIONS
+# include "_swizzle.hpp"
+# else
+# include "_swizzle_func.hpp"
+# endif
+#endif //GLM_SWIZZLE
+#include <cstddef>
+
+namespace glm
+{
+ template <typename T, precision P = defaultp>
+ struct tvec1
+ {
+ // -- Implementation detail --
+
+ typedef T value_type;
+ typedef tvec1<T, P> type;
+ typedef tvec1<bool, P> bool_type;
+
+ // -- Data --
+
+# if GLM_HAS_ALIGNED_TYPE
+# if GLM_COMPILER & GLM_COMPILER_GCC
+# pragma GCC diagnostic push
+# pragma GCC diagnostic ignored "-Wpedantic"
+# endif
+# if GLM_COMPILER & GLM_COMPILER_CLANG
+# pragma clang diagnostic push
+# pragma clang diagnostic ignored "-Wgnu-anonymous-struct"
+# pragma clang diagnostic ignored "-Wnested-anon-types"
+# endif
+
+ union
+ {
+ T x;
+ T r;
+ T s;
+/*
+# if GLM_SWIZZLE == GLM_SWIZZLE_ENABLED
+ _GLM_SWIZZLE1_2_MEMBERS(T, P, tvec2, x)
+ _GLM_SWIZZLE1_2_MEMBERS(T, P, tvec2, r)
+ _GLM_SWIZZLE1_2_MEMBERS(T, P, tvec2, s)
+ _GLM_SWIZZLE1_3_MEMBERS(T, P, tvec3, x)
+ _GLM_SWIZZLE1_3_MEMBERS(T, P, tvec3, r)
+ _GLM_SWIZZLE1_3_MEMBERS(T, P, tvec3, s)
+ _GLM_SWIZZLE1_4_MEMBERS(T, P, tvec4, x)
+ _GLM_SWIZZLE1_4_MEMBERS(T, P, tvec4, r)
+ _GLM_SWIZZLE1_4_MEMBERS(T, P, tvec4, s)
+# endif//GLM_SWIZZLE*/
+ };
+
+# if GLM_COMPILER & GLM_COMPILER_CLANG
+# pragma clang diagnostic pop
+# endif
+# if GLM_COMPILER & GLM_COMPILER_GCC
+# pragma GCC diagnostic pop
+# endif
+# else
+ union {T x, r, s;};
+/*
+# if GLM_SWIZZLE == GLM_SWIZZLE_ENABLED
+ GLM_SWIZZLE_GEN_VEC_FROM_VEC1(T, P, tvec2, tvec2, tvec3, tvec4)
+# endif//GLM_SWIZZLE*/
+# endif
+
+ // -- Component accesses --
+
+ /// Return the count of components of the vector
+ typedef length_t length_type;
+ GLM_FUNC_DECL GLM_CONSTEXPR length_type length() const;
+
+ GLM_FUNC_DECL T & operator[](length_type i);
+ GLM_FUNC_DECL T const & operator[](length_type i) const;
+
+ // -- Implicit basic constructors --
+
+ GLM_FUNC_DECL GLM_CONSTEXPR tvec1() GLM_DEFAULT_CTOR;
+ GLM_FUNC_DECL GLM_CONSTEXPR tvec1(tvec1<T, P> const & v) GLM_DEFAULT;
+ template <precision Q>
+ GLM_FUNC_DECL GLM_CONSTEXPR tvec1(tvec1<T, Q> const & v);
+
+ // -- Explicit basic constructors --
+
+ GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tvec1(ctor);
+ GLM_FUNC_DECL GLM_CONSTEXPR explicit tvec1(T scalar);
+
+ // -- Conversion vector constructors --
+
+ /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename U, precision Q>
+ GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT tvec1(tvec2<U, Q> const & v);
+ /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename U, precision Q>
+ GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT tvec1(tvec3<U, Q> const & v);
+ /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename U, precision Q>
+ GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT tvec1(tvec4<U, Q> const & v);
+
+ /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename U, precision Q>
+ GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT tvec1(tvec1<U, Q> const & v);
+
+ // -- Swizzle constructors --
+/*
+# if(GLM_HAS_UNRESTRICTED_UNIONS && (GLM_SWIZZLE == GLM_SWIZZLE_ENABLED))
+ template <int E0>
+ GLM_FUNC_DECL tvec1(detail::_swizzle<1, T, P, tvec1, E0, -1,-2,-3> const & that)
+ {
+ *this = that();
+ }
+# endif//(GLM_HAS_UNRESTRICTED_UNIONS && (GLM_SWIZZLE == GLM_SWIZZLE_ENABLED))
+*/
+ // -- Unary arithmetic operators --
+
+ GLM_FUNC_DECL tvec1<T, P> & operator=(tvec1<T, P> const & v) GLM_DEFAULT;
+
+ template <typename U>
+ GLM_FUNC_DECL tvec1<T, P> & operator=(tvec1<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec1<T, P> & operator+=(U scalar);
+ template <typename U>
+ GLM_FUNC_DECL tvec1<T, P> & operator+=(tvec1<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec1<T, P> & operator-=(U scalar);
+ template <typename U>
+ GLM_FUNC_DECL tvec1<T, P> & operator-=(tvec1<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec1<T, P> & operator*=(U scalar);
+ template <typename U>
+ GLM_FUNC_DECL tvec1<T, P> & operator*=(tvec1<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec1<T, P> & operator/=(U scalar);
+ template <typename U>
+ GLM_FUNC_DECL tvec1<T, P> & operator/=(tvec1<U, P> const & v);
+
+ // -- Increment and decrement operators --
+
+ GLM_FUNC_DECL tvec1<T, P> & operator++();
+ GLM_FUNC_DECL tvec1<T, P> & operator--();
+ GLM_FUNC_DECL tvec1<T, P> operator++(int);
+ GLM_FUNC_DECL tvec1<T, P> operator--(int);
+
+ // -- Unary bit operators --
+
+ template <typename U>
+ GLM_FUNC_DECL tvec1<T, P> & operator%=(U scalar);
+ template <typename U>
+ GLM_FUNC_DECL tvec1<T, P> & operator%=(tvec1<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec1<T, P> & operator&=(U scalar);
+ template <typename U>
+ GLM_FUNC_DECL tvec1<T, P> & operator&=(tvec1<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec1<T, P> & operator|=(U scalar);
+ template <typename U>
+ GLM_FUNC_DECL tvec1<T, P> & operator|=(tvec1<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec1<T, P> & operator^=(U scalar);
+ template <typename U>
+ GLM_FUNC_DECL tvec1<T, P> & operator^=(tvec1<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec1<T, P> & operator<<=(U scalar);
+ template <typename U>
+ GLM_FUNC_DECL tvec1<T, P> & operator<<=(tvec1<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec1<T, P> & operator>>=(U scalar);
+ template <typename U>
+ GLM_FUNC_DECL tvec1<T, P> & operator>>=(tvec1<U, P> const & v);
+ };
+
+ // -- Unary operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec1<T, P> operator+(tvec1<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec1<T, P> operator-(tvec1<T, P> const & v);
+
+ // -- Binary operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec1<T, P> operator+(tvec1<T, P> const & v, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec1<T, P> operator+(T scalar, tvec1<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec1<T, P> operator+(tvec1<T, P> const & v1, tvec1<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec1<T, P> operator-(tvec1<T, P> const & v, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec1<T, P> operator-(T scalar, tvec1<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec1<T, P> operator- (tvec1<T, P> const & v1, tvec1<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec1<T, P> operator*(tvec1<T, P> const & v, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec1<T, P> operator*(T scalar, tvec1<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec1<T, P> operator*(tvec1<T, P> const & v1, tvec1<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec1<T, P> operator/(tvec1<T, P> const & v, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec1<T, P> operator/(T scalar, tvec1<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec1<T, P> operator/(tvec1<T, P> const & v1, tvec1<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec1<T, P> operator%(tvec1<T, P> const & v, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec1<T, P> operator%(T scalar, tvec1<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec1<T, P> operator%(tvec1<T, P> const & v1, tvec1<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec1<T, P> operator&(tvec1<T, P> const & v, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec1<T, P> operator&(T scalar, tvec1<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec1<T, P> operator&(tvec1<T, P> const & v1, tvec1<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec1<T, P> operator|(tvec1<T, P> const & v, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec1<T, P> operator|(T scalar, tvec1<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec1<T, P> operator|(tvec1<T, P> const & v1, tvec1<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec1<T, P> operator^(tvec1<T, P> const & v, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec1<T, P> operator^(T scalar, tvec1<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec1<T, P> operator^(tvec1<T, P> const & v1, tvec1<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec1<T, P> operator<<(tvec1<T, P> const & v, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec1<T, P> operator<<(T scalar, tvec1<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec1<T, P> operator<<(tvec1<T, P> const & v1, tvec1<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec1<T, P> operator>>(tvec1<T, P> const & v, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec1<T, P> operator>>(T scalar, tvec1<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec1<T, P> operator>>(tvec1<T, P> const & v1, tvec1<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec1<T, P> operator~(tvec1<T, P> const & v);
+
+ // -- Boolean operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL bool operator==(tvec1<T, P> const & v1, tvec1<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL bool operator!=(tvec1<T, P> const & v1, tvec1<T, P> const & v2);
+
+ template <precision P>
+ GLM_FUNC_DECL tvec1<bool, P> operator&&(tvec1<bool, P> const & v1, tvec1<bool, P> const & v2);
+
+ template <precision P>
+ GLM_FUNC_DECL tvec1<bool, P> operator||(tvec1<bool, P> const & v1, tvec1<bool, P> const & v2);
+}//namespace glm
+
+#ifndef GLM_EXTERNAL_TEMPLATE
+#include "type_vec1.inl"
+#endif//GLM_EXTERNAL_TEMPLATE
diff --git a/src/third_party/glm/glm/detail/type_vec1.inl b/src/third_party/glm/glm/detail/type_vec1.inl
new file mode 100644
index 0000000..56f6b25
--- /dev/null
+++ b/src/third_party/glm/glm/detail/type_vec1.inl
@@ -0,0 +1,564 @@
+/// @ref core
+/// @file glm/detail/type_vec1.inl
+
+namespace glm
+{
+ // -- Implicit basic constructors --
+
+# if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT)
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec1<T, P>::tvec1()
+# ifndef GLM_FORCE_NO_CTOR_INIT
+ : x(0)
+# endif
+ {}
+# endif//!GLM_HAS_DEFAULTED_FUNCTIONS
+
+# if !GLM_HAS_DEFAULTED_FUNCTIONS
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec1<T, P>::tvec1(tvec1<T, P> const & v)
+ : x(v.x)
+ {}
+# endif//!GLM_HAS_DEFAULTED_FUNCTIONS
+
+ template <typename T, precision P>
+ template <precision Q>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec1<T, P>::tvec1(tvec1<T, Q> const & v)
+ : x(v.x)
+ {}
+
+ // -- Explicit basic constructors --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec1<T, P>::tvec1(ctor)
+ {}
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec1<T, P>::tvec1(T scalar)
+ : x(scalar)
+ {}
+
+ // -- Conversion vector constructors --
+
+ template <typename T, precision P>
+ template <typename U, precision Q>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec1<T, P>::tvec1(tvec1<U, Q> const & v)
+ : x(static_cast<T>(v.x))
+ {}
+
+ template <typename T, precision P>
+ template <typename U, precision Q>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec1<T, P>::tvec1(tvec2<U, Q> const & v)
+ : x(static_cast<T>(v.x))
+ {}
+
+ template <typename T, precision P>
+ template <typename U, precision Q>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec1<T, P>::tvec1(tvec3<U, Q> const & v)
+ : x(static_cast<T>(v.x))
+ {}
+
+ template <typename T, precision P>
+ template <typename U, precision Q>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec1<T, P>::tvec1(tvec4<U, Q> const & v)
+ : x(static_cast<T>(v.x))
+ {}
+
+ // -- Component accesses --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tvec1<T, P>::length_type tvec1<T, P>::length() const
+ {
+ return 1;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER T & tvec1<T, P>::operator[](typename tvec1<T, P>::length_type i)
+ {
+ assert(i >= 0 && i < this->length());
+ return (&x)[i];
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER T const & tvec1<T, P>::operator[](typename tvec1<T, P>::length_type i) const
+ {
+ assert(i >= 0 && i < this->length());
+ return (&x)[i];
+ }
+
+ // -- Unary arithmetic operators --
+
+# if !GLM_HAS_DEFAULTED_FUNCTIONS
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec1<T, P> & tvec1<T, P>::operator=(tvec1<T, P> const & v)
+ {
+ this->x = v.x;
+ return *this;
+ }
+# endif//!GLM_HAS_DEFAULTED_FUNCTIONS
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec1<T, P> & tvec1<T, P>::operator=(tvec1<U, P> const & v)
+ {
+ this->x = static_cast<T>(v.x);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec1<T, P> & tvec1<T, P>::operator+=(U scalar)
+ {
+ this->x += static_cast<T>(scalar);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec1<T, P> & tvec1<T, P>::operator+=(tvec1<U, P> const & v)
+ {
+ this->x += static_cast<T>(v.x);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec1<T, P> & tvec1<T, P>::operator-=(U scalar)
+ {
+ this->x -= static_cast<T>(scalar);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec1<T, P> & tvec1<T, P>::operator-=(tvec1<U, P> const & v)
+ {
+ this->x -= static_cast<T>(v.x);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec1<T, P> & tvec1<T, P>::operator*=(U scalar)
+ {
+ this->x *= static_cast<T>(scalar);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec1<T, P> & tvec1<T, P>::operator*=(tvec1<U, P> const & v)
+ {
+ this->x *= static_cast<T>(v.x);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec1<T, P> & tvec1<T, P>::operator/=(U scalar)
+ {
+ this->x /= static_cast<T>(scalar);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec1<T, P> & tvec1<T, P>::operator/=(tvec1<U, P> const & v)
+ {
+ this->x /= static_cast<T>(v.x);
+ return *this;
+ }
+
+ // -- Increment and decrement operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec1<T, P> & tvec1<T, P>::operator++()
+ {
+ ++this->x;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec1<T, P> & tvec1<T, P>::operator--()
+ {
+ --this->x;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec1<T, P> tvec1<T, P>::operator++(int)
+ {
+ tvec1<T, P> Result(*this);
+ ++*this;
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec1<T, P> tvec1<T, P>::operator--(int)
+ {
+ tvec1<T, P> Result(*this);
+ --*this;
+ return Result;
+ }
+
+ // -- Unary bit operators --
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec1<T, P> & tvec1<T, P>::operator%=(U scalar)
+ {
+ this->x %= static_cast<T>(scalar);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec1<T, P> & tvec1<T, P>::operator%=(tvec1<U, P> const & v)
+ {
+ this->x %= static_cast<T>(v.x);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec1<T, P> & tvec1<T, P>::operator&=(U scalar)
+ {
+ this->x &= static_cast<T>(scalar);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec1<T, P> & tvec1<T, P>::operator&=(tvec1<U, P> const & v)
+ {
+ this->x &= static_cast<T>(v.x);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec1<T, P> & tvec1<T, P>::operator|=(U scalar)
+ {
+ this->x |= static_cast<T>(scalar);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec1<T, P> & tvec1<T, P>::operator|=(tvec1<U, P> const & v)
+ {
+ this->x |= U(v.x);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec1<T, P> & tvec1<T, P>::operator^=(U scalar)
+ {
+ this->x ^= static_cast<T>(scalar);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec1<T, P> & tvec1<T, P>::operator^=(tvec1<U, P> const & v)
+ {
+ this->x ^= static_cast<T>(v.x);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec1<T, P> & tvec1<T, P>::operator<<=(U scalar)
+ {
+ this->x <<= static_cast<T>(scalar);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec1<T, P> & tvec1<T, P>::operator<<=(tvec1<U, P> const & v)
+ {
+ this->x <<= static_cast<T>(v.x);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec1<T, P> & tvec1<T, P>::operator>>=(U scalar)
+ {
+ this->x >>= static_cast<T>(scalar);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec1<T, P> & tvec1<T, P>::operator>>=(tvec1<U, P> const & v)
+ {
+ this->x >>= static_cast<T>(v.x);
+ return *this;
+ }
+
+ // -- Unary constant operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec1<T, P> operator+(tvec1<T, P> const & v)
+ {
+ return v;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec1<T, P> operator-(tvec1<T, P> const & v)
+ {
+ return tvec1<T, P>(
+ -v.x);
+ }
+
+ // -- Binary arithmetic operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec1<T, P> operator+(tvec1<T, P> const & v, T scalar)
+ {
+ return tvec1<T, P>(
+ v.x + scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec1<T, P> operator+(T scalar, tvec1<T, P> const & v)
+ {
+ return tvec1<T, P>(
+ scalar + v.x);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec1<T, P> operator+(tvec1<T, P> const & v1, tvec1<T, P> const & v2)
+ {
+ return tvec1<T, P>(
+ v1.x + v2.x);
+ }
+
+ //operator-
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec1<T, P> operator-(tvec1<T, P> const & v, T scalar)
+ {
+ return tvec1<T, P>(
+ v.x - scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec1<T, P> operator-(T scalar, tvec1<T, P> const & v)
+ {
+ return tvec1<T, P>(
+ scalar - v.x);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec1<T, P> operator-(tvec1<T, P> const & v1, tvec1<T, P> const & v2)
+ {
+ return tvec1<T, P>(
+ v1.x - v2.x);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec1<T, P> operator*(tvec1<T, P> const & v, T scalar)
+ {
+ return tvec1<T, P>(
+ v.x * scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec1<T, P> operator*(T scalar, tvec1<T, P> const & v)
+ {
+ return tvec1<T, P>(
+ scalar * v.x);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec1<T, P> operator*(tvec1<T, P> const & v1, tvec1<T, P> const & v2)
+ {
+ return tvec1<T, P>(
+ v1.x * v2.x);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec1<T, P> operator/(tvec1<T, P> const & v, T scalar)
+ {
+ return tvec1<T, P>(
+ v.x / scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec1<T, P> operator/(T scalar, tvec1<T, P> const & v)
+ {
+ return tvec1<T, P>(
+ scalar / v.x);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec1<T, P> operator/(tvec1<T, P> const & v1, tvec1<T, P> const & v2)
+ {
+ return tvec1<T, P>(
+ v1.x / v2.x);
+ }
+
+ // -- Binary bit operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec1<T, P> operator%(tvec1<T, P> const & v, T scalar)
+ {
+ return tvec1<T, P>(
+ v.x % scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec1<T, P> operator%(T scalar, tvec1<T, P> const & v)
+ {
+ return tvec1<T, P>(
+ scalar % v.x);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec1<T, P> operator%(tvec1<T, P> const & v1, tvec1<T, P> const & v2)
+ {
+ return tvec1<T, P>(
+ v1.x % v2.x);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec1<T, P> operator&(tvec1<T, P> const & v, T scalar)
+ {
+ return tvec1<T, P>(
+ v.x & scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec1<T, P> operator&(T scalar, tvec1<T, P> const & v)
+ {
+ return tvec1<T, P>(
+ scalar & v.x);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec1<T, P> operator&(tvec1<T, P> const & v1, tvec1<T, P> const & v2)
+ {
+ return tvec1<T, P>(
+ v1.x & v2.x);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec1<T, P> operator|(tvec1<T, P> const & v, T scalar)
+ {
+ return tvec1<T, P>(
+ v.x | scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec1<T, P> operator|(T scalar, tvec1<T, P> const & v)
+ {
+ return tvec1<T, P>(
+ scalar | v.x);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec1<T, P> operator|(tvec1<T, P> const & v1, tvec1<T, P> const & v2)
+ {
+ return tvec1<T, P>(
+ v1.x | v2.x);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec1<T, P> operator^(tvec1<T, P> const & v, T scalar)
+ {
+ return tvec1<T, P>(
+ v.x ^ scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec1<T, P> operator^(T scalar, tvec1<T, P> const & v)
+ {
+ return tvec1<T, P>(
+ scalar ^ v.x);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec1<T, P> operator^(tvec1<T, P> const & v1, tvec1<T, P> const & v2)
+ {
+ return tvec1<T, P>(
+ v1.x ^ v2.x);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec1<T, P> operator<<(tvec1<T, P> const & v, T scalar)
+ {
+ return tvec1<T, P>(
+ v.x << scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec1<T, P> operator<<(T scalar, tvec1<T, P> const & v)
+ {
+ return tvec1<T, P>(
+ scalar << v.x);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec1<T, P> operator<<(tvec1<T, P> const & v1, tvec1<T, P> const & v2)
+ {
+ return tvec1<T, P>(
+ v1.x << v2.x);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec1<T, P> operator>>(tvec1<T, P> const & v, T scalar)
+ {
+ return tvec1<T, P>(
+ v.x >> scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec1<T, P> operator>>(T scalar, tvec1<T, P> const & v)
+ {
+ return tvec1<T, P>(
+ scalar >> v.x);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec1<T, P> operator>>(tvec1<T, P> const & v1, tvec1<T, P> const & v2)
+ {
+ return tvec1<T, P>(
+ v1.x >> v2.x);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec1<T, P> operator~(tvec1<T, P> const & v)
+ {
+ return tvec1<T, P>(
+ ~v.x);
+ }
+
+ // -- Boolean operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER bool operator==(tvec1<T, P> const & v1, tvec1<T, P> const & v2)
+ {
+ return (v1.x == v2.x);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER bool operator!=(tvec1<T, P> const & v1, tvec1<T, P> const & v2)
+ {
+ return (v1.x != v2.x);
+ }
+
+ template <precision P>
+ GLM_FUNC_QUALIFIER tvec1<bool, P> operator&&(tvec1<bool, P> const & v1, tvec1<bool, P> const & v2)
+ {
+ return tvec1<bool, P>(v1.x && v2.x);
+ }
+
+ template <precision P>
+ GLM_FUNC_QUALIFIER tvec1<bool, P> operator||(tvec1<bool, P> const & v1, tvec1<bool, P> const & v2)
+ {
+ return tvec1<bool, P>(v1.x || v2.x);
+ }
+}//namespace glm
diff --git a/src/third_party/glm/glm/detail/type_vec2.hpp b/src/third_party/glm/glm/detail/type_vec2.hpp
new file mode 100644
index 0000000..9a9ef42
--- /dev/null
+++ b/src/third_party/glm/glm/detail/type_vec2.hpp
@@ -0,0 +1,385 @@
+/// @ref core
+/// @file glm/detail/type_vec2.hpp
+
+#pragma once
+
+#include "type_vec.hpp"
+#if GLM_SWIZZLE == GLM_SWIZZLE_ENABLED
+# if GLM_HAS_UNRESTRICTED_UNIONS
+# include "_swizzle.hpp"
+# else
+# include "_swizzle_func.hpp"
+# endif
+#endif //GLM_SWIZZLE
+#include <cstddef>
+
+namespace glm
+{
+ template <typename T, precision P = defaultp>
+ struct tvec2
+ {
+ // -- Implementation detail --
+
+ typedef T value_type;
+ typedef tvec2<T, P> type;
+ typedef tvec2<bool, P> bool_type;
+
+ // -- Data --
+
+# if GLM_HAS_ALIGNED_TYPE
+# if GLM_COMPILER & GLM_COMPILER_GCC
+# pragma GCC diagnostic push
+# pragma GCC diagnostic ignored "-Wpedantic"
+# endif
+# if GLM_COMPILER & GLM_COMPILER_CLANG
+# pragma clang diagnostic push
+# pragma clang diagnostic ignored "-Wgnu-anonymous-struct"
+# pragma clang diagnostic ignored "-Wnested-anon-types"
+# endif
+
+ union
+ {
+ struct{ T x, y; };
+ struct{ T r, g; };
+ struct{ T s, t; };
+
+# if GLM_SWIZZLE == GLM_SWIZZLE_ENABLED
+ _GLM_SWIZZLE2_2_MEMBERS(T, P, glm::tvec2, x, y)
+ _GLM_SWIZZLE2_2_MEMBERS(T, P, glm::tvec2, r, g)
+ _GLM_SWIZZLE2_2_MEMBERS(T, P, glm::tvec2, s, t)
+ _GLM_SWIZZLE2_3_MEMBERS(T, P, glm::tvec3, x, y)
+ _GLM_SWIZZLE2_3_MEMBERS(T, P, glm::tvec3, r, g)
+ _GLM_SWIZZLE2_3_MEMBERS(T, P, glm::tvec3, s, t)
+ _GLM_SWIZZLE2_4_MEMBERS(T, P, glm::tvec4, x, y)
+ _GLM_SWIZZLE2_4_MEMBERS(T, P, glm::tvec4, r, g)
+ _GLM_SWIZZLE2_4_MEMBERS(T, P, glm::tvec4, s, t)
+# endif//GLM_SWIZZLE
+
+ };
+
+# if GLM_COMPILER & GLM_COMPILER_CLANG
+# pragma clang diagnostic pop
+# endif
+# if GLM_COMPILER & GLM_COMPILER_GCC
+# pragma GCC diagnostic pop
+# endif
+# else
+ union {T x, r, s;};
+ union {T y, g, t;};
+
+# if GLM_SWIZZLE == GLM_SWIZZLE_ENABLED
+ GLM_SWIZZLE_GEN_VEC_FROM_VEC2(T, P, tvec2, tvec2, tvec3, tvec4)
+# endif//GLM_SWIZZLE
+# endif
+
+ // -- Component accesses --
+
+ /// Return the count of components of the vector
+ typedef length_t length_type;
+ GLM_FUNC_DECL GLM_CONSTEXPR length_type length() const;
+
+ GLM_FUNC_DECL T & operator[](length_type i);
+ GLM_FUNC_DECL T const & operator[](length_type i) const;
+
+ // -- Implicit basic constructors --
+
+ GLM_FUNC_DECL GLM_CONSTEXPR tvec2() GLM_DEFAULT_CTOR;
+ GLM_FUNC_DECL GLM_CONSTEXPR tvec2(tvec2<T, P> const& v) GLM_DEFAULT;
+ template <precision Q>
+ GLM_FUNC_DECL GLM_CONSTEXPR tvec2(tvec2<T, Q> const& v);
+
+ // -- Explicit basic constructors --
+
+ GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tvec2(ctor);
+ GLM_FUNC_DECL GLM_CONSTEXPR explicit tvec2(T scalar);
+ GLM_FUNC_DECL GLM_CONSTEXPR tvec2(T s1, T s2);
+
+ // -- Conversion constructors --
+
+ /// Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename A, typename B>
+ GLM_FUNC_DECL GLM_CONSTEXPR tvec2(A x, B y);
+ template <typename A, typename B>
+ GLM_FUNC_DECL GLM_CONSTEXPR tvec2(tvec1<A, P> const & v1, tvec1<B, P> const & v2);
+
+ // -- Conversion vector constructors --
+
+ /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename U, precision Q>
+ GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT tvec2(tvec3<U, Q> const & v);
+ /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename U, precision Q>
+ GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT tvec2(tvec4<U, Q> const & v);
+
+ /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename U, precision Q>
+ GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT tvec2(tvec2<U, Q> const & v);
+
+ // -- Swizzle constructors --
+# if GLM_HAS_UNRESTRICTED_UNIONS && (GLM_SWIZZLE == GLM_SWIZZLE_ENABLED)
+ template <int E0, int E1>
+ GLM_FUNC_DECL tvec2(detail::_swizzle<2, T, P, glm::tvec2, E0, E1,-1,-2> const& that)
+ {
+ *this = that();
+ }
+# endif// GLM_HAS_UNRESTRICTED_UNIONS && (GLM_SWIZZLE == GLM_SWIZZLE_ENABLED)
+
+ // -- Unary arithmetic operators --
+
+ GLM_FUNC_DECL tvec2<T, P>& operator=(tvec2<T, P> const & v) GLM_DEFAULT;
+
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T, P>& operator=(tvec2<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T, P>& operator+=(U scalar);
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T, P>& operator+=(tvec1<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T, P>& operator+=(tvec2<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T, P>& operator-=(U scalar);
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T, P>& operator-=(tvec1<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T, P>& operator-=(tvec2<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T, P>& operator*=(U scalar);
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T, P>& operator*=(tvec1<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T, P>& operator*=(tvec2<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T, P>& operator/=(U scalar);
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T, P>& operator/=(tvec1<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T, P>& operator/=(tvec2<U, P> const & v);
+
+ // -- Increment and decrement operators --
+
+ GLM_FUNC_DECL tvec2<T, P> & operator++();
+ GLM_FUNC_DECL tvec2<T, P> & operator--();
+ GLM_FUNC_DECL tvec2<T, P> operator++(int);
+ GLM_FUNC_DECL tvec2<T, P> operator--(int);
+
+ // -- Unary bit operators --
+
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T, P> & operator%=(U scalar);
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T, P> & operator%=(tvec1<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T, P> & operator%=(tvec2<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T, P> & operator&=(U scalar);
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T, P> & operator&=(tvec1<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T, P> & operator&=(tvec2<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T, P> & operator|=(U scalar);
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T, P> & operator|=(tvec1<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T, P> & operator|=(tvec2<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T, P> & operator^=(U scalar);
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T, P> & operator^=(tvec1<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T, P> & operator^=(tvec2<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T, P> & operator<<=(U scalar);
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T, P> & operator<<=(tvec1<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T, P> & operator<<=(tvec2<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T, P> & operator>>=(U scalar);
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T, P> & operator>>=(tvec1<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec2<T, P> & operator>>=(tvec2<U, P> const & v);
+ };
+
+ // -- Unary operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator+(tvec2<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator-(tvec2<T, P> const & v);
+
+ // -- Binary operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator+(tvec2<T, P> const & v, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator+(tvec2<T, P> const & v1, tvec1<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator+(T scalar, tvec2<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator+(tvec1<T, P> const & v1, tvec2<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator+(tvec2<T, P> const & v1, tvec2<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator-(tvec2<T, P> const & v, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator-(tvec2<T, P> const & v1, tvec1<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator-(T scalar, tvec2<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator-(tvec1<T, P> const & v1, tvec2<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator-(tvec2<T, P> const & v1, tvec2<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator*(tvec2<T, P> const & v, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator*(tvec2<T, P> const & v1, tvec1<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator*(T scalar, tvec2<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator*(tvec1<T, P> const & v1, tvec2<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator*(tvec2<T, P> const & v1, tvec2<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator/(tvec2<T, P> const & v, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator/(tvec2<T, P> const & v1, tvec1<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator/(T scalar, tvec2<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator/(tvec1<T, P> const & v1, tvec2<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator/(tvec2<T, P> const & v1, tvec2<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator%(tvec2<T, P> const & v, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator%(tvec2<T, P> const & v1, tvec1<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator%(T scalar, tvec2<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator%(tvec1<T, P> const & v1, tvec2<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator%(tvec2<T, P> const & v1, tvec2<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator&(tvec2<T, P> const & v, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator&(tvec2<T, P> const & v1, tvec1<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator&(T scalar, tvec2<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator&(tvec1<T, P> const & v1, tvec2<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator&(tvec2<T, P> const & v1, tvec2<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator|(tvec2<T, P> const & v, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator|(tvec2<T, P> const & v1, tvec1<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator|(T scalar, tvec2<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator|(tvec1<T, P> const & v1, tvec2<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator|(tvec2<T, P> const & v1, tvec2<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator^(tvec2<T, P> const & v, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator^(tvec2<T, P> const & v1, tvec1<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator^(T scalar, tvec2<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator^(tvec1<T, P> const & v1, tvec2<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator^(tvec2<T, P> const & v1, tvec2<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator<<(tvec2<T, P> const & v, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator<<(tvec2<T, P> const & v1, tvec1<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator<<(T scalar, tvec2<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator<<(tvec1<T, P> const & v1, tvec2<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator<<(tvec2<T, P> const & v1, tvec2<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator>>(tvec2<T, P> const & v, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator>>(tvec2<T, P> const & v1, tvec1<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator>>(T scalar, tvec2<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator>>(tvec1<T, P> const & v1, tvec2<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator>>(tvec2<T, P> const & v1, tvec2<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> operator~(tvec2<T, P> const & v);
+
+ // -- Boolean operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL bool operator==(tvec2<T, P> const & v1, tvec2<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL bool operator!=(tvec2<T, P> const & v1, tvec2<T, P> const & v2);
+
+ template <precision P>
+ GLM_FUNC_DECL tvec2<bool, P> operator&&(tvec2<bool, P> const & v1, tvec2<bool, P> const & v2);
+
+ template <precision P>
+ GLM_FUNC_DECL tvec2<bool, P> operator||(tvec2<bool, P> const & v1, tvec2<bool, P> const & v2);
+}//namespace glm
+
+#ifndef GLM_EXTERNAL_TEMPLATE
+#include "type_vec2.inl"
+#endif//GLM_EXTERNAL_TEMPLATE
diff --git a/src/third_party/glm/glm/detail/type_vec2.inl b/src/third_party/glm/glm/detail/type_vec2.inl
new file mode 100644
index 0000000..d10f96e
--- /dev/null
+++ b/src/third_party/glm/glm/detail/type_vec2.inl
@@ -0,0 +1,900 @@
+/// @ref core
+/// @file glm/core/type_tvec2.inl
+
+namespace glm
+{
+# ifdef GLM_STATIC_CONST_MEMBERS
+ template <typename T, precision P>
+ const tvec2<T, P> tvec2<T, P>::ZERO(static_cast<T>(0), static_cast<T>(0));
+
+ template <typename T, precision P>
+ const tvec2<T, P> tvec2<T, P>::X(static_cast<T>(1), static_cast<T>(0));
+
+ template <typename T, precision P>
+ const tvec2<T, P> tvec2<T, P>::Y(static_cast<T>(0), static_cast<T>(1));
+
+ template <typename T, precision P>
+ const tvec2<T, P> tvec2<T, P>::XY(static_cast<T>(1), static_cast<T>(1));
+# endif
+ // -- Implicit basic constructors --
+
+# if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT)
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec2<T, P>::tvec2()
+# ifndef GLM_FORCE_NO_CTOR_INIT
+ : x(0), y(0)
+# endif
+ {}
+# endif//!GLM_HAS_DEFAULTED_FUNCTIONS
+
+# if !GLM_HAS_DEFAULTED_FUNCTIONS
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec2<T, P>::tvec2(tvec2<T, P> const & v)
+ : x(v.x), y(v.y)
+ {}
+# endif//!GLM_HAS_DEFAULTED_FUNCTIONS
+
+ template <typename T, precision P>
+ template <precision Q>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec2<T, P>::tvec2(tvec2<T, Q> const & v)
+ : x(v.x), y(v.y)
+ {}
+
+ // -- Explicit basic constructors --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec2<T, P>::tvec2(ctor)
+ {}
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec2<T, P>::tvec2(T scalar)
+ : x(scalar), y(scalar)
+ {}
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec2<T, P>::tvec2(T s1, T s2)
+ : x(s1), y(s2)
+ {}
+
+ // -- Conversion scalar constructors --
+
+ template <typename T, precision P>
+ template <typename A, typename B>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec2<T, P>::tvec2(A a, B b)
+ : x(static_cast<T>(a))
+ , y(static_cast<T>(b))
+ {}
+
+ template <typename T, precision P>
+ template <typename A, typename B>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec2<T, P>::tvec2(tvec1<A, P> const & a, tvec1<B, P> const & b)
+ : x(static_cast<T>(a.x))
+ , y(static_cast<T>(b.x))
+ {}
+
+ // -- Conversion vector constructors --
+
+ template <typename T, precision P>
+ template <typename U, precision Q>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec2<T, P>::tvec2(tvec2<U, Q> const & v)
+ : x(static_cast<T>(v.x))
+ , y(static_cast<T>(v.y))
+ {}
+
+ template <typename T, precision P>
+ template <typename U, precision Q>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec2<T, P>::tvec2(tvec3<U, Q> const & v)
+ : x(static_cast<T>(v.x))
+ , y(static_cast<T>(v.y))
+ {}
+
+ template <typename T, precision P>
+ template <typename U, precision Q>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec2<T, P>::tvec2(tvec4<U, Q> const & v)
+ : x(static_cast<T>(v.x))
+ , y(static_cast<T>(v.y))
+ {}
+
+ // -- Component accesses --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tvec2<T, P>::length_type tvec2<T, P>::length() const
+ {
+ return 2;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER T & tvec2<T, P>::operator[](typename tvec2<T, P>::length_type i)
+ {
+ assert(i >= 0 && i < this->length());
+ return (&x)[i];
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER T const & tvec2<T, P>::operator[](typename tvec2<T, P>::length_type i) const
+ {
+ assert(i >= 0 && i < this->length());
+ return (&x)[i];
+ }
+
+ // -- Unary arithmetic operators --
+
+# if !GLM_HAS_DEFAULTED_FUNCTIONS
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator=(tvec2<T, P> const & v)
+ {
+ this->x = v.x;
+ this->y = v.y;
+ return *this;
+ }
+# endif//!GLM_HAS_DEFAULTED_FUNCTIONS
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator=(tvec2<U, P> const & v)
+ {
+ this->x = static_cast<T>(v.x);
+ this->y = static_cast<T>(v.y);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator+=(U scalar)
+ {
+ this->x += static_cast<T>(scalar);
+ this->y += static_cast<T>(scalar);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator+=(tvec1<U, P> const & v)
+ {
+ this->x += static_cast<T>(v.x);
+ this->y += static_cast<T>(v.x);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator+=(tvec2<U, P> const & v)
+ {
+ this->x += static_cast<T>(v.x);
+ this->y += static_cast<T>(v.y);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator-=(U scalar)
+ {
+ this->x -= static_cast<T>(scalar);
+ this->y -= static_cast<T>(scalar);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator-=(tvec1<U, P> const & v)
+ {
+ this->x -= static_cast<T>(v.x);
+ this->y -= static_cast<T>(v.x);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator-=(tvec2<U, P> const & v)
+ {
+ this->x -= static_cast<T>(v.x);
+ this->y -= static_cast<T>(v.y);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator*=(U scalar)
+ {
+ this->x *= static_cast<T>(scalar);
+ this->y *= static_cast<T>(scalar);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator*=(tvec1<U, P> const & v)
+ {
+ this->x *= static_cast<T>(v.x);
+ this->y *= static_cast<T>(v.x);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator*=(tvec2<U, P> const & v)
+ {
+ this->x *= static_cast<T>(v.x);
+ this->y *= static_cast<T>(v.y);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator/=(U scalar)
+ {
+ this->x /= static_cast<T>(scalar);
+ this->y /= static_cast<T>(scalar);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator/=(tvec1<U, P> const & v)
+ {
+ this->x /= static_cast<T>(v.x);
+ this->y /= static_cast<T>(v.x);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator/=(tvec2<U, P> const & v)
+ {
+ this->x /= static_cast<T>(v.x);
+ this->y /= static_cast<T>(v.y);
+ return *this;
+ }
+
+ // -- Increment and decrement operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator++()
+ {
+ ++this->x;
+ ++this->y;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator--()
+ {
+ --this->x;
+ --this->y;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> tvec2<T, P>::operator++(int)
+ {
+ tvec2<T, P> Result(*this);
+ ++*this;
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> tvec2<T, P>::operator--(int)
+ {
+ tvec2<T, P> Result(*this);
+ --*this;
+ return Result;
+ }
+
+ // -- Unary bit operators --
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator%=(U scalar)
+ {
+ this->x %= static_cast<T>(scalar);
+ this->y %= static_cast<T>(scalar);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator%=(tvec1<U, P> const & v)
+ {
+ this->x %= static_cast<T>(v.x);
+ this->y %= static_cast<T>(v.x);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator%=(tvec2<U, P> const & v)
+ {
+ this->x %= static_cast<T>(v.x);
+ this->y %= static_cast<T>(v.y);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator&=(U scalar)
+ {
+ this->x &= static_cast<T>(scalar);
+ this->y &= static_cast<T>(scalar);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator&=(tvec1<U, P> const & v)
+ {
+ this->x &= static_cast<T>(v.x);
+ this->y &= static_cast<T>(v.x);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator&=(tvec2<U, P> const & v)
+ {
+ this->x &= static_cast<T>(v.x);
+ this->y &= static_cast<T>(v.y);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator|=(U scalar)
+ {
+ this->x |= static_cast<T>(scalar);
+ this->y |= static_cast<T>(scalar);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator|=(tvec1<U, P> const & v)
+ {
+ this->x |= static_cast<T>(v.x);
+ this->y |= static_cast<T>(v.x);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator|=(tvec2<U, P> const & v)
+ {
+ this->x |= static_cast<T>(v.x);
+ this->y |= static_cast<T>(v.y);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator^=(U scalar)
+ {
+ this->x ^= static_cast<T>(scalar);
+ this->y ^= static_cast<T>(scalar);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator^=(tvec1<U, P> const & v)
+ {
+ this->x ^= static_cast<T>(v.x);
+ this->y ^= static_cast<T>(v.x);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator^=(tvec2<U, P> const & v)
+ {
+ this->x ^= static_cast<T>(v.x);
+ this->y ^= static_cast<T>(v.y);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator<<=(U scalar)
+ {
+ this->x <<= static_cast<T>(scalar);
+ this->y <<= static_cast<T>(scalar);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator<<=(tvec1<U, P> const & v)
+ {
+ this->x <<= static_cast<T>(v.x);
+ this->y <<= static_cast<T>(v.x);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator<<=(tvec2<U, P> const & v)
+ {
+ this->x <<= static_cast<T>(v.x);
+ this->y <<= static_cast<T>(v.y);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator>>=(U scalar)
+ {
+ this->x >>= static_cast<T>(scalar);
+ this->y >>= static_cast<T>(scalar);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator>>=(tvec1<U, P> const & v)
+ {
+ this->x >>= static_cast<T>(v.x);
+ this->y >>= static_cast<T>(v.x);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec2<T, P> & tvec2<T, P>::operator>>=(tvec2<U, P> const & v)
+ {
+ this->x >>= static_cast<T>(v.x);
+ this->y >>= static_cast<T>(v.y);
+ return *this;
+ }
+
+ // -- Unary arithmetic operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator+(tvec2<T, P> const & v)
+ {
+ return v;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator-(tvec2<T, P> const & v)
+ {
+ return tvec2<T, P>(
+ -v.x,
+ -v.y);
+ }
+
+ // -- Binary arithmetic operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator+(tvec2<T, P> const & v, T scalar)
+ {
+ return tvec2<T, P>(
+ v.x + scalar,
+ v.y + scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator+(tvec2<T, P> const & v1, tvec1<T, P> const & v2)
+ {
+ return tvec2<T, P>(
+ v1.x + v2.x,
+ v1.y + v2.x);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator+(T scalar, tvec2<T, P> const & v)
+ {
+ return tvec2<T, P>(
+ scalar + v.x,
+ scalar + v.y);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator+(tvec1<T, P> const & v1, tvec2<T, P> const & v2)
+ {
+ return tvec2<T, P>(
+ v1.x + v2.x,
+ v1.x + v2.y);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator+(tvec2<T, P> const & v1, tvec2<T, P> const & v2)
+ {
+ return tvec2<T, P>(
+ v1.x + v2.x,
+ v1.y + v2.y);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator-(tvec2<T, P> const & v, T scalar)
+ {
+ return tvec2<T, P>(
+ v.x - scalar,
+ v.y - scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator-(tvec2<T, P> const & v1, tvec1<T, P> const & v2)
+ {
+ return tvec2<T, P>(
+ v1.x - v2.x,
+ v1.y - v2.x);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator-(T scalar, tvec2<T, P> const & v)
+ {
+ return tvec2<T, P>(
+ scalar - v.x,
+ scalar - v.y);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator-(tvec1<T, P> const & v1, tvec2<T, P> const & v2)
+ {
+ return tvec2<T, P>(
+ v1.x - v2.x,
+ v1.x - v2.y);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator-(tvec2<T, P> const & v1, tvec2<T, P> const & v2)
+ {
+ return tvec2<T, P>(
+ v1.x - v2.x,
+ v1.y - v2.y);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator*(tvec2<T, P> const & v, T scalar)
+ {
+ return tvec2<T, P>(
+ v.x * scalar,
+ v.y * scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator*(tvec2<T, P> const & v1, tvec1<T, P> const & v2)
+ {
+ return tvec2<T, P>(
+ v1.x * v2.x,
+ v1.y * v2.x);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator*(T scalar, tvec2<T, P> const & v)
+ {
+ return tvec2<T, P>(
+ scalar * v.x,
+ scalar * v.y);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator*(tvec1<T, P> const & v1, tvec2<T, P> const & v2)
+ {
+ return tvec2<T, P>(
+ v1.x * v2.x,
+ v1.x * v2.y);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator*(tvec2<T, P> const & v1, tvec2<T, P> const & v2)
+ {
+ return tvec2<T, P>(
+ v1.x * v2.x,
+ v1.y * v2.y);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator/(tvec2<T, P> const & v, T scalar)
+ {
+ return tvec2<T, P>(
+ v.x / scalar,
+ v.y / scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator/(tvec2<T, P> const & v1, tvec1<T, P> const & v2)
+ {
+ return tvec2<T, P>(
+ v1.x / v2.x,
+ v1.y / v2.x);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator/(T scalar, tvec2<T, P> const & v)
+ {
+ return tvec2<T, P>(
+ scalar / v.x,
+ scalar / v.y);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator/(tvec1<T, P> const & v1, tvec2<T, P> const & v2)
+ {
+ return tvec2<T, P>(
+ v1.x / v2.x,
+ v1.x / v2.y);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator/(tvec2<T, P> const & v1, tvec2<T, P> const & v2)
+ {
+ return tvec2<T, P>(
+ v1.x / v2.x,
+ v1.y / v2.y);
+ }
+
+ // -- Binary bit operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator%(tvec2<T, P> const & v, T scalar)
+ {
+ return tvec2<T, P>(
+ v.x % scalar,
+ v.y % scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator%(tvec2<T, P> const & v1, tvec1<T, P> const & v2)
+ {
+ return tvec2<T, P>(
+ v1.x % v2.x,
+ v1.y % v2.x);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator%(T scalar, tvec2<T, P> const & v)
+ {
+ return tvec2<T, P>(
+ scalar % v.x,
+ scalar % v.y);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator%(tvec1<T, P> const & v1, tvec2<T, P> const & v2)
+ {
+ return tvec2<T, P>(
+ v1.x % v2.x,
+ v1.x % v2.y);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator%(tvec2<T, P> const & v1, tvec2<T, P> const & v2)
+ {
+ return tvec2<T, P>(
+ v1.x % v2.x,
+ v1.y % v2.y);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator&(tvec2<T, P> const & v, T scalar)
+ {
+ return tvec2<T, P>(
+ v.x & scalar,
+ v.y & scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator&(tvec2<T, P> const & v1, tvec1<T, P> const & v2)
+ {
+ return tvec2<T, P>(
+ v1.x & v2.x,
+ v1.y & v2.x);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator&(T scalar, tvec2<T, P> const & v)
+ {
+ return tvec2<T, P>(
+ scalar & v.x,
+ scalar & v.y);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator&(tvec1<T, P> const & v1, tvec2<T, P> const & v2)
+ {
+ return tvec2<T, P>(
+ v1.x & v2.x,
+ v1.x & v2.y);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator&(tvec2<T, P> const & v1, tvec2<T, P> const & v2)
+ {
+ return tvec2<T, P>(
+ v1.x & v2.x,
+ v1.y & v2.y);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator|(tvec2<T, P> const & v, T scalar)
+ {
+ return tvec2<T, P>(
+ v.x | scalar,
+ v.y | scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator|(tvec2<T, P> const & v1, tvec1<T, P> const & v2)
+ {
+ return tvec2<T, P>(
+ v1.x | v2.x,
+ v1.y | v2.x);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator|(T scalar, tvec2<T, P> const & v)
+ {
+ return tvec2<T, P>(
+ scalar | v.x,
+ scalar | v.y);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator|(tvec1<T, P> const & v1, tvec2<T, P> const & v2)
+ {
+ return tvec2<T, P>(
+ v1.x | v2.x,
+ v1.x | v2.y);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator|(tvec2<T, P> const & v1, tvec2<T, P> const & v2)
+ {
+ return tvec2<T, P>(
+ v1.x | v2.x,
+ v1.y | v2.y);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator^(tvec2<T, P> const & v, T scalar)
+ {
+ return tvec2<T, P>(
+ v.x ^ scalar,
+ v.y ^ scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator^(tvec2<T, P> const & v1, tvec1<T, P> const & v2)
+ {
+ return tvec2<T, P>(
+ v1.x ^ v2.x,
+ v1.y ^ v2.x);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator^(T scalar, tvec2<T, P> const & v)
+ {
+ return tvec2<T, P>(
+ scalar ^ v.x,
+ scalar ^ v.y);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator^(tvec1<T, P> const & v1, tvec2<T, P> const & v2)
+ {
+ return tvec2<T, P>(
+ v1.x ^ v2.x,
+ v1.x ^ v2.y);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator^(tvec2<T, P> const & v1, tvec2<T, P> const & v2)
+ {
+ return tvec2<T, P>(
+ v1.x ^ v2.x,
+ v1.y ^ v2.y);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator<<(tvec2<T, P> const & v, T scalar)
+ {
+ return tvec2<T, P>(
+ v.x << scalar,
+ v.y << scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator<<(tvec2<T, P> const & v1, tvec1<T, P> const & v2)
+ {
+ return tvec2<T, P>(
+ v1.x << v2.x,
+ v1.y << v2.x);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator<<(T scalar, tvec2<T, P> const & v)
+ {
+ return tvec2<T, P>(
+ scalar << v.x,
+ scalar << v.y);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator<<(tvec1<T, P> const & v1, tvec2<T, P> const & v2)
+ {
+ return tvec2<T, P>(
+ v1.x << v2.x,
+ v1.x << v2.y);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator<<(tvec2<T, P> const & v1, tvec2<T, P> const & v2)
+ {
+ return tvec2<T, P>(
+ v1.x << v2.x,
+ v1.y << v2.y);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator>>(tvec2<T, P> const & v, T scalar)
+ {
+ return tvec2<T, P>(
+ v.x >> scalar,
+ v.y >> scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator>>(tvec2<T, P> const & v1, tvec1<T, P> const & v2)
+ {
+ return tvec2<T, P>(
+ v1.x >> v2.x,
+ v1.y >> v2.x);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator>>(T scalar, tvec2<T, P> const & v)
+ {
+ return tvec2<T, P>(
+ scalar >> v.x,
+ scalar >> v.y);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator>>(tvec1<T, P> const & v1, tvec2<T, P> const & v2)
+ {
+ return tvec2<T, P>(
+ v1.x >> v2.x,
+ v1.x >> v2.y);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator>>(tvec2<T, P> const & v1, tvec2<T, P> const & v2)
+ {
+ return tvec2<T, P>(
+ v1.x >> v2.x,
+ v1.y >> v2.y);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> operator~(tvec2<T, P> const & v)
+ {
+ return tvec2<T, P>(
+ ~v.x,
+ ~v.y);
+ }
+
+ // -- Boolean operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER bool operator==(tvec2<T, P> const & v1, tvec2<T, P> const & v2)
+ {
+ return (v1.x == v2.x) && (v1.y == v2.y);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER bool operator!=(tvec2<T, P> const & v1, tvec2<T, P> const & v2)
+ {
+ return (v1.x != v2.x) || (v1.y != v2.y);
+ }
+
+ template <precision P>
+ GLM_FUNC_QUALIFIER tvec2<bool, P> operator&&(tvec2<bool, P> const & v1, tvec2<bool, P> const & v2)
+ {
+ return tvec2<bool, P>(v1.x && v2.x, v1.y && v2.y);
+ }
+
+ template <precision P>
+ GLM_FUNC_QUALIFIER tvec2<bool, P> operator||(tvec2<bool, P> const & v1, tvec2<bool, P> const & v2)
+ {
+ return tvec2<bool, P>(v1.x || v2.x, v1.y || v2.y);
+ }
+}//namespace glm
diff --git a/src/third_party/glm/glm/detail/type_vec3.hpp b/src/third_party/glm/glm/detail/type_vec3.hpp
new file mode 100644
index 0000000..ebd135d
--- /dev/null
+++ b/src/third_party/glm/glm/detail/type_vec3.hpp
@@ -0,0 +1,406 @@
+/// @ref core
+/// @file glm/detail/type_vec3.hpp
+
+#pragma once
+
+#include "type_vec.hpp"
+#if GLM_SWIZZLE == GLM_SWIZZLE_ENABLED
+# if GLM_HAS_UNRESTRICTED_UNIONS
+# include "_swizzle.hpp"
+# else
+# include "_swizzle_func.hpp"
+# endif
+#endif //GLM_SWIZZLE == GLM_SWIZZLE_ENABLED
+#include <cstddef>
+
+namespace glm
+{
+ template <typename T, precision P = defaultp>
+ struct tvec3
+ {
+ // -- Implementation detail --
+
+ typedef T value_type;
+ typedef tvec3<T, P> type;
+ typedef tvec3<bool, P> bool_type;
+
+ // -- Data --
+
+# if GLM_HAS_ALIGNED_TYPE
+# if GLM_COMPILER & GLM_COMPILER_GCC
+# pragma GCC diagnostic push
+# pragma GCC diagnostic ignored "-Wpedantic"
+# endif
+# if GLM_COMPILER & GLM_COMPILER_CLANG
+# pragma clang diagnostic push
+# pragma clang diagnostic ignored "-Wgnu-anonymous-struct"
+# pragma clang diagnostic ignored "-Wnested-anon-types"
+# endif
+
+ union
+ {
+ struct{ T x, y, z; };
+ struct{ T r, g, b; };
+ struct{ T s, t, p; };
+
+# if GLM_SWIZZLE == GLM_SWIZZLE_ENABLED
+ _GLM_SWIZZLE3_2_MEMBERS(T, P, glm::tvec2, x, y, z)
+ _GLM_SWIZZLE3_2_MEMBERS(T, P, glm::tvec2, r, g, b)
+ _GLM_SWIZZLE3_2_MEMBERS(T, P, glm::tvec2, s, t, p)
+ _GLM_SWIZZLE3_3_MEMBERS(T, P, glm::tvec3, x, y, z)
+ _GLM_SWIZZLE3_3_MEMBERS(T, P, glm::tvec3, r, g, b)
+ _GLM_SWIZZLE3_3_MEMBERS(T, P, glm::tvec3, s, t, p)
+ _GLM_SWIZZLE3_4_MEMBERS(T, P, glm::tvec4, x, y, z)
+ _GLM_SWIZZLE3_4_MEMBERS(T, P, glm::tvec4, r, g, b)
+ _GLM_SWIZZLE3_4_MEMBERS(T, P, glm::tvec4, s, t, p)
+# endif//GLM_SWIZZLE
+ };
+
+# if GLM_COMPILER & GLM_COMPILER_CLANG
+# pragma clang diagnostic pop
+# endif
+# if GLM_COMPILER & GLM_COMPILER_GCC
+# pragma GCC diagnostic pop
+# endif
+# else
+ union { T x, r, s; };
+ union { T y, g, t; };
+ union { T z, b, p; };
+
+# if GLM_SWIZZLE == GLM_SWIZZLE_ENABLED
+ GLM_SWIZZLE_GEN_VEC_FROM_VEC3(T, P, tvec3, tvec2, tvec3, tvec4)
+# endif//GLM_SWIZZLE
+# endif//GLM_LANG
+
+ // -- Component accesses --
+
+ /// Return the count of components of the vector
+ typedef length_t length_type;
+ GLM_FUNC_DECL GLM_CONSTEXPR length_type length() const;
+
+ GLM_FUNC_DECL T & operator[](length_type i);
+ GLM_FUNC_DECL T const & operator[](length_type i) const;
+
+ // -- Implicit basic constructors --
+
+ GLM_FUNC_DECL GLM_CONSTEXPR tvec3() GLM_DEFAULT_CTOR;
+ GLM_FUNC_DECL GLM_CONSTEXPR tvec3(tvec3<T, P> const & v) GLM_DEFAULT;
+ template <precision Q>
+ GLM_FUNC_DECL GLM_CONSTEXPR tvec3(tvec3<T, Q> const & v);
+
+ // -- Explicit basic constructors --
+
+ GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tvec3(ctor);
+ GLM_FUNC_DECL GLM_CONSTEXPR explicit tvec3(T scalar);
+ GLM_FUNC_DECL GLM_CONSTEXPR tvec3(T a, T b, T c);
+
+ // -- Conversion scalar constructors --
+
+ /// Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename A, typename B, typename C>
+ GLM_FUNC_DECL GLM_CONSTEXPR tvec3(A a, B b, C c);
+ template <typename A, typename B, typename C>
+ GLM_FUNC_DECL GLM_CONSTEXPR tvec3(tvec1<A, P> const & a, tvec1<B, P> const & b, tvec1<C, P> const & c);
+
+ // -- Conversion vector constructors --
+
+ /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename A, typename B, precision Q>
+ GLM_FUNC_DECL GLM_CONSTEXPR tvec3(tvec2<A, Q> const & a, B b);
+ /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename A, typename B, precision Q>
+ GLM_FUNC_DECL GLM_CONSTEXPR tvec3(tvec2<A, Q> const & a, tvec1<B, Q> const & b);
+ /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename A, typename B, precision Q>
+ GLM_FUNC_DECL GLM_CONSTEXPR tvec3(A a, tvec2<B, Q> const & b);
+ /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename A, typename B, precision Q>
+ GLM_FUNC_DECL GLM_CONSTEXPR tvec3(tvec1<A, Q> const & a, tvec2<B, Q> const & b);
+ /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename U, precision Q>
+ GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT tvec3(tvec4<U, Q> const & v);
+
+ /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename U, precision Q>
+ GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT tvec3(tvec3<U, Q> const & v);
+
+ // -- Swizzle constructors --
+# if GLM_HAS_UNRESTRICTED_UNIONS && (GLM_SWIZZLE == GLM_SWIZZLE_ENABLED)
+ template <int E0, int E1, int E2>
+ GLM_FUNC_DECL tvec3(detail::_swizzle<3, T, P, glm::tvec3, E0, E1, E2, -1> const & that)
+ {
+ *this = that();
+ }
+
+ template <int E0, int E1>
+ GLM_FUNC_DECL tvec3(detail::_swizzle<2, T, P, glm::tvec2, E0, E1, -1, -2> const & v, T const & scalar)
+ {
+ *this = tvec3<T, P>(v(), scalar);
+ }
+
+ template <int E0, int E1>
+ GLM_FUNC_DECL tvec3(T const & scalar, detail::_swizzle<2, T, P, glm::tvec2, E0, E1, -1, -2> const & v)
+ {
+ *this = tvec3<T, P>(scalar, v());
+ }
+# endif// GLM_HAS_UNRESTRICTED_UNIONS && (GLM_SWIZZLE == GLM_SWIZZLE_ENABLED)
+
+ // -- Unary arithmetic operators --
+
+ GLM_FUNC_DECL tvec3<T, P> & operator=(tvec3<T, P> const & v) GLM_DEFAULT;
+
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T, P> & operator=(tvec3<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T, P> & operator+=(U scalar);
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T, P> & operator+=(tvec1<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T, P> & operator+=(tvec3<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T, P> & operator-=(U scalar);
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T, P> & operator-=(tvec1<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T, P> & operator-=(tvec3<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T, P> & operator*=(U scalar);
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T, P> & operator*=(tvec1<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T, P> & operator*=(tvec3<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T, P> & operator/=(U scalar);
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T, P> & operator/=(tvec1<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T, P> & operator/=(tvec3<U, P> const & v);
+
+ // -- Increment and decrement operators --
+
+ GLM_FUNC_DECL tvec3<T, P> & operator++();
+ GLM_FUNC_DECL tvec3<T, P> & operator--();
+ GLM_FUNC_DECL tvec3<T, P> operator++(int);
+ GLM_FUNC_DECL tvec3<T, P> operator--(int);
+
+ // -- Unary bit operators --
+
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T, P> & operator%=(U scalar);
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T, P> & operator%=(tvec1<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T, P> & operator%=(tvec3<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T, P> & operator&=(U scalar);
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T, P> & operator&=(tvec1<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T, P> & operator&=(tvec3<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T, P> & operator|=(U scalar);
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T, P> & operator|=(tvec1<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T, P> & operator|=(tvec3<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T, P> & operator^=(U scalar);
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T, P> & operator^=(tvec1<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T, P> & operator^=(tvec3<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T, P> & operator<<=(U scalar);
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T, P> & operator<<=(tvec1<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T, P> & operator<<=(tvec3<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T, P> & operator>>=(U scalar);
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T, P> & operator>>=(tvec1<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec3<T, P> & operator>>=(tvec3<U, P> const & v);
+ };
+
+ // -- Unary operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator+(tvec3<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator-(tvec3<T, P> const & v);
+
+ // -- Binary operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator+(tvec3<T, P> const & v, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator+(tvec3<T, P> const & v, tvec1<T, P> const & scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator+(T scalar, tvec3<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator+(tvec1<T, P> const & v1, tvec3<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator+(tvec3<T, P> const & v1, tvec3<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator-(tvec3<T, P> const & v, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator-(tvec3<T, P> const & v1, tvec1<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator-(T scalar, tvec3<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator-(tvec1<T, P> const & v1, tvec3<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator-(tvec3<T, P> const & v1, tvec3<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator*(tvec3<T, P> const & v, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator*(tvec3<T, P> const & v1, tvec1<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator*(T scalar, tvec3<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator*(tvec1<T, P> const & v1, tvec3<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator*(tvec3<T, P> const & v1, tvec3<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator/(tvec3<T, P> const & v, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator/(tvec3<T, P> const & v1, tvec1<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator/(T scalar, tvec3<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator/(tvec1<T, P> const & v1, tvec3<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator/(tvec3<T, P> const & v1, tvec3<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator%(tvec3<T, P> const & v, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator%(tvec3<T, P> const & v1, tvec1<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator%(T const & scalar, tvec3<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator%(tvec1<T, P> const & v1, tvec3<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator%(tvec3<T, P> const & v1, tvec3<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator&(tvec3<T, P> const & v1, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator&(tvec3<T, P> const & v1, tvec1<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator&(T scalar, tvec3<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator&(tvec1<T, P> const & v1, tvec3<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator&(tvec3<T, P> const & v1, tvec3<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator|(tvec3<T, P> const & v, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator|(tvec3<T, P> const & v1, tvec1<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator|(T scalar, tvec3<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator|(tvec1<T, P> const & v1, tvec3<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator|(tvec3<T, P> const & v1, tvec3<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator^(tvec3<T, P> const & v, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator^(tvec3<T, P> const & v1, tvec1<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator^(T scalar, tvec3<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator^(tvec1<T, P> const & v1, tvec3<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator^(tvec3<T, P> const & v1, tvec3<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator<<(tvec3<T, P> const & v, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator<<(tvec3<T, P> const & v1, tvec1<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator<<(T scalar, tvec3<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator<<(tvec1<T, P> const & v1, tvec3<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator<<(tvec3<T, P> const & v1, tvec3<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator>>(tvec3<T, P> const & v, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator>>(tvec3<T, P> const & v1, tvec1<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator>>(T scalar, tvec3<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator>>(tvec1<T, P> const & v1, tvec3<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator>>(tvec3<T, P> const & v1, tvec3<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator~(tvec3<T, P> const & v);
+
+ // -- Boolean operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL bool operator==(tvec3<T, P> const & v1, tvec3<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL bool operator!=(tvec3<T, P> const & v1, tvec3<T, P> const & v2);
+
+ template <precision P>
+ GLM_FUNC_DECL tvec3<bool, P> operator&&(tvec3<bool, P> const & v1, tvec3<bool, P> const & v2);
+
+ template <precision P>
+ GLM_FUNC_DECL tvec3<bool, P> operator||(tvec3<bool, P> const & v1, tvec3<bool, P> const & v2);
+}//namespace glm
+
+#ifndef GLM_EXTERNAL_TEMPLATE
+#include "type_vec3.inl"
+#endif//GLM_EXTERNAL_TEMPLATE
diff --git a/src/third_party/glm/glm/detail/type_vec3.inl b/src/third_party/glm/glm/detail/type_vec3.inl
new file mode 100644
index 0000000..cc0424f
--- /dev/null
+++ b/src/third_party/glm/glm/detail/type_vec3.inl
@@ -0,0 +1,1028 @@
+/// @ref core
+/// @file glm/detail/type_tvec3.inl
+
+namespace glm
+{
+
+# ifdef GLM_STATIC_CONST_MEMBERS
+ template <typename T, precision P>
+ const tvec3<T, P> tvec3<T, P>::ZERO(static_cast<T>(0), static_cast<T>(0), static_cast<T>(0));
+
+ template <typename T, precision P>
+ const tvec3<T, P> tvec3<T, P>::X(static_cast<T>(1), static_cast<T>(0), static_cast<T>(0));
+
+ template <typename T, precision P>
+ const tvec3<T, P> tvec3<T, P>::Y(static_cast<T>(0), static_cast<T>(1), static_cast<T>(0));
+
+ template <typename T, precision P>
+ const tvec3<T, P> tvec3<T, P>::Z(static_cast<T>(0), static_cast<T>(0), static_cast<T>(1));
+
+ template <typename T, precision P>
+ const tvec3<T, P> tvec3<T, P>::XY(static_cast<T>(1), static_cast<T>(1), static_cast<T>(0));
+
+ template <typename T, precision P>
+ const tvec3<T, P> tvec3<T, P>::XZ(static_cast<T>(1), static_cast<T>(0), static_cast<T>(1));
+
+ template <typename T, precision P>
+ const tvec3<T, P> tvec3<T, P>::YZ(static_cast<T>(0), static_cast<T>(1), static_cast<T>(1));
+
+ template <typename T, precision P>
+ const tvec3<T, P> tvec3<T, P>::XYZ(static_cast<T>(1), static_cast<T>(1), static_cast<T>(1));
+# endif
+ // -- Implicit basic constructors --
+
+# if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT)
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec3<T, P>::tvec3()
+# ifndef GLM_FORCE_NO_CTOR_INIT
+ : x(0), y(0), z(0)
+# endif
+ {}
+# endif//!GLM_HAS_DEFAULTED_FUNCTIONS
+
+# if !GLM_HAS_DEFAULTED_FUNCTIONS
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec3<T, P>::tvec3(tvec3<T, P> const & v)
+ : x(v.x), y(v.y), z(v.z)
+ {}
+# endif//!GLM_HAS_DEFAULTED_FUNCTIONS
+
+ template <typename T, precision P>
+ template <precision Q>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec3<T, P>::tvec3(tvec3<T, Q> const & v)
+ : x(v.x), y(v.y), z(v.z)
+ {}
+
+ // -- Explicit basic constructors --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec3<T, P>::tvec3(ctor)
+ {}
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec3<T, P>::tvec3(T scalar)
+ : x(scalar), y(scalar), z(scalar)
+ {}
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec3<T, P>::tvec3(T a, T b, T c)
+ : x(a), y(b), z(c)
+ {}
+
+ // -- Conversion scalar constructors --
+
+ template <typename T, precision P>
+ template <typename A, typename B, typename C>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec3<T, P>::tvec3(A a, B b, C c) :
+ x(static_cast<T>(a)),
+ y(static_cast<T>(b)),
+ z(static_cast<T>(c))
+ {}
+
+ template <typename T, precision P>
+ template <typename A, typename B, typename C>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec3<T, P>::tvec3(tvec1<A, P> const & a, tvec1<B, P> const & b, tvec1<C, P> const & c) :
+ x(static_cast<T>(a)),
+ y(static_cast<T>(b)),
+ z(static_cast<T>(c))
+ {}
+
+ // -- Conversion vector constructors --
+
+ template <typename T, precision P>
+ template <typename A, typename B, precision Q>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec3<T, P>::tvec3(tvec2<A, Q> const & a, B b) :
+ x(static_cast<T>(a.x)),
+ y(static_cast<T>(a.y)),
+ z(static_cast<T>(b))
+ {}
+
+ template <typename T, precision P>
+ template <typename A, typename B, precision Q>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec3<T, P>::tvec3(tvec2<A, Q> const & a, tvec1<B, Q> const & b) :
+ x(static_cast<T>(a.x)),
+ y(static_cast<T>(a.y)),
+ z(static_cast<T>(b.x))
+ {}
+
+ template <typename T, precision P>
+ template <typename A, typename B, precision Q>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec3<T, P>::tvec3(A a, tvec2<B, Q> const & b) :
+ x(static_cast<T>(a)),
+ y(static_cast<T>(b.x)),
+ z(static_cast<T>(b.y))
+ {}
+
+ template <typename T, precision P>
+ template <typename A, typename B, precision Q>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec3<T, P>::tvec3(tvec1<A, Q> const & a, tvec2<B, Q> const & b) :
+ x(static_cast<T>(a.x)),
+ y(static_cast<T>(b.x)),
+ z(static_cast<T>(b.y))
+ {}
+
+ template <typename T, precision P>
+ template <typename U, precision Q>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec3<T, P>::tvec3(tvec3<U, Q> const & v) :
+ x(static_cast<T>(v.x)),
+ y(static_cast<T>(v.y)),
+ z(static_cast<T>(v.z))
+ {}
+
+ template <typename T, precision P>
+ template <typename U, precision Q>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec3<T, P>::tvec3(tvec4<U, Q> const & v) :
+ x(static_cast<T>(v.x)),
+ y(static_cast<T>(v.y)),
+ z(static_cast<T>(v.z))
+ {}
+
+ // -- Component accesses --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tvec3<T, P>::length_type tvec3<T, P>::length() const
+ {
+ return 3;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER T & tvec3<T, P>::operator[](typename tvec3<T, P>::length_type i)
+ {
+ assert(i >= 0 && i < this->length());
+ return (&x)[i];
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER T const & tvec3<T, P>::operator[](typename tvec3<T, P>::length_type i) const
+ {
+ assert(i >= 0 && i < this->length());
+ return (&x)[i];
+ }
+
+ // -- Unary arithmetic operators --
+
+# if !GLM_HAS_DEFAULTED_FUNCTIONS
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P>& tvec3<T, P>::operator=(tvec3<T, P> const & v)
+ {
+ this->x = v.x;
+ this->y = v.y;
+ this->z = v.z;
+ return *this;
+ }
+# endif//!GLM_HAS_DEFAULTED_FUNCTIONS
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T, P>& tvec3<T, P>::operator=(tvec3<U, P> const & v)
+ {
+ this->x = static_cast<T>(v.x);
+ this->y = static_cast<T>(v.y);
+ this->z = static_cast<T>(v.z);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator+=(U scalar)
+ {
+ this->x += static_cast<T>(scalar);
+ this->y += static_cast<T>(scalar);
+ this->z += static_cast<T>(scalar);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator+=(tvec1<U, P> const & v)
+ {
+ this->x += static_cast<T>(v.x);
+ this->y += static_cast<T>(v.x);
+ this->z += static_cast<T>(v.x);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator+=(tvec3<U, P> const & v)
+ {
+ this->x += static_cast<T>(v.x);
+ this->y += static_cast<T>(v.y);
+ this->z += static_cast<T>(v.z);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator-=(U scalar)
+ {
+ this->x -= static_cast<T>(scalar);
+ this->y -= static_cast<T>(scalar);
+ this->z -= static_cast<T>(scalar);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator-=(tvec1<U, P> const & v)
+ {
+ this->x -= static_cast<T>(v.x);
+ this->y -= static_cast<T>(v.x);
+ this->z -= static_cast<T>(v.x);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator-=(tvec3<U, P> const & v)
+ {
+ this->x -= static_cast<T>(v.x);
+ this->y -= static_cast<T>(v.y);
+ this->z -= static_cast<T>(v.z);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator*=(U scalar)
+ {
+ this->x *= static_cast<T>(scalar);
+ this->y *= static_cast<T>(scalar);
+ this->z *= static_cast<T>(scalar);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator*=(tvec1<U, P> const & v)
+ {
+ this->x *= static_cast<T>(v.x);
+ this->y *= static_cast<T>(v.x);
+ this->z *= static_cast<T>(v.x);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator*=(tvec3<U, P> const & v)
+ {
+ this->x *= static_cast<T>(v.x);
+ this->y *= static_cast<T>(v.y);
+ this->z *= static_cast<T>(v.z);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator/=(U v)
+ {
+ this->x /= static_cast<T>(v);
+ this->y /= static_cast<T>(v);
+ this->z /= static_cast<T>(v);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator/=(tvec1<U, P> const & v)
+ {
+ this->x /= static_cast<T>(v.x);
+ this->y /= static_cast<T>(v.x);
+ this->z /= static_cast<T>(v.x);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator/=(tvec3<U, P> const & v)
+ {
+ this->x /= static_cast<T>(v.x);
+ this->y /= static_cast<T>(v.y);
+ this->z /= static_cast<T>(v.z);
+ return *this;
+ }
+
+ // -- Increment and decrement operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator++()
+ {
+ ++this->x;
+ ++this->y;
+ ++this->z;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator--()
+ {
+ --this->x;
+ --this->y;
+ --this->z;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> tvec3<T, P>::operator++(int)
+ {
+ tvec3<T, P> Result(*this);
+ ++*this;
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> tvec3<T, P>::operator--(int)
+ {
+ tvec3<T, P> Result(*this);
+ --*this;
+ return Result;
+ }
+
+ // -- Unary bit operators --
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator%=(U scalar)
+ {
+ this->x %= scalar;
+ this->y %= scalar;
+ this->z %= scalar;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator%=(tvec1<U, P> const & v)
+ {
+ this->x %= v.x;
+ this->y %= v.x;
+ this->z %= v.x;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator%=(tvec3<U, P> const & v)
+ {
+ this->x %= v.x;
+ this->y %= v.y;
+ this->z %= v.z;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator&=(U scalar)
+ {
+ this->x &= scalar;
+ this->y &= scalar;
+ this->z &= scalar;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator&=(tvec1<U, P> const & v)
+ {
+ this->x &= v.x;
+ this->y &= v.x;
+ this->z &= v.x;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator&=(tvec3<U, P> const & v)
+ {
+ this->x &= v.x;
+ this->y &= v.y;
+ this->z &= v.z;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator|=(U scalar)
+ {
+ this->x |= scalar;
+ this->y |= scalar;
+ this->z |= scalar;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator|=(tvec1<U, P> const & v)
+ {
+ this->x |= v.x;
+ this->y |= v.x;
+ this->z |= v.x;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator|=(tvec3<U, P> const & v)
+ {
+ this->x |= v.x;
+ this->y |= v.y;
+ this->z |= v.z;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator^=(U scalar)
+ {
+ this->x ^= scalar;
+ this->y ^= scalar;
+ this->z ^= scalar;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator^=(tvec1<U, P> const & v)
+ {
+ this->x ^= v.x;
+ this->y ^= v.x;
+ this->z ^= v.x;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator^=(tvec3<U, P> const & v)
+ {
+ this->x ^= v.x;
+ this->y ^= v.y;
+ this->z ^= v.z;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator<<=(U scalar)
+ {
+ this->x <<= scalar;
+ this->y <<= scalar;
+ this->z <<= scalar;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator<<=(tvec1<U, P> const & v)
+ {
+ this->x <<= static_cast<T>(v.x);
+ this->y <<= static_cast<T>(v.x);
+ this->z <<= static_cast<T>(v.x);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator<<=(tvec3<U, P> const & v)
+ {
+ this->x <<= static_cast<T>(v.x);
+ this->y <<= static_cast<T>(v.y);
+ this->z <<= static_cast<T>(v.z);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator>>=(U scalar)
+ {
+ this->x >>= static_cast<T>(scalar);
+ this->y >>= static_cast<T>(scalar);
+ this->z >>= static_cast<T>(scalar);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator>>=(tvec1<U, P> const & v)
+ {
+ this->x >>= static_cast<T>(v.x);
+ this->y >>= static_cast<T>(v.x);
+ this->z >>= static_cast<T>(v.x);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec3<T, P> & tvec3<T, P>::operator>>=(tvec3<U, P> const & v)
+ {
+ this->x >>= static_cast<T>(v.x);
+ this->y >>= static_cast<T>(v.y);
+ this->z >>= static_cast<T>(v.z);
+ return *this;
+ }
+
+ // -- Unary arithmetic operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator+(tvec3<T, P> const & v)
+ {
+ return v;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator-(tvec3<T, P> const & v)
+ {
+ return tvec3<T, P>(
+ -v.x,
+ -v.y,
+ -v.z);
+ }
+
+ // -- Binary arithmetic operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator+(tvec3<T, P> const & v, T scalar)
+ {
+ return tvec3<T, P>(
+ v.x + scalar,
+ v.y + scalar,
+ v.z + scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator+(tvec3<T, P> const & v, tvec1<T, P> const & scalar)
+ {
+ return tvec3<T, P>(
+ v.x + scalar.x,
+ v.y + scalar.x,
+ v.z + scalar.x);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator+(T scalar, tvec3<T, P> const & v)
+ {
+ return tvec3<T, P>(
+ scalar + v.x,
+ scalar + v.y,
+ scalar + v.z);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator+(tvec1<T, P> const & scalar, tvec3<T, P> const & v)
+ {
+ return tvec3<T, P>(
+ scalar.x + v.x,
+ scalar.x + v.y,
+ scalar.x + v.z);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator+(tvec3<T, P> const & v1, tvec3<T, P> const & v2)
+ {
+ return tvec3<T, P>(
+ v1.x + v2.x,
+ v1.y + v2.y,
+ v1.z + v2.z);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator-(tvec3<T, P> const & v, T scalar)
+ {
+ return tvec3<T, P>(
+ v.x - scalar,
+ v.y - scalar,
+ v.z - scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator-(tvec3<T, P> const & v, tvec1<T, P> const & scalar)
+ {
+ return tvec3<T, P>(
+ v.x - scalar.x,
+ v.y - scalar.x,
+ v.z - scalar.x);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator-(T scalar, tvec3<T, P> const & v)
+ {
+ return tvec3<T, P>(
+ scalar - v.x,
+ scalar - v.y,
+ scalar - v.z);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator-(tvec1<T, P> const & scalar, tvec3<T, P> const & v)
+ {
+ return tvec3<T, P>(
+ scalar.x - v.x,
+ scalar.x - v.y,
+ scalar.x - v.z);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator-(tvec3<T, P> const & v1, tvec3<T, P> const & v2)
+ {
+ return tvec3<T, P>(
+ v1.x - v2.x,
+ v1.y - v2.y,
+ v1.z - v2.z);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator*(tvec3<T, P> const & v, T scalar)
+ {
+ return tvec3<T, P>(
+ v.x * scalar,
+ v.y * scalar,
+ v.z * scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator*(tvec3<T, P> const & v, tvec1<T, P> const & scalar)
+ {
+ return tvec3<T, P>(
+ v.x * scalar.x,
+ v.y * scalar.x,
+ v.z * scalar.x);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator*(T scalar, tvec3<T, P> const & v)
+ {
+ return tvec3<T, P>(
+ scalar * v.x,
+ scalar * v.y,
+ scalar * v.z);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator*(tvec1<T, P> const & scalar, tvec3<T, P> const & v)
+ {
+ return tvec3<T, P>(
+ scalar.x * v.x,
+ scalar.x * v.y,
+ scalar.x * v.z);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator*(tvec3<T, P> const & v1, tvec3<T, P> const & v2)
+ {
+ return tvec3<T, P>(
+ v1.x * v2.x,
+ v1.y * v2.y,
+ v1.z * v2.z);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator/(tvec3<T, P> const & v, T scalar)
+ {
+ return tvec3<T, P>(
+ v.x / scalar,
+ v.y / scalar,
+ v.z / scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator/(tvec3<T, P> const & v, tvec1<T, P> const & scalar)
+ {
+ return tvec3<T, P>(
+ v.x / scalar.x,
+ v.y / scalar.x,
+ v.z / scalar.x);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator/(T scalar, tvec3<T, P> const & v)
+ {
+ return tvec3<T, P>(
+ scalar / v.x,
+ scalar / v.y,
+ scalar / v.z);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator/(tvec1<T, P> const & scalar, tvec3<T, P> const & v)
+ {
+ return tvec3<T, P>(
+ scalar.x / v.x,
+ scalar.x / v.y,
+ scalar.x / v.z);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator/(tvec3<T, P> const & v1, tvec3<T, P> const & v2)
+ {
+ return tvec3<T, P>(
+ v1.x / v2.x,
+ v1.y / v2.y,
+ v1.z / v2.z);
+ }
+
+ // -- Binary bit operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator%(tvec3<T, P> const & v, T scalar)
+ {
+ return tvec3<T, P>(
+ v.x % scalar,
+ v.y % scalar,
+ v.z % scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator%(tvec3<T, P> const & v, tvec1<T, P> const & scalar)
+ {
+ return tvec3<T, P>(
+ v.x % scalar.x,
+ v.y % scalar.x,
+ v.z % scalar.x);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator%(T scalar, tvec3<T, P> const & v)
+ {
+ return tvec3<T, P>(
+ scalar % v.x,
+ scalar % v.y,
+ scalar % v.z);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator%(tvec1<T, P> const & scalar, tvec3<T, P> const & v)
+ {
+ return tvec3<T, P>(
+ scalar.x % v.x,
+ scalar.x % v.y,
+ scalar.x % v.z);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator%(tvec3<T, P> const & v1, tvec3<T, P> const & v2)
+ {
+ return tvec3<T, P>(
+ v1.x % v2.x,
+ v1.y % v2.y,
+ v1.z % v2.z);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator&(tvec3<T, P> const & v, T scalar)
+ {
+ return tvec3<T, P>(
+ v.x & scalar,
+ v.y & scalar,
+ v.z & scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator&(tvec3<T, P> const & v, tvec1<T, P> const & scalar)
+ {
+ return tvec3<T, P>(
+ v.x & scalar.x,
+ v.y & scalar.x,
+ v.z & scalar.x);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator&(T scalar, tvec3<T, P> const & v)
+ {
+ return tvec3<T, P>(
+ scalar & v.x,
+ scalar & v.y,
+ scalar & v.z);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator&(tvec1<T, P> const & scalar, tvec3<T, P> const & v)
+ {
+ return tvec3<T, P>(
+ scalar.x & v.x,
+ scalar.x & v.y,
+ scalar.x & v.z);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator&(tvec3<T, P> const & v1, tvec3<T, P> const & v2)
+ {
+ return tvec3<T, P>(
+ v1.x & v2.x,
+ v1.y & v2.y,
+ v1.z & v2.z);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator|(tvec3<T, P> const & v, T scalar)
+ {
+ return tvec3<T, P>(
+ v.x | scalar,
+ v.y | scalar,
+ v.z | scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator|(tvec3<T, P> const & v, tvec1<T, P> const & scalar)
+ {
+ return tvec3<T, P>(
+ v.x | scalar.x,
+ v.y | scalar.x,
+ v.z | scalar.x);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator|(T scalar, tvec3<T, P> const & v)
+ {
+ return tvec3<T, P>(
+ scalar | v.x,
+ scalar | v.y,
+ scalar | v.z);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator|(tvec1<T, P> const & scalar, tvec3<T, P> const & v)
+ {
+ return tvec3<T, P>(
+ scalar.x | v.x,
+ scalar.x | v.y,
+ scalar.x | v.z);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator|(tvec3<T, P> const & v1, tvec3<T, P> const & v2)
+ {
+ return tvec3<T, P>(
+ v1.x | v2.x,
+ v1.y | v2.y,
+ v1.z | v2.z);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator^(tvec3<T, P> const & v, T scalar)
+ {
+ return tvec3<T, P>(
+ v.x ^ scalar,
+ v.y ^ scalar,
+ v.z ^ scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator^(tvec3<T, P> const & v, tvec1<T, P> const & scalar)
+ {
+ return tvec3<T, P>(
+ v.x ^ scalar.x,
+ v.y ^ scalar.x,
+ v.z ^ scalar.x);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator^(T scalar, tvec3<T, P> const & v)
+ {
+ return tvec3<T, P>(
+ scalar ^ v.x,
+ scalar ^ v.y,
+ scalar ^ v.z);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator^(tvec1<T, P> const & scalar, tvec3<T, P> const & v)
+ {
+ return tvec3<T, P>(
+ scalar.x ^ v.x,
+ scalar.x ^ v.y,
+ scalar.x ^ v.z);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator^(tvec3<T, P> const & v1, tvec3<T, P> const & v2)
+ {
+ return tvec3<T, P>(
+ v1.x ^ v2.x,
+ v1.y ^ v2.y,
+ v1.z ^ v2.z);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator<<(tvec3<T, P> const & v, T scalar)
+ {
+ return tvec3<T, P>(
+ v.x << scalar,
+ v.y << scalar,
+ v.z << scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator<<(tvec3<T, P> const & v, tvec1<T, P> const & scalar)
+ {
+ return tvec3<T, P>(
+ v.x << scalar.x,
+ v.y << scalar.x,
+ v.z << scalar.x);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator<<(T scalar, tvec3<T, P> const & v)
+ {
+ return tvec3<T, P>(
+ scalar << v.x,
+ scalar << v.y,
+ scalar << v.z);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator<<(tvec1<T, P> const & scalar, tvec3<T, P> const & v)
+ {
+ return tvec3<T, P>(
+ scalar.x << v.x,
+ scalar.x << v.y,
+ scalar.x << v.z);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator<<(tvec3<T, P> const & v1, tvec3<T, P> const & v2)
+ {
+ return tvec3<T, P>(
+ v1.x << v2.x,
+ v1.y << v2.y,
+ v1.z << v2.z);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator>>(tvec3<T, P> const & v, T scalar)
+ {
+ return tvec3<T, P>(
+ v.x >> scalar,
+ v.y >> scalar,
+ v.z >> scalar);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator>>(tvec3<T, P> const & v, tvec1<T, P> const & scalar)
+ {
+ return tvec3<T, P>(
+ v.x >> scalar.x,
+ v.y >> scalar.x,
+ v.z >> scalar.x);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator>>(T scalar, tvec3<T, P> const & v)
+ {
+ return tvec3<T, P>(
+ scalar >> v.x,
+ scalar >> v.y,
+ scalar >> v.z);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator>>(tvec1<T, P> const & scalar, tvec3<T, P> const & v)
+ {
+ return tvec3<T, P>(
+ scalar.x >> v.x,
+ scalar.x >> v.y,
+ scalar.x >> v.z);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator>>(tvec3<T, P> const & v1, tvec3<T, P> const & v2)
+ {
+ return tvec3<T, P>(
+ v1.x >> v2.x,
+ v1.y >> v2.y,
+ v1.z >> v2.z);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator~(tvec3<T, P> const & v)
+ {
+ return tvec3<T, P>(
+ ~v.x,
+ ~v.y,
+ ~v.z);
+ }
+
+ // -- Boolean operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER bool operator==(tvec3<T, P> const & v1, tvec3<T, P> const & v2)
+ {
+ return (v1.x == v2.x) && (v1.y == v2.y) && (v1.z == v2.z);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER bool operator!=(tvec3<T, P> const & v1, tvec3<T, P> const & v2)
+ {
+ return (v1.x != v2.x) || (v1.y != v2.y) || (v1.z != v2.z);
+ }
+
+ template <precision P>
+ GLM_FUNC_QUALIFIER tvec3<bool, P> operator&&(tvec3<bool, P> const & v1, tvec3<bool, P> const & v2)
+ {
+ return tvec3<bool, P>(v1.x && v2.x, v1.y && v2.y, v1.z && v2.z);
+ }
+
+ template <precision P>
+ GLM_FUNC_QUALIFIER tvec3<bool, P> operator||(tvec3<bool, P> const & v1, tvec3<bool, P> const & v2)
+ {
+ return tvec3<bool, P>(v1.x || v2.x, v1.y || v2.y, v1.z || v2.z);
+ }
+}//namespace glm
diff --git a/src/third_party/glm/glm/detail/type_vec4.hpp b/src/third_party/glm/glm/detail/type_vec4.hpp
new file mode 100644
index 0000000..5a03cd4
--- /dev/null
+++ b/src/third_party/glm/glm/detail/type_vec4.hpp
@@ -0,0 +1,451 @@
+/// @ref core
+/// @file glm/detail/type_vec4.hpp
+
+#pragma once
+
+#include "type_vec.hpp"
+#if GLM_SWIZZLE == GLM_SWIZZLE_ENABLED
+# if GLM_HAS_UNRESTRICTED_UNIONS
+# include "_swizzle.hpp"
+# else
+# include "_swizzle_func.hpp"
+# endif
+#endif //GLM_SWIZZLE
+#include <cstddef>
+
+namespace glm
+{
+ template <typename T, precision P = defaultp>
+ struct tvec4
+ {
+ // -- Implementation detail --
+
+ typedef T value_type;
+ typedef tvec4<T, P> type;
+ typedef tvec4<bool, P> bool_type;
+
+ // -- Data --
+
+# if GLM_HAS_ALIGNED_TYPE
+# if GLM_COMPILER & GLM_COMPILER_GCC
+# pragma GCC diagnostic push
+# pragma GCC diagnostic ignored "-Wpedantic"
+# endif
+# if GLM_COMPILER & GLM_COMPILER_CLANG
+# pragma clang diagnostic push
+# pragma clang diagnostic ignored "-Wgnu-anonymous-struct"
+# pragma clang diagnostic ignored "-Wnested-anon-types"
+# endif
+
+ union
+ {
+ struct { T x, y, z, w;};
+ struct { T r, g, b, a; };
+ struct { T s, t, p, q; };
+
+ typename detail::storage<T, sizeof(T) * 4, detail::is_aligned<P>::value>::type data;
+
+# if GLM_SWIZZLE == GLM_SWIZZLE_ENABLED
+ _GLM_SWIZZLE4_2_MEMBERS(T, P, glm::tvec2, x, y, z, w)
+ _GLM_SWIZZLE4_2_MEMBERS(T, P, glm::tvec2, r, g, b, a)
+ _GLM_SWIZZLE4_2_MEMBERS(T, P, glm::tvec2, s, t, p, q)
+ _GLM_SWIZZLE4_3_MEMBERS(T, P, glm::tvec3, x, y, z, w)
+ _GLM_SWIZZLE4_3_MEMBERS(T, P, glm::tvec3, r, g, b, a)
+ _GLM_SWIZZLE4_3_MEMBERS(T, P, glm::tvec3, s, t, p, q)
+ _GLM_SWIZZLE4_4_MEMBERS(T, P, glm::tvec4, x, y, z, w)
+ _GLM_SWIZZLE4_4_MEMBERS(T, P, glm::tvec4, r, g, b, a)
+ _GLM_SWIZZLE4_4_MEMBERS(T, P, glm::tvec4, s, t, p, q)
+# endif//GLM_SWIZZLE
+ };
+
+# if GLM_COMPILER & GLM_COMPILER_CLANG
+# pragma clang diagnostic pop
+# endif
+# if GLM_COMPILER & GLM_COMPILER_GCC
+# pragma GCC diagnostic pop
+# endif
+# else
+ union { T x, r, s; };
+ union { T y, g, t; };
+ union { T z, b, p; };
+ union { T w, a, q; };
+
+# if GLM_SWIZZLE == GLM_SWIZZLE_ENABLED
+ GLM_SWIZZLE_GEN_VEC_FROM_VEC4(T, P, tvec4, tvec2, tvec3, tvec4)
+# endif//GLM_SWIZZLE
+# endif
+
+ // -- Component accesses --
+
+ /// Return the count of components of the vector
+ typedef length_t length_type;
+ GLM_FUNC_DECL GLM_CONSTEXPR length_type length() const;
+
+ GLM_FUNC_DECL T & operator[](length_type i);
+ GLM_FUNC_DECL T const & operator[](length_type i) const;
+
+ // -- Implicit basic constructors --
+
+ GLM_FUNC_DECL GLM_CONSTEXPR tvec4() GLM_DEFAULT_CTOR;
+ GLM_FUNC_DECL GLM_CONSTEXPR tvec4(tvec4<T, P> const& v) GLM_DEFAULT;
+ template <precision Q>
+ GLM_FUNC_DECL GLM_CONSTEXPR tvec4(tvec4<T, Q> const& v);
+
+ // -- Explicit basic constructors --
+
+ GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tvec4(ctor);
+ GLM_FUNC_DECL GLM_CONSTEXPR_SIMD explicit tvec4(T scalar);
+ GLM_FUNC_DECL GLM_CONSTEXPR_SIMD tvec4(T a, T b, T c, T d);
+
+ // -- Conversion scalar constructors --
+
+ /// Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename A, typename B, typename C, typename D>
+ GLM_FUNC_DECL GLM_CONSTEXPR_SIMD tvec4(A a, B b, C c, D d);
+ template <typename A, typename B, typename C, typename D>
+ GLM_FUNC_DECL GLM_CONSTEXPR tvec4(tvec1<A, P> const& a, tvec1<B, P> const& b, tvec1<C, P> const& c, tvec1<D, P> const& d);
+
+ // -- Conversion vector constructors --
+
+ /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename A, typename B, typename C, precision Q>
+ GLM_FUNC_DECL GLM_CONSTEXPR tvec4(tvec2<A, Q> const & a, B b, C c);
+ /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename A, typename B, typename C, precision Q>
+ GLM_FUNC_DECL GLM_CONSTEXPR tvec4(tvec2<A, Q> const & a, tvec1<B, Q> const & b, tvec1<C, Q> const & c);
+ /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename A, typename B, typename C, precision Q>
+ GLM_FUNC_DECL GLM_CONSTEXPR tvec4(A a, tvec2<B, Q> const & b, C c);
+ /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename A, typename B, typename C, precision Q>
+ GLM_FUNC_DECL GLM_CONSTEXPR tvec4(tvec1<A, Q> const & a, tvec2<B, Q> const & b, tvec1<C, Q> const & c);
+ /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename A, typename B, typename C, precision Q>
+ GLM_FUNC_DECL GLM_CONSTEXPR tvec4(A a, B b, tvec2<C, Q> const & c);
+ /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename A, typename B, typename C, precision Q>
+ GLM_FUNC_DECL GLM_CONSTEXPR tvec4(tvec1<A, Q> const & a, tvec1<B, Q> const & b, tvec2<C, Q> const & c);
+ /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename A, typename B, precision Q>
+ GLM_FUNC_DECL GLM_CONSTEXPR tvec4(tvec3<A, Q> const & a, B b);
+ /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename A, typename B, precision Q>
+ GLM_FUNC_DECL GLM_CONSTEXPR tvec4(tvec3<A, Q> const & a, tvec1<B, Q> const & b);
+ /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename A, typename B, precision Q>
+ GLM_FUNC_DECL GLM_CONSTEXPR tvec4(A a, tvec3<B, Q> const & b);
+ /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename A, typename B, precision Q>
+ GLM_FUNC_DECL GLM_CONSTEXPR tvec4(tvec1<A, Q> const & a, tvec3<B, Q> const & b);
+ /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename A, typename B, precision Q>
+ GLM_FUNC_DECL GLM_CONSTEXPR tvec4(tvec2<A, Q> const & a, tvec2<B, Q> const & b);
+
+ /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
+ template <typename U, precision Q>
+ GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT tvec4(tvec4<U, Q> const& v);
+
+ // -- Swizzle constructors --
+# if GLM_HAS_UNRESTRICTED_UNIONS && (GLM_SWIZZLE == GLM_SWIZZLE_ENABLED)
+ template <int E0, int E1, int E2, int E3>
+ GLM_FUNC_DECL tvec4(detail::_swizzle<4, T, P, glm::tvec4, E0, E1, E2, E3> const & that)
+ {
+ *this = that();
+ }
+
+ template <int E0, int E1, int F0, int F1>
+ GLM_FUNC_DECL tvec4(detail::_swizzle<2, T, P, glm::tvec2, E0, E1, -1, -2> const & v, detail::_swizzle<2, T, P, glm::tvec2, F0, F1, -1, -2> const & u)
+ {
+ *this = tvec4<T, P>(v(), u());
+ }
+
+ template <int E0, int E1>
+ GLM_FUNC_DECL tvec4(T const & x, T const & y, detail::_swizzle<2, T, P, glm::tvec2, E0, E1, -1, -2> const & v)
+ {
+ *this = tvec4<T, P>(x, y, v());
+ }
+
+ template <int E0, int E1>
+ GLM_FUNC_DECL tvec4(T const & x, detail::_swizzle<2, T, P, glm::tvec2, E0, E1, -1, -2> const & v, T const & w)
+ {
+ *this = tvec4<T, P>(x, v(), w);
+ }
+
+ template <int E0, int E1>
+ GLM_FUNC_DECL tvec4(detail::_swizzle<2, T, P, glm::tvec2, E0, E1, -1, -2> const & v, T const & z, T const & w)
+ {
+ *this = tvec4<T, P>(v(), z, w);
+ }
+
+ template <int E0, int E1, int E2>
+ GLM_FUNC_DECL tvec4(detail::_swizzle<3, T, P, glm::tvec3, E0, E1, E2, -1> const & v, T const & w)
+ {
+ *this = tvec4<T, P>(v(), w);
+ }
+
+ template <int E0, int E1, int E2>
+ GLM_FUNC_DECL tvec4(T const & x, detail::_swizzle<3, T, P, glm::tvec3, E0, E1, E2, -1> const & v)
+ {
+ *this = tvec4<T, P>(x, v());
+ }
+# endif// GLM_HAS_UNRESTRICTED_UNIONS && (GLM_SWIZZLE == GLM_SWIZZLE_ENABLED)
+
+ // -- Unary arithmetic operators --
+
+ GLM_FUNC_DECL tvec4<T, P> & operator=(tvec4<T, P> const & v) GLM_DEFAULT;
+
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T, P> & operator=(tvec4<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T, P> & operator+=(U scalar);
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T, P> & operator+=(tvec1<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T, P> & operator+=(tvec4<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T, P> & operator-=(U scalar);
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T, P> & operator-=(tvec1<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T, P> & operator-=(tvec4<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T, P> & operator*=(U scalar);
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T, P> & operator*=(tvec1<U, P> const& v);
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T, P> & operator*=(tvec4<U, P> const& v);
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T, P> & operator/=(U scalar);
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T, P> & operator/=(tvec1<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T, P> & operator/=(tvec4<U, P> const & v);
+
+ // -- Increment and decrement operators --
+
+ GLM_FUNC_DECL tvec4<T, P> & operator++();
+ GLM_FUNC_DECL tvec4<T, P> & operator--();
+ GLM_FUNC_DECL tvec4<T, P> operator++(int);
+ GLM_FUNC_DECL tvec4<T, P> operator--(int);
+
+ // -- Unary bit operators --
+
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T, P> & operator%=(U scalar);
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T, P> & operator%=(tvec1<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T, P> & operator%=(tvec4<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T, P> & operator&=(U scalar);
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T, P> & operator&=(tvec1<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T, P> & operator&=(tvec4<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T, P> & operator|=(U scalar);
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T, P> & operator|=(tvec1<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T, P> & operator|=(tvec4<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T, P> & operator^=(U scalar);
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T, P> & operator^=(tvec1<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T, P> & operator^=(tvec4<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T, P> & operator<<=(U scalar);
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T, P> & operator<<=(tvec1<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T, P> & operator<<=(tvec4<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T, P> & operator>>=(U scalar);
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T, P> & operator>>=(tvec1<U, P> const & v);
+ template <typename U>
+ GLM_FUNC_DECL tvec4<T, P> & operator>>=(tvec4<U, P> const & v);
+ };
+
+ // -- Unary operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator+(tvec4<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator-(tvec4<T, P> const & v);
+
+ // -- Binary operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator+(tvec4<T, P> const & v, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator+(tvec4<T, P> const & v1, tvec1<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator+(T scalar, tvec4<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator+(tvec1<T, P> const & v1, tvec4<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator+(tvec4<T, P> const & v1, tvec4<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator-(tvec4<T, P> const & v, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator-(tvec4<T, P> const & v1, tvec1<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator-(T scalar, tvec4<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator-(tvec1<T, P> const & v1, tvec4<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator-(tvec4<T, P> const & v1, tvec4<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator*(tvec4<T, P> const & v, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator*(tvec4<T, P> const & v1, tvec1<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator*(T scalar, tvec4<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator*(tvec1<T, P> const & v1, tvec4<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator*(tvec4<T, P> const & v1, tvec4<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator/(tvec4<T, P> const & v, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator/(tvec4<T, P> const & v1, tvec1<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator/(T scalar, tvec4<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator/(tvec1<T, P> const & v1, tvec4<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator/(tvec4<T, P> const & v1, tvec4<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator%(tvec4<T, P> const & v, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator%(tvec4<T, P> const & v, tvec1<T, P> const & scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator%(T scalar, tvec4<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator%(tvec1<T, P> const & scalar, tvec4<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator%(tvec4<T, P> const & v1, tvec4<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator&(tvec4<T, P> const & v, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator&(tvec4<T, P> const & v, tvec1<T, P> const & scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator&(T scalar, tvec4<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator&(tvec1<T, P> const & scalar, tvec4<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator&(tvec4<T, P> const & v1, tvec4<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator|(tvec4<T, P> const & v, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator|(tvec4<T, P> const & v, tvec1<T, P> const & scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator|(T scalar, tvec4<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator|(tvec1<T, P> const & scalar, tvec4<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator|(tvec4<T, P> const & v1, tvec4<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator^(tvec4<T, P> const & v, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator^(tvec4<T, P> const & v, tvec1<T, P> const & scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator^(T scalar, tvec4<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator^(tvec1<T, P> const & scalar, tvec4<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator^(tvec4<T, P> const & v1, tvec4<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator<<(tvec4<T, P> const & v, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator<<(tvec4<T, P> const & v, tvec1<T, P> const & scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator<<(T scalar, tvec4<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator<<(tvec1<T, P> const & scalar, tvec4<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator<<(tvec4<T, P> const & v1, tvec4<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator>>(tvec4<T, P> const & v, T scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator>>(tvec4<T, P> const & v, tvec1<T, P> const & scalar);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator>>(T scalar, tvec4<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator>>(tvec1<T, P> const & scalar, tvec4<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator>>(tvec4<T, P> const & v1, tvec4<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator~(tvec4<T, P> const & v);
+
+ // -- Boolean operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL bool operator==(tvec4<T, P> const & v1, tvec4<T, P> const & v2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL bool operator!=(tvec4<T, P> const & v1, tvec4<T, P> const & v2);
+
+ template <precision P>
+ GLM_FUNC_DECL tvec4<bool, P> operator&&(tvec4<bool, P> const & v1, tvec4<bool, P> const & v2);
+
+ template <precision P>
+ GLM_FUNC_DECL tvec4<bool, P> operator||(tvec4<bool, P> const & v1, tvec4<bool, P> const & v2);
+}//namespace glm
+
+#ifndef GLM_EXTERNAL_TEMPLATE
+#include "type_vec4.inl"
+#endif//GLM_EXTERNAL_TEMPLATE
diff --git a/src/third_party/glm/glm/detail/type_vec4.inl b/src/third_party/glm/glm/detail/type_vec4.inl
new file mode 100644
index 0000000..496da9d
--- /dev/null
+++ b/src/third_party/glm/glm/detail/type_vec4.inl
@@ -0,0 +1,975 @@
+/// @ref core
+/// @file glm/detail/type_tvec4.inl
+
+namespace glm{
+namespace detail
+{
+ template <typename T>
+ struct is_int
+ {
+ enum test {value = 0};
+ };
+
+ template <>
+ struct is_int<uint32>
+ {
+ enum test {value = ~0};
+ };
+
+ template <>
+ struct is_int<int32>
+ {
+ enum test {value = ~0};
+ };
+
+ template <>
+ struct is_int<uint64>
+ {
+ enum test {value = ~0};
+ };
+
+ template <>
+ struct is_int<int64>
+ {
+ enum test {value = ~0};
+ };
+
+ template <typename T, precision P, bool Aligned>
+ struct compute_vec4_add
+ {
+ GLM_FUNC_QUALIFIER static tvec4<T, P> call(tvec4<T, P> const & a, tvec4<T, P> const & b)
+ {
+ return tvec4<T, P>(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w);
+ }
+ };
+
+ template <typename T, precision P, bool Aligned>
+ struct compute_vec4_sub
+ {
+ GLM_FUNC_QUALIFIER static tvec4<T, P> call(tvec4<T, P> const & a, tvec4<T, P> const & b)
+ {
+ return tvec4<T, P>(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w);
+ }
+ };
+
+ template <typename T, precision P, bool Aligned>
+ struct compute_vec4_mul
+ {
+ GLM_FUNC_QUALIFIER static tvec4<T, P> call(tvec4<T, P> const & a, tvec4<T, P> const & b)
+ {
+ return tvec4<T, P>(a.x * b.x, a.y * b.y, a.z * b.z, a.w * b.w);
+ }
+ };
+
+ template <typename T, precision P, bool Aligned>
+ struct compute_vec4_div
+ {
+ GLM_FUNC_QUALIFIER static tvec4<T, P> call(tvec4<T, P> const & a, tvec4<T, P> const & b)
+ {
+ return tvec4<T, P>(a.x / b.x, a.y / b.y, a.z / b.z, a.w / b.w);
+ }
+ };
+
+ template <typename T, precision P, bool Aligned>
+ struct compute_vec4_mod
+ {
+ GLM_FUNC_QUALIFIER static tvec4<T, P> call(tvec4<T, P> const & a, tvec4<T, P> const & b)
+ {
+ return tvec4<T, P>(a.x % b.x, a.y % b.y, a.z % b.z, a.w % b.w);
+ }
+ };
+
+ template <typename T, precision P, int IsInt, std::size_t Size, bool Aligned>
+ struct compute_vec4_and
+ {
+ GLM_FUNC_QUALIFIER static tvec4<T, P> call(tvec4<T, P> const & a, tvec4<T, P> const & b)
+ {
+ return tvec4<T, P>(a.x & b.x, a.y & b.y, a.z & b.z, a.w & b.w);
+ }
+ };
+
+ template <typename T, precision P, int IsInt, std::size_t Size, bool Aligned>
+ struct compute_vec4_or
+ {
+ GLM_FUNC_QUALIFIER static tvec4<T, P> call(tvec4<T, P> const & a, tvec4<T, P> const & b)
+ {
+ return tvec4<T, P>(a.x | b.x, a.y | b.y, a.z | b.z, a.w | b.w);
+ }
+ };
+
+ template <typename T, precision P, int IsInt, std::size_t Size, bool Aligned>
+ struct compute_vec4_xor
+ {
+ GLM_FUNC_QUALIFIER static tvec4<T, P> call(tvec4<T, P> const & a, tvec4<T, P> const & b)
+ {
+ return tvec4<T, P>(a.x ^ b.x, a.y ^ b.y, a.z ^ b.z, a.w ^ b.w);
+ }
+ };
+
+ template <typename T, precision P, int IsInt, std::size_t Size, bool Aligned>
+ struct compute_vec4_shift_left
+ {
+ GLM_FUNC_QUALIFIER static tvec4<T, P> call(tvec4<T, P> const & a, tvec4<T, P> const & b)
+ {
+ return tvec4<T, P>(a.x << b.x, a.y << b.y, a.z << b.z, a.w << b.w);
+ }
+ };
+
+ template <typename T, precision P, int IsInt, std::size_t Size, bool Aligned>
+ struct compute_vec4_shift_right
+ {
+ GLM_FUNC_QUALIFIER static tvec4<T, P> call(tvec4<T, P> const & a, tvec4<T, P> const & b)
+ {
+ return tvec4<T, P>(a.x >> b.x, a.y >> b.y, a.z >> b.z, a.w >> b.w);
+ }
+ };
+
+ template <typename T, precision P, int IsInt, std::size_t Size, bool Aligned>
+ struct compute_vec4_equal
+ {
+ GLM_FUNC_QUALIFIER static bool call(tvec4<T, P> const & v1, tvec4<T, P> const & v2)
+ {
+ return (v1.x == v2.x) && (v1.y == v2.y) && (v1.z == v2.z) && (v1.w == v2.w);
+ }
+ };
+
+ template <typename T, precision P, int IsInt, std::size_t Size, bool Aligned>
+ struct compute_vec4_nequal
+ {
+ GLM_FUNC_QUALIFIER static bool call(tvec4<T, P> const & v1, tvec4<T, P> const & v2)
+ {
+ return (v1.x != v2.x) || (v1.y != v2.y) || (v1.z != v2.z) || (v1.w != v2.w);
+ }
+ };
+
+ template <typename T, precision P, int IsInt, std::size_t Size, bool Aligned>
+ struct compute_vec4_bitwise_not
+ {
+ GLM_FUNC_QUALIFIER static tvec4<T, P> call(tvec4<T, P> const & v)
+ {
+ return tvec4<T, P>(~v.x, ~v.y, ~v.z, ~v.w);
+ }
+ };
+}//namespace detail
+
+ // -- Implicit basic constructors --
+
+# if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT)
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec4<T, P>::tvec4()
+# ifndef GLM_FORCE_NO_CTOR_INIT
+ : x(0), y(0), z(0), w(0)
+# endif
+ {}
+# endif//!GLM_HAS_DEFAULTED_FUNCTIONS
+
+# if !GLM_HAS_DEFAULTED_FUNCTIONS
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec4<T, P>::tvec4(tvec4<T, P> const & v)
+ : x(v.x), y(v.y), z(v.z), w(v.w)
+ {}
+# endif//!GLM_HAS_DEFAULTED_FUNCTIONS
+
+ template <typename T, precision P>
+ template <precision Q>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec4<T, P>::tvec4(tvec4<T, Q> const & v)
+ : x(v.x), y(v.y), z(v.z), w(v.w)
+ {}
+
+ // -- Explicit basic constructors --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4<T, P>::tvec4(ctor)
+ {}
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<T, P>::tvec4(T scalar)
+ : x(scalar), y(scalar), z(scalar), w(scalar)
+ {}
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<T, P>::tvec4(T a, T b, T c, T d)
+ : x(a), y(b), z(c), w(d)
+ {}
+
+ // -- Conversion scalar constructors --
+
+ template <typename T, precision P>
+ template <typename A, typename B, typename C, typename D>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<T, P>::tvec4(A a, B b, C c, D d) :
+ x(static_cast<T>(a)),
+ y(static_cast<T>(b)),
+ z(static_cast<T>(c)),
+ w(static_cast<T>(d))
+ {}
+
+ template <typename T, precision P>
+ template <typename A, typename B, typename C, typename D>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec4<T, P>::tvec4(tvec1<A, P> const & a, tvec1<B, P> const & b, tvec1<C, P> const & c, tvec1<D, P> const & d) :
+ x(static_cast<T>(a.x)),
+ y(static_cast<T>(b.x)),
+ z(static_cast<T>(c.x)),
+ w(static_cast<T>(d.x))
+ {}
+
+ // -- Conversion vector constructors --
+
+ template <typename T, precision P>
+ template <typename A, typename B, typename C, precision Q>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec4<T, P>::tvec4(tvec2<A, Q> const & a, B b, C c) :
+ x(static_cast<T>(a.x)),
+ y(static_cast<T>(a.y)),
+ z(static_cast<T>(b)),
+ w(static_cast<T>(c))
+ {}
+
+ template <typename T, precision P>
+ template <typename A, typename B, typename C, precision Q>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec4<T, P>::tvec4(tvec2<A, Q> const & a, tvec1<B, Q> const & b, tvec1<C, Q> const & c) :
+ x(static_cast<T>(a.x)),
+ y(static_cast<T>(a.y)),
+ z(static_cast<T>(b.x)),
+ w(static_cast<T>(c.x))
+ {}
+
+ template <typename T, precision P>
+ template <typename A, typename B, typename C, precision Q>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec4<T, P>::tvec4(A s1, tvec2<B, Q> const & v, C s2) :
+ x(static_cast<T>(s1)),
+ y(static_cast<T>(v.x)),
+ z(static_cast<T>(v.y)),
+ w(static_cast<T>(s2))
+ {}
+
+ template <typename T, precision P>
+ template <typename A, typename B, typename C, precision Q>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec4<T, P>::tvec4(tvec1<A, Q> const & a, tvec2<B, Q> const & b, tvec1<C, Q> const & c) :
+ x(static_cast<T>(a.x)),
+ y(static_cast<T>(b.x)),
+ z(static_cast<T>(b.y)),
+ w(static_cast<T>(c.x))
+ {}
+
+ template <typename T, precision P>
+ template <typename A, typename B, typename C, precision Q>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec4<T, P>::tvec4(A s1, B s2, tvec2<C, Q> const & v) :
+ x(static_cast<T>(s1)),
+ y(static_cast<T>(s2)),
+ z(static_cast<T>(v.x)),
+ w(static_cast<T>(v.y))
+ {}
+
+ template <typename T, precision P>
+ template <typename A, typename B, typename C, precision Q>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec4<T, P>::tvec4(tvec1<A, Q> const & a, tvec1<B, Q> const & b, tvec2<C, Q> const & c) :
+ x(static_cast<T>(a.x)),
+ y(static_cast<T>(b.x)),
+ z(static_cast<T>(c.x)),
+ w(static_cast<T>(c.y))
+ {}
+
+ template <typename T, precision P>
+ template <typename A, typename B, precision Q>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec4<T, P>::tvec4(tvec3<A, Q> const & a, B b) :
+ x(static_cast<T>(a.x)),
+ y(static_cast<T>(a.y)),
+ z(static_cast<T>(a.z)),
+ w(static_cast<T>(b))
+ {}
+
+ template <typename T, precision P>
+ template <typename A, typename B, precision Q>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec4<T, P>::tvec4(tvec3<A, Q> const & a, tvec1<B, Q> const & b) :
+ x(static_cast<T>(a.x)),
+ y(static_cast<T>(a.y)),
+ z(static_cast<T>(a.z)),
+ w(static_cast<T>(b.x))
+ {}
+
+ template <typename T, precision P>
+ template <typename A, typename B, precision Q>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec4<T, P>::tvec4(A a, tvec3<B, Q> const & b) :
+ x(static_cast<T>(a)),
+ y(static_cast<T>(b.x)),
+ z(static_cast<T>(b.y)),
+ w(static_cast<T>(b.z))
+ {}
+
+ template <typename T, precision P>
+ template <typename A, typename B, precision Q>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec4<T, P>::tvec4(tvec1<A, Q> const & a, tvec3<B, Q> const & b) :
+ x(static_cast<T>(a.x)),
+ y(static_cast<T>(b.x)),
+ z(static_cast<T>(b.y)),
+ w(static_cast<T>(b.z))
+ {}
+
+ template <typename T, precision P>
+ template <typename A, typename B, precision Q>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec4<T, P>::tvec4(tvec2<A, Q> const & a, tvec2<B, Q> const & b) :
+ x(static_cast<T>(a.x)),
+ y(static_cast<T>(a.y)),
+ z(static_cast<T>(b.x)),
+ w(static_cast<T>(b.y))
+ {}
+
+ template <typename T, precision P>
+ template <typename U, precision Q>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tvec4<T, P>::tvec4(tvec4<U, Q> const & v) :
+ x(static_cast<T>(v.x)),
+ y(static_cast<T>(v.y)),
+ z(static_cast<T>(v.z)),
+ w(static_cast<T>(v.w))
+ {}
+
+ // -- Component accesses --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tvec4<T, P>::length_type tvec4<T, P>::length() const
+ {
+ return 4;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER T & tvec4<T, P>::operator[](typename tvec4<T, P>::length_type i)
+ {
+ assert(i >= 0 && i < this->length());
+ return (&x)[i];
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER T const & tvec4<T, P>::operator[](typename tvec4<T, P>::length_type i) const
+ {
+ assert(i >= 0 && i < this->length());
+ return (&x)[i];
+ }
+
+ // -- Unary arithmetic operators --
+
+# if !GLM_HAS_DEFAULTED_FUNCTIONS
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P>& tvec4<T, P>::operator=(tvec4<T, P> const & v)
+ {
+ this->x = v.x;
+ this->y = v.y;
+ this->z = v.z;
+ this->w = v.w;
+ return *this;
+ }
+# endif//!GLM_HAS_DEFAULTED_FUNCTIONS
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T, P>& tvec4<T, P>::operator=(tvec4<U, P> const & v)
+ {
+ this->x = static_cast<T>(v.x);
+ this->y = static_cast<T>(v.y);
+ this->z = static_cast<T>(v.z);
+ this->w = static_cast<T>(v.w);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator+=(U scalar)
+ {
+ return (*this = detail::compute_vec4_add<T, P, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(scalar)));
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator+=(tvec1<U, P> const & v)
+ {
+ return (*this = detail::compute_vec4_add<T, P, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(v.x)));
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator+=(tvec4<U, P> const & v)
+ {
+ return (*this = detail::compute_vec4_add<T, P, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(v)));
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator-=(U scalar)
+ {
+ return (*this = detail::compute_vec4_sub<T, P, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(scalar)));
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator-=(tvec1<U, P> const & v)
+ {
+ return (*this = detail::compute_vec4_sub<T, P, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(v.x)));
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator-=(tvec4<U, P> const & v)
+ {
+ return (*this = detail::compute_vec4_sub<T, P, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(v)));
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator*=(U scalar)
+ {
+ return (*this = detail::compute_vec4_mul<T, P, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(scalar)));
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator*=(tvec1<U, P> const & v)
+ {
+ return (*this = detail::compute_vec4_mul<T, P, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(v.x)));
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator*=(tvec4<U, P> const & v)
+ {
+ return (*this = detail::compute_vec4_mul<T, P, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(v)));
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator/=(U scalar)
+ {
+ return (*this = detail::compute_vec4_div<T, P, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(scalar)));
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator/=(tvec1<U, P> const & v)
+ {
+ return (*this = detail::compute_vec4_div<T, P, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(v.x)));
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator/=(tvec4<U, P> const & v)
+ {
+ return (*this = detail::compute_vec4_div<T, P, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(v)));
+ }
+
+ // -- Increment and decrement operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator++()
+ {
+ ++this->x;
+ ++this->y;
+ ++this->z;
+ ++this->w;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator--()
+ {
+ --this->x;
+ --this->y;
+ --this->z;
+ --this->w;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> tvec4<T, P>::operator++(int)
+ {
+ tvec4<T, P> Result(*this);
+ ++*this;
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> tvec4<T, P>::operator--(int)
+ {
+ tvec4<T, P> Result(*this);
+ --*this;
+ return Result;
+ }
+
+ // -- Unary bit operators --
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator%=(U scalar)
+ {
+ return (*this = detail::compute_vec4_mod<T, P, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(scalar)));
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator%=(tvec1<U, P> const& v)
+ {
+ return (*this = detail::compute_vec4_mod<T, P, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(v)));
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator%=(tvec4<U, P> const& v)
+ {
+ return (*this = detail::compute_vec4_mod<T, P, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(v)));
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator&=(U scalar)
+ {
+ return (*this = detail::compute_vec4_and<T, P, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(scalar)));
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator&=(tvec1<U, P> const & v)
+ {
+ return (*this = detail::compute_vec4_and<T, P, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(v)));
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator&=(tvec4<U, P> const & v)
+ {
+ return (*this = detail::compute_vec4_and<T, P, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(v)));
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator|=(U scalar)
+ {
+ return (*this = detail::compute_vec4_or<T, P, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(scalar)));
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator|=(tvec1<U, P> const & v)
+ {
+ return (*this = detail::compute_vec4_or<T, P, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(v)));
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator|=(tvec4<U, P> const & v)
+ {
+ return (*this = detail::compute_vec4_or<T, P, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(v)));
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator^=(U scalar)
+ {
+ return (*this = detail::compute_vec4_xor<T, P, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(scalar)));
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator^=(tvec1<U, P> const & v)
+ {
+ return (*this = detail::compute_vec4_xor<T, P, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(v)));
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator^=(tvec4<U, P> const & v)
+ {
+ return (*this = detail::compute_vec4_xor<T, P, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(v)));
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator<<=(U scalar)
+ {
+ return (*this = detail::compute_vec4_shift_left<T, P, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(scalar)));
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator<<=(tvec1<U, P> const & v)
+ {
+ return (*this = detail::compute_vec4_shift_left<T, P, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(v)));
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator<<=(tvec4<U, P> const & v)
+ {
+ return (*this = detail::compute_vec4_shift_left<T, P, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(v)));
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator>>=(U scalar)
+ {
+ return (*this = detail::compute_vec4_shift_right<T, P, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(scalar)));
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator>>=(tvec1<U, P> const & v)
+ {
+ return (*this = detail::compute_vec4_shift_right<T, P, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(v)));
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tvec4<T, P> & tvec4<T, P>::operator>>=(tvec4<U, P> const & v)
+ {
+ return (*this = detail::compute_vec4_shift_right<T, P, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<P>::value>::call(*this, tvec4<T, P>(v)));
+ }
+
+ // -- Unary constant operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator+(tvec4<T, P> const & v)
+ {
+ return v;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator-(tvec4<T, P> const & v)
+ {
+ return tvec4<T, P>(0) -= v;
+ }
+
+ // -- Binary arithmetic operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator+(tvec4<T, P> const & v, T scalar)
+ {
+ return tvec4<T, P>(v) += scalar;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator+(tvec4<T, P> const & v1, tvec1<T, P> const & v2)
+ {
+ return tvec4<T, P>(v1) += v2;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator+(T scalar, tvec4<T, P> const & v)
+ {
+ return tvec4<T, P>(v) += scalar;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator+(tvec1<T, P> const & v1, tvec4<T, P> const & v2)
+ {
+ return tvec4<T, P>(v2) += v1;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator+(tvec4<T, P> const & v1, tvec4<T, P> const & v2)
+ {
+ return tvec4<T, P>(v1) += v2;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator-(tvec4<T, P> const & v, T scalar)
+ {
+ return tvec4<T, P>(v) -= scalar;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator-(tvec4<T, P> const & v1, tvec1<T, P> const & v2)
+ {
+ return tvec4<T, P>(v1) -= v2;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator-(T scalar, tvec4<T, P> const & v)
+ {
+ return tvec4<T, P>(scalar) -= v;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator-(tvec1<T, P> const & v1, tvec4<T, P> const & v2)
+ {
+ return tvec4<T, P>(v1.x) -= v2;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator-(tvec4<T, P> const & v1, tvec4<T, P> const & v2)
+ {
+ return tvec4<T, P>(v1) -= v2;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator*(tvec4<T, P> const & v, T scalar)
+ {
+ return tvec4<T, P>(v) *= scalar;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator*(tvec4<T, P> const & v1, tvec1<T, P> const & v2)
+ {
+ return tvec4<T, P>(v1) *= v2;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator*(T scalar, tvec4<T, P> const & v)
+ {
+ return tvec4<T, P>(v) *= scalar;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator*(tvec1<T, P> const & v1, tvec4<T, P> const & v2)
+ {
+ return tvec4<T, P>(v2) *= v1;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator*(tvec4<T, P> const & v1, tvec4<T, P> const & v2)
+ {
+ return tvec4<T, P>(v1) *= v2;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator/(tvec4<T, P> const & v, T scalar)
+ {
+ return tvec4<T, P>(v) /= scalar;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator/(tvec4<T, P> const & v1, tvec1<T, P> const & v2)
+ {
+ return tvec4<T, P>(v1) /= v2;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator/(T scalar, tvec4<T, P> const & v)
+ {
+ return tvec4<T, P>(scalar) /= v;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator/(tvec1<T, P> const & v1, tvec4<T, P> const & v2)
+ {
+ return tvec4<T, P>(v1.x) /= v2;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator/(tvec4<T, P> const & v1, tvec4<T, P> const & v2)
+ {
+ return tvec4<T, P>(v1) /= v2;
+ }
+
+ // -- Binary bit operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator%(tvec4<T, P> const & v, T scalar)
+ {
+ return tvec4<T, P>(v) %= scalar;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator%(tvec4<T, P> const & v1, tvec1<T, P> const & v2)
+ {
+ return tvec4<T, P>(v1) %= v2.x;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator%(T scalar, tvec4<T, P> const & v)
+ {
+ return tvec4<T, P>(scalar) %= v;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator%(tvec1<T, P> const & scalar, tvec4<T, P> const & v)
+ {
+ return tvec4<T, P>(scalar.x) %= v;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator%(tvec4<T, P> const & v1, tvec4<T, P> const & v2)
+ {
+ return tvec4<T, P>(v1) %= v2;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator&(tvec4<T, P> const & v, T scalar)
+ {
+ return tvec4<T, P>(v) &= scalar;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator&(tvec4<T, P> const & v, tvec1<T, P> const & scalar)
+ {
+ return tvec4<T, P>(v) &= scalar;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator&(T scalar, tvec4<T, P> const & v)
+ {
+ return tvec4<T, P>(scalar) &= v;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator&(tvec1<T, P> const & v1, tvec4<T, P> const & v2)
+ {
+ return tvec4<T, P>(v1.x) &= v2;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator&(tvec4<T, P> const & v1, tvec4<T, P> const & v2)
+ {
+ return tvec4<T, P>(v1) &= v2;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator|(tvec4<T, P> const & v, T scalar)
+ {
+ return tvec4<T, P>(v) |= scalar;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator|(tvec4<T, P> const & v1, tvec1<T, P> const & v2)
+ {
+ return tvec4<T, P>(v1) |= v2.x;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator|(T scalar, tvec4<T, P> const & v)
+ {
+ return tvec4<T, P>(scalar) |= v;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator|(tvec1<T, P> const & v1, tvec4<T, P> const & v2)
+ {
+ return tvec4<T, P>(v1.x) |= v2;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator|(tvec4<T, P> const & v1, tvec4<T, P> const & v2)
+ {
+ return tvec4<T, P>(v1) |= v2;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator^(tvec4<T, P> const & v, T scalar)
+ {
+ return tvec4<T, P>(v) ^= scalar;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator^(tvec4<T, P> const & v1, tvec1<T, P> const & v2)
+ {
+ return tvec4<T, P>(v1) ^= v2.x;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator^(T scalar, tvec4<T, P> const & v)
+ {
+ return tvec4<T, P>(scalar) ^= v;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator^(tvec1<T, P> const & v1, tvec4<T, P> const & v2)
+ {
+ return tvec4<T, P>(v1.x) ^= v2;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator^(tvec4<T, P> const & v1, tvec4<T, P> const & v2)
+ {
+ return tvec4<T, P>(v1) ^= v2;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator<<(tvec4<T, P> const & v, T scalar)
+ {
+ return tvec4<T, P>(v) <<= scalar;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator<<(tvec4<T, P> const & v1, tvec1<T, P> const & v2)
+ {
+ return tvec4<T, P>(v1) <<= v2.x;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator<<(T scalar, tvec4<T, P> const & v)
+ {
+ return tvec4<T, P>(scalar) <<= v;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator<<(tvec1<T, P> const & v1, tvec4<T, P> const & v2)
+ {
+ return tvec4<T, P>(v1.x) <<= v2;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator<<(tvec4<T, P> const & v1, tvec4<T, P> const & v2)
+ {
+ return tvec4<T, P>(v1) <<= v2;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator>>(tvec4<T, P> const & v, T scalar)
+ {
+ return tvec4<T, P>(v) >>= scalar;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator>>(tvec4<T, P> const & v1, tvec1<T, P> const & v2)
+ {
+ return tvec4<T, P>(v1) >>= v2.x;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator>>(T scalar, tvec4<T, P> const & v)
+ {
+ return tvec4<T, P>(scalar) >>= v;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator>>(tvec1<T, P> const & v1, tvec4<T, P> const & v2)
+ {
+ return tvec4<T, P>(v1.x) >>= v2;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator>>(tvec4<T, P> const & v1, tvec4<T, P> const & v2)
+ {
+ return tvec4<T, P>(v1) >>= v2;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator~(tvec4<T, P> const & v)
+ {
+ return detail::compute_vec4_bitwise_not<T, P, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<P>::value>::call(v);
+ }
+
+ // -- Boolean operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER bool operator==(tvec4<T, P> const & v1, tvec4<T, P> const & v2)
+ {
+ return detail::compute_vec4_equal<T, P, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<P>::value>::call(v1, v2);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER bool operator!=(tvec4<T, P> const & v1, tvec4<T, P> const & v2)
+ {
+ return detail::compute_vec4_nequal<T, P, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<P>::value>::call(v1, v2);
+ }
+
+ template <precision P>
+ GLM_FUNC_QUALIFIER tvec4<bool, P> operator&&(tvec4<bool, P> const & v1, tvec4<bool, P> const & v2)
+ {
+ return tvec4<bool, P>(v1.x && v2.x, v1.y && v2.y, v1.z && v2.z, v1.w && v2.w);
+ }
+
+ template <precision P>
+ GLM_FUNC_QUALIFIER tvec4<bool, P> operator||(tvec4<bool, P> const & v1, tvec4<bool, P> const & v2)
+ {
+ return tvec4<bool, P>(v1.x || v2.x, v1.y || v2.y, v1.z || v2.z, v1.w || v2.w);
+ }
+}//namespace glm
+
+#if GLM_ARCH != GLM_ARCH_PURE && GLM_HAS_ALIGNED_TYPE
+# include "type_vec4_simd.inl"
+#endif
diff --git a/src/third_party/glm/glm/detail/type_vec4_simd.inl b/src/third_party/glm/glm/detail/type_vec4_simd.inl
new file mode 100644
index 0000000..55db422
--- /dev/null
+++ b/src/third_party/glm/glm/detail/type_vec4_simd.inl
@@ -0,0 +1,481 @@
+/// @ref core
+/// @file glm/detail/type_tvec4_simd.inl
+
+#if GLM_ARCH & GLM_ARCH_SSE2_BIT
+
+namespace glm{
+namespace detail
+{
+# if GLM_SWIZZLE == GLM_SWIZZLE_ENABLED
+ template <precision P, int E0, int E1, int E2, int E3>
+ struct _swizzle_base1<4, float, P, glm::tvec4, E0,E1,E2,E3, true> : public _swizzle_base0<float, 4>
+ {
+ GLM_FUNC_QUALIFIER tvec4<float, P> operator ()() const
+ {
+ __m128 data = *reinterpret_cast<__m128 const*>(&this->_buffer);
+
+ tvec4<float, P> Result(uninitialize);
+# if GLM_ARCH & GLM_ARCH_AVX_BIT
+ Result.data = _mm_permute_ps(data, _MM_SHUFFLE(E3, E2, E1, E0));
+# else
+ Result.data = _mm_shuffle_ps(data, data, _MM_SHUFFLE(E3, E2, E1, E0));
+# endif
+ return Result;
+ }
+ };
+
+ template <precision P, int E0, int E1, int E2, int E3>
+ struct _swizzle_base1<4, int32, P, glm::tvec4, E0,E1,E2,E3, true> : public _swizzle_base0<int32, 4>
+ {
+ GLM_FUNC_QUALIFIER tvec4<int32, P> operator ()() const
+ {
+ __m128i data = *reinterpret_cast<__m128i const*>(&this->_buffer);
+
+ tvec4<int32, P> Result(uninitialize);
+ Result.data = _mm_shuffle_epi32(data, _MM_SHUFFLE(E3, E2, E1, E0));
+ return Result;
+ }
+ };
+
+ template <precision P, int E0, int E1, int E2, int E3>
+ struct _swizzle_base1<4, uint32, P, glm::tvec4, E0,E1,E2,E3, true> : public _swizzle_base0<uint32, 4>
+ {
+ GLM_FUNC_QUALIFIER tvec4<uint32, P> operator ()() const
+ {
+ __m128i data = *reinterpret_cast<__m128i const*>(&this->_buffer);
+
+ tvec4<uint32, P> Result(uninitialize);
+ Result.data = _mm_shuffle_epi32(data, _MM_SHUFFLE(E3, E2, E1, E0));
+ return Result;
+ }
+ };
+# endif// GLM_SWIZZLE == GLM_SWIZZLE_ENABLED
+
+ template <precision P>
+ struct compute_vec4_add<float, P, true>
+ {
+ static tvec4<float, P> call(tvec4<float, P> const & a, tvec4<float, P> const & b)
+ {
+ tvec4<float, P> Result(uninitialize);
+ Result.data = _mm_add_ps(a.data, b.data);
+ return Result;
+ }
+ };
+
+# if GLM_ARCH & GLM_ARCH_AVX_BIT
+ template <precision P>
+ struct compute_vec4_add<double, P, true>
+ {
+ static tvec4<double, P> call(tvec4<double, P> const & a, tvec4<double, P> const & b)
+ {
+ tvec4<double, P> Result(uninitialize);
+ Result.data = _mm256_add_pd(a.data, b.data);
+ return Result;
+ }
+ };
+# endif
+
+ template <precision P>
+ struct compute_vec4_sub<float, P, true>
+ {
+ static tvec4<float, P> call(tvec4<float, P> const & a, tvec4<float, P> const & b)
+ {
+ tvec4<float, P> Result(uninitialize);
+ Result.data = _mm_sub_ps(a.data, b.data);
+ return Result;
+ }
+ };
+
+# if GLM_ARCH & GLM_ARCH_AVX_BIT
+ template <precision P>
+ struct compute_vec4_sub<double, P, true>
+ {
+ static tvec4<double, P> call(tvec4<double, P> const & a, tvec4<double, P> const & b)
+ {
+ tvec4<double, P> Result(uninitialize);
+ Result.data = _mm256_sub_pd(a.data, b.data);
+ return Result;
+ }
+ };
+# endif
+
+ template <precision P>
+ struct compute_vec4_mul<float, P, true>
+ {
+ static tvec4<float, P> call(tvec4<float, P> const & a, tvec4<float, P> const & b)
+ {
+ tvec4<float, P> Result(uninitialize);
+ Result.data = _mm_mul_ps(a.data, b.data);
+ return Result;
+ }
+ };
+
+# if GLM_ARCH & GLM_ARCH_AVX_BIT
+ template <precision P>
+ struct compute_vec4_mul<double, P, true>
+ {
+ static tvec4<double, P> call(tvec4<double, P> const & a, tvec4<double, P> const & b)
+ {
+ tvec4<double, P> Result(uninitialize);
+ Result.data = _mm256_mul_pd(a.data, b.data);
+ return Result;
+ }
+ };
+# endif
+
+ template <precision P>
+ struct compute_vec4_div<float, P, true>
+ {
+ static tvec4<float, P> call(tvec4<float, P> const & a, tvec4<float, P> const & b)
+ {
+ tvec4<float, P> Result(uninitialize);
+ Result.data = _mm_div_ps(a.data, b.data);
+ return Result;
+ }
+ };
+
+ # if GLM_ARCH & GLM_ARCH_AVX_BIT
+ template <precision P>
+ struct compute_vec4_div<double, P, true>
+ {
+ static tvec4<double, P> call(tvec4<double, P> const & a, tvec4<double, P> const & b)
+ {
+ tvec4<double, P> Result(uninitialize);
+ Result.data = _mm256_div_pd(a.data, b.data);
+ return Result;
+ }
+ };
+# endif
+
+ template <>
+ struct compute_vec4_div<float, aligned_lowp, true>
+ {
+ static tvec4<float, aligned_lowp> call(tvec4<float, aligned_lowp> const & a, tvec4<float, aligned_lowp> const & b)
+ {
+ tvec4<float, aligned_lowp> Result(uninitialize);
+ Result.data = _mm_mul_ps(a.data, _mm_rcp_ps(b.data));
+ return Result;
+ }
+ };
+
+ template <typename T, precision P>
+ struct compute_vec4_and<T, P, true, 32, true>
+ {
+ static tvec4<T, P> call(tvec4<T, P> const& a, tvec4<T, P> const& b)
+ {
+ tvec4<T, P> Result(uninitialize);
+ Result.data = _mm_and_si128(a.data, b.data);
+ return Result;
+ }
+ };
+
+# if GLM_ARCH & GLM_ARCH_AVX2_BIT
+ template <typename T, precision P>
+ struct compute_vec4_and<T, P, true, 64, true>
+ {
+ static tvec4<T, P> call(tvec4<T, P> const& a, tvec4<T, P> const& b)
+ {
+ tvec4<T, P> Result(uninitialize);
+ Result.data = _mm256_and_si256(a.data, b.data);
+ return Result;
+ }
+ };
+# endif
+
+ template <typename T, precision P>
+ struct compute_vec4_or<T, P, true, 32, true>
+ {
+ static tvec4<T, P> call(tvec4<T, P> const& a, tvec4<T, P> const& b)
+ {
+ tvec4<T, P> Result(uninitialize);
+ Result.data = _mm_or_si128(a.data, b.data);
+ return Result;
+ }
+ };
+
+# if GLM_ARCH & GLM_ARCH_AVX2_BIT
+ template <typename T, precision P>
+ struct compute_vec4_or<T, P, true, 64, true>
+ {
+ static tvec4<T, P> call(tvec4<T, P> const& a, tvec4<T, P> const& b)
+ {
+ tvec4<T, P> Result(uninitialize);
+ Result.data = _mm256_or_si256(a.data, b.data);
+ return Result;
+ }
+ };
+# endif
+
+ template <typename T, precision P>
+ struct compute_vec4_xor<T, P, true, 32, true>
+ {
+ static tvec4<T, P> call(tvec4<T, P> const& a, tvec4<T, P> const& b)
+ {
+ tvec4<T, P> Result(uninitialize);
+ Result.data = _mm_xor_si128(a.data, b.data);
+ return Result;
+ }
+ };
+
+# if GLM_ARCH & GLM_ARCH_AVX2_BIT
+ template <typename T, precision P>
+ struct compute_vec4_xor<T, P, true, 64, true>
+ {
+ static tvec4<T, P> call(tvec4<T, P> const& a, tvec4<T, P> const& b)
+ {
+ tvec4<T, P> Result(uninitialize);
+ Result.data = _mm256_xor_si256(a.data, b.data);
+ return Result;
+ }
+ };
+# endif
+
+ template <typename T, precision P>
+ struct compute_vec4_shift_left<T, P, true, 32, true>
+ {
+ static tvec4<T, P> call(tvec4<T, P> const& a, tvec4<T, P> const& b)
+ {
+ tvec4<T, P> Result(uninitialize);
+ Result.data = _mm_sll_epi32(a.data, b.data);
+ return Result;
+ }
+ };
+
+# if GLM_ARCH & GLM_ARCH_AVX2_BIT
+ template <typename T, precision P>
+ struct compute_vec4_shift_left<T, P, true, 64, true>
+ {
+ static tvec4<T, P> call(tvec4<T, P> const& a, tvec4<T, P> const& b)
+ {
+ tvec4<T, P> Result(uninitialize);
+ Result.data = _mm256_sll_epi64(a.data, b.data);
+ return Result;
+ }
+ };
+# endif
+
+ template <typename T, precision P>
+ struct compute_vec4_shift_right<T, P, true, 32, true>
+ {
+ static tvec4<T, P> call(tvec4<T, P> const& a, tvec4<T, P> const& b)
+ {
+ tvec4<T, P> Result(uninitialize);
+ Result.data = _mm_srl_epi32(a.data, b.data);
+ return Result;
+ }
+ };
+
+# if GLM_ARCH & GLM_ARCH_AVX2_BIT
+ template <typename T, precision P>
+ struct compute_vec4_shift_right<T, P, true, 64, true>
+ {
+ static tvec4<T, P> call(tvec4<T, P> const& a, tvec4<T, P> const& b)
+ {
+ tvec4<T, P> Result(uninitialize);
+ Result.data = _mm256_srl_epi64(a.data, b.data);
+ return Result;
+ }
+ };
+# endif
+
+ template <typename T, precision P>
+ struct compute_vec4_bitwise_not<T, P, true, 32, true>
+ {
+ static tvec4<T, P> call(tvec4<T, P> const & v)
+ {
+ tvec4<T, P> Result(uninitialize);
+ Result.data = _mm_xor_si128(v.data, _mm_set1_epi32(-1));
+ return Result;
+ }
+ };
+
+# if GLM_ARCH & GLM_ARCH_AVX2_BIT
+ template <typename T, precision P>
+ struct compute_vec4_bitwise_not<T, P, true, 64, true>
+ {
+ static tvec4<T, P> call(tvec4<T, P> const & v)
+ {
+ tvec4<T, P> Result(uninitialize);
+ Result.data = _mm256_xor_si256(v.data, _mm_set1_epi32(-1));
+ return Result;
+ }
+ };
+# endif
+
+ template <precision P>
+ struct compute_vec4_equal<float, P, false, 32, true>
+ {
+ static bool call(tvec4<float, P> const & v1, tvec4<float, P> const & v2)
+ {
+ return _mm_movemask_ps(_mm_cmpeq_ps(v1.data, v2.data)) != 0;
+ }
+ };
+
+ template <precision P>
+ struct compute_vec4_equal<int32, P, true, 32, true>
+ {
+ static bool call(tvec4<int32, P> const & v1, tvec4<int32, P> const & v2)
+ {
+ return _mm_movemask_epi8(_mm_cmpeq_epi32(v1.data, v2.data)) != 0;
+ }
+ };
+
+ template <precision P>
+ struct compute_vec4_nequal<float, P, false, 32, true>
+ {
+ static bool call(tvec4<float, P> const & v1, tvec4<float, P> const & v2)
+ {
+ return _mm_movemask_ps(_mm_cmpneq_ps(v1.data, v2.data)) != 0;
+ }
+ };
+
+ template <precision P>
+ struct compute_vec4_nequal<int32, P, true, 32, true>
+ {
+ static bool call(tvec4<int32, P> const & v1, tvec4<int32, P> const & v2)
+ {
+ return _mm_movemask_epi8(_mm_cmpneq_epi32(v1.data, v2.data)) != 0;
+ }
+ };
+}//namespace detail
+
+# if !GLM_HAS_DEFAULTED_FUNCTIONS
+ template <>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4<float, aligned_lowp>::tvec4()
+# ifndef GLM_FORCE_NO_CTOR_INIT
+ : data(_mm_setzero_ps())
+# endif
+ {}
+
+ template <>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4<float, aligned_mediump>::tvec4()
+# ifndef GLM_FORCE_NO_CTOR_INIT
+ : data(_mm_setzero_ps())
+# endif
+ {}
+
+ template <>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tvec4<float, aligned_highp>::tvec4()
+# ifndef GLM_FORCE_NO_CTOR_INIT
+ : data(_mm_setzero_ps())
+# endif
+ {}
+# endif//!GLM_HAS_DEFAULTED_FUNCTIONS
+
+ template <>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<float, aligned_lowp>::tvec4(float s) :
+ data(_mm_set1_ps(s))
+ {}
+
+ template <>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<float, aligned_mediump>::tvec4(float s) :
+ data(_mm_set1_ps(s))
+ {}
+
+ template <>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<float, aligned_highp>::tvec4(float s) :
+ data(_mm_set1_ps(s))
+ {}
+
+# if GLM_ARCH & GLM_ARCH_AVX_BIT
+ template <>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<double, aligned_lowp>::tvec4(double s) :
+ data(_mm256_set1_pd(s))
+ {}
+
+ template <>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<double, aligned_mediump>::tvec4(double s) :
+ data(_mm256_set1_pd(s))
+ {}
+
+ template <>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<double, aligned_highp>::tvec4(double s) :
+ data(_mm256_set1_pd(s))
+ {}
+# endif
+
+ template <>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<int32, aligned_lowp>::tvec4(int32 s) :
+ data(_mm_set1_epi32(s))
+ {}
+
+ template <>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<int32, aligned_mediump>::tvec4(int32 s) :
+ data(_mm_set1_epi32(s))
+ {}
+
+ template <>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<int32, aligned_highp>::tvec4(int32 s) :
+ data(_mm_set1_epi32(s))
+ {}
+
+# if GLM_ARCH & GLM_ARCH_AVX2_BIT
+ template <>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<int64, aligned_lowp>::tvec4(int64 s) :
+ data(_mm256_set1_epi64x(s))
+ {}
+
+ template <>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<int64, aligned_mediump>::tvec4(int64 s) :
+ data(_mm256_set1_epi64x(s))
+ {}
+
+ template <>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<int64, aligned_highp>::tvec4(int64 s) :
+ data(_mm256_set1_epi64x(s))
+ {}
+# endif
+
+ template <>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<float, aligned_lowp>::tvec4(float a, float b, float c, float d) :
+ data(_mm_set_ps(d, c, b, a))
+ {}
+
+ template <>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<float, aligned_mediump>::tvec4(float a, float b, float c, float d) :
+ data(_mm_set_ps(d, c, b, a))
+ {}
+
+ template <>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<float, aligned_highp>::tvec4(float a, float b, float c, float d) :
+ data(_mm_set_ps(d, c, b, a))
+ {}
+
+ template <>
+ template <>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<int32, aligned_lowp>::tvec4(int32 a, int32 b, int32 c, int32 d) :
+ data(_mm_set_epi32(d, c, b, a))
+ {}
+
+ template <>
+ template <>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<int32, aligned_mediump>::tvec4(int32 a, int32 b, int32 c, int32 d) :
+ data(_mm_set_epi32(d, c, b, a))
+ {}
+
+ template <>
+ template <>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<int32, aligned_highp>::tvec4(int32 a, int32 b, int32 c, int32 d) :
+ data(_mm_set_epi32(d, c, b, a))
+ {}
+
+ template <>
+ template <>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<float, aligned_lowp>::tvec4(int32 a, int32 b, int32 c, int32 d) :
+ data(_mm_castsi128_ps(_mm_set_epi32(d, c, b, a)))
+ {}
+
+ template <>
+ template <>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<float, aligned_mediump>::tvec4(int32 a, int32 b, int32 c, int32 d) :
+ data(_mm_castsi128_ps(_mm_set_epi32(d, c, b, a)))
+ {}
+
+ template <>
+ template <>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR_SIMD tvec4<float, aligned_highp>::tvec4(int32 a, int32 b, int32 c, int32 d) :
+ data(_mm_castsi128_ps(_mm_set_epi32(d, c, b, a)))
+ {}
+}//namespace glm
+
+#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT
diff --git a/src/third_party/glm/glm/exponential.hpp b/src/third_party/glm/glm/exponential.hpp
new file mode 100644
index 0000000..f3a7842
--- /dev/null
+++ b/src/third_party/glm/glm/exponential.hpp
@@ -0,0 +1,6 @@
+/// @ref core
+/// @file glm/exponential.hpp
+
+#pragma once
+
+#include "detail/func_exponential.hpp"
diff --git a/src/third_party/glm/glm/ext.hpp b/src/third_party/glm/glm/ext.hpp
new file mode 100644
index 0000000..204f358
--- /dev/null
+++ b/src/third_party/glm/glm/ext.hpp
@@ -0,0 +1,117 @@
+/// @file glm/ext.hpp
+///
+/// @ref core (Dependence)
+///
+/// @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 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.
+
+#pragma once
+
+#include "glm.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_MESSAGE_EXT_INCLUDED_DISPLAYED)
+# define GLM_MESSAGE_EXT_INCLUDED_DISPLAYED
+# pragma message("GLM: All extensions included (not recommanded)")
+#endif//GLM_MESSAGES
+
+#include "./gtc/bitfield.hpp"
+#include "./gtc/color_encoding.hpp"
+#include "./gtc/color_space.hpp"
+#include "./gtc/constants.hpp"
+#include "./gtc/epsilon.hpp"
+#include "./gtc/functions.hpp"
+#include "./gtc/integer.hpp"
+#include "./gtc/matrix_access.hpp"
+#include "./gtc/matrix_integer.hpp"
+#include "./gtc/matrix_inverse.hpp"
+#include "./gtc/matrix_transform.hpp"
+#include "./gtc/noise.hpp"
+#include "./gtc/packing.hpp"
+#include "./gtc/quaternion.hpp"
+#include "./gtc/random.hpp"
+#include "./gtc/reciprocal.hpp"
+#include "./gtc/round.hpp"
+//#include "./gtc/type_aligned.hpp"
+#include "./gtc/type_precision.hpp"
+#include "./gtc/type_ptr.hpp"
+#include "./gtc/ulp.hpp"
+#include "./gtc/vec1.hpp"
+#if GLM_HAS_ALIGNED_TYPE
+# include "./gtc/type_aligned.hpp"
+#endif
+
+#include "./gtx/associated_min_max.hpp"
+#include "./gtx/bit.hpp"
+#include "./gtx/closest_point.hpp"
+#include "./gtx/color_space.hpp"
+#include "./gtx/color_space_YCoCg.hpp"
+#include "./gtx/compatibility.hpp"
+#include "./gtx/component_wise.hpp"
+#include "./gtx/dual_quaternion.hpp"
+#include "./gtx/euler_angles.hpp"
+#include "./gtx/extend.hpp"
+#include "./gtx/extended_min_max.hpp"
+#include "./gtx/fast_exponential.hpp"
+#include "./gtx/fast_square_root.hpp"
+#include "./gtx/fast_trigonometry.hpp"
+#include "./gtx/gradient_paint.hpp"
+#include "./gtx/handed_coordinate_space.hpp"
+#include "./gtx/integer.hpp"
+#include "./gtx/intersect.hpp"
+#include "./gtx/log_base.hpp"
+#include "./gtx/matrix_cross_product.hpp"
+#include "./gtx/matrix_interpolation.hpp"
+#include "./gtx/matrix_major_storage.hpp"
+#include "./gtx/matrix_operation.hpp"
+#include "./gtx/matrix_query.hpp"
+#include "./gtx/mixed_product.hpp"
+#include "./gtx/norm.hpp"
+#include "./gtx/normal.hpp"
+#include "./gtx/normalize_dot.hpp"
+#include "./gtx/number_precision.hpp"
+#include "./gtx/optimum_pow.hpp"
+#include "./gtx/orthonormalize.hpp"
+#include "./gtx/perpendicular.hpp"
+#include "./gtx/polar_coordinates.hpp"
+#include "./gtx/projection.hpp"
+#include "./gtx/quaternion.hpp"
+#include "./gtx/raw_data.hpp"
+#include "./gtx/rotate_vector.hpp"
+#include "./gtx/spline.hpp"
+#include "./gtx/std_based_type.hpp"
+#if !(GLM_COMPILER & GLM_COMPILER_CUDA)
+# include "./gtx/string_cast.hpp"
+#endif
+#include "./gtx/transform.hpp"
+#include "./gtx/transform2.hpp"
+#include "./gtx/vector_angle.hpp"
+#include "./gtx/vector_query.hpp"
+#include "./gtx/wrap.hpp"
+
+#if GLM_HAS_TEMPLATE_ALIASES
+# include "./gtx/scalar_multiplication.hpp"
+#endif
+
+#if GLM_HAS_RANGE_FOR
+# include "./gtx/range.hpp"
+#endif
diff --git a/src/third_party/glm/glm/fwd.hpp b/src/third_party/glm/glm/fwd.hpp
new file mode 100644
index 0000000..f90c4d0
--- /dev/null
+++ b/src/third_party/glm/glm/fwd.hpp
@@ -0,0 +1,2570 @@
+/// @ref core
+/// @file glm/fwd.hpp
+
+#pragma once
+
+#include "detail/type_int.hpp"
+#include "detail/type_float.hpp"
+#include "detail/type_vec.hpp"
+#include "detail/type_mat.hpp"
+
+//////////////////////
+// GLM_GTC_quaternion
+namespace glm
+{
+ template <typename T, precision P> struct tquat;
+
+ /// Quaternion of low single-precision floating-point numbers.
+ ///
+ /// @see gtc_quaternion
+ typedef tquat<float, lowp> lowp_quat;
+
+ /// Quaternion of medium single-precision floating-point numbers.
+ ///
+ /// @see gtc_quaternion
+ typedef tquat<float, mediump> mediump_quat;
+
+ /// Quaternion of high single-precision floating-point numbers.
+ ///
+ /// @see gtc_quaternion
+ typedef tquat<float, highp> highp_quat;
+
+#if(defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
+ typedef highp_quat quat;
+#elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
+ typedef mediump_quat quat;
+#elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && defined(GLM_PRECISION_LOWP_FLOAT))
+ typedef lowp_quat quat;
+#elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
+ /// Quaternion of default single-precision floating-point numbers.
+ typedef highp_quat quat;
+#endif
+
+ /// Quaternion of low single-precision floating-point numbers.
+ ///
+ /// @see gtc_quaternion
+ typedef lowp_quat lowp_fquat;
+
+ /// Quaternion of medium single-precision floating-point numbers.
+ ///
+ /// @see gtc_quaternion
+ typedef mediump_quat mediump_fquat;
+
+ /// Quaternion of high single-precision floating-point numbers.
+ ///
+ /// @see gtc_quaternion
+ typedef highp_quat highp_fquat;
+
+ /// Quaternion of default single-precision floating-point numbers.
+ ///
+ /// @see gtc_quaternion
+ typedef quat fquat;
+
+
+ /// Quaternion of low double-precision floating-point numbers.
+ ///
+ /// @see gtc_quaternion
+ typedef tquat<double, lowp> lowp_dquat;
+
+ /// Quaternion of medium double-precision floating-point numbers.
+ ///
+ /// @see gtc_quaternion
+ typedef tquat<double, mediump> mediump_dquat;
+
+ /// Quaternion of high double-precision floating-point numbers.
+ ///
+ /// @see gtc_quaternion
+ typedef tquat<double, highp> highp_dquat;
+
+#if(defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE))
+ typedef highp_dquat dquat;
+#elif(!defined(GLM_PRECISION_HIGHP_DOUBLE) && defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE))
+ typedef mediump_dquat dquat;
+#elif(!defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && defined(GLM_PRECISION_LOWP_DOUBLE))
+ typedef lowp_dquat dquat;
+#elif(!defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE))
+ /// Quaternion of default double-precision floating-point numbers.
+ ///
+ /// @see gtc_quaternion
+ typedef highp_dquat dquat;
+#endif
+
+}//namespace glm
+
+//////////////////////
+// GLM_GTC_precision
+namespace glm
+{
+ /// Low precision 8 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int8 lowp_int8;
+
+ /// Low precision 16 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int16 lowp_int16;
+
+ /// Low precision 32 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int32 lowp_int32;
+
+ /// Low precision 64 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int64 lowp_int64;
+
+ /// Low precision 8 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int8 lowp_int8_t;
+
+ /// Low precision 16 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int16 lowp_int16_t;
+
+ /// Low precision 32 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int32 lowp_int32_t;
+
+ /// Low precision 64 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int64 lowp_int64_t;
+
+ /// Low precision 8 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int8 lowp_i8;
+
+ /// Low precision 16 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int16 lowp_i16;
+
+ /// Low precision 32 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int32 lowp_i32;
+
+ /// Low precision 64 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int64 lowp_i64;
+
+ /// Medium precision 8 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int8 mediump_int8;
+
+ /// Medium precision 16 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int16 mediump_int16;
+
+ /// Medium precision 32 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int32 mediump_int32;
+
+ /// Medium precision 64 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int64 mediump_int64;
+
+ /// Medium precision 8 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int8 mediump_int8_t;
+
+ /// Medium precision 16 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int16 mediump_int16_t;
+
+ /// Medium precision 32 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int32 mediump_int32_t;
+
+ /// Medium precision 64 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int64 mediump_int64_t;
+
+ /// Medium precision 8 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int8 mediump_i8;
+
+ /// Medium precision 16 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int16 mediump_i16;
+
+ /// Medium precision 32 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int32 mediump_i32;
+
+ /// Medium precision 64 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int64 mediump_i64;
+
+ /// High precision 8 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int8 highp_int8;
+
+ /// High precision 16 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int16 highp_int16;
+
+ /// High precision 32 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int32 highp_int32;
+
+ /// High precision 64 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int64 highp_int64;
+
+ /// High precision 8 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int8 highp_int8_t;
+
+ /// High precision 16 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int16 highp_int16_t;
+
+ /// 32 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int32 highp_int32_t;
+
+ /// High precision 64 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int64 highp_int64_t;
+
+ /// High precision 8 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int8 highp_i8;
+
+ /// High precision 16 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int16 highp_i16;
+
+ /// High precision 32 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int32 highp_i32;
+
+ /// High precision 64 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int64 highp_i64;
+
+
+ /// 8 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int8 int8;
+
+ /// 16 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int16 int16;
+
+ /// 32 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int32 int32;
+
+ /// 64 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int64 int64;
+
+
+#if GLM_HAS_EXTENDED_INTEGER_TYPE
+ using std::int8_t;
+ using std::int16_t;
+ using std::int32_t;
+ using std::int64_t;
+#else
+ /// 8 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int8 int8_t;
+
+ /// 16 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int16 int16_t;
+
+ /// 32 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int32 int32_t;
+
+ /// 64 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int64 int64_t;
+#endif
+
+ /// 8 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int8 i8;
+
+ /// 16 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int16 i16;
+
+ /// 32 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int32 i32;
+
+ /// 64 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int64 i64;
+
+
+
+ /// Low precision 8 bit signed integer scalar type.
+ /// @see gtc_type_precision
+ typedef tvec1<i8, lowp> lowp_i8vec1;
+
+ /// Low precision 8 bit signed integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef tvec2<i8, lowp> lowp_i8vec2;
+
+ /// Low precision 8 bit signed integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef tvec3<i8, lowp> lowp_i8vec3;
+
+ /// Low precision 8 bit signed integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef tvec4<i8, lowp> lowp_i8vec4;
+
+
+ /// Medium precision 8 bit signed integer scalar type.
+ /// @see gtc_type_precision
+ typedef tvec1<i8, mediump> mediump_i8vec1;
+
+ /// Medium precision 8 bit signed integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef tvec2<i8, mediump> mediump_i8vec2;
+
+ /// Medium precision 8 bit signed integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef tvec3<i8, mediump> mediump_i8vec3;
+
+ /// Medium precision 8 bit signed integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef tvec4<i8, mediump> mediump_i8vec4;
+
+
+ /// High precision 8 bit signed integer scalar type.
+ /// @see gtc_type_precision
+ typedef tvec1<i8, highp> highp_i8vec1;
+
+ /// High precision 8 bit signed integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef tvec2<i8, highp> highp_i8vec2;
+
+ /// High precision 8 bit signed integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef tvec3<i8, highp> highp_i8vec3;
+
+ /// High precision 8 bit signed integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef tvec4<i8, highp> highp_i8vec4;
+
+#if(defined(GLM_PRECISION_LOWP_INT))
+ typedef lowp_i8vec1 i8vec1;
+ typedef lowp_i8vec2 i8vec2;
+ typedef lowp_i8vec3 i8vec3;
+ typedef lowp_i8vec4 i8vec4;
+#elif(defined(GLM_PRECISION_MEDIUMP_INT))
+ typedef mediump_i8vec1 i8vec1;
+ typedef mediump_i8vec2 i8vec2;
+ typedef mediump_i8vec3 i8vec3;
+ typedef mediump_i8vec4 i8vec4;
+#else
+ /// Default precision 8 bit signed integer scalar type.
+ /// @see gtc_type_precision
+ typedef highp_i8vec1 i8vec1;
+
+ /// Default precision 8 bit signed integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef highp_i8vec2 i8vec2;
+
+ /// Default precision 8 bit signed integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef highp_i8vec3 i8vec3;
+
+ /// Default precision 8 bit signed integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef highp_i8vec4 i8vec4;
+#endif
+
+
+ /// Low precision 16 bit signed integer scalar type.
+ /// @see gtc_type_precision
+ typedef tvec1<i16, lowp> lowp_i16vec1;
+
+ /// Low precision 16 bit signed integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef tvec2<i16, lowp> lowp_i16vec2;
+
+ /// Low precision 16 bit signed integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef tvec3<i16, lowp> lowp_i16vec3;
+
+ /// Low precision 16 bit signed integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef tvec4<i16, lowp> lowp_i16vec4;
+
+
+ /// Medium precision 16 bit signed integer scalar type.
+ /// @see gtc_type_precision
+ typedef tvec1<i16, mediump> mediump_i16vec1;
+
+ /// Medium precision 16 bit signed integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef tvec2<i16, mediump> mediump_i16vec2;
+
+ /// Medium precision 16 bit signed integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef tvec3<i16, mediump> mediump_i16vec3;
+
+ /// Medium precision 16 bit signed integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef tvec4<i16, mediump> mediump_i16vec4;
+
+
+ /// High precision 16 bit signed integer scalar type.
+ /// @see gtc_type_precision
+ typedef tvec1<i16, highp> highp_i16vec1;
+
+ /// High precision 16 bit signed integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef tvec2<i16, highp> highp_i16vec2;
+
+ /// High precision 16 bit signed integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef tvec3<i16, highp> highp_i16vec3;
+
+ /// High precision 16 bit signed integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef tvec4<i16, highp> highp_i16vec4;
+
+
+#if(defined(GLM_PRECISION_LOWP_INT))
+ typedef lowp_i16vec1 i16vec1;
+ typedef lowp_i16vec2 i16vec2;
+ typedef lowp_i16vec3 i16vec3;
+ typedef lowp_i16vec4 i16vec4;
+#elif(defined(GLM_PRECISION_MEDIUMP_INT))
+ typedef mediump_i16vec1 i16vec1;
+ typedef mediump_i16vec2 i16vec2;
+ typedef mediump_i16vec3 i16vec3;
+ typedef mediump_i16vec4 i16vec4;
+#else
+ /// Default precision 16 bit signed integer scalar type.
+ /// @see gtc_type_precision
+ typedef highp_i16vec1 i16vec1;
+
+ /// Default precision 16 bit signed integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef highp_i16vec2 i16vec2;
+
+ /// Default precision 16 bit signed integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef highp_i16vec3 i16vec3;
+
+ /// Default precision 16 bit signed integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef highp_i16vec4 i16vec4;
+#endif
+
+
+ /// Low precision 32 bit signed integer scalar type.
+ /// @see gtc_type_precision
+ typedef tvec1<i32, lowp> lowp_i32vec1;
+
+ /// Low precision 32 bit signed integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef tvec2<i32, lowp> lowp_i32vec2;
+
+ /// Low precision 32 bit signed integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef tvec3<i32, lowp> lowp_i32vec3;
+
+ /// Low precision 32 bit signed integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef tvec4<i32, lowp> lowp_i32vec4;
+
+
+ /// Medium precision 32 bit signed integer scalar type.
+ /// @see gtc_type_precision
+ typedef tvec1<i32, mediump> mediump_i32vec1;
+
+ /// Medium precision 32 bit signed integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef tvec2<i32, mediump> mediump_i32vec2;
+
+ /// Medium precision 32 bit signed integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef tvec3<i32, mediump> mediump_i32vec3;
+
+ /// Medium precision 32 bit signed integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef tvec4<i32, mediump> mediump_i32vec4;
+
+
+ /// High precision 32 bit signed integer scalar type.
+ /// @see gtc_type_precision
+ typedef tvec1<i32, highp> highp_i32vec1;
+
+ /// High precision 32 bit signed integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef tvec2<i32, highp> highp_i32vec2;
+
+ /// High precision 32 bit signed integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef tvec3<i32, highp> highp_i32vec3;
+
+ /// High precision 32 bit signed integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef tvec4<i32, highp> highp_i32vec4;
+
+#if(defined(GLM_PRECISION_LOWP_INT))
+ typedef lowp_i32vec1 i32vec1;
+ typedef lowp_i32vec2 i32vec2;
+ typedef lowp_i32vec3 i32vec3;
+ typedef lowp_i32vec4 i32vec4;
+#elif(defined(GLM_PRECISION_MEDIUMP_INT))
+ typedef mediump_i32vec1 i32vec1;
+ typedef mediump_i32vec2 i32vec2;
+ typedef mediump_i32vec3 i32vec3;
+ typedef mediump_i32vec4 i32vec4;
+#else
+ /// Default precision 32 bit signed integer scalar type.
+ /// @see gtc_type_precision
+ typedef highp_i32vec1 i32vec1;
+
+ /// Default precision 32 bit signed integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef highp_i32vec2 i32vec2;
+
+ /// Default precision 32 bit signed integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef highp_i32vec3 i32vec3;
+
+ /// Default precision 32 bit signed integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef highp_i32vec4 i32vec4;
+#endif
+
+
+ /// Low precision 32 bit signed integer scalar type.
+ /// @see gtc_type_precision
+ typedef tvec1<i32, lowp> lowp_i32vec1;
+
+ /// Low precision 32 bit signed integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef tvec2<i32, lowp> lowp_i32vec2;
+
+ /// Low precision 32 bit signed integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef tvec3<i32, lowp> lowp_i32vec3;
+
+ /// Low precision 32 bit signed integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef tvec4<i32, lowp> lowp_i32vec4;
+
+
+ /// Medium precision 32 bit signed integer scalar type.
+ /// @see gtc_type_precision
+ typedef tvec1<i32, mediump> mediump_i32vec1;
+
+ /// Medium precision 32 bit signed integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef tvec2<i32, mediump> mediump_i32vec2;
+
+ /// Medium precision 32 bit signed integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef tvec3<i32, mediump> mediump_i32vec3;
+
+ /// Medium precision 32 bit signed integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef tvec4<i32, mediump> mediump_i32vec4;
+
+
+ /// High precision 32 bit signed integer scalar type.
+ /// @see gtc_type_precision
+ typedef tvec1<i32, highp> highp_i32vec1;
+
+ /// High precision 32 bit signed integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef tvec2<i32, highp> highp_i32vec2;
+
+ /// High precision 32 bit signed integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef tvec3<i32, highp> highp_i32vec3;
+
+ /// High precision 32 bit signed integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef tvec4<i32, highp> highp_i32vec4;
+
+#if(defined(GLM_PRECISION_LOWP_INT))
+ typedef lowp_i32vec1 i32vec1;
+ typedef lowp_i32vec2 i32vec2;
+ typedef lowp_i32vec3 i32vec3;
+ typedef lowp_i32vec4 i32vec4;
+#elif(defined(GLM_PRECISION_MEDIUMP_INT))
+ typedef mediump_i32vec1 i32vec1;
+ typedef mediump_i32vec2 i32vec2;
+ typedef mediump_i32vec3 i32vec3;
+ typedef mediump_i32vec4 i32vec4;
+#else
+ /// Default precision 32 bit signed integer scalar type.
+ /// @see gtc_type_precision
+ typedef highp_i32vec1 i32vec1;
+
+ /// Default precision 32 bit signed integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef highp_i32vec2 i32vec2;
+
+ /// Default precision 32 bit signed integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef highp_i32vec3 i32vec3;
+
+ /// Default precision 32 bit signed integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef highp_i32vec4 i32vec4;
+#endif
+
+
+
+ /// Low precision 64 bit signed integer scalar type.
+ /// @see gtc_type_precision
+ typedef tvec1<i64, lowp> lowp_i64vec1;
+
+ /// Low precision 64 bit signed integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef tvec2<i64, lowp> lowp_i64vec2;
+
+ /// Low precision 64 bit signed integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef tvec3<i64, lowp> lowp_i64vec3;
+
+ /// Low precision 64 bit signed integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef tvec4<i64, lowp> lowp_i64vec4;
+
+
+ /// Medium precision 64 bit signed integer scalar type.
+ /// @see gtc_type_precision
+ typedef tvec1<i64, mediump> mediump_i64vec1;
+
+ /// Medium precision 64 bit signed integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef tvec2<i64, mediump> mediump_i64vec2;
+
+ /// Medium precision 64 bit signed integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef tvec3<i64, mediump> mediump_i64vec3;
+
+ /// Medium precision 64 bit signed integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef tvec4<i64, mediump> mediump_i64vec4;
+
+
+ /// High precision 64 bit signed integer scalar type.
+ /// @see gtc_type_precision
+ typedef tvec1<i64, highp> highp_i64vec1;
+
+ /// High precision 64 bit signed integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef tvec2<i64, highp> highp_i64vec2;
+
+ /// High precision 64 bit signed integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef tvec3<i64, highp> highp_i64vec3;
+
+ /// High precision 64 bit signed integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef tvec4<i64, highp> highp_i64vec4;
+
+#if(defined(GLM_PRECISION_LOWP_INT))
+ typedef lowp_i64vec1 i64vec1;
+ typedef lowp_i64vec2 i64vec2;
+ typedef lowp_i64vec3 i64vec3;
+ typedef lowp_i64vec4 i64vec4;
+#elif(defined(GLM_PRECISION_MEDIUMP_INT))
+ typedef mediump_i64vec1 i64vec1;
+ typedef mediump_i64vec2 i64vec2;
+ typedef mediump_i64vec3 i64vec3;
+ typedef mediump_i64vec4 i64vec4;
+#else
+ /// Default precision 64 bit signed integer scalar type.
+ /// @see gtc_type_precision
+ typedef highp_i64vec1 i64vec1;
+
+ /// Default precision 64 bit signed integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef highp_i64vec2 i64vec2;
+
+ /// Default precision 64 bit signed integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef highp_i64vec3 i64vec3;
+
+ /// Default precision 64 bit signed integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef highp_i64vec4 i64vec4;
+#endif
+
+
+ /////////////////////////////
+ // Unsigned int vector types
+
+ /// Low precision 8 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint8 lowp_uint8;
+
+ /// Low precision 16 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint16 lowp_uint16;
+
+ /// Low precision 32 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint32 lowp_uint32;
+
+ /// Low precision 64 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint64 lowp_uint64;
+
+
+ /// Low precision 8 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint8 lowp_uint8_t;
+
+ /// Low precision 16 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint16 lowp_uint16_t;
+
+ /// Low precision 32 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint32 lowp_uint32_t;
+
+ /// Low precision 64 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint64 lowp_uint64_t;
+
+
+ /// Low precision 8 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint8 lowp_u8;
+
+ /// Low precision 16 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint16 lowp_u16;
+
+ /// Low precision 32 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint32 lowp_u32;
+
+ /// Low precision 64 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint64 lowp_u64;
+
+
+
+ /// Medium precision 8 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint8 mediump_uint8;
+
+ /// Medium precision 16 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint16 mediump_uint16;
+
+ /// Medium precision 32 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint32 mediump_uint32;
+
+ /// Medium precision 64 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint64 mediump_uint64;
+
+ /// Medium precision 8 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint8 mediump_uint8_t;
+
+ /// Medium precision 16 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint16 mediump_uint16_t;
+
+ /// Medium precision 32 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint32 mediump_uint32_t;
+
+ /// Medium precision 64 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint64 mediump_uint64_t;
+
+ /// Medium precision 8 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint8 mediump_u8;
+
+ /// Medium precision 16 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint16 mediump_u16;
+
+ /// Medium precision 32 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint32 mediump_u32;
+
+ /// Medium precision 64 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint64 mediump_u64;
+
+
+
+ /// Medium precision 8 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint8 highp_uint8;
+
+ /// Medium precision 16 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint16 highp_uint16;
+
+ /// Medium precision 32 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint32 highp_uint32;
+
+ /// Medium precision 64 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint64 highp_uint64;
+
+ /// Medium precision 8 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint8 highp_uint8_t;
+
+ /// Medium precision 16 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint16 highp_uint16_t;
+
+ /// Medium precision 32 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint32 highp_uint32_t;
+
+ /// Medium precision 64 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint64 highp_uint64_t;
+
+ /// Medium precision 8 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint8 highp_u8;
+
+ /// Medium precision 16 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint16 highp_u16;
+
+ /// Medium precision 32 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint32 highp_u32;
+
+ /// Medium precision 64 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint64 highp_u64;
+
+
+
+ /// 8 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint8 uint8;
+
+ /// 16 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint16 uint16;
+
+ /// 32 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint32 uint32;
+
+ /// 64 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint64 uint64;
+
+#if GLM_HAS_EXTENDED_INTEGER_TYPE
+ using std::uint8_t;
+ using std::uint16_t;
+ using std::uint32_t;
+ using std::uint64_t;
+#else
+ /// 8 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint8 uint8_t;
+
+ /// 16 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint16 uint16_t;
+
+ /// 32 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint32 uint32_t;
+
+ /// 64 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint64 uint64_t;
+#endif
+
+ /// 8 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint8 u8;
+
+ /// 16 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint16 u16;
+
+ /// 32 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint32 u32;
+
+ /// 64 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint64 u64;
+
+
+
+ /// Low precision 8 bit unsigned integer scalar type.
+ /// @see gtc_type_precision
+ typedef tvec1<u8, lowp> lowp_u8vec1;
+
+ /// Low precision 8 bit unsigned integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef tvec2<u8, lowp> lowp_u8vec2;
+
+ /// Low precision 8 bit unsigned integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef tvec3<u8, lowp> lowp_u8vec3;
+
+ /// Low precision 8 bit unsigned integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef tvec4<u8, lowp> lowp_u8vec4;
+
+
+ /// Medium precision 8 bit unsigned integer scalar type.
+ /// @see gtc_type_precision
+ typedef tvec1<u8, mediump> mediump_u8vec1;
+
+ /// Medium precision 8 bit unsigned integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef tvec2<u8, mediump> mediump_u8vec2;
+
+ /// Medium precision 8 bit unsigned integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef tvec3<u8, mediump> mediump_u8vec3;
+
+ /// Medium precision 8 bit unsigned integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef tvec4<u8, mediump> mediump_u8vec4;
+
+
+ /// High precision 8 bit unsigned integer scalar type.
+ /// @see gtc_type_precision
+ typedef tvec1<u8, highp> highp_u8vec1;
+
+ /// High precision 8 bit unsigned integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef tvec2<u8, highp> highp_u8vec2;
+
+ /// High precision 8 bit unsigned integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef tvec3<u8, highp> highp_u8vec3;
+
+ /// High precision 8 bit unsigned integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef tvec4<u8, highp> highp_u8vec4;
+
+#if(defined(GLM_PRECISION_LOWP_INT))
+ typedef lowp_u8vec1 u8vec1;
+ typedef lowp_u8vec2 u8vec2;
+ typedef lowp_u8vec3 u8vec3;
+ typedef lowp_u8vec4 u8vec4;
+#elif(defined(GLM_PRECISION_MEDIUMP_INT))
+ typedef mediump_u8vec1 u8vec1;
+ typedef mediump_u8vec2 u8vec2;
+ typedef mediump_u8vec3 u8vec3;
+ typedef mediump_u8vec4 u8vec4;
+#else
+ /// Default precision 8 bit unsigned integer scalar type.
+ /// @see gtc_type_precision
+ typedef highp_u8vec1 u8vec1;
+
+ /// Default precision 8 bit unsigned integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef highp_u8vec2 u8vec2;
+
+ /// Default precision 8 bit unsigned integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef highp_u8vec3 u8vec3;
+
+ /// Default precision 8 bit unsigned integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef highp_u8vec4 u8vec4;
+#endif
+
+
+ /// Low precision 16 bit unsigned integer scalar type.
+ /// @see gtc_type_precision
+ typedef tvec1<u16, lowp> lowp_u16vec1;
+
+ /// Low precision 16 bit unsigned integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef tvec2<u16, lowp> lowp_u16vec2;
+
+ /// Low precision 16 bit unsigned integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef tvec3<u16, lowp> lowp_u16vec3;
+
+ /// Low precision 16 bit unsigned integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef tvec4<u16, lowp> lowp_u16vec4;
+
+
+ /// Medium precision 16 bit unsigned integer scalar type.
+ /// @see gtc_type_precision
+ typedef tvec1<u16, mediump> mediump_u16vec1;
+
+ /// Medium precision 16 bit unsigned integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef tvec2<u16, mediump> mediump_u16vec2;
+
+ /// Medium precision 16 bit unsigned integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef tvec3<u16, mediump> mediump_u16vec3;
+
+ /// Medium precision 16 bit unsigned integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef tvec4<u16, mediump> mediump_u16vec4;
+
+
+ /// High precision 16 bit unsigned integer scalar type.
+ /// @see gtc_type_precision
+ typedef tvec1<u16, highp> highp_u16vec1;
+
+ /// High precision 16 bit unsigned integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef tvec2<u16, highp> highp_u16vec2;
+
+ /// High precision 16 bit unsigned integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef tvec3<u16, highp> highp_u16vec3;
+
+ /// High precision 16 bit unsigned integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef tvec4<u16, highp> highp_u16vec4;
+
+
+#if(defined(GLM_PRECISION_LOWP_INT))
+ typedef lowp_u16vec1 u16vec1;
+ typedef lowp_u16vec2 u16vec2;
+ typedef lowp_u16vec3 u16vec3;
+ typedef lowp_u16vec4 u16vec4;
+#elif(defined(GLM_PRECISION_MEDIUMP_INT))
+ typedef mediump_u16vec1 u16vec1;
+ typedef mediump_u16vec2 u16vec2;
+ typedef mediump_u16vec3 u16vec3;
+ typedef mediump_u16vec4 u16vec4;
+#else
+ /// Default precision 16 bit unsigned integer scalar type.
+ /// @see gtc_type_precision
+ typedef highp_u16vec1 u16vec1;
+
+ /// Default precision 16 bit unsigned integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef highp_u16vec2 u16vec2;
+
+ /// Default precision 16 bit unsigned integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef highp_u16vec3 u16vec3;
+
+ /// Default precision 16 bit unsigned integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef highp_u16vec4 u16vec4;
+#endif
+
+
+ /// Low precision 32 bit unsigned integer scalar type.
+ /// @see gtc_type_precision
+ typedef tvec1<u32, lowp> lowp_u32vec1;
+
+ /// Low precision 32 bit unsigned integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef tvec2<u32, lowp> lowp_u32vec2;
+
+ /// Low precision 32 bit unsigned integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef tvec3<u32, lowp> lowp_u32vec3;
+
+ /// Low precision 32 bit unsigned integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef tvec4<u32, lowp> lowp_u32vec4;
+
+
+ /// Medium precision 32 bit unsigned integer scalar type.
+ /// @see gtc_type_precision
+ typedef tvec1<u32, mediump> mediump_u32vec1;
+
+ /// Medium precision 32 bit unsigned integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef tvec2<u32, mediump> mediump_u32vec2;
+
+ /// Medium precision 32 bit unsigned integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef tvec3<u32, mediump> mediump_u32vec3;
+
+ /// Medium precision 32 bit unsigned integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef tvec4<u32, mediump> mediump_u32vec4;
+
+
+ /// High precision 32 bit unsigned integer scalar type.
+ /// @see gtc_type_precision
+ typedef tvec1<u32, highp> highp_u32vec1;
+
+ /// High precision 32 bit unsigned integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef tvec2<u32, highp> highp_u32vec2;
+
+ /// High precision 32 bit unsigned integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef tvec3<u32, highp> highp_u32vec3;
+
+ /// High precision 32 bit unsigned integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef tvec4<u32, highp> highp_u32vec4;
+
+#if(defined(GLM_PRECISION_LOWP_INT))
+ typedef lowp_u32vec1 u32vec1;
+ typedef lowp_u32vec2 u32vec2;
+ typedef lowp_u32vec3 u32vec3;
+ typedef lowp_u32vec4 u32vec4;
+#elif(defined(GLM_PRECISION_MEDIUMP_INT))
+ typedef mediump_u32vec1 u32vec1;
+ typedef mediump_u32vec2 u32vec2;
+ typedef mediump_u32vec3 u32vec3;
+ typedef mediump_u32vec4 u32vec4;
+#else
+ /// Default precision 32 bit unsigned integer scalar type.
+ /// @see gtc_type_precision
+ typedef highp_u32vec1 u32vec1;
+
+ /// Default precision 32 bit unsigned integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef highp_u32vec2 u32vec2;
+
+ /// Default precision 32 bit unsigned integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef highp_u32vec3 u32vec3;
+
+ /// Default precision 32 bit unsigned integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef highp_u32vec4 u32vec4;
+#endif
+
+
+ /// Low precision 32 bit unsigned integer scalar type.
+ /// @see gtc_type_precision
+ typedef tvec1<u32, lowp> lowp_u32vec1;
+
+ /// Low precision 32 bit unsigned integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef tvec2<u32, lowp> lowp_u32vec2;
+
+ /// Low precision 32 bit unsigned integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef tvec3<u32, lowp> lowp_u32vec3;
+
+ /// Low precision 32 bit unsigned integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef tvec4<u32, lowp> lowp_u32vec4;
+
+
+ /// Medium precision 32 bit unsigned integer scalar type.
+ /// @see gtc_type_precision
+ typedef tvec1<u32, mediump> mediump_u32vec1;
+
+ /// Medium precision 32 bit unsigned integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef tvec2<u32, mediump> mediump_u32vec2;
+
+ /// Medium precision 32 bit unsigned integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef tvec3<u32, mediump> mediump_u32vec3;
+
+ /// Medium precision 32 bit unsigned integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef tvec4<u32, mediump> mediump_u32vec4;
+
+
+ /// High precision 32 bit unsigned integer scalar type.
+ /// @see gtc_type_precision
+ typedef tvec1<u32, highp> highp_u32vec1;
+
+ /// High precision 32 bit unsigned integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef tvec2<u32, highp> highp_u32vec2;
+
+ /// High precision 32 bit unsigned integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef tvec3<u32, highp> highp_u32vec3;
+
+ /// High precision 32 bit unsigned integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef tvec4<u32, highp> highp_u32vec4;
+
+#if(defined(GLM_PRECISION_LOWP_INT))
+ typedef lowp_u32vec1 u32vec1;
+ typedef lowp_u32vec2 u32vec2;
+ typedef lowp_u32vec3 u32vec3;
+ typedef lowp_u32vec4 u32vec4;
+#elif(defined(GLM_PRECISION_MEDIUMP_INT))
+ typedef mediump_u32vec1 u32vec1;
+ typedef mediump_u32vec2 u32vec2;
+ typedef mediump_u32vec3 u32vec3;
+ typedef mediump_u32vec4 u32vec4;
+#else
+ /// Default precision 32 bit unsigned integer scalar type.
+ /// @see gtc_type_precision
+ typedef highp_u32vec1 u32vec1;
+
+ /// Default precision 32 bit unsigned integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef highp_u32vec2 u32vec2;
+
+ /// Default precision 32 bit unsigned integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef highp_u32vec3 u32vec3;
+
+ /// Default precision 32 bit unsigned integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef highp_u32vec4 u32vec4;
+#endif
+
+
+
+ /// Low precision 64 bit unsigned integer scalar type.
+ /// @see gtc_type_precision
+ typedef tvec1<u64, lowp> lowp_u64vec1;
+
+ /// Low precision 64 bit unsigned integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef tvec2<u64, lowp> lowp_u64vec2;
+
+ /// Low precision 64 bit unsigned integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef tvec3<u64, lowp> lowp_u64vec3;
+
+ /// Low precision 64 bit unsigned integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef tvec4<u64, lowp> lowp_u64vec4;
+
+
+ /// Medium precision 64 bit unsigned integer scalar type.
+ /// @see gtc_type_precision
+ typedef tvec1<u64, mediump> mediump_u64vec1;
+
+ /// Medium precision 64 bit unsigned integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef tvec2<u64, mediump> mediump_u64vec2;
+
+ /// Medium precision 64 bit unsigned integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef tvec3<u64, mediump> mediump_u64vec3;
+
+ /// Medium precision 64 bit unsigned integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef tvec4<u64, mediump> mediump_u64vec4;
+
+
+ /// High precision 64 bit unsigned integer scalar type.
+ /// @see gtc_type_precision
+ typedef tvec1<u64, highp> highp_u64vec1;
+
+ /// High precision 64 bit unsigned integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef tvec2<u64, highp> highp_u64vec2;
+
+ /// High precision 64 bit unsigned integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef tvec3<u64, highp> highp_u64vec3;
+
+ /// High precision 64 bit unsigned integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef tvec4<u64, highp> highp_u64vec4;
+
+#if(defined(GLM_PRECISION_LOWP_UINT))
+ typedef lowp_u64vec1 u64vec1;
+ typedef lowp_u64vec2 u64vec2;
+ typedef lowp_u64vec3 u64vec3;
+ typedef lowp_u64vec4 u64vec4;
+#elif(defined(GLM_PRECISION_MEDIUMP_UINT))
+ typedef mediump_u64vec1 u64vec1;
+ typedef mediump_u64vec2 u64vec2;
+ typedef mediump_u64vec3 u64vec3;
+ typedef mediump_u64vec4 u64vec4;
+#else
+ /// Default precision 64 bit unsigned integer scalar type.
+ /// @see gtc_type_precision
+ typedef highp_u64vec1 u64vec1;
+
+ /// Default precision 64 bit unsigned integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef highp_u64vec2 u64vec2;
+
+ /// Default precision 64 bit unsigned integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef highp_u64vec3 u64vec3;
+
+ /// Default precision 64 bit unsigned integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef highp_u64vec4 u64vec4;
+#endif
+
+
+ //////////////////////
+ // Float vector types
+
+ /// Low 32 bit single-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef detail::float32 lowp_float32;
+
+ /// Low 64 bit double-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef detail::float64 lowp_float64;
+
+ /// Low 32 bit single-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef detail::float32 lowp_float32_t;
+
+ /// Low 64 bit double-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef detail::float64 lowp_float64_t;
+
+ /// Low 32 bit single-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef float32 lowp_f32;
+
+ /// Low 64 bit double-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef float64 lowp_f64;
+
+ /// Low 32 bit single-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef detail::float32 lowp_float32;
+
+ /// Low 64 bit double-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef detail::float64 lowp_float64;
+
+ /// Low 32 bit single-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef detail::float32 lowp_float32_t;
+
+ /// Low 64 bit double-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef detail::float64 lowp_float64_t;
+
+ /// Low 32 bit single-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef float32 lowp_f32;
+
+ /// Low 64 bit double-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef float64 lowp_f64;
+
+
+ /// Low 32 bit single-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef detail::float32 lowp_float32;
+
+ /// Low 64 bit double-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef detail::float64 lowp_float64;
+
+ /// Low 32 bit single-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef detail::float32 lowp_float32_t;
+
+ /// Low 64 bit double-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef detail::float64 lowp_float64_t;
+
+ /// Low 32 bit single-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef float32 lowp_f32;
+
+ /// Low 64 bit double-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef float64 lowp_f64;
+
+
+ /// Medium 32 bit single-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef detail::float32 mediump_float32;
+
+ /// Medium 64 bit double-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef detail::float64 mediump_float64;
+
+ /// Medium 32 bit single-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef detail::float32 mediump_float32_t;
+
+ /// Medium 64 bit double-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef detail::float64 mediump_float64_t;
+
+ /// Medium 32 bit single-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef float32 mediump_f32;
+
+ /// Medium 64 bit double-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef float64 mediump_f64;
+
+
+ /// High 32 bit single-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef detail::float32 highp_float32;
+
+ /// High 64 bit double-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef detail::float64 highp_float64;
+
+ /// High 32 bit single-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef detail::float32 highp_float32_t;
+
+ /// High 64 bit double-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef detail::float64 highp_float64_t;
+
+ /// High 32 bit single-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef float32 highp_f32;
+
+ /// High 64 bit double-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef float64 highp_f64;
+
+
+#if(defined(GLM_PRECISION_LOWP_FLOAT))
+ /// Default 32 bit single-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef lowp_float32 float32;
+
+ /// Default 64 bit double-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef lowp_float64 float64;
+
+ /// Default 32 bit single-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef lowp_float32_t float32_t;
+
+ /// Default 64 bit double-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef lowp_float64_t float64_t;
+
+ /// Default 32 bit single-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef lowp_f32 f32;
+
+ /// Default 64 bit double-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef lowp_f64 f64;
+
+#elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))
+
+ /// Default 32 bit single-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef mediump_float32 float32;
+
+ /// Default 64 bit double-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef mediump_float64 float64;
+
+ /// Default 32 bit single-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef mediump_float32 float32_t;
+
+ /// Default 64 bit double-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef mediump_float64 float64_t;
+
+ /// Default 32 bit single-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef mediump_float32 f32;
+
+ /// Default 64 bit double-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef mediump_float64 f64;
+
+#else//(defined(GLM_PRECISION_HIGHP_FLOAT))
+
+ /// Default 32 bit single-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef highp_float32 float32;
+
+ /// Default 64 bit double-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef highp_float64 float64;
+
+ /// Default 32 bit single-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef highp_float32_t float32_t;
+
+ /// Default 64 bit double-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef highp_float64_t float64_t;
+
+ /// Default 32 bit single-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef highp_float32_t f32;
+
+ /// Default 64 bit double-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef highp_float64_t f64;
+#endif
+
+
+ /// Low single-precision floating-point vector of 1 component.
+ /// @see gtc_type_precision
+ typedef tvec1<float, lowp> lowp_vec1;
+
+ /// Low single-precision floating-point vector of 2 components.
+ /// @see core_precision
+ typedef tvec2<float, lowp> lowp_vec2;
+
+ /// Low single-precision floating-point vector of 3 components.
+ /// @see core_precision
+ typedef tvec3<float, lowp> lowp_vec3;
+
+ /// Low single-precision floating-point vector of 4 components.
+ /// @see core_precision
+ typedef tvec4<float, lowp> lowp_vec4;
+
+ /// Low single-precision floating-point vector of 1 component.
+ /// @see gtc_type_precision
+ typedef tvec1<float, lowp> lowp_fvec1;
+
+ /// Low single-precision floating-point vector of 2 components.
+ /// @see gtc_type_precision
+ typedef tvec2<float, lowp> lowp_fvec2;
+
+ /// Low single-precision floating-point vector of 3 components.
+ /// @see gtc_type_precision
+ typedef tvec3<float, lowp> lowp_fvec3;
+
+ /// Low single-precision floating-point vector of 4 components.
+ /// @see gtc_type_precision
+ typedef tvec4<float, lowp> lowp_fvec4;
+
+
+ /// Medium single-precision floating-point vector of 1 component.
+ /// @see gtc_type_precision
+ typedef tvec1<float, mediump> mediump_vec1;
+
+ /// Medium Single-precision floating-point vector of 2 components.
+ /// @see core_precision
+ typedef tvec2<float, mediump> mediump_vec2;
+
+ /// Medium Single-precision floating-point vector of 3 components.
+ /// @see core_precision
+ typedef tvec3<float, mediump> mediump_vec3;
+
+ /// Medium Single-precision floating-point vector of 4 components.
+ /// @see core_precision
+ typedef tvec4<float, mediump> mediump_vec4;
+
+ /// Medium single-precision floating-point vector of 1 component.
+ /// @see gtc_type_precision
+ typedef tvec1<float, mediump> mediump_fvec1;
+
+ /// Medium Single-precision floating-point vector of 2 components.
+ /// @see gtc_type_precision
+ typedef tvec2<float, mediump> mediump_fvec2;
+
+ /// Medium Single-precision floating-point vector of 3 components.
+ /// @see gtc_type_precision
+ typedef tvec3<float, mediump> mediump_fvec3;
+
+ /// Medium Single-precision floating-point vector of 4 components.
+ /// @see gtc_type_precision
+ typedef tvec4<float, mediump> mediump_fvec4;
+
+
+ /// High single-precision floating-point vector of 1 component.
+ /// @see gtc_type_precision
+ typedef tvec1<float, highp> highp_vec1;
+
+ /// High Single-precision floating-point vector of 2 components.
+ /// @see core_precision
+ typedef tvec2<float, highp> highp_vec2;
+
+ /// High Single-precision floating-point vector of 3 components.
+ /// @see core_precision
+ typedef tvec3<float, highp> highp_vec3;
+
+ /// High Single-precision floating-point vector of 4 components.
+ /// @see core_precision
+ typedef tvec4<float, highp> highp_vec4;
+
+ /// High single-precision floating-point vector of 1 component.
+ /// @see gtc_type_precision
+ typedef tvec1<float, highp> highp_fvec1;
+
+ /// High Single-precision floating-point vector of 2 components.
+ /// @see core_precision
+ typedef tvec2<float, highp> highp_fvec2;
+
+ /// High Single-precision floating-point vector of 3 components.
+ /// @see core_precision
+ typedef tvec3<float, highp> highp_fvec3;
+
+ /// High Single-precision floating-point vector of 4 components.
+ /// @see core_precision
+ typedef tvec4<float, highp> highp_fvec4;
+
+
+ /// Low single-precision floating-point vector of 1 component.
+ /// @see gtc_type_precision
+ typedef tvec1<f32, lowp> lowp_f32vec1;
+
+ /// Low single-precision floating-point vector of 2 components.
+ /// @see core_precision
+ typedef tvec2<f32, lowp> lowp_f32vec2;
+
+ /// Low single-precision floating-point vector of 3 components.
+ /// @see core_precision
+ typedef tvec3<f32, lowp> lowp_f32vec3;
+
+ /// Low single-precision floating-point vector of 4 components.
+ /// @see core_precision
+ typedef tvec4<f32, lowp> lowp_f32vec4;
+
+ /// Medium single-precision floating-point vector of 1 component.
+ /// @see gtc_type_precision
+ typedef tvec1<f32, mediump> mediump_f32vec1;
+
+ /// Medium single-precision floating-point vector of 2 components.
+ /// @see core_precision
+ typedef tvec2<f32, mediump> mediump_f32vec2;
+
+ /// Medium single-precision floating-point vector of 3 components.
+ /// @see core_precision
+ typedef tvec3<f32, mediump> mediump_f32vec3;
+
+ /// Medium single-precision floating-point vector of 4 components.
+ /// @see core_precision
+ typedef tvec4<f32, mediump> mediump_f32vec4;
+
+ /// High single-precision floating-point vector of 1 component.
+ /// @see gtc_type_precision
+ typedef tvec1<f32, highp> highp_f32vec1;
+
+ /// High single-precision floating-point vector of 2 components.
+ /// @see gtc_type_precision
+ typedef tvec2<f32, highp> highp_f32vec2;
+
+ /// High single-precision floating-point vector of 3 components.
+ /// @see gtc_type_precision
+ typedef tvec3<f32, highp> highp_f32vec3;
+
+ /// High single-precision floating-point vector of 4 components.
+ /// @see gtc_type_precision
+ typedef tvec4<f32, highp> highp_f32vec4;
+
+
+ /// Low double-precision floating-point vector of 1 component.
+ /// @see gtc_type_precision
+ typedef tvec1<f64, lowp> lowp_f64vec1;
+
+ /// Low double-precision floating-point vector of 2 components.
+ /// @see gtc_type_precision
+ typedef tvec2<f64, lowp> lowp_f64vec2;
+
+ /// Low double-precision floating-point vector of 3 components.
+ /// @see gtc_type_precision
+ typedef tvec3<f64, lowp> lowp_f64vec3;
+
+ /// Low double-precision floating-point vector of 4 components.
+ /// @see gtc_type_precision
+ typedef tvec4<f64, lowp> lowp_f64vec4;
+
+ /// Medium double-precision floating-point vector of 1 component.
+ /// @see gtc_type_precision
+ typedef tvec1<f64, mediump> mediump_f64vec1;
+
+ /// Medium double-precision floating-point vector of 2 components.
+ /// @see gtc_type_precision
+ typedef tvec2<f64, mediump> mediump_f64vec2;
+
+ /// Medium double-precision floating-point vector of 3 components.
+ /// @see gtc_type_precision
+ typedef tvec3<f64, mediump> mediump_f64vec3;
+
+ /// Medium double-precision floating-point vector of 4 components.
+ /// @see gtc_type_precision
+ typedef tvec4<f64, mediump> mediump_f64vec4;
+
+ /// High double-precision floating-point vector of 1 component.
+ /// @see gtc_type_precision
+ typedef tvec1<f64, highp> highp_f64vec1;
+
+ /// High double-precision floating-point vector of 2 components.
+ /// @see gtc_type_precision
+ typedef tvec2<f64, highp> highp_f64vec2;
+
+ /// High double-precision floating-point vector of 3 components.
+ /// @see gtc_type_precision
+ typedef tvec3<f64, highp> highp_f64vec3;
+
+ /// High double-precision floating-point vector of 4 components.
+ /// @see gtc_type_precision
+ typedef tvec4<f64, highp> highp_f64vec4;
+
+
+ //////////////////////
+ // Float matrix types
+
+ /// Low single-precision floating-point 1x1 matrix.
+ /// @see gtc_type_precision
+ //typedef lowp_f32 lowp_fmat1x1;
+
+ /// Low single-precision floating-point 2x2 matrix.
+ /// @see gtc_type_precision
+ typedef tmat2x2<f32, lowp> lowp_fmat2x2;
+
+ /// Low single-precision floating-point 2x3 matrix.
+ /// @see gtc_type_precision
+ typedef tmat2x3<f32, lowp> lowp_fmat2x3;
+
+ /// Low single-precision floating-point 2x4 matrix.
+ /// @see gtc_type_precision
+ typedef tmat2x4<f32, lowp> lowp_fmat2x4;
+
+ /// Low single-precision floating-point 3x2 matrix.
+ /// @see gtc_type_precision
+ typedef tmat3x2<f32, lowp> lowp_fmat3x2;
+
+ /// Low single-precision floating-point 3x3 matrix.
+ /// @see gtc_type_precision
+ typedef tmat3x3<f32, lowp> lowp_fmat3x3;
+
+ /// Low single-precision floating-point 3x4 matrix.
+ /// @see gtc_type_precision
+ typedef tmat3x4<f32, lowp> lowp_fmat3x4;
+
+ /// Low single-precision floating-point 4x2 matrix.
+ /// @see gtc_type_precision
+ typedef tmat4x2<f32, lowp> lowp_fmat4x2;
+
+ /// Low single-precision floating-point 4x3 matrix.
+ /// @see gtc_type_precision
+ typedef tmat4x3<f32, lowp> lowp_fmat4x3;
+
+ /// Low single-precision floating-point 4x4 matrix.
+ /// @see gtc_type_precision
+ typedef tmat4x4<f32, lowp> lowp_fmat4x4;
+
+ /// Low single-precision floating-point 1x1 matrix.
+ /// @see gtc_type_precision
+ //typedef lowp_fmat1x1 lowp_fmat1;
+
+ /// Low single-precision floating-point 2x2 matrix.
+ /// @see gtc_type_precision
+ typedef lowp_fmat2x2 lowp_fmat2;
+
+ /// Low single-precision floating-point 3x3 matrix.
+ /// @see gtc_type_precision
+ typedef lowp_fmat3x3 lowp_fmat3;
+
+ /// Low single-precision floating-point 4x4 matrix.
+ /// @see gtc_type_precision
+ typedef lowp_fmat4x4 lowp_fmat4;
+
+
+ /// Medium single-precision floating-point 1x1 matrix.
+ /// @see gtc_type_precision
+ //typedef mediump_f32 mediump_fmat1x1;
+
+ /// Medium single-precision floating-point 2x2 matrix.
+ /// @see gtc_type_precision
+ typedef tmat2x2<f32, mediump> mediump_fmat2x2;
+
+ /// Medium single-precision floating-point 2x3 matrix.
+ /// @see gtc_type_precision
+ typedef tmat2x3<f32, mediump> mediump_fmat2x3;
+
+ /// Medium single-precision floating-point 2x4 matrix.
+ /// @see gtc_type_precision
+ typedef tmat2x4<f32, mediump> mediump_fmat2x4;
+
+ /// Medium single-precision floating-point 3x2 matrix.
+ /// @see gtc_type_precision
+ typedef tmat3x2<f32, mediump> mediump_fmat3x2;
+
+ /// Medium single-precision floating-point 3x3 matrix.
+ /// @see gtc_type_precision
+ typedef tmat3x3<f32, mediump> mediump_fmat3x3;
+
+ /// Medium single-precision floating-point 3x4 matrix.
+ /// @see gtc_type_precision
+ typedef tmat3x4<f32, mediump> mediump_fmat3x4;
+
+ /// Medium single-precision floating-point 4x2 matrix.
+ /// @see gtc_type_precision
+ typedef tmat4x2<f32, mediump> mediump_fmat4x2;
+
+ /// Medium single-precision floating-point 4x3 matrix.
+ /// @see gtc_type_precision
+ typedef tmat4x3<f32, mediump> mediump_fmat4x3;
+
+ /// Medium single-precision floating-point 4x4 matrix.
+ /// @see gtc_type_precision
+ typedef tmat4x4<f32, mediump> mediump_fmat4x4;
+
+ /// Medium single-precision floating-point 1x1 matrix.
+ /// @see gtc_type_precision
+ //typedef mediump_fmat1x1 mediump_fmat1;
+
+ /// Medium single-precision floating-point 2x2 matrix.
+ /// @see gtc_type_precision
+ typedef mediump_fmat2x2 mediump_fmat2;
+
+ /// Medium single-precision floating-point 3x3 matrix.
+ /// @see gtc_type_precision
+ typedef mediump_fmat3x3 mediump_fmat3;
+
+ /// Medium single-precision floating-point 4x4 matrix.
+ /// @see gtc_type_precision
+ typedef mediump_fmat4x4 mediump_fmat4;
+
+
+ /// High single-precision floating-point 1x1 matrix.
+ /// @see gtc_type_precision
+ //typedef highp_f32 highp_fmat1x1;
+
+ /// High single-precision floating-point 2x2 matrix.
+ /// @see gtc_type_precision
+ typedef tmat2x2<f32, highp> highp_fmat2x2;
+
+ /// High single-precision floating-point 2x3 matrix.
+ /// @see gtc_type_precision
+ typedef tmat2x3<f32, highp> highp_fmat2x3;
+
+ /// High single-precision floating-point 2x4 matrix.
+ /// @see gtc_type_precision
+ typedef tmat2x4<f32, highp> highp_fmat2x4;
+
+ /// High single-precision floating-point 3x2 matrix.
+ /// @see gtc_type_precision
+ typedef tmat3x2<f32, highp> highp_fmat3x2;
+
+ /// High single-precision floating-point 3x3 matrix.
+ /// @see gtc_type_precision
+ typedef tmat3x3<f32, highp> highp_fmat3x3;
+
+ /// High single-precision floating-point 3x4 matrix.
+ /// @see gtc_type_precision
+ typedef tmat3x4<f32, highp> highp_fmat3x4;
+
+ /// High single-precision floating-point 4x2 matrix.
+ /// @see gtc_type_precision
+ typedef tmat4x2<f32, highp> highp_fmat4x2;
+
+ /// High single-precision floating-point 4x3 matrix.
+ /// @see gtc_type_precision
+ typedef tmat4x3<f32, highp> highp_fmat4x3;
+
+ /// High single-precision floating-point 4x4 matrix.
+ /// @see gtc_type_precision
+ typedef tmat4x4<f32, highp> highp_fmat4x4;
+
+ /// High single-precision floating-point 1x1 matrix.
+ /// @see gtc_type_precision
+ //typedef highp_fmat1x1 highp_fmat1;
+
+ /// High single-precision floating-point 2x2 matrix.
+ /// @see gtc_type_precision
+ typedef highp_fmat2x2 highp_fmat2;
+
+ /// High single-precision floating-point 3x3 matrix.
+ /// @see gtc_type_precision
+ typedef highp_fmat3x3 highp_fmat3;
+
+ /// High single-precision floating-point 4x4 matrix.
+ /// @see gtc_type_precision
+ typedef highp_fmat4x4 highp_fmat4;
+
+
+ /// Low single-precision floating-point 1x1 matrix.
+ /// @see gtc_type_precision
+ //typedef f32 lowp_f32mat1x1;
+
+ /// Low single-precision floating-point 2x2 matrix.
+ /// @see gtc_type_precision
+ typedef tmat2x2<f32, lowp> lowp_f32mat2x2;
+
+ /// Low single-precision floating-point 2x3 matrix.
+ /// @see gtc_type_precision
+ typedef tmat2x3<f32, lowp> lowp_f32mat2x3;
+
+ /// Low single-precision floating-point 2x4 matrix.
+ /// @see gtc_type_precision
+ typedef tmat2x4<f32, lowp> lowp_f32mat2x4;
+
+ /// Low single-precision floating-point 3x2 matrix.
+ /// @see gtc_type_precision
+ typedef tmat3x2<f32, lowp> lowp_f32mat3x2;
+
+ /// Low single-precision floating-point 3x3 matrix.
+ /// @see gtc_type_precision
+ typedef tmat3x3<f32, lowp> lowp_f32mat3x3;
+
+ /// Low single-precision floating-point 3x4 matrix.
+ /// @see gtc_type_precision
+ typedef tmat3x4<f32, lowp> lowp_f32mat3x4;
+
+ /// Low single-precision floating-point 4x2 matrix.
+ /// @see gtc_type_precision
+ typedef tmat4x2<f32, lowp> lowp_f32mat4x2;
+
+ /// Low single-precision floating-point 4x3 matrix.
+ /// @see gtc_type_precision
+ typedef tmat4x3<f32, lowp> lowp_f32mat4x3;
+
+ /// Low single-precision floating-point 4x4 matrix.
+ /// @see gtc_type_precision
+ typedef tmat4x4<f32, lowp> lowp_f32mat4x4;
+
+ /// Low single-precision floating-point 1x1 matrix.
+ /// @see gtc_type_precision
+ //typedef detail::tmat1x1<f32, lowp> lowp_f32mat1;
+
+ /// Low single-precision floating-point 2x2 matrix.
+ /// @see gtc_type_precision
+ typedef lowp_f32mat2x2 lowp_f32mat2;
+
+ /// Low single-precision floating-point 3x3 matrix.
+ /// @see gtc_type_precision
+ typedef lowp_f32mat3x3 lowp_f32mat3;
+
+ /// Low single-precision floating-point 4x4 matrix.
+ /// @see gtc_type_precision
+ typedef lowp_f32mat4x4 lowp_f32mat4;
+
+
+ /// High single-precision floating-point 1x1 matrix.
+ /// @see gtc_type_precision
+ //typedef f32 mediump_f32mat1x1;
+
+ /// Low single-precision floating-point 2x2 matrix.
+ /// @see gtc_type_precision
+ typedef tmat2x2<f32, mediump> mediump_f32mat2x2;
+
+ /// Medium single-precision floating-point 2x3 matrix.
+ /// @see gtc_type_precision
+ typedef tmat2x3<f32, mediump> mediump_f32mat2x3;
+
+ /// Medium single-precision floating-point 2x4 matrix.
+ /// @see gtc_type_precision
+ typedef tmat2x4<f32, mediump> mediump_f32mat2x4;
+
+ /// Medium single-precision floating-point 3x2 matrix.
+ /// @see gtc_type_precision
+ typedef tmat3x2<f32, mediump> mediump_f32mat3x2;
+
+ /// Medium single-precision floating-point 3x3 matrix.
+ /// @see gtc_type_precision
+ typedef tmat3x3<f32, mediump> mediump_f32mat3x3;
+
+ /// Medium single-precision floating-point 3x4 matrix.
+ /// @see gtc_type_precision
+ typedef tmat3x4<f32, mediump> mediump_f32mat3x4;
+
+ /// Medium single-precision floating-point 4x2 matrix.
+ /// @see gtc_type_precision
+ typedef tmat4x2<f32, mediump> mediump_f32mat4x2;
+
+ /// Medium single-precision floating-point 4x3 matrix.
+ /// @see gtc_type_precision
+ typedef tmat4x3<f32, mediump> mediump_f32mat4x3;
+
+ /// Medium single-precision floating-point 4x4 matrix.
+ /// @see gtc_type_precision
+ typedef tmat4x4<f32, mediump> mediump_f32mat4x4;
+
+ /// Medium single-precision floating-point 1x1 matrix.
+ /// @see gtc_type_precision
+ //typedef detail::tmat1x1<f32, mediump> f32mat1;
+
+ /// Medium single-precision floating-point 2x2 matrix.
+ /// @see gtc_type_precision
+ typedef mediump_f32mat2x2 mediump_f32mat2;
+
+ /// Medium single-precision floating-point 3x3 matrix.
+ /// @see gtc_type_precision
+ typedef mediump_f32mat3x3 mediump_f32mat3;
+
+ /// Medium single-precision floating-point 4x4 matrix.
+ /// @see gtc_type_precision
+ typedef mediump_f32mat4x4 mediump_f32mat4;
+
+
+ /// High single-precision floating-point 1x1 matrix.
+ /// @see gtc_type_precision
+ //typedef f32 highp_f32mat1x1;
+
+ /// High single-precision floating-point 2x2 matrix.
+ /// @see gtc_type_precision
+ typedef tmat2x2<f32, highp> highp_f32mat2x2;
+
+ /// High single-precision floating-point 2x3 matrix.
+ /// @see gtc_type_precision
+ typedef tmat2x3<f32, highp> highp_f32mat2x3;
+
+ /// High single-precision floating-point 2x4 matrix.
+ /// @see gtc_type_precision
+ typedef tmat2x4<f32, highp> highp_f32mat2x4;
+
+ /// High single-precision floating-point 3x2 matrix.
+ /// @see gtc_type_precision
+ typedef tmat3x2<f32, highp> highp_f32mat3x2;
+
+ /// High single-precision floating-point 3x3 matrix.
+ /// @see gtc_type_precision
+ typedef tmat3x3<f32, highp> highp_f32mat3x3;
+
+ /// High single-precision floating-point 3x4 matrix.
+ /// @see gtc_type_precision
+ typedef tmat3x4<f32, highp> highp_f32mat3x4;
+
+ /// High single-precision floating-point 4x2 matrix.
+ /// @see gtc_type_precision
+ typedef tmat4x2<f32, highp> highp_f32mat4x2;
+
+ /// High single-precision floating-point 4x3 matrix.
+ /// @see gtc_type_precision
+ typedef tmat4x3<f32, highp> highp_f32mat4x3;
+
+ /// High single-precision floating-point 4x4 matrix.
+ /// @see gtc_type_precision
+ typedef tmat4x4<f32, highp> highp_f32mat4x4;
+
+ /// High single-precision floating-point 1x1 matrix.
+ /// @see gtc_type_precision
+ //typedef detail::tmat1x1<f32, highp> f32mat1;
+
+ /// High single-precision floating-point 2x2 matrix.
+ /// @see gtc_type_precision
+ typedef highp_f32mat2x2 highp_f32mat2;
+
+ /// High single-precision floating-point 3x3 matrix.
+ /// @see gtc_type_precision
+ typedef highp_f32mat3x3 highp_f32mat3;
+
+ /// High single-precision floating-point 4x4 matrix.
+ /// @see gtc_type_precision
+ typedef highp_f32mat4x4 highp_f32mat4;
+
+
+ /// Low double-precision floating-point 1x1 matrix.
+ /// @see gtc_type_precision
+ //typedef f64 lowp_f64mat1x1;
+
+ /// Low double-precision floating-point 2x2 matrix.
+ /// @see gtc_type_precision
+ typedef tmat2x2<f64, lowp> lowp_f64mat2x2;
+
+ /// Low double-precision floating-point 2x3 matrix.
+ /// @see gtc_type_precision
+ typedef tmat2x3<f64, lowp> lowp_f64mat2x3;
+
+ /// Low double-precision floating-point 2x4 matrix.
+ /// @see gtc_type_precision
+ typedef tmat2x4<f64, lowp> lowp_f64mat2x4;
+
+ /// Low double-precision floating-point 3x2 matrix.
+ /// @see gtc_type_precision
+ typedef tmat3x2<f64, lowp> lowp_f64mat3x2;
+
+ /// Low double-precision floating-point 3x3 matrix.
+ /// @see gtc_type_precision
+ typedef tmat3x3<f64, lowp> lowp_f64mat3x3;
+
+ /// Low double-precision floating-point 3x4 matrix.
+ /// @see gtc_type_precision
+ typedef tmat3x4<f64, lowp> lowp_f64mat3x4;
+
+ /// Low double-precision floating-point 4x2 matrix.
+ /// @see gtc_type_precision
+ typedef tmat4x2<f64, lowp> lowp_f64mat4x2;
+
+ /// Low double-precision floating-point 4x3 matrix.
+ /// @see gtc_type_precision
+ typedef tmat4x3<f64, lowp> lowp_f64mat4x3;
+
+ /// Low double-precision floating-point 4x4 matrix.
+ /// @see gtc_type_precision
+ typedef tmat4x4<f64, lowp> lowp_f64mat4x4;
+
+ /// Low double-precision floating-point 1x1 matrix.
+ /// @see gtc_type_precision
+ //typedef lowp_f64mat1x1 lowp_f64mat1;
+
+ /// Low double-precision floating-point 2x2 matrix.
+ /// @see gtc_type_precision
+ typedef lowp_f64mat2x2 lowp_f64mat2;
+
+ /// Low double-precision floating-point 3x3 matrix.
+ /// @see gtc_type_precision
+ typedef lowp_f64mat3x3 lowp_f64mat3;
+
+ /// Low double-precision floating-point 4x4 matrix.
+ /// @see gtc_type_precision
+ typedef lowp_f64mat4x4 lowp_f64mat4;
+
+
+ /// Medium double-precision floating-point 1x1 matrix.
+ /// @see gtc_type_precision
+ //typedef f64 Highp_f64mat1x1;
+
+ /// Medium double-precision floating-point 2x2 matrix.
+ /// @see gtc_type_precision
+ typedef tmat2x2<f64, mediump> mediump_f64mat2x2;
+
+ /// Medium double-precision floating-point 2x3 matrix.
+ /// @see gtc_type_precision
+ typedef tmat2x3<f64, mediump> mediump_f64mat2x3;
+
+ /// Medium double-precision floating-point 2x4 matrix.
+ /// @see gtc_type_precision
+ typedef tmat2x4<f64, mediump> mediump_f64mat2x4;
+
+ /// Medium double-precision floating-point 3x2 matrix.
+ /// @see gtc_type_precision
+ typedef tmat3x2<f64, mediump> mediump_f64mat3x2;
+
+ /// Medium double-precision floating-point 3x3 matrix.
+ /// @see gtc_type_precision
+ typedef tmat3x3<f64, mediump> mediump_f64mat3x3;
+
+ /// Medium double-precision floating-point 3x4 matrix.
+ /// @see gtc_type_precision
+ typedef tmat3x4<f64, mediump> mediump_f64mat3x4;
+
+ /// Medium double-precision floating-point 4x2 matrix.
+ /// @see gtc_type_precision
+ typedef tmat4x2<f64, mediump> mediump_f64mat4x2;
+
+ /// Medium double-precision floating-point 4x3 matrix.
+ /// @see gtc_type_precision
+ typedef tmat4x3<f64, mediump> mediump_f64mat4x3;
+
+ /// Medium double-precision floating-point 4x4 matrix.
+ /// @see gtc_type_precision
+ typedef tmat4x4<f64, mediump> mediump_f64mat4x4;
+
+ /// Medium double-precision floating-point 1x1 matrix.
+ /// @see gtc_type_precision
+ //typedef mediump_f64mat1x1 mediump_f64mat1;
+
+ /// Medium double-precision floating-point 2x2 matrix.
+ /// @see gtc_type_precision
+ typedef mediump_f64mat2x2 mediump_f64mat2;
+
+ /// Medium double-precision floating-point 3x3 matrix.
+ /// @see gtc_type_precision
+ typedef mediump_f64mat3x3 mediump_f64mat3;
+
+ /// Medium double-precision floating-point 4x4 matrix.
+ /// @see gtc_type_precision
+ typedef mediump_f64mat4x4 mediump_f64mat4;
+
+ /// High double-precision floating-point 1x1 matrix.
+ /// @see gtc_type_precision
+ //typedef f64 highp_f64mat1x1;
+
+ /// High double-precision floating-point 2x2 matrix.
+ /// @see gtc_type_precision
+ typedef tmat2x2<f64, highp> highp_f64mat2x2;
+
+ /// High double-precision floating-point 2x3 matrix.
+ /// @see gtc_type_precision
+ typedef tmat2x3<f64, highp> highp_f64mat2x3;
+
+ /// High double-precision floating-point 2x4 matrix.
+ /// @see gtc_type_precision
+ typedef tmat2x4<f64, highp> highp_f64mat2x4;
+
+ /// High double-precision floating-point 3x2 matrix.
+ /// @see gtc_type_precision
+ typedef tmat3x2<f64, highp> highp_f64mat3x2;
+
+ /// High double-precision floating-point 3x3 matrix.
+ /// @see gtc_type_precision
+ typedef tmat3x3<f64, highp> highp_f64mat3x3;
+
+ /// High double-precision floating-point 3x4 matrix.
+ /// @see gtc_type_precision
+ typedef tmat3x4<f64, highp> highp_f64mat3x4;
+
+ /// High double-precision floating-point 4x2 matrix.
+ /// @see gtc_type_precision
+ typedef tmat4x2<f64, highp> highp_f64mat4x2;
+
+ /// High double-precision floating-point 4x3 matrix.
+ /// @see gtc_type_precision
+ typedef tmat4x3<f64, highp> highp_f64mat4x3;
+
+ /// High double-precision floating-point 4x4 matrix.
+ /// @see gtc_type_precision
+ typedef tmat4x4<f64, highp> highp_f64mat4x4;
+
+ /// High double-precision floating-point 1x1 matrix.
+ /// @see gtc_type_precision
+ //typedef highp_f64mat1x1 highp_f64mat1;
+
+ /// High double-precision floating-point 2x2 matrix.
+ /// @see gtc_type_precision
+ typedef highp_f64mat2x2 highp_f64mat2;
+
+ /// High double-precision floating-point 3x3 matrix.
+ /// @see gtc_type_precision
+ typedef highp_f64mat3x3 highp_f64mat3;
+
+ /// High double-precision floating-point 4x4 matrix.
+ /// @see gtc_type_precision
+ typedef highp_f64mat4x4 highp_f64mat4;
+
+ //////////////////////////
+ // Quaternion types
+
+ /// Low single-precision floating-point quaternion.
+ /// @see gtc_type_precision
+ typedef tquat<f32, lowp> lowp_f32quat;
+
+ /// Low double-precision floating-point quaternion.
+ /// @see gtc_type_precision
+ typedef tquat<f64, lowp> lowp_f64quat;
+
+ /// Medium single-precision floating-point quaternion.
+ /// @see gtc_type_precision
+ typedef tquat<f32, mediump> mediump_f32quat;
+
+ /// Medium double-precision floating-point quaternion.
+ /// @see gtc_type_precision
+ typedef tquat<f64, mediump> mediump_f64quat;
+
+ /// High single-precision floating-point quaternion.
+ /// @see gtc_type_precision
+ typedef tquat<f32, highp> highp_f32quat;
+
+ /// High double-precision floating-point quaternion.
+ /// @see gtc_type_precision
+ typedef tquat<f64, highp> highp_f64quat;
+
+
+#if(defined(GLM_PRECISION_LOWP_FLOAT))
+ typedef lowp_f32vec1 fvec1;
+ typedef lowp_f32vec2 fvec2;
+ typedef lowp_f32vec3 fvec3;
+ typedef lowp_f32vec4 fvec4;
+ typedef lowp_f32mat2 fmat2;
+ typedef lowp_f32mat3 fmat3;
+ typedef lowp_f32mat4 fmat4;
+ typedef lowp_f32mat2x2 fmat2x2;
+ typedef lowp_f32mat3x2 fmat3x2;
+ typedef lowp_f32mat4x2 fmat4x2;
+ typedef lowp_f32mat2x3 fmat2x3;
+ typedef lowp_f32mat3x3 fmat3x3;
+ typedef lowp_f32mat4x3 fmat4x3;
+ typedef lowp_f32mat2x4 fmat2x4;
+ typedef lowp_f32mat3x4 fmat3x4;
+ typedef lowp_f32mat4x4 fmat4x4;
+ typedef lowp_f32quat fquat;
+
+ typedef lowp_f32vec1 f32vec1;
+ typedef lowp_f32vec2 f32vec2;
+ typedef lowp_f32vec3 f32vec3;
+ typedef lowp_f32vec4 f32vec4;
+ typedef lowp_f32mat2 f32mat2;
+ typedef lowp_f32mat3 f32mat3;
+ typedef lowp_f32mat4 f32mat4;
+ typedef lowp_f32mat2x2 f32mat2x2;
+ typedef lowp_f32mat3x2 f32mat3x2;
+ typedef lowp_f32mat4x2 f32mat4x2;
+ typedef lowp_f32mat2x3 f32mat2x3;
+ typedef lowp_f32mat3x3 f32mat3x3;
+ typedef lowp_f32mat4x3 f32mat4x3;
+ typedef lowp_f32mat2x4 f32mat2x4;
+ typedef lowp_f32mat3x4 f32mat3x4;
+ typedef lowp_f32mat4x4 f32mat4x4;
+ typedef lowp_f32quat f32quat;
+#elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))
+ typedef mediump_f32vec1 fvec1;
+ typedef mediump_f32vec2 fvec2;
+ typedef mediump_f32vec3 fvec3;
+ typedef mediump_f32vec4 fvec4;
+ typedef mediump_f32mat2 fmat2;
+ typedef mediump_f32mat3 fmat3;
+ typedef mediump_f32mat4 fmat4;
+ typedef mediump_f32mat2x2 fmat2x2;
+ typedef mediump_f32mat3x2 fmat3x2;
+ typedef mediump_f32mat4x2 fmat4x2;
+ typedef mediump_f32mat2x3 fmat2x3;
+ typedef mediump_f32mat3x3 fmat3x3;
+ typedef mediump_f32mat4x3 fmat4x3;
+ typedef mediump_f32mat2x4 fmat2x4;
+ typedef mediump_f32mat3x4 fmat3x4;
+ typedef mediump_f32mat4x4 fmat4x4;
+ typedef mediump_f32quat fquat;
+
+ typedef mediump_f32vec1 f32vec1;
+ typedef mediump_f32vec2 f32vec2;
+ typedef mediump_f32vec3 f32vec3;
+ typedef mediump_f32vec4 f32vec4;
+ typedef mediump_f32mat2 f32mat2;
+ typedef mediump_f32mat3 f32mat3;
+ typedef mediump_f32mat4 f32mat4;
+ typedef mediump_f32mat2x2 f32mat2x2;
+ typedef mediump_f32mat3x2 f32mat3x2;
+ typedef mediump_f32mat4x2 f32mat4x2;
+ typedef mediump_f32mat2x3 f32mat2x3;
+ typedef mediump_f32mat3x3 f32mat3x3;
+ typedef mediump_f32mat4x3 f32mat4x3;
+ typedef mediump_f32mat2x4 f32mat2x4;
+ typedef mediump_f32mat3x4 f32mat3x4;
+ typedef mediump_f32mat4x4 f32mat4x4;
+ typedef mediump_f32quat f32quat;
+#else//if(defined(GLM_PRECISION_HIGHP_FLOAT))
+ /// Default single-precision floating-point vector of 1 components.
+ /// @see gtc_type_precision
+ typedef highp_f32vec1 fvec1;
+
+ /// Default single-precision floating-point vector of 2 components.
+ /// @see gtc_type_precision
+ typedef highp_f32vec2 fvec2;
+
+ /// Default single-precision floating-point vector of 3 components.
+ /// @see gtc_type_precision
+ typedef highp_f32vec3 fvec3;
+
+ /// Default single-precision floating-point vector of 4 components.
+ /// @see gtc_type_precision
+ typedef highp_f32vec4 fvec4;
+
+ /// Default single-precision floating-point 2x2 matrix.
+ /// @see gtc_type_precision
+ typedef highp_f32mat2x2 fmat2x2;
+
+ /// Default single-precision floating-point 2x3 matrix.
+ /// @see gtc_type_precision
+ typedef highp_f32mat2x3 fmat2x3;
+
+ /// Default single-precision floating-point 2x4 matrix.
+ /// @see gtc_type_precision
+ typedef highp_f32mat2x4 fmat2x4;
+
+ /// Default single-precision floating-point 3x2 matrix.
+ /// @see gtc_type_precision
+ typedef highp_f32mat3x2 fmat3x2;
+
+ /// Default single-precision floating-point 3x3 matrix.
+ /// @see gtc_type_precision
+ typedef highp_f32mat3x3 fmat3x3;
+
+ /// Default single-precision floating-point 3x4 matrix.
+ /// @see gtc_type_precision
+ typedef highp_f32mat3x4 fmat3x4;
+
+ /// Default single-precision floating-point 4x2 matrix.
+ /// @see gtc_type_precision
+ typedef highp_f32mat4x2 fmat4x2;
+
+ /// Default single-precision floating-point 4x3 matrix.
+ /// @see gtc_type_precision
+ typedef highp_f32mat4x3 fmat4x3;
+
+ /// Default single-precision floating-point 4x4 matrix.
+ /// @see gtc_type_precision
+ typedef highp_f32mat4x4 fmat4x4;
+
+ /// Default single-precision floating-point 2x2 matrix.
+ /// @see gtc_type_precision
+ typedef fmat2x2 fmat2;
+
+ /// Default single-precision floating-point 3x3 matrix.
+ /// @see gtc_type_precision
+ typedef fmat3x3 fmat3;
+
+ /// Default single-precision floating-point 4x4 matrix.
+ /// @see gtc_type_precision
+ typedef fmat4x4 fmat4;
+
+ /// Default single-precision floating-point quaternion.
+ /// @see gtc_type_precision
+ typedef highp_fquat fquat;
+
+
+
+ /// Default single-precision floating-point vector of 1 components.
+ /// @see gtc_type_precision
+ typedef highp_f32vec1 f32vec1;
+
+ /// Default single-precision floating-point vector of 2 components.
+ /// @see gtc_type_precision
+ typedef highp_f32vec2 f32vec2;
+
+ /// Default single-precision floating-point vector of 3 components.
+ /// @see gtc_type_precision
+ typedef highp_f32vec3 f32vec3;
+
+ /// Default single-precision floating-point vector of 4 components.
+ /// @see gtc_type_precision
+ typedef highp_f32vec4 f32vec4;
+
+ /// Default single-precision floating-point 2x2 matrix.
+ /// @see gtc_type_precision
+ typedef highp_f32mat2x2 f32mat2x2;
+
+ /// Default single-precision floating-point 2x3 matrix.
+ /// @see gtc_type_precision
+ typedef highp_f32mat2x3 f32mat2x3;
+
+ /// Default single-precision floating-point 2x4 matrix.
+ /// @see gtc_type_precision
+ typedef highp_f32mat2x4 f32mat2x4;
+
+ /// Default single-precision floating-point 3x2 matrix.
+ /// @see gtc_type_precision
+ typedef highp_f32mat3x2 f32mat3x2;
+
+ /// Default single-precision floating-point 3x3 matrix.
+ /// @see gtc_type_precision
+ typedef highp_f32mat3x3 f32mat3x3;
+
+ /// Default single-precision floating-point 3x4 matrix.
+ /// @see gtc_type_precision
+ typedef highp_f32mat3x4 f32mat3x4;
+
+ /// Default single-precision floating-point 4x2 matrix.
+ /// @see gtc_type_precision
+ typedef highp_f32mat4x2 f32mat4x2;
+
+ /// Default single-precision floating-point 4x3 matrix.
+ /// @see gtc_type_precision
+ typedef highp_f32mat4x3 f32mat4x3;
+
+ /// Default single-precision floating-point 4x4 matrix.
+ /// @see gtc_type_precision
+ typedef highp_f32mat4x4 f32mat4x4;
+
+ /// Default single-precision floating-point 2x2 matrix.
+ /// @see gtc_type_precision
+ typedef f32mat2x2 f32mat2;
+
+ /// Default single-precision floating-point 3x3 matrix.
+ /// @see gtc_type_precision
+ typedef f32mat3x3 f32mat3;
+
+ /// Default single-precision floating-point 4x4 matrix.
+ /// @see gtc_type_precision
+ typedef f32mat4x4 f32mat4;
+
+ /// Default single-precision floating-point quaternion.
+ /// @see gtc_type_precision
+ typedef highp_f32quat f32quat;
+#endif
+
+#if(defined(GLM_PRECISION_LOWP_DOUBLE))
+ typedef lowp_f64vec1 f64vec1;
+ typedef lowp_f64vec2 f64vec2;
+ typedef lowp_f64vec3 f64vec3;
+ typedef lowp_f64vec4 f64vec4;
+ typedef lowp_f64mat2 f64mat2;
+ typedef lowp_f64mat3 f64mat3;
+ typedef lowp_f64mat4 f64mat4;
+ typedef lowp_f64mat2x2 f64mat2x2;
+ typedef lowp_f64mat3x2 f64mat3x2;
+ typedef lowp_f64mat4x2 f64mat4x2;
+ typedef lowp_f64mat2x3 f64mat2x3;
+ typedef lowp_f64mat3x3 f64mat3x3;
+ typedef lowp_f64mat4x3 f64mat4x3;
+ typedef lowp_f64mat2x4 f64mat2x4;
+ typedef lowp_f64mat3x4 f64mat3x4;
+ typedef lowp_f64mat4x4 f64mat4x4;
+ typedef lowp_f64quat f64quat;
+#elif(defined(GLM_PRECISION_MEDIUMP_DOUBLE))
+ typedef mediump_f64vec1 f64vec1;
+ typedef mediump_f64vec2 f64vec2;
+ typedef mediump_f64vec3 f64vec3;
+ typedef mediump_f64vec4 f64vec4;
+ typedef mediump_f64mat2 f64mat2;
+ typedef mediump_f64mat3 f64mat3;
+ typedef mediump_f64mat4 f64mat4;
+ typedef mediump_f64mat2x2 f64mat2x2;
+ typedef mediump_f64mat3x2 f64mat3x2;
+ typedef mediump_f64mat4x2 f64mat4x2;
+ typedef mediump_f64mat2x3 f64mat2x3;
+ typedef mediump_f64mat3x3 f64mat3x3;
+ typedef mediump_f64mat4x3 f64mat4x3;
+ typedef mediump_f64mat2x4 f64mat2x4;
+ typedef mediump_f64mat3x4 f64mat3x4;
+ typedef mediump_f64mat4x4 f64mat4x4;
+ typedef mediump_f64quat f64quat;
+#else
+ /// Default double-precision floating-point vector of 1 components.
+ /// @see gtc_type_precision
+ typedef highp_f64vec1 f64vec1;
+
+ /// Default double-precision floating-point vector of 2 components.
+ /// @see gtc_type_precision
+ typedef highp_f64vec2 f64vec2;
+
+ /// Default double-precision floating-point vector of 3 components.
+ /// @see gtc_type_precision
+ typedef highp_f64vec3 f64vec3;
+
+ /// Default double-precision floating-point vector of 4 components.
+ /// @see gtc_type_precision
+ typedef highp_f64vec4 f64vec4;
+
+ /// Default double-precision floating-point 2x2 matrix.
+ /// @see gtc_type_precision
+ typedef highp_f64mat2x2 f64mat2x2;
+
+ /// Default double-precision floating-point 2x3 matrix.
+ /// @see gtc_type_precision
+ typedef highp_f64mat2x3 f64mat2x3;
+
+ /// Default double-precision floating-point 2x4 matrix.
+ /// @see gtc_type_precision
+ typedef highp_f64mat2x4 f64mat2x4;
+
+ /// Default double-precision floating-point 3x2 matrix.
+ /// @see gtc_type_precision
+ typedef highp_f64mat3x2 f64mat3x2;
+
+ /// Default double-precision floating-point 3x3 matrix.
+ /// @see gtc_type_precision
+ typedef highp_f64mat3x3 f64mat3x3;
+
+ /// Default double-precision floating-point 3x4 matrix.
+ /// @see gtc_type_precision
+ typedef highp_f64mat3x4 f64mat3x4;
+
+ /// Default double-precision floating-point 4x2 matrix.
+ /// @see gtc_type_precision
+ typedef highp_f64mat4x2 f64mat4x2;
+
+ /// Default double-precision floating-point 4x3 matrix.
+ /// @see gtc_type_precision
+ typedef highp_f64mat4x3 f64mat4x3;
+
+ /// Default double-precision floating-point 4x4 matrix.
+ /// @see gtc_type_precision
+ typedef highp_f64mat4x4 f64mat4x4;
+
+ /// Default double-precision floating-point 2x2 matrix.
+ /// @see gtc_type_precision
+ typedef f64mat2x2 f64mat2;
+
+ /// Default double-precision floating-point 3x3 matrix.
+ /// @see gtc_type_precision
+ typedef f64mat3x3 f64mat3;
+
+ /// Default double-precision floating-point 4x4 matrix.
+ /// @see gtc_type_precision
+ typedef f64mat4x4 f64mat4;
+
+ /// Default double-precision floating-point quaternion.
+ /// @see gtc_type_precision
+ typedef highp_f64quat f64quat;
+#endif
+
+}//namespace glm
diff --git a/src/third_party/glm/glm/geometric.hpp b/src/third_party/glm/glm/geometric.hpp
new file mode 100644
index 0000000..eea45b1
--- /dev/null
+++ b/src/third_party/glm/glm/geometric.hpp
@@ -0,0 +1,6 @@
+/// @ref core
+/// @file glm/geometric.hpp
+
+#pragma once
+
+#include "detail/func_geometric.hpp"
diff --git a/src/third_party/glm/glm/glm.hpp b/src/third_party/glm/glm/glm.hpp
new file mode 100644
index 0000000..021a360
--- /dev/null
+++ b/src/third_party/glm/glm/glm.hpp
@@ -0,0 +1,88 @@
+/// @ref core
+/// @file glm/glm.hpp
+///
+/// @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" and
+/// 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.20.8.clean.pdf">version 4.2
+/// (pdf file)</a>.
+///
+/// GLM core functionnalities require <glm/glm.hpp> to be included to be used.
+///
+/// @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 definition
+/// 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
+
+#include "detail/_fixes.hpp"
+
+#pragma once
+
+#include <cmath>
+#include <climits>
+#include <cfloat>
+#include <limits>
+#include <cassert>
+#include "fwd.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_MESSAGE_CORE_INCLUDED_DISPLAYED)
+# define GLM_MESSAGE_CORE_INCLUDED_DISPLAYED
+# pragma message("GLM: Core library included")
+#endif//GLM_MESSAGES
+
+#include "vec2.hpp"
+#include "vec3.hpp"
+#include "vec4.hpp"
+#include "mat2x2.hpp"
+#include "mat2x3.hpp"
+#include "mat2x4.hpp"
+#include "mat3x2.hpp"
+#include "mat3x3.hpp"
+#include "mat3x4.hpp"
+#include "mat4x2.hpp"
+#include "mat4x3.hpp"
+#include "mat4x4.hpp"
+
+#include "trigonometric.hpp"
+#include "exponential.hpp"
+#include "common.hpp"
+#include "packing.hpp"
+#include "geometric.hpp"
+#include "matrix.hpp"
+#include "vector_relational.hpp"
+#include "integer.hpp"
diff --git a/src/third_party/glm/glm/gtc/bitfield.hpp b/src/third_party/glm/glm/gtc/bitfield.hpp
new file mode 100644
index 0000000..38a38b6
--- /dev/null
+++ b/src/third_party/glm/glm/gtc/bitfield.hpp
@@ -0,0 +1,207 @@
+/// @ref gtc_bitfield
+/// @file glm/gtc/bitfield.hpp
+///
+/// @see core (dependence)
+/// @see gtc_bitfield (dependence)
+///
+/// @defgroup gtc_bitfield GLM_GTC_bitfield
+/// @ingroup gtc
+///
+/// @brief Allow to perform bit operations on integer values
+///
+/// <glm/gtc/bitfield.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependencies
+#include "../detail/setup.hpp"
+#include "../detail/precision.hpp"
+#include "../detail/type_int.hpp"
+#include "../detail/_vectorize.hpp"
+#include <limits>
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTC_bitfield extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtc_bitfield
+ /// @{
+
+ /// Build a mask of 'count' bits
+ ///
+ /// @see gtc_bitfield
+ template <typename genIUType>
+ GLM_FUNC_DECL genIUType mask(genIUType Bits);
+
+ /// Build a mask of 'count' bits
+ ///
+ /// @see gtc_bitfield
+ template <typename T, precision P, template <typename, precision> class vecIUType>
+ GLM_FUNC_DECL vecIUType<T, P> mask(vecIUType<T, P> const & v);
+
+ /// Rotate all bits to the right. All the bits dropped in the right side are inserted back on the left side.
+ ///
+ /// @see gtc_bitfield
+ template <typename genIUType>
+ GLM_FUNC_DECL genIUType bitfieldRotateRight(genIUType In, int Shift);
+
+ /// Rotate all bits to the right. All the bits dropped in the right side are inserted back on the left side.
+ ///
+ /// @see gtc_bitfield
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> bitfieldRotateRight(vecType<T, P> const & In, int Shift);
+
+ /// Rotate all bits to the left. All the bits dropped in the left side are inserted back on the right side.
+ ///
+ /// @see gtc_bitfield
+ template <typename genIUType>
+ GLM_FUNC_DECL genIUType bitfieldRotateLeft(genIUType In, int Shift);
+
+ /// Rotate all bits to the left. All the bits dropped in the left side are inserted back on the right side.
+ ///
+ /// @see gtc_bitfield
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> bitfieldRotateLeft(vecType<T, P> const & In, int Shift);
+
+ /// Set to 1 a range of bits.
+ ///
+ /// @see gtc_bitfield
+ template <typename genIUType>
+ GLM_FUNC_DECL genIUType bitfieldFillOne(genIUType Value, int FirstBit, int BitCount);
+
+ /// Set to 1 a range of bits.
+ ///
+ /// @see gtc_bitfield
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> bitfieldFillOne(vecType<T, P> const & Value, int FirstBit, int BitCount);
+
+ /// Set to 0 a range of bits.
+ ///
+ /// @see gtc_bitfield
+ template <typename genIUType>
+ GLM_FUNC_DECL genIUType bitfieldFillZero(genIUType Value, int FirstBit, int BitCount);
+
+ /// Set to 0 a range of bits.
+ ///
+ /// @see gtc_bitfield
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> bitfieldFillZero(vecType<T, P> const & Value, int FirstBit, int BitCount);
+
+ /// Interleaves the bits of x and y.
+ /// The first bit is the first bit of x followed by the first bit of y.
+ /// The other bits are interleaved following the previous sequence.
+ ///
+ /// @see gtc_bitfield
+ GLM_FUNC_DECL int16 bitfieldInterleave(int8 x, int8 y);
+
+ /// Interleaves the bits of x and y.
+ /// The first bit is the first bit of x followed by the first bit of y.
+ /// The other bits are interleaved following the previous sequence.
+ ///
+ /// @see gtc_bitfield
+ GLM_FUNC_DECL uint16 bitfieldInterleave(uint8 x, uint8 y);
+
+ /// Interleaves the bits of x and y.
+ /// The first bit is the first bit of x followed by the first bit of y.
+ /// The other bits are interleaved following the previous sequence.
+ ///
+ /// @see gtc_bitfield
+ GLM_FUNC_DECL int32 bitfieldInterleave(int16 x, int16 y);
+
+ /// Interleaves the bits of x and y.
+ /// The first bit is the first bit of x followed by the first bit of y.
+ /// The other bits are interleaved following the previous sequence.
+ ///
+ /// @see gtc_bitfield
+ GLM_FUNC_DECL uint32 bitfieldInterleave(uint16 x, uint16 y);
+
+ /// Interleaves the bits of x and y.
+ /// The first bit is the first bit of x followed by the first bit of y.
+ /// The other bits are interleaved following the previous sequence.
+ ///
+ /// @see gtc_bitfield
+ GLM_FUNC_DECL int64 bitfieldInterleave(int32 x, int32 y);
+
+ /// Interleaves the bits of x and y.
+ /// The first bit is the first bit of x followed by the first bit of y.
+ /// The other bits are interleaved following the previous sequence.
+ ///
+ /// @see gtc_bitfield
+ GLM_FUNC_DECL uint64 bitfieldInterleave(uint32 x, uint32 y);
+
+ /// Interleaves the bits of x, y and z.
+ /// The first bit is the first bit of x followed by the first bit of y and the first bit of z.
+ /// The other bits are interleaved following the previous sequence.
+ ///
+ /// @see gtc_bitfield
+ GLM_FUNC_DECL int32 bitfieldInterleave(int8 x, int8 y, int8 z);
+
+ /// Interleaves the bits of x, y and z.
+ /// The first bit is the first bit of x followed by the first bit of y and the first bit of z.
+ /// The other bits are interleaved following the previous sequence.
+ ///
+ /// @see gtc_bitfield
+ GLM_FUNC_DECL uint32 bitfieldInterleave(uint8 x, uint8 y, uint8 z);
+
+ /// Interleaves the bits of x, y and z.
+ /// The first bit is the first bit of x followed by the first bit of y and the first bit of z.
+ /// The other bits are interleaved following the previous sequence.
+ ///
+ /// @see gtc_bitfield
+ GLM_FUNC_DECL int64 bitfieldInterleave(int16 x, int16 y, int16 z);
+
+ /// Interleaves the bits of x, y and z.
+ /// The first bit is the first bit of x followed by the first bit of y and the first bit of z.
+ /// The other bits are interleaved following the previous sequence.
+ ///
+ /// @see gtc_bitfield
+ GLM_FUNC_DECL uint64 bitfieldInterleave(uint16 x, uint16 y, uint16 z);
+
+ /// Interleaves the bits of x, y and z.
+ /// The first bit is the first bit of x followed by the first bit of y and the first bit of z.
+ /// The other bits are interleaved following the previous sequence.
+ ///
+ /// @see gtc_bitfield
+ GLM_FUNC_DECL int64 bitfieldInterleave(int32 x, int32 y, int32 z);
+
+ /// Interleaves the bits of x, y and z.
+ /// The first bit is the first bit of x followed by the first bit of y and the first bit of z.
+ /// The other bits are interleaved following the previous sequence.
+ ///
+ /// @see gtc_bitfield
+ GLM_FUNC_DECL uint64 bitfieldInterleave(uint32 x, uint32 y, uint32 z);
+
+ /// Interleaves the bits of x, y, z and w.
+ /// The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w.
+ /// The other bits are interleaved following the previous sequence.
+ ///
+ /// @see gtc_bitfield
+ GLM_FUNC_DECL int32 bitfieldInterleave(int8 x, int8 y, int8 z, int8 w);
+
+ /// Interleaves the bits of x, y, z and w.
+ /// The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w.
+ /// The other bits are interleaved following the previous sequence.
+ ///
+ /// @see gtc_bitfield
+ GLM_FUNC_DECL uint32 bitfieldInterleave(uint8 x, uint8 y, uint8 z, uint8 w);
+
+ /// Interleaves the bits of x, y, z and w.
+ /// The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w.
+ /// The other bits are interleaved following the previous sequence.
+ ///
+ /// @see gtc_bitfield
+ GLM_FUNC_DECL int64 bitfieldInterleave(int16 x, int16 y, int16 z, int16 w);
+
+ /// Interleaves the bits of x, y, z and w.
+ /// The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w.
+ /// The other bits are interleaved following the previous sequence.
+ ///
+ /// @see gtc_bitfield
+ GLM_FUNC_DECL uint64 bitfieldInterleave(uint16 x, uint16 y, uint16 z, uint16 w);
+
+ /// @}
+} //namespace glm
+
+#include "bitfield.inl"
diff --git a/src/third_party/glm/glm/gtc/bitfield.inl b/src/third_party/glm/glm/gtc/bitfield.inl
new file mode 100644
index 0000000..490cfb3
--- /dev/null
+++ b/src/third_party/glm/glm/gtc/bitfield.inl
@@ -0,0 +1,515 @@
+/// @ref gtc_bitfield
+/// @file glm/gtc/bitfield.inl
+
+#include "../simd/integer.h"
+
+namespace glm{
+namespace detail
+{
+ template <typename PARAM, typename RET>
+ GLM_FUNC_DECL RET bitfieldInterleave(PARAM x, PARAM y);
+
+ template <typename PARAM, typename RET>
+ GLM_FUNC_DECL RET bitfieldInterleave(PARAM x, PARAM y, PARAM z);
+
+ template <typename PARAM, typename RET>
+ GLM_FUNC_DECL RET bitfieldInterleave(PARAM x, PARAM y, PARAM z, PARAM w);
+
+ template <>
+ GLM_FUNC_QUALIFIER glm::uint16 bitfieldInterleave(glm::uint8 x, glm::uint8 y)
+ {
+ glm::uint16 REG1(x);
+ glm::uint16 REG2(y);
+
+ REG1 = ((REG1 << 4) | REG1) & glm::uint16(0x0F0F);
+ REG2 = ((REG2 << 4) | REG2) & glm::uint16(0x0F0F);
+
+ REG1 = ((REG1 << 2) | REG1) & glm::uint16(0x3333);
+ REG2 = ((REG2 << 2) | REG2) & glm::uint16(0x3333);
+
+ REG1 = ((REG1 << 1) | REG1) & glm::uint16(0x5555);
+ REG2 = ((REG2 << 1) | REG2) & glm::uint16(0x5555);
+
+ return REG1 | (REG2 << 1);
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER glm::uint32 bitfieldInterleave(glm::uint16 x, glm::uint16 y)
+ {
+ glm::uint32 REG1(x);
+ glm::uint32 REG2(y);
+
+ REG1 = ((REG1 << 8) | REG1) & glm::uint32(0x00FF00FF);
+ REG2 = ((REG2 << 8) | REG2) & glm::uint32(0x00FF00FF);
+
+ REG1 = ((REG1 << 4) | REG1) & glm::uint32(0x0F0F0F0F);
+ REG2 = ((REG2 << 4) | REG2) & glm::uint32(0x0F0F0F0F);
+
+ REG1 = ((REG1 << 2) | REG1) & glm::uint32(0x33333333);
+ REG2 = ((REG2 << 2) | REG2) & glm::uint32(0x33333333);
+
+ REG1 = ((REG1 << 1) | REG1) & glm::uint32(0x55555555);
+ REG2 = ((REG2 << 1) | REG2) & glm::uint32(0x55555555);
+
+ return REG1 | (REG2 << 1);
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER glm::uint64 bitfieldInterleave(glm::uint32 x, glm::uint32 y)
+ {
+ glm::uint64 REG1(x);
+ glm::uint64 REG2(y);
+
+ REG1 = ((REG1 << 16) | REG1) & glm::uint64(0x0000FFFF0000FFFFull);
+ REG2 = ((REG2 << 16) | REG2) & glm::uint64(0x0000FFFF0000FFFFull);
+
+ REG1 = ((REG1 << 8) | REG1) & glm::uint64(0x00FF00FF00FF00FFull);
+ REG2 = ((REG2 << 8) | REG2) & glm::uint64(0x00FF00FF00FF00FFull);
+
+ REG1 = ((REG1 << 4) | REG1) & glm::uint64(0x0F0F0F0F0F0F0F0Full);
+ REG2 = ((REG2 << 4) | REG2) & glm::uint64(0x0F0F0F0F0F0F0F0Full);
+
+ REG1 = ((REG1 << 2) | REG1) & glm::uint64(0x3333333333333333ull);
+ REG2 = ((REG2 << 2) | REG2) & glm::uint64(0x3333333333333333ull);
+
+ REG1 = ((REG1 << 1) | REG1) & glm::uint64(0x5555555555555555ull);
+ REG2 = ((REG2 << 1) | REG2) & glm::uint64(0x5555555555555555ull);
+
+ return REG1 | (REG2 << 1);
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER glm::uint32 bitfieldInterleave(glm::uint8 x, glm::uint8 y, glm::uint8 z)
+ {
+ glm::uint32 REG1(x);
+ glm::uint32 REG2(y);
+ glm::uint32 REG3(z);
+
+ REG1 = ((REG1 << 16) | REG1) & glm::uint32(0x00FF0000FF0000FF);
+ REG2 = ((REG2 << 16) | REG2) & glm::uint32(0x00FF0000FF0000FF);
+ REG3 = ((REG3 << 16) | REG3) & glm::uint32(0x00FF0000FF0000FF);
+
+ REG1 = ((REG1 << 8) | REG1) & glm::uint32(0xF00F00F00F00F00F);
+ REG2 = ((REG2 << 8) | REG2) & glm::uint32(0xF00F00F00F00F00F);
+ REG3 = ((REG3 << 8) | REG3) & glm::uint32(0xF00F00F00F00F00F);
+
+ REG1 = ((REG1 << 4) | REG1) & glm::uint32(0x30C30C30C30C30C3);
+ REG2 = ((REG2 << 4) | REG2) & glm::uint32(0x30C30C30C30C30C3);
+ REG3 = ((REG3 << 4) | REG3) & glm::uint32(0x30C30C30C30C30C3);
+
+ REG1 = ((REG1 << 2) | REG1) & glm::uint32(0x9249249249249249);
+ REG2 = ((REG2 << 2) | REG2) & glm::uint32(0x9249249249249249);
+ REG3 = ((REG3 << 2) | REG3) & glm::uint32(0x9249249249249249);
+
+ return REG1 | (REG2 << 1) | (REG3 << 2);
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER glm::uint64 bitfieldInterleave(glm::uint16 x, glm::uint16 y, glm::uint16 z)
+ {
+ glm::uint64 REG1(x);
+ glm::uint64 REG2(y);
+ glm::uint64 REG3(z);
+
+ REG1 = ((REG1 << 32) | REG1) & glm::uint64(0xFFFF00000000FFFFull);
+ REG2 = ((REG2 << 32) | REG2) & glm::uint64(0xFFFF00000000FFFFull);
+ REG3 = ((REG3 << 32) | REG3) & glm::uint64(0xFFFF00000000FFFFull);
+
+ REG1 = ((REG1 << 16) | REG1) & glm::uint64(0x00FF0000FF0000FFull);
+ REG2 = ((REG2 << 16) | REG2) & glm::uint64(0x00FF0000FF0000FFull);
+ REG3 = ((REG3 << 16) | REG3) & glm::uint64(0x00FF0000FF0000FFull);
+
+ REG1 = ((REG1 << 8) | REG1) & glm::uint64(0xF00F00F00F00F00Full);
+ REG2 = ((REG2 << 8) | REG2) & glm::uint64(0xF00F00F00F00F00Full);
+ REG3 = ((REG3 << 8) | REG3) & glm::uint64(0xF00F00F00F00F00Full);
+
+ REG1 = ((REG1 << 4) | REG1) & glm::uint64(0x30C30C30C30C30C3ull);
+ REG2 = ((REG2 << 4) | REG2) & glm::uint64(0x30C30C30C30C30C3ull);
+ REG3 = ((REG3 << 4) | REG3) & glm::uint64(0x30C30C30C30C30C3ull);
+
+ REG1 = ((REG1 << 2) | REG1) & glm::uint64(0x9249249249249249ull);
+ REG2 = ((REG2 << 2) | REG2) & glm::uint64(0x9249249249249249ull);
+ REG3 = ((REG3 << 2) | REG3) & glm::uint64(0x9249249249249249ull);
+
+ return REG1 | (REG2 << 1) | (REG3 << 2);
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER glm::uint64 bitfieldInterleave(glm::uint32 x, glm::uint32 y, glm::uint32 z)
+ {
+ glm::uint64 REG1(x);
+ glm::uint64 REG2(y);
+ glm::uint64 REG3(z);
+
+ REG1 = ((REG1 << 32) | REG1) & glm::uint64(0xFFFF00000000FFFFull);
+ REG2 = ((REG2 << 32) | REG2) & glm::uint64(0xFFFF00000000FFFFull);
+ REG3 = ((REG3 << 32) | REG3) & glm::uint64(0xFFFF00000000FFFFull);
+
+ REG1 = ((REG1 << 16) | REG1) & glm::uint64(0x00FF0000FF0000FFull);
+ REG2 = ((REG2 << 16) | REG2) & glm::uint64(0x00FF0000FF0000FFull);
+ REG3 = ((REG3 << 16) | REG3) & glm::uint64(0x00FF0000FF0000FFull);
+
+ REG1 = ((REG1 << 8) | REG1) & glm::uint64(0xF00F00F00F00F00Full);
+ REG2 = ((REG2 << 8) | REG2) & glm::uint64(0xF00F00F00F00F00Full);
+ REG3 = ((REG3 << 8) | REG3) & glm::uint64(0xF00F00F00F00F00Full);
+
+ REG1 = ((REG1 << 4) | REG1) & glm::uint64(0x30C30C30C30C30C3ull);
+ REG2 = ((REG2 << 4) | REG2) & glm::uint64(0x30C30C30C30C30C3ull);
+ REG3 = ((REG3 << 4) | REG3) & glm::uint64(0x30C30C30C30C30C3ull);
+
+ REG1 = ((REG1 << 2) | REG1) & glm::uint64(0x9249249249249249ull);
+ REG2 = ((REG2 << 2) | REG2) & glm::uint64(0x9249249249249249ull);
+ REG3 = ((REG3 << 2) | REG3) & glm::uint64(0x9249249249249249ull);
+
+ return REG1 | (REG2 << 1) | (REG3 << 2);
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER glm::uint32 bitfieldInterleave(glm::uint8 x, glm::uint8 y, glm::uint8 z, glm::uint8 w)
+ {
+ glm::uint32 REG1(x);
+ glm::uint32 REG2(y);
+ glm::uint32 REG3(z);
+ glm::uint32 REG4(w);
+
+ REG1 = ((REG1 << 12) | REG1) & glm::uint32(0x000F000F000F000F);
+ REG2 = ((REG2 << 12) | REG2) & glm::uint32(0x000F000F000F000F);
+ REG3 = ((REG3 << 12) | REG3) & glm::uint32(0x000F000F000F000F);
+ REG4 = ((REG4 << 12) | REG4) & glm::uint32(0x000F000F000F000F);
+
+ REG1 = ((REG1 << 6) | REG1) & glm::uint32(0x0303030303030303);
+ REG2 = ((REG2 << 6) | REG2) & glm::uint32(0x0303030303030303);
+ REG3 = ((REG3 << 6) | REG3) & glm::uint32(0x0303030303030303);
+ REG4 = ((REG4 << 6) | REG4) & glm::uint32(0x0303030303030303);
+
+ REG1 = ((REG1 << 3) | REG1) & glm::uint32(0x1111111111111111);
+ REG2 = ((REG2 << 3) | REG2) & glm::uint32(0x1111111111111111);
+ REG3 = ((REG3 << 3) | REG3) & glm::uint32(0x1111111111111111);
+ REG4 = ((REG4 << 3) | REG4) & glm::uint32(0x1111111111111111);
+
+ return REG1 | (REG2 << 1) | (REG3 << 2) | (REG4 << 3);
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER glm::uint64 bitfieldInterleave(glm::uint16 x, glm::uint16 y, glm::uint16 z, glm::uint16 w)
+ {
+ glm::uint64 REG1(x);
+ glm::uint64 REG2(y);
+ glm::uint64 REG3(z);
+ glm::uint64 REG4(w);
+
+ REG1 = ((REG1 << 24) | REG1) & glm::uint64(0x000000FF000000FFull);
+ REG2 = ((REG2 << 24) | REG2) & glm::uint64(0x000000FF000000FFull);
+ REG3 = ((REG3 << 24) | REG3) & glm::uint64(0x000000FF000000FFull);
+ REG4 = ((REG4 << 24) | REG4) & glm::uint64(0x000000FF000000FFull);
+
+ REG1 = ((REG1 << 12) | REG1) & glm::uint64(0x000F000F000F000Full);
+ REG2 = ((REG2 << 12) | REG2) & glm::uint64(0x000F000F000F000Full);
+ REG3 = ((REG3 << 12) | REG3) & glm::uint64(0x000F000F000F000Full);
+ REG4 = ((REG4 << 12) | REG4) & glm::uint64(0x000F000F000F000Full);
+
+ REG1 = ((REG1 << 6) | REG1) & glm::uint64(0x0303030303030303ull);
+ REG2 = ((REG2 << 6) | REG2) & glm::uint64(0x0303030303030303ull);
+ REG3 = ((REG3 << 6) | REG3) & glm::uint64(0x0303030303030303ull);
+ REG4 = ((REG4 << 6) | REG4) & glm::uint64(0x0303030303030303ull);
+
+ REG1 = ((REG1 << 3) | REG1) & glm::uint64(0x1111111111111111ull);
+ REG2 = ((REG2 << 3) | REG2) & glm::uint64(0x1111111111111111ull);
+ REG3 = ((REG3 << 3) | REG3) & glm::uint64(0x1111111111111111ull);
+ REG4 = ((REG4 << 3) | REG4) & glm::uint64(0x1111111111111111ull);
+
+ return REG1 | (REG2 << 1) | (REG3 << 2) | (REG4 << 3);
+ }
+}//namespace detail
+
+ template <typename genIUType>
+ GLM_FUNC_QUALIFIER genIUType mask(genIUType Bits)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, "'mask' accepts only integer values");
+
+ return Bits >= sizeof(genIUType) * 8 ? ~static_cast<genIUType>(0) : (static_cast<genIUType>(1) << Bits) - static_cast<genIUType>(1);
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecIUType>
+ GLM_FUNC_QUALIFIER vecIUType<T, P> mask(vecIUType<T, P> const& v)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, "'mask' accepts only integer values");
+
+ return detail::functor1<T, T, P, vecIUType>::call(mask, v);
+ }
+
+ template <typename genIType>
+ GLM_FUNC_QUALIFIER genIType bitfieldRotateRight(genIType In, int Shift)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genIType>::is_integer, "'bitfieldRotateRight' accepts only integer values");
+
+ int const BitSize = static_cast<genIType>(sizeof(genIType) * 8);
+ return (In << static_cast<genIType>(Shift)) | (In >> static_cast<genIType>(BitSize - Shift));
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> bitfieldRotateRight(vecType<T, P> const & In, int Shift)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, "'bitfieldRotateRight' accepts only integer values");
+
+ int const BitSize = static_cast<int>(sizeof(T) * 8);
+ return (In << static_cast<T>(Shift)) | (In >> static_cast<T>(BitSize - Shift));
+ }
+
+ template <typename genIType>
+ GLM_FUNC_QUALIFIER genIType bitfieldRotateLeft(genIType In, int Shift)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genIType>::is_integer, "'bitfieldRotateLeft' accepts only integer values");
+
+ int const BitSize = static_cast<genIType>(sizeof(genIType) * 8);
+ return (In >> static_cast<genIType>(Shift)) | (In << static_cast<genIType>(BitSize - Shift));
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> bitfieldRotateLeft(vecType<T, P> const& In, int Shift)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, "'bitfieldRotateLeft' accepts only integer values");
+
+ int const BitSize = static_cast<int>(sizeof(T) * 8);
+ return (In >> static_cast<T>(Shift)) | (In << static_cast<T>(BitSize - Shift));
+ }
+
+ template <typename genIUType>
+ GLM_FUNC_QUALIFIER genIUType bitfieldFillOne(genIUType Value, int FirstBit, int BitCount)
+ {
+ return Value | static_cast<genIUType>(mask(BitCount) << FirstBit);
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> bitfieldFillOne(vecType<T, P> const& Value, int FirstBit, int BitCount)
+ {
+ return Value | static_cast<T>(mask(BitCount) << FirstBit);
+ }
+
+ template <typename genIUType>
+ GLM_FUNC_QUALIFIER genIUType bitfieldFillZero(genIUType Value, int FirstBit, int BitCount)
+ {
+ return Value & static_cast<genIUType>(~(mask(BitCount) << FirstBit));
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> bitfieldFillZero(vecType<T, P> const& Value, int FirstBit, int BitCount)
+ {
+ return Value & static_cast<T>(~(mask(BitCount) << FirstBit));
+ }
+
+ GLM_FUNC_QUALIFIER int16 bitfieldInterleave(int8 x, int8 y)
+ {
+ union sign8
+ {
+ int8 i;
+ uint8 u;
+ } sign_x, sign_y;
+
+ union sign16
+ {
+ int16 i;
+ uint16 u;
+ } result;
+
+ sign_x.i = x;
+ sign_y.i = y;
+ result.u = bitfieldInterleave(sign_x.u, sign_y.u);
+
+ return result.i;
+ }
+
+ GLM_FUNC_QUALIFIER uint16 bitfieldInterleave(uint8 x, uint8 y)
+ {
+ return detail::bitfieldInterleave<uint8, uint16>(x, y);
+ }
+
+ GLM_FUNC_QUALIFIER int32 bitfieldInterleave(int16 x, int16 y)
+ {
+ union sign16
+ {
+ int16 i;
+ uint16 u;
+ } sign_x, sign_y;
+
+ union sign32
+ {
+ int32 i;
+ uint32 u;
+ } result;
+
+ sign_x.i = x;
+ sign_y.i = y;
+ result.u = bitfieldInterleave(sign_x.u, sign_y.u);
+
+ return result.i;
+ }
+
+ GLM_FUNC_QUALIFIER uint32 bitfieldInterleave(uint16 x, uint16 y)
+ {
+ return detail::bitfieldInterleave<uint16, uint32>(x, y);
+ }
+
+ GLM_FUNC_QUALIFIER int64 bitfieldInterleave(int32 x, int32 y)
+ {
+ union sign32
+ {
+ int32 i;
+ uint32 u;
+ } sign_x, sign_y;
+
+ union sign64
+ {
+ int64 i;
+ uint64 u;
+ } result;
+
+ sign_x.i = x;
+ sign_y.i = y;
+ result.u = bitfieldInterleave(sign_x.u, sign_y.u);
+
+ return result.i;
+ }
+
+ GLM_FUNC_QUALIFIER uint64 bitfieldInterleave(uint32 x, uint32 y)
+ {
+ return detail::bitfieldInterleave<uint32, uint64>(x, y);
+ }
+
+ GLM_FUNC_QUALIFIER int32 bitfieldInterleave(int8 x, int8 y, int8 z)
+ {
+ union sign8
+ {
+ int8 i;
+ uint8 u;
+ } sign_x, sign_y, sign_z;
+
+ union sign32
+ {
+ int32 i;
+ uint32 u;
+ } result;
+
+ sign_x.i = x;
+ sign_y.i = y;
+ sign_z.i = z;
+ result.u = bitfieldInterleave(sign_x.u, sign_y.u, sign_z.u);
+
+ return result.i;
+ }
+
+ GLM_FUNC_QUALIFIER uint32 bitfieldInterleave(uint8 x, uint8 y, uint8 z)
+ {
+ return detail::bitfieldInterleave<uint8, uint32>(x, y, z);
+ }
+
+ GLM_FUNC_QUALIFIER int64 bitfieldInterleave(int16 x, int16 y, int16 z)
+ {
+ union sign16
+ {
+ int16 i;
+ uint16 u;
+ } sign_x, sign_y, sign_z;
+
+ union sign64
+ {
+ int64 i;
+ uint64 u;
+ } result;
+
+ sign_x.i = x;
+ sign_y.i = y;
+ sign_z.i = z;
+ result.u = bitfieldInterleave(sign_x.u, sign_y.u, sign_z.u);
+
+ return result.i;
+ }
+
+ GLM_FUNC_QUALIFIER uint64 bitfieldInterleave(uint16 x, uint16 y, uint16 z)
+ {
+ return detail::bitfieldInterleave<uint32, uint64>(x, y, z);
+ }
+
+ GLM_FUNC_QUALIFIER int64 bitfieldInterleave(int32 x, int32 y, int32 z)
+ {
+ union sign16
+ {
+ int32 i;
+ uint32 u;
+ } sign_x, sign_y, sign_z;
+
+ union sign64
+ {
+ int64 i;
+ uint64 u;
+ } result;
+
+ sign_x.i = x;
+ sign_y.i = y;
+ sign_z.i = z;
+ result.u = bitfieldInterleave(sign_x.u, sign_y.u, sign_z.u);
+
+ return result.i;
+ }
+
+ GLM_FUNC_QUALIFIER uint64 bitfieldInterleave(uint32 x, uint32 y, uint32 z)
+ {
+ return detail::bitfieldInterleave<uint32, uint64>(x, y, z);
+ }
+
+ GLM_FUNC_QUALIFIER int32 bitfieldInterleave(int8 x, int8 y, int8 z, int8 w)
+ {
+ union sign8
+ {
+ int8 i;
+ uint8 u;
+ } sign_x, sign_y, sign_z, sign_w;
+
+ union sign32
+ {
+ int32 i;
+ uint32 u;
+ } result;
+
+ sign_x.i = x;
+ sign_y.i = y;
+ sign_z.i = z;
+ sign_w.i = w;
+ result.u = bitfieldInterleave(sign_x.u, sign_y.u, sign_z.u, sign_w.u);
+
+ return result.i;
+ }
+
+ GLM_FUNC_QUALIFIER uint32 bitfieldInterleave(uint8 x, uint8 y, uint8 z, uint8 w)
+ {
+ return detail::bitfieldInterleave<uint8, uint32>(x, y, z, w);
+ }
+
+ GLM_FUNC_QUALIFIER int64 bitfieldInterleave(int16 x, int16 y, int16 z, int16 w)
+ {
+ union sign16
+ {
+ int16 i;
+ uint16 u;
+ } sign_x, sign_y, sign_z, sign_w;
+
+ union sign64
+ {
+ int64 i;
+ uint64 u;
+ } result;
+
+ sign_x.i = x;
+ sign_y.i = y;
+ sign_z.i = z;
+ sign_w.i = w;
+ result.u = bitfieldInterleave(sign_x.u, sign_y.u, sign_z.u, sign_w.u);
+
+ return result.i;
+ }
+
+ GLM_FUNC_QUALIFIER uint64 bitfieldInterleave(uint16 x, uint16 y, uint16 z, uint16 w)
+ {
+ return detail::bitfieldInterleave<uint16, uint64>(x, y, z, w);
+ }
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtc/color_encoding.hpp b/src/third_party/glm/glm/gtc/color_encoding.hpp
new file mode 100644
index 0000000..0ff5fdc
--- /dev/null
+++ b/src/third_party/glm/glm/gtc/color_encoding.hpp
@@ -0,0 +1,50 @@
+/// @ref gtc_color_encoding
+/// @file glm/gtc/color_encoding.hpp
+///
+/// @see core (dependence)
+/// @see gtc_color_encoding (dependence)
+///
+/// @defgroup gtc_color_encoding GLM_GTC_color_encoding
+/// @ingroup gtc
+///
+/// @brief Allow to perform bit operations on integer values
+///
+/// <glm/gtc/color_encoding.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependencies
+#include "../detail/setup.hpp"
+#include "../detail/precision.hpp"
+#include "../vec3.hpp"
+#include <limits>
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTC_color_encoding extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtc_color_encoding
+ /// @{
+
+ /// Convert a linear sRGB color to D65 YUV.
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> convertLinearSRGBToD65XYZ(tvec3<T, P> const& ColorLinearSRGB);
+
+ /// Convert a D65 YUV color to linear sRGB.
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> convertD65XYZToLinearSRGB(tvec3<T, P> const& ColorD65XYZ);
+
+ /// Convert a D50 YUV color to D65 YUV.
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> convertD50XYZToD65XYZ(tvec3<T, P> const& ColorD50XYZ);
+
+ /// Convert a D65 YUV color to D50 YUV.
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> convertD65XYZToD50XYZ(tvec3<T, P> const& ColorD65XYZ);
+
+ /// @}
+} //namespace glm
+
+#include "color_encoding.inl"
diff --git a/src/third_party/glm/glm/gtc/color_encoding.inl b/src/third_party/glm/glm/gtc/color_encoding.inl
new file mode 100644
index 0000000..ca5044f
--- /dev/null
+++ b/src/third_party/glm/glm/gtc/color_encoding.inl
@@ -0,0 +1,65 @@
+/// @ref gtc_color_encoding
+/// @file glm/gtc/color_encoding.inl
+
+namespace glm
+{
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> convertLinearSRGBToD65XYZ(tvec3<T, P> const& ColorLinearSRGB)
+ {
+ tvec3<T, P> const M(0.490f, 0.17697f, 0.2f);
+ tvec3<T, P> const N(0.31f, 0.8124f, 0.01063f);
+ tvec3<T, P> const O(0.490f, 0.01f, 0.99f);
+
+ return (M * ColorLinearSRGB + N * ColorLinearSRGB + O * ColorLinearSRGB) * static_cast<T>(5.650675255693055f);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> convertD65XYZToLinearSRGB(tvec3<T, P> const& ColorD65XYZ)
+ {
+ tvec3<T, P> const M(0.41847f, -0.091169f, 0.0009209f);
+ tvec3<T, P> const N(-0.15866f, 0.25243f, 0.015708f);
+ tvec3<T, P> const O(0.0009209f, -0.0025498f, 0.1786f);
+
+ return M * ColorD65XYZ + N * ColorD65XYZ + O * ColorD65XYZ;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> convertLinearSRGBToD50XYZ(tvec3<T, P> const& ColorLinearSRGB)
+ {
+ tvec3<T, P> const M(0.436030342570117f, 0.222438466210245f, 0.013897440074263f);
+ tvec3<T, P> const N(0.385101860087134f, 0.716942745571917f, 0.097076381494207f);
+ tvec3<T, P> const O(0.143067806654203f, 0.060618777416563f, 0.713926257896652f);
+
+ return M * ColorLinearSRGB + N * ColorLinearSRGB + O * ColorLinearSRGB;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> convertD50XYZToLinearSRGB(tvec3<T, P> const& ColorD50XYZ)
+ {
+ tvec3<T, P> const M();
+ tvec3<T, P> const N();
+ tvec3<T, P> const O();
+
+ return M * ColorD50XYZ + N * ColorD50XYZ + O * ColorD50XYZ;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> convertD65XYZToD50XYZ(tvec3<T, P> const& ColorD65XYZ)
+ {
+ tvec3<T, P> const M(+1.047844353856414f, +0.029549007606644f, -0.009250984365223f);
+ tvec3<T, P> const N(+0.022898981050086f, +0.990508028941971f, +0.015072338237051f);
+ tvec3<T, P> const O(-0.050206647741605f, -0.017074711360960f, +0.751717835079977f);
+
+ return M * ColorD65XYZ + N * ColorD65XYZ + O * ColorD65XYZ;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> convertD50XYZToD65XYZ(tvec3<T, P> const& ColorD50XYZ)
+ {
+ tvec3<T, P> const M();
+ tvec3<T, P> const N();
+ tvec3<T, P> const O();
+
+ return M * ColorD50XYZ + N * ColorD50XYZ + O * ColorD50XYZ;
+ }
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtc/color_space.hpp b/src/third_party/glm/glm/gtc/color_space.hpp
new file mode 100644
index 0000000..9ae9692
--- /dev/null
+++ b/src/third_party/glm/glm/gtc/color_space.hpp
@@ -0,0 +1,56 @@
+/// @ref gtc_color_space
+/// @file glm/gtc/color_space.hpp
+///
+/// @see core (dependence)
+/// @see gtc_color_space (dependence)
+///
+/// @defgroup gtc_color_space GLM_GTC_color_space
+/// @ingroup gtc
+///
+/// @brief Allow to perform bit operations on integer values
+///
+/// <glm/gtc/color_space.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependencies
+#include "../detail/setup.hpp"
+#include "../detail/precision.hpp"
+#include "../exponential.hpp"
+#include "../vec3.hpp"
+#include "../vec4.hpp"
+#include <limits>
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTC_color_space extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtc_color_space
+ /// @{
+
+ /// Convert a linear color to sRGB color using a standard gamma correction.
+ /// IEC 61966-2-1:1999 / Rec. 709 specification https://www.w3.org/Graphics/Color/srgb
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> convertLinearToSRGB(vecType<T, P> const & ColorLinear);
+
+ /// Convert a linear color to sRGB color using a custom gamma correction.
+ /// IEC 61966-2-1:1999 / Rec. 709 specification https://www.w3.org/Graphics/Color/srgb
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> convertLinearToSRGB(vecType<T, P> const & ColorLinear, T Gamma);
+
+ /// Convert a sRGB color to linear color using a standard gamma correction.
+ /// IEC 61966-2-1:1999 / Rec. 709 specification https://www.w3.org/Graphics/Color/srgb
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> convertSRGBToLinear(vecType<T, P> const & ColorSRGB);
+
+ /// Convert a sRGB color to linear color using a custom gamma correction.
+ // IEC 61966-2-1:1999 / Rec. 709 specification https://www.w3.org/Graphics/Color/srgb
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> convertSRGBToLinear(vecType<T, P> const & ColorSRGB, T Gamma);
+
+ /// @}
+} //namespace glm
+
+#include "color_space.inl"
diff --git a/src/third_party/glm/glm/gtc/color_space.inl b/src/third_party/glm/glm/gtc/color_space.inl
new file mode 100644
index 0000000..3fe293b
--- /dev/null
+++ b/src/third_party/glm/glm/gtc/color_space.inl
@@ -0,0 +1,75 @@
+/// @ref gtc_color_space
+/// @file glm/gtc/color_space.inl
+
+namespace glm{
+namespace detail
+{
+ template <typename T, precision P, template <typename, precision> class vecType>
+ struct compute_rgbToSrgb
+ {
+ GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const& ColorRGB, T GammaCorrection)
+ {
+ vecType<T, P> const ClampedColor(clamp(ColorRGB, static_cast<T>(0), static_cast<T>(1)));
+
+ return mix(
+ pow(ClampedColor, vecType<T, P>(GammaCorrection)) * static_cast<T>(1.055) - static_cast<T>(0.055),
+ ClampedColor * static_cast<T>(12.92),
+ lessThan(ClampedColor, vecType<T, P>(static_cast<T>(0.0031308))));
+ }
+ };
+
+ template <typename T, precision P>
+ struct compute_rgbToSrgb<T, P, tvec4>
+ {
+ GLM_FUNC_QUALIFIER static tvec4<T, P> call(tvec4<T, P> const& ColorRGB, T GammaCorrection)
+ {
+ return tvec4<T, P>(compute_rgbToSrgb<T, P, tvec3>::call(tvec3<T, P>(ColorRGB), GammaCorrection), ColorRGB.a);
+ }
+ };
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ struct compute_srgbToRgb
+ {
+ GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const& ColorSRGB, T Gamma)
+ {
+ return mix(
+ pow((ColorSRGB + static_cast<T>(0.055)) * static_cast<T>(0.94786729857819905213270142180095), vecType<T, P>(Gamma)),
+ ColorSRGB * static_cast<T>(0.07739938080495356037151702786378),
+ lessThanEqual(ColorSRGB, vecType<T, P>(static_cast<T>(0.04045))));
+ }
+ };
+
+ template <typename T, precision P>
+ struct compute_srgbToRgb<T, P, tvec4>
+ {
+ GLM_FUNC_QUALIFIER static tvec4<T, P> call(tvec4<T, P> const& ColorSRGB, T Gamma)
+ {
+ return tvec4<T, P>(compute_srgbToRgb<T, P, tvec3>::call(tvec3<T, P>(ColorSRGB), Gamma), ColorSRGB.a);
+ }
+ };
+}//namespace detail
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> convertLinearToSRGB(vecType<T, P> const& ColorLinear)
+ {
+ return detail::compute_rgbToSrgb<T, P, vecType>::call(ColorLinear, static_cast<T>(0.41666));
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> convertLinearToSRGB(vecType<T, P> const& ColorLinear, T Gamma)
+ {
+ return detail::compute_rgbToSrgb<T, P, vecType>::call(ColorLinear, static_cast<T>(1) / Gamma);
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> convertSRGBToLinear(vecType<T, P> const& ColorSRGB)
+ {
+ return detail::compute_srgbToRgb<T, P, vecType>::call(ColorSRGB, static_cast<T>(2.4));
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> convertSRGBToLinear(vecType<T, P> const& ColorSRGB, T Gamma)
+ {
+ return detail::compute_srgbToRgb<T, P, vecType>::call(ColorSRGB, Gamma);
+ }
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtc/constants.hpp b/src/third_party/glm/glm/gtc/constants.hpp
new file mode 100644
index 0000000..d3358c7
--- /dev/null
+++ b/src/third_party/glm/glm/gtc/constants.hpp
@@ -0,0 +1,176 @@
+/// @ref gtc_constants
+/// @file glm/gtc/constants.hpp
+///
+/// @see core (dependence)
+/// @see gtc_half_float (dependence)
+///
+/// @defgroup gtc_constants GLM_GTC_constants
+/// @ingroup gtc
+///
+/// @brief Provide a list of constants and precomputed useful values.
+///
+/// <glm/gtc/constants.hpp> need to be included to use these features.
+
+#pragma once
+
+// Dependencies
+#include "../detail/setup.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTC_constants extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtc_constants
+ /// @{
+
+ /// Return the epsilon constant for floating point types.
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL GLM_CONSTEXPR genType epsilon();
+
+ /// Return 0.
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL GLM_CONSTEXPR genType zero();
+
+ /// Return 1.
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL GLM_CONSTEXPR genType one();
+
+ /// Return the pi constant.
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL GLM_CONSTEXPR genType pi();
+
+ /// Return pi * 2.
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL GLM_CONSTEXPR genType two_pi();
+
+ /// Return square root of pi.
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL GLM_CONSTEXPR genType root_pi();
+
+ /// Return pi / 2.
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL GLM_CONSTEXPR genType half_pi();
+
+ /// Return pi / 2 * 3.
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL GLM_CONSTEXPR genType three_over_two_pi();
+
+ /// Return pi / 4.
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL GLM_CONSTEXPR genType quarter_pi();
+
+ /// Return 1 / pi.
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL GLM_CONSTEXPR genType one_over_pi();
+
+ /// Return 1 / (pi * 2).
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL GLM_CONSTEXPR genType one_over_two_pi();
+
+ /// Return 2 / pi.
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL GLM_CONSTEXPR genType two_over_pi();
+
+ /// Return 4 / pi.
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL GLM_CONSTEXPR genType four_over_pi();
+
+ /// Return 2 / sqrt(pi).
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL GLM_CONSTEXPR genType two_over_root_pi();
+
+ /// Return 1 / sqrt(2).
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL GLM_CONSTEXPR genType one_over_root_two();
+
+ /// Return sqrt(pi / 2).
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL GLM_CONSTEXPR genType root_half_pi();
+
+ /// Return sqrt(2 * pi).
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL GLM_CONSTEXPR genType root_two_pi();
+
+ /// Return sqrt(ln(4)).
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL GLM_CONSTEXPR genType root_ln_four();
+
+ /// Return e constant.
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL GLM_CONSTEXPR genType e();
+
+ /// Return Euler's constant.
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL GLM_CONSTEXPR genType euler();
+
+ /// Return sqrt(2).
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL GLM_CONSTEXPR genType root_two();
+
+ /// Return sqrt(3).
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL GLM_CONSTEXPR genType root_three();
+
+ /// Return sqrt(5).
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL GLM_CONSTEXPR genType root_five();
+
+ /// Return ln(2).
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL GLM_CONSTEXPR genType ln_two();
+
+ /// Return ln(10).
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL GLM_CONSTEXPR genType ln_ten();
+
+ /// Return ln(ln(2)).
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL GLM_CONSTEXPR genType ln_ln_two();
+
+ /// Return 1 / 3.
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL GLM_CONSTEXPR genType third();
+
+ /// Return 2 / 3.
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL GLM_CONSTEXPR genType two_thirds();
+
+ /// Return the golden ratio constant.
+ /// @see gtc_constants
+ template <typename genType>
+ GLM_FUNC_DECL GLM_CONSTEXPR genType golden_ratio();
+
+ /// @}
+} //namespace glm
+
+#include "constants.inl"
diff --git a/src/third_party/glm/glm/gtc/constants.inl b/src/third_party/glm/glm/gtc/constants.inl
new file mode 100644
index 0000000..cb451d0
--- /dev/null
+++ b/src/third_party/glm/glm/gtc/constants.inl
@@ -0,0 +1,181 @@
+/// @ref gtc_constants
+/// @file glm/gtc/constants.inl
+
+#include <limits>
+
+namespace glm
+{
+ template <typename genType>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType epsilon()
+ {
+ return std::numeric_limits<genType>::epsilon();
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType zero()
+ {
+ return genType(0);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType one()
+ {
+ return genType(1);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType pi()
+ {
+ return genType(3.14159265358979323846264338327950288);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType two_pi()
+ {
+ return genType(6.28318530717958647692528676655900576);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_pi()
+ {
+ return genType(1.772453850905516027);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType half_pi()
+ {
+ return genType(1.57079632679489661923132169163975144);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType three_over_two_pi()
+ {
+ return genType(4.71238898038468985769396507491925432);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType quarter_pi()
+ {
+ return genType(0.785398163397448309615660845819875721);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType one_over_pi()
+ {
+ return genType(0.318309886183790671537767526745028724);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType one_over_two_pi()
+ {
+ return genType(0.159154943091895335768883763372514362);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType two_over_pi()
+ {
+ return genType(0.636619772367581343075535053490057448);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType four_over_pi()
+ {
+ return genType(1.273239544735162686151070106980114898);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType two_over_root_pi()
+ {
+ return genType(1.12837916709551257389615890312154517);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType one_over_root_two()
+ {
+ return genType(0.707106781186547524400844362104849039);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_half_pi()
+ {
+ return genType(1.253314137315500251);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_two_pi()
+ {
+ return genType(2.506628274631000502);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_ln_four()
+ {
+ return genType(1.17741002251547469);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType e()
+ {
+ return genType(2.71828182845904523536);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType euler()
+ {
+ return genType(0.577215664901532860606);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_two()
+ {
+ return genType(1.41421356237309504880168872420969808);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_three()
+ {
+ return genType(1.73205080756887729352744634150587236);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_five()
+ {
+ return genType(2.23606797749978969640917366873127623);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType ln_two()
+ {
+ return genType(0.693147180559945309417232121458176568);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType ln_ten()
+ {
+ return genType(2.30258509299404568401799145468436421);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType ln_ln_two()
+ {
+ return genType(-0.3665129205816643);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType third()
+ {
+ return genType(0.3333333333333333333333333333333333333333);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType two_thirds()
+ {
+ return genType(0.666666666666666666666666666666666666667);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType golden_ratio()
+ {
+ return genType(1.61803398874989484820458683436563811);
+ }
+} //namespace glm
diff --git a/src/third_party/glm/glm/gtc/epsilon.hpp b/src/third_party/glm/glm/gtc/epsilon.hpp
new file mode 100644
index 0000000..289f5b7
--- /dev/null
+++ b/src/third_party/glm/glm/gtc/epsilon.hpp
@@ -0,0 +1,73 @@
+/// @ref gtc_epsilon
+/// @file glm/gtc/epsilon.hpp
+///
+/// @see core (dependence)
+/// @see gtc_half_float (dependence)
+/// @see gtc_quaternion (dependence)
+///
+/// @defgroup gtc_epsilon GLM_GTC_epsilon
+/// @ingroup gtc
+///
+/// @brief Comparison functions for a user defined epsilon values.
+///
+/// <glm/gtc/epsilon.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependencies
+#include "../detail/setup.hpp"
+#include "../detail/precision.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTC_epsilon extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtc_epsilon
+ /// @{
+
+ /// Returns the component-wise comparison of |x - y| < epsilon.
+ /// True if this expression is satisfied.
+ ///
+ /// @see gtc_epsilon
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<bool, P> epsilonEqual(
+ vecType<T, P> const & x,
+ vecType<T, P> const & y,
+ T const & epsilon);
+
+ /// Returns the component-wise comparison of |x - y| < epsilon.
+ /// True if this expression is satisfied.
+ ///
+ /// @see gtc_epsilon
+ template <typename genType>
+ GLM_FUNC_DECL bool epsilonEqual(
+ genType const & x,
+ genType const & y,
+ genType const & epsilon);
+
+ /// Returns the component-wise comparison of |x - y| < epsilon.
+ /// True if this expression is not satisfied.
+ ///
+ /// @see gtc_epsilon
+ template <typename genType>
+ GLM_FUNC_DECL typename genType::boolType epsilonNotEqual(
+ genType const & x,
+ genType const & y,
+ typename genType::value_type const & epsilon);
+
+ /// Returns the component-wise comparison of |x - y| >= epsilon.
+ /// True if this expression is not satisfied.
+ ///
+ /// @see gtc_epsilon
+ template <typename genType>
+ GLM_FUNC_DECL bool epsilonNotEqual(
+ genType const & x,
+ genType const & y,
+ genType const & epsilon);
+
+ /// @}
+}//namespace glm
+
+#include "epsilon.inl"
diff --git a/src/third_party/glm/glm/gtc/epsilon.inl b/src/third_party/glm/glm/gtc/epsilon.inl
new file mode 100644
index 0000000..b5577d9
--- /dev/null
+++ b/src/third_party/glm/glm/gtc/epsilon.inl
@@ -0,0 +1,125 @@
+/// @ref gtc_epsilon
+/// @file glm/gtc/epsilon.inl
+
+// Dependency:
+#include "quaternion.hpp"
+#include "../vector_relational.hpp"
+#include "../common.hpp"
+#include "../vec2.hpp"
+#include "../vec3.hpp"
+#include "../vec4.hpp"
+
+namespace glm
+{
+ template <>
+ GLM_FUNC_QUALIFIER bool epsilonEqual
+ (
+ float const & x,
+ float const & y,
+ float const & epsilon
+ )
+ {
+ return abs(x - y) < epsilon;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER bool epsilonEqual
+ (
+ double const & x,
+ double const & y,
+ double const & epsilon
+ )
+ {
+ return abs(x - y) < epsilon;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER bool epsilonNotEqual
+ (
+ float const & x,
+ float const & y,
+ float const & epsilon
+ )
+ {
+ return abs(x - y) >= epsilon;
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER bool epsilonNotEqual
+ (
+ double const & x,
+ double const & y,
+ double const & epsilon
+ )
+ {
+ return abs(x - y) >= epsilon;
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<bool, P> epsilonEqual
+ (
+ vecType<T, P> const & x,
+ vecType<T, P> const & y,
+ T const & epsilon
+ )
+ {
+ return lessThan(abs(x - y), vecType<T, P>(epsilon));
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<bool, P> epsilonEqual
+ (
+ vecType<T, P> const & x,
+ vecType<T, P> const & y,
+ vecType<T, P> const & epsilon
+ )
+ {
+ return lessThan(abs(x - y), vecType<T, P>(epsilon));
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<bool, P> epsilonNotEqual
+ (
+ vecType<T, P> const & x,
+ vecType<T, P> const & y,
+ T const & epsilon
+ )
+ {
+ return greaterThanEqual(abs(x - y), vecType<T, P>(epsilon));
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<bool, P> epsilonNotEqual
+ (
+ vecType<T, P> const & x,
+ vecType<T, P> const & y,
+ vecType<T, P> const & epsilon
+ )
+ {
+ return greaterThanEqual(abs(x - y), vecType<T, P>(epsilon));
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<bool, P> epsilonEqual
+ (
+ tquat<T, P> const & x,
+ tquat<T, P> const & y,
+ T const & epsilon
+ )
+ {
+ tvec4<T, P> v(x.x - y.x, x.y - y.y, x.z - y.z, x.w - y.w);
+ return lessThan(abs(v), tvec4<T, P>(epsilon));
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<bool, P> epsilonNotEqual
+ (
+ tquat<T, P> const & x,
+ tquat<T, P> const & y,
+ T const & epsilon
+ )
+ {
+ tvec4<T, P> v(x.x - y.x, x.y - y.y, x.z - y.z, x.w - y.w);
+ return greaterThanEqual(abs(v), tvec4<T, P>(epsilon));
+ }
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtc/functions.hpp b/src/third_party/glm/glm/gtc/functions.hpp
new file mode 100644
index 0000000..ab1590b
--- /dev/null
+++ b/src/third_party/glm/glm/gtc/functions.hpp
@@ -0,0 +1,53 @@
+/// @ref gtc_functions
+/// @file glm/gtc/functions.hpp
+///
+/// @see core (dependence)
+/// @see gtc_half_float (dependence)
+/// @see gtc_quaternion (dependence)
+///
+/// @defgroup gtc_functions GLM_GTC_functions
+/// @ingroup gtc
+///
+/// @brief List of useful common functions.
+///
+/// <glm/gtc/functions.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependencies
+#include "../detail/setup.hpp"
+#include "../detail/precision.hpp"
+#include "../detail/type_vec2.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTC_functions extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtc_functions
+ /// @{
+
+ /// 1D gauss function
+ ///
+ /// @see gtc_epsilon
+ template <typename T>
+ GLM_FUNC_DECL T gauss(
+ T x,
+ T ExpectedValue,
+ T StandardDeviation);
+
+ /// 2D gauss function
+ ///
+ /// @see gtc_epsilon
+ template <typename T, precision P>
+ GLM_FUNC_DECL T gauss(
+ tvec2<T, P> const& Coord,
+ tvec2<T, P> const& ExpectedValue,
+ tvec2<T, P> const& StandardDeviation);
+
+ /// @}
+}//namespace glm
+
+#include "functions.inl"
+
diff --git a/src/third_party/glm/glm/gtc/functions.inl b/src/third_party/glm/glm/gtc/functions.inl
new file mode 100644
index 0000000..1dbc496
--- /dev/null
+++ b/src/third_party/glm/glm/gtc/functions.inl
@@ -0,0 +1,31 @@
+/// @ref gtc_functions
+/// @file glm/gtc/functions.inl
+
+#include "../detail/func_exponential.hpp"
+
+namespace glm
+{
+ template <typename T>
+ GLM_FUNC_QUALIFIER T gauss
+ (
+ T x,
+ T ExpectedValue,
+ T StandardDeviation
+ )
+ {
+ return exp(-((x - ExpectedValue) * (x - ExpectedValue)) / (static_cast<T>(2) * StandardDeviation * StandardDeviation)) / (StandardDeviation * sqrt(static_cast<T>(6.28318530717958647692528676655900576)));
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER T gauss
+ (
+ tvec2<T, P> const& Coord,
+ tvec2<T, P> const& ExpectedValue,
+ tvec2<T, P> const& StandardDeviation
+ )
+ {
+ tvec2<T, P> const Squared = ((Coord - ExpectedValue) * (Coord - ExpectedValue)) / (static_cast<T>(2) * StandardDeviation * StandardDeviation);
+ return exp(-(Squared.x + Squared.y));
+ }
+}//namespace glm
+
diff --git a/src/third_party/glm/glm/gtc/integer.hpp b/src/third_party/glm/glm/gtc/integer.hpp
new file mode 100644
index 0000000..69ffb1d
--- /dev/null
+++ b/src/third_party/glm/glm/gtc/integer.hpp
@@ -0,0 +1,102 @@
+/// @ref gtc_integer
+/// @file glm/gtc/integer.hpp
+///
+/// @see core (dependence)
+/// @see gtc_integer (dependence)
+///
+/// @defgroup gtc_integer GLM_GTC_integer
+/// @ingroup gtc
+///
+/// @brief Allow to perform bit operations on integer values
+///
+/// <glm/gtc/integer.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependencies
+#include "../detail/setup.hpp"
+#include "../detail/precision.hpp"
+#include "../detail/func_common.hpp"
+#include "../detail/func_integer.hpp"
+#include "../detail/func_exponential.hpp"
+#include <limits>
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTC_integer extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtc_integer
+ /// @{
+
+ /// Returns the log2 of x for integer values. Can be reliably using to compute mipmap count from the texture size.
+ /// @see gtc_integer
+ template <typename genIUType>
+ GLM_FUNC_DECL genIUType log2(genIUType x);
+
+ /// Modulus. Returns x % y
+ /// for each component in x using the floating point value y.
+ ///
+ /// @tparam genIUType Integer-point scalar or vector types.
+ ///
+ /// @see gtc_integer
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/mod.xml">GLSL mod man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <typename genIUType>
+ GLM_FUNC_DECL genIUType mod(genIUType x, genIUType y);
+
+ /// Modulus. Returns x % y
+ /// for each component in x using the floating point value y.
+ ///
+ /// @tparam T Integer scalar types.
+ /// @tparam vecType vector types.
+ ///
+ /// @see gtc_integer
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/mod.xml">GLSL mod man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> mod(vecType<T, P> const & x, T y);
+
+ /// Modulus. Returns x % y
+ /// for each component in x using the floating point value y.
+ ///
+ /// @tparam T Integer scalar types.
+ /// @tparam vecType vector types.
+ ///
+ /// @see gtc_integer
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/mod.xml">GLSL mod man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> mod(vecType<T, P> const & x, vecType<T, P> const & y);
+
+ /// Returns a value equal to the nearest integer to x.
+ /// The fraction 0.5 will round in a direction chosen by the
+ /// implementation, presumably the direction that is fastest.
+ ///
+ /// @param x The values of the argument must be greater or equal to zero.
+ /// @tparam T floating point scalar types.
+ /// @tparam vecType vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/round.xml">GLSL round man page</a>
+ /// @see gtc_integer
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<int, P> iround(vecType<T, P> const & x);
+
+ /// Returns a value equal to the nearest integer to x.
+ /// The fraction 0.5 will round in a direction chosen by the
+ /// implementation, presumably the direction that is fastest.
+ ///
+ /// @param x The values of the argument must be greater or equal to zero.
+ /// @tparam T floating point scalar types.
+ /// @tparam vecType vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/round.xml">GLSL round man page</a>
+ /// @see gtc_integer
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<uint, P> uround(vecType<T, P> const & x);
+
+ /// @}
+} //namespace glm
+
+#include "integer.inl"
diff --git a/src/third_party/glm/glm/gtc/integer.inl b/src/third_party/glm/glm/gtc/integer.inl
new file mode 100644
index 0000000..7ce2918
--- /dev/null
+++ b/src/third_party/glm/glm/gtc/integer.inl
@@ -0,0 +1,71 @@
+/// @ref gtc_integer
+/// @file glm/gtc/integer.inl
+
+namespace glm{
+namespace detail
+{
+ template <typename T, precision P, template <typename, precision> class vecType, bool Aligned>
+ struct compute_log2<T, P, vecType, false, Aligned>
+ {
+ GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & vec)
+ {
+ //Equivalent to return findMSB(vec); but save one function call in ASM with VC
+ //return findMSB(vec);
+ return vecType<T, P>(detail::compute_findMSB_vec<T, P, vecType, sizeof(T) * 8>::call(vec));
+ }
+ };
+
+# if GLM_HAS_BITSCAN_WINDOWS
+ template <precision P, bool Aligned>
+ struct compute_log2<int, P, tvec4, false, Aligned>
+ {
+ GLM_FUNC_QUALIFIER static tvec4<int, P> call(tvec4<int, P> const & vec)
+ {
+ tvec4<int, P> Result(glm::uninitialize);
+
+ _BitScanReverse(reinterpret_cast<unsigned long*>(&Result.x), vec.x);
+ _BitScanReverse(reinterpret_cast<unsigned long*>(&Result.y), vec.y);
+ _BitScanReverse(reinterpret_cast<unsigned long*>(&Result.z), vec.z);
+ _BitScanReverse(reinterpret_cast<unsigned long*>(&Result.w), vec.w);
+
+ return Result;
+ }
+ };
+# endif//GLM_HAS_BITSCAN_WINDOWS
+}//namespace detail
+ template <typename genType>
+ GLM_FUNC_QUALIFIER int iround(genType x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'iround' only accept floating-point inputs");
+ assert(static_cast<genType>(0.0) <= x);
+
+ return static_cast<int>(x + static_cast<genType>(0.5));
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<int, P> iround(vecType<T, P> const& x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'iround' only accept floating-point inputs");
+ assert(all(lessThanEqual(vecType<T, P>(0), x)));
+
+ return vecType<int, P>(x + static_cast<T>(0.5));
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER uint uround(genType x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'uround' only accept floating-point inputs");
+ assert(static_cast<genType>(0.0) <= x);
+
+ return static_cast<uint>(x + static_cast<genType>(0.5));
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<uint, P> uround(vecType<T, P> const& x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'uround' only accept floating-point inputs");
+ assert(all(lessThanEqual(vecType<T, P>(0), x)));
+
+ return vecType<uint, P>(x + static_cast<T>(0.5));
+ }
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtc/matrix_access.hpp b/src/third_party/glm/glm/gtc/matrix_access.hpp
new file mode 100644
index 0000000..e4156ef
--- /dev/null
+++ b/src/third_party/glm/glm/gtc/matrix_access.hpp
@@ -0,0 +1,59 @@
+/// @ref gtc_matrix_access
+/// @file glm/gtc/matrix_access.hpp
+///
+/// @see core (dependence)
+///
+/// @defgroup gtc_matrix_access GLM_GTC_matrix_access
+/// @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.
+
+#pragma once
+
+// Dependency:
+#include "../detail/setup.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTC_matrix_access extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtc_matrix_access
+ /// @{
+
+ /// Get a specific row of a matrix.
+ /// @see gtc_matrix_access
+ template <typename genType>
+ GLM_FUNC_DECL typename genType::row_type row(
+ genType const & m,
+ length_t index);
+
+ /// Set a specific row to a matrix.
+ /// @see gtc_matrix_access
+ template <typename genType>
+ GLM_FUNC_DECL genType row(
+ genType const & m,
+ length_t index,
+ typename genType::row_type const & x);
+
+ /// Get a specific column of a matrix.
+ /// @see gtc_matrix_access
+ template <typename genType>
+ GLM_FUNC_DECL typename genType::col_type column(
+ genType const & m,
+ length_t index);
+
+ /// Set a specific column to a matrix.
+ /// @see gtc_matrix_access
+ template <typename genType>
+ GLM_FUNC_DECL genType column(
+ genType const & m,
+ length_t index,
+ typename genType::col_type const & x);
+
+ /// @}
+}//namespace glm
+
+#include "matrix_access.inl"
diff --git a/src/third_party/glm/glm/gtc/matrix_access.inl b/src/third_party/glm/glm/gtc/matrix_access.inl
new file mode 100644
index 0000000..831b940
--- /dev/null
+++ b/src/third_party/glm/glm/gtc/matrix_access.inl
@@ -0,0 +1,63 @@
+/// @ref gtc_matrix_access
+/// @file glm/gtc/matrix_access.inl
+
+namespace glm
+{
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType row
+ (
+ genType const & m,
+ length_t index,
+ typename genType::row_type const & x
+ )
+ {
+ assert(index >= 0 && index < m[0].length());
+
+ genType Result = m;
+ for(length_t i = 0; i < m.length(); ++i)
+ Result[i][index] = x[i];
+ return Result;
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER typename genType::row_type row
+ (
+ genType const & m,
+ length_t index
+ )
+ {
+ assert(index >= 0 && index < m[0].length());
+
+ typename genType::row_type Result;
+ for(length_t i = 0; i < m.length(); ++i)
+ Result[i] = m[i][index];
+ return Result;
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType column
+ (
+ genType const & m,
+ length_t index,
+ typename genType::col_type const & x
+ )
+ {
+ assert(index >= 0 && index < m.length());
+
+ genType Result = m;
+ Result[index] = x;
+ return Result;
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER typename genType::col_type column
+ (
+ genType const & m,
+ length_t index
+ )
+ {
+ assert(index >= 0 && index < m.length());
+
+ return m[index];
+ }
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtc/matrix_integer.hpp b/src/third_party/glm/glm/gtc/matrix_integer.hpp
new file mode 100644
index 0000000..fdc816d
--- /dev/null
+++ b/src/third_party/glm/glm/gtc/matrix_integer.hpp
@@ -0,0 +1,486 @@
+/// @ref gtc_matrix_integer
+/// @file glm/gtc/matrix_integer.hpp
+///
+/// @see core (dependence)
+///
+/// @defgroup gtc_matrix_integer GLM_GTC_matrix_integer
+/// @ingroup gtc
+///
+/// Defines a number of matrices with integer types.
+/// <glm/gtc/matrix_integer.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependency:
+#include "../mat2x2.hpp"
+#include "../mat2x3.hpp"
+#include "../mat2x4.hpp"
+#include "../mat3x2.hpp"
+#include "../mat3x3.hpp"
+#include "../mat3x4.hpp"
+#include "../mat4x2.hpp"
+#include "../mat4x3.hpp"
+#include "../mat4x4.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTC_matrix_integer extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtc_matrix_integer
+ /// @{
+
+ /// High-precision signed integer 2x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat2x2<int, highp> highp_imat2;
+
+ /// High-precision signed integer 3x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat3x3<int, highp> highp_imat3;
+
+ /// High-precision signed integer 4x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat4x4<int, highp> highp_imat4;
+
+ /// High-precision signed integer 2x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat2x2<int, highp> highp_imat2x2;
+
+ /// High-precision signed integer 2x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat2x3<int, highp> highp_imat2x3;
+
+ /// High-precision signed integer 2x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat2x4<int, highp> highp_imat2x4;
+
+ /// High-precision signed integer 3x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat3x2<int, highp> highp_imat3x2;
+
+ /// High-precision signed integer 3x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat3x3<int, highp> highp_imat3x3;
+
+ /// High-precision signed integer 3x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat3x4<int, highp> highp_imat3x4;
+
+ /// High-precision signed integer 4x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat4x2<int, highp> highp_imat4x2;
+
+ /// High-precision signed integer 4x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat4x3<int, highp> highp_imat4x3;
+
+ /// High-precision signed integer 4x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat4x4<int, highp> highp_imat4x4;
+
+
+ /// Medium-precision signed integer 2x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat2x2<int, mediump> mediump_imat2;
+
+ /// Medium-precision signed integer 3x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat3x3<int, mediump> mediump_imat3;
+
+ /// Medium-precision signed integer 4x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat4x4<int, mediump> mediump_imat4;
+
+
+ /// Medium-precision signed integer 2x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat2x2<int, mediump> mediump_imat2x2;
+
+ /// Medium-precision signed integer 2x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat2x3<int, mediump> mediump_imat2x3;
+
+ /// Medium-precision signed integer 2x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat2x4<int, mediump> mediump_imat2x4;
+
+ /// Medium-precision signed integer 3x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat3x2<int, mediump> mediump_imat3x2;
+
+ /// Medium-precision signed integer 3x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat3x3<int, mediump> mediump_imat3x3;
+
+ /// Medium-precision signed integer 3x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat3x4<int, mediump> mediump_imat3x4;
+
+ /// Medium-precision signed integer 4x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat4x2<int, mediump> mediump_imat4x2;
+
+ /// Medium-precision signed integer 4x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat4x3<int, mediump> mediump_imat4x3;
+
+ /// Medium-precision signed integer 4x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat4x4<int, mediump> mediump_imat4x4;
+
+
+ /// Low-precision signed integer 2x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat2x2<int, lowp> lowp_imat2;
+
+ /// Low-precision signed integer 3x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat3x3<int, lowp> lowp_imat3;
+
+ /// Low-precision signed integer 4x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat4x4<int, lowp> lowp_imat4;
+
+
+ /// Low-precision signed integer 2x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat2x2<int, lowp> lowp_imat2x2;
+
+ /// Low-precision signed integer 2x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat2x3<int, lowp> lowp_imat2x3;
+
+ /// Low-precision signed integer 2x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat2x4<int, lowp> lowp_imat2x4;
+
+ /// Low-precision signed integer 3x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat3x2<int, lowp> lowp_imat3x2;
+
+ /// Low-precision signed integer 3x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat3x3<int, lowp> lowp_imat3x3;
+
+ /// Low-precision signed integer 3x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat3x4<int, lowp> lowp_imat3x4;
+
+ /// Low-precision signed integer 4x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat4x2<int, lowp> lowp_imat4x2;
+
+ /// Low-precision signed integer 4x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat4x3<int, lowp> lowp_imat4x3;
+
+ /// Low-precision signed integer 4x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat4x4<int, lowp> lowp_imat4x4;
+
+
+ /// High-precision unsigned integer 2x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat2x2<uint, highp> highp_umat2;
+
+ /// High-precision unsigned integer 3x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat3x3<uint, highp> highp_umat3;
+
+ /// High-precision unsigned integer 4x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat4x4<uint, highp> highp_umat4;
+
+ /// High-precision unsigned integer 2x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat2x2<uint, highp> highp_umat2x2;
+
+ /// High-precision unsigned integer 2x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat2x3<uint, highp> highp_umat2x3;
+
+ /// High-precision unsigned integer 2x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat2x4<uint, highp> highp_umat2x4;
+
+ /// High-precision unsigned integer 3x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat3x2<uint, highp> highp_umat3x2;
+
+ /// High-precision unsigned integer 3x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat3x3<uint, highp> highp_umat3x3;
+
+ /// High-precision unsigned integer 3x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat3x4<uint, highp> highp_umat3x4;
+
+ /// High-precision unsigned integer 4x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat4x2<uint, highp> highp_umat4x2;
+
+ /// High-precision unsigned integer 4x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat4x3<uint, highp> highp_umat4x3;
+
+ /// High-precision unsigned integer 4x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat4x4<uint, highp> highp_umat4x4;
+
+
+ /// Medium-precision unsigned integer 2x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat2x2<uint, mediump> mediump_umat2;
+
+ /// Medium-precision unsigned integer 3x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat3x3<uint, mediump> mediump_umat3;
+
+ /// Medium-precision unsigned integer 4x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat4x4<uint, mediump> mediump_umat4;
+
+
+ /// Medium-precision unsigned integer 2x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat2x2<uint, mediump> mediump_umat2x2;
+
+ /// Medium-precision unsigned integer 2x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat2x3<uint, mediump> mediump_umat2x3;
+
+ /// Medium-precision unsigned integer 2x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat2x4<uint, mediump> mediump_umat2x4;
+
+ /// Medium-precision unsigned integer 3x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat3x2<uint, mediump> mediump_umat3x2;
+
+ /// Medium-precision unsigned integer 3x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat3x3<uint, mediump> mediump_umat3x3;
+
+ /// Medium-precision unsigned integer 3x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat3x4<uint, mediump> mediump_umat3x4;
+
+ /// Medium-precision unsigned integer 4x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat4x2<uint, mediump> mediump_umat4x2;
+
+ /// Medium-precision unsigned integer 4x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat4x3<uint, mediump> mediump_umat4x3;
+
+ /// Medium-precision unsigned integer 4x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat4x4<uint, mediump> mediump_umat4x4;
+
+
+ /// Low-precision unsigned integer 2x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat2x2<uint, lowp> lowp_umat2;
+
+ /// Low-precision unsigned integer 3x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat3x3<uint, lowp> lowp_umat3;
+
+ /// Low-precision unsigned integer 4x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat4x4<uint, lowp> lowp_umat4;
+
+
+ /// Low-precision unsigned integer 2x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat2x2<uint, lowp> lowp_umat2x2;
+
+ /// Low-precision unsigned integer 2x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat2x3<uint, lowp> lowp_umat2x3;
+
+ /// Low-precision unsigned integer 2x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat2x4<uint, lowp> lowp_umat2x4;
+
+ /// Low-precision unsigned integer 3x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat3x2<uint, lowp> lowp_umat3x2;
+
+ /// Low-precision unsigned integer 3x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat3x3<uint, lowp> lowp_umat3x3;
+
+ /// Low-precision unsigned integer 3x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat3x4<uint, lowp> lowp_umat3x4;
+
+ /// Low-precision unsigned integer 4x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat4x2<uint, lowp> lowp_umat4x2;
+
+ /// Low-precision unsigned integer 4x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat4x3<uint, lowp> lowp_umat4x3;
+
+ /// Low-precision unsigned integer 4x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef tmat4x4<uint, lowp> lowp_umat4x4;
+
+#if(defined(GLM_PRECISION_HIGHP_INT))
+ typedef highp_imat2 imat2;
+ typedef highp_imat3 imat3;
+ typedef highp_imat4 imat4;
+ typedef highp_imat2x2 imat2x2;
+ typedef highp_imat2x3 imat2x3;
+ typedef highp_imat2x4 imat2x4;
+ typedef highp_imat3x2 imat3x2;
+ typedef highp_imat3x3 imat3x3;
+ typedef highp_imat3x4 imat3x4;
+ typedef highp_imat4x2 imat4x2;
+ typedef highp_imat4x3 imat4x3;
+ typedef highp_imat4x4 imat4x4;
+#elif(defined(GLM_PRECISION_LOWP_INT))
+ typedef lowp_imat2 imat2;
+ typedef lowp_imat3 imat3;
+ typedef lowp_imat4 imat4;
+ typedef lowp_imat2x2 imat2x2;
+ typedef lowp_imat2x3 imat2x3;
+ typedef lowp_imat2x4 imat2x4;
+ typedef lowp_imat3x2 imat3x2;
+ typedef lowp_imat3x3 imat3x3;
+ typedef lowp_imat3x4 imat3x4;
+ typedef lowp_imat4x2 imat4x2;
+ typedef lowp_imat4x3 imat4x3;
+ typedef lowp_imat4x4 imat4x4;
+#else //if(defined(GLM_PRECISION_MEDIUMP_INT))
+
+ /// Signed integer 2x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef mediump_imat2 imat2;
+
+ /// Signed integer 3x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef mediump_imat3 imat3;
+
+ /// Signed integer 4x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef mediump_imat4 imat4;
+
+ /// Signed integer 2x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef mediump_imat2x2 imat2x2;
+
+ /// Signed integer 2x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef mediump_imat2x3 imat2x3;
+
+ /// Signed integer 2x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef mediump_imat2x4 imat2x4;
+
+ /// Signed integer 3x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef mediump_imat3x2 imat3x2;
+
+ /// Signed integer 3x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef mediump_imat3x3 imat3x3;
+
+ /// Signed integer 3x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef mediump_imat3x4 imat3x4;
+
+ /// Signed integer 4x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef mediump_imat4x2 imat4x2;
+
+ /// Signed integer 4x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef mediump_imat4x3 imat4x3;
+
+ /// Signed integer 4x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef mediump_imat4x4 imat4x4;
+#endif//GLM_PRECISION
+
+#if(defined(GLM_PRECISION_HIGHP_UINT))
+ typedef highp_umat2 umat2;
+ typedef highp_umat3 umat3;
+ typedef highp_umat4 umat4;
+ typedef highp_umat2x2 umat2x2;
+ typedef highp_umat2x3 umat2x3;
+ typedef highp_umat2x4 umat2x4;
+ typedef highp_umat3x2 umat3x2;
+ typedef highp_umat3x3 umat3x3;
+ typedef highp_umat3x4 umat3x4;
+ typedef highp_umat4x2 umat4x2;
+ typedef highp_umat4x3 umat4x3;
+ typedef highp_umat4x4 umat4x4;
+#elif(defined(GLM_PRECISION_LOWP_UINT))
+ typedef lowp_umat2 umat2;
+ typedef lowp_umat3 umat3;
+ typedef lowp_umat4 umat4;
+ typedef lowp_umat2x2 umat2x2;
+ typedef lowp_umat2x3 umat2x3;
+ typedef lowp_umat2x4 umat2x4;
+ typedef lowp_umat3x2 umat3x2;
+ typedef lowp_umat3x3 umat3x3;
+ typedef lowp_umat3x4 umat3x4;
+ typedef lowp_umat4x2 umat4x2;
+ typedef lowp_umat4x3 umat4x3;
+ typedef lowp_umat4x4 umat4x4;
+#else //if(defined(GLM_PRECISION_MEDIUMP_UINT))
+
+ /// Unsigned integer 2x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef mediump_umat2 umat2;
+
+ /// Unsigned integer 3x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef mediump_umat3 umat3;
+
+ /// Unsigned integer 4x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef mediump_umat4 umat4;
+
+ /// Unsigned integer 2x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef mediump_umat2x2 umat2x2;
+
+ /// Unsigned integer 2x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef mediump_umat2x3 umat2x3;
+
+ /// Unsigned integer 2x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef mediump_umat2x4 umat2x4;
+
+ /// Unsigned integer 3x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef mediump_umat3x2 umat3x2;
+
+ /// Unsigned integer 3x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef mediump_umat3x3 umat3x3;
+
+ /// Unsigned integer 3x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef mediump_umat3x4 umat3x4;
+
+ /// Unsigned integer 4x2 matrix.
+ /// @see gtc_matrix_integer
+ typedef mediump_umat4x2 umat4x2;
+
+ /// Unsigned integer 4x3 matrix.
+ /// @see gtc_matrix_integer
+ typedef mediump_umat4x3 umat4x3;
+
+ /// Unsigned integer 4x4 matrix.
+ /// @see gtc_matrix_integer
+ typedef mediump_umat4x4 umat4x4;
+#endif//GLM_PRECISION
+
+ /// @}
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtc/matrix_inverse.hpp b/src/third_party/glm/glm/gtc/matrix_inverse.hpp
new file mode 100644
index 0000000..589381d
--- /dev/null
+++ b/src/third_party/glm/glm/gtc/matrix_inverse.hpp
@@ -0,0 +1,49 @@
+/// @ref gtc_matrix_inverse
+/// @file glm/gtc/matrix_inverse.hpp
+///
+/// @see core (dependence)
+///
+/// @defgroup gtc_matrix_inverse GLM_GTC_matrix_inverse
+/// @ingroup gtc
+///
+/// Defines additional matrix inverting functions.
+/// <glm/gtc/matrix_inverse.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependencies
+#include "../detail/setup.hpp"
+#include "../matrix.hpp"
+#include "../mat2x2.hpp"
+#include "../mat3x3.hpp"
+#include "../mat4x4.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTC_matrix_inverse extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtc_matrix_inverse
+ /// @{
+
+ /// Fast matrix inverse for affine matrix.
+ ///
+ /// @param m Input matrix to invert.
+ /// @tparam genType Squared floating-point matrix: half, float or double. Inverse of matrix based of half-precision floating point value is highly innacurate.
+ /// @see gtc_matrix_inverse
+ template <typename genType>
+ GLM_FUNC_DECL genType affineInverse(genType const & m);
+
+ /// Compute the inverse transpose of a matrix.
+ ///
+ /// @param m Input matrix to invert transpose.
+ /// @tparam genType Squared floating-point matrix: half, float or double. Inverse of matrix based of half-precision floating point value is highly innacurate.
+ /// @see gtc_matrix_inverse
+ template <typename genType>
+ GLM_FUNC_DECL genType inverseTranspose(genType const & m);
+
+ /// @}
+}//namespace glm
+
+#include "matrix_inverse.inl"
diff --git a/src/third_party/glm/glm/gtc/matrix_inverse.inl b/src/third_party/glm/glm/gtc/matrix_inverse.inl
new file mode 100644
index 0000000..36c9bf7
--- /dev/null
+++ b/src/third_party/glm/glm/gtc/matrix_inverse.inl
@@ -0,0 +1,120 @@
+/// @ref gtc_matrix_inverse
+/// @file glm/gtc/matrix_inverse.inl
+
+namespace glm
+{
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> affineInverse(tmat3x3<T, P> const & m)
+ {
+ tmat2x2<T, P> const Inv(inverse(tmat2x2<T, P>(m)));
+
+ return tmat3x3<T, P>(
+ tvec3<T, P>(Inv[0], static_cast<T>(0)),
+ tvec3<T, P>(Inv[1], static_cast<T>(0)),
+ tvec3<T, P>(-Inv * tvec2<T, P>(m[2]), static_cast<T>(1)));
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> affineInverse(tmat4x4<T, P> const & m)
+ {
+ tmat3x3<T, P> const Inv(inverse(tmat3x3<T, P>(m)));
+
+ return tmat4x4<T, P>(
+ tvec4<T, P>(Inv[0], static_cast<T>(0)),
+ tvec4<T, P>(Inv[1], static_cast<T>(0)),
+ tvec4<T, P>(Inv[2], static_cast<T>(0)),
+ tvec4<T, P>(-Inv * tvec3<T, P>(m[3]), static_cast<T>(1)));
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P> inverseTranspose(tmat2x2<T, P> const & m)
+ {
+ T Determinant = m[0][0] * m[1][1] - m[1][0] * m[0][1];
+
+ tmat2x2<T, P> Inverse(
+ + m[1][1] / Determinant,
+ - m[0][1] / Determinant,
+ - m[1][0] / Determinant,
+ + m[0][0] / Determinant);
+
+ return Inverse;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> inverseTranspose(tmat3x3<T, P> const & m)
+ {
+ T Determinant =
+ + m[0][0] * (m[1][1] * m[2][2] - m[1][2] * m[2][1])
+ - m[0][1] * (m[1][0] * m[2][2] - m[1][2] * m[2][0])
+ + m[0][2] * (m[1][0] * m[2][1] - m[1][1] * m[2][0]);
+
+ tmat3x3<T, P> Inverse(uninitialize);
+ Inverse[0][0] = + (m[1][1] * m[2][2] - m[2][1] * m[1][2]);
+ Inverse[0][1] = - (m[1][0] * m[2][2] - m[2][0] * m[1][2]);
+ Inverse[0][2] = + (m[1][0] * m[2][1] - m[2][0] * m[1][1]);
+ Inverse[1][0] = - (m[0][1] * m[2][2] - m[2][1] * m[0][2]);
+ Inverse[1][1] = + (m[0][0] * m[2][2] - m[2][0] * m[0][2]);
+ Inverse[1][2] = - (m[0][0] * m[2][1] - m[2][0] * m[0][1]);
+ Inverse[2][0] = + (m[0][1] * m[1][2] - m[1][1] * m[0][2]);
+ Inverse[2][1] = - (m[0][0] * m[1][2] - m[1][0] * m[0][2]);
+ Inverse[2][2] = + (m[0][0] * m[1][1] - m[1][0] * m[0][1]);
+ Inverse /= Determinant;
+
+ return Inverse;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> inverseTranspose(tmat4x4<T, P> const & m)
+ {
+ T SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];
+ T SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3];
+ T SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2];
+ T SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3];
+ T SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2];
+ T SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1];
+ T SubFactor06 = m[1][2] * m[3][3] - m[3][2] * m[1][3];
+ T SubFactor07 = m[1][1] * m[3][3] - m[3][1] * m[1][3];
+ T SubFactor08 = m[1][1] * m[3][2] - m[3][1] * m[1][2];
+ T SubFactor09 = m[1][0] * m[3][3] - m[3][0] * m[1][3];
+ T SubFactor10 = m[1][0] * m[3][2] - m[3][0] * m[1][2];
+ T SubFactor11 = m[1][1] * m[3][3] - m[3][1] * m[1][3];
+ T SubFactor12 = m[1][0] * m[3][1] - m[3][0] * m[1][1];
+ T SubFactor13 = m[1][2] * m[2][3] - m[2][2] * m[1][3];
+ T SubFactor14 = m[1][1] * m[2][3] - m[2][1] * m[1][3];
+ T SubFactor15 = m[1][1] * m[2][2] - m[2][1] * m[1][2];
+ T SubFactor16 = m[1][0] * m[2][3] - m[2][0] * m[1][3];
+ T SubFactor17 = m[1][0] * m[2][2] - m[2][0] * m[1][2];
+ T SubFactor18 = m[1][0] * m[2][1] - m[2][0] * m[1][1];
+
+ tmat4x4<T, P> Inverse(uninitialize);
+ Inverse[0][0] = + (m[1][1] * SubFactor00 - m[1][2] * SubFactor01 + m[1][3] * SubFactor02);
+ Inverse[0][1] = - (m[1][0] * SubFactor00 - m[1][2] * SubFactor03 + m[1][3] * SubFactor04);
+ Inverse[0][2] = + (m[1][0] * SubFactor01 - m[1][1] * SubFactor03 + m[1][3] * SubFactor05);
+ Inverse[0][3] = - (m[1][0] * SubFactor02 - m[1][1] * SubFactor04 + m[1][2] * SubFactor05);
+
+ Inverse[1][0] = - (m[0][1] * SubFactor00 - m[0][2] * SubFactor01 + m[0][3] * SubFactor02);
+ Inverse[1][1] = + (m[0][0] * SubFactor00 - m[0][2] * SubFactor03 + m[0][3] * SubFactor04);
+ Inverse[1][2] = - (m[0][0] * SubFactor01 - m[0][1] * SubFactor03 + m[0][3] * SubFactor05);
+ Inverse[1][3] = + (m[0][0] * SubFactor02 - m[0][1] * SubFactor04 + m[0][2] * SubFactor05);
+
+ Inverse[2][0] = + (m[0][1] * SubFactor06 - m[0][2] * SubFactor07 + m[0][3] * SubFactor08);
+ Inverse[2][1] = - (m[0][0] * SubFactor06 - m[0][2] * SubFactor09 + m[0][3] * SubFactor10);
+ Inverse[2][2] = + (m[0][0] * SubFactor11 - m[0][1] * SubFactor09 + m[0][3] * SubFactor12);
+ Inverse[2][3] = - (m[0][0] * SubFactor08 - m[0][1] * SubFactor10 + m[0][2] * SubFactor12);
+
+ Inverse[3][0] = - (m[0][1] * SubFactor13 - m[0][2] * SubFactor14 + m[0][3] * SubFactor15);
+ Inverse[3][1] = + (m[0][0] * SubFactor13 - m[0][2] * SubFactor16 + m[0][3] * SubFactor17);
+ Inverse[3][2] = - (m[0][0] * SubFactor14 - m[0][1] * SubFactor16 + m[0][3] * SubFactor18);
+ Inverse[3][3] = + (m[0][0] * SubFactor15 - m[0][1] * SubFactor17 + m[0][2] * SubFactor18);
+
+ T Determinant =
+ + m[0][0] * Inverse[0][0]
+ + m[0][1] * Inverse[0][1]
+ + m[0][2] * Inverse[0][2]
+ + m[0][3] * Inverse[0][3];
+
+ Inverse /= Determinant;
+
+ return Inverse;
+ }
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtc/matrix_transform.hpp b/src/third_party/glm/glm/gtc/matrix_transform.hpp
new file mode 100644
index 0000000..c97b89a
--- /dev/null
+++ b/src/third_party/glm/glm/gtc/matrix_transform.hpp
@@ -0,0 +1,465 @@
+/// @ref gtc_matrix_transform
+/// @file glm/gtc/matrix_transform.hpp
+///
+/// @see core (dependence)
+/// @see gtx_transform
+/// @see gtx_transform2
+///
+/// @defgroup gtc_matrix_transform GLM_GTC_matrix_transform
+/// @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.
+
+#pragma once
+
+// Dependencies
+#include "../mat4x4.hpp"
+#include "../vec2.hpp"
+#include "../vec3.hpp"
+#include "../vec4.hpp"
+#include "../gtc/constants.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTC_matrix_transform extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtc_matrix_transform
+ /// @{
+
+ /// Builds a translation 4 * 4 matrix created from a vector of 3 components.
+ ///
+ /// @param m Input matrix multiplied by this translation matrix.
+ /// @param v Coordinates of a translation vector.
+ /// @tparam T Value type used to build the matrix. Currently supported: half (not recommanded), float or double.
+ /// @code
+ /// #include <glm/glm.hpp>
+ /// #include <glm/gtc/matrix_transform.hpp>
+ /// ...
+ /// glm::mat4 m = glm::translate(glm::mat4(1.0f), glm::vec3(1.0f));
+ /// // m[0][0] == 1.0f, m[0][1] == 0.0f, m[0][2] == 0.0f, m[0][3] == 0.0f
+ /// // m[1][0] == 0.0f, m[1][1] == 1.0f, m[1][2] == 0.0f, m[1][3] == 0.0f
+ /// // m[2][0] == 0.0f, m[2][1] == 0.0f, m[2][2] == 1.0f, m[2][3] == 0.0f
+ /// // m[3][0] == 1.0f, m[3][1] == 1.0f, m[3][2] == 1.0f, m[3][3] == 1.0f
+ /// @endcode
+ /// @see gtc_matrix_transform
+ /// @see - translate(tmat4x4<T, P> const & m, T x, T y, T z)
+ /// @see - translate(tvec3<T, P> const & v)
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x4<T, P> translate(
+ tmat4x4<T, P> const & m,
+ tvec3<T, P> const & v);
+
+ /// Builds a rotation 4 * 4 matrix created from an axis vector and an angle.
+ ///
+ /// @param m Input matrix multiplied by this rotation matrix.
+ /// @param angle Rotation angle expressed in radians.
+ /// @param axis Rotation axis, recommended to be normalized.
+ /// @tparam T Value type used to build the matrix. Supported: half, float or double.
+ /// @see gtc_matrix_transform
+ /// @see - rotate(tmat4x4<T, P> const & m, T angle, T x, T y, T z)
+ /// @see - rotate(T angle, tvec3<T, P> const & v)
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x4<T, P> rotate(
+ tmat4x4<T, P> const & m,
+ T angle,
+ tvec3<T, P> const & axis);
+
+ /// Builds a scale 4 * 4 matrix created from 3 scalars.
+ ///
+ /// @param m Input matrix multiplied by this scale matrix.
+ /// @param v Ratio of scaling for each axis.
+ /// @tparam T Value type used to build the matrix. Currently supported: half (not recommanded), float or double.
+ /// @see gtc_matrix_transform
+ /// @see - scale(tmat4x4<T, P> const & m, T x, T y, T z)
+ /// @see - scale(tvec3<T, P> const & v)
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x4<T, P> scale(
+ tmat4x4<T, P> const & m,
+ tvec3<T, P> const & v);
+
+ /// Creates a matrix for an orthographic parallel viewing volume, using the default handedness.
+ ///
+ /// @param left
+ /// @param right
+ /// @param bottom
+ /// @param top
+ /// @param zNear
+ /// @param zFar
+ /// @tparam T Value type used to build the matrix. Currently supported: half (not recommanded), float or double.
+ /// @see gtc_matrix_transform
+ /// @see - glm::ortho(T const & left, T const & right, T const & bottom, T const & top)
+ template <typename T>
+ GLM_FUNC_DECL tmat4x4<T, defaultp> ortho(
+ T left,
+ T right,
+ T bottom,
+ T top,
+ T zNear,
+ T zFar);
+
+ /// Creates a matrix for an orthographic parallel viewing volume, using left-handedness.
+ ///
+ /// @param left
+ /// @param right
+ /// @param bottom
+ /// @param top
+ /// @param zNear
+ /// @param zFar
+ /// @tparam T Value type used to build the matrix. Currently supported: half (not recommanded), float or double.
+ /// @see gtc_matrix_transform
+ /// @see - glm::ortho(T const & left, T const & right, T const & bottom, T const & top)
+ template <typename T>
+ GLM_FUNC_DECL tmat4x4<T, defaultp> orthoLH(
+ T left,
+ T right,
+ T bottom,
+ T top,
+ T zNear,
+ T zFar);
+
+ /// Creates a matrix for an orthographic parallel viewing volume, using right-handedness.
+ ///
+ /// @param left
+ /// @param right
+ /// @param bottom
+ /// @param top
+ /// @param zNear
+ /// @param zFar
+ /// @tparam T Value type used to build the matrix. Currently supported: half (not recommanded), float or double.
+ /// @see gtc_matrix_transform
+ /// @see - glm::ortho(T const & left, T const & right, T const & bottom, T const & top)
+ template <typename T>
+ GLM_FUNC_DECL tmat4x4<T, defaultp> orthoRH(
+ T left,
+ T right,
+ T bottom,
+ T top,
+ T zNear,
+ T zFar);
+
+ /// Creates a matrix for projecting two-dimensional coordinates onto the screen.
+ ///
+ /// @param left
+ /// @param right
+ /// @param bottom
+ /// @param top
+ /// @tparam T Value type used to build the matrix. Currently supported: half (not recommanded), float or double.
+ /// @see gtc_matrix_transform
+ /// @see - glm::ortho(T const & left, T const & right, T const & bottom, T const & top, T const & zNear, T const & zFar)
+ template <typename T>
+ GLM_FUNC_DECL tmat4x4<T, defaultp> ortho(
+ T left,
+ T right,
+ T bottom,
+ T top);
+
+ /// Creates a frustum matrix with default handedness.
+ ///
+ /// @param left
+ /// @param right
+ /// @param bottom
+ /// @param top
+ /// @param near
+ /// @param far
+ /// @tparam T Value type used to build the matrix. Currently supported: half (not recommanded), float or double.
+ /// @see gtc_matrix_transform
+ template <typename T>
+ GLM_FUNC_DECL tmat4x4<T, defaultp> frustum(
+ T left,
+ T right,
+ T bottom,
+ T top,
+ T near,
+ T far);
+
+ /// Creates a left handed frustum matrix.
+ ///
+ /// @param left
+ /// @param right
+ /// @param bottom
+ /// @param top
+ /// @param near
+ /// @param far
+ /// @tparam T Value type used to build the matrix. Currently supported: half (not recommanded), float or double.
+ /// @see gtc_matrix_transform
+ template <typename T>
+ GLM_FUNC_DECL tmat4x4<T, defaultp> frustumLH(
+ T left,
+ T right,
+ T bottom,
+ T top,
+ T near,
+ T far);
+
+ /// Creates a right handed frustum matrix.
+ ///
+ /// @param left
+ /// @param right
+ /// @param bottom
+ /// @param top
+ /// @param near
+ /// @param far
+ /// @tparam T Value type used to build the matrix. Currently supported: half (not recommanded), float or double.
+ /// @see gtc_matrix_transform
+ template <typename T>
+ GLM_FUNC_DECL tmat4x4<T, defaultp> frustumRH(
+ T left,
+ T right,
+ T bottom,
+ T top,
+ T near,
+ T far);
+
+ /// Creates a matrix for a symetric perspective-view frustum based on the default handedness.
+ ///
+ /// @param fovy Specifies the field of view angle in the y direction. Expressed in radians.
+ /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).
+ /// @param near Specifies the distance from the viewer to the near clipping plane (always positive).
+ /// @param far Specifies the distance from the viewer to the far clipping plane (always positive).
+ /// @tparam T Value type used to build the matrix. Currently supported: half (not recommanded), float or double.
+ /// @see gtc_matrix_transform
+ template <typename T>
+ GLM_FUNC_DECL tmat4x4<T, defaultp> perspective(
+ T fovy,
+ T aspect,
+ T near,
+ T far);
+
+ /// Creates a matrix for a right handed, symetric perspective-view frustum.
+ ///
+ /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians.
+ /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).
+ /// @param near Specifies the distance from the viewer to the near clipping plane (always positive).
+ /// @param far Specifies the distance from the viewer to the far clipping plane (always positive).
+ /// @tparam T Value type used to build the matrix. Currently supported: half (not recommanded), float or double.
+ /// @see gtc_matrix_transform
+ template <typename T>
+ GLM_FUNC_DECL tmat4x4<T, defaultp> perspectiveRH(
+ T fovy,
+ T aspect,
+ T near,
+ T far);
+
+ /// Creates a matrix for a left handed, symetric perspective-view frustum.
+ ///
+ /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians.
+ /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).
+ /// @param near Specifies the distance from the viewer to the near clipping plane (always positive).
+ /// @param far Specifies the distance from the viewer to the far clipping plane (always positive).
+ /// @tparam T Value type used to build the matrix. Currently supported: half (not recommanded), float or double.
+ /// @see gtc_matrix_transform
+ template <typename T>
+ GLM_FUNC_DECL tmat4x4<T, defaultp> perspectiveLH(
+ T fovy,
+ T aspect,
+ T near,
+ T far);
+
+ /// Builds a perspective projection matrix based on a field of view and the default handedness.
+ ///
+ /// @param fov Expressed in radians.
+ /// @param width
+ /// @param height
+ /// @param near Specifies the distance from the viewer to the near clipping plane (always positive).
+ /// @param far Specifies the distance from the viewer to the far clipping plane (always positive).
+ /// @tparam T Value type used to build the matrix. Currently supported: half (not recommanded), float or double.
+ /// @see gtc_matrix_transform
+ template <typename T>
+ GLM_FUNC_DECL tmat4x4<T, defaultp> perspectiveFov(
+ T fov,
+ T width,
+ T height,
+ T near,
+ T far);
+
+ /// Builds a right handed perspective projection matrix based on a field of view.
+ ///
+ /// @param fov Expressed in radians.
+ /// @param width
+ /// @param height
+ /// @param near Specifies the distance from the viewer to the near clipping plane (always positive).
+ /// @param far Specifies the distance from the viewer to the far clipping plane (always positive).
+ /// @tparam T Value type used to build the matrix. Currently supported: half (not recommanded), float or double.
+ /// @see gtc_matrix_transform
+ template <typename T>
+ GLM_FUNC_DECL tmat4x4<T, defaultp> perspectiveFovRH(
+ T fov,
+ T width,
+ T height,
+ T near,
+ T far);
+
+ /// Builds a left handed perspective projection matrix based on a field of view.
+ ///
+ /// @param fov Expressed in radians.
+ /// @param width
+ /// @param height
+ /// @param near Specifies the distance from the viewer to the near clipping plane (always positive).
+ /// @param far Specifies the distance from the viewer to the far clipping plane (always positive).
+ /// @tparam T Value type used to build the matrix. Currently supported: half (not recommanded), float or double.
+ /// @see gtc_matrix_transform
+ template <typename T>
+ GLM_FUNC_DECL tmat4x4<T, defaultp> perspectiveFovLH(
+ T fov,
+ T width,
+ T height,
+ T near,
+ T far);
+
+ /// Creates a matrix for a symmetric perspective-view frustum with far plane at infinite with default handedness.
+ ///
+ /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians.
+ /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).
+ /// @param near Specifies the distance from the viewer to the near clipping plane (always positive).
+ /// @tparam T Value type used to build the matrix. Currently supported: half (not recommanded), float or double.
+ /// @see gtc_matrix_transform
+ template <typename T>
+ GLM_FUNC_DECL tmat4x4<T, defaultp> infinitePerspective(
+ T fovy, T aspect, T near);
+
+ /// Creates a matrix for a left handed, symmetric perspective-view frustum with far plane at infinite.
+ ///
+ /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians.
+ /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).
+ /// @param near Specifies the distance from the viewer to the near clipping plane (always positive).
+ /// @tparam T Value type used to build the matrix. Currently supported: half (not recommanded), float or double.
+ /// @see gtc_matrix_transform
+ template <typename T>
+ GLM_FUNC_DECL tmat4x4<T, defaultp> infinitePerspectiveLH(
+ T fovy, T aspect, T near);
+
+ /// Creates a matrix for a right handed, symmetric perspective-view frustum with far plane at infinite.
+ ///
+ /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians.
+ /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).
+ /// @param near Specifies the distance from the viewer to the near clipping plane (always positive).
+ /// @tparam T Value type used to build the matrix. Currently supported: half (not recommanded), float or double.
+ /// @see gtc_matrix_transform
+ template <typename T>
+ GLM_FUNC_DECL tmat4x4<T, defaultp> infinitePerspectiveRH(
+ T fovy, T aspect, T near);
+
+ /// Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics hardware that doesn't support depth clamping.
+ ///
+ /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians.
+ /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).
+ /// @param near Specifies the distance from the viewer to the near clipping plane (always positive).
+ /// @tparam T Value type used to build the matrix. Currently supported: half (not recommanded), float or double.
+ /// @see gtc_matrix_transform
+ template <typename T>
+ GLM_FUNC_DECL tmat4x4<T, defaultp> tweakedInfinitePerspective(
+ T fovy, T aspect, T near);
+
+ /// Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics hardware that doesn't support depth clamping.
+ ///
+ /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians.
+ /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).
+ /// @param near Specifies the distance from the viewer to the near clipping plane (always positive).
+ /// @param ep
+ /// @tparam T Value type used to build the matrix. Currently supported: half (not recommanded), float or double.
+ /// @see gtc_matrix_transform
+ template <typename T>
+ GLM_FUNC_DECL tmat4x4<T, defaultp> tweakedInfinitePerspective(
+ T fovy, T aspect, T near, T ep);
+
+ /// Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates.
+ ///
+ /// @param obj Specify the object coordinates.
+ /// @param model Specifies the current modelview matrix
+ /// @param proj Specifies the current projection matrix
+ /// @param viewport Specifies the current viewport
+ /// @return Return the computed window coordinates.
+ /// @tparam T Native type used for the computation. Currently supported: half (not recommanded), float or double.
+ /// @tparam U Currently supported: Floating-point types and integer types.
+ /// @see gtc_matrix_transform
+ template <typename T, typename U, precision P>
+ GLM_FUNC_DECL tvec3<T, P> project(
+ tvec3<T, P> const & obj,
+ tmat4x4<T, P> const & model,
+ tmat4x4<T, P> const & proj,
+ tvec4<U, P> const & viewport);
+
+ /// Map the specified window coordinates (win.x, win.y, win.z) into object coordinates.
+ ///
+ /// @param win Specify the window coordinates to be mapped.
+ /// @param model Specifies the modelview matrix
+ /// @param proj Specifies the projection matrix
+ /// @param viewport Specifies the viewport
+ /// @return Returns the computed object coordinates.
+ /// @tparam T Native type used for the computation. Currently supported: half (not recommanded), float or double.
+ /// @tparam U Currently supported: Floating-point types and integer types.
+ /// @see gtc_matrix_transform
+ template <typename T, typename U, precision P>
+ GLM_FUNC_DECL tvec3<T, P> unProject(
+ tvec3<T, P> const & win,
+ tmat4x4<T, P> const & model,
+ tmat4x4<T, P> const & proj,
+ tvec4<U, P> const & viewport);
+
+ /// Define a picking region
+ ///
+ /// @param center
+ /// @param delta
+ /// @param viewport
+ /// @tparam T Native type used for the computation. Currently supported: half (not recommanded), float or double.
+ /// @tparam U Currently supported: Floating-point types and integer types.
+ /// @see gtc_matrix_transform
+ template <typename T, precision P, typename U>
+ GLM_FUNC_DECL tmat4x4<T, P> pickMatrix(
+ tvec2<T, P> const & center,
+ tvec2<T, P> const & delta,
+ tvec4<U, P> const & viewport);
+
+ /// Build a look at view matrix based on the default handedness.
+ ///
+ /// @param eye Position of the camera
+ /// @param center Position where the camera is looking at
+ /// @param up Normalized up vector, how the camera is oriented. Typically (0, 0, 1)
+ /// @see gtc_matrix_transform
+ /// @see - frustum(T const & left, T const & right, T const & bottom, T const & top, T const & nearVal, T const & farVal) frustum(T const & left, T const & right, T const & bottom, T const & top, T const & nearVal, T const & farVal)
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x4<T, P> lookAt(
+ tvec3<T, P> const & eye,
+ tvec3<T, P> const & center,
+ tvec3<T, P> const & up);
+
+ /// Build a right handed look at view matrix.
+ ///
+ /// @param eye Position of the camera
+ /// @param center Position where the camera is looking at
+ /// @param up Normalized up vector, how the camera is oriented. Typically (0, 0, 1)
+ /// @see gtc_matrix_transform
+ /// @see - frustum(T const & left, T const & right, T const & bottom, T const & top, T const & nearVal, T const & farVal) frustum(T const & left, T const & right, T const & bottom, T const & top, T const & nearVal, T const & farVal)
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x4<T, P> lookAtRH(
+ tvec3<T, P> const & eye,
+ tvec3<T, P> const & center,
+ tvec3<T, P> const & up);
+
+ /// Build a left handed look at view matrix.
+ ///
+ /// @param eye Position of the camera
+ /// @param center Position where the camera is looking at
+ /// @param up Normalized up vector, how the camera is oriented. Typically (0, 0, 1)
+ /// @see gtc_matrix_transform
+ /// @see - frustum(T const & left, T const & right, T const & bottom, T const & top, T const & nearVal, T const & farVal) frustum(T const & left, T const & right, T const & bottom, T const & top, T const & nearVal, T const & farVal)
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x4<T, P> lookAtLH(
+ tvec3<T, P> const & eye,
+ tvec3<T, P> const & center,
+ tvec3<T, P> const & up);
+
+ /// @}
+}//namespace glm
+
+#include "matrix_transform.inl"
diff --git a/src/third_party/glm/glm/gtc/matrix_transform.inl b/src/third_party/glm/glm/gtc/matrix_transform.inl
new file mode 100644
index 0000000..dac55a4
--- /dev/null
+++ b/src/third_party/glm/glm/gtc/matrix_transform.inl
@@ -0,0 +1,575 @@
+/// @ref gtc_matrix_transform
+/// @file glm/gtc/matrix_transform.inl
+
+#include "../geometric.hpp"
+#include "../trigonometric.hpp"
+#include "../matrix.hpp"
+
+namespace glm
+{
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> translate(tmat4x4<T, P> const & m, tvec3<T, P> const & v)
+ {
+ tmat4x4<T, P> Result(m);
+ Result[3] = m[0] * v[0] + m[1] * v[1] + m[2] * v[2] + m[3];
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> rotate(tmat4x4<T, P> const & m, T angle, tvec3<T, P> const & v)
+ {
+ T const a = angle;
+ T const c = cos(a);
+ T const s = sin(a);
+
+ tvec3<T, P> axis(normalize(v));
+ tvec3<T, P> temp((T(1) - c) * axis);
+
+ tmat4x4<T, P> Rotate(uninitialize);
+ Rotate[0][0] = c + temp[0] * axis[0];
+ Rotate[0][1] = temp[0] * axis[1] + s * axis[2];
+ Rotate[0][2] = temp[0] * axis[2] - s * axis[1];
+
+ Rotate[1][0] = temp[1] * axis[0] - s * axis[2];
+ Rotate[1][1] = c + temp[1] * axis[1];
+ Rotate[1][2] = temp[1] * axis[2] + s * axis[0];
+
+ Rotate[2][0] = temp[2] * axis[0] + s * axis[1];
+ Rotate[2][1] = temp[2] * axis[1] - s * axis[0];
+ Rotate[2][2] = c + temp[2] * axis[2];
+
+ tmat4x4<T, P> Result(uninitialize);
+ Result[0] = m[0] * Rotate[0][0] + m[1] * Rotate[0][1] + m[2] * Rotate[0][2];
+ Result[1] = m[0] * Rotate[1][0] + m[1] * Rotate[1][1] + m[2] * Rotate[1][2];
+ Result[2] = m[0] * Rotate[2][0] + m[1] * Rotate[2][1] + m[2] * Rotate[2][2];
+ Result[3] = m[3];
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> rotate_slow(tmat4x4<T, P> const & m, T angle, tvec3<T, P> const & v)
+ {
+ T const a = angle;
+ T const c = cos(a);
+ T const s = sin(a);
+ tmat4x4<T, P> Result;
+
+ tvec3<T, P> axis = normalize(v);
+
+ Result[0][0] = c + (static_cast<T>(1) - c) * axis.x * axis.x;
+ Result[0][1] = (static_cast<T>(1) - c) * axis.x * axis.y + s * axis.z;
+ Result[0][2] = (static_cast<T>(1) - c) * axis.x * axis.z - s * axis.y;
+ Result[0][3] = static_cast<T>(0);
+
+ Result[1][0] = (static_cast<T>(1) - c) * axis.y * axis.x - s * axis.z;
+ Result[1][1] = c + (static_cast<T>(1) - c) * axis.y * axis.y;
+ Result[1][2] = (static_cast<T>(1) - c) * axis.y * axis.z + s * axis.x;
+ Result[1][3] = static_cast<T>(0);
+
+ Result[2][0] = (static_cast<T>(1) - c) * axis.z * axis.x + s * axis.y;
+ Result[2][1] = (static_cast<T>(1) - c) * axis.z * axis.y - s * axis.x;
+ Result[2][2] = c + (static_cast<T>(1) - c) * axis.z * axis.z;
+ Result[2][3] = static_cast<T>(0);
+
+ Result[3] = tvec4<T, P>(0, 0, 0, 1);
+ return m * Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> scale(tmat4x4<T, P> const & m, tvec3<T, P> const & v)
+ {
+ tmat4x4<T, P> Result(uninitialize);
+ Result[0] = m[0] * v[0];
+ Result[1] = m[1] * v[1];
+ Result[2] = m[2] * v[2];
+ Result[3] = m[3];
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> scale_slow(tmat4x4<T, P> const & m, tvec3<T, P> const & v)
+ {
+ tmat4x4<T, P> Result(T(1));
+ Result[0][0] = v.x;
+ Result[1][1] = v.y;
+ Result[2][2] = v.z;
+ return m * Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> ortho
+ (
+ T left, T right,
+ T bottom, T top,
+ T zNear, T zFar
+ )
+ {
+# if GLM_COORDINATE_SYSTEM == GLM_LEFT_HANDED
+ return orthoLH(left, right, bottom, top, zNear, zFar);
+# else
+ return orthoRH(left, right, bottom, top, zNear, zFar);
+# endif
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> orthoLH
+ (
+ T left, T right,
+ T bottom, T top,
+ T zNear, T zFar
+ )
+ {
+ tmat4x4<T, defaultp> Result(1);
+ Result[0][0] = static_cast<T>(2) / (right - left);
+ Result[1][1] = static_cast<T>(2) / (top - bottom);
+ Result[3][0] = - (right + left) / (right - left);
+ Result[3][1] = - (top + bottom) / (top - bottom);
+
+# if GLM_DEPTH_CLIP_SPACE == GLM_DEPTH_ZERO_TO_ONE
+ Result[2][2] = static_cast<T>(1) / (zFar - zNear);
+ Result[3][2] = - zNear / (zFar - zNear);
+# else
+ Result[2][2] = static_cast<T>(2) / (zFar - zNear);
+ Result[3][2] = - (zFar + zNear) / (zFar - zNear);
+# endif
+
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> orthoRH
+ (
+ T left, T right,
+ T bottom, T top,
+ T zNear, T zFar
+ )
+ {
+ tmat4x4<T, defaultp> Result(1);
+ Result[0][0] = static_cast<T>(2) / (right - left);
+ Result[1][1] = static_cast<T>(2) / (top - bottom);
+ Result[3][0] = - (right + left) / (right - left);
+ Result[3][1] = - (top + bottom) / (top - bottom);
+
+# if GLM_DEPTH_CLIP_SPACE == GLM_DEPTH_ZERO_TO_ONE
+ Result[2][2] = - static_cast<T>(1) / (zFar - zNear);
+ Result[3][2] = - zNear / (zFar - zNear);
+# else
+ Result[2][2] = - static_cast<T>(2) / (zFar - zNear);
+ Result[3][2] = - (zFar + zNear) / (zFar - zNear);
+# endif
+
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> ortho
+ (
+ T left, T right,
+ T bottom, T top
+ )
+ {
+ tmat4x4<T, defaultp> Result(1);
+ Result[0][0] = static_cast<T>(2) / (right - left);
+ Result[1][1] = static_cast<T>(2) / (top - bottom);
+ Result[2][2] = - static_cast<T>(1);
+ Result[3][0] = - (right + left) / (right - left);
+ Result[3][1] = - (top + bottom) / (top - bottom);
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> frustum
+ (
+ T left, T right,
+ T bottom, T top,
+ T nearVal, T farVal
+ )
+ {
+# if GLM_COORDINATE_SYSTEM == GLM_LEFT_HANDED
+ return frustumLH(left, right, bottom, top, nearVal, farVal);
+# else
+ return frustumRH(left, right, bottom, top, nearVal, farVal);
+# endif
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> frustumLH
+ (
+ T left, T right,
+ T bottom, T top,
+ T nearVal, T farVal
+ )
+ {
+ tmat4x4<T, defaultp> Result(0);
+ Result[0][0] = (static_cast<T>(2) * nearVal) / (right - left);
+ Result[1][1] = (static_cast<T>(2) * nearVal) / (top - bottom);
+ Result[2][0] = (right + left) / (right - left);
+ Result[2][1] = (top + bottom) / (top - bottom);
+ Result[2][3] = static_cast<T>(1);
+
+# if GLM_DEPTH_CLIP_SPACE == GLM_DEPTH_ZERO_TO_ONE
+ Result[2][2] = farVal / (farVal - nearVal);
+ Result[3][2] = -(farVal * nearVal) / (farVal - nearVal);
+# else
+ Result[2][2] = (farVal + nearVal) / (farVal - nearVal);
+ Result[3][2] = - (static_cast<T>(2) * farVal * nearVal) / (farVal - nearVal);
+# endif
+
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> frustumRH
+ (
+ T left, T right,
+ T bottom, T top,
+ T nearVal, T farVal
+ )
+ {
+ tmat4x4<T, defaultp> Result(0);
+ Result[0][0] = (static_cast<T>(2) * nearVal) / (right - left);
+ Result[1][1] = (static_cast<T>(2) * nearVal) / (top - bottom);
+ Result[2][0] = (right + left) / (right - left);
+ Result[2][1] = (top + bottom) / (top - bottom);
+ Result[2][3] = static_cast<T>(-1);
+
+# if GLM_DEPTH_CLIP_SPACE == GLM_DEPTH_ZERO_TO_ONE
+ Result[2][2] = farVal / (nearVal - farVal);
+ Result[3][2] = -(farVal * nearVal) / (farVal - nearVal);
+# else
+ Result[2][2] = - (farVal + nearVal) / (farVal - nearVal);
+ Result[3][2] = - (static_cast<T>(2) * farVal * nearVal) / (farVal - nearVal);
+# endif
+
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> perspective(T fovy, T aspect, T zNear, T zFar)
+ {
+# if GLM_COORDINATE_SYSTEM == GLM_LEFT_HANDED
+ return perspectiveLH(fovy, aspect, zNear, zFar);
+# else
+ return perspectiveRH(fovy, aspect, zNear, zFar);
+# endif
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> perspectiveRH(T fovy, T aspect, T zNear, T zFar)
+ {
+ assert(abs(aspect - std::numeric_limits<T>::epsilon()) > static_cast<T>(0));
+
+ T const tanHalfFovy = tan(fovy / static_cast<T>(2));
+
+ tmat4x4<T, defaultp> Result(static_cast<T>(0));
+ Result[0][0] = static_cast<T>(1) / (aspect * tanHalfFovy);
+ Result[1][1] = static_cast<T>(1) / (tanHalfFovy);
+ Result[2][3] = - static_cast<T>(1);
+
+# if GLM_DEPTH_CLIP_SPACE == GLM_DEPTH_ZERO_TO_ONE
+ Result[2][2] = zFar / (zNear - zFar);
+ Result[3][2] = -(zFar * zNear) / (zFar - zNear);
+# else
+ Result[2][2] = - (zFar + zNear) / (zFar - zNear);
+ Result[3][2] = - (static_cast<T>(2) * zFar * zNear) / (zFar - zNear);
+# endif
+
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> perspectiveLH(T fovy, T aspect, T zNear, T zFar)
+ {
+ assert(abs(aspect - std::numeric_limits<T>::epsilon()) > static_cast<T>(0));
+
+ T const tanHalfFovy = tan(fovy / static_cast<T>(2));
+
+ tmat4x4<T, defaultp> Result(static_cast<T>(0));
+ Result[0][0] = static_cast<T>(1) / (aspect * tanHalfFovy);
+ Result[1][1] = static_cast<T>(1) / (tanHalfFovy);
+ Result[2][3] = static_cast<T>(1);
+
+# if GLM_DEPTH_CLIP_SPACE == GLM_DEPTH_ZERO_TO_ONE
+ Result[2][2] = zFar / (zFar - zNear);
+ Result[3][2] = -(zFar * zNear) / (zFar - zNear);
+# else
+ Result[2][2] = (zFar + zNear) / (zFar - zNear);
+ Result[3][2] = - (static_cast<T>(2) * zFar * zNear) / (zFar - zNear);
+# endif
+
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> perspectiveFov(T fov, T width, T height, T zNear, T zFar)
+ {
+# if GLM_COORDINATE_SYSTEM == GLM_LEFT_HANDED
+ return perspectiveFovLH(fov, width, height, zNear, zFar);
+# else
+ return perspectiveFovRH(fov, width, height, zNear, zFar);
+# endif
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> perspectiveFovRH(T fov, T width, T height, T zNear, T zFar)
+ {
+ assert(width > static_cast<T>(0));
+ assert(height > static_cast<T>(0));
+ assert(fov > static_cast<T>(0));
+
+ T const rad = fov;
+ T const h = glm::cos(static_cast<T>(0.5) * rad) / glm::sin(static_cast<T>(0.5) * rad);
+ T const w = h * height / width; ///todo max(width , Height) / min(width , Height)?
+
+ tmat4x4<T, defaultp> Result(static_cast<T>(0));
+ Result[0][0] = w;
+ Result[1][1] = h;
+ Result[2][3] = - static_cast<T>(1);
+
+# if GLM_DEPTH_CLIP_SPACE == GLM_DEPTH_ZERO_TO_ONE
+ Result[2][2] = zFar / (zNear - zFar);
+ Result[3][2] = -(zFar * zNear) / (zFar - zNear);
+# else
+ Result[2][2] = - (zFar + zNear) / (zFar - zNear);
+ Result[3][2] = - (static_cast<T>(2) * zFar * zNear) / (zFar - zNear);
+# endif
+
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> perspectiveFovLH(T fov, T width, T height, T zNear, T zFar)
+ {
+ assert(width > static_cast<T>(0));
+ assert(height > static_cast<T>(0));
+ assert(fov > static_cast<T>(0));
+
+ T const rad = fov;
+ T const h = glm::cos(static_cast<T>(0.5) * rad) / glm::sin(static_cast<T>(0.5) * rad);
+ T const w = h * height / width; ///todo max(width , Height) / min(width , Height)?
+
+ tmat4x4<T, defaultp> Result(static_cast<T>(0));
+ Result[0][0] = w;
+ Result[1][1] = h;
+ Result[2][3] = static_cast<T>(1);
+
+# if GLM_DEPTH_CLIP_SPACE == GLM_DEPTH_ZERO_TO_ONE
+ Result[2][2] = zFar / (zFar - zNear);
+ Result[3][2] = -(zFar * zNear) / (zFar - zNear);
+# else
+ Result[2][2] = (zFar + zNear) / (zFar - zNear);
+ Result[3][2] = - (static_cast<T>(2) * zFar * zNear) / (zFar - zNear);
+# endif
+
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> infinitePerspective(T fovy, T aspect, T zNear)
+ {
+# if GLM_COORDINATE_SYSTEM == GLM_LEFT_HANDED
+ return infinitePerspectiveLH(fovy, aspect, zNear);
+# else
+ return infinitePerspectiveRH(fovy, aspect, zNear);
+# endif
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> infinitePerspectiveRH(T fovy, T aspect, T zNear)
+ {
+ T const range = tan(fovy / static_cast<T>(2)) * zNear;
+ T const left = -range * aspect;
+ T const right = range * aspect;
+ T const bottom = -range;
+ T const top = range;
+
+ tmat4x4<T, defaultp> Result(static_cast<T>(0));
+ Result[0][0] = (static_cast<T>(2) * zNear) / (right - left);
+ Result[1][1] = (static_cast<T>(2) * zNear) / (top - bottom);
+ Result[2][2] = - static_cast<T>(1);
+ Result[2][3] = - static_cast<T>(1);
+ Result[3][2] = - static_cast<T>(2) * zNear;
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> infinitePerspectiveLH(T fovy, T aspect, T zNear)
+ {
+ T const range = tan(fovy / static_cast<T>(2)) * zNear;
+ T const left = -range * aspect;
+ T const right = range * aspect;
+ T const bottom = -range;
+ T const top = range;
+
+ tmat4x4<T, defaultp> Result(T(0));
+ Result[0][0] = (static_cast<T>(2) * zNear) / (right - left);
+ Result[1][1] = (static_cast<T>(2) * zNear) / (top - bottom);
+ Result[2][2] = static_cast<T>(1);
+ Result[2][3] = static_cast<T>(1);
+ Result[3][2] = - static_cast<T>(2) * zNear;
+ return Result;
+ }
+
+ // Infinite projection matrix: http://www.terathon.com/gdc07_lengyel.pdf
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> tweakedInfinitePerspective(T fovy, T aspect, T zNear, T ep)
+ {
+ T const range = tan(fovy / static_cast<T>(2)) * zNear;
+ T const left = -range * aspect;
+ T const right = range * aspect;
+ T const bottom = -range;
+ T const top = range;
+
+ tmat4x4<T, defaultp> Result(static_cast<T>(0));
+ Result[0][0] = (static_cast<T>(2) * zNear) / (right - left);
+ Result[1][1] = (static_cast<T>(2) * zNear) / (top - bottom);
+ Result[2][2] = ep - static_cast<T>(1);
+ Result[2][3] = static_cast<T>(-1);
+ Result[3][2] = (ep - static_cast<T>(2)) * zNear;
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> tweakedInfinitePerspective(T fovy, T aspect, T zNear)
+ {
+ return tweakedInfinitePerspective(fovy, aspect, zNear, epsilon<T>());
+ }
+
+ template <typename T, typename U, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> project
+ (
+ tvec3<T, P> const & obj,
+ tmat4x4<T, P> const & model,
+ tmat4x4<T, P> const & proj,
+ tvec4<U, P> const & viewport
+ )
+ {
+ tvec4<T, P> tmp = tvec4<T, P>(obj, static_cast<T>(1));
+ tmp = model * tmp;
+ tmp = proj * tmp;
+
+ tmp /= tmp.w;
+# if GLM_DEPTH_CLIP_SPACE == GLM_DEPTH_ZERO_TO_ONE
+ tmp.x = tmp.x * static_cast<T>(0.5) + static_cast<T>(0.5);
+ tmp.y = tmp.y * static_cast<T>(0.5) + static_cast<T>(0.5);
+# else
+ tmp = tmp * static_cast<T>(0.5) + static_cast<T>(0.5);
+# endif
+ tmp[0] = tmp[0] * T(viewport[2]) + T(viewport[0]);
+ tmp[1] = tmp[1] * T(viewport[3]) + T(viewport[1]);
+
+ return tvec3<T, P>(tmp);
+ }
+
+ template <typename T, typename U, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> unProject
+ (
+ tvec3<T, P> const & win,
+ tmat4x4<T, P> const & model,
+ tmat4x4<T, P> const & proj,
+ tvec4<U, P> const & viewport
+ )
+ {
+ tmat4x4<T, P> Inverse = inverse(proj * model);
+
+ tvec4<T, P> tmp = tvec4<T, P>(win, T(1));
+ tmp.x = (tmp.x - T(viewport[0])) / T(viewport[2]);
+ tmp.y = (tmp.y - T(viewport[1])) / T(viewport[3]);
+# if GLM_DEPTH_CLIP_SPACE == GLM_DEPTH_ZERO_TO_ONE
+ tmp.x = tmp.x * static_cast<T>(2) - static_cast<T>(1);
+ tmp.y = tmp.y * static_cast<T>(2) - static_cast<T>(1);
+# else
+ tmp = tmp * static_cast<T>(2) - static_cast<T>(1);
+# endif
+
+ tvec4<T, P> obj = Inverse * tmp;
+ obj /= obj.w;
+
+ return tvec3<T, P>(obj);
+ }
+
+ template <typename T, precision P, typename U>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> pickMatrix(tvec2<T, P> const & center, tvec2<T, P> const & delta, tvec4<U, P> const & viewport)
+ {
+ assert(delta.x > static_cast<T>(0) && delta.y > static_cast<T>(0));
+ tmat4x4<T, P> Result(static_cast<T>(1));
+
+ if(!(delta.x > static_cast<T>(0) && delta.y > static_cast<T>(0)))
+ return Result; // Error
+
+ tvec3<T, P> Temp(
+ (static_cast<T>(viewport[2]) - static_cast<T>(2) * (center.x - static_cast<T>(viewport[0]))) / delta.x,
+ (static_cast<T>(viewport[3]) - static_cast<T>(2) * (center.y - static_cast<T>(viewport[1]))) / delta.y,
+ static_cast<T>(0));
+
+ // Translate and scale the picked region to the entire window
+ Result = translate(Result, Temp);
+ return scale(Result, tvec3<T, P>(static_cast<T>(viewport[2]) / delta.x, static_cast<T>(viewport[3]) / delta.y, static_cast<T>(1)));
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> lookAt(tvec3<T, P> const & eye, tvec3<T, P> const & center, tvec3<T, P> const & up)
+ {
+# if GLM_COORDINATE_SYSTEM == GLM_LEFT_HANDED
+ return lookAtLH(eye, center, up);
+# else
+ return lookAtRH(eye, center, up);
+# endif
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> lookAtRH
+ (
+ tvec3<T, P> const & eye,
+ tvec3<T, P> const & center,
+ tvec3<T, P> const & up
+ )
+ {
+ tvec3<T, P> const f(normalize(center - eye));
+ tvec3<T, P> const s(normalize(cross(f, up)));
+ tvec3<T, P> const u(cross(s, f));
+
+ tmat4x4<T, P> Result(1);
+ Result[0][0] = s.x;
+ Result[1][0] = s.y;
+ Result[2][0] = s.z;
+ Result[0][1] = u.x;
+ Result[1][1] = u.y;
+ Result[2][1] = u.z;
+ Result[0][2] =-f.x;
+ Result[1][2] =-f.y;
+ Result[2][2] =-f.z;
+ Result[3][0] =-dot(s, eye);
+ Result[3][1] =-dot(u, eye);
+ Result[3][2] = dot(f, eye);
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> lookAtLH
+ (
+ tvec3<T, P> const & eye,
+ tvec3<T, P> const & center,
+ tvec3<T, P> const & up
+ )
+ {
+ tvec3<T, P> const f(normalize(center - eye));
+ tvec3<T, P> const s(normalize(cross(up, f)));
+ tvec3<T, P> const u(cross(f, s));
+
+ tmat4x4<T, P> Result(1);
+ Result[0][0] = s.x;
+ Result[1][0] = s.y;
+ Result[2][0] = s.z;
+ Result[0][1] = u.x;
+ Result[1][1] = u.y;
+ Result[2][1] = u.z;
+ Result[0][2] = f.x;
+ Result[1][2] = f.y;
+ Result[2][2] = f.z;
+ Result[3][0] = -dot(s, eye);
+ Result[3][1] = -dot(u, eye);
+ Result[3][2] = -dot(f, eye);
+ return Result;
+ }
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtc/noise.hpp b/src/third_party/glm/glm/gtc/noise.hpp
new file mode 100644
index 0000000..aec4f18
--- /dev/null
+++ b/src/third_party/glm/glm/gtc/noise.hpp
@@ -0,0 +1,60 @@
+/// @ref gtc_noise
+/// @file glm/gtc/noise.hpp
+///
+/// @see core (dependence)
+///
+/// @defgroup gtc_noise GLM_GTC_noise
+/// @ingroup gtc
+///
+/// Defines 2D, 3D and 4D procedural noise functions
+/// Based on the work of Stefan Gustavson and Ashima Arts on "webgl-noise":
+/// https://github.com/ashima/webgl-noise
+/// Following Stefan Gustavson's paper "Simplex noise demystified":
+/// http://www.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf
+/// <glm/gtc/noise.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependencies
+#include "../detail/setup.hpp"
+#include "../detail/precision.hpp"
+#include "../detail/_noise.hpp"
+#include "../geometric.hpp"
+#include "../common.hpp"
+#include "../vector_relational.hpp"
+#include "../vec2.hpp"
+#include "../vec3.hpp"
+#include "../vec4.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTC_noise extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtc_noise
+ /// @{
+
+ /// Classic perlin noise.
+ /// @see gtc_noise
+ template <typename T, precision P, template<typename, precision> class vecType>
+ GLM_FUNC_DECL T perlin(
+ vecType<T, P> const & p);
+
+ /// Periodic perlin noise.
+ /// @see gtc_noise
+ template <typename T, precision P, template<typename, precision> class vecType>
+ GLM_FUNC_DECL T perlin(
+ vecType<T, P> const & p,
+ vecType<T, P> const & rep);
+
+ /// Simplex noise.
+ /// @see gtc_noise
+ template <typename T, precision P, template<typename, precision> class vecType>
+ GLM_FUNC_DECL T simplex(
+ vecType<T, P> const & p);
+
+ /// @}
+}//namespace glm
+
+#include "noise.inl"
diff --git a/src/third_party/glm/glm/gtc/noise.inl b/src/third_party/glm/glm/gtc/noise.inl
new file mode 100644
index 0000000..4f2731c
--- /dev/null
+++ b/src/third_party/glm/glm/gtc/noise.inl
@@ -0,0 +1,808 @@
+/// @ref gtc_noise
+/// @file glm/gtc/noise.inl
+///
+// Based on the work of Stefan Gustavson and Ashima Arts on "webgl-noise":
+// https://github.com/ashima/webgl-noise
+// Following Stefan Gustavson's paper "Simplex noise demystified":
+// http://www.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf
+
+namespace glm{
+namespace gtc
+{
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> grad4(T const & j, tvec4<T, P> const & ip)
+ {
+ tvec3<T, P> pXYZ = floor(fract(tvec3<T, P>(j) * tvec3<T, P>(ip)) * T(7)) * ip[2] - T(1);
+ T pW = static_cast<T>(1.5) - dot(abs(pXYZ), tvec3<T, P>(1));
+ tvec4<T, P> s = tvec4<T, P>(lessThan(tvec4<T, P>(pXYZ, pW), tvec4<T, P>(0.0)));
+ pXYZ = pXYZ + (tvec3<T, P>(s) * T(2) - T(1)) * s.w;
+ return tvec4<T, P>(pXYZ, pW);
+ }
+}//namespace gtc
+
+ // Classic Perlin noise
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER T perlin(tvec2<T, P> const & Position)
+ {
+ tvec4<T, P> Pi = glm::floor(tvec4<T, P>(Position.x, Position.y, Position.x, Position.y)) + tvec4<T, P>(0.0, 0.0, 1.0, 1.0);
+ tvec4<T, P> Pf = glm::fract(tvec4<T, P>(Position.x, Position.y, Position.x, Position.y)) - tvec4<T, P>(0.0, 0.0, 1.0, 1.0);
+ Pi = mod(Pi, tvec4<T, P>(289)); // To avoid truncation effects in permutation
+ tvec4<T, P> ix(Pi.x, Pi.z, Pi.x, Pi.z);
+ tvec4<T, P> iy(Pi.y, Pi.y, Pi.w, Pi.w);
+ tvec4<T, P> fx(Pf.x, Pf.z, Pf.x, Pf.z);
+ tvec4<T, P> fy(Pf.y, Pf.y, Pf.w, Pf.w);
+
+ tvec4<T, P> i = detail::permute(detail::permute(ix) + iy);
+
+ tvec4<T, P> gx = static_cast<T>(2) * glm::fract(i / T(41)) - T(1);
+ tvec4<T, P> gy = glm::abs(gx) - T(0.5);
+ tvec4<T, P> tx = glm::floor(gx + T(0.5));
+ gx = gx - tx;
+
+ tvec2<T, P> g00(gx.x, gy.x);
+ tvec2<T, P> g10(gx.y, gy.y);
+ tvec2<T, P> g01(gx.z, gy.z);
+ tvec2<T, P> g11(gx.w, gy.w);
+
+ tvec4<T, P> norm = detail::taylorInvSqrt(tvec4<T, P>(dot(g00, g00), dot(g01, g01), dot(g10, g10), dot(g11, g11)));
+ g00 *= norm.x;
+ g01 *= norm.y;
+ g10 *= norm.z;
+ g11 *= norm.w;
+
+ T n00 = dot(g00, tvec2<T, P>(fx.x, fy.x));
+ T n10 = dot(g10, tvec2<T, P>(fx.y, fy.y));
+ T n01 = dot(g01, tvec2<T, P>(fx.z, fy.z));
+ T n11 = dot(g11, tvec2<T, P>(fx.w, fy.w));
+
+ tvec2<T, P> fade_xy = detail::fade(tvec2<T, P>(Pf.x, Pf.y));
+ tvec2<T, P> n_x = mix(tvec2<T, P>(n00, n01), tvec2<T, P>(n10, n11), fade_xy.x);
+ T n_xy = mix(n_x.x, n_x.y, fade_xy.y);
+ return T(2.3) * n_xy;
+ }
+
+ // Classic Perlin noise
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER T perlin(tvec3<T, P> const & Position)
+ {
+ tvec3<T, P> Pi0 = floor(Position); // Integer part for indexing
+ tvec3<T, P> Pi1 = Pi0 + T(1); // Integer part + 1
+ Pi0 = detail::mod289(Pi0);
+ Pi1 = detail::mod289(Pi1);
+ tvec3<T, P> Pf0 = fract(Position); // Fractional part for interpolation
+ tvec3<T, P> Pf1 = Pf0 - T(1); // Fractional part - 1.0
+ tvec4<T, P> ix(Pi0.x, Pi1.x, Pi0.x, Pi1.x);
+ tvec4<T, P> iy = tvec4<T, P>(tvec2<T, P>(Pi0.y), tvec2<T, P>(Pi1.y));
+ tvec4<T, P> iz0(Pi0.z);
+ tvec4<T, P> iz1(Pi1.z);
+
+ tvec4<T, P> ixy = detail::permute(detail::permute(ix) + iy);
+ tvec4<T, P> ixy0 = detail::permute(ixy + iz0);
+ tvec4<T, P> ixy1 = detail::permute(ixy + iz1);
+
+ tvec4<T, P> gx0 = ixy0 * T(1.0 / 7.0);
+ tvec4<T, P> gy0 = fract(floor(gx0) * T(1.0 / 7.0)) - T(0.5);
+ gx0 = fract(gx0);
+ tvec4<T, P> gz0 = tvec4<T, P>(0.5) - abs(gx0) - abs(gy0);
+ tvec4<T, P> sz0 = step(gz0, tvec4<T, P>(0.0));
+ gx0 -= sz0 * (step(T(0), gx0) - T(0.5));
+ gy0 -= sz0 * (step(T(0), gy0) - T(0.5));
+
+ tvec4<T, P> gx1 = ixy1 * T(1.0 / 7.0);
+ tvec4<T, P> gy1 = fract(floor(gx1) * T(1.0 / 7.0)) - T(0.5);
+ gx1 = fract(gx1);
+ tvec4<T, P> gz1 = tvec4<T, P>(0.5) - abs(gx1) - abs(gy1);
+ tvec4<T, P> sz1 = step(gz1, tvec4<T, P>(0.0));
+ gx1 -= sz1 * (step(T(0), gx1) - T(0.5));
+ gy1 -= sz1 * (step(T(0), gy1) - T(0.5));
+
+ tvec3<T, P> g000(gx0.x, gy0.x, gz0.x);
+ tvec3<T, P> g100(gx0.y, gy0.y, gz0.y);
+ tvec3<T, P> g010(gx0.z, gy0.z, gz0.z);
+ tvec3<T, P> g110(gx0.w, gy0.w, gz0.w);
+ tvec3<T, P> g001(gx1.x, gy1.x, gz1.x);
+ tvec3<T, P> g101(gx1.y, gy1.y, gz1.y);
+ tvec3<T, P> g011(gx1.z, gy1.z, gz1.z);
+ tvec3<T, P> g111(gx1.w, gy1.w, gz1.w);
+
+ tvec4<T, P> norm0 = detail::taylorInvSqrt(tvec4<T, P>(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110)));
+ g000 *= norm0.x;
+ g010 *= norm0.y;
+ g100 *= norm0.z;
+ g110 *= norm0.w;
+ tvec4<T, P> norm1 = detail::taylorInvSqrt(tvec4<T, P>(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111)));
+ g001 *= norm1.x;
+ g011 *= norm1.y;
+ g101 *= norm1.z;
+ g111 *= norm1.w;
+
+ T n000 = dot(g000, Pf0);
+ T n100 = dot(g100, tvec3<T, P>(Pf1.x, Pf0.y, Pf0.z));
+ T n010 = dot(g010, tvec3<T, P>(Pf0.x, Pf1.y, Pf0.z));
+ T n110 = dot(g110, tvec3<T, P>(Pf1.x, Pf1.y, Pf0.z));
+ T n001 = dot(g001, tvec3<T, P>(Pf0.x, Pf0.y, Pf1.z));
+ T n101 = dot(g101, tvec3<T, P>(Pf1.x, Pf0.y, Pf1.z));
+ T n011 = dot(g011, tvec3<T, P>(Pf0.x, Pf1.y, Pf1.z));
+ T n111 = dot(g111, Pf1);
+
+ tvec3<T, P> fade_xyz = detail::fade(Pf0);
+ tvec4<T, P> n_z = mix(tvec4<T, P>(n000, n100, n010, n110), tvec4<T, P>(n001, n101, n011, n111), fade_xyz.z);
+ tvec2<T, P> n_yz = mix(tvec2<T, P>(n_z.x, n_z.y), tvec2<T, P>(n_z.z, n_z.w), fade_xyz.y);
+ T n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x);
+ return T(2.2) * n_xyz;
+ }
+ /*
+ // Classic Perlin noise
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER T perlin(tvec3<T, P> const & P)
+ {
+ tvec3<T, P> Pi0 = floor(P); // Integer part for indexing
+ tvec3<T, P> Pi1 = Pi0 + T(1); // Integer part + 1
+ Pi0 = mod(Pi0, T(289));
+ Pi1 = mod(Pi1, T(289));
+ tvec3<T, P> Pf0 = fract(P); // Fractional part for interpolation
+ tvec3<T, P> Pf1 = Pf0 - T(1); // Fractional part - 1.0
+ tvec4<T, P> ix(Pi0.x, Pi1.x, Pi0.x, Pi1.x);
+ tvec4<T, P> iy(Pi0.y, Pi0.y, Pi1.y, Pi1.y);
+ tvec4<T, P> iz0(Pi0.z);
+ tvec4<T, P> iz1(Pi1.z);
+
+ tvec4<T, P> ixy = permute(permute(ix) + iy);
+ tvec4<T, P> ixy0 = permute(ixy + iz0);
+ tvec4<T, P> ixy1 = permute(ixy + iz1);
+
+ tvec4<T, P> gx0 = ixy0 / T(7);
+ tvec4<T, P> gy0 = fract(floor(gx0) / T(7)) - T(0.5);
+ gx0 = fract(gx0);
+ tvec4<T, P> gz0 = tvec4<T, P>(0.5) - abs(gx0) - abs(gy0);
+ tvec4<T, P> sz0 = step(gz0, tvec4<T, P>(0.0));
+ gx0 -= sz0 * (step(0.0, gx0) - T(0.5));
+ gy0 -= sz0 * (step(0.0, gy0) - T(0.5));
+
+ tvec4<T, P> gx1 = ixy1 / T(7);
+ tvec4<T, P> gy1 = fract(floor(gx1) / T(7)) - T(0.5);
+ gx1 = fract(gx1);
+ tvec4<T, P> gz1 = tvec4<T, P>(0.5) - abs(gx1) - abs(gy1);
+ tvec4<T, P> sz1 = step(gz1, tvec4<T, P>(0.0));
+ gx1 -= sz1 * (step(T(0), gx1) - T(0.5));
+ gy1 -= sz1 * (step(T(0), gy1) - T(0.5));
+
+ tvec3<T, P> g000(gx0.x, gy0.x, gz0.x);
+ tvec3<T, P> g100(gx0.y, gy0.y, gz0.y);
+ tvec3<T, P> g010(gx0.z, gy0.z, gz0.z);
+ tvec3<T, P> g110(gx0.w, gy0.w, gz0.w);
+ tvec3<T, P> g001(gx1.x, gy1.x, gz1.x);
+ tvec3<T, P> g101(gx1.y, gy1.y, gz1.y);
+ tvec3<T, P> g011(gx1.z, gy1.z, gz1.z);
+ tvec3<T, P> g111(gx1.w, gy1.w, gz1.w);
+
+ tvec4<T, P> norm0 = taylorInvSqrt(tvec4<T, P>(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110)));
+ g000 *= norm0.x;
+ g010 *= norm0.y;
+ g100 *= norm0.z;
+ g110 *= norm0.w;
+ tvec4<T, P> norm1 = taylorInvSqrt(tvec4<T, P>(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111)));
+ g001 *= norm1.x;
+ g011 *= norm1.y;
+ g101 *= norm1.z;
+ g111 *= norm1.w;
+
+ T n000 = dot(g000, Pf0);
+ T n100 = dot(g100, tvec3<T, P>(Pf1.x, Pf0.y, Pf0.z));
+ T n010 = dot(g010, tvec3<T, P>(Pf0.x, Pf1.y, Pf0.z));
+ T n110 = dot(g110, tvec3<T, P>(Pf1.x, Pf1.y, Pf0.z));
+ T n001 = dot(g001, tvec3<T, P>(Pf0.x, Pf0.y, Pf1.z));
+ T n101 = dot(g101, tvec3<T, P>(Pf1.x, Pf0.y, Pf1.z));
+ T n011 = dot(g011, tvec3<T, P>(Pf0.x, Pf1.y, Pf1.z));
+ T n111 = dot(g111, Pf1);
+
+ tvec3<T, P> fade_xyz = fade(Pf0);
+ tvec4<T, P> n_z = mix(tvec4<T, P>(n000, n100, n010, n110), tvec4<T, P>(n001, n101, n011, n111), fade_xyz.z);
+ tvec2<T, P> n_yz = mix(
+ tvec2<T, P>(n_z.x, n_z.y),
+ tvec2<T, P>(n_z.z, n_z.w), fade_xyz.y);
+ T n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x);
+ return T(2.2) * n_xyz;
+ }
+ */
+ // Classic Perlin noise
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER T perlin(tvec4<T, P> const & Position)
+ {
+ tvec4<T, P> Pi0 = floor(Position); // Integer part for indexing
+ tvec4<T, P> Pi1 = Pi0 + T(1); // Integer part + 1
+ Pi0 = mod(Pi0, tvec4<T, P>(289));
+ Pi1 = mod(Pi1, tvec4<T, P>(289));
+ tvec4<T, P> Pf0 = fract(Position); // Fractional part for interpolation
+ tvec4<T, P> Pf1 = Pf0 - T(1); // Fractional part - 1.0
+ tvec4<T, P> ix(Pi0.x, Pi1.x, Pi0.x, Pi1.x);
+ tvec4<T, P> iy(Pi0.y, Pi0.y, Pi1.y, Pi1.y);
+ tvec4<T, P> iz0(Pi0.z);
+ tvec4<T, P> iz1(Pi1.z);
+ tvec4<T, P> iw0(Pi0.w);
+ tvec4<T, P> iw1(Pi1.w);
+
+ tvec4<T, P> ixy = detail::permute(detail::permute(ix) + iy);
+ tvec4<T, P> ixy0 = detail::permute(ixy + iz0);
+ tvec4<T, P> ixy1 = detail::permute(ixy + iz1);
+ tvec4<T, P> ixy00 = detail::permute(ixy0 + iw0);
+ tvec4<T, P> ixy01 = detail::permute(ixy0 + iw1);
+ tvec4<T, P> ixy10 = detail::permute(ixy1 + iw0);
+ tvec4<T, P> ixy11 = detail::permute(ixy1 + iw1);
+
+ tvec4<T, P> gx00 = ixy00 / T(7);
+ tvec4<T, P> gy00 = floor(gx00) / T(7);
+ tvec4<T, P> gz00 = floor(gy00) / T(6);
+ gx00 = fract(gx00) - T(0.5);
+ gy00 = fract(gy00) - T(0.5);
+ gz00 = fract(gz00) - T(0.5);
+ tvec4<T, P> gw00 = tvec4<T, P>(0.75) - abs(gx00) - abs(gy00) - abs(gz00);
+ tvec4<T, P> sw00 = step(gw00, tvec4<T, P>(0.0));
+ gx00 -= sw00 * (step(T(0), gx00) - T(0.5));
+ gy00 -= sw00 * (step(T(0), gy00) - T(0.5));
+
+ tvec4<T, P> gx01 = ixy01 / T(7);
+ tvec4<T, P> gy01 = floor(gx01) / T(7);
+ tvec4<T, P> gz01 = floor(gy01) / T(6);
+ gx01 = fract(gx01) - T(0.5);
+ gy01 = fract(gy01) - T(0.5);
+ gz01 = fract(gz01) - T(0.5);
+ tvec4<T, P> gw01 = tvec4<T, P>(0.75) - abs(gx01) - abs(gy01) - abs(gz01);
+ tvec4<T, P> sw01 = step(gw01, tvec4<T, P>(0.0));
+ gx01 -= sw01 * (step(T(0), gx01) - T(0.5));
+ gy01 -= sw01 * (step(T(0), gy01) - T(0.5));
+
+ tvec4<T, P> gx10 = ixy10 / T(7);
+ tvec4<T, P> gy10 = floor(gx10) / T(7);
+ tvec4<T, P> gz10 = floor(gy10) / T(6);
+ gx10 = fract(gx10) - T(0.5);
+ gy10 = fract(gy10) - T(0.5);
+ gz10 = fract(gz10) - T(0.5);
+ tvec4<T, P> gw10 = tvec4<T, P>(0.75) - abs(gx10) - abs(gy10) - abs(gz10);
+ tvec4<T, P> sw10 = step(gw10, tvec4<T, P>(0));
+ gx10 -= sw10 * (step(T(0), gx10) - T(0.5));
+ gy10 -= sw10 * (step(T(0), gy10) - T(0.5));
+
+ tvec4<T, P> gx11 = ixy11 / T(7);
+ tvec4<T, P> gy11 = floor(gx11) / T(7);
+ tvec4<T, P> gz11 = floor(gy11) / T(6);
+ gx11 = fract(gx11) - T(0.5);
+ gy11 = fract(gy11) - T(0.5);
+ gz11 = fract(gz11) - T(0.5);
+ tvec4<T, P> gw11 = tvec4<T, P>(0.75) - abs(gx11) - abs(gy11) - abs(gz11);
+ tvec4<T, P> sw11 = step(gw11, tvec4<T, P>(0.0));
+ gx11 -= sw11 * (step(T(0), gx11) - T(0.5));
+ gy11 -= sw11 * (step(T(0), gy11) - T(0.5));
+
+ tvec4<T, P> g0000(gx00.x, gy00.x, gz00.x, gw00.x);
+ tvec4<T, P> g1000(gx00.y, gy00.y, gz00.y, gw00.y);
+ tvec4<T, P> g0100(gx00.z, gy00.z, gz00.z, gw00.z);
+ tvec4<T, P> g1100(gx00.w, gy00.w, gz00.w, gw00.w);
+ tvec4<T, P> g0010(gx10.x, gy10.x, gz10.x, gw10.x);
+ tvec4<T, P> g1010(gx10.y, gy10.y, gz10.y, gw10.y);
+ tvec4<T, P> g0110(gx10.z, gy10.z, gz10.z, gw10.z);
+ tvec4<T, P> g1110(gx10.w, gy10.w, gz10.w, gw10.w);
+ tvec4<T, P> g0001(gx01.x, gy01.x, gz01.x, gw01.x);
+ tvec4<T, P> g1001(gx01.y, gy01.y, gz01.y, gw01.y);
+ tvec4<T, P> g0101(gx01.z, gy01.z, gz01.z, gw01.z);
+ tvec4<T, P> g1101(gx01.w, gy01.w, gz01.w, gw01.w);
+ tvec4<T, P> g0011(gx11.x, gy11.x, gz11.x, gw11.x);
+ tvec4<T, P> g1011(gx11.y, gy11.y, gz11.y, gw11.y);
+ tvec4<T, P> g0111(gx11.z, gy11.z, gz11.z, gw11.z);
+ tvec4<T, P> g1111(gx11.w, gy11.w, gz11.w, gw11.w);
+
+ tvec4<T, P> norm00 = detail::taylorInvSqrt(tvec4<T, P>(dot(g0000, g0000), dot(g0100, g0100), dot(g1000, g1000), dot(g1100, g1100)));
+ g0000 *= norm00.x;
+ g0100 *= norm00.y;
+ g1000 *= norm00.z;
+ g1100 *= norm00.w;
+
+ tvec4<T, P> norm01 = detail::taylorInvSqrt(tvec4<T, P>(dot(g0001, g0001), dot(g0101, g0101), dot(g1001, g1001), dot(g1101, g1101)));
+ g0001 *= norm01.x;
+ g0101 *= norm01.y;
+ g1001 *= norm01.z;
+ g1101 *= norm01.w;
+
+ tvec4<T, P> norm10 = detail::taylorInvSqrt(tvec4<T, P>(dot(g0010, g0010), dot(g0110, g0110), dot(g1010, g1010), dot(g1110, g1110)));
+ g0010 *= norm10.x;
+ g0110 *= norm10.y;
+ g1010 *= norm10.z;
+ g1110 *= norm10.w;
+
+ tvec4<T, P> norm11 = detail::taylorInvSqrt(tvec4<T, P>(dot(g0011, g0011), dot(g0111, g0111), dot(g1011, g1011), dot(g1111, g1111)));
+ g0011 *= norm11.x;
+ g0111 *= norm11.y;
+ g1011 *= norm11.z;
+ g1111 *= norm11.w;
+
+ T n0000 = dot(g0000, Pf0);
+ T n1000 = dot(g1000, tvec4<T, P>(Pf1.x, Pf0.y, Pf0.z, Pf0.w));
+ T n0100 = dot(g0100, tvec4<T, P>(Pf0.x, Pf1.y, Pf0.z, Pf0.w));
+ T n1100 = dot(g1100, tvec4<T, P>(Pf1.x, Pf1.y, Pf0.z, Pf0.w));
+ T n0010 = dot(g0010, tvec4<T, P>(Pf0.x, Pf0.y, Pf1.z, Pf0.w));
+ T n1010 = dot(g1010, tvec4<T, P>(Pf1.x, Pf0.y, Pf1.z, Pf0.w));
+ T n0110 = dot(g0110, tvec4<T, P>(Pf0.x, Pf1.y, Pf1.z, Pf0.w));
+ T n1110 = dot(g1110, tvec4<T, P>(Pf1.x, Pf1.y, Pf1.z, Pf0.w));
+ T n0001 = dot(g0001, tvec4<T, P>(Pf0.x, Pf0.y, Pf0.z, Pf1.w));
+ T n1001 = dot(g1001, tvec4<T, P>(Pf1.x, Pf0.y, Pf0.z, Pf1.w));
+ T n0101 = dot(g0101, tvec4<T, P>(Pf0.x, Pf1.y, Pf0.z, Pf1.w));
+ T n1101 = dot(g1101, tvec4<T, P>(Pf1.x, Pf1.y, Pf0.z, Pf1.w));
+ T n0011 = dot(g0011, tvec4<T, P>(Pf0.x, Pf0.y, Pf1.z, Pf1.w));
+ T n1011 = dot(g1011, tvec4<T, P>(Pf1.x, Pf0.y, Pf1.z, Pf1.w));
+ T n0111 = dot(g0111, tvec4<T, P>(Pf0.x, Pf1.y, Pf1.z, Pf1.w));
+ T n1111 = dot(g1111, Pf1);
+
+ tvec4<T, P> fade_xyzw = detail::fade(Pf0);
+ tvec4<T, P> n_0w = mix(tvec4<T, P>(n0000, n1000, n0100, n1100), tvec4<T, P>(n0001, n1001, n0101, n1101), fade_xyzw.w);
+ tvec4<T, P> n_1w = mix(tvec4<T, P>(n0010, n1010, n0110, n1110), tvec4<T, P>(n0011, n1011, n0111, n1111), fade_xyzw.w);
+ tvec4<T, P> n_zw = mix(n_0w, n_1w, fade_xyzw.z);
+ tvec2<T, P> n_yzw = mix(tvec2<T, P>(n_zw.x, n_zw.y), tvec2<T, P>(n_zw.z, n_zw.w), fade_xyzw.y);
+ T n_xyzw = mix(n_yzw.x, n_yzw.y, fade_xyzw.x);
+ return T(2.2) * n_xyzw;
+ }
+
+ // Classic Perlin noise, periodic variant
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER T perlin(tvec2<T, P> const & Position, tvec2<T, P> const & rep)
+ {
+ tvec4<T, P> Pi = floor(tvec4<T, P>(Position.x, Position.y, Position.x, Position.y)) + tvec4<T, P>(0.0, 0.0, 1.0, 1.0);
+ tvec4<T, P> Pf = fract(tvec4<T, P>(Position.x, Position.y, Position.x, Position.y)) - tvec4<T, P>(0.0, 0.0, 1.0, 1.0);
+ Pi = mod(Pi, tvec4<T, P>(rep.x, rep.y, rep.x, rep.y)); // To create noise with explicit period
+ Pi = mod(Pi, tvec4<T, P>(289)); // To avoid truncation effects in permutation
+ tvec4<T, P> ix(Pi.x, Pi.z, Pi.x, Pi.z);
+ tvec4<T, P> iy(Pi.y, Pi.y, Pi.w, Pi.w);
+ tvec4<T, P> fx(Pf.x, Pf.z, Pf.x, Pf.z);
+ tvec4<T, P> fy(Pf.y, Pf.y, Pf.w, Pf.w);
+
+ tvec4<T, P> i = detail::permute(detail::permute(ix) + iy);
+
+ tvec4<T, P> gx = static_cast<T>(2) * fract(i / T(41)) - T(1);
+ tvec4<T, P> gy = abs(gx) - T(0.5);
+ tvec4<T, P> tx = floor(gx + T(0.5));
+ gx = gx - tx;
+
+ tvec2<T, P> g00(gx.x, gy.x);
+ tvec2<T, P> g10(gx.y, gy.y);
+ tvec2<T, P> g01(gx.z, gy.z);
+ tvec2<T, P> g11(gx.w, gy.w);
+
+ tvec4<T, P> norm = detail::taylorInvSqrt(tvec4<T, P>(dot(g00, g00), dot(g01, g01), dot(g10, g10), dot(g11, g11)));
+ g00 *= norm.x;
+ g01 *= norm.y;
+ g10 *= norm.z;
+ g11 *= norm.w;
+
+ T n00 = dot(g00, tvec2<T, P>(fx.x, fy.x));
+ T n10 = dot(g10, tvec2<T, P>(fx.y, fy.y));
+ T n01 = dot(g01, tvec2<T, P>(fx.z, fy.z));
+ T n11 = dot(g11, tvec2<T, P>(fx.w, fy.w));
+
+ tvec2<T, P> fade_xy = detail::fade(tvec2<T, P>(Pf.x, Pf.y));
+ tvec2<T, P> n_x = mix(tvec2<T, P>(n00, n01), tvec2<T, P>(n10, n11), fade_xy.x);
+ T n_xy = mix(n_x.x, n_x.y, fade_xy.y);
+ return T(2.3) * n_xy;
+ }
+
+ // Classic Perlin noise, periodic variant
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER T perlin(tvec3<T, P> const & Position, tvec3<T, P> const & rep)
+ {
+ tvec3<T, P> Pi0 = mod(floor(Position), rep); // Integer part, modulo period
+ tvec3<T, P> Pi1 = mod(Pi0 + tvec3<T, P>(T(1)), rep); // Integer part + 1, mod period
+ Pi0 = mod(Pi0, tvec3<T, P>(289));
+ Pi1 = mod(Pi1, tvec3<T, P>(289));
+ tvec3<T, P> Pf0 = fract(Position); // Fractional part for interpolation
+ tvec3<T, P> Pf1 = Pf0 - tvec3<T, P>(T(1)); // Fractional part - 1.0
+ tvec4<T, P> ix = tvec4<T, P>(Pi0.x, Pi1.x, Pi0.x, Pi1.x);
+ tvec4<T, P> iy = tvec4<T, P>(Pi0.y, Pi0.y, Pi1.y, Pi1.y);
+ tvec4<T, P> iz0(Pi0.z);
+ tvec4<T, P> iz1(Pi1.z);
+
+ tvec4<T, P> ixy = detail::permute(detail::permute(ix) + iy);
+ tvec4<T, P> ixy0 = detail::permute(ixy + iz0);
+ tvec4<T, P> ixy1 = detail::permute(ixy + iz1);
+
+ tvec4<T, P> gx0 = ixy0 / T(7);
+ tvec4<T, P> gy0 = fract(floor(gx0) / T(7)) - T(0.5);
+ gx0 = fract(gx0);
+ tvec4<T, P> gz0 = tvec4<T, P>(0.5) - abs(gx0) - abs(gy0);
+ tvec4<T, P> sz0 = step(gz0, tvec4<T, P>(0));
+ gx0 -= sz0 * (step(T(0), gx0) - T(0.5));
+ gy0 -= sz0 * (step(T(0), gy0) - T(0.5));
+
+ tvec4<T, P> gx1 = ixy1 / T(7);
+ tvec4<T, P> gy1 = fract(floor(gx1) / T(7)) - T(0.5);
+ gx1 = fract(gx1);
+ tvec4<T, P> gz1 = tvec4<T, P>(0.5) - abs(gx1) - abs(gy1);
+ tvec4<T, P> sz1 = step(gz1, tvec4<T, P>(T(0)));
+ gx1 -= sz1 * (step(T(0), gx1) - T(0.5));
+ gy1 -= sz1 * (step(T(0), gy1) - T(0.5));
+
+ tvec3<T, P> g000 = tvec3<T, P>(gx0.x, gy0.x, gz0.x);
+ tvec3<T, P> g100 = tvec3<T, P>(gx0.y, gy0.y, gz0.y);
+ tvec3<T, P> g010 = tvec3<T, P>(gx0.z, gy0.z, gz0.z);
+ tvec3<T, P> g110 = tvec3<T, P>(gx0.w, gy0.w, gz0.w);
+ tvec3<T, P> g001 = tvec3<T, P>(gx1.x, gy1.x, gz1.x);
+ tvec3<T, P> g101 = tvec3<T, P>(gx1.y, gy1.y, gz1.y);
+ tvec3<T, P> g011 = tvec3<T, P>(gx1.z, gy1.z, gz1.z);
+ tvec3<T, P> g111 = tvec3<T, P>(gx1.w, gy1.w, gz1.w);
+
+ tvec4<T, P> norm0 = detail::taylorInvSqrt(tvec4<T, P>(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110)));
+ g000 *= norm0.x;
+ g010 *= norm0.y;
+ g100 *= norm0.z;
+ g110 *= norm0.w;
+ tvec4<T, P> norm1 = detail::taylorInvSqrt(tvec4<T, P>(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111)));
+ g001 *= norm1.x;
+ g011 *= norm1.y;
+ g101 *= norm1.z;
+ g111 *= norm1.w;
+
+ T n000 = dot(g000, Pf0);
+ T n100 = dot(g100, tvec3<T, P>(Pf1.x, Pf0.y, Pf0.z));
+ T n010 = dot(g010, tvec3<T, P>(Pf0.x, Pf1.y, Pf0.z));
+ T n110 = dot(g110, tvec3<T, P>(Pf1.x, Pf1.y, Pf0.z));
+ T n001 = dot(g001, tvec3<T, P>(Pf0.x, Pf0.y, Pf1.z));
+ T n101 = dot(g101, tvec3<T, P>(Pf1.x, Pf0.y, Pf1.z));
+ T n011 = dot(g011, tvec3<T, P>(Pf0.x, Pf1.y, Pf1.z));
+ T n111 = dot(g111, Pf1);
+
+ tvec3<T, P> fade_xyz = detail::fade(Pf0);
+ tvec4<T, P> n_z = mix(tvec4<T, P>(n000, n100, n010, n110), tvec4<T, P>(n001, n101, n011, n111), fade_xyz.z);
+ tvec2<T, P> n_yz = mix(tvec2<T, P>(n_z.x, n_z.y), tvec2<T, P>(n_z.z, n_z.w), fade_xyz.y);
+ T n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x);
+ return T(2.2) * n_xyz;
+ }
+
+ // Classic Perlin noise, periodic version
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER T perlin(tvec4<T, P> const & Position, tvec4<T, P> const & rep)
+ {
+ tvec4<T, P> Pi0 = mod(floor(Position), rep); // Integer part modulo rep
+ tvec4<T, P> Pi1 = mod(Pi0 + T(1), rep); // Integer part + 1 mod rep
+ tvec4<T, P> Pf0 = fract(Position); // Fractional part for interpolation
+ tvec4<T, P> Pf1 = Pf0 - T(1); // Fractional part - 1.0
+ tvec4<T, P> ix = tvec4<T, P>(Pi0.x, Pi1.x, Pi0.x, Pi1.x);
+ tvec4<T, P> iy = tvec4<T, P>(Pi0.y, Pi0.y, Pi1.y, Pi1.y);
+ tvec4<T, P> iz0(Pi0.z);
+ tvec4<T, P> iz1(Pi1.z);
+ tvec4<T, P> iw0(Pi0.w);
+ tvec4<T, P> iw1(Pi1.w);
+
+ tvec4<T, P> ixy = detail::permute(detail::permute(ix) + iy);
+ tvec4<T, P> ixy0 = detail::permute(ixy + iz0);
+ tvec4<T, P> ixy1 = detail::permute(ixy + iz1);
+ tvec4<T, P> ixy00 = detail::permute(ixy0 + iw0);
+ tvec4<T, P> ixy01 = detail::permute(ixy0 + iw1);
+ tvec4<T, P> ixy10 = detail::permute(ixy1 + iw0);
+ tvec4<T, P> ixy11 = detail::permute(ixy1 + iw1);
+
+ tvec4<T, P> gx00 = ixy00 / T(7);
+ tvec4<T, P> gy00 = floor(gx00) / T(7);
+ tvec4<T, P> gz00 = floor(gy00) / T(6);
+ gx00 = fract(gx00) - T(0.5);
+ gy00 = fract(gy00) - T(0.5);
+ gz00 = fract(gz00) - T(0.5);
+ tvec4<T, P> gw00 = tvec4<T, P>(0.75) - abs(gx00) - abs(gy00) - abs(gz00);
+ tvec4<T, P> sw00 = step(gw00, tvec4<T, P>(0));
+ gx00 -= sw00 * (step(T(0), gx00) - T(0.5));
+ gy00 -= sw00 * (step(T(0), gy00) - T(0.5));
+
+ tvec4<T, P> gx01 = ixy01 / T(7);
+ tvec4<T, P> gy01 = floor(gx01) / T(7);
+ tvec4<T, P> gz01 = floor(gy01) / T(6);
+ gx01 = fract(gx01) - T(0.5);
+ gy01 = fract(gy01) - T(0.5);
+ gz01 = fract(gz01) - T(0.5);
+ tvec4<T, P> gw01 = tvec4<T, P>(0.75) - abs(gx01) - abs(gy01) - abs(gz01);
+ tvec4<T, P> sw01 = step(gw01, tvec4<T, P>(0.0));
+ gx01 -= sw01 * (step(T(0), gx01) - T(0.5));
+ gy01 -= sw01 * (step(T(0), gy01) - T(0.5));
+
+ tvec4<T, P> gx10 = ixy10 / T(7);
+ tvec4<T, P> gy10 = floor(gx10) / T(7);
+ tvec4<T, P> gz10 = floor(gy10) / T(6);
+ gx10 = fract(gx10) - T(0.5);
+ gy10 = fract(gy10) - T(0.5);
+ gz10 = fract(gz10) - T(0.5);
+ tvec4<T, P> gw10 = tvec4<T, P>(0.75) - abs(gx10) - abs(gy10) - abs(gz10);
+ tvec4<T, P> sw10 = step(gw10, tvec4<T, P>(0.0));
+ gx10 -= sw10 * (step(T(0), gx10) - T(0.5));
+ gy10 -= sw10 * (step(T(0), gy10) - T(0.5));
+
+ tvec4<T, P> gx11 = ixy11 / T(7);
+ tvec4<T, P> gy11 = floor(gx11) / T(7);
+ tvec4<T, P> gz11 = floor(gy11) / T(6);
+ gx11 = fract(gx11) - T(0.5);
+ gy11 = fract(gy11) - T(0.5);
+ gz11 = fract(gz11) - T(0.5);
+ tvec4<T, P> gw11 = tvec4<T, P>(0.75) - abs(gx11) - abs(gy11) - abs(gz11);
+ tvec4<T, P> sw11 = step(gw11, tvec4<T, P>(T(0)));
+ gx11 -= sw11 * (step(T(0), gx11) - T(0.5));
+ gy11 -= sw11 * (step(T(0), gy11) - T(0.5));
+
+ tvec4<T, P> g0000(gx00.x, gy00.x, gz00.x, gw00.x);
+ tvec4<T, P> g1000(gx00.y, gy00.y, gz00.y, gw00.y);
+ tvec4<T, P> g0100(gx00.z, gy00.z, gz00.z, gw00.z);
+ tvec4<T, P> g1100(gx00.w, gy00.w, gz00.w, gw00.w);
+ tvec4<T, P> g0010(gx10.x, gy10.x, gz10.x, gw10.x);
+ tvec4<T, P> g1010(gx10.y, gy10.y, gz10.y, gw10.y);
+ tvec4<T, P> g0110(gx10.z, gy10.z, gz10.z, gw10.z);
+ tvec4<T, P> g1110(gx10.w, gy10.w, gz10.w, gw10.w);
+ tvec4<T, P> g0001(gx01.x, gy01.x, gz01.x, gw01.x);
+ tvec4<T, P> g1001(gx01.y, gy01.y, gz01.y, gw01.y);
+ tvec4<T, P> g0101(gx01.z, gy01.z, gz01.z, gw01.z);
+ tvec4<T, P> g1101(gx01.w, gy01.w, gz01.w, gw01.w);
+ tvec4<T, P> g0011(gx11.x, gy11.x, gz11.x, gw11.x);
+ tvec4<T, P> g1011(gx11.y, gy11.y, gz11.y, gw11.y);
+ tvec4<T, P> g0111(gx11.z, gy11.z, gz11.z, gw11.z);
+ tvec4<T, P> g1111(gx11.w, gy11.w, gz11.w, gw11.w);
+
+ tvec4<T, P> norm00 = detail::taylorInvSqrt(tvec4<T, P>(dot(g0000, g0000), dot(g0100, g0100), dot(g1000, g1000), dot(g1100, g1100)));
+ g0000 *= norm00.x;
+ g0100 *= norm00.y;
+ g1000 *= norm00.z;
+ g1100 *= norm00.w;
+
+ tvec4<T, P> norm01 = detail::taylorInvSqrt(tvec4<T, P>(dot(g0001, g0001), dot(g0101, g0101), dot(g1001, g1001), dot(g1101, g1101)));
+ g0001 *= norm01.x;
+ g0101 *= norm01.y;
+ g1001 *= norm01.z;
+ g1101 *= norm01.w;
+
+ tvec4<T, P> norm10 = detail::taylorInvSqrt(tvec4<T, P>(dot(g0010, g0010), dot(g0110, g0110), dot(g1010, g1010), dot(g1110, g1110)));
+ g0010 *= norm10.x;
+ g0110 *= norm10.y;
+ g1010 *= norm10.z;
+ g1110 *= norm10.w;
+
+ tvec4<T, P> norm11 = detail::taylorInvSqrt(tvec4<T, P>(dot(g0011, g0011), dot(g0111, g0111), dot(g1011, g1011), dot(g1111, g1111)));
+ g0011 *= norm11.x;
+ g0111 *= norm11.y;
+ g1011 *= norm11.z;
+ g1111 *= norm11.w;
+
+ T n0000 = dot(g0000, Pf0);
+ T n1000 = dot(g1000, tvec4<T, P>(Pf1.x, Pf0.y, Pf0.z, Pf0.w));
+ T n0100 = dot(g0100, tvec4<T, P>(Pf0.x, Pf1.y, Pf0.z, Pf0.w));
+ T n1100 = dot(g1100, tvec4<T, P>(Pf1.x, Pf1.y, Pf0.z, Pf0.w));
+ T n0010 = dot(g0010, tvec4<T, P>(Pf0.x, Pf0.y, Pf1.z, Pf0.w));
+ T n1010 = dot(g1010, tvec4<T, P>(Pf1.x, Pf0.y, Pf1.z, Pf0.w));
+ T n0110 = dot(g0110, tvec4<T, P>(Pf0.x, Pf1.y, Pf1.z, Pf0.w));
+ T n1110 = dot(g1110, tvec4<T, P>(Pf1.x, Pf1.y, Pf1.z, Pf0.w));
+ T n0001 = dot(g0001, tvec4<T, P>(Pf0.x, Pf0.y, Pf0.z, Pf1.w));
+ T n1001 = dot(g1001, tvec4<T, P>(Pf1.x, Pf0.y, Pf0.z, Pf1.w));
+ T n0101 = dot(g0101, tvec4<T, P>(Pf0.x, Pf1.y, Pf0.z, Pf1.w));
+ T n1101 = dot(g1101, tvec4<T, P>(Pf1.x, Pf1.y, Pf0.z, Pf1.w));
+ T n0011 = dot(g0011, tvec4<T, P>(Pf0.x, Pf0.y, Pf1.z, Pf1.w));
+ T n1011 = dot(g1011, tvec4<T, P>(Pf1.x, Pf0.y, Pf1.z, Pf1.w));
+ T n0111 = dot(g0111, tvec4<T, P>(Pf0.x, Pf1.y, Pf1.z, Pf1.w));
+ T n1111 = dot(g1111, Pf1);
+
+ tvec4<T, P> fade_xyzw = detail::fade(Pf0);
+ tvec4<T, P> n_0w = mix(tvec4<T, P>(n0000, n1000, n0100, n1100), tvec4<T, P>(n0001, n1001, n0101, n1101), fade_xyzw.w);
+ tvec4<T, P> n_1w = mix(tvec4<T, P>(n0010, n1010, n0110, n1110), tvec4<T, P>(n0011, n1011, n0111, n1111), fade_xyzw.w);
+ tvec4<T, P> n_zw = mix(n_0w, n_1w, fade_xyzw.z);
+ tvec2<T, P> n_yzw = mix(tvec2<T, P>(n_zw.x, n_zw.y), tvec2<T, P>(n_zw.z, n_zw.w), fade_xyzw.y);
+ T n_xyzw = mix(n_yzw.x, n_yzw.y, fade_xyzw.x);
+ return T(2.2) * n_xyzw;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER T simplex(glm::tvec2<T, P> const & v)
+ {
+ tvec4<T, P> const C = tvec4<T, P>(
+ T( 0.211324865405187), // (3.0 - sqrt(3.0)) / 6.0
+ T( 0.366025403784439), // 0.5 * (sqrt(3.0) - 1.0)
+ T(-0.577350269189626), // -1.0 + 2.0 * C.x
+ T( 0.024390243902439)); // 1.0 / 41.0
+
+ // First corner
+ tvec2<T, P> i = floor(v + dot(v, tvec2<T, P>(C[1])));
+ tvec2<T, P> x0 = v - i + dot(i, tvec2<T, P>(C[0]));
+
+ // Other corners
+ //i1.x = step( x0.y, x0.x ); // x0.x > x0.y ? 1.0 : 0.0
+ //i1.y = 1.0 - i1.x;
+ tvec2<T, P> i1 = (x0.x > x0.y) ? tvec2<T, P>(1, 0) : tvec2<T, P>(0, 1);
+ // x0 = x0 - 0.0 + 0.0 * C.xx ;
+ // x1 = x0 - i1 + 1.0 * C.xx ;
+ // x2 = x0 - 1.0 + 2.0 * C.xx ;
+ tvec4<T, P> x12 = tvec4<T, P>(x0.x, x0.y, x0.x, x0.y) + tvec4<T, P>(C.x, C.x, C.z, C.z);
+ x12 = tvec4<T, P>(tvec2<T, P>(x12) - i1, x12.z, x12.w);
+
+ // Permutations
+ i = mod(i, tvec2<T, P>(289)); // Avoid truncation effects in permutation
+ tvec3<T, P> p = detail::permute(
+ detail::permute(i.y + tvec3<T, P>(T(0), i1.y, T(1)))
+ + i.x + tvec3<T, P>(T(0), i1.x, T(1)));
+
+ tvec3<T, P> m = max(tvec3<T, P>(0.5) - tvec3<T, P>(
+ dot(x0, x0),
+ dot(tvec2<T, P>(x12.x, x12.y), tvec2<T, P>(x12.x, x12.y)),
+ dot(tvec2<T, P>(x12.z, x12.w), tvec2<T, P>(x12.z, x12.w))), tvec3<T, P>(0));
+ m = m * m ;
+ m = m * m ;
+
+ // Gradients: 41 points uniformly over a line, mapped onto a diamond.
+ // The ring size 17*17 = 289 is close to a multiple of 41 (41*7 = 287)
+
+ tvec3<T, P> x = static_cast<T>(2) * fract(p * C.w) - T(1);
+ tvec3<T, P> h = abs(x) - T(0.5);
+ tvec3<T, P> ox = floor(x + T(0.5));
+ tvec3<T, P> a0 = x - ox;
+
+ // Normalise gradients implicitly by scaling m
+ // Inlined for speed: m *= taylorInvSqrt( a0*a0 + h*h );
+ m *= static_cast<T>(1.79284291400159) - T(0.85373472095314) * (a0 * a0 + h * h);
+
+ // Compute final noise value at P
+ tvec3<T, P> g;
+ g.x = a0.x * x0.x + h.x * x0.y;
+ //g.yz = a0.yz * x12.xz + h.yz * x12.yw;
+ g.y = a0.y * x12.x + h.y * x12.y;
+ g.z = a0.z * x12.z + h.z * x12.w;
+ return T(130) * dot(m, g);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER T simplex(tvec3<T, P> const & v)
+ {
+ tvec2<T, P> const C(1.0 / 6.0, 1.0 / 3.0);
+ tvec4<T, P> const D(0.0, 0.5, 1.0, 2.0);
+
+ // First corner
+ tvec3<T, P> i(floor(v + dot(v, tvec3<T, P>(C.y))));
+ tvec3<T, P> x0(v - i + dot(i, tvec3<T, P>(C.x)));
+
+ // Other corners
+ tvec3<T, P> g(step(tvec3<T, P>(x0.y, x0.z, x0.x), x0));
+ tvec3<T, P> l(T(1) - g);
+ tvec3<T, P> i1(min(g, tvec3<T, P>(l.z, l.x, l.y)));
+ tvec3<T, P> i2(max(g, tvec3<T, P>(l.z, l.x, l.y)));
+
+ // x0 = x0 - 0.0 + 0.0 * C.xxx;
+ // x1 = x0 - i1 + 1.0 * C.xxx;
+ // x2 = x0 - i2 + 2.0 * C.xxx;
+ // x3 = x0 - 1.0 + 3.0 * C.xxx;
+ tvec3<T, P> x1(x0 - i1 + C.x);
+ tvec3<T, P> x2(x0 - i2 + C.y); // 2.0*C.x = 1/3 = C.y
+ tvec3<T, P> x3(x0 - D.y); // -1.0+3.0*C.x = -0.5 = -D.y
+
+ // Permutations
+ i = detail::mod289(i);
+ tvec4<T, P> p(detail::permute(detail::permute(detail::permute(
+ i.z + tvec4<T, P>(T(0), i1.z, i2.z, T(1))) +
+ i.y + tvec4<T, P>(T(0), i1.y, i2.y, T(1))) +
+ i.x + tvec4<T, P>(T(0), i1.x, i2.x, T(1))));
+
+ // Gradients: 7x7 points over a square, mapped onto an octahedron.
+ // The ring size 17*17 = 289 is close to a multiple of 49 (49*6 = 294)
+ T n_ = static_cast<T>(0.142857142857); // 1.0/7.0
+ tvec3<T, P> ns(n_ * tvec3<T, P>(D.w, D.y, D.z) - tvec3<T, P>(D.x, D.z, D.x));
+
+ tvec4<T, P> j(p - T(49) * floor(p * ns.z * ns.z)); // mod(p,7*7)
+
+ tvec4<T, P> x_(floor(j * ns.z));
+ tvec4<T, P> y_(floor(j - T(7) * x_)); // mod(j,N)
+
+ tvec4<T, P> x(x_ * ns.x + ns.y);
+ tvec4<T, P> y(y_ * ns.x + ns.y);
+ tvec4<T, P> h(T(1) - abs(x) - abs(y));
+
+ tvec4<T, P> b0(x.x, x.y, y.x, y.y);
+ tvec4<T, P> b1(x.z, x.w, y.z, y.w);
+
+ // vec4 s0 = vec4(lessThan(b0,0.0))*2.0 - 1.0;
+ // vec4 s1 = vec4(lessThan(b1,0.0))*2.0 - 1.0;
+ tvec4<T, P> s0(floor(b0) * T(2) + T(1));
+ tvec4<T, P> s1(floor(b1) * T(2) + T(1));
+ tvec4<T, P> sh(-step(h, tvec4<T, P>(0.0)));
+
+ tvec4<T, P> a0 = tvec4<T, P>(b0.x, b0.z, b0.y, b0.w) + tvec4<T, P>(s0.x, s0.z, s0.y, s0.w) * tvec4<T, P>(sh.x, sh.x, sh.y, sh.y);
+ tvec4<T, P> a1 = tvec4<T, P>(b1.x, b1.z, b1.y, b1.w) + tvec4<T, P>(s1.x, s1.z, s1.y, s1.w) * tvec4<T, P>(sh.z, sh.z, sh.w, sh.w);
+
+ tvec3<T, P> p0(a0.x, a0.y, h.x);
+ tvec3<T, P> p1(a0.z, a0.w, h.y);
+ tvec3<T, P> p2(a1.x, a1.y, h.z);
+ tvec3<T, P> p3(a1.z, a1.w, h.w);
+
+ // Normalise gradients
+ tvec4<T, P> norm = detail::taylorInvSqrt(tvec4<T, P>(dot(p0, p0), dot(p1, p1), dot(p2, p2), dot(p3, p3)));
+ p0 *= norm.x;
+ p1 *= norm.y;
+ p2 *= norm.z;
+ p3 *= norm.w;
+
+ // Mix final noise value
+ tvec4<T, P> m = max(T(0.6) - tvec4<T, P>(dot(x0, x0), dot(x1, x1), dot(x2, x2), dot(x3, x3)), tvec4<T, P>(0));
+ m = m * m;
+ return T(42) * dot(m * m, tvec4<T, P>(dot(p0, x0), dot(p1, x1), dot(p2, x2), dot(p3, x3)));
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER T simplex(tvec4<T, P> const & v)
+ {
+ tvec4<T, P> const C(
+ 0.138196601125011, // (5 - sqrt(5))/20 G4
+ 0.276393202250021, // 2 * G4
+ 0.414589803375032, // 3 * G4
+ -0.447213595499958); // -1 + 4 * G4
+
+ // (sqrt(5) - 1)/4 = F4, used once below
+ T const F4 = static_cast<T>(0.309016994374947451);
+
+ // First corner
+ tvec4<T, P> i = floor(v + dot(v, vec4(F4)));
+ tvec4<T, P> x0 = v - i + dot(i, vec4(C.x));
+
+ // Other corners
+
+ // Rank sorting originally contributed by Bill Licea-Kane, AMD (formerly ATI)
+ tvec4<T, P> i0;
+ tvec3<T, P> isX = step(tvec3<T, P>(x0.y, x0.z, x0.w), tvec3<T, P>(x0.x));
+ tvec3<T, P> isYZ = step(tvec3<T, P>(x0.z, x0.w, x0.w), tvec3<T, P>(x0.y, x0.y, x0.z));
+ // i0.x = dot(isX, vec3(1.0));
+ //i0.x = isX.x + isX.y + isX.z;
+ //i0.yzw = static_cast<T>(1) - isX;
+ i0 = tvec4<T, P>(isX.x + isX.y + isX.z, T(1) - isX);
+ // i0.y += dot(isYZ.xy, vec2(1.0));
+ i0.y += isYZ.x + isYZ.y;
+ //i0.zw += 1.0 - tvec2<T, P>(isYZ.x, isYZ.y);
+ i0.z += static_cast<T>(1) - isYZ.x;
+ i0.w += static_cast<T>(1) - isYZ.y;
+ i0.z += isYZ.z;
+ i0.w += static_cast<T>(1) - isYZ.z;
+
+ // i0 now contains the unique values 0,1,2,3 in each channel
+ tvec4<T, P> i3 = clamp(i0, T(0), T(1));
+ tvec4<T, P> i2 = clamp(i0 - T(1), T(0), T(1));
+ tvec4<T, P> i1 = clamp(i0 - T(2), T(0), T(1));
+
+ // x0 = x0 - 0.0 + 0.0 * C.xxxx
+ // x1 = x0 - i1 + 0.0 * C.xxxx
+ // x2 = x0 - i2 + 0.0 * C.xxxx
+ // x3 = x0 - i3 + 0.0 * C.xxxx
+ // x4 = x0 - 1.0 + 4.0 * C.xxxx
+ tvec4<T, P> x1 = x0 - i1 + C.x;
+ tvec4<T, P> x2 = x0 - i2 + C.y;
+ tvec4<T, P> x3 = x0 - i3 + C.z;
+ tvec4<T, P> x4 = x0 + C.w;
+
+ // Permutations
+ i = mod(i, tvec4<T, P>(289));
+ T j0 = detail::permute(detail::permute(detail::permute(detail::permute(i.w) + i.z) + i.y) + i.x);
+ tvec4<T, P> j1 = detail::permute(detail::permute(detail::permute(detail::permute(
+ i.w + tvec4<T, P>(i1.w, i2.w, i3.w, T(1))) +
+ i.z + tvec4<T, P>(i1.z, i2.z, i3.z, T(1))) +
+ i.y + tvec4<T, P>(i1.y, i2.y, i3.y, T(1))) +
+ i.x + tvec4<T, P>(i1.x, i2.x, i3.x, T(1)));
+
+ // Gradients: 7x7x6 points over a cube, mapped onto a 4-cross polytope
+ // 7*7*6 = 294, which is close to the ring size 17*17 = 289.
+ tvec4<T, P> ip = tvec4<T, P>(T(1) / T(294), T(1) / T(49), T(1) / T(7), T(0));
+
+ tvec4<T, P> p0 = gtc::grad4(j0, ip);
+ tvec4<T, P> p1 = gtc::grad4(j1.x, ip);
+ tvec4<T, P> p2 = gtc::grad4(j1.y, ip);
+ tvec4<T, P> p3 = gtc::grad4(j1.z, ip);
+ tvec4<T, P> p4 = gtc::grad4(j1.w, ip);
+
+ // Normalise gradients
+ tvec4<T, P> norm = detail::taylorInvSqrt(tvec4<T, P>(dot(p0, p0), dot(p1, p1), dot(p2, p2), dot(p3, p3)));
+ p0 *= norm.x;
+ p1 *= norm.y;
+ p2 *= norm.z;
+ p3 *= norm.w;
+ p4 *= detail::taylorInvSqrt(dot(p4, p4));
+
+ // Mix contributions from the five corners
+ tvec3<T, P> m0 = max(T(0.6) - tvec3<T, P>(dot(x0, x0), dot(x1, x1), dot(x2, x2)), tvec3<T, P>(0));
+ tvec2<T, P> m1 = max(T(0.6) - tvec2<T, P>(dot(x3, x3), dot(x4, x4) ), tvec2<T, P>(0));
+ m0 = m0 * m0;
+ m1 = m1 * m1;
+ return T(49) *
+ (dot(m0 * m0, tvec3<T, P>(dot(p0, x0), dot(p1, x1), dot(p2, x2))) +
+ dot(m1 * m1, tvec2<T, P>(dot(p3, x3), dot(p4, x4))));
+ }
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtc/packing.hpp b/src/third_party/glm/glm/gtc/packing.hpp
new file mode 100644
index 0000000..1389d95
--- /dev/null
+++ b/src/third_party/glm/glm/gtc/packing.hpp
@@ -0,0 +1,579 @@
+/// @ref gtc_packing
+/// @file glm/gtc/packing.hpp
+///
+/// @see core (dependence)
+///
+/// @defgroup gtc_packing GLM_GTC_packing
+/// @ingroup gtc
+///
+/// @brief This extension provides a set of function to convert vertors to packed
+/// formats.
+///
+/// <glm/gtc/packing.hpp> need to be included to use these features.
+
+#pragma once
+
+// Dependency:
+#include "type_precision.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTC_packing extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtc_packing
+ /// @{
+
+ /// First, converts the normalized floating-point value v into a 8-bit integer value.
+ /// Then, the results are packed into the returned 8-bit unsigned integer.
+ ///
+ /// The conversion for component c of v to fixed point is done as follows:
+ /// packUnorm1x8: round(clamp(c, 0, +1) * 255.0)
+ ///
+ /// @see gtc_packing
+ /// @see uint16 packUnorm2x8(vec2 const & v)
+ /// @see uint32 packUnorm4x8(vec4 const & v)
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packUnorm4x8.xml">GLSL packUnorm4x8 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
+ GLM_FUNC_DECL uint8 packUnorm1x8(float v);
+
+ /// Convert a single 8-bit integer to a normalized floating-point value.
+ ///
+ /// The conversion for unpacked fixed-point value f to floating point is done as follows:
+ /// unpackUnorm4x8: f / 255.0
+ ///
+ /// @see gtc_packing
+ /// @see vec2 unpackUnorm2x8(uint16 p)
+ /// @see vec4 unpackUnorm4x8(uint32 p)
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackUnorm4x8.xml">GLSL unpackUnorm4x8 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
+ GLM_FUNC_DECL float unpackUnorm1x8(uint8 p);
+
+ /// First, converts each component of the normalized floating-point value v into 8-bit integer values.
+ /// Then, the results are packed into the returned 16-bit unsigned integer.
+ ///
+ /// The conversion for component c of v to fixed point is done as follows:
+ /// packUnorm2x8: round(clamp(c, 0, +1) * 255.0)
+ ///
+ /// The first component of the vector will be written to the least significant bits of the output;
+ /// the last component will be written to the most significant bits.
+ ///
+ /// @see gtc_packing
+ /// @see uint8 packUnorm1x8(float const & v)
+ /// @see uint32 packUnorm4x8(vec4 const & v)
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packUnorm4x8.xml">GLSL packUnorm4x8 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
+ GLM_FUNC_DECL uint16 packUnorm2x8(vec2 const & v);
+
+ /// First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit unsigned integers.
+ /// Then, each component is converted to a normalized floating-point value to generate the returned two-component vector.
+ ///
+ /// The conversion for unpacked fixed-point value f to floating point is done as follows:
+ /// unpackUnorm4x8: f / 255.0
+ ///
+ /// The first component of the returned vector will be extracted from the least significant bits of the input;
+ /// the last component will be extracted from the most significant bits.
+ ///
+ /// @see gtc_packing
+ /// @see float unpackUnorm1x8(uint8 v)
+ /// @see vec4 unpackUnorm4x8(uint32 p)
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackUnorm4x8.xml">GLSL unpackUnorm4x8 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
+ GLM_FUNC_DECL vec2 unpackUnorm2x8(uint16 p);
+
+ /// First, converts the normalized floating-point value v into 8-bit integer value.
+ /// Then, the results are packed into the returned 8-bit unsigned integer.
+ ///
+ /// The conversion to fixed point is done as follows:
+ /// packSnorm1x8: round(clamp(s, -1, +1) * 127.0)
+ ///
+ /// @see gtc_packing
+ /// @see uint16 packSnorm2x8(vec2 const & v)
+ /// @see uint32 packSnorm4x8(vec4 const & v)
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packSnorm4x8.xml">GLSL packSnorm4x8 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
+ GLM_FUNC_DECL uint8 packSnorm1x8(float s);
+
+ /// First, unpacks a single 8-bit unsigned integer p into a single 8-bit signed integers.
+ /// Then, the value is converted to a normalized floating-point value to generate the returned scalar.
+ ///
+ /// The conversion for unpacked fixed-point value f to floating point is done as follows:
+ /// unpackSnorm1x8: clamp(f / 127.0, -1, +1)
+ ///
+ /// @see gtc_packing
+ /// @see vec2 unpackSnorm2x8(uint16 p)
+ /// @see vec4 unpackSnorm4x8(uint32 p)
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackSnorm4x8.xml">GLSL unpackSnorm4x8 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
+ GLM_FUNC_DECL float unpackSnorm1x8(uint8 p);
+
+ /// First, converts each component of the normalized floating-point value v into 8-bit integer values.
+ /// Then, the results are packed into the returned 16-bit unsigned integer.
+ ///
+ /// The conversion for component c of v to fixed point is done as follows:
+ /// packSnorm2x8: round(clamp(c, -1, +1) * 127.0)
+ ///
+ /// The first component of the vector will be written to the least significant bits of the output;
+ /// the last component will be written to the most significant bits.
+ ///
+ /// @see gtc_packing
+ /// @see uint8 packSnorm1x8(float const & v)
+ /// @see uint32 packSnorm4x8(vec4 const & v)
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packSnorm4x8.xml">GLSL packSnorm4x8 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
+ GLM_FUNC_DECL uint16 packSnorm2x8(vec2 const & v);
+
+ /// First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit signed integers.
+ /// Then, each component is converted to a normalized floating-point value to generate the returned two-component vector.
+ ///
+ /// The conversion for unpacked fixed-point value f to floating point is done as follows:
+ /// unpackSnorm2x8: clamp(f / 127.0, -1, +1)
+ ///
+ /// The first component of the returned vector will be extracted from the least significant bits of the input;
+ /// the last component will be extracted from the most significant bits.
+ ///
+ /// @see gtc_packing
+ /// @see float unpackSnorm1x8(uint8 p)
+ /// @see vec4 unpackSnorm4x8(uint32 p)
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackSnorm4x8.xml">GLSL unpackSnorm4x8 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
+ GLM_FUNC_DECL vec2 unpackSnorm2x8(uint16 p);
+
+ /// First, converts the normalized floating-point value v into a 16-bit integer value.
+ /// Then, the results are packed into the returned 16-bit unsigned integer.
+ ///
+ /// The conversion for component c of v to fixed point is done as follows:
+ /// packUnorm1x16: round(clamp(c, 0, +1) * 65535.0)
+ ///
+ /// @see gtc_packing
+ /// @see uint16 packSnorm1x16(float const & v)
+ /// @see uint64 packSnorm4x16(vec4 const & v)
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packUnorm4x8.xml">GLSL packUnorm4x8 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
+ GLM_FUNC_DECL uint16 packUnorm1x16(float v);
+
+ /// First, unpacks a single 16-bit unsigned integer p into a of 16-bit unsigned integers.
+ /// Then, the value is converted to a normalized floating-point value to generate the returned scalar.
+ ///
+ /// The conversion for unpacked fixed-point value f to floating point is done as follows:
+ /// unpackUnorm1x16: f / 65535.0
+ ///
+ /// @see gtc_packing
+ /// @see vec2 unpackUnorm2x16(uint32 p)
+ /// @see vec4 unpackUnorm4x16(uint64 p)
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackUnorm2x16.xml">GLSL unpackUnorm2x16 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
+ GLM_FUNC_DECL float unpackUnorm1x16(uint16 p);
+
+ /// First, converts each component of the normalized floating-point value v into 16-bit integer values.
+ /// Then, the results are packed into the returned 64-bit unsigned integer.
+ ///
+ /// The conversion for component c of v to fixed point is done as follows:
+ /// packUnorm4x16: round(clamp(c, 0, +1) * 65535.0)
+ ///
+ /// The first component of the vector will be written to the least significant bits of the output;
+ /// the last component will be written to the most significant bits.
+ ///
+ /// @see gtc_packing
+ /// @see uint16 packUnorm1x16(float const & v)
+ /// @see uint32 packUnorm2x16(vec2 const & v)
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packUnorm4x8.xml">GLSL packUnorm4x8 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
+ GLM_FUNC_DECL uint64 packUnorm4x16(vec4 const & v);
+
+ /// First, unpacks a single 64-bit unsigned integer p into four 16-bit unsigned integers.
+ /// Then, each component is converted to a normalized floating-point value to generate the returned four-component vector.
+ ///
+ /// The conversion for unpacked fixed-point value f to floating point is done as follows:
+ /// unpackUnormx4x16: f / 65535.0
+ ///
+ /// The first component of the returned vector will be extracted from the least significant bits of the input;
+ /// the last component will be extracted from the most significant bits.
+ ///
+ /// @see gtc_packing
+ /// @see float unpackUnorm1x16(uint16 p)
+ /// @see vec2 unpackUnorm2x16(uint32 p)
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackUnorm2x16.xml">GLSL unpackUnorm2x16 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
+ GLM_FUNC_DECL vec4 unpackUnorm4x16(uint64 p);
+
+ /// First, converts the normalized floating-point value v into 16-bit integer value.
+ /// Then, the results are packed into the returned 16-bit unsigned integer.
+ ///
+ /// The conversion to fixed point is done as follows:
+ /// packSnorm1x8: round(clamp(s, -1, +1) * 32767.0)
+ ///
+ /// @see gtc_packing
+ /// @see uint32 packSnorm2x16(vec2 const & v)
+ /// @see uint64 packSnorm4x16(vec4 const & v)
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packSnorm4x8.xml">GLSL packSnorm4x8 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
+ GLM_FUNC_DECL uint16 packSnorm1x16(float v);
+
+ /// First, unpacks a single 16-bit unsigned integer p into a single 16-bit signed integers.
+ /// Then, each component is converted to a normalized floating-point value to generate the returned scalar.
+ ///
+ /// The conversion for unpacked fixed-point value f to floating point is done as follows:
+ /// unpackSnorm1x16: clamp(f / 32767.0, -1, +1)
+ ///
+ /// @see gtc_packing
+ /// @see vec2 unpackSnorm2x16(uint32 p)
+ /// @see vec4 unpackSnorm4x16(uint64 p)
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackSnorm1x16.xml">GLSL unpackSnorm4x8 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
+ GLM_FUNC_DECL float unpackSnorm1x16(uint16 p);
+
+ /// First, converts each component of the normalized floating-point value v into 16-bit integer values.
+ /// Then, the results are packed into the returned 64-bit unsigned integer.
+ ///
+ /// The conversion for component c of v to fixed point is done as follows:
+ /// packSnorm2x8: round(clamp(c, -1, +1) * 32767.0)
+ ///
+ /// The first component of the vector will be written to the least significant bits of the output;
+ /// the last component will be written to the most significant bits.
+ ///
+ /// @see gtc_packing
+ /// @see uint16 packSnorm1x16(float const & v)
+ /// @see uint32 packSnorm2x16(vec2 const & v)
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packSnorm4x8.xml">GLSL packSnorm4x8 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
+ GLM_FUNC_DECL uint64 packSnorm4x16(vec4 const & v);
+
+ /// First, unpacks a single 64-bit unsigned integer p into four 16-bit signed integers.
+ /// Then, each component is converted to a normalized floating-point value to generate the returned four-component vector.
+ ///
+ /// The conversion for unpacked fixed-point value f to floating point is done as follows:
+ /// unpackSnorm4x16: clamp(f / 32767.0, -1, +1)
+ ///
+ /// The first component of the returned vector will be extracted from the least significant bits of the input;
+ /// the last component will be extracted from the most significant bits.
+ ///
+ /// @see gtc_packing
+ /// @see float unpackSnorm1x16(uint16 p)
+ /// @see vec2 unpackSnorm2x16(uint32 p)
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackSnorm2x16.xml">GLSL unpackSnorm4x8 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
+ GLM_FUNC_DECL vec4 unpackSnorm4x16(uint64 p);
+
+ /// Returns an unsigned integer obtained by converting the components of a floating-point scalar
+ /// to the 16-bit floating-point representation found in the OpenGL Specification,
+ /// and then packing this 16-bit value into a 16-bit unsigned integer.
+ ///
+ /// @see gtc_packing
+ /// @see uint32 packHalf2x16(vec2 const & v)
+ /// @see uint64 packHalf4x16(vec4 const & v)
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packHalf2x16.xml">GLSL packHalf2x16 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
+ GLM_FUNC_DECL uint16 packHalf1x16(float v);
+
+ /// Returns a floating-point scalar with components obtained by unpacking a 16-bit unsigned integer into a 16-bit value,
+ /// interpreted as a 16-bit floating-point number according to the OpenGL Specification,
+ /// and converting it to 32-bit floating-point values.
+ ///
+ /// @see gtc_packing
+ /// @see vec2 unpackHalf2x16(uint32 const & v)
+ /// @see vec4 unpackHalf4x16(uint64 const & v)
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackHalf2x16.xml">GLSL unpackHalf2x16 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
+ GLM_FUNC_DECL float unpackHalf1x16(uint16 v);
+
+ /// Returns an unsigned integer obtained by converting the components of a four-component floating-point vector
+ /// to the 16-bit floating-point representation found in the OpenGL Specification,
+ /// and then packing these four 16-bit values into a 64-bit unsigned integer.
+ /// The first vector component specifies the 16 least-significant bits of the result;
+ /// the forth component specifies the 16 most-significant bits.
+ ///
+ /// @see gtc_packing
+ /// @see uint16 packHalf1x16(float const & v)
+ /// @see uint32 packHalf2x16(vec2 const & v)
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packHalf2x16.xml">GLSL packHalf2x16 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
+ GLM_FUNC_DECL uint64 packHalf4x16(vec4 const & v);
+
+ /// Returns a four-component floating-point vector with components obtained by unpacking a 64-bit unsigned integer into four 16-bit values,
+ /// interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification,
+ /// and converting them to 32-bit floating-point values.
+ /// The first component of the vector is obtained from the 16 least-significant bits of v;
+ /// the forth component is obtained from the 16 most-significant bits of v.
+ ///
+ /// @see gtc_packing
+ /// @see float unpackHalf1x16(uint16 const & v)
+ /// @see vec2 unpackHalf2x16(uint32 const & v)
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackHalf2x16.xml">GLSL unpackHalf2x16 man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
+ GLM_FUNC_DECL vec4 unpackHalf4x16(uint64 p);
+
+ /// Returns an unsigned integer obtained by converting the components of a four-component signed integer vector
+ /// to the 10-10-10-2-bit signed integer representation found in the OpenGL Specification,
+ /// and then packing these four values into a 32-bit unsigned integer.
+ /// The first vector component specifies the 10 least-significant bits of the result;
+ /// the forth component specifies the 2 most-significant bits.
+ ///
+ /// @see gtc_packing
+ /// @see uint32 packI3x10_1x2(uvec4 const & v)
+ /// @see uint32 packSnorm3x10_1x2(vec4 const & v)
+ /// @see uint32 packUnorm3x10_1x2(vec4 const & v)
+ /// @see ivec4 unpackI3x10_1x2(uint32 const & p)
+ GLM_FUNC_DECL uint32 packI3x10_1x2(ivec4 const & v);
+
+ /// Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit signed integers.
+ ///
+ /// The first component of the returned vector will be extracted from the least significant bits of the input;
+ /// the last component will be extracted from the most significant bits.
+ ///
+ /// @see gtc_packing
+ /// @see uint32 packU3x10_1x2(uvec4 const & v)
+ /// @see vec4 unpackSnorm3x10_1x2(uint32 const & p);
+ /// @see uvec4 unpackI3x10_1x2(uint32 const & p);
+ GLM_FUNC_DECL ivec4 unpackI3x10_1x2(uint32 p);
+
+ /// Returns an unsigned integer obtained by converting the components of a four-component unsigned integer vector
+ /// to the 10-10-10-2-bit unsigned integer representation found in the OpenGL Specification,
+ /// and then packing these four values into a 32-bit unsigned integer.
+ /// The first vector component specifies the 10 least-significant bits of the result;
+ /// the forth component specifies the 2 most-significant bits.
+ ///
+ /// @see gtc_packing
+ /// @see uint32 packI3x10_1x2(ivec4 const & v)
+ /// @see uint32 packSnorm3x10_1x2(vec4 const & v)
+ /// @see uint32 packUnorm3x10_1x2(vec4 const & v)
+ /// @see ivec4 unpackU3x10_1x2(uint32 const & p)
+ GLM_FUNC_DECL uint32 packU3x10_1x2(uvec4 const & v);
+
+ /// Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit unsigned integers.
+ ///
+ /// The first component of the returned vector will be extracted from the least significant bits of the input;
+ /// the last component will be extracted from the most significant bits.
+ ///
+ /// @see gtc_packing
+ /// @see uint32 packU3x10_1x2(uvec4 const & v)
+ /// @see vec4 unpackSnorm3x10_1x2(uint32 const & p);
+ /// @see uvec4 unpackI3x10_1x2(uint32 const & p);
+ GLM_FUNC_DECL uvec4 unpackU3x10_1x2(uint32 p);
+
+ /// First, converts the first three components of the normalized floating-point value v into 10-bit signed integer values.
+ /// Then, converts the forth component of the normalized floating-point value v into 2-bit signed integer values.
+ /// Then, the results are packed into the returned 32-bit unsigned integer.
+ ///
+ /// The conversion for component c of v to fixed point is done as follows:
+ /// packSnorm3x10_1x2(xyz): round(clamp(c, -1, +1) * 511.0)
+ /// packSnorm3x10_1x2(w): round(clamp(c, -1, +1) * 1.0)
+ ///
+ /// The first vector component specifies the 10 least-significant bits of the result;
+ /// the forth component specifies the 2 most-significant bits.
+ ///
+ /// @see gtc_packing
+ /// @see vec4 unpackSnorm3x10_1x2(uint32 const & p)
+ /// @see uint32 packUnorm3x10_1x2(vec4 const & v)
+ /// @see uint32 packU3x10_1x2(uvec4 const & v)
+ /// @see uint32 packI3x10_1x2(ivec4 const & v)
+ GLM_FUNC_DECL uint32 packSnorm3x10_1x2(vec4 const & v);
+
+ /// First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers.
+ /// Then, each component is converted to a normalized floating-point value to generate the returned four-component vector.
+ ///
+ /// The conversion for unpacked fixed-point value f to floating point is done as follows:
+ /// unpackSnorm3x10_1x2(xyz): clamp(f / 511.0, -1, +1)
+ /// unpackSnorm3x10_1x2(w): clamp(f / 511.0, -1, +1)
+ ///
+ /// The first component of the returned vector will be extracted from the least significant bits of the input;
+ /// the last component will be extracted from the most significant bits.
+ ///
+ /// @see gtc_packing
+ /// @see uint32 packSnorm3x10_1x2(vec4 const & v)
+ /// @see vec4 unpackUnorm3x10_1x2(uint32 const & p))
+ /// @see uvec4 unpackI3x10_1x2(uint32 const & p)
+ /// @see uvec4 unpackU3x10_1x2(uint32 const & p)
+ GLM_FUNC_DECL vec4 unpackSnorm3x10_1x2(uint32 p);
+
+ /// First, converts the first three components of the normalized floating-point value v into 10-bit unsigned integer values.
+ /// Then, converts the forth component of the normalized floating-point value v into 2-bit signed uninteger values.
+ /// Then, the results are packed into the returned 32-bit unsigned integer.
+ ///
+ /// The conversion for component c of v to fixed point is done as follows:
+ /// packUnorm3x10_1x2(xyz): round(clamp(c, 0, +1) * 1023.0)
+ /// packUnorm3x10_1x2(w): round(clamp(c, 0, +1) * 3.0)
+ ///
+ /// The first vector component specifies the 10 least-significant bits of the result;
+ /// the forth component specifies the 2 most-significant bits.
+ ///
+ /// @see gtc_packing
+ /// @see vec4 unpackUnorm3x10_1x2(uint32 const & p)
+ /// @see uint32 packUnorm3x10_1x2(vec4 const & v)
+ /// @see uint32 packU3x10_1x2(uvec4 const & v)
+ /// @see uint32 packI3x10_1x2(ivec4 const & v)
+ GLM_FUNC_DECL uint32 packUnorm3x10_1x2(vec4 const & v);
+
+ /// First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers.
+ /// Then, each component is converted to a normalized floating-point value to generate the returned four-component vector.
+ ///
+ /// The conversion for unpacked fixed-point value f to floating point is done as follows:
+ /// unpackSnorm3x10_1x2(xyz): clamp(f / 1023.0, 0, +1)
+ /// unpackSnorm3x10_1x2(w): clamp(f / 3.0, 0, +1)
+ ///
+ /// The first component of the returned vector will be extracted from the least significant bits of the input;
+ /// the last component will be extracted from the most significant bits.
+ ///
+ /// @see gtc_packing
+ /// @see uint32 packSnorm3x10_1x2(vec4 const & v)
+ /// @see vec4 unpackInorm3x10_1x2(uint32 const & p))
+ /// @see uvec4 unpackI3x10_1x2(uint32 const & p)
+ /// @see uvec4 unpackU3x10_1x2(uint32 const & p)
+ GLM_FUNC_DECL vec4 unpackUnorm3x10_1x2(uint32 p);
+
+ /// First, converts the first two components of the normalized floating-point value v into 11-bit signless floating-point values.
+ /// Then, converts the third component of the normalized floating-point value v into a 10-bit signless floating-point value.
+ /// Then, the results are packed into the returned 32-bit unsigned integer.
+ ///
+ /// The first vector component specifies the 11 least-significant bits of the result;
+ /// the last component specifies the 10 most-significant bits.
+ ///
+ /// @see gtc_packing
+ /// @see vec3 unpackF2x11_1x10(uint32 const & p)
+ GLM_FUNC_DECL uint32 packF2x11_1x10(vec3 const & v);
+
+ /// First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point values and one 10-bit signless floating-point value .
+ /// Then, each component is converted to a normalized floating-point value to generate the returned three-component vector.
+ ///
+ /// The first component of the returned vector will be extracted from the least significant bits of the input;
+ /// the last component will be extracted from the most significant bits.
+ ///
+ /// @see gtc_packing
+ /// @see uint32 packF2x11_1x10(vec3 const & v)
+ GLM_FUNC_DECL vec3 unpackF2x11_1x10(uint32 p);
+
+
+ /// First, converts the first two components of the normalized floating-point value v into 11-bit signless floating-point values.
+ /// Then, converts the third component of the normalized floating-point value v into a 10-bit signless floating-point value.
+ /// Then, the results are packed into the returned 32-bit unsigned integer.
+ ///
+ /// The first vector component specifies the 11 least-significant bits of the result;
+ /// the last component specifies the 10 most-significant bits.
+ ///
+ /// @see gtc_packing
+ /// @see vec3 unpackF3x9_E1x5(uint32 const & p)
+ GLM_FUNC_DECL uint32 packF3x9_E1x5(vec3 const & v);
+
+ /// First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point values and one 10-bit signless floating-point value .
+ /// Then, each component is converted to a normalized floating-point value to generate the returned three-component vector.
+ ///
+ /// The first component of the returned vector will be extracted from the least significant bits of the input;
+ /// the last component will be extracted from the most significant bits.
+ ///
+ /// @see gtc_packing
+ /// @see uint32 packF3x9_E1x5(vec3 const & v)
+ GLM_FUNC_DECL vec3 unpackF3x9_E1x5(uint32 p);
+
+ /// Returns an unsigned integer vector obtained by converting the components of a floating-point vector
+ /// to the 16-bit floating-point representation found in the OpenGL Specification.
+ /// The first vector component specifies the 16 least-significant bits of the result;
+ /// the forth component specifies the 16 most-significant bits.
+ ///
+ /// @see gtc_packing
+ /// @see vecType<float, P> unpackHalf(vecType<uint16, P> const & p)
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
+ template <precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<uint16, P> packHalf(vecType<float, P> const & v);
+
+ /// Returns a floating-point vector with components obtained by reinterpreting an integer vector as 16-bit floating-point numbers and converting them to 32-bit floating-point values.
+ /// The first component of the vector is obtained from the 16 least-significant bits of v;
+ /// the forth component is obtained from the 16 most-significant bits of v.
+ ///
+ /// @see gtc_packing
+ /// @see vecType<uint16, P> packHalf(vecType<float, P> const & v)
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>
+ template <precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<float, P> unpackHalf(vecType<uint16, P> const & p);
+
+ /// Convert each component of the normalized floating-point vector into unsigned integer values.
+ ///
+ /// @see gtc_packing
+ /// @see vecType<floatType, P> unpackUnorm(vecType<intType, P> const & p);
+ template <typename uintType, typename floatType, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<uintType, P> packUnorm(vecType<floatType, P> const & v);
+
+ /// Convert each unsigned integer components of a vector to normalized floating-point values.
+ ///
+ /// @see gtc_packing
+ /// @see vecType<intType, P> packUnorm(vecType<floatType, P> const & v)
+ template <typename uintType, typename floatType, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<floatType, P> unpackUnorm(vecType<uintType, P> const & v);
+
+ /// Convert each component of the normalized floating-point vector into signed integer values.
+ ///
+ /// @see gtc_packing
+ /// @see vecType<floatType, P> unpackSnorm(vecType<intType, P> const & p);
+ template <typename intType, typename floatType, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<intType, P> packSnorm(vecType<floatType, P> const & v);
+
+ /// Convert each signed integer components of a vector to normalized floating-point values.
+ ///
+ /// @see gtc_packing
+ /// @see vecType<intType, P> packSnorm(vecType<floatType, P> const & v)
+ template <typename intType, typename floatType, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<floatType, P> unpackSnorm(vecType<intType, P> const & v);
+
+ /// Convert each component of the normalized floating-point vector into unsigned integer values.
+ ///
+ /// @see gtc_packing
+ /// @see vec2 unpackUnorm2x4(uint8 p)
+ GLM_FUNC_DECL uint8 packUnorm2x4(vec2 const & v);
+
+ /// Convert each unsigned integer components of a vector to normalized floating-point values.
+ ///
+ /// @see gtc_packing
+ /// @see uint8 packUnorm2x4(vec2 const & v)
+ GLM_FUNC_DECL vec2 unpackUnorm2x4(uint8 p);
+
+ /// Convert each component of the normalized floating-point vector into unsigned integer values.
+ ///
+ /// @see gtc_packing
+ /// @see vec4 unpackUnorm4x4(uint16 p)
+ GLM_FUNC_DECL uint16 packUnorm4x4(vec4 const & v);
+
+ /// Convert each unsigned integer components of a vector to normalized floating-point values.
+ ///
+ /// @see gtc_packing
+ /// @see uint16 packUnorm4x4(vec4 const & v)
+ GLM_FUNC_DECL vec4 unpackUnorm4x4(uint16 p);
+
+ /// Convert each component of the normalized floating-point vector into unsigned integer values.
+ ///
+ /// @see gtc_packing
+ /// @see vec3 unpackUnorm1x5_1x6_1x5(uint16 p)
+ GLM_FUNC_DECL uint16 packUnorm1x5_1x6_1x5(vec3 const & v);
+
+ /// Convert each unsigned integer components of a vector to normalized floating-point values.
+ ///
+ /// @see gtc_packing
+ /// @see uint16 packUnorm1x5_1x6_1x5(vec3 const & v)
+ GLM_FUNC_DECL vec3 unpackUnorm1x5_1x6_1x5(uint16 p);
+
+ /// Convert each component of the normalized floating-point vector into unsigned integer values.
+ ///
+ /// @see gtc_packing
+ /// @see vec4 unpackUnorm3x5_1x1(uint16 p)
+ GLM_FUNC_DECL uint16 packUnorm3x5_1x1(vec4 const & v);
+
+ /// Convert each unsigned integer components of a vector to normalized floating-point values.
+ ///
+ /// @see gtc_packing
+ /// @see uint16 packUnorm3x5_1x1(vec4 const & v)
+ GLM_FUNC_DECL vec4 unpackUnorm3x5_1x1(uint16 p);
+
+ /// Convert each component of the normalized floating-point vector into unsigned integer values.
+ ///
+ /// @see gtc_packing
+ /// @see vec3 unpackUnorm2x3_1x2(uint8 p)
+ GLM_FUNC_DECL uint8 packUnorm2x3_1x2(vec3 const & v);
+
+ /// Convert each unsigned integer components of a vector to normalized floating-point values.
+ ///
+ /// @see gtc_packing
+ /// @see uint8 packUnorm2x3_1x2(vec3 const & v)
+ GLM_FUNC_DECL vec3 unpackUnorm2x3_1x2(uint8 p);
+ /// @}
+}// namespace glm
+
+#include "packing.inl"
diff --git a/src/third_party/glm/glm/gtc/packing.inl b/src/third_party/glm/glm/gtc/packing.inl
new file mode 100644
index 0000000..618fb9e
--- /dev/null
+++ b/src/third_party/glm/glm/gtc/packing.inl
@@ -0,0 +1,781 @@
+/// @ref gtc_packing
+/// @file glm/gtc/packing.inl
+
+#include "../common.hpp"
+#include "../vec2.hpp"
+#include "../vec3.hpp"
+#include "../vec4.hpp"
+#include "../detail/type_half.hpp"
+#include <cstring>
+#include <limits>
+
+namespace glm{
+namespace detail
+{
+ GLM_FUNC_QUALIFIER glm::uint16 float2half(glm::uint32 f)
+ {
+ // 10 bits => EE EEEFFFFF
+ // 11 bits => EEE EEFFFFFF
+ // Half bits => SEEEEEFF FFFFFFFF
+ // Float bits => SEEEEEEE EFFFFFFF FFFFFFFF FFFFFFFF
+
+ // 0x00007c00 => 00000000 00000000 01111100 00000000
+ // 0x000003ff => 00000000 00000000 00000011 11111111
+ // 0x38000000 => 00111000 00000000 00000000 00000000
+ // 0x7f800000 => 01111111 10000000 00000000 00000000
+ // 0x00008000 => 00000000 00000000 10000000 00000000
+ return
+ ((f >> 16) & 0x8000) | // sign
+ ((((f & 0x7f800000) - 0x38000000) >> 13) & 0x7c00) | // exponential
+ ((f >> 13) & 0x03ff); // Mantissa
+ }
+
+ GLM_FUNC_QUALIFIER glm::uint32 float2packed11(glm::uint32 f)
+ {
+ // 10 bits => EE EEEFFFFF
+ // 11 bits => EEE EEFFFFFF
+ // Half bits => SEEEEEFF FFFFFFFF
+ // Float bits => SEEEEEEE EFFFFFFF FFFFFFFF FFFFFFFF
+
+ // 0x000007c0 => 00000000 00000000 00000111 11000000
+ // 0x00007c00 => 00000000 00000000 01111100 00000000
+ // 0x000003ff => 00000000 00000000 00000011 11111111
+ // 0x38000000 => 00111000 00000000 00000000 00000000
+ // 0x7f800000 => 01111111 10000000 00000000 00000000
+ // 0x00008000 => 00000000 00000000 10000000 00000000
+ return
+ ((((f & 0x7f800000) - 0x38000000) >> 17) & 0x07c0) | // exponential
+ ((f >> 17) & 0x003f); // Mantissa
+ }
+
+ GLM_FUNC_QUALIFIER glm::uint32 packed11ToFloat(glm::uint32 p)
+ {
+ // 10 bits => EE EEEFFFFF
+ // 11 bits => EEE EEFFFFFF
+ // Half bits => SEEEEEFF FFFFFFFF
+ // Float bits => SEEEEEEE EFFFFFFF FFFFFFFF FFFFFFFF
+
+ // 0x000007c0 => 00000000 00000000 00000111 11000000
+ // 0x00007c00 => 00000000 00000000 01111100 00000000
+ // 0x000003ff => 00000000 00000000 00000011 11111111
+ // 0x38000000 => 00111000 00000000 00000000 00000000
+ // 0x7f800000 => 01111111 10000000 00000000 00000000
+ // 0x00008000 => 00000000 00000000 10000000 00000000
+ return
+ ((((p & 0x07c0) << 17) + 0x38000000) & 0x7f800000) | // exponential
+ ((p & 0x003f) << 17); // Mantissa
+ }
+
+ GLM_FUNC_QUALIFIER glm::uint32 float2packed10(glm::uint32 f)
+ {
+ // 10 bits => EE EEEFFFFF
+ // 11 bits => EEE EEFFFFFF
+ // Half bits => SEEEEEFF FFFFFFFF
+ // Float bits => SEEEEEEE EFFFFFFF FFFFFFFF FFFFFFFF
+
+ // 0x0000001F => 00000000 00000000 00000000 00011111
+ // 0x0000003F => 00000000 00000000 00000000 00111111
+ // 0x000003E0 => 00000000 00000000 00000011 11100000
+ // 0x000007C0 => 00000000 00000000 00000111 11000000
+ // 0x00007C00 => 00000000 00000000 01111100 00000000
+ // 0x000003FF => 00000000 00000000 00000011 11111111
+ // 0x38000000 => 00111000 00000000 00000000 00000000
+ // 0x7f800000 => 01111111 10000000 00000000 00000000
+ // 0x00008000 => 00000000 00000000 10000000 00000000
+ return
+ ((((f & 0x7f800000) - 0x38000000) >> 18) & 0x03E0) | // exponential
+ ((f >> 18) & 0x001f); // Mantissa
+ }
+
+ GLM_FUNC_QUALIFIER glm::uint32 packed10ToFloat(glm::uint32 p)
+ {
+ // 10 bits => EE EEEFFFFF
+ // 11 bits => EEE EEFFFFFF
+ // Half bits => SEEEEEFF FFFFFFFF
+ // Float bits => SEEEEEEE EFFFFFFF FFFFFFFF FFFFFFFF
+
+ // 0x0000001F => 00000000 00000000 00000000 00011111
+ // 0x0000003F => 00000000 00000000 00000000 00111111
+ // 0x000003E0 => 00000000 00000000 00000011 11100000
+ // 0x000007C0 => 00000000 00000000 00000111 11000000
+ // 0x00007C00 => 00000000 00000000 01111100 00000000
+ // 0x000003FF => 00000000 00000000 00000011 11111111
+ // 0x38000000 => 00111000 00000000 00000000 00000000
+ // 0x7f800000 => 01111111 10000000 00000000 00000000
+ // 0x00008000 => 00000000 00000000 10000000 00000000
+ return
+ ((((p & 0x03E0) << 18) + 0x38000000) & 0x7f800000) | // exponential
+ ((p & 0x001f) << 18); // Mantissa
+ }
+
+ GLM_FUNC_QUALIFIER glm::uint half2float(glm::uint h)
+ {
+ return ((h & 0x8000) << 16) | ((( h & 0x7c00) + 0x1C000) << 13) | ((h & 0x03FF) << 13);
+ }
+
+ GLM_FUNC_QUALIFIER glm::uint floatTo11bit(float x)
+ {
+ if(x == 0.0f)
+ return 0u;
+ else if(glm::isnan(x))
+ return ~0u;
+ else if(glm::isinf(x))
+ return 0x1Fu << 6u;
+
+ uint Pack = 0u;
+ memcpy(&Pack, &x, sizeof(Pack));
+ return float2packed11(Pack);
+ }
+
+ GLM_FUNC_QUALIFIER float packed11bitToFloat(glm::uint x)
+ {
+ if(x == 0)
+ return 0.0f;
+ else if(x == ((1 << 11) - 1))
+ return ~0;//NaN
+ else if(x == (0x1f << 6))
+ return ~0;//Inf
+
+ uint Result = packed11ToFloat(x);
+
+ float Temp = 0;
+ memcpy(&Temp, &Result, sizeof(Temp));
+ return Temp;
+ }
+
+ GLM_FUNC_QUALIFIER glm::uint floatTo10bit(float x)
+ {
+ if(x == 0.0f)
+ return 0u;
+ else if(glm::isnan(x))
+ return ~0u;
+ else if(glm::isinf(x))
+ return 0x1Fu << 5u;
+
+ uint Pack = 0;
+ memcpy(&Pack, &x, sizeof(Pack));
+ return float2packed10(Pack);
+ }
+
+ GLM_FUNC_QUALIFIER float packed10bitToFloat(glm::uint x)
+ {
+ if(x == 0)
+ return 0.0f;
+ else if(x == ((1 << 10) - 1))
+ return ~0;//NaN
+ else if(x == (0x1f << 5))
+ return ~0;//Inf
+
+ uint Result = packed10ToFloat(x);
+
+ float Temp = 0;
+ memcpy(&Temp, &Result, sizeof(Temp));
+ return Temp;
+ }
+
+// GLM_FUNC_QUALIFIER glm::uint f11_f11_f10(float x, float y, float z)
+// {
+// return ((floatTo11bit(x) & ((1 << 11) - 1)) << 0) | ((floatTo11bit(y) & ((1 << 11) - 1)) << 11) | ((floatTo10bit(z) & ((1 << 10) - 1)) << 22);
+// }
+
+ union u3u3u2
+ {
+ struct
+ {
+ uint x : 3;
+ uint y : 3;
+ uint z : 2;
+ } data;
+ uint8 pack;
+ };
+
+ union u4u4
+ {
+ struct
+ {
+ uint x : 4;
+ uint y : 4;
+ } data;
+ uint8 pack;
+ };
+
+ union u4u4u4u4
+ {
+ struct
+ {
+ uint x : 4;
+ uint y : 4;
+ uint z : 4;
+ uint w : 4;
+ } data;
+ uint16 pack;
+ };
+
+ union u5u6u5
+ {
+ struct
+ {
+ uint x : 5;
+ uint y : 6;
+ uint z : 5;
+ } data;
+ uint16 pack;
+ };
+
+ union u5u5u5u1
+ {
+ struct
+ {
+ uint x : 5;
+ uint y : 5;
+ uint z : 5;
+ uint w : 1;
+ } data;
+ uint16 pack;
+ };
+
+ union u10u10u10u2
+ {
+ struct
+ {
+ uint x : 10;
+ uint y : 10;
+ uint z : 10;
+ uint w : 2;
+ } data;
+ uint32 pack;
+ };
+
+ union i10i10i10i2
+ {
+ struct
+ {
+ int x : 10;
+ int y : 10;
+ int z : 10;
+ int w : 2;
+ } data;
+ uint32 pack;
+ };
+
+ union u9u9u9e5
+ {
+ struct
+ {
+ uint x : 9;
+ uint y : 9;
+ uint z : 9;
+ uint w : 5;
+ } data;
+ uint32 pack;
+ };
+
+ template <precision P, template <typename, precision> class vecType>
+ struct compute_half
+ {};
+
+ template <precision P>
+ struct compute_half<P, tvec1>
+ {
+ GLM_FUNC_QUALIFIER static tvec1<uint16, P> pack(tvec1<float, P> const & v)
+ {
+ int16 const Unpack(detail::toFloat16(v.x));
+ u16vec1 Packed(uninitialize);
+ memcpy(&Packed, &Unpack, sizeof(Packed));
+ return Packed;
+ }
+
+ GLM_FUNC_QUALIFIER static tvec1<float, P> unpack(tvec1<uint16, P> const & v)
+ {
+ i16vec1 Unpack(uninitialize);
+ memcpy(&Unpack, &v, sizeof(Unpack));
+ return tvec1<float, P>(detail::toFloat32(v.x));
+ }
+ };
+
+ template <precision P>
+ struct compute_half<P, tvec2>
+ {
+ GLM_FUNC_QUALIFIER static tvec2<uint16, P> pack(tvec2<float, P> const & v)
+ {
+ tvec2<int16, P> const Unpack(detail::toFloat16(v.x), detail::toFloat16(v.y));
+ u16vec2 Packed(uninitialize);
+ memcpy(&Packed, &Unpack, sizeof(Packed));
+ return Packed;
+ }
+
+ GLM_FUNC_QUALIFIER static tvec2<float, P> unpack(tvec2<uint16, P> const & v)
+ {
+ i16vec2 Unpack(uninitialize);
+ memcpy(&Unpack, &v, sizeof(Unpack));
+ return tvec2<float, P>(detail::toFloat32(v.x), detail::toFloat32(v.y));
+ }
+ };
+
+ template <precision P>
+ struct compute_half<P, tvec3>
+ {
+ GLM_FUNC_QUALIFIER static tvec3<uint16, P> pack(tvec3<float, P> const & v)
+ {
+ tvec3<int16, P> const Unpack(detail::toFloat16(v.x), detail::toFloat16(v.y), detail::toFloat16(v.z));
+ u16vec3 Packed(uninitialize);
+ memcpy(&Packed, &Unpack, sizeof(Packed));
+ return Packed;
+ }
+
+ GLM_FUNC_QUALIFIER static tvec3<float, P> unpack(tvec3<uint16, P> const & v)
+ {
+ i16vec3 Unpack(uninitialize);
+ memcpy(&Unpack, &v, sizeof(Unpack));
+ return tvec3<float, P>(detail::toFloat32(v.x), detail::toFloat32(v.y), detail::toFloat32(v.z));
+ }
+ };
+
+ template <precision P>
+ struct compute_half<P, tvec4>
+ {
+ GLM_FUNC_QUALIFIER static tvec4<uint16, P> pack(tvec4<float, P> const & v)
+ {
+ tvec4<int16, P> const Unpack(detail::toFloat16(v.x), detail::toFloat16(v.y), detail::toFloat16(v.z), detail::toFloat16(v.w));
+ u16vec4 Packed(uninitialize);
+ memcpy(&Packed, &Unpack, sizeof(Packed));
+ return Packed;
+ }
+
+ GLM_FUNC_QUALIFIER static tvec4<float, P> unpack(tvec4<uint16, P> const & v)
+ {
+ i16vec4 Unpack(uninitialize);
+ memcpy(&Unpack, &v, sizeof(Unpack));
+ return tvec4<float, P>(detail::toFloat32(v.x), detail::toFloat32(v.y), detail::toFloat32(v.z), detail::toFloat32(v.w));
+ }
+ };
+}//namespace detail
+
+ GLM_FUNC_QUALIFIER uint8 packUnorm1x8(float v)
+ {
+ return static_cast<uint8>(round(clamp(v, 0.0f, 1.0f) * 255.0f));
+ }
+
+ GLM_FUNC_QUALIFIER float unpackUnorm1x8(uint8 p)
+ {
+ float const Unpack(p);
+ return Unpack * static_cast<float>(0.0039215686274509803921568627451); // 1 / 255
+ }
+
+ GLM_FUNC_QUALIFIER uint16 packUnorm2x8(vec2 const & v)
+ {
+ u8vec2 const Topack(round(clamp(v, 0.0f, 1.0f) * 255.0f));
+
+ uint16 Unpack = 0;
+ memcpy(&Unpack, &Topack, sizeof(Unpack));
+ return Unpack;
+ }
+
+ GLM_FUNC_QUALIFIER vec2 unpackUnorm2x8(uint16 p)
+ {
+ u8vec2 Unpack(uninitialize);
+ memcpy(&Unpack, &p, sizeof(Unpack));
+ return vec2(Unpack) * float(0.0039215686274509803921568627451); // 1 / 255
+ }
+
+ GLM_FUNC_QUALIFIER uint8 packSnorm1x8(float v)
+ {
+ int8 const Topack(static_cast<int8>(round(clamp(v ,-1.0f, 1.0f) * 127.0f)));
+ uint8 Packed = 0;
+ memcpy(&Packed, &Topack, sizeof(Packed));
+ return Packed;
+ }
+
+ GLM_FUNC_QUALIFIER float unpackSnorm1x8(uint8 p)
+ {
+ int8 Unpack = 0;
+ memcpy(&Unpack, &p, sizeof(Unpack));
+ return clamp(
+ static_cast<float>(Unpack) * 0.00787401574803149606299212598425f, // 1.0f / 127.0f
+ -1.0f, 1.0f);
+ }
+
+ GLM_FUNC_QUALIFIER uint16 packSnorm2x8(vec2 const & v)
+ {
+ i8vec2 const Topack(round(clamp(v, -1.0f, 1.0f) * 127.0f));
+ uint16 Packed = 0;
+ memcpy(&Packed, &Topack, sizeof(Packed));
+ return Packed;
+ }
+
+ GLM_FUNC_QUALIFIER vec2 unpackSnorm2x8(uint16 p)
+ {
+ i8vec2 Unpack(uninitialize);
+ memcpy(&Unpack, &p, sizeof(Unpack));
+ return clamp(
+ vec2(Unpack) * 0.00787401574803149606299212598425f, // 1.0f / 127.0f
+ -1.0f, 1.0f);
+ }
+
+ GLM_FUNC_QUALIFIER uint16 packUnorm1x16(float s)
+ {
+ return static_cast<uint16>(round(clamp(s, 0.0f, 1.0f) * 65535.0f));
+ }
+
+ GLM_FUNC_QUALIFIER float unpackUnorm1x16(uint16 p)
+ {
+ float const Unpack(p);
+ return Unpack * 1.5259021896696421759365224689097e-5f; // 1.0 / 65535.0
+ }
+
+ GLM_FUNC_QUALIFIER uint64 packUnorm4x16(vec4 const & v)
+ {
+ u16vec4 const Topack(round(clamp(v , 0.0f, 1.0f) * 65535.0f));
+ uint64 Packed = 0;
+ memcpy(&Packed, &Topack, sizeof(Packed));
+ return Packed;
+ }
+
+ GLM_FUNC_QUALIFIER vec4 unpackUnorm4x16(uint64 p)
+ {
+ u16vec4 Unpack(uninitialize);
+ memcpy(&Unpack, &p, sizeof(Unpack));
+ return vec4(Unpack) * 1.5259021896696421759365224689097e-5f; // 1.0 / 65535.0
+ }
+
+ GLM_FUNC_QUALIFIER uint16 packSnorm1x16(float v)
+ {
+ int16 const Topack = static_cast<int16>(round(clamp(v ,-1.0f, 1.0f) * 32767.0f));
+ uint16 Packed = 0;
+ memcpy(&Packed, &Topack, sizeof(Packed));
+ return Packed;
+ }
+
+ GLM_FUNC_QUALIFIER float unpackSnorm1x16(uint16 p)
+ {
+ int16 Unpack = 0;
+ memcpy(&Unpack, &p, sizeof(Unpack));
+ return clamp(
+ static_cast<float>(Unpack) * 3.0518509475997192297128208258309e-5f, //1.0f / 32767.0f,
+ -1.0f, 1.0f);
+ }
+
+ GLM_FUNC_QUALIFIER uint64 packSnorm4x16(vec4 const & v)
+ {
+ i16vec4 const Topack(round(clamp(v ,-1.0f, 1.0f) * 32767.0f));
+ uint64 Packed = 0;
+ memcpy(&Packed, &Topack, sizeof(Packed));
+ return Packed;
+ }
+
+ GLM_FUNC_QUALIFIER vec4 unpackSnorm4x16(uint64 p)
+ {
+ i16vec4 Unpack(uninitialize);
+ memcpy(&Unpack, &p, sizeof(Unpack));
+ return clamp(
+ vec4(Unpack) * 3.0518509475997192297128208258309e-5f, //1.0f / 32767.0f,
+ -1.0f, 1.0f);
+ }
+
+ GLM_FUNC_QUALIFIER uint16 packHalf1x16(float v)
+ {
+ int16 const Topack(detail::toFloat16(v));
+ uint16 Packed = 0;
+ memcpy(&Packed, &Topack, sizeof(Packed));
+ return Packed;
+ }
+
+ GLM_FUNC_QUALIFIER float unpackHalf1x16(uint16 v)
+ {
+ int16 Unpack = 0;
+ memcpy(&Unpack, &v, sizeof(Unpack));
+ return detail::toFloat32(Unpack);
+ }
+
+ GLM_FUNC_QUALIFIER uint64 packHalf4x16(glm::vec4 const & v)
+ {
+ i16vec4 const Unpack(
+ detail::toFloat16(v.x),
+ detail::toFloat16(v.y),
+ detail::toFloat16(v.z),
+ detail::toFloat16(v.w));
+ uint64 Packed = 0;
+ memcpy(&Packed, &Unpack, sizeof(Packed));
+ return Packed;
+ }
+
+ GLM_FUNC_QUALIFIER glm::vec4 unpackHalf4x16(uint64 v)
+ {
+ i16vec4 Unpack(uninitialize);
+ memcpy(&Unpack, &v, sizeof(Unpack));
+ return vec4(
+ detail::toFloat32(Unpack.x),
+ detail::toFloat32(Unpack.y),
+ detail::toFloat32(Unpack.z),
+ detail::toFloat32(Unpack.w));
+ }
+
+ GLM_FUNC_QUALIFIER uint32 packI3x10_1x2(ivec4 const & v)
+ {
+ detail::i10i10i10i2 Result;
+ Result.data.x = v.x;
+ Result.data.y = v.y;
+ Result.data.z = v.z;
+ Result.data.w = v.w;
+ return Result.pack;
+ }
+
+ GLM_FUNC_QUALIFIER ivec4 unpackI3x10_1x2(uint32 v)
+ {
+ detail::i10i10i10i2 Unpack;
+ Unpack.pack = v;
+ return ivec4(
+ Unpack.data.x,
+ Unpack.data.y,
+ Unpack.data.z,
+ Unpack.data.w);
+ }
+
+ GLM_FUNC_QUALIFIER uint32 packU3x10_1x2(uvec4 const & v)
+ {
+ detail::u10u10u10u2 Result;
+ Result.data.x = v.x;
+ Result.data.y = v.y;
+ Result.data.z = v.z;
+ Result.data.w = v.w;
+ return Result.pack;
+ }
+
+ GLM_FUNC_QUALIFIER uvec4 unpackU3x10_1x2(uint32 v)
+ {
+ detail::u10u10u10u2 Unpack;
+ Unpack.pack = v;
+ return uvec4(
+ Unpack.data.x,
+ Unpack.data.y,
+ Unpack.data.z,
+ Unpack.data.w);
+ }
+
+ GLM_FUNC_QUALIFIER uint32 packSnorm3x10_1x2(vec4 const & v)
+ {
+ detail::i10i10i10i2 Result;
+ Result.data.x = int(round(clamp(v.x,-1.0f, 1.0f) * 511.f));
+ Result.data.y = int(round(clamp(v.y,-1.0f, 1.0f) * 511.f));
+ Result.data.z = int(round(clamp(v.z,-1.0f, 1.0f) * 511.f));
+ Result.data.w = int(round(clamp(v.w,-1.0f, 1.0f) * 1.f));
+ return Result.pack;
+ }
+
+ GLM_FUNC_QUALIFIER vec4 unpackSnorm3x10_1x2(uint32 v)
+ {
+ detail::i10i10i10i2 Unpack;
+ Unpack.pack = v;
+ vec4 Result;
+ Result.x = clamp(float(Unpack.data.x) / 511.f, -1.0f, 1.0f);
+ Result.y = clamp(float(Unpack.data.y) / 511.f, -1.0f, 1.0f);
+ Result.z = clamp(float(Unpack.data.z) / 511.f, -1.0f, 1.0f);
+ Result.w = clamp(float(Unpack.data.w) / 1.f, -1.0f, 1.0f);
+ return Result;
+ }
+
+ GLM_FUNC_QUALIFIER uint32 packUnorm3x10_1x2(vec4 const & v)
+ {
+ uvec4 const Unpack(round(clamp(v, 0.0f, 1.0f) * vec4(1023.f, 1023.f, 1023.f, 3.f)));
+
+ detail::u10u10u10u2 Result;
+ Result.data.x = Unpack.x;
+ Result.data.y = Unpack.y;
+ Result.data.z = Unpack.z;
+ Result.data.w = Unpack.w;
+ return Result.pack;
+ }
+
+ GLM_FUNC_QUALIFIER vec4 unpackUnorm3x10_1x2(uint32 v)
+ {
+ vec4 const ScaleFactors(1.0f / 1023.f, 1.0f / 1023.f, 1.0f / 1023.f, 1.0f / 3.f);
+
+ detail::u10u10u10u2 Unpack;
+ Unpack.pack = v;
+ return vec4(Unpack.data.x, Unpack.data.y, Unpack.data.z, Unpack.data.w) * ScaleFactors;
+ }
+
+ GLM_FUNC_QUALIFIER uint32 packF2x11_1x10(vec3 const & v)
+ {
+ return
+ ((detail::floatTo11bit(v.x) & ((1 << 11) - 1)) << 0) |
+ ((detail::floatTo11bit(v.y) & ((1 << 11) - 1)) << 11) |
+ ((detail::floatTo10bit(v.z) & ((1 << 10) - 1)) << 22);
+ }
+
+ GLM_FUNC_QUALIFIER vec3 unpackF2x11_1x10(uint32 v)
+ {
+ return vec3(
+ detail::packed11bitToFloat(v >> 0),
+ detail::packed11bitToFloat(v >> 11),
+ detail::packed10bitToFloat(v >> 22));
+ }
+
+ GLM_FUNC_QUALIFIER uint32 packF3x9_E1x5(vec3 const & v)
+ {
+ float const SharedExpMax = (pow(2.0f, 9.0f - 1.0f) / pow(2.0f, 9.0f)) * pow(2.0f, 31.f - 15.f);
+ vec3 const Color = clamp(v, 0.0f, SharedExpMax);
+ float const MaxColor = max(Color.x, max(Color.y, Color.z));
+
+ float const ExpSharedP = max(-15.f - 1.f, floor(log2(MaxColor))) + 1.0f + 15.f;
+ float const MaxShared = floor(MaxColor / pow(2.0f, (ExpSharedP - 16.f - 9.f)) + 0.5f);
+ float const ExpShared = MaxShared == pow(2.0f, 9.0f) ? ExpSharedP + 1.0f : ExpSharedP;
+
+ uvec3 const ColorComp(floor(Color / pow(2.f, (ExpShared - 15.f - 9.f)) + 0.5f));
+
+ detail::u9u9u9e5 Unpack;
+ Unpack.data.x = ColorComp.x;
+ Unpack.data.y = ColorComp.y;
+ Unpack.data.z = ColorComp.z;
+ Unpack.data.w = uint(ExpShared);
+ return Unpack.pack;
+ }
+
+ GLM_FUNC_QUALIFIER vec3 unpackF3x9_E1x5(uint32 v)
+ {
+ detail::u9u9u9e5 Unpack;
+ Unpack.pack = v;
+
+ return vec3(Unpack.data.x, Unpack.data.y, Unpack.data.z) * pow(2.0f, Unpack.data.w - 15.f - 9.f);
+ }
+
+ template <precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<uint16, P> packHalf(vecType<float, P> const & v)
+ {
+ return detail::compute_half<P, vecType>::pack(v);
+ }
+
+ template <precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<float, P> unpackHalf(vecType<uint16, P> const & v)
+ {
+ return detail::compute_half<P, vecType>::unpack(v);
+ }
+
+ template <typename uintType, typename floatType, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<uintType, P> packUnorm(vecType<floatType, P> const & v)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<uintType>::is_integer, "uintType must be an integer type");
+ GLM_STATIC_ASSERT(std::numeric_limits<floatType>::is_iec559, "floatType must be a floating point type");
+
+ return vecType<uintType, P>(round(clamp(v, static_cast<floatType>(0), static_cast<floatType>(1)) * static_cast<floatType>(std::numeric_limits<uintType>::max())));
+ }
+
+ template <typename uintType, typename floatType, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<floatType, P> unpackUnorm(vecType<uintType, P> const & v)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<uintType>::is_integer, "uintType must be an integer type");
+ GLM_STATIC_ASSERT(std::numeric_limits<floatType>::is_iec559, "floatType must be a floating point type");
+
+ return vecType<float, P>(v) * (static_cast<floatType>(1) / static_cast<floatType>(std::numeric_limits<uintType>::max()));
+ }
+
+ template <typename intType, typename floatType, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<intType, P> packSnorm(vecType<floatType, P> const & v)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<intType>::is_integer, "uintType must be an integer type");
+ GLM_STATIC_ASSERT(std::numeric_limits<floatType>::is_iec559, "floatType must be a floating point type");
+
+ return vecType<intType, P>(round(clamp(v , static_cast<floatType>(-1), static_cast<floatType>(1)) * static_cast<floatType>(std::numeric_limits<intType>::max())));
+ }
+
+ template <typename intType, typename floatType, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<floatType, P> unpackSnorm(vecType<intType, P> const & v)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<intType>::is_integer, "uintType must be an integer type");
+ GLM_STATIC_ASSERT(std::numeric_limits<floatType>::is_iec559, "floatType must be a floating point type");
+
+ return clamp(vecType<floatType, P>(v) * (static_cast<floatType>(1) / static_cast<floatType>(std::numeric_limits<intType>::max())), static_cast<floatType>(-1), static_cast<floatType>(1));
+ }
+
+ GLM_FUNC_QUALIFIER uint8 packUnorm2x4(vec2 const & v)
+ {
+ u32vec2 const Unpack(round(clamp(v, 0.0f, 1.0f) * 15.0f));
+ detail::u4u4 Result;
+ Result.data.x = Unpack.x;
+ Result.data.y = Unpack.y;
+ return Result.pack;
+ }
+
+ GLM_FUNC_QUALIFIER vec2 unpackUnorm2x4(uint8 v)
+ {
+ float const ScaleFactor(1.f / 15.f);
+ detail::u4u4 Unpack;
+ Unpack.pack = v;
+ return vec2(Unpack.data.x, Unpack.data.y) * ScaleFactor;
+ }
+
+ GLM_FUNC_QUALIFIER uint16 packUnorm4x4(vec4 const & v)
+ {
+ u32vec4 const Unpack(round(clamp(v, 0.0f, 1.0f) * 15.0f));
+ detail::u4u4u4u4 Result;
+ Result.data.x = Unpack.x;
+ Result.data.y = Unpack.y;
+ Result.data.z = Unpack.z;
+ Result.data.w = Unpack.w;
+ return Result.pack;
+ }
+
+ GLM_FUNC_QUALIFIER vec4 unpackUnorm4x4(uint16 v)
+ {
+ float const ScaleFactor(1.f / 15.f);
+ detail::u4u4u4u4 Unpack;
+ Unpack.pack = v;
+ return vec4(Unpack.data.x, Unpack.data.y, Unpack.data.z, Unpack.data.w) * ScaleFactor;
+ }
+
+ GLM_FUNC_QUALIFIER uint16 packUnorm1x5_1x6_1x5(vec3 const & v)
+ {
+ u32vec3 const Unpack(round(clamp(v, 0.0f, 1.0f) * vec3(31.f, 63.f, 31.f)));
+ detail::u5u6u5 Result;
+ Result.data.x = Unpack.x;
+ Result.data.y = Unpack.y;
+ Result.data.z = Unpack.z;
+ return Result.pack;
+ }
+
+ GLM_FUNC_QUALIFIER vec3 unpackUnorm1x5_1x6_1x5(uint16 v)
+ {
+ vec3 const ScaleFactor(1.f / 31.f, 1.f / 63.f, 1.f / 31.f);
+ detail::u5u6u5 Unpack;
+ Unpack.pack = v;
+ return vec3(Unpack.data.x, Unpack.data.y, Unpack.data.z) * ScaleFactor;
+ }
+
+ GLM_FUNC_QUALIFIER uint16 packUnorm3x5_1x1(vec4 const & v)
+ {
+ u32vec4 const Unpack(round(clamp(v, 0.0f, 1.0f) * vec4(31.f, 31.f, 31.f, 1.f)));
+ detail::u5u5u5u1 Result;
+ Result.data.x = Unpack.x;
+ Result.data.y = Unpack.y;
+ Result.data.z = Unpack.z;
+ Result.data.w = Unpack.w;
+ return Result.pack;
+ }
+
+ GLM_FUNC_QUALIFIER vec4 unpackUnorm3x5_1x1(uint16 v)
+ {
+ vec4 const ScaleFactor(1.f / 31.f, 1.f / 31.f, 1.f / 31.f, 1.f);
+ detail::u5u5u5u1 Unpack;
+ Unpack.pack = v;
+ return vec4(Unpack.data.x, Unpack.data.y, Unpack.data.z, Unpack.data.w) * ScaleFactor;
+ }
+
+ GLM_FUNC_QUALIFIER uint8 packUnorm2x3_1x2(vec3 const & v)
+ {
+ u32vec3 const Unpack(round(clamp(v, 0.0f, 1.0f) * vec3(7.f, 7.f, 3.f)));
+ detail::u3u3u2 Result;
+ Result.data.x = Unpack.x;
+ Result.data.y = Unpack.y;
+ Result.data.z = Unpack.z;
+ return Result.pack;
+ }
+
+ GLM_FUNC_QUALIFIER vec3 unpackUnorm2x3_1x2(uint8 v)
+ {
+ vec3 const ScaleFactor(1.f / 7.f, 1.f / 7.f, 1.f / 3.f);
+ detail::u3u3u2 Unpack;
+ Unpack.pack = v;
+ return vec3(Unpack.data.x, Unpack.data.y, Unpack.data.z) * ScaleFactor;
+ }
+}//namespace glm
+
diff --git a/src/third_party/glm/glm/gtc/quaternion.hpp b/src/third_party/glm/glm/gtc/quaternion.hpp
new file mode 100644
index 0000000..72d0603
--- /dev/null
+++ b/src/third_party/glm/glm/gtc/quaternion.hpp
@@ -0,0 +1,397 @@
+/// @ref gtc_quaternion
+/// @file glm/gtc/quaternion.hpp
+///
+/// @see core (dependence)
+/// @see gtc_half_float (dependence)
+/// @see gtc_constants (dependence)
+///
+/// @defgroup gtc_quaternion GLM_GTC_quaternion
+/// @ingroup gtc
+///
+/// @brief Defines a templated quaternion type and several quaternion operations.
+///
+/// <glm/gtc/quaternion.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependency:
+#include "../mat3x3.hpp"
+#include "../mat4x4.hpp"
+#include "../vec3.hpp"
+#include "../vec4.hpp"
+#include "../gtc/constants.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTC_quaternion extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtc_quaternion
+ /// @{
+
+ template <typename T, precision P = defaultp>
+ struct tquat
+ {
+ // -- Implementation detail --
+
+ typedef tquat<T, P> type;
+ typedef T value_type;
+
+ // -- Data --
+
+# if GLM_HAS_ALIGNED_TYPE
+# if GLM_COMPILER & GLM_COMPILER_GCC
+# pragma GCC diagnostic push
+# pragma GCC diagnostic ignored "-Wpedantic"
+# endif
+# if GLM_COMPILER & GLM_COMPILER_CLANG
+# pragma clang diagnostic push
+# pragma clang diagnostic ignored "-Wgnu-anonymous-struct"
+# pragma clang diagnostic ignored "-Wnested-anon-types"
+# endif
+
+ union
+ {
+ struct { T x, y, z, w;};
+ typename detail::storage<T, sizeof(T) * 4, detail::is_aligned<P>::value>::type data;
+ };
+
+# if GLM_COMPILER & GLM_COMPILER_CLANG
+# pragma clang diagnostic pop
+# endif
+# if GLM_COMPILER & GLM_COMPILER_GCC
+# pragma GCC diagnostic pop
+# endif
+# else
+ T x, y, z, w;
+# endif
+
+ // -- Component accesses --
+
+ typedef length_t length_type;
+ /// Return the count of components of a quaternion
+ GLM_FUNC_DECL GLM_CONSTEXPR length_type length() const;
+
+ GLM_FUNC_DECL T & operator[](length_type i);
+ GLM_FUNC_DECL T const & operator[](length_type i) const;
+
+ // -- Implicit basic constructors --
+
+ GLM_FUNC_DECL GLM_CONSTEXPR tquat() GLM_DEFAULT_CTOR;
+ GLM_FUNC_DECL GLM_CONSTEXPR tquat(tquat<T, P> const & q) GLM_DEFAULT;
+ template <precision Q>
+ GLM_FUNC_DECL GLM_CONSTEXPR tquat(tquat<T, Q> const & q);
+
+ // -- Explicit basic constructors --
+
+ GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tquat(ctor);
+ GLM_FUNC_DECL GLM_CONSTEXPR tquat(T const & s, tvec3<T, P> const & v);
+ GLM_FUNC_DECL GLM_CONSTEXPR tquat(T const & w, T const & x, T const & y, T const & z);
+
+ // -- Conversion constructors --
+
+ template <typename U, precision Q>
+ GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT tquat(tquat<U, Q> const & q);
+
+ /// Explicit conversion operators
+# if GLM_HAS_EXPLICIT_CONVERSION_OPERATORS
+ GLM_FUNC_DECL explicit operator tmat3x3<T, P>();
+ GLM_FUNC_DECL explicit operator tmat4x4<T, P>();
+# endif
+
+ /// Create a quaternion from two normalized axis
+ ///
+ /// @param u A first normalized axis
+ /// @param v A second normalized axis
+ /// @see gtc_quaternion
+ /// @see http://lolengine.net/blog/2013/09/18/beautiful-maths-quaternion-from-vectors
+ GLM_FUNC_DECL tquat(tvec3<T, P> const & u, tvec3<T, P> const & v);
+
+ /// Build a quaternion from euler angles (pitch, yaw, roll), in radians.
+ GLM_FUNC_DECL GLM_EXPLICIT tquat(tvec3<T, P> const & eulerAngles);
+ GLM_FUNC_DECL GLM_EXPLICIT tquat(tmat3x3<T, P> const & m);
+ GLM_FUNC_DECL GLM_EXPLICIT tquat(tmat4x4<T, P> const & m);
+
+ // -- Unary arithmetic operators --
+
+ GLM_FUNC_DECL tquat<T, P> & operator=(tquat<T, P> const & m) GLM_DEFAULT;
+
+ template <typename U>
+ GLM_FUNC_DECL tquat<T, P> & operator=(tquat<U, P> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tquat<T, P> & operator+=(tquat<U, P> const & q);
+ template <typename U>
+ GLM_FUNC_DECL tquat<T, P> & operator-=(tquat<U, P> const & q);
+ template <typename U>
+ GLM_FUNC_DECL tquat<T, P> & operator*=(tquat<U, P> const & q);
+ template <typename U>
+ GLM_FUNC_DECL tquat<T, P> & operator*=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tquat<T, P> & operator/=(U s);
+ };
+
+ // -- Unary bit operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tquat<T, P> operator+(tquat<T, P> const & q);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tquat<T, P> operator-(tquat<T, P> const & q);
+
+ // -- Binary operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tquat<T, P> operator+(tquat<T, P> const & q, tquat<T, P> const & p);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tquat<T, P> operator*(tquat<T, P> const & q, tquat<T, P> const & p);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator*(tquat<T, P> const & q, tvec3<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator*(tvec3<T, P> const & v, tquat<T, P> const & q);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator*(tquat<T, P> const & q, tvec4<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator*(tvec4<T, P> const & v, tquat<T, P> const & q);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tquat<T, P> operator*(tquat<T, P> const & q, T const & s);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tquat<T, P> operator*(T const & s, tquat<T, P> const & q);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tquat<T, P> operator/(tquat<T, P> const & q, T const & s);
+
+ // -- Boolean operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL bool operator==(tquat<T, P> const & q1, tquat<T, P> const & q2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL bool operator!=(tquat<T, P> const & q1, tquat<T, P> const & q2);
+
+ /// Returns the length of the quaternion.
+ ///
+ /// @see gtc_quaternion
+ template <typename T, precision P>
+ GLM_FUNC_DECL T length(tquat<T, P> const & q);
+
+ /// Returns the normalized quaternion.
+ ///
+ /// @see gtc_quaternion
+ template <typename T, precision P>
+ GLM_FUNC_DECL tquat<T, P> normalize(tquat<T, P> const & q);
+
+ /// Returns dot product of q1 and q2, i.e., q1[0] * q2[0] + q1[1] * q2[1] + ...
+ ///
+ /// @see gtc_quaternion
+ template <typename T, precision P, template <typename, precision> class quatType>
+ GLM_FUNC_DECL T dot(quatType<T, P> const & x, quatType<T, P> const & y);
+
+ /// Spherical linear interpolation of two quaternions.
+ /// The interpolation is oriented and the rotation is performed at constant speed.
+ /// For short path spherical linear interpolation, use the slerp function.
+ ///
+ /// @param x A quaternion
+ /// @param y A quaternion
+ /// @param a Interpolation factor. The interpolation is defined beyond the range [0, 1].
+ /// @tparam T Value type used to build the quaternion. Supported: half, float or double.
+ /// @see gtc_quaternion
+ /// @see - slerp(tquat<T, P> const & x, tquat<T, P> const & y, T const & a)
+ template <typename T, precision P>
+ GLM_FUNC_DECL tquat<T, P> mix(tquat<T, P> const & x, tquat<T, P> const & y, T a);
+
+ /// Linear interpolation of two quaternions.
+ /// The interpolation is oriented.
+ ///
+ /// @param x A quaternion
+ /// @param y A quaternion
+ /// @param a Interpolation factor. The interpolation is defined in the range [0, 1].
+ /// @tparam T Value type used to build the quaternion. Supported: half, float or double.
+ /// @see gtc_quaternion
+ template <typename T, precision P>
+ GLM_FUNC_DECL tquat<T, P> lerp(tquat<T, P> const & x, tquat<T, P> const & y, T a);
+
+ /// Spherical linear interpolation of two quaternions.
+ /// The interpolation always take the short path and the rotation is performed at constant speed.
+ ///
+ /// @param x A quaternion
+ /// @param y A quaternion
+ /// @param a Interpolation factor. The interpolation is defined beyond the range [0, 1].
+ /// @tparam T Value type used to build the quaternion. Supported: half, float or double.
+ /// @see gtc_quaternion
+ template <typename T, precision P>
+ GLM_FUNC_DECL tquat<T, P> slerp(tquat<T, P> const & x, tquat<T, P> const & y, T a);
+
+ /// Returns the q conjugate.
+ ///
+ /// @see gtc_quaternion
+ template <typename T, precision P>
+ GLM_FUNC_DECL tquat<T, P> conjugate(tquat<T, P> const & q);
+
+ /// Returns the q inverse.
+ ///
+ /// @see gtc_quaternion
+ template <typename T, precision P>
+ GLM_FUNC_DECL tquat<T, P> inverse(tquat<T, P> const & q);
+
+ /// Rotates a quaternion from a vector of 3 components axis and an angle.
+ ///
+ /// @param q Source orientation
+ /// @param angle Angle expressed in radians.
+ /// @param axis Axis of the rotation
+ ///
+ /// @see gtc_quaternion
+ template <typename T, precision P>
+ GLM_FUNC_DECL tquat<T, P> rotate(tquat<T, P> const & q, T const & angle, tvec3<T, P> const & axis);
+
+ /// Returns euler angles, pitch as x, yaw as y, roll as z.
+ /// The result is expressed in radians if GLM_FORCE_RADIANS is defined or degrees otherwise.
+ ///
+ /// @see gtc_quaternion
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> eulerAngles(tquat<T, P> const & x);
+
+ /// Returns roll value of euler angles expressed in radians.
+ ///
+ /// @see gtx_quaternion
+ template <typename T, precision P>
+ GLM_FUNC_DECL T roll(tquat<T, P> const & x);
+
+ /// Returns pitch value of euler angles expressed in radians.
+ ///
+ /// @see gtx_quaternion
+ template <typename T, precision P>
+ GLM_FUNC_DECL T pitch(tquat<T, P> const & x);
+
+ /// Returns yaw value of euler angles expressed in radians.
+ ///
+ /// @see gtx_quaternion
+ template <typename T, precision P>
+ GLM_FUNC_DECL T yaw(tquat<T, P> const & x);
+
+ /// Converts a quaternion to a 3 * 3 matrix.
+ ///
+ /// @see gtc_quaternion
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x3<T, P> mat3_cast(tquat<T, P> const & x);
+
+ /// Converts a quaternion to a 4 * 4 matrix.
+ ///
+ /// @see gtc_quaternion
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x4<T, P> mat4_cast(tquat<T, P> const & x);
+
+ /// Converts a 3 * 3 matrix to a quaternion.
+ ///
+ /// @see gtc_quaternion
+ template <typename T, precision P>
+ GLM_FUNC_DECL tquat<T, P> quat_cast(tmat3x3<T, P> const & x);
+
+ /// Converts a 4 * 4 matrix to a quaternion.
+ ///
+ /// @see gtc_quaternion
+ template <typename T, precision P>
+ GLM_FUNC_DECL tquat<T, P> quat_cast(tmat4x4<T, P> const & x);
+
+ /// Returns the quaternion rotation angle.
+ ///
+ /// @see gtc_quaternion
+ template <typename T, precision P>
+ GLM_FUNC_DECL T angle(tquat<T, P> const & x);
+
+ /// Returns the q rotation axis.
+ ///
+ /// @see gtc_quaternion
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> axis(tquat<T, P> const & x);
+
+ /// Build a quaternion from an angle and a normalized axis.
+ ///
+ /// @param angle Angle expressed in radians.
+ /// @param axis Axis of the quaternion, must be normalized.
+ ///
+ /// @see gtc_quaternion
+ template <typename T, precision P>
+ GLM_FUNC_DECL tquat<T, P> angleAxis(T const & angle, tvec3<T, P> const & axis);
+
+ /// Returns the component-wise comparison result of x < y.
+ ///
+ /// @tparam quatType Floating-point quaternion types.
+ ///
+ /// @see gtc_quaternion
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<bool, P> lessThan(tquat<T, P> const & x, tquat<T, P> const & y);
+
+ /// Returns the component-wise comparison of result x <= y.
+ ///
+ /// @tparam quatType Floating-point quaternion types.
+ ///
+ /// @see gtc_quaternion
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<bool, P> lessThanEqual(tquat<T, P> const & x, tquat<T, P> const & y);
+
+ /// Returns the component-wise comparison of result x > y.
+ ///
+ /// @tparam quatType Floating-point quaternion types.
+ ///
+ /// @see gtc_quaternion
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<bool, P> greaterThan(tquat<T, P> const & x, tquat<T, P> const & y);
+
+ /// Returns the component-wise comparison of result x >= y.
+ ///
+ /// @tparam quatType Floating-point quaternion types.
+ ///
+ /// @see gtc_quaternion
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<bool, P> greaterThanEqual(tquat<T, P> const & x, tquat<T, P> const & y);
+
+ /// Returns the component-wise comparison of result x == y.
+ ///
+ /// @tparam quatType Floating-point quaternion types.
+ ///
+ /// @see gtc_quaternion
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<bool, P> equal(tquat<T, P> const & x, tquat<T, P> const & y);
+
+ /// Returns the component-wise comparison of result x != y.
+ ///
+ /// @tparam quatType Floating-point quaternion types.
+ ///
+ /// @see gtc_quaternion
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<bool, P> notEqual(tquat<T, P> const & x, tquat<T, P> const & y);
+
+ /// Returns true if x holds a NaN (not a number)
+ /// representation in the underlying implementation's set of
+ /// floating point representations. Returns false otherwise,
+ /// including for implementations with no NaN
+ /// representations.
+ ///
+ /// /!\ When using compiler fast math, this function may fail.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<bool, P> isnan(tquat<T, P> const & x);
+
+ /// Returns true if x holds a positive infinity or negative
+ /// infinity representation in the underlying implementation's
+ /// set of floating point representations. Returns false
+ /// otherwise, including for implementations with no infinity
+ /// representations.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<bool, P> isinf(tquat<T, P> const & x);
+
+ /// @}
+} //namespace glm
+
+#include "quaternion.inl"
diff --git a/src/third_party/glm/glm/gtc/quaternion.inl b/src/third_party/glm/glm/gtc/quaternion.inl
new file mode 100644
index 0000000..f062b0a
--- /dev/null
+++ b/src/third_party/glm/glm/gtc/quaternion.inl
@@ -0,0 +1,801 @@
+/// @ref gtc_quaternion
+/// @file glm/gtc/quaternion.inl
+
+#include "../trigonometric.hpp"
+#include "../geometric.hpp"
+#include "../exponential.hpp"
+#include <limits>
+
+namespace glm{
+namespace detail
+{
+ template <typename T, precision P, bool Aligned>
+ struct compute_dot<tquat, T, P, Aligned>
+ {
+ static GLM_FUNC_QUALIFIER T call(tquat<T, P> const& x, tquat<T, P> const& y)
+ {
+ tvec4<T, P> tmp(x.x * y.x, x.y * y.y, x.z * y.z, x.w * y.w);
+ return (tmp.x + tmp.y) + (tmp.z + tmp.w);
+ }
+ };
+
+ template <typename T, precision P, bool Aligned>
+ struct compute_quat_add
+ {
+ static tquat<T, P> call(tquat<T, P> const& q, tquat<T, P> const& p)
+ {
+ return tquat<T, P>(q.w + p.w, q.x + p.x, q.y + p.y, q.z + p.z);
+ }
+ };
+
+ template <typename T, precision P, bool Aligned>
+ struct compute_quat_sub
+ {
+ static tquat<T, P> call(tquat<T, P> const& q, tquat<T, P> const& p)
+ {
+ return tquat<T, P>(q.w - p.w, q.x - p.x, q.y - p.y, q.z - p.z);
+ }
+ };
+
+ template <typename T, precision P, bool Aligned>
+ struct compute_quat_mul_scalar
+ {
+ static tquat<T, P> call(tquat<T, P> const& q, T s)
+ {
+ return tquat<T, P>(q.w * s, q.x * s, q.y * s, q.z * s);
+ }
+ };
+
+ template <typename T, precision P, bool Aligned>
+ struct compute_quat_div_scalar
+ {
+ static tquat<T, P> call(tquat<T, P> const& q, T s)
+ {
+ return tquat<T, P>(q.w / s, q.x / s, q.y / s, q.z / s);
+ }
+ };
+
+ template <typename T, precision P, bool Aligned>
+ struct compute_quat_mul_vec4
+ {
+ static tvec4<T, P> call(tquat<T, P> const & q, tvec4<T, P> const & v)
+ {
+ return tvec4<T, P>(q * tvec3<T, P>(v), v.w);
+ }
+ };
+}//namespace detail
+
+ // -- Component accesses --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tquat<T, P>::length_type tquat<T, P>::length() const
+ {
+ return 4;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER T & tquat<T, P>::operator[](typename tquat<T, P>::length_type i)
+ {
+ assert(i >= 0 && i < this->length());
+ return (&x)[i];
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER T const & tquat<T, P>::operator[](typename tquat<T, P>::length_type i) const
+ {
+ assert(i >= 0 && i < this->length());
+ return (&x)[i];
+ }
+
+ // -- Implicit basic constructors --
+
+# if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT)
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tquat<T, P>::tquat()
+# ifndef GLM_FORCE_NO_CTOR_INIT
+ : x(0), y(0), z(0), w(1)
+# endif
+ {}
+# endif
+
+# if !GLM_HAS_DEFAULTED_FUNCTIONS
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tquat<T, P>::tquat(tquat<T, P> const & q)
+ : x(q.x), y(q.y), z(q.z), w(q.w)
+ {}
+# endif//!GLM_HAS_DEFAULTED_FUNCTIONS
+
+ template <typename T, precision P>
+ template <precision Q>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tquat<T, P>::tquat(tquat<T, Q> const & q)
+ : x(q.x), y(q.y), z(q.z), w(q.w)
+ {}
+
+ // -- Explicit basic constructors --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tquat<T, P>::tquat(ctor)
+ {}
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tquat<T, P>::tquat(T const & s, tvec3<T, P> const & v)
+ : x(v.x), y(v.y), z(v.z), w(s)
+ {}
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tquat<T, P>::tquat(T const & w, T const & x, T const & y, T const & z)
+ : x(x), y(y), z(z), w(w)
+ {}
+
+ // -- Conversion constructors --
+
+ template <typename T, precision P>
+ template <typename U, precision Q>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tquat<T, P>::tquat(tquat<U, Q> const & q)
+ : x(static_cast<T>(q.x))
+ , y(static_cast<T>(q.y))
+ , z(static_cast<T>(q.z))
+ , w(static_cast<T>(q.w))
+ {}
+
+ //template <typename valType>
+ //GLM_FUNC_QUALIFIER tquat<valType>::tquat
+ //(
+ // valType const & pitch,
+ // valType const & yaw,
+ // valType const & roll
+ //)
+ //{
+ // tvec3<valType> eulerAngle(pitch * valType(0.5), yaw * valType(0.5), roll * valType(0.5));
+ // tvec3<valType> c = glm::cos(eulerAngle * valType(0.5));
+ // tvec3<valType> s = glm::sin(eulerAngle * valType(0.5));
+ //
+ // this->w = c.x * c.y * c.z + s.x * s.y * s.z;
+ // this->x = s.x * c.y * c.z - c.x * s.y * s.z;
+ // this->y = c.x * s.y * c.z + s.x * c.y * s.z;
+ // this->z = c.x * c.y * s.z - s.x * s.y * c.z;
+ //}
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tquat<T, P>::tquat(tvec3<T, P> const & u, tvec3<T, P> const & v)
+ {
+ tvec3<T, P> const LocalW(cross(u, v));
+ T Dot = detail::compute_dot<tvec3, T, P, detail::is_aligned<P>::value>::call(u, v);
+ tquat<T, P> q(T(1) + Dot, LocalW.x, LocalW.y, LocalW.z);
+
+ *this = normalize(q);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tquat<T, P>::tquat(tvec3<T, P> const & eulerAngle)
+ {
+ tvec3<T, P> c = glm::cos(eulerAngle * T(0.5));
+ tvec3<T, P> s = glm::sin(eulerAngle * T(0.5));
+
+ this->w = c.x * c.y * c.z + s.x * s.y * s.z;
+ this->x = s.x * c.y * c.z - c.x * s.y * s.z;
+ this->y = c.x * s.y * c.z + s.x * c.y * s.z;
+ this->z = c.x * c.y * s.z - s.x * s.y * c.z;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tquat<T, P>::tquat(tmat3x3<T, P> const & m)
+ {
+ *this = quat_cast(m);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tquat<T, P>::tquat(tmat4x4<T, P> const & m)
+ {
+ *this = quat_cast(m);
+ }
+
+# if GLM_HAS_EXPLICIT_CONVERSION_OPERATORS
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tquat<T, P>::operator tmat3x3<T, P>()
+ {
+ return mat3_cast(*this);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tquat<T, P>::operator tmat4x4<T, P>()
+ {
+ return mat4_cast(*this);
+ }
+# endif//GLM_HAS_EXPLICIT_CONVERSION_OPERATORS
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tquat<T, P> conjugate(tquat<T, P> const & q)
+ {
+ return tquat<T, P>(q.w, -q.x, -q.y, -q.z);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tquat<T, P> inverse(tquat<T, P> const & q)
+ {
+ return conjugate(q) / dot(q, q);
+ }
+
+ // -- Unary arithmetic operators --
+
+# if !GLM_HAS_DEFAULTED_FUNCTIONS
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tquat<T, P> & tquat<T, P>::operator=(tquat<T, P> const & q)
+ {
+ this->w = q.w;
+ this->x = q.x;
+ this->y = q.y;
+ this->z = q.z;
+ return *this;
+ }
+# endif//!GLM_HAS_DEFAULTED_FUNCTIONS
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tquat<T, P> & tquat<T, P>::operator=(tquat<U, P> const & q)
+ {
+ this->w = static_cast<T>(q.w);
+ this->x = static_cast<T>(q.x);
+ this->y = static_cast<T>(q.y);
+ this->z = static_cast<T>(q.z);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tquat<T, P> & tquat<T, P>::operator+=(tquat<U, P> const& q)
+ {
+ return (*this = detail::compute_quat_add<T, P, detail::is_aligned<P>::value>::call(*this, tquat<T, P>(q)));
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tquat<T, P> & tquat<T, P>::operator-=(tquat<U, P> const& q)
+ {
+ return (*this = detail::compute_quat_sub<T, P, detail::is_aligned<P>::value>::call(*this, tquat<T, P>(q)));
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tquat<T, P> & tquat<T, P>::operator*=(tquat<U, P> const & r)
+ {
+ tquat<T, P> const p(*this);
+ tquat<T, P> const q(r);
+
+ this->w = p.w * q.w - p.x * q.x - p.y * q.y - p.z * q.z;
+ this->x = p.w * q.x + p.x * q.w + p.y * q.z - p.z * q.y;
+ this->y = p.w * q.y + p.y * q.w + p.z * q.x - p.x * q.z;
+ this->z = p.w * q.z + p.z * q.w + p.x * q.y - p.y * q.x;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tquat<T, P> & tquat<T, P>::operator*=(U s)
+ {
+ return (*this = detail::compute_quat_mul_scalar<T, P, detail::is_aligned<P>::value>::call(*this, static_cast<U>(s)));
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tquat<T, P> & tquat<T, P>::operator/=(U s)
+ {
+ return (*this = detail::compute_quat_div_scalar<T, P, detail::is_aligned<P>::value>::call(*this, static_cast<U>(s)));
+ }
+
+ // -- Unary bit operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tquat<T, P> operator+(tquat<T, P> const & q)
+ {
+ return q;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tquat<T, P> operator-(tquat<T, P> const & q)
+ {
+ return tquat<T, P>(-q.w, -q.x, -q.y, -q.z);
+ }
+
+ // -- Binary operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tquat<T, P> operator+(tquat<T, P> const & q, tquat<T, P> const & p)
+ {
+ return tquat<T, P>(q) += p;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tquat<T, P> operator*(tquat<T, P> const & q, tquat<T, P> const & p)
+ {
+ return tquat<T, P>(q) *= p;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator*(tquat<T, P> const & q, tvec3<T, P> const & v)
+ {
+ tvec3<T, P> const QuatVector(q.x, q.y, q.z);
+ tvec3<T, P> const uv(glm::cross(QuatVector, v));
+ tvec3<T, P> const uuv(glm::cross(QuatVector, uv));
+
+ return v + ((uv * q.w) + uuv) * static_cast<T>(2);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator*(tvec3<T, P> const & v, tquat<T, P> const & q)
+ {
+ return glm::inverse(q) * v;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator*(tquat<T, P> const& q, tvec4<T, P> const& v)
+ {
+ return detail::compute_quat_mul_vec4<T, P, detail::is_aligned<P>::value>::call(q, v);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator*(tvec4<T, P> const & v, tquat<T, P> const & q)
+ {
+ return glm::inverse(q) * v;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tquat<T, P> operator*(tquat<T, P> const & q, T const & s)
+ {
+ return tquat<T, P>(
+ q.w * s, q.x * s, q.y * s, q.z * s);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tquat<T, P> operator*(T const & s, tquat<T, P> const & q)
+ {
+ return q * s;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tquat<T, P> operator/(tquat<T, P> const & q, T const & s)
+ {
+ return tquat<T, P>(
+ q.w / s, q.x / s, q.y / s, q.z / s);
+ }
+
+ // -- Boolean operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER bool operator==(tquat<T, P> const & q1, tquat<T, P> const & q2)
+ {
+ return (q1.x == q2.x) && (q1.y == q2.y) && (q1.z == q2.z) && (q1.w == q2.w);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER bool operator!=(tquat<T, P> const & q1, tquat<T, P> const & q2)
+ {
+ return (q1.x != q2.x) || (q1.y != q2.y) || (q1.z != q2.z) || (q1.w != q2.w);
+ }
+
+ // -- Operations --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER T length(tquat<T, P> const & q)
+ {
+ return glm::sqrt(dot(q, q));
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tquat<T, P> normalize(tquat<T, P> const & q)
+ {
+ T len = length(q);
+ if(len <= T(0)) // Problem
+ return tquat<T, P>(1, 0, 0, 0);
+ T oneOverLen = T(1) / len;
+ return tquat<T, P>(q.w * oneOverLen, q.x * oneOverLen, q.y * oneOverLen, q.z * oneOverLen);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tquat<T, P> cross(tquat<T, P> const & q1, tquat<T, P> const & q2)
+ {
+ return tquat<T, P>(
+ q1.w * q2.w - q1.x * q2.x - q1.y * q2.y - q1.z * q2.z,
+ q1.w * q2.x + q1.x * q2.w + q1.y * q2.z - q1.z * q2.y,
+ q1.w * q2.y + q1.y * q2.w + q1.z * q2.x - q1.x * q2.z,
+ q1.w * q2.z + q1.z * q2.w + q1.x * q2.y - q1.y * q2.x);
+ }
+/*
+ // (x * sin(1 - a) * angle / sin(angle)) + (y * sin(a) * angle / sin(angle))
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tquat<T, P> mix(tquat<T, P> const & x, tquat<T, P> const & y, T const & a)
+ {
+ if(a <= T(0)) return x;
+ if(a >= T(1)) return y;
+
+ float fCos = dot(x, y);
+ tquat<T, P> y2(y); //BUG!!! tquat<T, P> y2;
+ if(fCos < T(0))
+ {
+ y2 = -y;
+ fCos = -fCos;
+ }
+
+ //if(fCos > 1.0f) // problem
+ float k0, k1;
+ if(fCos > T(0.9999))
+ {
+ k0 = T(1) - a;
+ k1 = T(0) + a; //BUG!!! 1.0f + a;
+ }
+ else
+ {
+ T fSin = sqrt(T(1) - fCos * fCos);
+ T fAngle = atan(fSin, fCos);
+ T fOneOverSin = static_cast<T>(1) / fSin;
+ k0 = sin((T(1) - a) * fAngle) * fOneOverSin;
+ k1 = sin((T(0) + a) * fAngle) * fOneOverSin;
+ }
+
+ return tquat<T, P>(
+ k0 * x.w + k1 * y2.w,
+ k0 * x.x + k1 * y2.x,
+ k0 * x.y + k1 * y2.y,
+ k0 * x.z + k1 * y2.z);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tquat<T, P> mix2
+ (
+ tquat<T, P> const & x,
+ tquat<T, P> const & y,
+ T const & a
+ )
+ {
+ bool flip = false;
+ if(a <= static_cast<T>(0)) return x;
+ if(a >= static_cast<T>(1)) return y;
+
+ T cos_t = dot(x, y);
+ if(cos_t < T(0))
+ {
+ cos_t = -cos_t;
+ flip = true;
+ }
+
+ T alpha(0), beta(0);
+
+ if(T(1) - cos_t < 1e-7)
+ beta = static_cast<T>(1) - alpha;
+ else
+ {
+ T theta = acos(cos_t);
+ T sin_t = sin(theta);
+ beta = sin(theta * (T(1) - alpha)) / sin_t;
+ alpha = sin(alpha * theta) / sin_t;
+ }
+
+ if(flip)
+ alpha = -alpha;
+
+ return normalize(beta * x + alpha * y);
+ }
+*/
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tquat<T, P> mix(tquat<T, P> const & x, tquat<T, P> const & y, T a)
+ {
+ T cosTheta = dot(x, y);
+
+ // Perform a linear interpolation when cosTheta is close to 1 to avoid side effect of sin(angle) becoming a zero denominator
+ if(cosTheta > T(1) - epsilon<T>())
+ {
+ // Linear interpolation
+ return tquat<T, P>(
+ mix(x.w, y.w, a),
+ mix(x.x, y.x, a),
+ mix(x.y, y.y, a),
+ mix(x.z, y.z, a));
+ }
+ else
+ {
+ // Essential Mathematics, page 467
+ T angle = acos(cosTheta);
+ return (sin((T(1) - a) * angle) * x + sin(a * angle) * y) / sin(angle);
+ }
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tquat<T, P> lerp(tquat<T, P> const & x, tquat<T, P> const & y, T a)
+ {
+ // Lerp is only defined in [0, 1]
+ assert(a >= static_cast<T>(0));
+ assert(a <= static_cast<T>(1));
+
+ return x * (T(1) - a) + (y * a);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tquat<T, P> slerp(tquat<T, P> const & x, tquat<T, P> const & y, T a)
+ {
+ tquat<T, P> z = y;
+
+ T cosTheta = dot(x, y);
+
+ // If cosTheta < 0, the interpolation will take the long way around the sphere.
+ // To fix this, one quat must be negated.
+ if (cosTheta < T(0))
+ {
+ z = -y;
+ cosTheta = -cosTheta;
+ }
+
+ // Perform a linear interpolation when cosTheta is close to 1 to avoid side effect of sin(angle) becoming a zero denominator
+ if(cosTheta > T(1) - epsilon<T>())
+ {
+ // Linear interpolation
+ return tquat<T, P>(
+ mix(x.w, z.w, a),
+ mix(x.x, z.x, a),
+ mix(x.y, z.y, a),
+ mix(x.z, z.z, a));
+ }
+ else
+ {
+ // Essential Mathematics, page 467
+ T angle = acos(cosTheta);
+ return (sin((T(1) - a) * angle) * x + sin(a * angle) * z) / sin(angle);
+ }
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tquat<T, P> rotate(tquat<T, P> const & q, T const & angle, tvec3<T, P> const & v)
+ {
+ tvec3<T, P> Tmp = v;
+
+ // Axis of rotation must be normalised
+ T len = glm::length(Tmp);
+ if(abs(len - T(1)) > T(0.001))
+ {
+ T oneOverLen = static_cast<T>(1) / len;
+ Tmp.x *= oneOverLen;
+ Tmp.y *= oneOverLen;
+ Tmp.z *= oneOverLen;
+ }
+
+ T const AngleRad(angle);
+ T const Sin = sin(AngleRad * T(0.5));
+
+ return q * tquat<T, P>(cos(AngleRad * T(0.5)), Tmp.x * Sin, Tmp.y * Sin, Tmp.z * Sin);
+ //return gtc::quaternion::cross(q, tquat<T, P>(cos(AngleRad * T(0.5)), Tmp.x * fSin, Tmp.y * fSin, Tmp.z * fSin));
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> eulerAngles(tquat<T, P> const & x)
+ {
+ return tvec3<T, P>(pitch(x), yaw(x), roll(x));
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER T roll(tquat<T, P> const & q)
+ {
+ return T(atan(T(2) * (q.x * q.y + q.w * q.z), q.w * q.w + q.x * q.x - q.y * q.y - q.z * q.z));
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER T pitch(tquat<T, P> const & q)
+ {
+ return T(atan(T(2) * (q.y * q.z + q.w * q.x), q.w * q.w - q.x * q.x - q.y * q.y + q.z * q.z));
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER T yaw(tquat<T, P> const & q)
+ {
+ return asin(clamp(T(-2) * (q.x * q.z - q.w * q.y), T(-1), T(1)));
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> mat3_cast(tquat<T, P> const & q)
+ {
+ tmat3x3<T, P> Result(T(1));
+ T qxx(q.x * q.x);
+ T qyy(q.y * q.y);
+ T qzz(q.z * q.z);
+ T qxz(q.x * q.z);
+ T qxy(q.x * q.y);
+ T qyz(q.y * q.z);
+ T qwx(q.w * q.x);
+ T qwy(q.w * q.y);
+ T qwz(q.w * q.z);
+
+ Result[0][0] = T(1) - T(2) * (qyy + qzz);
+ Result[0][1] = T(2) * (qxy + qwz);
+ Result[0][2] = T(2) * (qxz - qwy);
+
+ Result[1][0] = T(2) * (qxy - qwz);
+ Result[1][1] = T(1) - T(2) * (qxx + qzz);
+ Result[1][2] = T(2) * (qyz + qwx);
+
+ Result[2][0] = T(2) * (qxz + qwy);
+ Result[2][1] = T(2) * (qyz - qwx);
+ Result[2][2] = T(1) - T(2) * (qxx + qyy);
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> mat4_cast(tquat<T, P> const & q)
+ {
+ return tmat4x4<T, P>(mat3_cast(q));
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tquat<T, P> quat_cast(tmat3x3<T, P> const & m)
+ {
+ T fourXSquaredMinus1 = m[0][0] - m[1][1] - m[2][2];
+ T fourYSquaredMinus1 = m[1][1] - m[0][0] - m[2][2];
+ T fourZSquaredMinus1 = m[2][2] - m[0][0] - m[1][1];
+ T fourWSquaredMinus1 = m[0][0] + m[1][1] + m[2][2];
+
+ int biggestIndex = 0;
+ T fourBiggestSquaredMinus1 = fourWSquaredMinus1;
+ if(fourXSquaredMinus1 > fourBiggestSquaredMinus1)
+ {
+ fourBiggestSquaredMinus1 = fourXSquaredMinus1;
+ biggestIndex = 1;
+ }
+ if(fourYSquaredMinus1 > fourBiggestSquaredMinus1)
+ {
+ fourBiggestSquaredMinus1 = fourYSquaredMinus1;
+ biggestIndex = 2;
+ }
+ if(fourZSquaredMinus1 > fourBiggestSquaredMinus1)
+ {
+ fourBiggestSquaredMinus1 = fourZSquaredMinus1;
+ biggestIndex = 3;
+ }
+
+ T biggestVal = sqrt(fourBiggestSquaredMinus1 + T(1)) * T(0.5);
+ T mult = static_cast<T>(0.25) / biggestVal;
+
+ tquat<T, P> Result(uninitialize);
+ switch(biggestIndex)
+ {
+ case 0:
+ Result.w = biggestVal;
+ Result.x = (m[1][2] - m[2][1]) * mult;
+ Result.y = (m[2][0] - m[0][2]) * mult;
+ Result.z = (m[0][1] - m[1][0]) * mult;
+ break;
+ case 1:
+ Result.w = (m[1][2] - m[2][1]) * mult;
+ Result.x = biggestVal;
+ Result.y = (m[0][1] + m[1][0]) * mult;
+ Result.z = (m[2][0] + m[0][2]) * mult;
+ break;
+ case 2:
+ Result.w = (m[2][0] - m[0][2]) * mult;
+ Result.x = (m[0][1] + m[1][0]) * mult;
+ Result.y = biggestVal;
+ Result.z = (m[1][2] + m[2][1]) * mult;
+ break;
+ case 3:
+ Result.w = (m[0][1] - m[1][0]) * mult;
+ Result.x = (m[2][0] + m[0][2]) * mult;
+ Result.y = (m[1][2] + m[2][1]) * mult;
+ Result.z = biggestVal;
+ break;
+
+ default: // Silence a -Wswitch-default warning in GCC. Should never actually get here. Assert is just for sanity.
+ assert(false);
+ break;
+ }
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tquat<T, P> quat_cast(tmat4x4<T, P> const & m4)
+ {
+ return quat_cast(tmat3x3<T, P>(m4));
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER T angle(tquat<T, P> const & x)
+ {
+ return acos(x.w) * T(2);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> axis(tquat<T, P> const & x)
+ {
+ T tmp1 = static_cast<T>(1) - x.w * x.w;
+ if(tmp1 <= static_cast<T>(0))
+ return tvec3<T, P>(0, 0, 1);
+ T tmp2 = static_cast<T>(1) / sqrt(tmp1);
+ return tvec3<T, P>(x.x * tmp2, x.y * tmp2, x.z * tmp2);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tquat<T, P> angleAxis(T const & angle, tvec3<T, P> const & v)
+ {
+ tquat<T, P> Result(uninitialize);
+
+ T const a(angle);
+ T const s = glm::sin(a * static_cast<T>(0.5));
+
+ Result.w = glm::cos(a * static_cast<T>(0.5));
+ Result.x = v.x * s;
+ Result.y = v.y * s;
+ Result.z = v.z * s;
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<bool, P> lessThan(tquat<T, P> const & x, tquat<T, P> const & y)
+ {
+ tvec4<bool, P> Result(uninitialize);
+ for(length_t i = 0; i < x.length(); ++i)
+ Result[i] = x[i] < y[i];
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<bool, P> lessThanEqual(tquat<T, P> const & x, tquat<T, P> const & y)
+ {
+ tvec4<bool, P> Result(uninitialize);
+ for(length_t i = 0; i < x.length(); ++i)
+ Result[i] = x[i] <= y[i];
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<bool, P> greaterThan(tquat<T, P> const & x, tquat<T, P> const & y)
+ {
+ tvec4<bool, P> Result(uninitialize);
+ for(length_t i = 0; i < x.length(); ++i)
+ Result[i] = x[i] > y[i];
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<bool, P> greaterThanEqual(tquat<T, P> const & x, tquat<T, P> const & y)
+ {
+ tvec4<bool, P> Result(uninitialize);
+ for(length_t i = 0; i < x.length(); ++i)
+ Result[i] = x[i] >= y[i];
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<bool, P> equal(tquat<T, P> const & x, tquat<T, P> const & y)
+ {
+ tvec4<bool, P> Result(uninitialize);
+ for(length_t i = 0; i < x.length(); ++i)
+ Result[i] = x[i] == y[i];
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<bool, P> notEqual(tquat<T, P> const & x, tquat<T, P> const & y)
+ {
+ tvec4<bool, P> Result(uninitialize);
+ for(length_t i = 0; i < x.length(); ++i)
+ Result[i] = x[i] != y[i];
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<bool, P> isnan(tquat<T, P> const& q)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'isnan' only accept floating-point inputs");
+
+ return tvec4<bool, P>(isnan(q.x), isnan(q.y), isnan(q.z), isnan(q.w));
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<bool, P> isinf(tquat<T, P> const& q)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'isinf' only accept floating-point inputs");
+
+ return tvec4<bool, P>(isinf(q.x), isinf(q.y), isinf(q.z), isinf(q.w));
+ }
+}//namespace glm
+
+#if GLM_ARCH != GLM_ARCH_PURE && GLM_HAS_ALIGNED_TYPE
+# include "quaternion_simd.inl"
+#endif
+
diff --git a/src/third_party/glm/glm/gtc/quaternion_simd.inl b/src/third_party/glm/glm/gtc/quaternion_simd.inl
new file mode 100644
index 0000000..cca874b
--- /dev/null
+++ b/src/third_party/glm/glm/gtc/quaternion_simd.inl
@@ -0,0 +1,198 @@
+/// @ref core
+/// @file glm/gtc/quaternion_simd.inl
+
+#if GLM_ARCH & GLM_ARCH_SSE2_BIT
+
+namespace glm{
+namespace detail
+{
+/*
+ template <precision P>
+ struct compute_quat_mul<float, P, true>
+ {
+ static tquat<float, P> call(tquat<float, P> const& q1, tquat<float, P> const& q2)
+ {
+ // SSE2 STATS: 11 shuffle, 8 mul, 8 add
+ // SSE4 STATS: 3 shuffle, 4 mul, 4 dpps
+
+ __m128 const mul0 = _mm_mul_ps(q1.Data, _mm_shuffle_ps(q2.Data, q2.Data, _MM_SHUFFLE(0, 1, 2, 3)));
+ __m128 const mul1 = _mm_mul_ps(q1.Data, _mm_shuffle_ps(q2.Data, q2.Data, _MM_SHUFFLE(1, 0, 3, 2)));
+ __m128 const mul2 = _mm_mul_ps(q1.Data, _mm_shuffle_ps(q2.Data, q2.Data, _MM_SHUFFLE(2, 3, 0, 1)));
+ __m128 const mul3 = _mm_mul_ps(q1.Data, q2.Data);
+
+# if GLM_ARCH & GLM_ARCH_SSE41_BIT
+ __m128 const add0 = _mm_dp_ps(mul0, _mm_set_ps(1.0f, -1.0f, 1.0f, 1.0f), 0xff);
+ __m128 const add1 = _mm_dp_ps(mul1, _mm_set_ps(1.0f, 1.0f, 1.0f, -1.0f), 0xff);
+ __m128 const add2 = _mm_dp_ps(mul2, _mm_set_ps(1.0f, 1.0f, -1.0f, 1.0f), 0xff);
+ __m128 const add3 = _mm_dp_ps(mul3, _mm_set_ps(1.0f, -1.0f, -1.0f, -1.0f), 0xff);
+# else
+ __m128 const mul4 = _mm_mul_ps(mul0, _mm_set_ps(1.0f, -1.0f, 1.0f, 1.0f));
+ __m128 const add0 = _mm_add_ps(mul0, _mm_movehl_ps(mul4, mul4));
+ __m128 const add4 = _mm_add_ss(add0, _mm_shuffle_ps(add0, add0, 1));
+
+ __m128 const mul5 = _mm_mul_ps(mul1, _mm_set_ps(1.0f, 1.0f, 1.0f, -1.0f));
+ __m128 const add1 = _mm_add_ps(mul1, _mm_movehl_ps(mul5, mul5));
+ __m128 const add5 = _mm_add_ss(add1, _mm_shuffle_ps(add1, add1, 1));
+
+ __m128 const mul6 = _mm_mul_ps(mul2, _mm_set_ps(1.0f, 1.0f, -1.0f, 1.0f));
+ __m128 const add2 = _mm_add_ps(mul6, _mm_movehl_ps(mul6, mul6));
+ __m128 const add6 = _mm_add_ss(add2, _mm_shuffle_ps(add2, add2, 1));
+
+ __m128 const mul7 = _mm_mul_ps(mul3, _mm_set_ps(1.0f, -1.0f, -1.0f, -1.0f));
+ __m128 const add3 = _mm_add_ps(mul3, _mm_movehl_ps(mul7, mul7));
+ __m128 const add7 = _mm_add_ss(add3, _mm_shuffle_ps(add3, add3, 1));
+ #endif
+
+ // This SIMD code is a politically correct way of doing this, but in every test I've tried it has been slower than
+ // the final code below. I'll keep this here for reference - maybe somebody else can do something better...
+ //
+ //__m128 xxyy = _mm_shuffle_ps(add4, add5, _MM_SHUFFLE(0, 0, 0, 0));
+ //__m128 zzww = _mm_shuffle_ps(add6, add7, _MM_SHUFFLE(0, 0, 0, 0));
+ //
+ //return _mm_shuffle_ps(xxyy, zzww, _MM_SHUFFLE(2, 0, 2, 0));
+
+ tquat<float, P> Result(uninitialize);
+ _mm_store_ss(&Result.x, add4);
+ _mm_store_ss(&Result.y, add5);
+ _mm_store_ss(&Result.z, add6);
+ _mm_store_ss(&Result.w, add7);
+ return Result;
+ }
+ };
+*/
+
+ template <precision P>
+ struct compute_dot<tquat, float, P, true>
+ {
+ static GLM_FUNC_QUALIFIER float call(tquat<float, P> const& x, tquat<float, P> const& y)
+ {
+ return _mm_cvtss_f32(glm_vec1_dot(x.data, y.data));
+ }
+ };
+
+ template <precision P>
+ struct compute_quat_add<float, P, true>
+ {
+ static tquat<float, P> call(tquat<float, P> const& q, tquat<float, P> const& p)
+ {
+ tquat<float, P> Result(uninitialize);
+ Result.data = _mm_add_ps(q.data, p.data);
+ return Result;
+ }
+ };
+
+# if GLM_ARCH & GLM_ARCH_AVX_BIT
+ template <precision P>
+ struct compute_quat_add<double, P, true>
+ {
+ static tquat<double, P> call(tquat<double, P> const & a, tquat<double, P> const & b)
+ {
+ tquat<double, P> Result(uninitialize);
+ Result.data = _mm256_add_pd(a.data, b.data);
+ return Result;
+ }
+ };
+# endif
+
+ template <precision P>
+ struct compute_quat_sub<float, P, true>
+ {
+ static tquat<float, P> call(tquat<float, P> const& q, tquat<float, P> const& p)
+ {
+ tvec4<float, P> Result(uninitialize);
+ Result.data = _mm_sub_ps(q.data, p.data);
+ return Result;
+ }
+ };
+
+# if GLM_ARCH & GLM_ARCH_AVX_BIT
+ template <precision P>
+ struct compute_quat_sub<double, P, true>
+ {
+ static tquat<double, P> call(tquat<double, P> const & a, tquat<double, P> const & b)
+ {
+ tquat<double, P> Result(uninitialize);
+ Result.data = _mm256_sub_pd(a.data, b.data);
+ return Result;
+ }
+ };
+# endif
+
+ template <precision P>
+ struct compute_quat_mul_scalar<float, P, true>
+ {
+ static tquat<float, P> call(tquat<float, P> const& q, float s)
+ {
+ tvec4<float, P> Result(uninitialize);
+ Result.data = _mm_mul_ps(q.data, _mm_set_ps1(s));
+ return Result;
+ }
+ };
+
+# if GLM_ARCH & GLM_ARCH_AVX_BIT
+ template <precision P>
+ struct compute_quat_mul_scalar<double, P, true>
+ {
+ static tquat<double, P> call(tquat<double, P> const& q, double s)
+ {
+ tquat<double, P> Result(uninitialize);
+ Result.data = _mm256_mul_pd(q.data, _mm_set_ps1(s));
+ return Result;
+ }
+ };
+# endif
+
+ template <precision P>
+ struct compute_quat_div_scalar<float, P, true>
+ {
+ static tquat<float, P> call(tquat<float, P> const& q, float s)
+ {
+ tvec4<float, P> Result(uninitialize);
+ Result.data = _mm_div_ps(q.data, _mm_set_ps1(s));
+ return Result;
+ }
+ };
+
+# if GLM_ARCH & GLM_ARCH_AVX_BIT
+ template <precision P>
+ struct compute_quat_div_scalar<double, P, true>
+ {
+ static tquat<double, P> call(tquat<double, P> const& q, double s)
+ {
+ tquat<double, P> Result(uninitialize);
+ Result.data = _mm256_div_pd(q.data, _mm_set_ps1(s));
+ return Result;
+ }
+ };
+# endif
+
+ template <precision P>
+ struct compute_quat_mul_vec4<float, P, true>
+ {
+ static tvec4<float, P> call(tquat<float, P> const& q, tvec4<float, P> const& v)
+ {
+ __m128 const q_wwww = _mm_shuffle_ps(q.data, q.data, _MM_SHUFFLE(3, 3, 3, 3));
+ __m128 const q_swp0 = _mm_shuffle_ps(q.data, q.data, _MM_SHUFFLE(3, 0, 2, 1));
+ __m128 const q_swp1 = _mm_shuffle_ps(q.data, q.data, _MM_SHUFFLE(3, 1, 0, 2));
+ __m128 const v_swp0 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(3, 0, 2, 1));
+ __m128 const v_swp1 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(3, 1, 0, 2));
+
+ __m128 uv = _mm_sub_ps(_mm_mul_ps(q_swp0, v_swp1), _mm_mul_ps(q_swp1, v_swp0));
+ __m128 uv_swp0 = _mm_shuffle_ps(uv, uv, _MM_SHUFFLE(3, 0, 2, 1));
+ __m128 uv_swp1 = _mm_shuffle_ps(uv, uv, _MM_SHUFFLE(3, 1, 0, 2));
+ __m128 uuv = _mm_sub_ps(_mm_mul_ps(q_swp0, uv_swp1), _mm_mul_ps(q_swp1, uv_swp0));
+
+ __m128 const two = _mm_set1_ps(2.0f);
+ uv = _mm_mul_ps(uv, _mm_mul_ps(q_wwww, two));
+ uuv = _mm_mul_ps(uuv, two);
+
+ tvec4<float, P> Result(uninitialize);
+ Result.data = _mm_add_ps(v.Data, _mm_add_ps(uv, uuv));
+ return Result;
+ }
+ };
+}//namespace detail
+}//namespace glm
+
+#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT
+
diff --git a/src/third_party/glm/glm/gtc/random.hpp b/src/third_party/glm/glm/gtc/random.hpp
new file mode 100644
index 0000000..fa3956e
--- /dev/null
+++ b/src/third_party/glm/glm/gtc/random.hpp
@@ -0,0 +1,98 @@
+/// @ref gtc_random
+/// @file glm/gtc/random.hpp
+///
+/// @see core (dependence)
+/// @see gtc_half_float (dependence)
+/// @see gtx_random (extended)
+///
+/// @defgroup gtc_random GLM_GTC_random
+/// @ingroup gtc
+///
+/// @brief Generate random number from various distribution methods.
+///
+/// <glm/gtc/random.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependency:
+#include "../vec2.hpp"
+#include "../vec3.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTC_random extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtc_random
+ /// @{
+
+ /// Generate random numbers in the interval [Min, Max], according a linear distribution
+ ///
+ /// @param Min
+ /// @param Max
+ /// @tparam genType Value type. Currently supported: float or double scalars.
+ /// @see gtc_random
+ template <typename genTYpe>
+ GLM_FUNC_DECL genTYpe linearRand(
+ genTYpe Min,
+ genTYpe Max);
+
+ /// Generate random numbers in the interval [Min, Max], according a linear distribution
+ ///
+ /// @param Min
+ /// @param Max
+ /// @tparam T Value type. Currently supported: float or double.
+ /// @tparam vecType A vertor type: tvec1, tvec2, tvec3, tvec4 or compatible
+ /// @see gtc_random
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> linearRand(
+ vecType<T, P> const & Min,
+ vecType<T, P> const & Max);
+
+ /// Generate random numbers in the interval [Min, Max], according a gaussian distribution
+ ///
+ /// @param Mean
+ /// @param Deviation
+ /// @see gtc_random
+ template <typename genType>
+ GLM_FUNC_DECL genType gaussRand(
+ genType Mean,
+ genType Deviation);
+
+ /// Generate a random 2D vector which coordinates are regulary distributed on a circle of a given radius
+ ///
+ /// @param Radius
+ /// @see gtc_random
+ template <typename T>
+ GLM_FUNC_DECL tvec2<T, defaultp> circularRand(
+ T Radius);
+
+ /// Generate a random 3D vector which coordinates are regulary distributed on a sphere of a given radius
+ ///
+ /// @param Radius
+ /// @see gtc_random
+ template <typename T>
+ GLM_FUNC_DECL tvec3<T, defaultp> sphericalRand(
+ T Radius);
+
+ /// Generate a random 2D vector which coordinates are regulary distributed within the area of a disk of a given radius
+ ///
+ /// @param Radius
+ /// @see gtc_random
+ template <typename T>
+ GLM_FUNC_DECL tvec2<T, defaultp> diskRand(
+ T Radius);
+
+ /// Generate a random 3D vector which coordinates are regulary distributed within the volume of a ball of a given radius
+ ///
+ /// @param Radius
+ /// @see gtc_random
+ template <typename T>
+ GLM_FUNC_DECL tvec3<T, defaultp> ballRand(
+ T Radius);
+
+ /// @}
+}//namespace glm
+
+#include "random.inl"
diff --git a/src/third_party/glm/glm/gtc/random.inl b/src/third_party/glm/glm/gtc/random.inl
new file mode 100644
index 0000000..7dc5e83
--- /dev/null
+++ b/src/third_party/glm/glm/gtc/random.inl
@@ -0,0 +1,350 @@
+/// @ref gtc_random
+/// @file glm/gtc/random.inl
+
+#include "../geometric.hpp"
+#include "../exponential.hpp"
+#include <cstdlib>
+#include <ctime>
+#include <cassert>
+
+namespace glm{
+namespace detail
+{
+ template <typename T, precision P, template <class, precision> class vecType>
+ struct compute_rand
+ {
+ GLM_FUNC_QUALIFIER static vecType<T, P> call();
+ };
+
+ template <precision P>
+ struct compute_rand<uint8, P, tvec1>
+ {
+ GLM_FUNC_QUALIFIER static tvec1<uint8, P> call()
+ {
+ return tvec1<uint8, P>(
+ std::rand() % std::numeric_limits<uint8>::max());
+ }
+ };
+
+ template <precision P>
+ struct compute_rand<uint8, P, tvec2>
+ {
+ GLM_FUNC_QUALIFIER static tvec2<uint8, P> call()
+ {
+ return tvec2<uint8, P>(
+ std::rand() % std::numeric_limits<uint8>::max(),
+ std::rand() % std::numeric_limits<uint8>::max());
+ }
+ };
+
+ template <precision P>
+ struct compute_rand<uint8, P, tvec3>
+ {
+ GLM_FUNC_QUALIFIER static tvec3<uint8, P> call()
+ {
+ return tvec3<uint8, P>(
+ std::rand() % std::numeric_limits<uint8>::max(),
+ std::rand() % std::numeric_limits<uint8>::max(),
+ std::rand() % std::numeric_limits<uint8>::max());
+ }
+ };
+
+ template <precision P>
+ struct compute_rand<uint8, P, tvec4>
+ {
+ GLM_FUNC_QUALIFIER static tvec4<uint8, P> call()
+ {
+ return tvec4<uint8, P>(
+ std::rand() % std::numeric_limits<uint8>::max(),
+ std::rand() % std::numeric_limits<uint8>::max(),
+ std::rand() % std::numeric_limits<uint8>::max(),
+ std::rand() % std::numeric_limits<uint8>::max());
+ }
+ };
+
+ template <precision P, template <class, precision> class vecType>
+ struct compute_rand<uint16, P, vecType>
+ {
+ GLM_FUNC_QUALIFIER static vecType<uint16, P> call()
+ {
+ return
+ (vecType<uint16, P>(compute_rand<uint8, P, vecType>::call()) << static_cast<uint16>(8)) |
+ (vecType<uint16, P>(compute_rand<uint8, P, vecType>::call()) << static_cast<uint16>(0));
+ }
+ };
+
+ template <precision P, template <class, precision> class vecType>
+ struct compute_rand<uint32, P, vecType>
+ {
+ GLM_FUNC_QUALIFIER static vecType<uint32, P> call()
+ {
+ return
+ (vecType<uint32, P>(compute_rand<uint16, P, vecType>::call()) << static_cast<uint32>(16)) |
+ (vecType<uint32, P>(compute_rand<uint16, P, vecType>::call()) << static_cast<uint32>(0));
+ }
+ };
+
+ template <precision P, template <class, precision> class vecType>
+ struct compute_rand<uint64, P, vecType>
+ {
+ GLM_FUNC_QUALIFIER static vecType<uint64, P> call()
+ {
+ return
+ (vecType<uint64, P>(compute_rand<uint32, P, vecType>::call()) << static_cast<uint64>(32)) |
+ (vecType<uint64, P>(compute_rand<uint32, P, vecType>::call()) << static_cast<uint64>(0));
+ }
+ };
+
+ template <typename T, precision P, template <class, precision> class vecType>
+ struct compute_linearRand
+ {
+ GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & Min, vecType<T, P> const & Max);
+ };
+
+ template <precision P, template <class, precision> class vecType>
+ struct compute_linearRand<int8, P, vecType>
+ {
+ GLM_FUNC_QUALIFIER static vecType<int8, P> call(vecType<int8, P> const & Min, vecType<int8, P> const & Max)
+ {
+ return (vecType<int8, P>(compute_rand<uint8, P, vecType>::call() % vecType<uint8, P>(Max + static_cast<int8>(1) - Min))) + Min;
+ }
+ };
+
+ template <precision P, template <class, precision> class vecType>
+ struct compute_linearRand<uint8, P, vecType>
+ {
+ GLM_FUNC_QUALIFIER static vecType<uint8, P> call(vecType<uint8, P> const & Min, vecType<uint8, P> const & Max)
+ {
+ return (compute_rand<uint8, P, vecType>::call() % (Max + static_cast<uint8>(1) - Min)) + Min;
+ }
+ };
+
+ template <precision P, template <class, precision> class vecType>
+ struct compute_linearRand<int16, P, vecType>
+ {
+ GLM_FUNC_QUALIFIER static vecType<int16, P> call(vecType<int16, P> const & Min, vecType<int16, P> const & Max)
+ {
+ return (vecType<int16, P>(compute_rand<uint16, P, vecType>::call() % vecType<uint16, P>(Max + static_cast<int16>(1) - Min))) + Min;
+ }
+ };
+
+ template <precision P, template <class, precision> class vecType>
+ struct compute_linearRand<uint16, P, vecType>
+ {
+ GLM_FUNC_QUALIFIER static vecType<uint16, P> call(vecType<uint16, P> const & Min, vecType<uint16, P> const & Max)
+ {
+ return (compute_rand<uint16, P, vecType>::call() % (Max + static_cast<uint16>(1) - Min)) + Min;
+ }
+ };
+
+ template <precision P, template <class, precision> class vecType>
+ struct compute_linearRand<int32, P, vecType>
+ {
+ GLM_FUNC_QUALIFIER static vecType<int32, P> call(vecType<int32, P> const & Min, vecType<int32, P> const & Max)
+ {
+ return (vecType<int32, P>(compute_rand<uint32, P, vecType>::call() % vecType<uint32, P>(Max + static_cast<int32>(1) - Min))) + Min;
+ }
+ };
+
+ template <precision P, template <class, precision> class vecType>
+ struct compute_linearRand<uint32, P, vecType>
+ {
+ GLM_FUNC_QUALIFIER static vecType<uint32, P> call(vecType<uint32, P> const & Min, vecType<uint32, P> const & Max)
+ {
+ return (compute_rand<uint32, P, vecType>::call() % (Max + static_cast<uint32>(1) - Min)) + Min;
+ }
+ };
+
+ template <precision P, template <class, precision> class vecType>
+ struct compute_linearRand<int64, P, vecType>
+ {
+ GLM_FUNC_QUALIFIER static vecType<int64, P> call(vecType<int64, P> const & Min, vecType<int64, P> const & Max)
+ {
+ return (vecType<int64, P>(compute_rand<uint64, P, vecType>::call() % vecType<uint64, P>(Max + static_cast<int64>(1) - Min))) + Min;
+ }
+ };
+
+ template <precision P, template <class, precision> class vecType>
+ struct compute_linearRand<uint64, P, vecType>
+ {
+ GLM_FUNC_QUALIFIER static vecType<uint64, P> call(vecType<uint64, P> const & Min, vecType<uint64, P> const & Max)
+ {
+ return (compute_rand<uint64, P, vecType>::call() % (Max + static_cast<uint64>(1) - Min)) + Min;
+ }
+ };
+
+ template <template <class, precision> class vecType>
+ struct compute_linearRand<float, lowp, vecType>
+ {
+ GLM_FUNC_QUALIFIER static vecType<float, lowp> call(vecType<float, lowp> const & Min, vecType<float, lowp> const & Max)
+ {
+ return vecType<float, lowp>(compute_rand<uint8, lowp, vecType>::call()) / static_cast<float>(std::numeric_limits<uint8>::max()) * (Max - Min) + Min;
+ }
+ };
+
+ template <template <class, precision> class vecType>
+ struct compute_linearRand<float, mediump, vecType>
+ {
+ GLM_FUNC_QUALIFIER static vecType<float, mediump> call(vecType<float, mediump> const & Min, vecType<float, mediump> const & Max)
+ {
+ return vecType<float, mediump>(compute_rand<uint16, mediump, vecType>::call()) / static_cast<float>(std::numeric_limits<uint16>::max()) * (Max - Min) + Min;
+ }
+ };
+
+ template <template <class, precision> class vecType>
+ struct compute_linearRand<float, highp, vecType>
+ {
+ GLM_FUNC_QUALIFIER static vecType<float, highp> call(vecType<float, highp> const & Min, vecType<float, highp> const & Max)
+ {
+ return vecType<float, highp>(compute_rand<uint32, highp, vecType>::call()) / static_cast<float>(std::numeric_limits<uint32>::max()) * (Max - Min) + Min;
+ }
+ };
+
+ template <template <class, precision> class vecType>
+ struct compute_linearRand<double, lowp, vecType>
+ {
+ GLM_FUNC_QUALIFIER static vecType<double, lowp> call(vecType<double, lowp> const & Min, vecType<double, lowp> const & Max)
+ {
+ return vecType<double, lowp>(compute_rand<uint16, lowp, vecType>::call()) / static_cast<double>(std::numeric_limits<uint16>::max()) * (Max - Min) + Min;
+ }
+ };
+
+ template <template <class, precision> class vecType>
+ struct compute_linearRand<double, mediump, vecType>
+ {
+ GLM_FUNC_QUALIFIER static vecType<double, mediump> call(vecType<double, mediump> const & Min, vecType<double, mediump> const & Max)
+ {
+ return vecType<double, mediump>(compute_rand<uint32, mediump, vecType>::call()) / static_cast<double>(std::numeric_limits<uint32>::max()) * (Max - Min) + Min;
+ }
+ };
+
+ template <template <class, precision> class vecType>
+ struct compute_linearRand<double, highp, vecType>
+ {
+ GLM_FUNC_QUALIFIER static vecType<double, highp> call(vecType<double, highp> const & Min, vecType<double, highp> const & Max)
+ {
+ return vecType<double, highp>(compute_rand<uint64, highp, vecType>::call()) / static_cast<double>(std::numeric_limits<uint64>::max()) * (Max - Min) + Min;
+ }
+ };
+
+ template <template <class, precision> class vecType>
+ struct compute_linearRand<long double, lowp, vecType>
+ {
+ GLM_FUNC_QUALIFIER static vecType<long double, lowp> call(vecType<long double, lowp> const & Min, vecType<long double, lowp> const & Max)
+ {
+ return vecType<long double, lowp>(compute_rand<uint32, lowp, vecType>::call()) / static_cast<long double>(std::numeric_limits<uint32>::max()) * (Max - Min) + Min;
+ }
+ };
+
+ template <template <class, precision> class vecType>
+ struct compute_linearRand<long double, mediump, vecType>
+ {
+ GLM_FUNC_QUALIFIER static vecType<long double, mediump> call(vecType<long double, mediump> const & Min, vecType<long double, mediump> const & Max)
+ {
+ return vecType<long double, mediump>(compute_rand<uint64, mediump, vecType>::call()) / static_cast<long double>(std::numeric_limits<uint64>::max()) * (Max - Min) + Min;
+ }
+ };
+
+ template <template <class, precision> class vecType>
+ struct compute_linearRand<long double, highp, vecType>
+ {
+ GLM_FUNC_QUALIFIER static vecType<long double, highp> call(vecType<long double, highp> const & Min, vecType<long double, highp> const & Max)
+ {
+ return vecType<long double, highp>(compute_rand<uint64, highp, vecType>::call()) / static_cast<long double>(std::numeric_limits<uint64>::max()) * (Max - Min) + Min;
+ }
+ };
+}//namespace detail
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType linearRand(genType Min, genType Max)
+ {
+ return detail::compute_linearRand<genType, highp, tvec1>::call(
+ tvec1<genType, highp>(Min),
+ tvec1<genType, highp>(Max)).x;
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> linearRand(vecType<T, P> const & Min, vecType<T, P> const & Max)
+ {
+ return detail::compute_linearRand<T, P, vecType>::call(Min, Max);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType gaussRand(genType Mean, genType Deviation)
+ {
+ genType w, x1, x2;
+
+ do
+ {
+ x1 = linearRand(genType(-1), genType(1));
+ x2 = linearRand(genType(-1), genType(1));
+
+ w = x1 * x1 + x2 * x2;
+ } while(w > genType(1));
+
+ return x2 * Deviation * Deviation * sqrt((genType(-2) * log(w)) / w) + Mean;
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> gaussRand(vecType<T, P> const & Mean, vecType<T, P> const & Deviation)
+ {
+ return detail::functor2<T, P, vecType>::call(gaussRand, Mean, Deviation);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T, defaultp> diskRand(T Radius)
+ {
+ tvec2<T, defaultp> Result(T(0));
+ T LenRadius(T(0));
+
+ do
+ {
+ Result = linearRand(
+ tvec2<T, defaultp>(-Radius),
+ tvec2<T, defaultp>(Radius));
+ LenRadius = length(Result);
+ }
+ while(LenRadius > Radius);
+
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T, defaultp> ballRand(T Radius)
+ {
+ tvec3<T, defaultp> Result(T(0));
+ T LenRadius(T(0));
+
+ do
+ {
+ Result = linearRand(
+ tvec3<T, defaultp>(-Radius),
+ tvec3<T, defaultp>(Radius));
+ LenRadius = length(Result);
+ }
+ while(LenRadius > Radius);
+
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T, defaultp> circularRand(T Radius)
+ {
+ T a = linearRand(T(0), T(6.283185307179586476925286766559f));
+ return tvec2<T, defaultp>(cos(a), sin(a)) * Radius;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T, defaultp> sphericalRand(T Radius)
+ {
+ T z = linearRand(T(-1), T(1));
+ T a = linearRand(T(0), T(6.283185307179586476925286766559f));
+
+ T r = sqrt(T(1) - z * z);
+
+ T x = r * cos(a);
+ T y = r * sin(a);
+
+ return tvec3<T, defaultp>(x, y, z) * Radius;
+ }
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtc/reciprocal.hpp b/src/third_party/glm/glm/gtc/reciprocal.hpp
new file mode 100644
index 0000000..c14a4fe
--- /dev/null
+++ b/src/third_party/glm/glm/gtc/reciprocal.hpp
@@ -0,0 +1,135 @@
+/// @ref gtc_reciprocal
+/// @file glm/gtc/reciprocal.hpp
+///
+/// @see core (dependence)
+///
+/// @defgroup gtc_reciprocal GLM_GTC_reciprocal
+/// @ingroup gtc
+///
+/// @brief Define secant, cosecant and cotangent functions.
+///
+/// <glm/gtc/reciprocal.hpp> need to be included to use these features.
+
+#pragma once
+
+// Dependencies
+#include "../detail/setup.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTC_reciprocal extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtc_reciprocal
+ /// @{
+
+ /// Secant function.
+ /// hypotenuse / adjacent or 1 / cos(x)
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see gtc_reciprocal
+ template <typename genType>
+ GLM_FUNC_DECL genType sec(genType angle);
+
+ /// Cosecant function.
+ /// hypotenuse / opposite or 1 / sin(x)
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see gtc_reciprocal
+ template <typename genType>
+ GLM_FUNC_DECL genType csc(genType angle);
+
+ /// Cotangent function.
+ /// adjacent / opposite or 1 / tan(x)
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see gtc_reciprocal
+ template <typename genType>
+ GLM_FUNC_DECL genType cot(genType angle);
+
+ /// Inverse secant function.
+ ///
+ /// @return Return an angle expressed in radians.
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see gtc_reciprocal
+ template <typename genType>
+ GLM_FUNC_DECL genType asec(genType x);
+
+ /// Inverse cosecant function.
+ ///
+ /// @return Return an angle expressed in radians.
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see gtc_reciprocal
+ template <typename genType>
+ GLM_FUNC_DECL genType acsc(genType x);
+
+ /// Inverse cotangent function.
+ ///
+ /// @return Return an angle expressed in radians.
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see gtc_reciprocal
+ template <typename genType>
+ GLM_FUNC_DECL genType acot(genType x);
+
+ /// Secant hyperbolic function.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see gtc_reciprocal
+ template <typename genType>
+ GLM_FUNC_DECL genType sech(genType angle);
+
+ /// Cosecant hyperbolic function.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see gtc_reciprocal
+ template <typename genType>
+ GLM_FUNC_DECL genType csch(genType angle);
+
+ /// Cotangent hyperbolic function.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see gtc_reciprocal
+ template <typename genType>
+ GLM_FUNC_DECL genType coth(genType angle);
+
+ /// Inverse secant hyperbolic function.
+ ///
+ /// @return Return an angle expressed in radians.
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see gtc_reciprocal
+ template <typename genType>
+ GLM_FUNC_DECL genType asech(genType x);
+
+ /// Inverse cosecant hyperbolic function.
+ ///
+ /// @return Return an angle expressed in radians.
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see gtc_reciprocal
+ template <typename genType>
+ GLM_FUNC_DECL genType acsch(genType x);
+
+ /// Inverse cotangent hyperbolic function.
+ ///
+ /// @return Return an angle expressed in radians.
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see gtc_reciprocal
+ template <typename genType>
+ GLM_FUNC_DECL genType acoth(genType x);
+
+ /// @}
+}//namespace glm
+
+#include "reciprocal.inl"
diff --git a/src/third_party/glm/glm/gtc/reciprocal.inl b/src/third_party/glm/glm/gtc/reciprocal.inl
new file mode 100644
index 0000000..c625ac9
--- /dev/null
+++ b/src/third_party/glm/glm/gtc/reciprocal.inl
@@ -0,0 +1,192 @@
+/// @ref gtc_reciprocal
+/// @file glm/gtc/reciprocal.inl
+
+#include "../trigonometric.hpp"
+#include <limits>
+
+namespace glm
+{
+ // sec
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType sec(genType angle)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'sec' only accept floating-point values");
+ return genType(1) / glm::cos(angle);
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> sec(vecType<T, P> const & x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'sec' only accept floating-point inputs");
+ return detail::functor1<T, T, P, vecType>::call(sec, x);
+ }
+
+ // csc
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType csc(genType angle)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'csc' only accept floating-point values");
+ return genType(1) / glm::sin(angle);
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> csc(vecType<T, P> const & x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'csc' only accept floating-point inputs");
+ return detail::functor1<T, T, P, vecType>::call(csc, x);
+ }
+
+ // cot
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType cot(genType angle)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'cot' only accept floating-point values");
+
+ genType const pi_over_2 = genType(3.1415926535897932384626433832795 / 2.0);
+ return glm::tan(pi_over_2 - angle);
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> cot(vecType<T, P> const & x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'cot' only accept floating-point inputs");
+ return detail::functor1<T, T, P, vecType>::call(cot, x);
+ }
+
+ // asec
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType asec(genType x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'asec' only accept floating-point values");
+ return acos(genType(1) / x);
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> asec(vecType<T, P> const & x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'asec' only accept floating-point inputs");
+ return detail::functor1<T, T, P, vecType>::call(asec, x);
+ }
+
+ // acsc
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType acsc(genType x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'acsc' only accept floating-point values");
+ return asin(genType(1) / x);
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> acsc(vecType<T, P> const & x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'acsc' only accept floating-point inputs");
+ return detail::functor1<T, T, P, vecType>::call(acsc, x);
+ }
+
+ // acot
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType acot(genType x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'acot' only accept floating-point values");
+
+ genType const pi_over_2 = genType(3.1415926535897932384626433832795 / 2.0);
+ return pi_over_2 - atan(x);
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> acot(vecType<T, P> const & x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'acot' only accept floating-point inputs");
+ return detail::functor1<T, T, P, vecType>::call(acot, x);
+ }
+
+ // sech
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType sech(genType angle)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'sech' only accept floating-point values");
+ return genType(1) / glm::cosh(angle);
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> sech(vecType<T, P> const & x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'sech' only accept floating-point inputs");
+ return detail::functor1<T, T, P, vecType>::call(sech, x);
+ }
+
+ // csch
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType csch(genType angle)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'csch' only accept floating-point values");
+ return genType(1) / glm::sinh(angle);
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> csch(vecType<T, P> const & x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'csch' only accept floating-point inputs");
+ return detail::functor1<T, T, P, vecType>::call(csch, x);
+ }
+
+ // coth
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType coth(genType angle)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'coth' only accept floating-point values");
+ return glm::cosh(angle) / glm::sinh(angle);
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> coth(vecType<T, P> const & x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'coth' only accept floating-point inputs");
+ return detail::functor1<T, T, P, vecType>::call(coth, x);
+ }
+
+ // asech
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType asech(genType x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'asech' only accept floating-point values");
+ return acosh(genType(1) / x);
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> asech(vecType<T, P> const & x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'asech' only accept floating-point inputs");
+ return detail::functor1<T, T, P, vecType>::call(asech, x);
+ }
+
+ // acsch
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType acsch(genType x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'acsch' only accept floating-point values");
+ return acsch(genType(1) / x);
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> acsch(vecType<T, P> const & x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'acsch' only accept floating-point inputs");
+ return detail::functor1<T, T, P, vecType>::call(acsch, x);
+ }
+
+ // acoth
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType acoth(genType x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'acoth' only accept floating-point values");
+ return atanh(genType(1) / x);
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> acoth(vecType<T, P> const & x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'acoth' only accept floating-point inputs");
+ return detail::functor1<T, T, P, vecType>::call(acoth, x);
+ }
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtc/round.hpp b/src/third_party/glm/glm/gtc/round.hpp
new file mode 100644
index 0000000..a583592
--- /dev/null
+++ b/src/third_party/glm/glm/gtc/round.hpp
@@ -0,0 +1,174 @@
+/// @ref gtc_round
+/// @file glm/gtc/round.hpp
+///
+/// @see core (dependence)
+/// @see gtc_round (dependence)
+///
+/// @defgroup gtc_round GLM_GTC_round
+/// @ingroup gtc
+///
+/// @brief rounding value to specific boundings
+///
+/// <glm/gtc/round.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependencies
+#include "../detail/setup.hpp"
+#include "../detail/precision.hpp"
+#include "../detail/_vectorize.hpp"
+#include "../vector_relational.hpp"
+#include "../common.hpp"
+#include <limits>
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTC_integer extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtc_round
+ /// @{
+
+ /// Return true if the value is a power of two number.
+ ///
+ /// @see gtc_round
+ template <typename genIUType>
+ GLM_FUNC_DECL bool isPowerOfTwo(genIUType Value);
+
+ /// Return true if the value is a power of two number.
+ ///
+ /// @see gtc_round
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<bool, P> isPowerOfTwo(vecType<T, P> const & value);
+
+ /// Return the power of two number which value is just higher the input value,
+ /// round up to a power of two.
+ ///
+ /// @see gtc_round
+ template <typename genIUType>
+ GLM_FUNC_DECL genIUType ceilPowerOfTwo(genIUType Value);
+
+ /// Return the power of two number which value is just higher the input value,
+ /// round up to a power of two.
+ ///
+ /// @see gtc_round
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> ceilPowerOfTwo(vecType<T, P> const & value);
+
+ /// Return the power of two number which value is just lower the input value,
+ /// round down to a power of two.
+ ///
+ /// @see gtc_round
+ template <typename genIUType>
+ GLM_FUNC_DECL genIUType floorPowerOfTwo(genIUType Value);
+
+ /// Return the power of two number which value is just lower the input value,
+ /// round down to a power of two.
+ ///
+ /// @see gtc_round
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> floorPowerOfTwo(vecType<T, P> const & value);
+
+ /// Return the power of two number which value is the closet to the input value.
+ ///
+ /// @see gtc_round
+ template <typename genIUType>
+ GLM_FUNC_DECL genIUType roundPowerOfTwo(genIUType Value);
+
+ /// Return the power of two number which value is the closet to the input value.
+ ///
+ /// @see gtc_round
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> roundPowerOfTwo(vecType<T, P> const & value);
+
+ /// Return true if the 'Value' is a multiple of 'Multiple'.
+ ///
+ /// @see gtc_round
+ template <typename genIUType>
+ GLM_FUNC_DECL bool isMultiple(genIUType Value, genIUType Multiple);
+
+ /// Return true if the 'Value' is a multiple of 'Multiple'.
+ ///
+ /// @see gtc_round
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<bool, P> isMultiple(vecType<T, P> const & Value, T Multiple);
+
+ /// Return true if the 'Value' is a multiple of 'Multiple'.
+ ///
+ /// @see gtc_round
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<bool, P> isMultiple(vecType<T, P> const & Value, vecType<T, P> const & Multiple);
+
+ /// Higher multiple number of Source.
+ ///
+ /// @tparam genType Floating-point or integer scalar or vector types.
+ /// @param Source
+ /// @param Multiple Must be a null or positive value
+ ///
+ /// @see gtc_round
+ template <typename genType>
+ GLM_FUNC_DECL genType ceilMultiple(genType Source, genType Multiple);
+
+ /// Higher multiple number of Source.
+ ///
+ /// @tparam genType Floating-point or integer scalar or vector types.
+ /// @param Source
+ /// @param Multiple Must be a null or positive value
+ ///
+ /// @see gtc_round
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> ceilMultiple(vecType<T, P> const & Source, vecType<T, P> const & Multiple);
+
+ /// Lower multiple number of Source.
+ ///
+ /// @tparam genType Floating-point or integer scalar or vector types.
+ /// @param Source
+ /// @param Multiple Must be a null or positive value
+ ///
+ /// @see gtc_round
+ template <typename genType>
+ GLM_FUNC_DECL genType floorMultiple(
+ genType Source,
+ genType Multiple);
+
+ /// Lower multiple number of Source.
+ ///
+ /// @tparam genType Floating-point or integer scalar or vector types.
+ /// @param Source
+ /// @param Multiple Must be a null or positive value
+ ///
+ /// @see gtc_round
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> floorMultiple(
+ vecType<T, P> const & Source,
+ vecType<T, P> const & Multiple);
+
+ /// Lower multiple number of Source.
+ ///
+ /// @tparam genType Floating-point or integer scalar or vector types.
+ /// @param Source
+ /// @param Multiple Must be a null or positive value
+ ///
+ /// @see gtc_round
+ template <typename genType>
+ GLM_FUNC_DECL genType roundMultiple(
+ genType Source,
+ genType Multiple);
+
+ /// Lower multiple number of Source.
+ ///
+ /// @tparam genType Floating-point or integer scalar or vector types.
+ /// @param Source
+ /// @param Multiple Must be a null or positive value
+ ///
+ /// @see gtc_round
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> roundMultiple(
+ vecType<T, P> const & Source,
+ vecType<T, P> const & Multiple);
+
+ /// @}
+} //namespace glm
+
+#include "round.inl"
diff --git a/src/third_party/glm/glm/gtc/round.inl b/src/third_party/glm/glm/gtc/round.inl
new file mode 100644
index 0000000..f583c40
--- /dev/null
+++ b/src/third_party/glm/glm/gtc/round.inl
@@ -0,0 +1,344 @@
+/// @ref gtc_round
+/// @file glm/gtc/round.inl
+
+#include "../detail/func_integer.hpp"
+
+namespace glm{
+namespace detail
+{
+ template <typename T, precision P, template <typename, precision> class vecType, bool compute = false>
+ struct compute_ceilShift
+ {
+ GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & v, T)
+ {
+ return v;
+ }
+ };
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ struct compute_ceilShift<T, P, vecType, true>
+ {
+ GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & v, T Shift)
+ {
+ return v | (v >> Shift);
+ }
+ };
+
+ template <typename T, precision P, template <typename, precision> class vecType, bool isSigned = true>
+ struct compute_ceilPowerOfTwo
+ {
+ GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x)
+ {
+ GLM_STATIC_ASSERT(!std::numeric_limits<T>::is_iec559, "'ceilPowerOfTwo' only accept integer scalar or vector inputs");
+
+ vecType<T, P> const Sign(sign(x));
+
+ vecType<T, P> v(abs(x));
+
+ v = v - static_cast<T>(1);
+ v = v | (v >> static_cast<T>(1));
+ v = v | (v >> static_cast<T>(2));
+ v = v | (v >> static_cast<T>(4));
+ v = compute_ceilShift<T, P, vecType, sizeof(T) >= 2>::call(v, 8);
+ v = compute_ceilShift<T, P, vecType, sizeof(T) >= 4>::call(v, 16);
+ v = compute_ceilShift<T, P, vecType, sizeof(T) >= 8>::call(v, 32);
+ return (v + static_cast<T>(1)) * Sign;
+ }
+ };
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ struct compute_ceilPowerOfTwo<T, P, vecType, false>
+ {
+ GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x)
+ {
+ GLM_STATIC_ASSERT(!std::numeric_limits<T>::is_iec559, "'ceilPowerOfTwo' only accept integer scalar or vector inputs");
+
+ vecType<T, P> v(x);
+
+ v = v - static_cast<T>(1);
+ v = v | (v >> static_cast<T>(1));
+ v = v | (v >> static_cast<T>(2));
+ v = v | (v >> static_cast<T>(4));
+ v = compute_ceilShift<T, P, vecType, sizeof(T) >= 2>::call(v, 8);
+ v = compute_ceilShift<T, P, vecType, sizeof(T) >= 4>::call(v, 16);
+ v = compute_ceilShift<T, P, vecType, sizeof(T) >= 8>::call(v, 32);
+ return v + static_cast<T>(1);
+ }
+ };
+
+ template <bool is_float, bool is_signed>
+ struct compute_ceilMultiple{};
+
+ template <>
+ struct compute_ceilMultiple<true, true>
+ {
+ template <typename genType>
+ GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple)
+ {
+ if(Source > genType(0))
+ return Source + (Multiple - std::fmod(Source, Multiple));
+ else
+ return Source + std::fmod(-Source, Multiple);
+ }
+ };
+
+ template <>
+ struct compute_ceilMultiple<false, false>
+ {
+ template <typename genType>
+ GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple)
+ {
+ genType Tmp = Source - genType(1);
+ return Tmp + (Multiple - (Tmp % Multiple));
+ }
+ };
+
+ template <>
+ struct compute_ceilMultiple<false, true>
+ {
+ template <typename genType>
+ GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple)
+ {
+ if(Source > genType(0))
+ {
+ genType Tmp = Source - genType(1);
+ return Tmp + (Multiple - (Tmp % Multiple));
+ }
+ else
+ return Source + (-Source % Multiple);
+ }
+ };
+
+ template <bool is_float, bool is_signed>
+ struct compute_floorMultiple{};
+
+ template <>
+ struct compute_floorMultiple<true, true>
+ {
+ template <typename genType>
+ GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple)
+ {
+ if(Source >= genType(0))
+ return Source - std::fmod(Source, Multiple);
+ else
+ return Source - std::fmod(Source, Multiple) - Multiple;
+ }
+ };
+
+ template <>
+ struct compute_floorMultiple<false, false>
+ {
+ template <typename genType>
+ GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple)
+ {
+ if(Source >= genType(0))
+ return Source - Source % Multiple;
+ else
+ {
+ genType Tmp = Source + genType(1);
+ return Tmp - Tmp % Multiple - Multiple;
+ }
+ }
+ };
+
+ template <>
+ struct compute_floorMultiple<false, true>
+ {
+ template <typename genType>
+ GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple)
+ {
+ if(Source >= genType(0))
+ return Source - Source % Multiple;
+ else
+ {
+ genType Tmp = Source + genType(1);
+ return Tmp - Tmp % Multiple - Multiple;
+ }
+ }
+ };
+
+ template <bool is_float, bool is_signed>
+ struct compute_roundMultiple{};
+
+ template <>
+ struct compute_roundMultiple<true, true>
+ {
+ template <typename genType>
+ GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple)
+ {
+ if(Source >= genType(0))
+ return Source - std::fmod(Source, Multiple);
+ else
+ {
+ genType Tmp = Source + genType(1);
+ return Tmp - std::fmod(Tmp, Multiple) - Multiple;
+ }
+ }
+ };
+
+ template <>
+ struct compute_roundMultiple<false, false>
+ {
+ template <typename genType>
+ GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple)
+ {
+ if(Source >= genType(0))
+ return Source - Source % Multiple;
+ else
+ {
+ genType Tmp = Source + genType(1);
+ return Tmp - Tmp % Multiple - Multiple;
+ }
+ }
+ };
+
+ template <>
+ struct compute_roundMultiple<false, true>
+ {
+ template <typename genType>
+ GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple)
+ {
+ if(Source >= genType(0))
+ return Source - Source % Multiple;
+ else
+ {
+ genType Tmp = Source + genType(1);
+ return Tmp - Tmp % Multiple - Multiple;
+ }
+ }
+ };
+}//namespace detail
+
+ ////////////////
+ // isPowerOfTwo
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER bool isPowerOfTwo(genType Value)
+ {
+ genType const Result = glm::abs(Value);
+ return !(Result & (Result - 1));
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<bool, P> isPowerOfTwo(vecType<T, P> const & Value)
+ {
+ vecType<T, P> const Result(abs(Value));
+ return equal(Result & (Result - 1), vecType<T, P>(0));
+ }
+
+ //////////////////
+ // ceilPowerOfTwo
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType ceilPowerOfTwo(genType value)
+ {
+ return detail::compute_ceilPowerOfTwo<genType, defaultp, tvec1, std::numeric_limits<genType>::is_signed>::call(tvec1<genType, defaultp>(value)).x;
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> ceilPowerOfTwo(vecType<T, P> const & v)
+ {
+ return detail::compute_ceilPowerOfTwo<T, P, vecType, std::numeric_limits<T>::is_signed>::call(v);
+ }
+
+ ///////////////////
+ // floorPowerOfTwo
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType floorPowerOfTwo(genType value)
+ {
+ return isPowerOfTwo(value) ? value : static_cast<genType>(1) << findMSB(value);
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> floorPowerOfTwo(vecType<T, P> const & v)
+ {
+ return detail::functor1<T, T, P, vecType>::call(floorPowerOfTwo, v);
+ }
+
+ ///////////////////
+ // roundPowerOfTwo
+
+ template <typename genIUType>
+ GLM_FUNC_QUALIFIER genIUType roundPowerOfTwo(genIUType value)
+ {
+ if(isPowerOfTwo(value))
+ return value;
+
+ genIUType const prev = static_cast<genIUType>(1) << findMSB(value);
+ genIUType const next = prev << static_cast<genIUType>(1);
+ return (next - value) < (value - prev) ? next : prev;
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> roundPowerOfTwo(vecType<T, P> const & v)
+ {
+ return detail::functor1<T, T, P, vecType>::call(roundPowerOfTwo, v);
+ }
+
+ ////////////////
+ // isMultiple
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER bool isMultiple(genType Value, genType Multiple)
+ {
+ return isMultiple(tvec1<genType>(Value), tvec1<genType>(Multiple)).x;
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<bool, P> isMultiple(vecType<T, P> const & Value, T Multiple)
+ {
+ return (Value % Multiple) == vecType<T, P>(0);
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<bool, P> isMultiple(vecType<T, P> const & Value, vecType<T, P> const & Multiple)
+ {
+ return (Value % Multiple) == vecType<T, P>(0);
+ }
+
+ //////////////////////
+ // ceilMultiple
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType ceilMultiple(genType Source, genType Multiple)
+ {
+ return detail::compute_ceilMultiple<std::numeric_limits<genType>::is_iec559, std::numeric_limits<genType>::is_signed>::call(Source, Multiple);
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> ceilMultiple(vecType<T, P> const & Source, vecType<T, P> const & Multiple)
+ {
+ return detail::functor2<T, P, vecType>::call(ceilMultiple, Source, Multiple);
+ }
+
+ //////////////////////
+ // floorMultiple
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType floorMultiple(genType Source, genType Multiple)
+ {
+ return detail::compute_floorMultiple<std::numeric_limits<genType>::is_iec559, std::numeric_limits<genType>::is_signed>::call(Source, Multiple);
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> floorMultiple(vecType<T, P> const & Source, vecType<T, P> const & Multiple)
+ {
+ return detail::functor2<T, P, vecType>::call(floorMultiple, Source, Multiple);
+ }
+
+ //////////////////////
+ // roundMultiple
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType roundMultiple(genType Source, genType Multiple)
+ {
+ return detail::compute_roundMultiple<std::numeric_limits<genType>::is_iec559, std::numeric_limits<genType>::is_signed>::call(Source, Multiple);
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> roundMultiple(vecType<T, P> const & Source, vecType<T, P> const & Multiple)
+ {
+ return detail::functor2<T, P, vecType>::call(roundMultiple, Source, Multiple);
+ }
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtc/type_aligned.hpp b/src/third_party/glm/glm/gtc/type_aligned.hpp
new file mode 100644
index 0000000..2e4503c
--- /dev/null
+++ b/src/third_party/glm/glm/gtc/type_aligned.hpp
@@ -0,0 +1,362 @@
+/// @ref gtc_type_aligned
+/// @file glm/gtc/type_aligned.hpp
+///
+/// @see core (dependence)
+///
+/// @defgroup gtc_type_aligned GLM_GTC_type_aligned
+/// @ingroup gtc
+///
+/// @brief Aligned types.
+/// <glm/gtc/type_aligned.hpp> need to be included to use these features.
+
+#pragma once
+
+#if !GLM_HAS_ALIGNED_TYPE
+# error "GLM: Aligned types are not supported on this platform"
+#endif
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTC_type_aligned extension included")
+#endif
+
+#include "../vec2.hpp"
+#include "../vec3.hpp"
+#include "../vec4.hpp"
+#include "../gtc/vec1.hpp"
+
+namespace glm
+{
+ template <typename T, precision P> struct tvec1;
+ template <typename T, precision P> struct tvec2;
+ template <typename T, precision P> struct tvec3;
+ template <typename T, precision P> struct tvec4;
+ /// @addtogroup gtc_type_aligned
+ /// @{
+
+ // -- *vec1 --
+
+ typedef tvec1<float, aligned_highp> aligned_highp_vec1;
+ typedef tvec1<float, aligned_mediump> aligned_mediump_vec1;
+ typedef tvec1<float, aligned_lowp> aligned_lowp_vec1;
+ typedef tvec1<double, aligned_highp> aligned_highp_dvec1;
+ typedef tvec1<double, aligned_mediump> aligned_mediump_dvec1;
+ typedef tvec1<double, aligned_lowp> aligned_lowp_dvec1;
+ typedef tvec1<int, aligned_highp> aligned_highp_ivec1;
+ typedef tvec1<int, aligned_mediump> aligned_mediump_ivec1;
+ typedef tvec1<int, aligned_lowp> aligned_lowp_ivec1;
+ typedef tvec1<uint, aligned_highp> aligned_highp_uvec1;
+ typedef tvec1<uint, aligned_mediump> aligned_mediump_uvec1;
+ typedef tvec1<uint, aligned_lowp> aligned_lowp_uvec1;
+ typedef tvec1<bool, aligned_highp> aligned_highp_bvec1;
+ typedef tvec1<bool, aligned_mediump> aligned_mediump_bvec1;
+ typedef tvec1<bool, aligned_lowp> aligned_lowp_bvec1;
+
+ typedef tvec1<float, packed_highp> packed_highp_vec1;
+ typedef tvec1<float, packed_mediump> packed_mediump_vec1;
+ typedef tvec1<float, packed_lowp> packed_lowp_vec1;
+ typedef tvec1<double, packed_highp> packed_highp_dvec1;
+ typedef tvec1<double, packed_mediump> packed_mediump_dvec1;
+ typedef tvec1<double, packed_lowp> packed_lowp_dvec1;
+ typedef tvec1<int, packed_highp> packed_highp_ivec1;
+ typedef tvec1<int, packed_mediump> packed_mediump_ivec1;
+ typedef tvec1<int, packed_lowp> packed_lowp_ivec1;
+ typedef tvec1<uint, packed_highp> packed_highp_uvec1;
+ typedef tvec1<uint, packed_mediump> packed_mediump_uvec1;
+ typedef tvec1<uint, packed_lowp> packed_lowp_uvec1;
+ typedef tvec1<bool, packed_highp> packed_highp_bvec1;
+ typedef tvec1<bool, packed_mediump> packed_mediump_bvec1;
+ typedef tvec1<bool, packed_lowp> packed_lowp_bvec1;
+
+ // -- *vec2 --
+
+ /// 2 components vector of high single-precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ typedef tvec2<float, aligned_highp> aligned_highp_vec2;
+
+ /// 2 components vector of medium single-precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ typedef tvec2<float, aligned_mediump> aligned_mediump_vec2;
+
+ /// 2 components vector of low single-precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ typedef tvec2<float, aligned_lowp> aligned_lowp_vec2;
+
+ /// 2 components vector of high double-precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ typedef tvec2<double, aligned_highp> aligned_highp_dvec2;
+
+ /// 2 components vector of medium double-precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ typedef tvec2<double, aligned_mediump> aligned_mediump_dvec2;
+
+ /// 2 components vector of low double-precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ typedef tvec2<double, aligned_lowp> aligned_lowp_dvec2;
+
+ /// 2 components vector of high precision signed integer numbers.
+ /// There is no guarantee on the actual precision.
+ typedef tvec2<int, aligned_highp> aligned_highp_ivec2;
+
+ /// 2 components vector of medium precision signed integer numbers.
+ /// There is no guarantee on the actual precision.
+ typedef tvec2<int, aligned_mediump> aligned_mediump_ivec2;
+
+ /// 2 components vector of low precision signed integer numbers.
+ /// There is no guarantee on the actual precision.
+ typedef tvec2<int, aligned_lowp> aligned_lowp_ivec2;
+
+ /// 2 components vector of high precision unsigned integer numbers.
+ /// There is no guarantee on the actual precision.
+ typedef tvec2<uint, aligned_highp> aligned_highp_uvec2;
+
+ /// 2 components vector of medium precision unsigned integer numbers.
+ /// There is no guarantee on the actual precision.
+ typedef tvec2<uint, aligned_mediump> aligned_mediump_uvec2;
+
+ /// 2 components vector of low precision unsigned integer numbers.
+ /// There is no guarantee on the actual precision.
+ typedef tvec2<uint, aligned_lowp> aligned_lowp_uvec2;
+
+ /// 2 components vector of high precision bool numbers.
+ /// There is no guarantee on the actual precision.
+ typedef tvec2<bool, aligned_highp> aligned_highp_bvec2;
+
+ /// 2 components vector of medium precision bool numbers.
+ /// There is no guarantee on the actual precision.
+ typedef tvec2<bool, aligned_mediump> aligned_mediump_bvec2;
+
+ /// 2 components vector of low precision bool numbers.
+ /// There is no guarantee on the actual precision.
+ typedef tvec2<bool, aligned_lowp> aligned_lowp_bvec2;
+
+ // -- *vec3 --
+
+ /// 3 components vector of high single-precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ typedef tvec3<float, aligned_highp> aligned_highp_vec3;
+
+ /// 3 components vector of medium single-precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ typedef tvec3<float, aligned_mediump> aligned_mediump_vec3;
+
+ /// 3 components vector of low single-precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ typedef tvec3<float, aligned_lowp> aligned_lowp_vec3;
+
+ /// 3 components vector of high double-precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ typedef tvec3<double, aligned_highp> aligned_highp_dvec3;
+
+ /// 3 components vector of medium double-precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ typedef tvec3<double, aligned_mediump> aligned_mediump_dvec3;
+
+ /// 3 components vector of low double-precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ typedef tvec3<double, aligned_lowp> aligned_lowp_dvec3;
+
+ /// 3 components vector of high precision signed integer numbers.
+ /// There is no guarantee on the actual precision.
+ typedef tvec3<int, aligned_highp> aligned_highp_ivec3;
+
+ /// 3 components vector of medium precision signed integer numbers.
+ /// There is no guarantee on the actual precision.
+ typedef tvec3<int, aligned_mediump> aligned_mediump_ivec3;
+
+ /// 3 components vector of low precision signed integer numbers.
+ /// There is no guarantee on the actual precision.
+ typedef tvec3<int, aligned_lowp> aligned_lowp_ivec3;
+
+ /// 3 components vector of high precision unsigned integer numbers.
+ /// There is no guarantee on the actual precision.
+ typedef tvec3<uint, aligned_highp> aligned_highp_uvec3;
+
+ /// 3 components vector of medium precision unsigned integer numbers.
+ /// There is no guarantee on the actual precision.
+ typedef tvec3<uint, aligned_mediump> aligned_mediump_uvec3;
+
+ /// 3 components vector of low precision unsigned integer numbers.
+ /// There is no guarantee on the actual precision.
+ typedef tvec3<uint, aligned_lowp> aligned_lowp_uvec3;
+
+ /// 3 components vector of high precision bool numbers.
+ typedef tvec3<bool, aligned_highp> aligned_highp_bvec3;
+
+ /// 3 components vector of medium precision bool numbers.
+ typedef tvec3<bool, aligned_mediump> aligned_mediump_bvec3;
+
+ /// 3 components vector of low precision bool numbers.
+ typedef tvec3<bool, aligned_lowp> aligned_lowp_bvec3;
+
+ // -- *vec4 --
+
+ /// 4 components vector of high single-precision floating-point numbers.
+ typedef tvec4<float, aligned_highp> aligned_highp_vec4;
+
+ /// 4 components vector of medium single-precision floating-point numbers.
+ typedef tvec4<float, aligned_mediump> aligned_mediump_vec4;
+
+ /// 4 components vector of low single-precision floating-point numbers.
+ typedef tvec4<float, aligned_lowp> aligned_lowp_vec4;
+
+ /// 4 components vector of high double-precision floating-point numbers.
+ typedef tvec4<double, aligned_highp> aligned_highp_dvec4;
+
+ /// 4 components vector of medium double-precision floating-point numbers.
+ typedef tvec4<double, aligned_mediump> aligned_mediump_dvec4;
+
+ /// 4 components vector of low double-precision floating-point numbers.
+ typedef tvec4<double, aligned_lowp> aligned_lowp_dvec4;
+
+ /// 4 components vector of high precision signed integer numbers.
+ typedef tvec4<int, aligned_highp> aligned_highp_ivec4;
+
+ /// 4 components vector of medium precision signed integer numbers.
+ typedef tvec4<int, aligned_mediump> aligned_mediump_ivec4;
+
+ /// 4 components vector of low precision signed integer numbers.
+ typedef tvec4<int, aligned_lowp> aligned_lowp_ivec4;
+
+ /// 4 components vector of high precision unsigned integer numbers.
+ typedef tvec4<uint, aligned_highp> aligned_highp_uvec4;
+
+ /// 4 components vector of medium precision unsigned integer numbers.
+ typedef tvec4<uint, aligned_mediump> aligned_mediump_uvec4;
+
+ /// 4 components vector of low precision unsigned integer numbers.
+ typedef tvec4<uint, aligned_lowp> aligned_lowp_uvec4;
+
+ /// 4 components vector of high precision bool numbers.
+ typedef tvec4<bool, aligned_highp> aligned_highp_bvec4;
+
+ /// 4 components vector of medium precision bool numbers.
+ typedef tvec4<bool, aligned_mediump> aligned_mediump_bvec4;
+
+ /// 4 components vector of low precision bool numbers.
+ typedef tvec4<bool, aligned_lowp> aligned_lowp_bvec4;
+
+ // -- default --
+
+#if(defined(GLM_PRECISION_LOWP_FLOAT))
+ typedef aligned_lowp_vec1 aligned_vec1;
+ typedef aligned_lowp_vec2 aligned_vec2;
+ typedef aligned_lowp_vec3 aligned_vec3;
+ typedef aligned_lowp_vec4 aligned_vec4;
+#elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))
+ typedef aligned_mediump_vec1 aligned_vec1;
+ typedef aligned_mediump_vec2 aligned_vec2;
+ typedef aligned_mediump_vec3 aligned_vec3;
+ typedef aligned_mediump_vec4 aligned_vec4;
+#else //defined(GLM_PRECISION_HIGHP_FLOAT)
+ /// 1 component vector of floating-point numbers.
+ typedef aligned_highp_vec1 aligned_vec1;
+
+ /// 2 components vector of floating-point numbers.
+ typedef aligned_highp_vec2 aligned_vec2;
+
+ /// 3 components vector of floating-point numbers.
+ typedef aligned_highp_vec3 aligned_vec3;
+
+ /// 4 components vector of floating-point numbers.
+ typedef aligned_highp_vec4 aligned_vec4;
+#endif//GLM_PRECISION
+
+#if(defined(GLM_PRECISION_LOWP_DOUBLE))
+ typedef aligned_lowp_dvec1 aligned_dvec1;
+ typedef aligned_lowp_dvec2 aligned_dvec2;
+ typedef aligned_lowp_dvec3 aligned_dvec3;
+ typedef aligned_lowp_dvec4 aligned_dvec4;
+#elif(defined(GLM_PRECISION_MEDIUMP_DOUBLE))
+ typedef aligned_mediump_dvec1 aligned_dvec1;
+ typedef aligned_mediump_dvec2 aligned_dvec2;
+ typedef aligned_mediump_dvec3 aligned_dvec3;
+ typedef aligned_mediump_dvec4 aligned_dvec4;
+#else //defined(GLM_PRECISION_HIGHP_DOUBLE)
+ /// 1 component vector of double-precision floating-point numbers.
+ typedef aligned_highp_dvec1 aligned_dvec1;
+
+ /// 2 components vector of double-precision floating-point numbers.
+ typedef aligned_highp_dvec2 aligned_dvec2;
+
+ /// 3 components vector of double-precision floating-point numbers.
+ typedef aligned_highp_dvec3 aligned_dvec3;
+
+ /// 4 components vector of double-precision floating-point numbers.
+ typedef aligned_highp_dvec4 aligned_dvec4;
+#endif//GLM_PRECISION
+
+#if(defined(GLM_PRECISION_LOWP_INT))
+ typedef aligned_lowp_ivec1 aligned_ivec1;
+ typedef aligned_lowp_ivec2 aligned_ivec2;
+ typedef aligned_lowp_ivec3 aligned_ivec3;
+ typedef aligned_lowp_ivec4 aligned_ivec4;
+#elif(defined(GLM_PRECISION_MEDIUMP_INT))
+ typedef aligned_mediump_ivec1 aligned_ivec1;
+ typedef aligned_mediump_ivec2 aligned_ivec2;
+ typedef aligned_mediump_ivec3 aligned_ivec3;
+ typedef aligned_mediump_ivec4 aligned_ivec4;
+#else //defined(GLM_PRECISION_HIGHP_INT)
+ /// 1 component vector of signed integer numbers.
+ typedef aligned_highp_ivec1 aligned_ivec1;
+
+ /// 2 components vector of signed integer numbers.
+ typedef aligned_highp_ivec2 aligned_ivec2;
+
+ /// 3 components vector of signed integer numbers.
+ typedef aligned_highp_ivec3 aligned_ivec3;
+
+ /// 4 components vector of signed integer numbers.
+ typedef aligned_highp_ivec4 aligned_ivec4;
+#endif//GLM_PRECISION
+
+ // -- Unsigned integer definition --
+
+#if(defined(GLM_PRECISION_LOWP_UINT))
+ typedef aligned_lowp_uvec1 aligned_uvec1;
+ typedef aligned_lowp_uvec2 aligned_uvec2;
+ typedef aligned_lowp_uvec3 aligned_uvec3;
+ typedef aligned_lowp_uvec4 aligned_uvec4;
+#elif(defined(GLM_PRECISION_MEDIUMP_UINT))
+ typedef aligned_mediump_uvec1 aligned_uvec1;
+ typedef aligned_mediump_uvec2 aligned_uvec2;
+ typedef aligned_mediump_uvec3 aligned_uvec3;
+ typedef aligned_mediump_uvec4 aligned_uvec4;
+#else //defined(GLM_PRECISION_HIGHP_UINT)
+ /// 1 component vector of unsigned integer numbers.
+ typedef aligned_highp_uvec1 aligned_uvec1;
+
+ /// 2 components vector of unsigned integer numbers.
+ typedef aligned_highp_uvec2 aligned_uvec2;
+
+ /// 3 components vector of unsigned integer numbers.
+ typedef aligned_highp_uvec3 aligned_uvec3;
+
+ /// 4 components vector of unsigned integer numbers.
+ typedef aligned_highp_uvec4 aligned_uvec4;
+#endif//GLM_PRECISION
+
+#if(defined(GLM_PRECISION_LOWP_BOOL))
+ typedef aligned_lowp_bvec1 aligned_bvec1;
+ typedef aligned_lowp_bvec2 aligned_bvec2;
+ typedef aligned_lowp_bvec3 aligned_bvec3;
+ typedef aligned_lowp_bvec4 aligned_bvec4;
+#elif(defined(GLM_PRECISION_MEDIUMP_BOOL))
+ typedef aligned_mediump_bvec1 aligned_bvec1;
+ typedef aligned_mediump_bvec2 aligned_bvec2;
+ typedef aligned_mediump_bvec3 aligned_bvec3;
+ typedef aligned_mediump_bvec4 aligned_bvec4;
+#else //defined(GLM_PRECISION_HIGHP_BOOL)
+ /// 1 component vector of boolean.
+ typedef aligned_highp_bvec1 aligned_bvec1;
+
+ /// 2 components vector of boolean.
+ typedef aligned_highp_bvec2 aligned_bvec2;
+
+ /// 3 components vector of boolean.
+ typedef aligned_highp_bvec3 aligned_bvec3;
+
+ /// 4 components vector of boolean.
+ typedef aligned_highp_bvec4 aligned_bvec4;
+#endif//GLM_PRECISION
+
+ /// @}
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtc/type_precision.hpp b/src/third_party/glm/glm/gtc/type_precision.hpp
new file mode 100644
index 0000000..a2dbb66
--- /dev/null
+++ b/src/third_party/glm/glm/gtc/type_precision.hpp
@@ -0,0 +1,861 @@
+/// @ref gtc_type_precision
+/// @file glm/gtc/type_precision.hpp
+///
+/// @see core (dependence)
+/// @see gtc_half_float (dependence)
+/// @see gtc_quaternion (dependence)
+///
+/// @defgroup gtc_type_precision GLM_GTC_type_precision
+/// @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.
+
+#pragma once
+
+// Dependency:
+#include "../gtc/quaternion.hpp"
+#include "../gtc/vec1.hpp"
+#include "../vec2.hpp"
+#include "../vec3.hpp"
+#include "../vec4.hpp"
+#include "../mat2x2.hpp"
+#include "../mat2x3.hpp"
+#include "../mat2x4.hpp"
+#include "../mat3x2.hpp"
+#include "../mat3x3.hpp"
+#include "../mat3x4.hpp"
+#include "../mat4x2.hpp"
+#include "../mat4x3.hpp"
+#include "../mat4x4.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTC_type_precision extension included")
+#endif
+
+namespace glm
+{
+ ///////////////////////////
+ // Signed int vector types
+
+ /// @addtogroup gtc_type_precision
+ /// @{
+
+ /// Low precision 8 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int8 lowp_int8;
+
+ /// Low precision 16 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int16 lowp_int16;
+
+ /// Low precision 32 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int32 lowp_int32;
+
+ /// Low precision 64 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int64 lowp_int64;
+
+ /// Low precision 8 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int8 lowp_int8_t;
+
+ /// Low precision 16 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int16 lowp_int16_t;
+
+ /// Low precision 32 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int32 lowp_int32_t;
+
+ /// Low precision 64 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int64 lowp_int64_t;
+
+ /// Low precision 8 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int8 lowp_i8;
+
+ /// Low precision 16 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int16 lowp_i16;
+
+ /// Low precision 32 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int32 lowp_i32;
+
+ /// Low precision 64 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int64 lowp_i64;
+
+ /// Medium precision 8 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int8 mediump_int8;
+
+ /// Medium precision 16 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int16 mediump_int16;
+
+ /// Medium precision 32 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int32 mediump_int32;
+
+ /// Medium precision 64 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int64 mediump_int64;
+
+ /// Medium precision 8 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int8 mediump_int8_t;
+
+ /// Medium precision 16 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int16 mediump_int16_t;
+
+ /// Medium precision 32 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int32 mediump_int32_t;
+
+ /// Medium precision 64 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int64 mediump_int64_t;
+
+ /// Medium precision 8 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int8 mediump_i8;
+
+ /// Medium precision 16 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int16 mediump_i16;
+
+ /// Medium precision 32 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int32 mediump_i32;
+
+ /// Medium precision 64 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int64 mediump_i64;
+
+ /// High precision 8 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int8 highp_int8;
+
+ /// High precision 16 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int16 highp_int16;
+
+ /// High precision 32 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int32 highp_int32;
+
+ /// High precision 64 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int64 highp_int64;
+
+ /// High precision 8 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int8 highp_int8_t;
+
+ /// High precision 16 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int16 highp_int16_t;
+
+ /// 32 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int32 highp_int32_t;
+
+ /// High precision 64 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int64 highp_int64_t;
+
+ /// High precision 8 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int8 highp_i8;
+
+ /// High precision 16 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int16 highp_i16;
+
+ /// High precision 32 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int32 highp_i32;
+
+ /// High precision 64 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int64 highp_i64;
+
+
+ /// 8 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int8 int8;
+
+ /// 16 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int16 int16;
+
+ /// 32 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int32 int32;
+
+ /// 64 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int64 int64;
+
+#if GLM_HAS_EXTENDED_INTEGER_TYPE
+ using std::int8_t;
+ using std::int16_t;
+ using std::int32_t;
+ using std::int64_t;
+#else
+ /// 8 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int8 int8_t;
+
+ /// 16 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int16 int16_t;
+
+ /// 32 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int32 int32_t;
+
+ /// 64 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int64 int64_t;
+#endif
+
+ /// 8 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int8 i8;
+
+ /// 16 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int16 i16;
+
+ /// 32 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int32 i32;
+
+ /// 64 bit signed integer type.
+ /// @see gtc_type_precision
+ typedef detail::int64 i64;
+
+
+ /// 8 bit signed integer scalar type.
+ /// @see gtc_type_precision
+ typedef tvec1<i8, defaultp> i8vec1;
+
+ /// 8 bit signed integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef tvec2<i8, defaultp> i8vec2;
+
+ /// 8 bit signed integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef tvec3<i8, defaultp> i8vec3;
+
+ /// 8 bit signed integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef tvec4<i8, defaultp> i8vec4;
+
+
+ /// 16 bit signed integer scalar type.
+ /// @see gtc_type_precision
+ typedef tvec1<i16, defaultp> i16vec1;
+
+ /// 16 bit signed integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef tvec2<i16, defaultp> i16vec2;
+
+ /// 16 bit signed integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef tvec3<i16, defaultp> i16vec3;
+
+ /// 16 bit signed integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef tvec4<i16, defaultp> i16vec4;
+
+
+ /// 32 bit signed integer scalar type.
+ /// @see gtc_type_precision
+ typedef tvec1<i32, defaultp> i32vec1;
+
+ /// 32 bit signed integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef tvec2<i32, defaultp> i32vec2;
+
+ /// 32 bit signed integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef tvec3<i32, defaultp> i32vec3;
+
+ /// 32 bit signed integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef tvec4<i32, defaultp> i32vec4;
+
+
+ /// 64 bit signed integer scalar type.
+ /// @see gtc_type_precision
+ typedef tvec1<i64, defaultp> i64vec1;
+
+ /// 64 bit signed integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef tvec2<i64, defaultp> i64vec2;
+
+ /// 64 bit signed integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef tvec3<i64, defaultp> i64vec3;
+
+ /// 64 bit signed integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef tvec4<i64, defaultp> i64vec4;
+
+
+ /////////////////////////////
+ // Unsigned int vector types
+
+ /// Low precision 8 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint8 lowp_uint8;
+
+ /// Low precision 16 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint16 lowp_uint16;
+
+ /// Low precision 32 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint32 lowp_uint32;
+
+ /// Low precision 64 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint64 lowp_uint64;
+
+ /// Low precision 8 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint8 lowp_uint8_t;
+
+ /// Low precision 16 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint16 lowp_uint16_t;
+
+ /// Low precision 32 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint32 lowp_uint32_t;
+
+ /// Low precision 64 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint64 lowp_uint64_t;
+
+ /// Low precision 8 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint8 lowp_u8;
+
+ /// Low precision 16 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint16 lowp_u16;
+
+ /// Low precision 32 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint32 lowp_u32;
+
+ /// Low precision 64 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint64 lowp_u64;
+
+ /// Medium precision 8 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint8 mediump_uint8;
+
+ /// Medium precision 16 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint16 mediump_uint16;
+
+ /// Medium precision 32 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint32 mediump_uint32;
+
+ /// Medium precision 64 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint64 mediump_uint64;
+
+ /// Medium precision 8 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint8 mediump_uint8_t;
+
+ /// Medium precision 16 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint16 mediump_uint16_t;
+
+ /// Medium precision 32 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint32 mediump_uint32_t;
+
+ /// Medium precision 64 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint64 mediump_uint64_t;
+
+ /// Medium precision 8 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint8 mediump_u8;
+
+ /// Medium precision 16 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint16 mediump_u16;
+
+ /// Medium precision 32 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint32 mediump_u32;
+
+ /// Medium precision 64 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint64 mediump_u64;
+
+ /// High precision 8 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint8 highp_uint8;
+
+ /// High precision 16 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint16 highp_uint16;
+
+ /// High precision 32 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint32 highp_uint32;
+
+ /// High precision 64 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint64 highp_uint64;
+
+ /// High precision 8 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint8 highp_uint8_t;
+
+ /// High precision 16 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint16 highp_uint16_t;
+
+ /// High precision 32 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint32 highp_uint32_t;
+
+ /// High precision 64 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint64 highp_uint64_t;
+
+ /// High precision 8 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint8 highp_u8;
+
+ /// High precision 16 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint16 highp_u16;
+
+ /// High precision 32 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint32 highp_u32;
+
+ /// High precision 64 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint64 highp_u64;
+
+ /// Default precision 8 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint8 uint8;
+
+ /// Default precision 16 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint16 uint16;
+
+ /// Default precision 32 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint32 uint32;
+
+ /// Default precision 64 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint64 uint64;
+
+#if GLM_HAS_EXTENDED_INTEGER_TYPE
+ using std::uint8_t;
+ using std::uint16_t;
+ using std::uint32_t;
+ using std::uint64_t;
+#else
+ /// Default precision 8 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint8 uint8_t;
+
+ /// Default precision 16 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint16 uint16_t;
+
+ /// Default precision 32 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint32 uint32_t;
+
+ /// Default precision 64 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint64 uint64_t;
+#endif
+
+ /// Default precision 8 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint8 u8;
+
+ /// Default precision 16 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint16 u16;
+
+ /// Default precision 32 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint32 u32;
+
+ /// Default precision 64 bit unsigned integer type.
+ /// @see gtc_type_precision
+ typedef detail::uint64 u64;
+
+
+
+ /// Default precision 8 bit unsigned integer scalar type.
+ /// @see gtc_type_precision
+ typedef tvec1<u8, defaultp> u8vec1;
+
+ /// Default precision 8 bit unsigned integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef tvec2<u8, defaultp> u8vec2;
+
+ /// Default precision 8 bit unsigned integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef tvec3<u8, defaultp> u8vec3;
+
+ /// Default precision 8 bit unsigned integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef tvec4<u8, defaultp> u8vec4;
+
+
+ /// Default precision 16 bit unsigned integer scalar type.
+ /// @see gtc_type_precision
+ typedef tvec1<u16, defaultp> u16vec1;
+
+ /// Default precision 16 bit unsigned integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef tvec2<u16, defaultp> u16vec2;
+
+ /// Default precision 16 bit unsigned integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef tvec3<u16, defaultp> u16vec3;
+
+ /// Default precision 16 bit unsigned integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef tvec4<u16, defaultp> u16vec4;
+
+
+ /// Default precision 32 bit unsigned integer scalar type.
+ /// @see gtc_type_precision
+ typedef tvec1<u32, defaultp> u32vec1;
+
+ /// Default precision 32 bit unsigned integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef tvec2<u32, defaultp> u32vec2;
+
+ /// Default precision 32 bit unsigned integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef tvec3<u32, defaultp> u32vec3;
+
+ /// Default precision 32 bit unsigned integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef tvec4<u32, defaultp> u32vec4;
+
+
+ /// Default precision 64 bit unsigned integer scalar type.
+ /// @see gtc_type_precision
+ typedef tvec1<u64, defaultp> u64vec1;
+
+ /// Default precision 64 bit unsigned integer vector of 2 components type.
+ /// @see gtc_type_precision
+ typedef tvec2<u64, defaultp> u64vec2;
+
+ /// Default precision 64 bit unsigned integer vector of 3 components type.
+ /// @see gtc_type_precision
+ typedef tvec3<u64, defaultp> u64vec3;
+
+ /// Default precision 64 bit unsigned integer vector of 4 components type.
+ /// @see gtc_type_precision
+ typedef tvec4<u64, defaultp> u64vec4;
+
+
+ //////////////////////
+ // Float vector types
+
+ /// 32 bit single-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef detail::float32 float32;
+
+ /// 64 bit double-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef detail::float64 float64;
+
+
+ /// 32 bit single-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef detail::float32 float32_t;
+
+ /// 64 bit double-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef detail::float64 float64_t;
+
+
+ /// 32 bit single-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef float32 f32;
+
+ /// 64 bit double-precision floating-point scalar.
+ /// @see gtc_type_precision
+ typedef float64 f64;
+
+
+ /// Single-precision floating-point vector of 1 component.
+ /// @see gtc_type_precision
+ typedef tvec1<float, defaultp> fvec1;
+
+ /// Single-precision floating-point vector of 2 components.
+ /// @see gtc_type_precision
+ typedef tvec2<float, defaultp> fvec2;
+
+ /// Single-precision floating-point vector of 3 components.
+ /// @see gtc_type_precision
+ typedef tvec3<float, defaultp> fvec3;
+
+ /// Single-precision floating-point vector of 4 components.
+ /// @see gtc_type_precision
+ typedef tvec4<float, defaultp> fvec4;
+
+
+ /// Single-precision floating-point vector of 1 component.
+ /// @see gtc_type_precision
+ typedef tvec1<f32, defaultp> f32vec1;
+
+ /// Single-precision floating-point vector of 2 components.
+ /// @see gtc_type_precision
+ typedef tvec2<f32, defaultp> f32vec2;
+
+ /// Single-precision floating-point vector of 3 components.
+ /// @see gtc_type_precision
+ typedef tvec3<f32, defaultp> f32vec3;
+
+ /// Single-precision floating-point vector of 4 components.
+ /// @see gtc_type_precision
+ typedef tvec4<f32, defaultp> f32vec4;
+
+
+ /// Double-precision floating-point vector of 1 component.
+ /// @see gtc_type_precision
+ typedef tvec1<f64, defaultp> f64vec1;
+
+ /// Double-precision floating-point vector of 2 components.
+ /// @see gtc_type_precision
+ typedef tvec2<f64, defaultp> f64vec2;
+
+ /// Double-precision floating-point vector of 3 components.
+ /// @see gtc_type_precision
+ typedef tvec3<f64, defaultp> f64vec3;
+
+ /// Double-precision floating-point vector of 4 components.
+ /// @see gtc_type_precision
+ typedef tvec4<f64, defaultp> f64vec4;
+
+
+ //////////////////////
+ // Float matrix types
+
+ /// Single-precision floating-point 1x1 matrix.
+ /// @see gtc_type_precision
+ //typedef detail::tmat1x1<f32> fmat1;
+
+ /// Single-precision floating-point 2x2 matrix.
+ /// @see gtc_type_precision
+ typedef tmat2x2<f32, defaultp> fmat2;
+
+ /// Single-precision floating-point 3x3 matrix.
+ /// @see gtc_type_precision
+ typedef tmat3x3<f32, defaultp> fmat3;
+
+ /// Single-precision floating-point 4x4 matrix.
+ /// @see gtc_type_precision
+ typedef tmat4x4<f32, defaultp> fmat4;
+
+
+ /// Single-precision floating-point 1x1 matrix.
+ /// @see gtc_type_precision
+ //typedef f32 fmat1x1;
+
+ /// Single-precision floating-point 2x2 matrix.
+ /// @see gtc_type_precision
+ typedef tmat2x2<f32, defaultp> fmat2x2;
+
+ /// Single-precision floating-point 2x3 matrix.
+ /// @see gtc_type_precision
+ typedef tmat2x3<f32, defaultp> fmat2x3;
+
+ /// Single-precision floating-point 2x4 matrix.
+ /// @see gtc_type_precision
+ typedef tmat2x4<f32, defaultp> fmat2x4;
+
+ /// Single-precision floating-point 3x2 matrix.
+ /// @see gtc_type_precision
+ typedef tmat3x2<f32, defaultp> fmat3x2;
+
+ /// Single-precision floating-point 3x3 matrix.
+ /// @see gtc_type_precision
+ typedef tmat3x3<f32, defaultp> fmat3x3;
+
+ /// Single-precision floating-point 3x4 matrix.
+ /// @see gtc_type_precision
+ typedef tmat3x4<f32, defaultp> fmat3x4;
+
+ /// Single-precision floating-point 4x2 matrix.
+ /// @see gtc_type_precision
+ typedef tmat4x2<f32, defaultp> fmat4x2;
+
+ /// Single-precision floating-point 4x3 matrix.
+ /// @see gtc_type_precision
+ typedef tmat4x3<f32, defaultp> fmat4x3;
+
+ /// Single-precision floating-point 4x4 matrix.
+ /// @see gtc_type_precision
+ typedef tmat4x4<f32, defaultp> fmat4x4;
+
+
+ /// Single-precision floating-point 1x1 matrix.
+ /// @see gtc_type_precision
+ //typedef detail::tmat1x1<f32, defaultp> f32mat1;
+
+ /// Single-precision floating-point 2x2 matrix.
+ /// @see gtc_type_precision
+ typedef tmat2x2<f32, defaultp> f32mat2;
+
+ /// Single-precision floating-point 3x3 matrix.
+ /// @see gtc_type_precision
+ typedef tmat3x3<f32, defaultp> f32mat3;
+
+ /// Single-precision floating-point 4x4 matrix.
+ /// @see gtc_type_precision
+ typedef tmat4x4<f32, defaultp> f32mat4;
+
+
+ /// Single-precision floating-point 1x1 matrix.
+ /// @see gtc_type_precision
+ //typedef f32 f32mat1x1;
+
+ /// Single-precision floating-point 2x2 matrix.
+ /// @see gtc_type_precision
+ typedef tmat2x2<f32, defaultp> f32mat2x2;
+
+ /// Single-precision floating-point 2x3 matrix.
+ /// @see gtc_type_precision
+ typedef tmat2x3<f32, defaultp> f32mat2x3;
+
+ /// Single-precision floating-point 2x4 matrix.
+ /// @see gtc_type_precision
+ typedef tmat2x4<f32, defaultp> f32mat2x4;
+
+ /// Single-precision floating-point 3x2 matrix.
+ /// @see gtc_type_precision
+ typedef tmat3x2<f32, defaultp> f32mat3x2;
+
+ /// Single-precision floating-point 3x3 matrix.
+ /// @see gtc_type_precision
+ typedef tmat3x3<f32, defaultp> f32mat3x3;
+
+ /// Single-precision floating-point 3x4 matrix.
+ /// @see gtc_type_precision
+ typedef tmat3x4<f32, defaultp> f32mat3x4;
+
+ /// Single-precision floating-point 4x2 matrix.
+ /// @see gtc_type_precision
+ typedef tmat4x2<f32, defaultp> f32mat4x2;
+
+ /// Single-precision floating-point 4x3 matrix.
+ /// @see gtc_type_precision
+ typedef tmat4x3<f32, defaultp> f32mat4x3;
+
+ /// Single-precision floating-point 4x4 matrix.
+ /// @see gtc_type_precision
+ typedef tmat4x4<f32, defaultp> f32mat4x4;
+
+
+ /// Double-precision floating-point 1x1 matrix.
+ /// @see gtc_type_precision
+ //typedef detail::tmat1x1<f64, defaultp> f64mat1;
+
+ /// Double-precision floating-point 2x2 matrix.
+ /// @see gtc_type_precision
+ typedef tmat2x2<f64, defaultp> f64mat2;
+
+ /// Double-precision floating-point 3x3 matrix.
+ /// @see gtc_type_precision
+ typedef tmat3x3<f64, defaultp> f64mat3;
+
+ /// Double-precision floating-point 4x4 matrix.
+ /// @see gtc_type_precision
+ typedef tmat4x4<f64, defaultp> f64mat4;
+
+
+ /// Double-precision floating-point 1x1 matrix.
+ /// @see gtc_type_precision
+ //typedef f64 f64mat1x1;
+
+ /// Double-precision floating-point 2x2 matrix.
+ /// @see gtc_type_precision
+ typedef tmat2x2<f64, defaultp> f64mat2x2;
+
+ /// Double-precision floating-point 2x3 matrix.
+ /// @see gtc_type_precision
+ typedef tmat2x3<f64, defaultp> f64mat2x3;
+
+ /// Double-precision floating-point 2x4 matrix.
+ /// @see gtc_type_precision
+ typedef tmat2x4<f64, defaultp> f64mat2x4;
+
+ /// Double-precision floating-point 3x2 matrix.
+ /// @see gtc_type_precision
+ typedef tmat3x2<f64, defaultp> f64mat3x2;
+
+ /// Double-precision floating-point 3x3 matrix.
+ /// @see gtc_type_precision
+ typedef tmat3x3<f64, defaultp> f64mat3x3;
+
+ /// Double-precision floating-point 3x4 matrix.
+ /// @see gtc_type_precision
+ typedef tmat3x4<f64, defaultp> f64mat3x4;
+
+ /// Double-precision floating-point 4x2 matrix.
+ /// @see gtc_type_precision
+ typedef tmat4x2<f64, defaultp> f64mat4x2;
+
+ /// Double-precision floating-point 4x3 matrix.
+ /// @see gtc_type_precision
+ typedef tmat4x3<f64, defaultp> f64mat4x3;
+
+ /// Double-precision floating-point 4x4 matrix.
+ /// @see gtc_type_precision
+ typedef tmat4x4<f64, defaultp> f64mat4x4;
+
+
+ //////////////////////////
+ // Quaternion types
+
+ /// Single-precision floating-point quaternion.
+ /// @see gtc_type_precision
+ typedef tquat<f32, defaultp> f32quat;
+
+ /// Double-precision floating-point quaternion.
+ /// @see gtc_type_precision
+ typedef tquat<f64, defaultp> f64quat;
+
+ /// @}
+}//namespace glm
+
+#include "type_precision.inl"
diff --git a/src/third_party/glm/glm/gtc/type_precision.inl b/src/third_party/glm/glm/gtc/type_precision.inl
new file mode 100644
index 0000000..cbfd4d8
--- /dev/null
+++ b/src/third_party/glm/glm/gtc/type_precision.inl
@@ -0,0 +1,7 @@
+/// @ref gtc_swizzle
+/// @file glm/gtc/swizzle.inl
+
+namespace glm
+{
+
+}
diff --git a/src/third_party/glm/glm/gtc/type_ptr.hpp b/src/third_party/glm/glm/gtc/type_ptr.hpp
new file mode 100644
index 0000000..008665e
--- /dev/null
+++ b/src/third_party/glm/glm/gtc/type_ptr.hpp
@@ -0,0 +1,149 @@
+/// @ref gtc_type_ptr
+/// @file glm/gtc/type_ptr.hpp
+///
+/// @see core (dependence)
+/// @see gtc_half_float (dependence)
+/// @see gtc_quaternion (dependence)
+///
+/// @defgroup gtc_type_ptr GLM_GTC_type_ptr
+/// @ingroup gtc
+///
+/// @brief Handles the interaction between pointers and vector, matrix types.
+///
+/// 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.
+
+#pragma once
+
+// Dependency:
+#include "../gtc/quaternion.hpp"
+#include "../vec2.hpp"
+#include "../vec3.hpp"
+#include "../vec4.hpp"
+#include "../mat2x2.hpp"
+#include "../mat2x3.hpp"
+#include "../mat2x4.hpp"
+#include "../mat3x2.hpp"
+#include "../mat3x3.hpp"
+#include "../mat3x4.hpp"
+#include "../mat4x2.hpp"
+#include "../mat4x3.hpp"
+#include "../mat4x4.hpp"
+#include <cstring>
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTC_type_ptr extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtc_type_ptr
+ /// @{
+
+ /// Return the constant address to the data of the input parameter.
+ /// @see gtc_type_ptr
+ template<typename genType>
+ GLM_FUNC_DECL typename genType::value_type const * value_ptr(genType const & vec);
+
+ /// Build a vector from a pointer.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_DECL tvec2<T, defaultp> make_vec2(T const * const ptr);
+
+ /// Build a vector from a pointer.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_DECL tvec3<T, defaultp> make_vec3(T const * const ptr);
+
+ /// Build a vector from a pointer.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_DECL tvec4<T, defaultp> make_vec4(T const * const ptr);
+
+ /// Build a matrix from a pointer.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_DECL tmat2x2<T, defaultp> make_mat2x2(T const * const ptr);
+
+ /// Build a matrix from a pointer.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_DECL tmat2x3<T, defaultp> make_mat2x3(T const * const ptr);
+
+ /// Build a matrix from a pointer.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_DECL tmat2x4<T, defaultp> make_mat2x4(T const * const ptr);
+
+ /// Build a matrix from a pointer.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_DECL tmat3x2<T, defaultp> make_mat3x2(T const * const ptr);
+
+ /// Build a matrix from a pointer.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_DECL tmat3x3<T, defaultp> make_mat3x3(T const * const ptr);
+
+ /// Build a matrix from a pointer.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_DECL tmat3x4<T, defaultp> make_mat3x4(T const * const ptr);
+
+ /// Build a matrix from a pointer.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_DECL tmat4x2<T, defaultp> make_mat4x2(T const * const ptr);
+
+ /// Build a matrix from a pointer.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_DECL tmat4x3<T, defaultp> make_mat4x3(T const * const ptr);
+
+ /// Build a matrix from a pointer.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_DECL tmat4x4<T, defaultp> make_mat4x4(T const * const ptr);
+
+ /// Build a matrix from a pointer.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_DECL tmat2x2<T, defaultp> make_mat2(T const * const ptr);
+
+ /// Build a matrix from a pointer.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_DECL tmat3x3<T, defaultp> make_mat3(T const * const ptr);
+
+ /// Build a matrix from a pointer.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_DECL tmat4x4<T, defaultp> make_mat4(T const * const ptr);
+
+ /// Build a quaternion from a pointer.
+ /// @see gtc_type_ptr
+ template<typename T>
+ GLM_FUNC_DECL tquat<T, defaultp> make_quat(T const * const ptr);
+
+ /// @}
+}//namespace glm
+
+#include "type_ptr.inl"
diff --git a/src/third_party/glm/glm/gtc/type_ptr.inl b/src/third_party/glm/glm/gtc/type_ptr.inl
new file mode 100644
index 0000000..3aa6ae6
--- /dev/null
+++ b/src/third_party/glm/glm/gtc/type_ptr.inl
@@ -0,0 +1,450 @@
+/// @ref gtc_type_ptr
+/// @file glm/gtc/type_ptr.inl
+
+#include <cstring>
+
+namespace glm
+{
+ /// @addtogroup gtc_type_ptr
+ /// @{
+
+ /// Return the constant address to the data of the vector input.
+ /// @see gtc_type_ptr
+ template<typename T, precision P>
+ GLM_FUNC_QUALIFIER T const * value_ptr
+ (
+ tvec2<T, P> const & vec
+ )
+ {
+ return &(vec.x);
+ }
+
+ //! Return the address to the data of the vector input.
+ /// @see gtc_type_ptr
+ template<typename T, precision P>
+ GLM_FUNC_QUALIFIER T * value_ptr
+ (
+ tvec2<T, P> & vec
+ )
+ {
+ return &(vec.x);
+ }
+
+ /// Return the constant address to the data of the vector input.
+ /// @see gtc_type_ptr
+ template<typename T, precision P>
+ GLM_FUNC_QUALIFIER T const * value_ptr
+ (
+ tvec3<T, P> const & vec
+ )
+ {
+ return &(vec.x);
+ }
+
+ //! Return the address to the data of the vector input.
+ /// @see gtc_type_ptr
+ template<typename T, precision P>
+ GLM_FUNC_QUALIFIER T * value_ptr
+ (
+ tvec3<T, P> & vec
+ )
+ {
+ return &(vec.x);
+ }
+
+ /// Return the constant address to the data of the vector input.
+ /// @see gtc_type_ptr
+ template<typename T, precision P>
+ GLM_FUNC_QUALIFIER T const * value_ptr
+ (
+ tvec4<T, P> const & vec
+ )
+ {
+ return &(vec.x);
+ }
+
+ //! Return the address to the data of the vector input.
+ //! From GLM_GTC_type_ptr extension.
+ template<typename T, precision P>
+ GLM_FUNC_QUALIFIER T * value_ptr
+ (
+ tvec4<T, P> & vec
+ )
+ {
+ return &(vec.x);
+ }
+
+ /// Return the constant address to the data of the matrix input.
+ /// @see gtc_type_ptr
+ template<typename T, precision P>
+ GLM_FUNC_QUALIFIER T const * value_ptr
+ (
+ tmat2x2<T, P> const & mat
+ )
+ {
+ return &(mat[0].x);
+ }
+
+ //! Return the address to the data of the matrix input.
+ /// @see gtc_type_ptr
+ template<typename T, precision P>
+ GLM_FUNC_QUALIFIER T * value_ptr
+ (
+ tmat2x2<T, P> & mat
+ )
+ {
+ return &(mat[0].x);
+ }
+
+ /// Return the constant address to the data of the matrix input.
+ /// @see gtc_type_ptr
+ template<typename T, precision P>
+ GLM_FUNC_QUALIFIER T const * value_ptr
+ (
+ tmat3x3<T, P> const & mat
+ )
+ {
+ return &(mat[0].x);
+ }
+
+ //! Return the address to the data of the matrix input.
+ /// @see gtc_type_ptr
+ template<typename T, precision P>
+ GLM_FUNC_QUALIFIER T * value_ptr
+ (
+ tmat3x3<T, P> & mat
+ )
+ {
+ return &(mat[0].x);
+ }
+
+ /// Return the constant address to the data of the matrix input.
+ /// @see gtc_type_ptr
+ template<typename T, precision P>
+ GLM_FUNC_QUALIFIER T const * value_ptr
+ (
+ tmat4x4<T, P> const & mat
+ )
+ {
+ return &(mat[0].x);
+ }
+
+ //! Return the address to the data of the matrix input.
+ //! From GLM_GTC_type_ptr extension.
+ template<typename T, precision P>
+ GLM_FUNC_QUALIFIER T * value_ptr
+ (
+ tmat4x4<T, P> & mat
+ )
+ {
+ return &(mat[0].x);
+ }
+
+ /// Return the constant address to the data of the matrix input.
+ /// @see gtc_type_ptr
+ template<typename T, precision P>
+ GLM_FUNC_QUALIFIER T const * value_ptr
+ (
+ tmat2x3<T, P> const & mat
+ )
+ {
+ return &(mat[0].x);
+ }
+
+ //! Return the address to the data of the matrix input.
+ /// @see gtc_type_ptr
+ template<typename T, precision P>
+ GLM_FUNC_QUALIFIER T * value_ptr
+ (
+ tmat2x3<T, P> & mat
+ )
+ {
+ return &(mat[0].x);
+ }
+
+ /// Return the constant address to the data of the matrix input.
+ /// @see gtc_type_ptr
+ template<typename T, precision P>
+ GLM_FUNC_QUALIFIER T const * value_ptr
+ (
+ tmat3x2<T, P> const & mat
+ )
+ {
+ return &(mat[0].x);
+ }
+
+ //! Return the address to the data of the matrix input.
+ /// @see gtc_type_ptr
+ template<typename T, precision P>
+ GLM_FUNC_QUALIFIER T * value_ptr
+ (
+ tmat3x2<T, P> & mat
+ )
+ {
+ return &(mat[0].x);
+ }
+
+ /// Return the constant address to the data of the matrix input.
+ /// @see gtc_type_ptr
+ template<typename T, precision P>
+ GLM_FUNC_QUALIFIER T const * value_ptr
+ (
+ tmat2x4<T, P> const & mat
+ )
+ {
+ return &(mat[0].x);
+ }
+
+ //! Return the address to the data of the matrix input.
+ /// @see gtc_type_ptr
+ template<typename T, precision P>
+ GLM_FUNC_QUALIFIER T * value_ptr
+ (
+ tmat2x4<T, P> & mat
+ )
+ {
+ return &(mat[0].x);
+ }
+
+ /// Return the constant address to the data of the matrix input.
+ /// @see gtc_type_ptr
+ template<typename T, precision P>
+ GLM_FUNC_QUALIFIER T const * value_ptr
+ (
+ tmat4x2<T, P> const & mat
+ )
+ {
+ return &(mat[0].x);
+ }
+
+ //! Return the address to the data of the matrix input.
+ /// @see gtc_type_ptr
+ template<typename T, precision P>
+ GLM_FUNC_QUALIFIER T * value_ptr
+ (
+ tmat4x2<T, P> & mat
+ )
+ {
+ return &(mat[0].x);
+ }
+
+ /// Return the constant address to the data of the matrix input.
+ /// @see gtc_type_ptr
+ template<typename T, precision P>
+ GLM_FUNC_QUALIFIER T const * value_ptr
+ (
+ tmat3x4<T, P> const & mat
+ )
+ {
+ return &(mat[0].x);
+ }
+
+ //! Return the address to the data of the matrix input.
+ /// @see gtc_type_ptr
+ template<typename T, precision P>
+ GLM_FUNC_QUALIFIER T * value_ptr
+ (
+ tmat3x4<T, P> & mat
+ )
+ {
+ return &(mat[0].x);
+ }
+
+ /// Return the constant address to the data of the matrix input.
+ /// @see gtc_type_ptr
+ template<typename T, precision P>
+ GLM_FUNC_QUALIFIER T const * value_ptr
+ (
+ tmat4x3<T, P> const & mat
+ )
+ {
+ return &(mat[0].x);
+ }
+
+ /// Return the address to the data of the matrix input.
+ /// @see gtc_type_ptr
+ template<typename T, precision P>
+ GLM_FUNC_QUALIFIER T * value_ptr(tmat4x3<T, P> & mat)
+ {
+ return &(mat[0].x);
+ }
+
+ /// Return the constant address to the data of the input parameter.
+ /// @see gtc_type_ptr
+ template<typename T, precision P>
+ GLM_FUNC_QUALIFIER T const * value_ptr
+ (
+ tquat<T, P> const & q
+ )
+ {
+ return &(q[0]);
+ }
+
+ /// Return the address to the data of the quaternion input.
+ /// @see gtc_type_ptr
+ template<typename T, precision P>
+ GLM_FUNC_QUALIFIER T * value_ptr
+ (
+ tquat<T, P> & q
+ )
+ {
+ return &(q[0]);
+ }
+
+ /// Build a vector from a pointer.
+ /// @see gtc_type_ptr
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec2<T, defaultp> make_vec2(T const * const ptr)
+ {
+ tvec2<T, defaultp> Result;
+ memcpy(value_ptr(Result), ptr, sizeof(tvec2<T, defaultp>));
+ return Result;
+ }
+
+ /// Build a vector from a pointer.
+ /// @see gtc_type_ptr
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec3<T, defaultp> make_vec3(T const * const ptr)
+ {
+ tvec3<T, defaultp> Result;
+ memcpy(value_ptr(Result), ptr, sizeof(tvec3<T, defaultp>));
+ return Result;
+ }
+
+ /// Build a vector from a pointer.
+ /// @see gtc_type_ptr
+ template <typename T>
+ GLM_FUNC_QUALIFIER tvec4<T, defaultp> make_vec4(T const * const ptr)
+ {
+ tvec4<T, defaultp> Result;
+ memcpy(value_ptr(Result), ptr, sizeof(tvec4<T, defaultp>));
+ return Result;
+ }
+
+ /// Build a matrix from a pointer.
+ /// @see gtc_type_ptr
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x2<T, defaultp> make_mat2x2(T const * const ptr)
+ {
+ tmat2x2<T, defaultp> Result;
+ memcpy(value_ptr(Result), ptr, sizeof(tmat2x2<T, defaultp>));
+ return Result;
+ }
+
+ /// Build a matrix from a pointer.
+ /// @see gtc_type_ptr
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x3<T, defaultp> make_mat2x3(T const * const ptr)
+ {
+ tmat2x3<T, defaultp> Result;
+ memcpy(value_ptr(Result), ptr, sizeof(tmat2x3<T, defaultp>));
+ return Result;
+ }
+
+ /// Build a matrix from a pointer.
+ /// @see gtc_type_ptr
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x4<T, defaultp> make_mat2x4(T const * const ptr)
+ {
+ tmat2x4<T, defaultp> Result;
+ memcpy(value_ptr(Result), ptr, sizeof(tmat2x4<T, defaultp>));
+ return Result;
+ }
+
+ /// Build a matrix from a pointer.
+ /// @see gtc_type_ptr
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x2<T, defaultp> make_mat3x2(T const * const ptr)
+ {
+ tmat3x2<T, defaultp> Result;
+ memcpy(value_ptr(Result), ptr, sizeof(tmat3x2<T, defaultp>));
+ return Result;
+ }
+
+ //! Build a matrix from a pointer.
+ /// @see gtc_type_ptr
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x3<T, defaultp> make_mat3x3(T const * const ptr)
+ {
+ tmat3x3<T, defaultp> Result;
+ memcpy(value_ptr(Result), ptr, sizeof(tmat3x3<T, defaultp>));
+ return Result;
+ }
+
+ //! Build a matrix from a pointer.
+ /// @see gtc_type_ptr
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x4<T, defaultp> make_mat3x4(T const * const ptr)
+ {
+ tmat3x4<T, defaultp> Result;
+ memcpy(value_ptr(Result), ptr, sizeof(tmat3x4<T, defaultp>));
+ return Result;
+ }
+
+ //! Build a matrix from a pointer.
+ /// @see gtc_type_ptr
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x2<T, defaultp> make_mat4x2(T const * const ptr)
+ {
+ tmat4x2<T, defaultp> Result;
+ memcpy(value_ptr(Result), ptr, sizeof(tmat4x2<T, defaultp>));
+ return Result;
+ }
+
+ //! Build a matrix from a pointer.
+ /// @see gtc_type_ptr
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x3<T, defaultp> make_mat4x3(T const * const ptr)
+ {
+ tmat4x3<T, defaultp> Result;
+ memcpy(value_ptr(Result), ptr, sizeof(tmat4x3<T, defaultp>));
+ return Result;
+ }
+
+ //! Build a matrix from a pointer.
+ /// @see gtc_type_ptr
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> make_mat4x4(T const * const ptr)
+ {
+ tmat4x4<T, defaultp> Result;
+ memcpy(value_ptr(Result), ptr, sizeof(tmat4x4<T, defaultp>));
+ return Result;
+ }
+
+ //! Build a matrix from a pointer.
+ /// @see gtc_type_ptr
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x2<T, defaultp> make_mat2(T const * const ptr)
+ {
+ return make_mat2x2(ptr);
+ }
+
+ //! Build a matrix from a pointer.
+ /// @see gtc_type_ptr
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x3<T, defaultp> make_mat3(T const * const ptr)
+ {
+ return make_mat3x3(ptr);
+ }
+
+ //! Build a matrix from a pointer.
+ /// @see gtc_type_ptr
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> make_mat4(T const * const ptr)
+ {
+ return make_mat4x4(ptr);
+ }
+
+ //! Build a quaternion from a pointer.
+ /// @see gtc_type_ptr
+ template <typename T>
+ GLM_FUNC_QUALIFIER tquat<T, defaultp> make_quat(T const * const ptr)
+ {
+ tquat<T, defaultp> Result;
+ memcpy(value_ptr(Result), ptr, sizeof(tquat<T, defaultp>));
+ return Result;
+ }
+
+ /// @}
+}//namespace glm
+
diff --git a/src/third_party/glm/glm/gtc/ulp.hpp b/src/third_party/glm/glm/gtc/ulp.hpp
new file mode 100644
index 0000000..a82fa4e
--- /dev/null
+++ b/src/third_party/glm/glm/gtc/ulp.hpp
@@ -0,0 +1,63 @@
+/// @ref gtc_ulp
+/// @file glm/gtc/ulp.hpp
+///
+/// @see core (dependence)
+///
+/// @defgroup gtc_ulp GLM_GTC_ulp
+/// @ingroup gtc
+///
+/// @brief Allow the measurement of the accuracy of a function against a reference
+/// implementation. This extension works on floating-point data and provide results
+/// in ULP.
+/// <glm/gtc/ulp.hpp> need to be included to use these features.
+
+#pragma once
+
+// Dependencies
+#include "../detail/setup.hpp"
+#include "../detail/precision.hpp"
+#include "../detail/type_int.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTC_ulp extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtc_ulp
+ /// @{
+
+ /// Return the next ULP value(s) after the input value(s).
+ /// @see gtc_ulp
+ template <typename genType>
+ GLM_FUNC_DECL genType next_float(genType const & x);
+
+ /// Return the previous ULP value(s) before the input value(s).
+ /// @see gtc_ulp
+ template <typename genType>
+ GLM_FUNC_DECL genType prev_float(genType const & x);
+
+ /// Return the value(s) ULP distance after the input value(s).
+ /// @see gtc_ulp
+ template <typename genType>
+ GLM_FUNC_DECL genType next_float(genType const & x, uint const & Distance);
+
+ /// Return the value(s) ULP distance before the input value(s).
+ /// @see gtc_ulp
+ template <typename genType>
+ GLM_FUNC_DECL genType prev_float(genType const & x, uint const & Distance);
+
+ /// Return the distance in the number of ULP between 2 scalars.
+ /// @see gtc_ulp
+ template <typename T>
+ GLM_FUNC_DECL uint float_distance(T const & x, T const & y);
+
+ /// Return the distance in the number of ULP between 2 vectors.
+ /// @see gtc_ulp
+ template<typename T, template<typename> class vecType>
+ GLM_FUNC_DECL vecType<uint> float_distance(vecType<T> const & x, vecType<T> const & y);
+
+ /// @}
+}// namespace glm
+
+#include "ulp.inl"
diff --git a/src/third_party/glm/glm/gtc/ulp.inl b/src/third_party/glm/glm/gtc/ulp.inl
new file mode 100644
index 0000000..54c914a
--- /dev/null
+++ b/src/third_party/glm/glm/gtc/ulp.inl
@@ -0,0 +1,321 @@
+/// @ref gtc_ulp
+/// @file glm/gtc/ulp.inl
+///
+/// Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
+///
+/// Developed at SunPro, a Sun Microsystems, Inc. business.
+/// Permission to use, copy, modify, and distribute this
+/// software is freely granted, provided that this notice
+/// is preserved.
+
+#include "../detail/type_int.hpp"
+#include <cmath>
+#include <cfloat>
+#include <limits>
+
+#if(GLM_COMPILER & GLM_COMPILER_VC)
+# pragma warning(push)
+# pragma warning(disable : 4127)
+#endif
+
+typedef union
+{
+ float value;
+ /* FIXME: Assumes 32 bit int. */
+ unsigned int word;
+} ieee_float_shape_type;
+
+typedef union
+{
+ double value;
+ struct
+ {
+ glm::detail::int32 lsw;
+ glm::detail::int32 msw;
+ } parts;
+} ieee_double_shape_type;
+
+#define GLM_EXTRACT_WORDS(ix0,ix1,d) \
+ do { \
+ ieee_double_shape_type ew_u; \
+ ew_u.value = (d); \
+ (ix0) = ew_u.parts.msw; \
+ (ix1) = ew_u.parts.lsw; \
+ } while (0)
+
+#define GLM_GET_FLOAT_WORD(i,d) \
+ do { \
+ ieee_float_shape_type gf_u; \
+ gf_u.value = (d); \
+ (i) = gf_u.word; \
+ } while (0)
+
+#define GLM_SET_FLOAT_WORD(d,i) \
+ do { \
+ ieee_float_shape_type sf_u; \
+ sf_u.word = (i); \
+ (d) = sf_u.value; \
+ } while (0)
+
+#define GLM_INSERT_WORDS(d,ix0,ix1) \
+ do { \
+ ieee_double_shape_type iw_u; \
+ iw_u.parts.msw = (ix0); \
+ iw_u.parts.lsw = (ix1); \
+ (d) = iw_u.value; \
+ } while (0)
+
+namespace glm{
+namespace detail
+{
+ GLM_FUNC_QUALIFIER float nextafterf(float x, float y)
+ {
+ volatile float t;
+ glm::detail::int32 hx, hy, ix, iy;
+
+ GLM_GET_FLOAT_WORD(hx, x);
+ GLM_GET_FLOAT_WORD(hy, y);
+ ix = hx&0x7fffffff; // |x|
+ iy = hy&0x7fffffff; // |y|
+
+ if((ix>0x7f800000) || // x is nan
+ (iy>0x7f800000)) // y is nan
+ return x+y;
+ if(x==y) return y; // x=y, return y
+ if(ix==0) { // x == 0
+ GLM_SET_FLOAT_WORD(x,(hy&0x80000000)|1);// return +-minsubnormal
+ t = x*x;
+ if(t==x) return t; else return x; // raise underflow flag
+ }
+ if(hx>=0) { // x > 0
+ if(hx>hy) { // x > y, x -= ulp
+ hx -= 1;
+ } else { // x < y, x += ulp
+ hx += 1;
+ }
+ } else { // x < 0
+ if(hy>=0||hx>hy){ // x < y, x -= ulp
+ hx -= 1;
+ } else { // x > y, x += ulp
+ hx += 1;
+ }
+ }
+ hy = hx&0x7f800000;
+ if(hy>=0x7f800000) return x+x; // overflow
+ if(hy<0x00800000) { // underflow
+ t = x*x;
+ if(t!=x) { // raise underflow flag
+ GLM_SET_FLOAT_WORD(y,hx);
+ return y;
+ }
+ }
+ GLM_SET_FLOAT_WORD(x,hx);
+ return x;
+ }
+
+ GLM_FUNC_QUALIFIER double nextafter(double x, double y)
+ {
+ volatile double t;
+ glm::detail::int32 hx, hy, ix, iy;
+ glm::detail::uint32 lx, ly;
+
+ GLM_EXTRACT_WORDS(hx, lx, x);
+ GLM_EXTRACT_WORDS(hy, ly, y);
+ ix = hx & 0x7fffffff; // |x|
+ iy = hy & 0x7fffffff; // |y|
+
+ if(((ix>=0x7ff00000)&&((ix-0x7ff00000)|lx)!=0) || // x is nan
+ ((iy>=0x7ff00000)&&((iy-0x7ff00000)|ly)!=0)) // y is nan
+ return x+y;
+ if(x==y) return y; // x=y, return y
+ if((ix|lx)==0) { // x == 0
+ GLM_INSERT_WORDS(x, hy & 0x80000000, 1); // return +-minsubnormal
+ t = x*x;
+ if(t==x) return t; else return x; // raise underflow flag
+ }
+ if(hx>=0) { // x > 0
+ if(hx>hy||((hx==hy)&&(lx>ly))) { // x > y, x -= ulp
+ if(lx==0) hx -= 1;
+ lx -= 1;
+ } else { // x < y, x += ulp
+ lx += 1;
+ if(lx==0) hx += 1;
+ }
+ } else { // x < 0
+ if(hy>=0||hx>hy||((hx==hy)&&(lx>ly))){// x < y, x -= ulp
+ if(lx==0) hx -= 1;
+ lx -= 1;
+ } else { // x > y, x += ulp
+ lx += 1;
+ if(lx==0) hx += 1;
+ }
+ }
+ hy = hx&0x7ff00000;
+ if(hy>=0x7ff00000) return x+x; // overflow
+ if(hy<0x00100000) { // underflow
+ t = x*x;
+ if(t!=x) { // raise underflow flag
+ GLM_INSERT_WORDS(y,hx,lx);
+ return y;
+ }
+ }
+ GLM_INSERT_WORDS(x,hx,lx);
+ return x;
+ }
+}//namespace detail
+}//namespace glm
+
+#if(GLM_COMPILER & GLM_COMPILER_VC)
+# pragma warning(pop)
+#endif
+
+namespace glm
+{
+ template <>
+ GLM_FUNC_QUALIFIER float next_float(float const & x)
+ {
+# if GLM_HAS_CXX11_STL
+ return std::nextafter(x, std::numeric_limits<float>::max());
+# elif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS)))
+ return detail::nextafterf(x, FLT_MAX);
+# elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID)
+ return __builtin_nextafterf(x, FLT_MAX);
+# else
+ return nextafterf(x, FLT_MAX);
+# endif
+ }
+
+ template <>
+ GLM_FUNC_QUALIFIER double next_float(double const & x)
+ {
+# if GLM_HAS_CXX11_STL
+ return std::nextafter(x, std::numeric_limits<double>::max());
+# elif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS)))
+ return detail::nextafter(x, std::numeric_limits<double>::max());
+# elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID)
+ return __builtin_nextafter(x, FLT_MAX);
+# else
+ return nextafter(x, DBL_MAX);
+# endif
+ }
+
+ template<typename T, precision P, template<typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> next_float(vecType<T, P> const & x)
+ {
+ vecType<T, P> Result(uninitialize);
+ for(length_t i = 0, n = Result.length(); i < n; ++i)
+ Result[i] = next_float(x[i]);
+ return Result;
+ }
+
+ GLM_FUNC_QUALIFIER float prev_float(float const & x)
+ {
+# if GLM_HAS_CXX11_STL
+ return std::nextafter(x, std::numeric_limits<float>::min());
+# elif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS)))
+ return detail::nextafterf(x, FLT_MIN);
+# elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID)
+ return __builtin_nextafterf(x, FLT_MIN);
+# else
+ return nextafterf(x, FLT_MIN);
+# endif
+ }
+
+ GLM_FUNC_QUALIFIER double prev_float(double const & x)
+ {
+# if GLM_HAS_CXX11_STL
+ return std::nextafter(x, std::numeric_limits<double>::min());
+# elif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS)))
+ return _nextafter(x, DBL_MIN);
+# elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID)
+ return __builtin_nextafter(x, DBL_MIN);
+# else
+ return nextafter(x, DBL_MIN);
+# endif
+ }
+
+ template<typename T, precision P, template<typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> prev_float(vecType<T, P> const & x)
+ {
+ vecType<T, P> Result(uninitialize);
+ for(length_t i = 0, n = Result.length(); i < n; ++i)
+ Result[i] = prev_float(x[i]);
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER T next_float(T const & x, uint const & ulps)
+ {
+ T temp = x;
+ for(uint i = 0; i < ulps; ++i)
+ temp = next_float(temp);
+ return temp;
+ }
+
+ template<typename T, precision P, template<typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> next_float(vecType<T, P> const & x, vecType<uint, P> const & ulps)
+ {
+ vecType<T, P> Result(uninitialize);
+ for(length_t i = 0, n = Result.length(); i < n; ++i)
+ Result[i] = next_float(x[i], ulps[i]);
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER T prev_float(T const & x, uint const & ulps)
+ {
+ T temp = x;
+ for(uint i = 0; i < ulps; ++i)
+ temp = prev_float(temp);
+ return temp;
+ }
+
+ template<typename T, precision P, template<typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> prev_float(vecType<T, P> const & x, vecType<uint, P> const & ulps)
+ {
+ vecType<T, P> Result(uninitialize);
+ for(length_t i = 0, n = Result.length(); i < n; ++i)
+ Result[i] = prev_float(x[i], ulps[i]);
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER uint float_distance(T const & x, T const & y)
+ {
+ uint ulp = 0;
+
+ if(x < y)
+ {
+ T temp = x;
+ while(temp != y)// && ulp < std::numeric_limits<std::size_t>::max())
+ {
+ ++ulp;
+ temp = next_float(temp);
+ }
+ }
+ else if(y < x)
+ {
+ T temp = y;
+ while(temp != x)// && ulp < std::numeric_limits<std::size_t>::max())
+ {
+ ++ulp;
+ temp = next_float(temp);
+ }
+ }
+ else // ==
+ {
+
+ }
+
+ return ulp;
+ }
+
+ template<typename T, precision P, template<typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<uint, P> float_distance(vecType<T, P> const & x, vecType<T, P> const & y)
+ {
+ vecType<uint, P> Result(uninitialize);
+ for(length_t i = 0, n = Result.length(); i < n; ++i)
+ Result[i] = float_distance(x[i], y[i]);
+ return Result;
+ }
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtc/vec1.hpp b/src/third_party/glm/glm/gtc/vec1.hpp
new file mode 100644
index 0000000..f84ff97
--- /dev/null
+++ b/src/third_party/glm/glm/gtc/vec1.hpp
@@ -0,0 +1,164 @@
+/// @ref gtc_vec1
+/// @file glm/gtc/vec1.hpp
+///
+/// @see core (dependence)
+///
+/// @defgroup gtc_vec1 GLM_GTC_vec1
+/// @ingroup gtc
+///
+/// @brief Add vec1, ivec1, uvec1 and bvec1 types.
+/// <glm/gtc/vec1.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependency:
+#include "../glm.hpp"
+#include "../detail/type_vec1.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTC_vec1 extension included")
+#endif
+
+namespace glm
+{
+ /// 1 component vector of high precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ /// @see gtc_vec1 extension.
+ typedef highp_vec1_t highp_vec1;
+
+ /// 1 component vector of medium precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ /// @see gtc_vec1 extension.
+ typedef mediump_vec1_t mediump_vec1;
+
+ /// 1 component vector of low precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ /// @see gtc_vec1 extension.
+ typedef lowp_vec1_t lowp_vec1;
+
+ /// 1 component vector of high precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ /// @see gtc_vec1 extension.
+ typedef highp_dvec1_t highp_dvec1;
+
+ /// 1 component vector of medium precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ /// @see gtc_vec1 extension.
+ typedef mediump_dvec1_t mediump_dvec1;
+
+ /// 1 component vector of low precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ /// @see gtc_vec1 extension.
+ typedef lowp_dvec1_t lowp_dvec1;
+
+ /// 1 component vector of high precision signed integer numbers.
+ /// There is no guarantee on the actual precision.
+ /// @see gtc_vec1 extension.
+ typedef highp_ivec1_t highp_ivec1;
+
+ /// 1 component vector of medium precision signed integer numbers.
+ /// There is no guarantee on the actual precision.
+ /// @see gtc_vec1 extension.
+ typedef mediump_ivec1_t mediump_ivec1;
+
+ /// 1 component vector of low precision signed integer numbers.
+ /// There is no guarantee on the actual precision.
+ /// @see gtc_vec1 extension.
+ typedef lowp_ivec1_t lowp_ivec1;
+
+ /// 1 component vector of high precision unsigned integer numbers.
+ /// There is no guarantee on the actual precision.
+ /// @see gtc_vec1 extension.
+ typedef highp_uvec1_t highp_uvec1;
+
+ /// 1 component vector of medium precision unsigned integer numbers.
+ /// There is no guarantee on the actual precision.
+ /// @see gtc_vec1 extension.
+ typedef mediump_uvec1_t mediump_uvec1;
+
+ /// 1 component vector of low precision unsigned integer numbers.
+ /// There is no guarantee on the actual precision.
+ /// @see gtc_vec1 extension.
+ typedef lowp_uvec1_t lowp_uvec1;
+
+ /// 1 component vector of high precision boolean.
+ /// There is no guarantee on the actual precision.
+ /// @see gtc_vec1 extension.
+ typedef highp_bvec1_t highp_bvec1;
+
+ /// 1 component vector of medium precision boolean.
+ /// There is no guarantee on the actual precision.
+ /// @see gtc_vec1 extension.
+ typedef mediump_bvec1_t mediump_bvec1;
+
+ /// 1 component vector of low precision boolean.
+ /// There is no guarantee on the actual precision.
+ /// @see gtc_vec1 extension.
+ typedef lowp_bvec1_t lowp_bvec1;
+
+ //////////////////////////
+ // vec1 definition
+
+#if(defined(GLM_PRECISION_HIGHP_BOOL))
+ typedef highp_bvec1 bvec1;
+#elif(defined(GLM_PRECISION_MEDIUMP_BOOL))
+ typedef mediump_bvec1 bvec1;
+#elif(defined(GLM_PRECISION_LOWP_BOOL))
+ typedef lowp_bvec1 bvec1;
+#else
+ /// 1 component vector of boolean.
+ /// @see gtc_vec1 extension.
+ typedef highp_bvec1 bvec1;
+#endif//GLM_PRECISION
+
+#if(defined(GLM_PRECISION_HIGHP_FLOAT))
+ typedef highp_vec1 vec1;
+#elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))
+ typedef mediump_vec1 vec1;
+#elif(defined(GLM_PRECISION_LOWP_FLOAT))
+ typedef lowp_vec1 vec1;
+#else
+ /// 1 component vector of floating-point numbers.
+ /// @see gtc_vec1 extension.
+ typedef highp_vec1 vec1;
+#endif//GLM_PRECISION
+
+#if(defined(GLM_PRECISION_HIGHP_DOUBLE))
+ typedef highp_dvec1 dvec1;
+#elif(defined(GLM_PRECISION_MEDIUMP_DOUBLE))
+ typedef mediump_dvec1 dvec1;
+#elif(defined(GLM_PRECISION_LOWP_DOUBLE))
+ typedef lowp_dvec1 dvec1;
+#else
+ /// 1 component vector of floating-point numbers.
+ /// @see gtc_vec1 extension.
+ typedef highp_dvec1 dvec1;
+#endif//GLM_PRECISION
+
+#if(defined(GLM_PRECISION_HIGHP_INT))
+ typedef highp_ivec1 ivec1;
+#elif(defined(GLM_PRECISION_MEDIUMP_INT))
+ typedef mediump_ivec1 ivec1;
+#elif(defined(GLM_PRECISION_LOWP_INT))
+ typedef lowp_ivec1 ivec1;
+#else
+ /// 1 component vector of signed integer numbers.
+ /// @see gtc_vec1 extension.
+ typedef highp_ivec1 ivec1;
+#endif//GLM_PRECISION
+
+#if(defined(GLM_PRECISION_HIGHP_UINT))
+ typedef highp_uvec1 uvec1;
+#elif(defined(GLM_PRECISION_MEDIUMP_UINT))
+ typedef mediump_uvec1 uvec1;
+#elif(defined(GLM_PRECISION_LOWP_UINT))
+ typedef lowp_uvec1 uvec1;
+#else
+ /// 1 component vector of unsigned integer numbers.
+ /// @see gtc_vec1 extension.
+ typedef highp_uvec1 uvec1;
+#endif//GLM_PRECISION
+
+}// namespace glm
+
+#include "vec1.inl"
diff --git a/src/third_party/glm/glm/gtc/vec1.inl b/src/third_party/glm/glm/gtc/vec1.inl
new file mode 100644
index 0000000..5a6627c
--- /dev/null
+++ b/src/third_party/glm/glm/gtc/vec1.inl
@@ -0,0 +1,2 @@
+/// @ref gtc_vec1
+/// @file glm/gtc/vec1.inl
diff --git a/src/third_party/glm/glm/gtx/associated_min_max.hpp b/src/third_party/glm/glm/gtx/associated_min_max.hpp
new file mode 100644
index 0000000..eb9d721
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/associated_min_max.hpp
@@ -0,0 +1,202 @@
+/// @ref gtx_associated_min_max
+/// @file glm/gtx/associated_min_max.hpp
+///
+/// @see core (dependence)
+/// @see gtx_extented_min_max (dependence)
+///
+/// @defgroup gtx_associated_min_max GLM_GTX_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.
+
+#pragma once
+
+// Dependency:
+#include "../glm.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_associated_min_max extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_associated_min_max
+ /// @{
+
+ /// Minimum comparison between 2 variables and returns 2 associated variable values
+ /// @see gtx_associated_min_max
+ template<typename T, typename U, precision P>
+ GLM_FUNC_DECL U associatedMin(T x, U a, T y, U b);
+
+ /// Minimum comparison between 2 variables and returns 2 associated variable values
+ /// @see gtx_associated_min_max
+ template<typename T, typename U, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL tvec2<U, P> associatedMin(
+ vecType<T, P> const & x, vecType<U, P> const & a,
+ vecType<T, P> const & y, vecType<U, P> const & b);
+
+ /// Minimum comparison between 2 variables and returns 2 associated variable values
+ /// @see gtx_associated_min_max
+ template<typename T, typename U, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<U, P> associatedMin(
+ T x, const vecType<U, P>& a,
+ T y, const vecType<U, P>& b);
+
+ /// Minimum comparison between 2 variables and returns 2 associated variable values
+ /// @see gtx_associated_min_max
+ template<typename T, typename U, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<U, P> associatedMin(
+ vecType<T, P> const & x, U a,
+ vecType<T, P> const & y, U b);
+
+ /// Minimum comparison between 3 variables and returns 3 associated variable values
+ /// @see gtx_associated_min_max
+ template<typename T, typename U>
+ GLM_FUNC_DECL U associatedMin(
+ T x, U a,
+ T y, U b,
+ T z, U c);
+
+ /// Minimum comparison between 3 variables and returns 3 associated variable values
+ /// @see gtx_associated_min_max
+ template<typename T, typename U, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<U, P> associatedMin(
+ vecType<T, P> const & x, vecType<U, P> const & a,
+ vecType<T, P> const & y, vecType<U, P> const & b,
+ vecType<T, P> const & z, vecType<U, P> const & c);
+
+ /// Minimum comparison between 4 variables and returns 4 associated variable values
+ /// @see gtx_associated_min_max
+ template<typename T, typename U>
+ GLM_FUNC_DECL U associatedMin(
+ T x, U a,
+ T y, U b,
+ T z, U c,
+ T w, U d);
+
+ /// Minimum comparison between 4 variables and returns 4 associated variable values
+ /// @see gtx_associated_min_max
+ template<typename T, typename U, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<U, P> associatedMin(
+ vecType<T, P> const & x, vecType<U, P> const & a,
+ vecType<T, P> const & y, vecType<U, P> const & b,
+ vecType<T, P> const & z, vecType<U, P> const & c,
+ vecType<T, P> const & w, vecType<U, P> const & d);
+
+ /// Minimum comparison between 4 variables and returns 4 associated variable values
+ /// @see gtx_associated_min_max
+ template<typename T, typename U, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<U, P> associatedMin(
+ T x, vecType<U, P> const & a,
+ T y, vecType<U, P> const & b,
+ T z, vecType<U, P> const & c,
+ T w, vecType<U, P> const & d);
+
+ /// Minimum comparison between 4 variables and returns 4 associated variable values
+ /// @see gtx_associated_min_max
+ template<typename T, typename U, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<U, P> associatedMin(
+ vecType<T, P> const & x, U a,
+ vecType<T, P> const & y, U b,
+ vecType<T, P> const & z, U c,
+ vecType<T, P> const & w, U d);
+
+ /// Maximum comparison between 2 variables and returns 2 associated variable values
+ /// @see gtx_associated_min_max
+ template<typename T, typename U>
+ GLM_FUNC_DECL U associatedMax(T x, U a, T y, U b);
+
+ /// Maximum comparison between 2 variables and returns 2 associated variable values
+ /// @see gtx_associated_min_max
+ template<typename T, typename U, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL tvec2<U, P> associatedMax(
+ vecType<T, P> const & x, vecType<U, P> const & a,
+ vecType<T, P> const & y, vecType<U, P> const & b);
+
+ /// Maximum comparison between 2 variables and returns 2 associated variable values
+ /// @see gtx_associated_min_max
+ template<typename T, typename U, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> associatedMax(
+ T x, vecType<U, P> const & a,
+ T y, vecType<U, P> const & b);
+
+ /// Maximum comparison between 2 variables and returns 2 associated variable values
+ /// @see gtx_associated_min_max
+ template<typename T, typename U, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<U, P> associatedMax(
+ vecType<T, P> const & x, U a,
+ vecType<T, P> const & y, U b);
+
+ /// Maximum comparison between 3 variables and returns 3 associated variable values
+ /// @see gtx_associated_min_max
+ template<typename T, typename U>
+ GLM_FUNC_DECL U associatedMax(
+ T x, U a,
+ T y, U b,
+ T z, U c);
+
+ /// Maximum comparison between 3 variables and returns 3 associated variable values
+ /// @see gtx_associated_min_max
+ template<typename T, typename U, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<U, P> associatedMax(
+ vecType<T, P> const & x, vecType<U, P> const & a,
+ vecType<T, P> const & y, vecType<U, P> const & b,
+ vecType<T, P> const & z, vecType<U, P> const & c);
+
+ /// Maximum comparison between 3 variables and returns 3 associated variable values
+ /// @see gtx_associated_min_max
+ template<typename T, typename U, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> associatedMax(
+ T x, vecType<U, P> const & a,
+ T y, vecType<U, P> const & b,
+ T z, vecType<U, P> const & c);
+
+ /// Maximum comparison between 3 variables and returns 3 associated variable values
+ /// @see gtx_associated_min_max
+ template<typename T, typename U, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<U, P> associatedMax(
+ vecType<T, P> const & x, U a,
+ vecType<T, P> const & y, U b,
+ vecType<T, P> const & z, U c);
+
+ /// Maximum comparison between 4 variables and returns 4 associated variable values
+ /// @see gtx_associated_min_max
+ template<typename T, typename U>
+ GLM_FUNC_DECL U associatedMax(
+ T x, U a,
+ T y, U b,
+ T z, U c,
+ T w, U d);
+
+ /// Maximum comparison between 4 variables and returns 4 associated variable values
+ /// @see gtx_associated_min_max
+ template<typename T, typename U, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<U, P> associatedMax(
+ vecType<T, P> const & x, vecType<U, P> const & a,
+ vecType<T, P> const & y, vecType<U, P> const & b,
+ vecType<T, P> const & z, vecType<U, P> const & c,
+ vecType<T, P> const & w, vecType<U, P> const & d);
+
+ /// Maximum comparison between 4 variables and returns 4 associated variable values
+ /// @see gtx_associated_min_max
+ template<typename T, typename U, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<U, P> associatedMax(
+ T x, vecType<U, P> const & a,
+ T y, vecType<U, P> const & b,
+ T z, vecType<U, P> const & c,
+ T w, vecType<U, P> const & d);
+
+ /// Maximum comparison between 4 variables and returns 4 associated variable values
+ /// @see gtx_associated_min_max
+ template<typename T, typename U, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<U, P> associatedMax(
+ vecType<T, P> const & x, U a,
+ vecType<T, P> const & y, U b,
+ vecType<T, P> const & z, U c,
+ vecType<T, P> const & w, U d);
+
+ /// @}
+} //namespace glm
+
+#include "associated_min_max.inl"
diff --git a/src/third_party/glm/glm/gtx/associated_min_max.inl b/src/third_party/glm/glm/gtx/associated_min_max.inl
new file mode 100644
index 0000000..6a57d48
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/associated_min_max.inl
@@ -0,0 +1,355 @@
+/// @ref gtx_associated_min_max
+/// @file glm/gtx/associated_min_max.inl
+
+namespace glm{
+
+// Min comparison between 2 variables
+template<typename T, typename U, precision P>
+GLM_FUNC_QUALIFIER U associatedMin(T x, U a, T y, U b)
+{
+ return x < y ? a : b;
+}
+
+template<typename T, typename U, precision P, template <typename, precision> class vecType>
+GLM_FUNC_QUALIFIER tvec2<U, P> associatedMin
+(
+ vecType<T, P> const & x, vecType<U, P> const & a,
+ vecType<T, P> const & y, vecType<U, P> const & b
+)
+{
+ vecType<U, P> Result(uninitialize);
+ for(length_t i = 0, n = Result.length(); i < n; ++i)
+ Result[i] = x[i] < y[i] ? a[i] : b[i];
+ return Result;
+}
+
+template<typename T, typename U, precision P, template <typename, precision> class vecType>
+GLM_FUNC_QUALIFIER vecType<U, P> associatedMin
+(
+ T x, const vecType<U, P>& a,
+ T y, const vecType<U, P>& b
+)
+{
+ vecType<U, P> Result(uninitialize);
+ for(length_t i = 0, n = Result.length(); i < n; ++i)
+ Result[i] = x < y ? a[i] : b[i];
+ return Result;
+}
+
+template<typename T, typename U, precision P, template <typename, precision> class vecType>
+GLM_FUNC_QUALIFIER vecType<U, P> associatedMin
+(
+ vecType<T, P> const & x, U a,
+ vecType<T, P> const & y, U b
+)
+{
+ vecType<U, P> Result(uninitialize);
+ for(length_t i = 0, n = Result.length(); i < n; ++i)
+ Result[i] = x[i] < y[i] ? a : b;
+ return Result;
+}
+
+// Min comparison between 3 variables
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER U associatedMin
+(
+ T x, U a,
+ T y, U b,
+ T z, U c
+)
+{
+ U Result = x < y ? (x < z ? a : c) : (y < z ? b : c);
+ return Result;
+}
+
+template<typename T, typename U, precision P, template <typename, precision> class vecType>
+GLM_FUNC_QUALIFIER vecType<U, P> associatedMin
+(
+ vecType<T, P> const & x, vecType<U, P> const & a,
+ vecType<T, P> const & y, vecType<U, P> const & b,
+ vecType<T, P> const & z, vecType<U, P> const & c
+)
+{
+ vecType<U, P> Result(uninitialize);
+ for(length_t i = 0, n = Result.length(); i < n; ++i)
+ Result[i] = x[i] < y[i] ? (x[i] < z[i] ? a[i] : c[i]) : (y[i] < z[i] ? b[i] : c[i]);
+ return Result;
+}
+
+// Min comparison between 4 variables
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER U associatedMin
+(
+ T x, U a,
+ T y, U b,
+ T z, U c,
+ T w, U d
+)
+{
+ T Test1 = min(x, y);
+ T Test2 = min(z, w);;
+ U Result1 = x < y ? a : b;
+ U Result2 = z < w ? c : d;
+ U Result = Test1 < Test2 ? Result1 : Result2;
+ return Result;
+}
+
+// Min comparison between 4 variables
+template<typename T, typename U, precision P, template <typename, precision> class vecType>
+GLM_FUNC_QUALIFIER vecType<U, P> associatedMin
+(
+ vecType<T, P> const & x, vecType<U, P> const & a,
+ vecType<T, P> const & y, vecType<U, P> const & b,
+ vecType<T, P> const & z, vecType<U, P> const & c,
+ vecType<T, P> const & w, vecType<U, P> const & d
+)
+{
+ vecType<U, P> Result(uninitialize);
+ for(length_t i = 0, n = Result.length(); i < n; ++i)
+ {
+ T Test1 = min(x[i], y[i]);
+ T Test2 = min(z[i], w[i]);
+ U Result1 = x[i] < y[i] ? a[i] : b[i];
+ U Result2 = z[i] < w[i] ? c[i] : d[i];
+ Result[i] = Test1 < Test2 ? Result1 : Result2;
+ }
+ return Result;
+}
+
+// Min comparison between 4 variables
+template<typename T, typename U, precision P, template <typename, precision> class vecType>
+GLM_FUNC_QUALIFIER vecType<U, P> associatedMin
+(
+ T x, vecType<U, P> const & a,
+ T y, vecType<U, P> const & b,
+ T z, vecType<U, P> const & c,
+ T w, vecType<U, P> const & d
+)
+{
+ T Test1 = min(x, y);
+ T Test2 = min(z, w);
+
+ vecType<U, P> Result(uninitialize);
+ for(length_t i = 0, n = Result.length(); i < n; ++i)
+ {
+ U Result1 = x < y ? a[i] : b[i];
+ U Result2 = z < w ? c[i] : d[i];
+ Result[i] = Test1 < Test2 ? Result1 : Result2;
+ }
+ return Result;
+}
+
+// Min comparison between 4 variables
+template<typename T, typename U, precision P, template <typename, precision> class vecType>
+GLM_FUNC_QUALIFIER vecType<U, P> associatedMin
+(
+ vecType<T, P> const & x, U a,
+ vecType<T, P> const & y, U b,
+ vecType<T, P> const & z, U c,
+ vecType<T, P> const & w, U d
+)
+{
+ vecType<U, P> Result(uninitialize);
+ for(length_t i = 0, n = Result.length(); i < n; ++i)
+ {
+ T Test1 = min(x[i], y[i]);
+ T Test2 = min(z[i], w[i]);;
+ U Result1 = x[i] < y[i] ? a : b;
+ U Result2 = z[i] < w[i] ? c : d;
+ Result[i] = Test1 < Test2 ? Result1 : Result2;
+ }
+ return Result;
+}
+
+// Max comparison between 2 variables
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER U associatedMax(T x, U a, T y, U b)
+{
+ return x > y ? a : b;
+}
+
+// Max comparison between 2 variables
+template<typename T, typename U, precision P, template <typename, precision> class vecType>
+GLM_FUNC_QUALIFIER tvec2<U, P> associatedMax
+(
+ vecType<T, P> const & x, vecType<U, P> const & a,
+ vecType<T, P> const & y, vecType<U, P> const & b
+)
+{
+ vecType<U, P> Result(uninitialize);
+ for(length_t i = 0, n = Result.length(); i < n; ++i)
+ Result[i] = x[i] > y[i] ? a[i] : b[i];
+ return Result;
+}
+
+// Max comparison between 2 variables
+template<typename T, typename U, precision P, template <typename, precision> class vecType>
+GLM_FUNC_QUALIFIER vecType<T, P> associatedMax
+(
+ T x, vecType<U, P> const & a,
+ T y, vecType<U, P> const & b
+)
+{
+ vecType<U, P> Result(uninitialize);
+ for(length_t i = 0, n = Result.length(); i < n; ++i)
+ Result[i] = x > y ? a[i] : b[i];
+ return Result;
+}
+
+// Max comparison between 2 variables
+template<typename T, typename U, precision P, template <typename, precision> class vecType>
+GLM_FUNC_QUALIFIER vecType<U, P> associatedMax
+(
+ vecType<T, P> const & x, U a,
+ vecType<T, P> const & y, U b
+)
+{
+ vecType<T, P> Result(uninitialize);
+ for(length_t i = 0, n = Result.length(); i < n; ++i)
+ Result[i] = x[i] > y[i] ? a : b;
+ return Result;
+}
+
+// Max comparison between 3 variables
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER U associatedMax
+(
+ T x, U a,
+ T y, U b,
+ T z, U c
+)
+{
+ U Result = x > y ? (x > z ? a : c) : (y > z ? b : c);
+ return Result;
+}
+
+// Max comparison between 3 variables
+template<typename T, typename U, precision P, template <typename, precision> class vecType>
+GLM_FUNC_QUALIFIER vecType<U, P> associatedMax
+(
+ vecType<T, P> const & x, vecType<U, P> const & a,
+ vecType<T, P> const & y, vecType<U, P> const & b,
+ vecType<T, P> const & z, vecType<U, P> const & c
+)
+{
+ vecType<U, P> Result(uninitialize);
+ for(length_t i = 0, n = Result.length(); i < n; ++i)
+ Result[i] = x[i] > y[i] ? (x[i] > z[i] ? a[i] : c[i]) : (y[i] > z[i] ? b[i] : c[i]);
+ return Result;
+}
+
+// Max comparison between 3 variables
+template<typename T, typename U, precision P, template <typename, precision> class vecType>
+GLM_FUNC_QUALIFIER vecType<T, P> associatedMax
+(
+ T x, vecType<U, P> const & a,
+ T y, vecType<U, P> const & b,
+ T z, vecType<U, P> const & c
+)
+{
+ vecType<U, P> Result(uninitialize);
+ for(length_t i = 0, n = Result.length(); i < n; ++i)
+ Result[i] = x > y ? (x > z ? a[i] : c[i]) : (y > z ? b[i] : c[i]);
+ return Result;
+}
+
+// Max comparison between 3 variables
+template<typename T, typename U, precision P, template <typename, precision> class vecType>
+GLM_FUNC_QUALIFIER vecType<U, P> associatedMax
+(
+ vecType<T, P> const & x, U a,
+ vecType<T, P> const & y, U b,
+ vecType<T, P> const & z, U c
+)
+{
+ vecType<T, P> Result(uninitialize);
+ for(length_t i = 0, n = Result.length(); i < n; ++i)
+ Result[i] = x[i] > y[i] ? (x[i] > z[i] ? a : c) : (y[i] > z[i] ? b : c);
+ return Result;
+}
+
+// Max comparison between 4 variables
+template<typename T, typename U>
+GLM_FUNC_QUALIFIER U associatedMax
+(
+ T x, U a,
+ T y, U b,
+ T z, U c,
+ T w, U d
+)
+{
+ T Test1 = max(x, y);
+ T Test2 = max(z, w);;
+ U Result1 = x > y ? a : b;
+ U Result2 = z > w ? c : d;
+ U Result = Test1 > Test2 ? Result1 : Result2;
+ return Result;
+}
+
+// Max comparison between 4 variables
+template<typename T, typename U, precision P, template <typename, precision> class vecType>
+GLM_FUNC_QUALIFIER vecType<U, P> associatedMax
+(
+ vecType<T, P> const & x, vecType<U, P> const & a,
+ vecType<T, P> const & y, vecType<U, P> const & b,
+ vecType<T, P> const & z, vecType<U, P> const & c,
+ vecType<T, P> const & w, vecType<U, P> const & d
+)
+{
+ vecType<U, P> Result(uninitialize);
+ for(length_t i = 0, n = Result.length(); i < n; ++i)
+ {
+ T Test1 = max(x[i], y[i]);
+ T Test2 = max(z[i], w[i]);
+ U Result1 = x[i] > y[i] ? a[i] : b[i];
+ U Result2 = z[i] > w[i] ? c[i] : d[i];
+ Result[i] = Test1 > Test2 ? Result1 : Result2;
+ }
+ return Result;
+}
+
+// Max comparison between 4 variables
+template<typename T, typename U, precision P, template <typename, precision> class vecType>
+GLM_FUNC_QUALIFIER vecType<U, P> associatedMax
+(
+ T x, vecType<U, P> const & a,
+ T y, vecType<U, P> const & b,
+ T z, vecType<U, P> const & c,
+ T w, vecType<U, P> const & d
+)
+{
+ T Test1 = max(x, y);
+ T Test2 = max(z, w);
+
+ vecType<U, P> Result(uninitialize);
+ for(length_t i = 0, n = Result.length(); i < n; ++i)
+ {
+ U Result1 = x > y ? a[i] : b[i];
+ U Result2 = z > w ? c[i] : d[i];
+ Result[i] = Test1 > Test2 ? Result1 : Result2;
+ }
+ return Result;
+}
+
+// Max comparison between 4 variables
+template<typename T, typename U, precision P, template <typename, precision> class vecType>
+GLM_FUNC_QUALIFIER vecType<U, P> associatedMax
+(
+ vecType<T, P> const & x, U a,
+ vecType<T, P> const & y, U b,
+ vecType<T, P> const & z, U c,
+ vecType<T, P> const & w, U d
+)
+{
+ vecType<U, P> Result(uninitialize);
+ for(length_t i = 0, n = Result.length(); i < n; ++i)
+ {
+ T Test1 = max(x[i], y[i]);
+ T Test2 = max(z[i], w[i]);;
+ U Result1 = x[i] > y[i] ? a : b;
+ U Result2 = z[i] > w[i] ? c : d;
+ Result[i] = Test1 > Test2 ? Result1 : Result2;
+ }
+ return Result;
+}
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtx/bit.hpp b/src/third_party/glm/glm/gtx/bit.hpp
new file mode 100644
index 0000000..17378f3
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/bit.hpp
@@ -0,0 +1,95 @@
+/// @ref gtx_bit
+/// @file glm/gtx/bit.hpp
+///
+/// @see core (dependence)
+/// @see gtc_half_float (dependence)
+///
+/// @defgroup gtx_bit GLM_GTX_bit
+/// @ingroup gtx
+///
+/// @brief Allow to perform bit operations on integer values
+///
+/// <glm/gtx/bit.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependencies
+#include "../gtc/bitfield.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_bit extension is deprecated, include GLM_GTC_bitfield and GLM_GTC_integer instead")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_bit
+ /// @{
+
+ /// @see gtx_bit
+ template <typename genIUType>
+ GLM_FUNC_DECL genIUType highestBitValue(genIUType Value);
+
+ /// @see gtx_bit
+ template <typename genIUType>
+ GLM_FUNC_DECL genIUType lowestBitValue(genIUType Value);
+
+ /// Find the highest bit set to 1 in a integer variable and return its value.
+ ///
+ /// @see gtx_bit
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> highestBitValue(vecType<T, P> const & value);
+
+ /// Return the power of two number which value is just higher the input value.
+ /// Deprecated, use ceilPowerOfTwo from GTC_round instead
+ ///
+ /// @see gtc_round
+ /// @see gtx_bit
+ template <typename genIUType>
+ GLM_DEPRECATED GLM_FUNC_DECL genIUType powerOfTwoAbove(genIUType Value);
+
+ /// Return the power of two number which value is just higher the input value.
+ /// Deprecated, use ceilPowerOfTwo from GTC_round instead
+ ///
+ /// @see gtc_round
+ /// @see gtx_bit
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_DEPRECATED GLM_FUNC_DECL vecType<T, P> powerOfTwoAbove(vecType<T, P> const & value);
+
+ /// Return the power of two number which value is just lower the input value.
+ /// Deprecated, use floorPowerOfTwo from GTC_round instead
+ ///
+ /// @see gtc_round
+ /// @see gtx_bit
+ template <typename genIUType>
+ GLM_DEPRECATED GLM_FUNC_DECL genIUType powerOfTwoBelow(genIUType Value);
+
+ /// Return the power of two number which value is just lower the input value.
+ /// Deprecated, use floorPowerOfTwo from GTC_round instead
+ ///
+ /// @see gtc_round
+ /// @see gtx_bit
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_DEPRECATED GLM_FUNC_DECL vecType<T, P> powerOfTwoBelow(vecType<T, P> const & value);
+
+ /// Return the power of two number which value is the closet to the input value.
+ /// Deprecated, use roundPowerOfTwo from GTC_round instead
+ ///
+ /// @see gtc_round
+ /// @see gtx_bit
+ template <typename genIUType>
+ GLM_DEPRECATED GLM_FUNC_DECL genIUType powerOfTwoNearest(genIUType Value);
+
+ /// Return the power of two number which value is the closet to the input value.
+ /// Deprecated, use roundPowerOfTwo from GTC_round instead
+ ///
+ /// @see gtc_round
+ /// @see gtx_bit
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_DEPRECATED GLM_FUNC_DECL vecType<T, P> powerOfTwoNearest(vecType<T, P> const & value);
+
+ /// @}
+} //namespace glm
+
+
+#include "bit.inl"
+
diff --git a/src/third_party/glm/glm/gtx/bit.inl b/src/third_party/glm/glm/gtx/bit.inl
new file mode 100644
index 0000000..10d5f7f
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/bit.inl
@@ -0,0 +1,93 @@
+/// @ref gtx_bit
+/// @file glm/gtx/bit.inl
+
+namespace glm
+{
+ ///////////////////
+ // highestBitValue
+
+ template <typename genIUType>
+ GLM_FUNC_QUALIFIER genIUType highestBitValue(genIUType Value)
+ {
+ genIUType tmp = Value;
+ genIUType result = genIUType(0);
+ while(tmp)
+ {
+ result = (tmp & (~tmp + 1)); // grab lowest bit
+ tmp &= ~result; // clear lowest bit
+ }
+ return result;
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> highestBitValue(vecType<T, P> const & v)
+ {
+ return detail::functor1<T, T, P, vecType>::call(highestBitValue, v);
+ }
+
+ ///////////////////
+ // lowestBitValue
+
+ template <typename genIUType>
+ GLM_FUNC_QUALIFIER genIUType lowestBitValue(genIUType Value)
+ {
+ return (Value & (~Value + 1));
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> lowestBitValue(vecType<T, P> const & v)
+ {
+ return detail::functor1<T, T, P, vecType>::call(lowestBitValue, v);
+ }
+
+ ///////////////////
+ // powerOfTwoAbove
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType powerOfTwoAbove(genType value)
+ {
+ return isPowerOfTwo(value) ? value : highestBitValue(value) << 1;
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> powerOfTwoAbove(vecType<T, P> const & v)
+ {
+ return detail::functor1<T, T, P, vecType>::call(powerOfTwoAbove, v);
+ }
+
+ ///////////////////
+ // powerOfTwoBelow
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType powerOfTwoBelow(genType value)
+ {
+ return isPowerOfTwo(value) ? value : highestBitValue(value);
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> powerOfTwoBelow(vecType<T, P> const & v)
+ {
+ return detail::functor1<T, T, P, vecType>::call(powerOfTwoBelow, v);
+ }
+
+ /////////////////////
+ // powerOfTwoNearest
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType powerOfTwoNearest(genType value)
+ {
+ if(isPowerOfTwo(value))
+ return value;
+
+ genType const prev = highestBitValue(value);
+ genType const next = prev << 1;
+ return (next - value) < (value - prev) ? next : prev;
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> powerOfTwoNearest(vecType<T, P> const & v)
+ {
+ return detail::functor1<T, T, P, vecType>::call(powerOfTwoNearest, v);
+ }
+
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtx/closest_point.hpp b/src/third_party/glm/glm/gtx/closest_point.hpp
new file mode 100644
index 0000000..8d435b8
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/closest_point.hpp
@@ -0,0 +1,45 @@
+/// @ref gtx_closest_point
+/// @file glm/gtx/closest_point.hpp
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_closest_point GLM_GTX_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.
+
+#pragma once
+
+// Dependency:
+#include "../glm.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_closest_point extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_closest_point
+ /// @{
+
+ /// Find the point on a straight line which is the closet of a point.
+ /// @see gtx_closest_point
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> closestPointOnLine(
+ tvec3<T, P> const & point,
+ tvec3<T, P> const & a,
+ tvec3<T, P> const & b);
+
+ /// 2d lines work as well
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> closestPointOnLine(
+ tvec2<T, P> const & point,
+ tvec2<T, P> const & a,
+ tvec2<T, P> const & b);
+
+ /// @}
+}// namespace glm
+
+#include "closest_point.inl"
diff --git a/src/third_party/glm/glm/gtx/closest_point.inl b/src/third_party/glm/glm/gtx/closest_point.inl
new file mode 100644
index 0000000..5c6a879
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/closest_point.inl
@@ -0,0 +1,46 @@
+/// @ref gtx_closest_point
+/// @file glm/gtx/closest_point.inl
+
+namespace glm
+{
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> closestPointOnLine
+ (
+ tvec3<T, P> const & point,
+ tvec3<T, P> const & a,
+ tvec3<T, P> const & b
+ )
+ {
+ T LineLength = distance(a, b);
+ tvec3<T, P> Vector = point - a;
+ tvec3<T, P> LineDirection = (b - a) / LineLength;
+
+ // Project Vector to LineDirection to get the distance of point from a
+ T Distance = dot(Vector, LineDirection);
+
+ if(Distance <= T(0)) return a;
+ if(Distance >= LineLength) return b;
+ return a + LineDirection * Distance;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> closestPointOnLine
+ (
+ tvec2<T, P> const & point,
+ tvec2<T, P> const & a,
+ tvec2<T, P> const & b
+ )
+ {
+ T LineLength = distance(a, b);
+ tvec2<T, P> Vector = point - a;
+ tvec2<T, P> LineDirection = (b - a) / LineLength;
+
+ // Project Vector to LineDirection to get the distance of point from a
+ T Distance = dot(Vector, LineDirection);
+
+ if(Distance <= T(0)) return a;
+ if(Distance >= LineLength) return b;
+ return a + LineDirection * Distance;
+ }
+
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtx/color_space.hpp b/src/third_party/glm/glm/gtx/color_space.hpp
new file mode 100644
index 0000000..9ff08dc
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/color_space.hpp
@@ -0,0 +1,68 @@
+/// @ref gtx_color_space
+/// @file glm/gtx/color_space.hpp
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_color_space GLM_GTX_color_space
+/// @ingroup gtx
+///
+/// @brief Related to RGB to HSV conversions and operations.
+///
+/// <glm/gtx/color_space.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependency:
+#include "../glm.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_color_space extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_color_space
+ /// @{
+
+ /// Converts a color from HSV color space to its color in RGB color space.
+ /// @see gtx_color_space
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> rgbColor(
+ tvec3<T, P> const & hsvValue);
+
+ /// Converts a color from RGB color space to its color in HSV color space.
+ /// @see gtx_color_space
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> hsvColor(
+ tvec3<T, P> const & rgbValue);
+
+ /// Build a saturation matrix.
+ /// @see gtx_color_space
+ template <typename T>
+ GLM_FUNC_DECL tmat4x4<T, defaultp> saturation(
+ T const s);
+
+ /// Modify the saturation of a color.
+ /// @see gtx_color_space
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> saturation(
+ T const s,
+ tvec3<T, P> const & color);
+
+ /// Modify the saturation of a color.
+ /// @see gtx_color_space
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> saturation(
+ T const s,
+ tvec4<T, P> const & color);
+
+ /// Compute color luminosity associating ratios (0.33, 0.59, 0.11) to RGB canals.
+ /// @see gtx_color_space
+ template <typename T, precision P>
+ GLM_FUNC_DECL T luminosity(
+ tvec3<T, P> const & color);
+
+ /// @}
+}//namespace glm
+
+#include "color_space.inl"
diff --git a/src/third_party/glm/glm/gtx/color_space.inl b/src/third_party/glm/glm/gtx/color_space.inl
new file mode 100644
index 0000000..43f6641
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/color_space.inl
@@ -0,0 +1,143 @@
+/// @ref gtx_color_space
+/// @file glm/gtx/color_space.inl
+
+namespace glm
+{
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> rgbColor(const tvec3<T, P>& hsvColor)
+ {
+ tvec3<T, P> hsv = hsvColor;
+ tvec3<T, P> rgbColor;
+
+ if(hsv.y == static_cast<T>(0))
+ // achromatic (grey)
+ rgbColor = tvec3<T, P>(hsv.z);
+ else
+ {
+ T sector = floor(hsv.x / T(60));
+ T frac = (hsv.x / T(60)) - sector;
+ // factorial part of h
+ T o = hsv.z * (T(1) - hsv.y);
+ T p = hsv.z * (T(1) - hsv.y * frac);
+ T q = hsv.z * (T(1) - hsv.y * (T(1) - frac));
+
+ switch(int(sector))
+ {
+ default:
+ case 0:
+ rgbColor.r = hsv.z;
+ rgbColor.g = q;
+ rgbColor.b = o;
+ break;
+ case 1:
+ rgbColor.r = p;
+ rgbColor.g = hsv.z;
+ rgbColor.b = o;
+ break;
+ case 2:
+ rgbColor.r = o;
+ rgbColor.g = hsv.z;
+ rgbColor.b = q;
+ break;
+ case 3:
+ rgbColor.r = o;
+ rgbColor.g = p;
+ rgbColor.b = hsv.z;
+ break;
+ case 4:
+ rgbColor.r = q;
+ rgbColor.g = o;
+ rgbColor.b = hsv.z;
+ break;
+ case 5:
+ rgbColor.r = hsv.z;
+ rgbColor.g = o;
+ rgbColor.b = p;
+ break;
+ }
+ }
+
+ return rgbColor;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> hsvColor(const tvec3<T, P>& rgbColor)
+ {
+ tvec3<T, P> hsv = rgbColor;
+ float Min = min(min(rgbColor.r, rgbColor.g), rgbColor.b);
+ float Max = max(max(rgbColor.r, rgbColor.g), rgbColor.b);
+ float Delta = Max - Min;
+
+ hsv.z = Max;
+
+ if(Max != static_cast<T>(0))
+ {
+ hsv.y = Delta / hsv.z;
+ T h = static_cast<T>(0);
+
+ if(rgbColor.r == Max)
+ // between yellow & magenta
+ h = static_cast<T>(0) + T(60) * (rgbColor.g - rgbColor.b) / Delta;
+ else if(rgbColor.g == Max)
+ // between cyan & yellow
+ h = static_cast<T>(120) + T(60) * (rgbColor.b - rgbColor.r) / Delta;
+ else
+ // between magenta & cyan
+ h = static_cast<T>(240) + T(60) * (rgbColor.r - rgbColor.g) / Delta;
+
+ if(h < T(0))
+ hsv.x = h + T(360);
+ else
+ hsv.x = h;
+ }
+ else
+ {
+ // If r = g = b = 0 then s = 0, h is undefined
+ hsv.y = static_cast<T>(0);
+ hsv.x = static_cast<T>(0);
+ }
+
+ return hsv;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> saturation(T const s)
+ {
+ tvec3<T, defaultp> rgbw = tvec3<T, defaultp>(T(0.2126), T(0.7152), T(0.0722));
+
+ T col0 = (T(1) - s) * rgbw.r;
+ T col1 = (T(1) - s) * rgbw.g;
+ T col2 = (T(1) - s) * rgbw.b;
+
+ tmat4x4<T, defaultp> result(T(1));
+ result[0][0] = col0 + s;
+ result[0][1] = col0;
+ result[0][2] = col0;
+ result[1][0] = col1;
+ result[1][1] = col1 + s;
+ result[1][2] = col1;
+ result[2][0] = col2;
+ result[2][1] = col2;
+ result[2][2] = col2 + s;
+ return result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> saturation(const T s, const tvec3<T, P>& color)
+ {
+ return tvec3<T, P>(saturation(s) * tvec4<T, P>(color, T(0)));
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> saturation(const T s, const tvec4<T, P>& color)
+ {
+ return saturation(s) * color;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER T luminosity(const tvec3<T, P>& color)
+ {
+ const tvec3<T, P> tmp = tvec3<T, P>(0.33, 0.59, 0.11);
+ return dot(color, tmp);
+ }
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtx/color_space_YCoCg.hpp b/src/third_party/glm/glm/gtx/color_space_YCoCg.hpp
new file mode 100644
index 0000000..428ca6d
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/color_space_YCoCg.hpp
@@ -0,0 +1,56 @@
+/// @ref gtx_color_space_YCoCg
+/// @file glm/gtx/color_space_YCoCg.hpp
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_color_space_YCoCg GLM_GTX_color_space_YCoCg
+/// @ingroup gtx
+///
+/// @brief RGB to YCoCg conversions and operations
+///
+/// <glm/gtx/color_space_YCoCg.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependency:
+#include "../glm.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_color_space_YCoCg extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_color_space_YCoCg
+ /// @{
+
+ /// Convert a color from RGB color space to YCoCg color space.
+ /// @see gtx_color_space_YCoCg
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> rgb2YCoCg(
+ tvec3<T, P> const & rgbColor);
+
+ /// Convert a color from YCoCg color space to RGB color space.
+ /// @see gtx_color_space_YCoCg
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> YCoCg2rgb(
+ tvec3<T, P> const & YCoCgColor);
+
+ /// Convert a color from RGB color space to YCoCgR color space.
+ /// @see "YCoCg-R: A Color Space with RGB Reversibility and Low Dynamic Range"
+ /// @see gtx_color_space_YCoCg
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> rgb2YCoCgR(
+ tvec3<T, P> const & rgbColor);
+
+ /// Convert a color from YCoCgR color space to RGB color space.
+ /// @see "YCoCg-R: A Color Space with RGB Reversibility and Low Dynamic Range"
+ /// @see gtx_color_space_YCoCg
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> YCoCgR2rgb(
+ tvec3<T, P> const & YCoCgColor);
+
+ /// @}
+}//namespace glm
+
+#include "color_space_YCoCg.inl"
diff --git a/src/third_party/glm/glm/gtx/color_space_YCoCg.inl b/src/third_party/glm/glm/gtx/color_space_YCoCg.inl
new file mode 100644
index 0000000..1ca2e5b
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/color_space_YCoCg.inl
@@ -0,0 +1,108 @@
+/// @ref gtx_color_space_YCoCg
+/// @file glm/gtx/color_space_YCoCg.inl
+
+namespace glm
+{
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> rgb2YCoCg
+ (
+ tvec3<T, P> const & rgbColor
+ )
+ {
+ tvec3<T, P> result;
+ result.x/*Y */ = rgbColor.r / T(4) + rgbColor.g / T(2) + rgbColor.b / T(4);
+ result.y/*Co*/ = rgbColor.r / T(2) + rgbColor.g * T(0) - rgbColor.b / T(2);
+ result.z/*Cg*/ = - rgbColor.r / T(4) + rgbColor.g / T(2) - rgbColor.b / T(4);
+ return result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> YCoCg2rgb
+ (
+ tvec3<T, P> const & YCoCgColor
+ )
+ {
+ tvec3<T, P> result;
+ result.r = YCoCgColor.x + YCoCgColor.y - YCoCgColor.z;
+ result.g = YCoCgColor.x + YCoCgColor.z;
+ result.b = YCoCgColor.x - YCoCgColor.y - YCoCgColor.z;
+ return result;
+ }
+
+ template <typename T, precision P, bool isInteger>
+ class compute_YCoCgR {
+ public:
+ static GLM_FUNC_QUALIFIER tvec3<T, P> rgb2YCoCgR
+ (
+ tvec3<T, P> const & rgbColor
+ )
+ {
+ tvec3<T, P> result;
+ result.x/*Y */ = rgbColor.g / T(2) + (rgbColor.r + rgbColor.b) / T(4);
+ result.y/*Co*/ = rgbColor.r - rgbColor.b;
+ result.z/*Cg*/ = rgbColor.g - (rgbColor.r + rgbColor.b) / T(2);
+ return result;
+ }
+
+ static GLM_FUNC_QUALIFIER tvec3<T, P> YCoCgR2rgb
+ (
+ tvec3<T, P> const & YCoCgRColor
+ )
+ {
+ tvec3<T, P> result;
+ T tmp = YCoCgRColor.x - (YCoCgRColor.z / T(2));
+ result.g = YCoCgRColor.z + tmp;
+ result.b = tmp - (YCoCgRColor.y / T(2));
+ result.r = result.b + YCoCgRColor.y;
+ return result;
+ }
+ };
+
+ template <typename T, precision P>
+ class compute_YCoCgR<T, P, true> {
+ public:
+ static GLM_FUNC_QUALIFIER tvec3<T, P> rgb2YCoCgR
+ (
+ tvec3<T, P> const & rgbColor
+ )
+ {
+ tvec3<T, P> result;
+ result.y/*Co*/ = rgbColor.r - rgbColor.b;
+ T tmp = rgbColor.b + (result.y >> 1);
+ result.z/*Cg*/ = rgbColor.g - tmp;
+ result.x/*Y */ = tmp + (result.z >> 1);
+ return result;
+ }
+
+ static GLM_FUNC_QUALIFIER tvec3<T, P> YCoCgR2rgb
+ (
+ tvec3<T, P> const & YCoCgRColor
+ )
+ {
+ tvec3<T, P> result;
+ T tmp = YCoCgRColor.x - (YCoCgRColor.z >> 1);
+ result.g = YCoCgRColor.z + tmp;
+ result.b = tmp - (YCoCgRColor.y >> 1);
+ result.r = result.b + YCoCgRColor.y;
+ return result;
+ }
+ };
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> rgb2YCoCgR
+ (
+ tvec3<T, P> const & rgbColor
+ )
+ {
+ return compute_YCoCgR<T, P, std::numeric_limits<T>::is_integer>::rgb2YCoCgR(rgbColor);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> YCoCgR2rgb
+ (
+ tvec3<T, P> const & YCoCgRColor
+ )
+ {
+ return compute_YCoCgR<T, P, std::numeric_limits<T>::is_integer>::YCoCgR2rgb(YCoCgRColor);
+ }
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtx/common.hpp b/src/third_party/glm/glm/gtx/common.hpp
new file mode 100644
index 0000000..6533a54
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/common.hpp
@@ -0,0 +1,53 @@
+/// @ref gtx_common
+/// @file glm/gtx/common.hpp
+///
+/// @see core (dependence)
+/// @see gtc_half_float (dependence)
+///
+/// @defgroup gtx_common GLM_GTX_common
+/// @ingroup gtx
+///
+/// @brief Provide functions to increase the compatibility with Cg and HLSL languages
+///
+/// <glm/gtx/common.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependencies:
+#include "../vec2.hpp"
+#include "../vec3.hpp"
+#include "../vec4.hpp"
+#include "../gtc/vec1.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_common extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_common
+ /// @{
+
+ /// Returns true if x is a denormalized number
+ /// Numbers whose absolute value is too small to be represented in the normal format are represented in an alternate, denormalized format.
+ /// This format is less precise but can represent values closer to zero.
+ ///
+ /// @tparam genType Floating-point scalar or vector types.
+ ///
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/isnan.xml">GLSL isnan man page</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a>
+ template <typename genType>
+ GLM_FUNC_DECL typename genType::bool_type isdenormal(genType const & x);
+
+ /// Similar to 'mod' but with a different rounding and integer support.
+ /// Returns 'x - y * trunc(x/y)' instead of 'x - y * floor(x/y)'
+ ///
+ /// @see <a href="http://stackoverflow.com/questions/7610631/glsl-mod-vs-hlsl-fmod">GLSL mod vs HLSL fmod</a>
+ /// @see <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/mod.xml">GLSL mod man page</a>
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> fmod(vecType<T, P> const & v);
+
+ /// @}
+}//namespace glm
+
+#include "common.inl"
diff --git a/src/third_party/glm/glm/gtx/common.inl b/src/third_party/glm/glm/gtx/common.inl
new file mode 100644
index 0000000..6c9cb65
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/common.inl
@@ -0,0 +1,112 @@
+/// @ref gtx_common
+/// @file glm/gtx/common.inl
+
+#include <cmath>
+
+namespace glm{
+namespace detail
+{
+ template <typename T, precision P, template <class, precision> class vecType, bool isFloat = true>
+ struct compute_fmod
+ {
+ GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & a, vecType<T, P> const & b)
+ {
+ return detail::functor2<T, P, vecType>::call(std::fmod, a, b);
+ }
+ };
+
+ template <typename T, precision P, template <class, precision> class vecType>
+ struct compute_fmod<T, P, vecType, false>
+ {
+ GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & a, vecType<T, P> const & b)
+ {
+ return a % b;
+ }
+ };
+}//namespace detail
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER bool isdenormal(T const & x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'isdenormal' only accept floating-point inputs");
+
+# if GLM_HAS_CXX11_STL
+ return std::fpclassify(x) == FP_SUBNORMAL;
+# else
+ return x != static_cast<T>(0) && std::fabs(x) < std::numeric_limits<T>::min();
+# endif
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER typename tvec1<T, P>::bool_type isdenormal
+ (
+ tvec1<T, P> const & x
+ )
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'isdenormal' only accept floating-point inputs");
+
+ return typename tvec1<T, P>::bool_type(
+ isdenormal(x.x));
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER typename tvec2<T, P>::bool_type isdenormal
+ (
+ tvec2<T, P> const & x
+ )
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'isdenormal' only accept floating-point inputs");
+
+ return typename tvec2<T, P>::bool_type(
+ isdenormal(x.x),
+ isdenormal(x.y));
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER typename tvec3<T, P>::bool_type isdenormal
+ (
+ tvec3<T, P> const & x
+ )
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'isdenormal' only accept floating-point inputs");
+
+ return typename tvec3<T, P>::bool_type(
+ isdenormal(x.x),
+ isdenormal(x.y),
+ isdenormal(x.z));
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER typename tvec4<T, P>::bool_type isdenormal
+ (
+ tvec4<T, P> const & x
+ )
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'isdenormal' only accept floating-point inputs");
+
+ return typename tvec4<T, P>::bool_type(
+ isdenormal(x.x),
+ isdenormal(x.y),
+ isdenormal(x.z),
+ isdenormal(x.w));
+ }
+
+ // fmod
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType fmod(genType x, genType y)
+ {
+ return fmod(tvec1<genType>(x), y).x;
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> fmod(vecType<T, P> const & x, T y)
+ {
+ return detail::compute_fmod<T, P, vecType, std::numeric_limits<T>::is_iec559>::call(x, vecType<T, P>(y));
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> fmod(vecType<T, P> const & x, vecType<T, P> const & y)
+ {
+ return detail::compute_fmod<T, P, vecType, std::numeric_limits<T>::is_iec559>::call(x, y);
+ }
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtx/compatibility.hpp b/src/third_party/glm/glm/gtx/compatibility.hpp
new file mode 100644
index 0000000..9f4819a
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/compatibility.hpp
@@ -0,0 +1,130 @@
+/// @ref gtx_compatibility
+/// @file glm/gtx/compatibility.hpp
+///
+/// @see core (dependence)
+/// @see gtc_half_float (dependence)
+///
+/// @defgroup gtx_compatibility GLM_GTX_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.
+
+#pragma once
+
+// Dependency:
+#include "../glm.hpp"
+#include "../gtc/quaternion.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_compatibility extension included")
+#endif
+
+#if GLM_COMPILER & GLM_COMPILER_VC
+# include <cfloat>
+#elif GLM_COMPILER & GLM_COMPILER_GCC
+# include <cmath>
+# if(GLM_PLATFORM & GLM_PLATFORM_ANDROID)
+# undef isfinite
+# endif
+#endif//GLM_COMPILER
+
+namespace glm
+{
+ /// @addtogroup gtx_compatibility
+ /// @{
+
+ template <typename T> GLM_FUNC_QUALIFIER T lerp(T x, T y, T a){return mix(x, y, a);} //!< \brief Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility)
+ template <typename T, precision P> GLM_FUNC_QUALIFIER tvec2<T, P> lerp(const tvec2<T, P>& x, const tvec2<T, P>& y, T a){return mix(x, y, a);} //!< \brief Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility)
+
+ template <typename T, precision P> GLM_FUNC_QUALIFIER tvec3<T, P> lerp(const tvec3<T, P>& x, const tvec3<T, P>& y, T a){return mix(x, y, a);} //!< \brief Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility)
+ template <typename T, precision P> GLM_FUNC_QUALIFIER tvec4<T, P> lerp(const tvec4<T, P>& x, const tvec4<T, P>& y, T a){return mix(x, y, a);} //!< \brief Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility)
+ template <typename T, precision P> GLM_FUNC_QUALIFIER tvec2<T, P> lerp(const tvec2<T, P>& x, const tvec2<T, P>& y, const tvec2<T, P>& a){return mix(x, y, a);} //!< \brief Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility)
+ template <typename T, precision P> GLM_FUNC_QUALIFIER tvec3<T, P> lerp(const tvec3<T, P>& x, const tvec3<T, P>& y, const tvec3<T, P>& a){return mix(x, y, a);} //!< \brief Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility)
+ template <typename T, precision P> GLM_FUNC_QUALIFIER tvec4<T, P> lerp(const tvec4<T, P>& x, const tvec4<T, P>& y, const tvec4<T, P>& a){return mix(x, y, a);} //!< \brief Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility)
+
+ template <typename T, precision P> GLM_FUNC_QUALIFIER T saturate(T x){return clamp(x, T(0), T(1));} //!< \brief Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility)
+ template <typename T, precision P> GLM_FUNC_QUALIFIER tvec2<T, P> saturate(const tvec2<T, P>& x){return clamp(x, T(0), T(1));} //!< \brief Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility)
+ template <typename T, precision P> GLM_FUNC_QUALIFIER tvec3<T, P> saturate(const tvec3<T, P>& x){return clamp(x, T(0), T(1));} //!< \brief Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility)
+ template <typename T, precision P> GLM_FUNC_QUALIFIER tvec4<T, P> saturate(const tvec4<T, P>& x){return clamp(x, T(0), T(1));} //!< \brief Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility)
+
+ template <typename T, precision P> GLM_FUNC_QUALIFIER T atan2(T x, T y){return atan(x, y);} //!< \brief Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility)
+ template <typename T, precision P> GLM_FUNC_QUALIFIER tvec2<T, P> atan2(const tvec2<T, P>& x, const tvec2<T, P>& y){return atan(x, y);} //!< \brief Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility)
+ template <typename T, precision P> GLM_FUNC_QUALIFIER tvec3<T, P> atan2(const tvec3<T, P>& x, const tvec3<T, P>& y){return atan(x, y);} //!< \brief Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility)
+ template <typename T, precision P> GLM_FUNC_QUALIFIER tvec4<T, P> atan2(const tvec4<T, P>& x, const tvec4<T, P>& y){return atan(x, y);} //!< \brief Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility)
+
+ template <typename genType> GLM_FUNC_DECL bool isfinite(genType const & x); //!< \brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility)
+ template <typename T, precision P> GLM_FUNC_DECL tvec1<bool, P> isfinite(const tvec1<T, P>& x); //!< \brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility)
+ template <typename T, precision P> GLM_FUNC_DECL tvec2<bool, P> isfinite(const tvec2<T, P>& x); //!< \brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility)
+ template <typename T, precision P> GLM_FUNC_DECL tvec3<bool, P> isfinite(const tvec3<T, P>& x); //!< \brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility)
+ template <typename T, precision P> GLM_FUNC_DECL tvec4<bool, P> isfinite(const tvec4<T, P>& x); //!< \brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility)
+
+ typedef bool bool1; //!< \brief boolean type with 1 component. (From GLM_GTX_compatibility extension)
+ typedef tvec2<bool, highp> bool2; //!< \brief boolean type with 2 components. (From GLM_GTX_compatibility extension)
+ typedef tvec3<bool, highp> bool3; //!< \brief boolean type with 3 components. (From GLM_GTX_compatibility extension)
+ typedef tvec4<bool, highp> bool4; //!< \brief boolean type with 4 components. (From GLM_GTX_compatibility extension)
+
+ typedef bool bool1x1; //!< \brief boolean matrix with 1 x 1 component. (From GLM_GTX_compatibility extension)
+ typedef tmat2x2<bool, highp> bool2x2; //!< \brief boolean matrix with 2 x 2 components. (From GLM_GTX_compatibility extension)
+ typedef tmat2x3<bool, highp> bool2x3; //!< \brief boolean matrix with 2 x 3 components. (From GLM_GTX_compatibility extension)
+ typedef tmat2x4<bool, highp> bool2x4; //!< \brief boolean matrix with 2 x 4 components. (From GLM_GTX_compatibility extension)
+ typedef tmat3x2<bool, highp> bool3x2; //!< \brief boolean matrix with 3 x 2 components. (From GLM_GTX_compatibility extension)
+ typedef tmat3x3<bool, highp> bool3x3; //!< \brief boolean matrix with 3 x 3 components. (From GLM_GTX_compatibility extension)
+ typedef tmat3x4<bool, highp> bool3x4; //!< \brief boolean matrix with 3 x 4 components. (From GLM_GTX_compatibility extension)
+ typedef tmat4x2<bool, highp> bool4x2; //!< \brief boolean matrix with 4 x 2 components. (From GLM_GTX_compatibility extension)
+ typedef tmat4x3<bool, highp> bool4x3; //!< \brief boolean matrix with 4 x 3 components. (From GLM_GTX_compatibility extension)
+ typedef tmat4x4<bool, highp> bool4x4; //!< \brief boolean matrix with 4 x 4 components. (From GLM_GTX_compatibility extension)
+
+ typedef int int1; //!< \brief integer vector with 1 component. (From GLM_GTX_compatibility extension)
+ typedef tvec2<int, highp> int2; //!< \brief integer vector with 2 components. (From GLM_GTX_compatibility extension)
+ typedef tvec3<int, highp> int3; //!< \brief integer vector with 3 components. (From GLM_GTX_compatibility extension)
+ typedef tvec4<int, highp> int4; //!< \brief integer vector with 4 components. (From GLM_GTX_compatibility extension)
+
+ typedef int int1x1; //!< \brief integer matrix with 1 component. (From GLM_GTX_compatibility extension)
+ typedef tmat2x2<int, highp> int2x2; //!< \brief integer matrix with 2 x 2 components. (From GLM_GTX_compatibility extension)
+ typedef tmat2x3<int, highp> int2x3; //!< \brief integer matrix with 2 x 3 components. (From GLM_GTX_compatibility extension)
+ typedef tmat2x4<int, highp> int2x4; //!< \brief integer matrix with 2 x 4 components. (From GLM_GTX_compatibility extension)
+ typedef tmat3x2<int, highp> int3x2; //!< \brief integer matrix with 3 x 2 components. (From GLM_GTX_compatibility extension)
+ typedef tmat3x3<int, highp> int3x3; //!< \brief integer matrix with 3 x 3 components. (From GLM_GTX_compatibility extension)
+ typedef tmat3x4<int, highp> int3x4; //!< \brief integer matrix with 3 x 4 components. (From GLM_GTX_compatibility extension)
+ typedef tmat4x2<int, highp> int4x2; //!< \brief integer matrix with 4 x 2 components. (From GLM_GTX_compatibility extension)
+ typedef tmat4x3<int, highp> int4x3; //!< \brief integer matrix with 4 x 3 components. (From GLM_GTX_compatibility extension)
+ typedef tmat4x4<int, highp> int4x4; //!< \brief integer matrix with 4 x 4 components. (From GLM_GTX_compatibility extension)
+
+ typedef float float1; //!< \brief single-precision floating-point vector with 1 component. (From GLM_GTX_compatibility extension)
+ typedef tvec2<float, highp> float2; //!< \brief single-precision floating-point vector with 2 components. (From GLM_GTX_compatibility extension)
+ typedef tvec3<float, highp> float3; //!< \brief single-precision floating-point vector with 3 components. (From GLM_GTX_compatibility extension)
+ typedef tvec4<float, highp> float4; //!< \brief single-precision floating-point vector with 4 components. (From GLM_GTX_compatibility extension)
+
+ typedef float float1x1; //!< \brief single-precision floating-point matrix with 1 component. (From GLM_GTX_compatibility extension)
+ typedef tmat2x2<float, highp> float2x2; //!< \brief single-precision floating-point matrix with 2 x 2 components. (From GLM_GTX_compatibility extension)
+ typedef tmat2x3<float, highp> float2x3; //!< \brief single-precision floating-point matrix with 2 x 3 components. (From GLM_GTX_compatibility extension)
+ typedef tmat2x4<float, highp> float2x4; //!< \brief single-precision floating-point matrix with 2 x 4 components. (From GLM_GTX_compatibility extension)
+ typedef tmat3x2<float, highp> float3x2; //!< \brief single-precision floating-point matrix with 3 x 2 components. (From GLM_GTX_compatibility extension)
+ typedef tmat3x3<float, highp> float3x3; //!< \brief single-precision floating-point matrix with 3 x 3 components. (From GLM_GTX_compatibility extension)
+ typedef tmat3x4<float, highp> float3x4; //!< \brief single-precision floating-point matrix with 3 x 4 components. (From GLM_GTX_compatibility extension)
+ typedef tmat4x2<float, highp> float4x2; //!< \brief single-precision floating-point matrix with 4 x 2 components. (From GLM_GTX_compatibility extension)
+ typedef tmat4x3<float, highp> float4x3; //!< \brief single-precision floating-point matrix with 4 x 3 components. (From GLM_GTX_compatibility extension)
+ typedef tmat4x4<float, highp> float4x4; //!< \brief single-precision floating-point matrix with 4 x 4 components. (From GLM_GTX_compatibility extension)
+
+ typedef double double1; //!< \brief double-precision floating-point vector with 1 component. (From GLM_GTX_compatibility extension)
+ typedef tvec2<double, highp> double2; //!< \brief double-precision floating-point vector with 2 components. (From GLM_GTX_compatibility extension)
+ typedef tvec3<double, highp> double3; //!< \brief double-precision floating-point vector with 3 components. (From GLM_GTX_compatibility extension)
+ typedef tvec4<double, highp> double4; //!< \brief double-precision floating-point vector with 4 components. (From GLM_GTX_compatibility extension)
+
+ typedef double double1x1; //!< \brief double-precision floating-point matrix with 1 component. (From GLM_GTX_compatibility extension)
+ typedef tmat2x2<double, highp> double2x2; //!< \brief double-precision floating-point matrix with 2 x 2 components. (From GLM_GTX_compatibility extension)
+ typedef tmat2x3<double, highp> double2x3; //!< \brief double-precision floating-point matrix with 2 x 3 components. (From GLM_GTX_compatibility extension)
+ typedef tmat2x4<double, highp> double2x4; //!< \brief double-precision floating-point matrix with 2 x 4 components. (From GLM_GTX_compatibility extension)
+ typedef tmat3x2<double, highp> double3x2; //!< \brief double-precision floating-point matrix with 3 x 2 components. (From GLM_GTX_compatibility extension)
+ typedef tmat3x3<double, highp> double3x3; //!< \brief double-precision floating-point matrix with 3 x 3 components. (From GLM_GTX_compatibility extension)
+ typedef tmat3x4<double, highp> double3x4; //!< \brief double-precision floating-point matrix with 3 x 4 components. (From GLM_GTX_compatibility extension)
+ typedef tmat4x2<double, highp> double4x2; //!< \brief double-precision floating-point matrix with 4 x 2 components. (From GLM_GTX_compatibility extension)
+ typedef tmat4x3<double, highp> double4x3; //!< \brief double-precision floating-point matrix with 4 x 3 components. (From GLM_GTX_compatibility extension)
+ typedef tmat4x4<double, highp> double4x4; //!< \brief double-precision floating-point matrix with 4 x 4 components. (From GLM_GTX_compatibility extension)
+
+ /// @}
+}//namespace glm
+
+#include "compatibility.inl"
diff --git a/src/third_party/glm/glm/gtx/compatibility.inl b/src/third_party/glm/glm/gtx/compatibility.inl
new file mode 100644
index 0000000..368527a
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/compatibility.inl
@@ -0,0 +1,65 @@
+/// @ref gtx_compatibility
+/// @file glm/gtx/compatibility.inl
+
+#include <limits>
+
+namespace glm
+{
+ // isfinite
+ template <typename genType>
+ GLM_FUNC_QUALIFIER bool isfinite(
+ genType const & x)
+ {
+# if GLM_HAS_CXX11_STL
+ return std::isfinite(x) != 0;
+# elif GLM_COMPILER & GLM_COMPILER_VC
+ return _finite(x);
+# elif GLM_COMPILER & GLM_COMPILER_GCC && GLM_PLATFORM & GLM_PLATFORM_ANDROID
+ return _isfinite(x) != 0;
+# else
+ if (std::numeric_limits<genType>::is_integer || std::denorm_absent == std::numeric_limits<genType>::has_denorm)
+ return std::numeric_limits<genType>::min() <= x && std::numeric_limits<genType>::max() >= x;
+ else
+ return -std::numeric_limits<genType>::max() <= x && std::numeric_limits<genType>::max() >= x;
+# endif
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec1<bool, P> isfinite(
+ tvec1<T, P> const & x)
+ {
+ return tvec1<bool, P>(
+ isfinite(x.x));
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<bool, P> isfinite(
+ tvec2<T, P> const & x)
+ {
+ return tvec2<bool, P>(
+ isfinite(x.x),
+ isfinite(x.y));
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<bool, P> isfinite(
+ tvec3<T, P> const & x)
+ {
+ return tvec3<bool, P>(
+ isfinite(x.x),
+ isfinite(x.y),
+ isfinite(x.z));
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<bool, P> isfinite(
+ tvec4<T, P> const & x)
+ {
+ return tvec4<bool, P>(
+ isfinite(x.x),
+ isfinite(x.y),
+ isfinite(x.z),
+ isfinite(x.w));
+ }
+
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtx/component_wise.hpp b/src/third_party/glm/glm/gtx/component_wise.hpp
new file mode 100644
index 0000000..c316f9e
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/component_wise.hpp
@@ -0,0 +1,65 @@
+/// @ref gtx_component_wise
+/// @file glm/gtx/component_wise.hpp
+/// @date 2007-05-21 / 2011-06-07
+/// @author Christophe Riccio
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_component_wise GLM_GTX_component_wise
+/// @ingroup gtx
+///
+/// @brief Operations between components of a type
+///
+/// <glm/gtx/component_wise.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependencies
+#include "../detail/setup.hpp"
+#include "../detail/precision.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_component_wise extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_component_wise
+ /// @{
+
+ /// Convert an integer vector to a normalized float vector.
+ /// If the parameter value type is already a floating precision type, the value is passed through.
+ /// @see gtx_component_wise
+ template <typename floatType, typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<floatType, P> compNormalize(vecType<T, P> const & v);
+
+ /// Convert a normalized float vector to an integer vector.
+ /// If the parameter value type is already a floating precision type, the value is passed through.
+ /// @see gtx_component_wise
+ template <typename T, typename floatType, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> compScale(vecType<floatType, P> const & v);
+
+ /// Add all vector components together.
+ /// @see gtx_component_wise
+ template <typename genType>
+ GLM_FUNC_DECL typename genType::value_type compAdd(genType const & v);
+
+ /// Multiply all vector components together.
+ /// @see gtx_component_wise
+ template <typename genType>
+ GLM_FUNC_DECL typename genType::value_type compMul(genType const & v);
+
+ /// Find the minimum value between single vector components.
+ /// @see gtx_component_wise
+ template <typename genType>
+ GLM_FUNC_DECL typename genType::value_type compMin(genType const & v);
+
+ /// Find the maximum value between single vector components.
+ /// @see gtx_component_wise
+ template <typename genType>
+ GLM_FUNC_DECL typename genType::value_type compMax(genType const & v);
+
+ /// @}
+}//namespace glm
+
+#include "component_wise.inl"
diff --git a/src/third_party/glm/glm/gtx/component_wise.inl b/src/third_party/glm/glm/gtx/component_wise.inl
new file mode 100644
index 0000000..add3969
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/component_wise.inl
@@ -0,0 +1,128 @@
+/// @ref gtx_component_wise
+/// @file glm/gtx/component_wise.inl
+
+#include <limits>
+
+namespace glm{
+namespace detail
+{
+ template <typename T, typename floatType, precision P, template <typename, precision> class vecType, bool isInteger, bool signedType>
+ struct compute_compNormalize
+ {};
+
+ template <typename T, typename floatType, precision P, template <typename, precision> class vecType>
+ struct compute_compNormalize<T, floatType, P, vecType, true, true>
+ {
+ GLM_FUNC_QUALIFIER static vecType<floatType, P> call(vecType<T, P> const & v)
+ {
+ floatType const Min = static_cast<floatType>(std::numeric_limits<T>::min());
+ floatType const Max = static_cast<floatType>(std::numeric_limits<T>::max());
+ return (vecType<floatType, P>(v) - Min) / (Max - Min) * static_cast<floatType>(2) - static_cast<floatType>(1);
+ }
+ };
+
+ template <typename T, typename floatType, precision P, template <typename, precision> class vecType>
+ struct compute_compNormalize<T, floatType, P, vecType, true, false>
+ {
+ GLM_FUNC_QUALIFIER static vecType<floatType, P> call(vecType<T, P> const & v)
+ {
+ return vecType<floatType, P>(v) / static_cast<floatType>(std::numeric_limits<T>::max());
+ }
+ };
+
+ template <typename T, typename floatType, precision P, template <typename, precision> class vecType>
+ struct compute_compNormalize<T, floatType, P, vecType, false, true>
+ {
+ GLM_FUNC_QUALIFIER static vecType<floatType, P> call(vecType<T, P> const & v)
+ {
+ return v;
+ }
+ };
+
+ template <typename T, typename floatType, precision P, template <typename, precision> class vecType, bool isInteger, bool signedType>
+ struct compute_compScale
+ {};
+
+ template <typename T, typename floatType, precision P, template <typename, precision> class vecType>
+ struct compute_compScale<T, floatType, P, vecType, true, true>
+ {
+ GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<floatType, P> const & v)
+ {
+ floatType const Max = static_cast<floatType>(std::numeric_limits<T>::max()) + static_cast<floatType>(0.5);
+ vecType<floatType, P> const Scaled(v * Max);
+ vecType<T, P> const Result(Scaled - static_cast<floatType>(0.5));
+ return Result;
+ }
+ };
+
+ template <typename T, typename floatType, precision P, template <typename, precision> class vecType>
+ struct compute_compScale<T, floatType, P, vecType, true, false>
+ {
+ GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<floatType, P> const & v)
+ {
+ return vecType<T, P>(vecType<floatType, P>(v) * static_cast<floatType>(std::numeric_limits<T>::max()));
+ }
+ };
+
+ template <typename T, typename floatType, precision P, template <typename, precision> class vecType>
+ struct compute_compScale<T, floatType, P, vecType, false, true>
+ {
+ GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<floatType, P> const & v)
+ {
+ return v;
+ }
+ };
+}//namespace detail
+
+ template <typename floatType, typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<floatType, P> compNormalize(vecType<T, P> const & v)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<floatType>::is_iec559, "'compNormalize' accepts only floating-point types for 'floatType' template parameter");
+
+ return detail::compute_compNormalize<T, floatType, P, vecType, std::numeric_limits<T>::is_integer, std::numeric_limits<T>::is_signed>::call(v);
+ }
+
+ template <typename T, typename floatType, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> compScale(vecType<floatType, P> const & v)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<floatType>::is_iec559, "'compScale' accepts only floating-point types for 'floatType' template parameter");
+
+ return detail::compute_compScale<T, floatType, P, vecType, std::numeric_limits<T>::is_integer, std::numeric_limits<T>::is_signed>::call(v);
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER T compAdd(vecType<T, P> const & v)
+ {
+ T Result(0);
+ for(length_t i = 0, n = v.length(); i < n; ++i)
+ Result += v[i];
+ return Result;
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER T compMul(vecType<T, P> const & v)
+ {
+ T Result(1);
+ for(length_t i = 0, n = v.length(); i < n; ++i)
+ Result *= v[i];
+ return Result;
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER T compMin(vecType<T, P> const & v)
+ {
+ T Result(v[0]);
+ for(length_t i = 1, n = v.length(); i < n; ++i)
+ Result = min(Result, v[i]);
+ return Result;
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER T compMax(vecType<T, P> const & v)
+ {
+ T Result(v[0]);
+ for(length_t i = 1, n = v.length(); i < n; ++i)
+ Result = max(Result, v[i]);
+ return Result;
+ }
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtx/dual_quaternion.hpp b/src/third_party/glm/glm/gtx/dual_quaternion.hpp
new file mode 100644
index 0000000..a64c7df
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/dual_quaternion.hpp
@@ -0,0 +1,266 @@
+/// @ref gtx_dual_quaternion
+/// @file glm/gtx/dual_quaternion.hpp
+/// @author Maksim Vorobiev (msomeone@gmail.com)
+///
+/// @see core (dependence)
+/// @see gtc_half_float (dependence)
+/// @see gtc_constants (dependence)
+/// @see gtc_quaternion (dependence)
+///
+/// @defgroup gtx_dual_quaternion GLM_GTX_dual_quaternion
+/// @ingroup gtx
+///
+/// @brief Defines a templated dual-quaternion type and several dual-quaternion operations.
+///
+/// <glm/gtx/dual_quaternion.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependency:
+#include "../glm.hpp"
+#include "../gtc/constants.hpp"
+#include "../gtc/quaternion.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_dual_quaternion extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_dual_quaternion
+ /// @{
+
+ template <typename T, precision P = defaultp>
+ struct tdualquat
+ {
+ // -- Implementation detail --
+
+ typedef T value_type;
+ typedef glm::tquat<T, P> part_type;
+
+ // -- Data --
+
+ glm::tquat<T, P> real, dual;
+
+ // -- Component accesses --
+
+ typedef length_t length_type;
+ /// Return the count of components of a dual quaternion
+ GLM_FUNC_DECL GLM_CONSTEXPR length_type length() const;
+
+ GLM_FUNC_DECL part_type & operator[](length_type i);
+ GLM_FUNC_DECL part_type const & operator[](length_type i) const;
+
+ // -- Implicit basic constructors --
+
+ GLM_FUNC_DECL GLM_CONSTEXPR tdualquat() GLM_DEFAULT_CTOR;
+ GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(tdualquat<T, P> const & d) GLM_DEFAULT;
+ template <precision Q>
+ GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(tdualquat<T, Q> const & d);
+
+ // -- Explicit basic constructors --
+
+ GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tdualquat(ctor);
+ GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(tquat<T, P> const & real);
+ GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(tquat<T, P> const & orientation, tvec3<T, P> const & translation);
+ GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(tquat<T, P> const & real, tquat<T, P> const & dual);
+
+ // -- Conversion constructors --
+
+ template <typename U, precision Q>
+ GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT tdualquat(tdualquat<U, Q> const & q);
+
+ GLM_FUNC_DECL GLM_EXPLICIT tdualquat(tmat2x4<T, P> const & holder_mat);
+ GLM_FUNC_DECL GLM_EXPLICIT tdualquat(tmat3x4<T, P> const & aug_mat);
+
+ // -- Unary arithmetic operators --
+
+ GLM_FUNC_DECL tdualquat<T, P> & operator=(tdualquat<T, P> const & m) GLM_DEFAULT;
+
+ template <typename U>
+ GLM_FUNC_DECL tdualquat<T, P> & operator=(tdualquat<U, P> const & m);
+ template <typename U>
+ GLM_FUNC_DECL tdualquat<T, P> & operator*=(U s);
+ template <typename U>
+ GLM_FUNC_DECL tdualquat<T, P> & operator/=(U s);
+ };
+
+ // -- Unary bit operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tdualquat<T, P> operator+(tdualquat<T, P> const & q);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tdualquat<T, P> operator-(tdualquat<T, P> const & q);
+
+ // -- Binary operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tdualquat<T, P> operator+(tdualquat<T, P> const & q, tdualquat<T, P> const & p);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tdualquat<T, P> operator*(tdualquat<T, P> const & q, tdualquat<T, P> const & p);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator*(tdualquat<T, P> const & q, tvec3<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> operator*(tvec3<T, P> const & v, tdualquat<T, P> const & q);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator*(tdualquat<T, P> const & q, tvec4<T, P> const & v);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> operator*(tvec4<T, P> const & v, tdualquat<T, P> const & q);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tdualquat<T, P> operator*(tdualquat<T, P> const & q, T const & s);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tdualquat<T, P> operator*(T const & s, tdualquat<T, P> const & q);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL tdualquat<T, P> operator/(tdualquat<T, P> const & q, T const & s);
+
+ // -- Boolean operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL bool operator==(tdualquat<T, P> const & q1, tdualquat<T, P> const & q2);
+
+ template <typename T, precision P>
+ GLM_FUNC_DECL bool operator!=(tdualquat<T, P> const & q1, tdualquat<T, P> const & q2);
+
+ /// Returns the normalized quaternion.
+ ///
+ /// @see gtx_dual_quaternion
+ template <typename T, precision P>
+ GLM_FUNC_DECL tdualquat<T, P> normalize(tdualquat<T, P> const & q);
+
+ /// Returns the linear interpolation of two dual quaternion.
+ ///
+ /// @see gtc_dual_quaternion
+ template <typename T, precision P>
+ GLM_FUNC_DECL tdualquat<T, P> lerp(tdualquat<T, P> const & x, tdualquat<T, P> const & y, T const & a);
+
+ /// Returns the q inverse.
+ ///
+ /// @see gtx_dual_quaternion
+ template <typename T, precision P>
+ GLM_FUNC_DECL tdualquat<T, P> inverse(tdualquat<T, P> const & q);
+
+ /// Converts a quaternion to a 2 * 4 matrix.
+ ///
+ /// @see gtx_dual_quaternion
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat2x4<T, P> mat2x4_cast(tdualquat<T, P> const & x);
+
+ /// Converts a quaternion to a 3 * 4 matrix.
+ ///
+ /// @see gtx_dual_quaternion
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x4<T, P> mat3x4_cast(tdualquat<T, P> const & x);
+
+ /// Converts a 2 * 4 matrix (matrix which holds real and dual parts) to a quaternion.
+ ///
+ /// @see gtx_dual_quaternion
+ template <typename T, precision P>
+ GLM_FUNC_DECL tdualquat<T, P> dualquat_cast(tmat2x4<T, P> const & x);
+
+ /// Converts a 3 * 4 matrix (augmented matrix rotation + translation) to a quaternion.
+ ///
+ /// @see gtx_dual_quaternion
+ template <typename T, precision P>
+ GLM_FUNC_DECL tdualquat<T, P> dualquat_cast(tmat3x4<T, P> const & x);
+
+
+ /// Dual-quaternion of low single-precision floating-point numbers.
+ ///
+ /// @see gtx_dual_quaternion
+ typedef tdualquat<float, lowp> lowp_dualquat;
+
+ /// Dual-quaternion of medium single-precision floating-point numbers.
+ ///
+ /// @see gtx_dual_quaternion
+ typedef tdualquat<float, mediump> mediump_dualquat;
+
+ /// Dual-quaternion of high single-precision floating-point numbers.
+ ///
+ /// @see gtx_dual_quaternion
+ typedef tdualquat<float, highp> highp_dualquat;
+
+
+ /// Dual-quaternion of low single-precision floating-point numbers.
+ ///
+ /// @see gtx_dual_quaternion
+ typedef tdualquat<float, lowp> lowp_fdualquat;
+
+ /// Dual-quaternion of medium single-precision floating-point numbers.
+ ///
+ /// @see gtx_dual_quaternion
+ typedef tdualquat<float, mediump> mediump_fdualquat;
+
+ /// Dual-quaternion of high single-precision floating-point numbers.
+ ///
+ /// @see gtx_dual_quaternion
+ typedef tdualquat<float, highp> highp_fdualquat;
+
+
+ /// Dual-quaternion of low double-precision floating-point numbers.
+ ///
+ /// @see gtx_dual_quaternion
+ typedef tdualquat<double, lowp> lowp_ddualquat;
+
+ /// Dual-quaternion of medium double-precision floating-point numbers.
+ ///
+ /// @see gtx_dual_quaternion
+ typedef tdualquat<double, mediump> mediump_ddualquat;
+
+ /// Dual-quaternion of high double-precision floating-point numbers.
+ ///
+ /// @see gtx_dual_quaternion
+ typedef tdualquat<double, highp> highp_ddualquat;
+
+
+#if(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
+ /// Dual-quaternion of floating-point numbers.
+ ///
+ /// @see gtx_dual_quaternion
+ typedef highp_fdualquat dualquat;
+
+ /// Dual-quaternion of single-precision floating-point numbers.
+ ///
+ /// @see gtx_dual_quaternion
+ typedef highp_fdualquat fdualquat;
+#elif(defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
+ typedef highp_fdualquat dualquat;
+ typedef highp_fdualquat fdualquat;
+#elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
+ typedef mediump_fdualquat dualquat;
+ typedef mediump_fdualquat fdualquat;
+#elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && defined(GLM_PRECISION_LOWP_FLOAT))
+ typedef lowp_fdualquat dualquat;
+ typedef lowp_fdualquat fdualquat;
+#else
+# error "GLM error: multiple default precision requested for single-precision floating-point types"
+#endif
+
+
+#if(!defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE))
+ /// Dual-quaternion of default double-precision floating-point numbers.
+ ///
+ /// @see gtx_dual_quaternion
+ typedef highp_ddualquat ddualquat;
+#elif(defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE))
+ typedef highp_ddualquat ddualquat;
+#elif(!defined(GLM_PRECISION_HIGHP_DOUBLE) && defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE))
+ typedef mediump_ddualquat ddualquat;
+#elif(!defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && defined(GLM_PRECISION_LOWP_DOUBLE))
+ typedef lowp_ddualquat ddualquat;
+#else
+# error "GLM error: Multiple default precision requested for double-precision floating-point types"
+#endif
+
+ /// @}
+} //namespace glm
+
+#include "dual_quaternion.inl"
diff --git a/src/third_party/glm/glm/gtx/dual_quaternion.inl b/src/third_party/glm/glm/gtx/dual_quaternion.inl
new file mode 100644
index 0000000..c93c969
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/dual_quaternion.inl
@@ -0,0 +1,357 @@
+/// @ref gtx_dual_quaternion
+/// @file glm/gtx/dual_quaternion.inl
+
+#include "../geometric.hpp"
+#include <limits>
+
+namespace glm
+{
+ // -- Component accesses --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename tdualquat<T, P>::length_type tdualquat<T, P>::length() const
+ {
+ return 2;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER typename tdualquat<T, P>::part_type & tdualquat<T, P>::operator[](typename tdualquat<T, P>::length_type i)
+ {
+ assert(i >= 0 && i < this->length());
+ return (&real)[i];
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER typename tdualquat<T, P>::part_type const & tdualquat<T, P>::operator[](typename tdualquat<T, P>::length_type i) const
+ {
+ assert(i >= 0 && i < this->length());
+ return (&real)[i];
+ }
+
+ // -- Implicit basic constructors --
+
+# if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT)
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat<T, P>::tdualquat()
+# ifndef GLM_FORCE_NO_CTOR_INIT
+ : real(tquat<T, P>())
+ , dual(tquat<T, P>(0, 0, 0, 0))
+# endif
+ {}
+# endif
+
+# if !GLM_HAS_DEFAULTED_FUNCTIONS
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat<T, P>::tdualquat(tdualquat<T, P> const & d)
+ : real(d.real)
+ , dual(d.dual)
+ {}
+# endif//!GLM_HAS_DEFAULTED_FUNCTIONS
+
+ template <typename T, precision P>
+ template <precision Q>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat<T, P>::tdualquat(tdualquat<T, Q> const & d)
+ : real(d.real)
+ , dual(d.dual)
+ {}
+
+ // -- Explicit basic constructors --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR_CTOR tdualquat<T, P>::tdualquat(ctor)
+ {}
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat<T, P>::tdualquat(tquat<T, P> const & r)
+ : real(r), dual(tquat<T, P>(0, 0, 0, 0))
+ {}
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat<T, P>::tdualquat(tquat<T, P> const & q, tvec3<T, P> const& p)
+ : real(q), dual(
+ T(-0.5) * ( p.x*q.x + p.y*q.y + p.z*q.z),
+ T(+0.5) * ( p.x*q.w + p.y*q.z - p.z*q.y),
+ T(+0.5) * (-p.x*q.z + p.y*q.w + p.z*q.x),
+ T(+0.5) * ( p.x*q.y - p.y*q.x + p.z*q.w))
+ {}
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat<T, P>::tdualquat(tquat<T, P> const & r, tquat<T, P> const & d)
+ : real(r), dual(d)
+ {}
+
+ // -- Conversion constructors --
+
+ template <typename T, precision P>
+ template <typename U, precision Q>
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat<T, P>::tdualquat(tdualquat<U, Q> const & q)
+ : real(q.real)
+ , dual(q.dual)
+ {}
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tdualquat<T, P>::tdualquat(tmat2x4<T, P> const & m)
+ {
+ *this = dualquat_cast(m);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tdualquat<T, P>::tdualquat(tmat3x4<T, P> const & m)
+ {
+ *this = dualquat_cast(m);
+ }
+
+ // -- Unary arithmetic operators --
+
+# if !GLM_HAS_DEFAULTED_FUNCTIONS
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tdualquat<T, P> & tdualquat<T, P>::operator=(tdualquat<T, P> const & q)
+ {
+ this->real = q.real;
+ this->dual = q.dual;
+ return *this;
+ }
+# endif//!GLM_HAS_DEFAULTED_FUNCTIONS
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tdualquat<T, P> & tdualquat<T, P>::operator=(tdualquat<U, P> const & q)
+ {
+ this->real = q.real;
+ this->dual = q.dual;
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tdualquat<T, P> & tdualquat<T, P>::operator*=(U s)
+ {
+ this->real *= static_cast<T>(s);
+ this->dual *= static_cast<T>(s);
+ return *this;
+ }
+
+ template <typename T, precision P>
+ template <typename U>
+ GLM_FUNC_QUALIFIER tdualquat<T, P> & tdualquat<T, P>::operator/=(U s)
+ {
+ this->real /= static_cast<T>(s);
+ this->dual /= static_cast<T>(s);
+ return *this;
+ }
+
+ // -- Unary bit operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tdualquat<T, P> operator+(tdualquat<T, P> const & q)
+ {
+ return q;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tdualquat<T, P> operator-(tdualquat<T, P> const & q)
+ {
+ return tdualquat<T, P>(-q.real, -q.dual);
+ }
+
+ // -- Binary operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tdualquat<T, P> operator+(tdualquat<T, P> const & q, tdualquat<T, P> const & p)
+ {
+ return tdualquat<T, P>(q.real + p.real,q.dual + p.dual);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tdualquat<T, P> operator*(tdualquat<T, P> const & p, tdualquat<T, P> const & o)
+ {
+ return tdualquat<T, P>(p.real * o.real,p.real * o.dual + p.dual * o.real);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator*(tdualquat<T, P> const & q, tvec3<T, P> const & v)
+ {
+ tvec3<T, P> const real_v3(q.real.x,q.real.y,q.real.z);
+ tvec3<T, P> const dual_v3(q.dual.x,q.dual.y,q.dual.z);
+ return (cross(real_v3, cross(real_v3,v) + v * q.real.w + dual_v3) + dual_v3 * q.real.w - real_v3 * q.dual.w) * T(2) + v;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> operator*(tvec3<T, P> const & v, tdualquat<T, P> const & q)
+ {
+ return glm::inverse(q) * v;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator*(tdualquat<T, P> const & q, tvec4<T, P> const & v)
+ {
+ return tvec4<T, P>(q * tvec3<T, P>(v), v.w);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> operator*(tvec4<T, P> const & v, tdualquat<T, P> const & q)
+ {
+ return glm::inverse(q) * v;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tdualquat<T, P> operator*(tdualquat<T, P> const & q, T const & s)
+ {
+ return tdualquat<T, P>(q.real * s, q.dual * s);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tdualquat<T, P> operator*(T const & s, tdualquat<T, P> const & q)
+ {
+ return q * s;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tdualquat<T, P> operator/(tdualquat<T, P> const & q, T const & s)
+ {
+ return tdualquat<T, P>(q.real / s, q.dual / s);
+ }
+
+ // -- Boolean operators --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER bool operator==(tdualquat<T, P> const & q1, tdualquat<T, P> const & q2)
+ {
+ return (q1.real == q2.real) && (q1.dual == q2.dual);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER bool operator!=(tdualquat<T, P> const & q1, tdualquat<T, P> const & q2)
+ {
+ return (q1.real != q2.dual) || (q1.real != q2.dual);
+ }
+
+ // -- Operations --
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tdualquat<T, P> normalize(tdualquat<T, P> const & q)
+ {
+ return q / length(q.real);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tdualquat<T, P> lerp(tdualquat<T, P> const & x, tdualquat<T, P> const & y, T const & a)
+ {
+ // Dual Quaternion Linear blend aka DLB:
+ // Lerp is only defined in [0, 1]
+ assert(a >= static_cast<T>(0));
+ assert(a <= static_cast<T>(1));
+ T const k = dot(x.real,y.real) < static_cast<T>(0) ? -a : a;
+ T const one(1);
+ return tdualquat<T, P>(x * (one - a) + y * k);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tdualquat<T, P> inverse(tdualquat<T, P> const & q)
+ {
+ const glm::tquat<T, P> real = conjugate(q.real);
+ const glm::tquat<T, P> dual = conjugate(q.dual);
+ return tdualquat<T, P>(real, dual + (real * (-2.0f * dot(real,dual))));
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x4<T, P> mat2x4_cast(tdualquat<T, P> const & x)
+ {
+ return tmat2x4<T, P>( x[0].x, x[0].y, x[0].z, x[0].w, x[1].x, x[1].y, x[1].z, x[1].w );
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x4<T, P> mat3x4_cast(tdualquat<T, P> const & x)
+ {
+ tquat<T, P> r = x.real / length2(x.real);
+
+ tquat<T, P> const rr(r.w * x.real.w, r.x * x.real.x, r.y * x.real.y, r.z * x.real.z);
+ r *= static_cast<T>(2);
+
+ T const xy = r.x * x.real.y;
+ T const xz = r.x * x.real.z;
+ T const yz = r.y * x.real.z;
+ T const wx = r.w * x.real.x;
+ T const wy = r.w * x.real.y;
+ T const wz = r.w * x.real.z;
+
+ tvec4<T, P> const a(
+ rr.w + rr.x - rr.y - rr.z,
+ xy - wz,
+ xz + wy,
+ -(x.dual.w * r.x - x.dual.x * r.w + x.dual.y * r.z - x.dual.z * r.y));
+
+ tvec4<T, P> const b(
+ xy + wz,
+ rr.w + rr.y - rr.x - rr.z,
+ yz - wx,
+ -(x.dual.w * r.y - x.dual.x * r.z - x.dual.y * r.w + x.dual.z * r.x));
+
+ tvec4<T, P> const c(
+ xz - wy,
+ yz + wx,
+ rr.w + rr.z - rr.x - rr.y,
+ -(x.dual.w * r.z + x.dual.x * r.y - x.dual.y * r.x - x.dual.z * r.w));
+
+ return tmat3x4<T, P>(a, b, c);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tdualquat<T, P> dualquat_cast(tmat2x4<T, P> const & x)
+ {
+ return tdualquat<T, P>(
+ tquat<T, P>( x[0].w, x[0].x, x[0].y, x[0].z ),
+ tquat<T, P>( x[1].w, x[1].x, x[1].y, x[1].z ));
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tdualquat<T, P> dualquat_cast(tmat3x4<T, P> const & x)
+ {
+ tquat<T, P> real(uninitialize);
+
+ T const trace = x[0].x + x[1].y + x[2].z;
+ if(trace > static_cast<T>(0))
+ {
+ T const r = sqrt(T(1) + trace);
+ T const invr = static_cast<T>(0.5) / r;
+ real.w = static_cast<T>(0.5) * r;
+ real.x = (x[2].y - x[1].z) * invr;
+ real.y = (x[0].z - x[2].x) * invr;
+ real.z = (x[1].x - x[0].y) * invr;
+ }
+ else if(x[0].x > x[1].y && x[0].x > x[2].z)
+ {
+ T const r = sqrt(T(1) + x[0].x - x[1].y - x[2].z);
+ T const invr = static_cast<T>(0.5) / r;
+ real.x = static_cast<T>(0.5)*r;
+ real.y = (x[1].x + x[0].y) * invr;
+ real.z = (x[0].z + x[2].x) * invr;
+ real.w = (x[2].y - x[1].z) * invr;
+ }
+ else if(x[1].y > x[2].z)
+ {
+ T const r = sqrt(T(1) + x[1].y - x[0].x - x[2].z);
+ T const invr = static_cast<T>(0.5) / r;
+ real.x = (x[1].x + x[0].y) * invr;
+ real.y = static_cast<T>(0.5) * r;
+ real.z = (x[2].y + x[1].z) * invr;
+ real.w = (x[0].z - x[2].x) * invr;
+ }
+ else
+ {
+ T const r = sqrt(T(1) + x[2].z - x[0].x - x[1].y);
+ T const invr = static_cast<T>(0.5) / r;
+ real.x = (x[0].z + x[2].x) * invr;
+ real.y = (x[2].y + x[1].z) * invr;
+ real.z = static_cast<T>(0.5) * r;
+ real.w = (x[1].x - x[0].y) * invr;
+ }
+
+ tquat<T, P> dual(uninitialize);
+ dual.x = static_cast<T>(0.5) * ( x[0].w * real.w + x[1].w * real.z - x[2].w * real.y);
+ dual.y = static_cast<T>(0.5) * (-x[0].w * real.z + x[1].w * real.w + x[2].w * real.x);
+ dual.z = static_cast<T>(0.5) * ( x[0].w * real.y - x[1].w * real.x + x[2].w * real.w);
+ dual.w = -static_cast<T>(0.5) * ( x[0].w * real.x + x[1].w * real.y + x[2].w * real.z);
+ return tdualquat<T, P>(real, dual);
+ }
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtx/euler_angles.hpp b/src/third_party/glm/glm/gtx/euler_angles.hpp
new file mode 100644
index 0000000..fdc4f26
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/euler_angles.hpp
@@ -0,0 +1,143 @@
+/// @ref gtx_euler_angles
+/// @file glm/gtx/euler_angles.hpp
+///
+/// @see core (dependence)
+/// @see gtc_half_float (dependence)
+///
+/// @defgroup gtx_euler_angles GLM_GTX_euler_angles
+/// @ingroup gtx
+///
+/// @brief Build matrices from Euler angles.
+///
+/// <glm/gtx/euler_angles.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependency:
+#include "../glm.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_euler_angles extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_euler_angles
+ /// @{
+
+ /// Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle X.
+ /// @see gtx_euler_angles
+ template <typename T>
+ GLM_FUNC_DECL tmat4x4<T, defaultp> eulerAngleX(
+ T const & angleX);
+
+ /// Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Y.
+ /// @see gtx_euler_angles
+ template <typename T>
+ GLM_FUNC_DECL tmat4x4<T, defaultp> eulerAngleY(
+ T const & angleY);
+
+ /// Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Z.
+ /// @see gtx_euler_angles
+ template <typename T>
+ GLM_FUNC_DECL tmat4x4<T, defaultp> eulerAngleZ(
+ T const & angleZ);
+
+ /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y).
+ /// @see gtx_euler_angles
+ template <typename T>
+ GLM_FUNC_DECL tmat4x4<T, defaultp> eulerAngleXY(
+ T const & angleX,
+ T const & angleY);
+
+ /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X).
+ /// @see gtx_euler_angles
+ template <typename T>
+ GLM_FUNC_DECL tmat4x4<T, defaultp> eulerAngleYX(
+ T const & angleY,
+ T const & angleX);
+
+ /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z).
+ /// @see gtx_euler_angles
+ template <typename T>
+ GLM_FUNC_DECL tmat4x4<T, defaultp> eulerAngleXZ(
+ T const & angleX,
+ T const & angleZ);
+
+ /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X).
+ /// @see gtx_euler_angles
+ template <typename T>
+ GLM_FUNC_DECL tmat4x4<T, defaultp> eulerAngleZX(
+ T const & angle,
+ T const & angleX);
+
+ /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z).
+ /// @see gtx_euler_angles
+ template <typename T>
+ GLM_FUNC_DECL tmat4x4<T, defaultp> eulerAngleYZ(
+ T const & angleY,
+ T const & angleZ);
+
+ /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y).
+ /// @see gtx_euler_angles
+ template <typename T>
+ GLM_FUNC_DECL tmat4x4<T, defaultp> eulerAngleZY(
+ T const & angleZ,
+ T const & angleY);
+
+ /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y * Z).
+ /// @see gtx_euler_angles
+ template <typename T>
+ GLM_FUNC_DECL tmat4x4<T, defaultp> eulerAngleXYZ(
+ T const & t1,
+ T const & t2,
+ T const & t3);
+
+ /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).
+ /// @see gtx_euler_angles
+ template <typename T>
+ GLM_FUNC_DECL tmat4x4<T, defaultp> eulerAngleYXZ(
+ T const & yaw,
+ T const & pitch,
+ T const & roll);
+
+ /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).
+ /// @see gtx_euler_angles
+ template <typename T>
+ GLM_FUNC_DECL tmat4x4<T, defaultp> yawPitchRoll(
+ T const & yaw,
+ T const & pitch,
+ T const & roll);
+
+ /// Creates a 2D 2 * 2 rotation matrix from an euler angle.
+ /// @see gtx_euler_angles
+ template <typename T>
+ GLM_FUNC_DECL tmat2x2<T, defaultp> orientate2(T const & angle);
+
+ /// Creates a 2D 4 * 4 homogeneous rotation matrix from an euler angle.
+ /// @see gtx_euler_angles
+ template <typename T>
+ GLM_FUNC_DECL tmat3x3<T, defaultp> orientate3(T const & angle);
+
+ /// Creates a 3D 3 * 3 rotation matrix from euler angles (Y * X * Z).
+ /// @see gtx_euler_angles
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x3<T, P> orientate3(tvec3<T, P> const & angles);
+
+ /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).
+ /// @see gtx_euler_angles
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x4<T, P> orientate4(tvec3<T, P> const & angles);
+
+ /// Extracts the (X * Y * Z) Euler angles from the rotation matrix M
+ /// @see gtx_euler_angles
+ template <typename T>
+ GLM_FUNC_DECL void extractEulerAngleXYZ(tmat4x4<T, defaultp> const & M,
+ T & t1,
+ T & t2,
+ T & t3);
+
+ /// @}
+}//namespace glm
+
+#include "euler_angles.inl"
diff --git a/src/third_party/glm/glm/gtx/euler_angles.inl b/src/third_party/glm/glm/gtx/euler_angles.inl
new file mode 100644
index 0000000..dbe0a48
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/euler_angles.inl
@@ -0,0 +1,312 @@
+/// @ref gtx_euler_angles
+/// @file glm/gtx/euler_angles.inl
+
+#include "compatibility.hpp" // glm::atan2
+
+namespace glm
+{
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> eulerAngleX
+ (
+ T const & angleX
+ )
+ {
+ T cosX = glm::cos(angleX);
+ T sinX = glm::sin(angleX);
+
+ return tmat4x4<T, defaultp>(
+ T(1), T(0), T(0), T(0),
+ T(0), cosX, sinX, T(0),
+ T(0),-sinX, cosX, T(0),
+ T(0), T(0), T(0), T(1));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> eulerAngleY
+ (
+ T const & angleY
+ )
+ {
+ T cosY = glm::cos(angleY);
+ T sinY = glm::sin(angleY);
+
+ return tmat4x4<T, defaultp>(
+ cosY, T(0), -sinY, T(0),
+ T(0), T(1), T(0), T(0),
+ sinY, T(0), cosY, T(0),
+ T(0), T(0), T(0), T(1));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> eulerAngleZ
+ (
+ T const & angleZ
+ )
+ {
+ T cosZ = glm::cos(angleZ);
+ T sinZ = glm::sin(angleZ);
+
+ return tmat4x4<T, defaultp>(
+ cosZ, sinZ, T(0), T(0),
+ -sinZ, cosZ, T(0), T(0),
+ T(0), T(0), T(1), T(0),
+ T(0), T(0), T(0), T(1));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> eulerAngleXY
+ (
+ T const & angleX,
+ T const & angleY
+ )
+ {
+ T cosX = glm::cos(angleX);
+ T sinX = glm::sin(angleX);
+ T cosY = glm::cos(angleY);
+ T sinY = glm::sin(angleY);
+
+ return tmat4x4<T, defaultp>(
+ cosY, -sinX * -sinY, cosX * -sinY, T(0),
+ T(0), cosX, sinX, T(0),
+ sinY, -sinX * cosY, cosX * cosY, T(0),
+ T(0), T(0), T(0), T(1));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> eulerAngleYX
+ (
+ T const & angleY,
+ T const & angleX
+ )
+ {
+ T cosX = glm::cos(angleX);
+ T sinX = glm::sin(angleX);
+ T cosY = glm::cos(angleY);
+ T sinY = glm::sin(angleY);
+
+ return tmat4x4<T, defaultp>(
+ cosY, 0, -sinY, T(0),
+ sinY * sinX, cosX, cosY * sinX, T(0),
+ sinY * cosX, -sinX, cosY * cosX, T(0),
+ T(0), T(0), T(0), T(1));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> eulerAngleXZ
+ (
+ T const & angleX,
+ T const & angleZ
+ )
+ {
+ return eulerAngleX(angleX) * eulerAngleZ(angleZ);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> eulerAngleZX
+ (
+ T const & angleZ,
+ T const & angleX
+ )
+ {
+ return eulerAngleZ(angleZ) * eulerAngleX(angleX);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> eulerAngleYZ
+ (
+ T const & angleY,
+ T const & angleZ
+ )
+ {
+ return eulerAngleY(angleY) * eulerAngleZ(angleZ);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> eulerAngleZY
+ (
+ T const & angleZ,
+ T const & angleY
+ )
+ {
+ return eulerAngleZ(angleZ) * eulerAngleY(angleY);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> eulerAngleXYZ
+ (
+ T const & t1,
+ T const & t2,
+ T const & t3
+ )
+ {
+ T c1 = glm::cos(-t1);
+ T c2 = glm::cos(-t2);
+ T c3 = glm::cos(-t3);
+ T s1 = glm::sin(-t1);
+ T s2 = glm::sin(-t2);
+ T s3 = glm::sin(-t3);
+
+ tmat4x4<T, defaultp> Result;
+ Result[0][0] = c2 * c3;
+ Result[0][1] =-c1 * s3 + s1 * s2 * c3;
+ Result[0][2] = s1 * s3 + c1 * s2 * c3;
+ Result[0][3] = static_cast<T>(0);
+ Result[1][0] = c2 * s3;
+ Result[1][1] = c1 * c3 + s1 * s2 * s3;
+ Result[1][2] =-s1 * c3 + c1 * s2 * s3;
+ Result[1][3] = static_cast<T>(0);
+ Result[2][0] =-s2;
+ Result[2][1] = s1 * c2;
+ Result[2][2] = c1 * c2;
+ Result[2][3] = static_cast<T>(0);
+ Result[3][0] = static_cast<T>(0);
+ Result[3][1] = static_cast<T>(0);
+ Result[3][2] = static_cast<T>(0);
+ Result[3][3] = static_cast<T>(1);
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> eulerAngleYXZ
+ (
+ T const & yaw,
+ T const & pitch,
+ T const & roll
+ )
+ {
+ T tmp_ch = glm::cos(yaw);
+ T tmp_sh = glm::sin(yaw);
+ T tmp_cp = glm::cos(pitch);
+ T tmp_sp = glm::sin(pitch);
+ T tmp_cb = glm::cos(roll);
+ T tmp_sb = glm::sin(roll);
+
+ tmat4x4<T, defaultp> Result;
+ Result[0][0] = tmp_ch * tmp_cb + tmp_sh * tmp_sp * tmp_sb;
+ Result[0][1] = tmp_sb * tmp_cp;
+ Result[0][2] = -tmp_sh * tmp_cb + tmp_ch * tmp_sp * tmp_sb;
+ Result[0][3] = static_cast<T>(0);
+ Result[1][0] = -tmp_ch * tmp_sb + tmp_sh * tmp_sp * tmp_cb;
+ Result[1][1] = tmp_cb * tmp_cp;
+ Result[1][2] = tmp_sb * tmp_sh + tmp_ch * tmp_sp * tmp_cb;
+ Result[1][3] = static_cast<T>(0);
+ Result[2][0] = tmp_sh * tmp_cp;
+ Result[2][1] = -tmp_sp;
+ Result[2][2] = tmp_ch * tmp_cp;
+ Result[2][3] = static_cast<T>(0);
+ Result[3][0] = static_cast<T>(0);
+ Result[3][1] = static_cast<T>(0);
+ Result[3][2] = static_cast<T>(0);
+ Result[3][3] = static_cast<T>(1);
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> yawPitchRoll
+ (
+ T const & yaw,
+ T const & pitch,
+ T const & roll
+ )
+ {
+ T tmp_ch = glm::cos(yaw);
+ T tmp_sh = glm::sin(yaw);
+ T tmp_cp = glm::cos(pitch);
+ T tmp_sp = glm::sin(pitch);
+ T tmp_cb = glm::cos(roll);
+ T tmp_sb = glm::sin(roll);
+
+ tmat4x4<T, defaultp> Result;
+ Result[0][0] = tmp_ch * tmp_cb + tmp_sh * tmp_sp * tmp_sb;
+ Result[0][1] = tmp_sb * tmp_cp;
+ Result[0][2] = -tmp_sh * tmp_cb + tmp_ch * tmp_sp * tmp_sb;
+ Result[0][3] = static_cast<T>(0);
+ Result[1][0] = -tmp_ch * tmp_sb + tmp_sh * tmp_sp * tmp_cb;
+ Result[1][1] = tmp_cb * tmp_cp;
+ Result[1][2] = tmp_sb * tmp_sh + tmp_ch * tmp_sp * tmp_cb;
+ Result[1][3] = static_cast<T>(0);
+ Result[2][0] = tmp_sh * tmp_cp;
+ Result[2][1] = -tmp_sp;
+ Result[2][2] = tmp_ch * tmp_cp;
+ Result[2][3] = static_cast<T>(0);
+ Result[3][0] = static_cast<T>(0);
+ Result[3][1] = static_cast<T>(0);
+ Result[3][2] = static_cast<T>(0);
+ Result[3][3] = static_cast<T>(1);
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat2x2<T, defaultp> orientate2
+ (
+ T const & angle
+ )
+ {
+ T c = glm::cos(angle);
+ T s = glm::sin(angle);
+
+ tmat2x2<T, defaultp> Result;
+ Result[0][0] = c;
+ Result[0][1] = s;
+ Result[1][0] = -s;
+ Result[1][1] = c;
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER tmat3x3<T, defaultp> orientate3
+ (
+ T const & angle
+ )
+ {
+ T c = glm::cos(angle);
+ T s = glm::sin(angle);
+
+ tmat3x3<T, defaultp> Result;
+ Result[0][0] = c;
+ Result[0][1] = s;
+ Result[0][2] = 0.0f;
+ Result[1][0] = -s;
+ Result[1][1] = c;
+ Result[1][2] = 0.0f;
+ Result[2][0] = 0.0f;
+ Result[2][1] = 0.0f;
+ Result[2][2] = 1.0f;
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> orientate3
+ (
+ tvec3<T, P> const & angles
+ )
+ {
+ return tmat3x3<T, P>(yawPitchRoll(angles.z, angles.x, angles.y));
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> orientate4
+ (
+ tvec3<T, P> const & angles
+ )
+ {
+ return yawPitchRoll(angles.z, angles.x, angles.y);
+ }
+
+ template <typename T>
+ GLM_FUNC_DECL void extractEulerAngleXYZ(tmat4x4<T, defaultp> const & M,
+ T & t1,
+ T & t2,
+ T & t3)
+ {
+ float T1 = glm::atan2<T, defaultp>(M[2][1], M[2][2]);
+ float C2 = glm::sqrt(M[0][0]*M[0][0] + M[1][0]*M[1][0]);
+ float T2 = glm::atan2<T, defaultp>(-M[2][0], C2);
+ float S1 = glm::sin(T1);
+ float C1 = glm::cos(T1);
+ float T3 = glm::atan2<T, defaultp>(S1*M[0][2] - C1*M[0][1], C1*M[1][1] - S1*M[1][2 ]);
+ t1 = -T1;
+ t2 = -T2;
+ t3 = -T3;
+ }
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtx/extend.hpp b/src/third_party/glm/glm/gtx/extend.hpp
new file mode 100644
index 0000000..26837a8
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/extend.hpp
@@ -0,0 +1,38 @@
+/// @ref gtx_extend
+/// @file glm/gtx/extend.hpp
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_extend GLM_GTX_extend
+/// @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.
+
+#pragma once
+
+// Dependency:
+#include "../glm.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_extend extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_extend
+ /// @{
+
+ /// Extends of Length the Origin position using the (Source - Origin) direction.
+ /// @see gtx_extend
+ template <typename genType>
+ GLM_FUNC_DECL genType extend(
+ genType const & Origin,
+ genType const & Source,
+ typename genType::value_type const Length);
+
+ /// @}
+}//namespace glm
+
+#include "extend.inl"
diff --git a/src/third_party/glm/glm/gtx/extend.inl b/src/third_party/glm/glm/gtx/extend.inl
new file mode 100644
index 0000000..3155583
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/extend.inl
@@ -0,0 +1,49 @@
+/// @ref gtx_extend
+/// @file glm/gtx/extend.inl
+
+namespace glm
+{
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType extend
+ (
+ genType const & Origin,
+ genType const & Source,
+ genType const & Distance
+ )
+ {
+ return Origin + (Source - Origin) * Distance;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> extend
+ (
+ tvec2<T, P> const & Origin,
+ tvec2<T, P> const & Source,
+ T const & Distance
+ )
+ {
+ return Origin + (Source - Origin) * Distance;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> extend
+ (
+ tvec3<T, P> const & Origin,
+ tvec3<T, P> const & Source,
+ T const & Distance
+ )
+ {
+ return Origin + (Source - Origin) * Distance;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> extend
+ (
+ tvec4<T, P> const & Origin,
+ tvec4<T, P> const & Source,
+ T const & Distance
+ )
+ {
+ return Origin + (Source - Origin) * Distance;
+ }
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtx/extended_min_max.hpp b/src/third_party/glm/glm/gtx/extended_min_max.hpp
new file mode 100644
index 0000000..f4d8859
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/extended_min_max.hpp
@@ -0,0 +1,133 @@
+/// @ref gtx_extended_min_max
+/// @file glm/gtx/extended_min_max.hpp
+///
+/// @see core (dependence)
+/// @see gtx_half_float (dependence)
+///
+/// @defgroup gtx_extented_min_max GLM_GTX_extented_min_max
+/// @ingroup gtx
+///
+/// Min and max functions for 3 to 4 parameters.
+///
+/// <glm/gtx/extented_min_max.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependency:
+#include "../glm.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_extented_min_max extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_extented_min_max
+ /// @{
+
+ /// Return the minimum component-wise values of 3 inputs
+ /// @see gtx_extented_min_max
+ template <typename T>
+ GLM_FUNC_DECL T min(
+ T const & x,
+ T const & y,
+ T const & z);
+
+ /// Return the minimum component-wise values of 3 inputs
+ /// @see gtx_extented_min_max
+ template <typename T, template <typename> class C>
+ GLM_FUNC_DECL C<T> min(
+ C<T> const & x,
+ typename C<T>::T const & y,
+ typename C<T>::T const & z);
+
+ /// Return the minimum component-wise values of 3 inputs
+ /// @see gtx_extented_min_max
+ template <typename T, template <typename> class C>
+ GLM_FUNC_DECL C<T> min(
+ C<T> const & x,
+ C<T> const & y,
+ C<T> const & z);
+
+ /// Return the minimum component-wise values of 4 inputs
+ /// @see gtx_extented_min_max
+ template <typename T>
+ GLM_FUNC_DECL T min(
+ T const & x,
+ T const & y,
+ T const & z,
+ T const & w);
+
+ /// Return the minimum component-wise values of 4 inputs
+ /// @see gtx_extented_min_max
+ template <typename T, template <typename> class C>
+ GLM_FUNC_DECL C<T> min(
+ C<T> const & x,
+ typename C<T>::T const & y,
+ typename C<T>::T const & z,
+ typename C<T>::T const & w);
+
+ /// Return the minimum component-wise values of 4 inputs
+ /// @see gtx_extented_min_max
+ template <typename T, template <typename> class C>
+ GLM_FUNC_DECL C<T> min(
+ C<T> const & x,
+ C<T> const & y,
+ C<T> const & z,
+ C<T> const & w);
+
+ /// Return the maximum component-wise values of 3 inputs
+ /// @see gtx_extented_min_max
+ template <typename T>
+ GLM_FUNC_DECL T max(
+ T const & x,
+ T const & y,
+ T const & z);
+
+ /// Return the maximum component-wise values of 3 inputs
+ /// @see gtx_extented_min_max
+ template <typename T, template <typename> class C>
+ GLM_FUNC_DECL C<T> max(
+ C<T> const & x,
+ typename C<T>::T const & y,
+ typename C<T>::T const & z);
+
+ /// Return the maximum component-wise values of 3 inputs
+ /// @see gtx_extented_min_max
+ template <typename T, template <typename> class C>
+ GLM_FUNC_DECL C<T> max(
+ C<T> const & x,
+ C<T> const & y,
+ C<T> const & z);
+
+ /// Return the maximum component-wise values of 4 inputs
+ /// @see gtx_extented_min_max
+ template <typename T>
+ GLM_FUNC_DECL T max(
+ T const & x,
+ T const & y,
+ T const & z,
+ T const & w);
+
+ /// Return the maximum component-wise values of 4 inputs
+ /// @see gtx_extented_min_max
+ template <typename T, template <typename> class C>
+ GLM_FUNC_DECL C<T> max(
+ C<T> const & x,
+ typename C<T>::T const & y,
+ typename C<T>::T const & z,
+ typename C<T>::T const & w);
+
+ /// Return the maximum component-wise values of 4 inputs
+ /// @see gtx_extented_min_max
+ template <typename T, template <typename> class C>
+ GLM_FUNC_DECL C<T> max(
+ C<T> const & x,
+ C<T> const & y,
+ C<T> const & z,
+ C<T> const & w);
+
+ /// @}
+}//namespace glm
+
+#include "extended_min_max.inl"
diff --git a/src/third_party/glm/glm/gtx/extended_min_max.inl b/src/third_party/glm/glm/gtx/extended_min_max.inl
new file mode 100644
index 0000000..64ea445
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/extended_min_max.inl
@@ -0,0 +1,140 @@
+/// @ref gtx_extended_min_max
+/// @file glm/gtx/extended_min_max.inl
+
+namespace glm
+{
+ template <typename T>
+ GLM_FUNC_QUALIFIER T min(
+ T const & x,
+ T const & y,
+ T const & z)
+ {
+ return glm::min(glm::min(x, y), z);
+ }
+
+ template <typename T, template <typename> class C>
+ GLM_FUNC_QUALIFIER C<T> min
+ (
+ C<T> const & x,
+ typename C<T>::T const & y,
+ typename C<T>::T const & z
+ )
+ {
+ return glm::min(glm::min(x, y), z);
+ }
+
+ template <typename T, template <typename> class C>
+ GLM_FUNC_QUALIFIER C<T> min
+ (
+ C<T> const & x,
+ C<T> const & y,
+ C<T> const & z
+ )
+ {
+ return glm::min(glm::min(x, y), z);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER T min
+ (
+ T const & x,
+ T const & y,
+ T const & z,
+ T const & w
+ )
+ {
+ return glm::min(glm::min(x, y), glm::min(z, w));
+ }
+
+ template <typename T, template <typename> class C>
+ GLM_FUNC_QUALIFIER C<T> min
+ (
+ C<T> const & x,
+ typename C<T>::T const & y,
+ typename C<T>::T const & z,
+ typename C<T>::T const & w
+ )
+ {
+ return glm::min(glm::min(x, y), glm::min(z, w));
+ }
+
+ template <typename T, template <typename> class C>
+ GLM_FUNC_QUALIFIER C<T> min
+ (
+ C<T> const & x,
+ C<T> const & y,
+ C<T> const & z,
+ C<T> const & w
+ )
+ {
+ return glm::min(glm::min(x, y), glm::min(z, w));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER T max(
+ T const & x,
+ T const & y,
+ T const & z)
+ {
+ return glm::max(glm::max(x, y), z);
+ }
+
+ template <typename T, template <typename> class C>
+ GLM_FUNC_QUALIFIER C<T> max
+ (
+ C<T> const & x,
+ typename C<T>::T const & y,
+ typename C<T>::T const & z
+ )
+ {
+ return glm::max(glm::max(x, y), z);
+ }
+
+ template <typename T, template <typename> class C>
+ GLM_FUNC_QUALIFIER C<T> max
+ (
+ C<T> const & x,
+ C<T> const & y,
+ C<T> const & z
+ )
+ {
+ return glm::max(glm::max(x, y), z);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER T max
+ (
+ T const & x,
+ T const & y,
+ T const & z,
+ T const & w
+ )
+ {
+ return glm::max(glm::max(x, y), glm::max(z, w));
+ }
+
+ template <typename T, template <typename> class C>
+ GLM_FUNC_QUALIFIER C<T> max
+ (
+ C<T> const & x,
+ typename C<T>::T const & y,
+ typename C<T>::T const & z,
+ typename C<T>::T const & w
+ )
+ {
+ return glm::max(glm::max(x, y), glm::max(z, w));
+ }
+
+ template <typename T, template <typename> class C>
+ GLM_FUNC_QUALIFIER C<T> max
+ (
+ C<T> const & x,
+ C<T> const & y,
+ C<T> const & z,
+ C<T> const & w
+ )
+ {
+ return glm::max(glm::max(x, y), glm::max(z, w));
+ }
+
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtx/fast_exponential.hpp b/src/third_party/glm/glm/gtx/fast_exponential.hpp
new file mode 100644
index 0000000..ed64a27
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/fast_exponential.hpp
@@ -0,0 +1,91 @@
+/// @ref gtx_fast_exponential
+/// @file glm/gtx/fast_exponential.hpp
+///
+/// @see core (dependence)
+/// @see gtx_half_float (dependence)
+///
+/// @defgroup gtx_fast_exponential GLM_GTX_fast_exponential
+/// @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.
+
+#pragma once
+
+// Dependency:
+#include "../glm.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_fast_exponential extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_fast_exponential
+ /// @{
+
+ /// Faster than the common pow function but less accurate.
+ /// @see gtx_fast_exponential
+ template <typename genType>
+ GLM_FUNC_DECL genType fastPow(genType x, genType y);
+
+ /// Faster than the common pow function but less accurate.
+ /// @see gtx_fast_exponential
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> fastPow(vecType<T, P> const & x, vecType<T, P> const & y);
+
+ /// Faster than the common pow function but less accurate.
+ /// @see gtx_fast_exponential
+ template <typename genTypeT, typename genTypeU>
+ GLM_FUNC_DECL genTypeT fastPow(genTypeT x, genTypeU y);
+
+ /// Faster than the common pow function but less accurate.
+ /// @see gtx_fast_exponential
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> fastPow(vecType<T, P> const & x);
+
+ /// Faster than the common exp function but less accurate.
+ /// @see gtx_fast_exponential
+ template <typename T>
+ GLM_FUNC_DECL T fastExp(T x);
+
+ /// Faster than the common exp function but less accurate.
+ /// @see gtx_fast_exponential
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> fastExp(vecType<T, P> const & x);
+
+ /// Faster than the common log function but less accurate.
+ /// @see gtx_fast_exponential
+ template <typename T>
+ GLM_FUNC_DECL T fastLog(T x);
+
+ /// Faster than the common exp2 function but less accurate.
+ /// @see gtx_fast_exponential
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> fastLog(vecType<T, P> const & x);
+
+ /// Faster than the common exp2 function but less accurate.
+ /// @see gtx_fast_exponential
+ template <typename T>
+ GLM_FUNC_DECL T fastExp2(T x);
+
+ /// Faster than the common exp2 function but less accurate.
+ /// @see gtx_fast_exponential
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> fastExp2(vecType<T, P> const & x);
+
+ /// Faster than the common log2 function but less accurate.
+ /// @see gtx_fast_exponential
+ template <typename T>
+ GLM_FUNC_DECL T fastLog2(T x);
+
+ /// Faster than the common log2 function but less accurate.
+ /// @see gtx_fast_exponential
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> fastLog2(vecType<T, P> const & x);
+
+ /// @}
+}//namespace glm
+
+#include "fast_exponential.inl"
diff --git a/src/third_party/glm/glm/gtx/fast_exponential.inl b/src/third_party/glm/glm/gtx/fast_exponential.inl
new file mode 100644
index 0000000..72f9f8f
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/fast_exponential.inl
@@ -0,0 +1,137 @@
+/// @ref gtx_fast_exponential
+/// @file glm/gtx/fast_exponential.inl
+
+namespace glm
+{
+ // fastPow:
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType fastPow(genType x, genType y)
+ {
+ return exp(y * log(x));
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> fastPow(vecType<T, P> const & x, vecType<T, P> const & y)
+ {
+ return exp(y * log(x));
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER T fastPow(T x, int y)
+ {
+ T f = static_cast<T>(1);
+ for(int i = 0; i < y; ++i)
+ f *= x;
+ return f;
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> fastPow(vecType<T, P> const & x, vecType<int, P> const & y)
+ {
+ vecType<T, P> Result(uninitialize);
+ for(length_t i = 0, n = x.length(); i < n; ++i)
+ Result[i] = fastPow(x[i], y[i]);
+ return Result;
+ }
+
+ // fastExp
+ // Note: This function provides accurate results only for value between -1 and 1, else avoid it.
+ template <typename T>
+ GLM_FUNC_QUALIFIER T fastExp(T x)
+ {
+ // This has a better looking and same performance in release mode than the following code. However, in debug mode it's slower.
+ // return 1.0f + x * (1.0f + x * 0.5f * (1.0f + x * 0.3333333333f * (1.0f + x * 0.25 * (1.0f + x * 0.2f))));
+ T x2 = x * x;
+ T x3 = x2 * x;
+ T x4 = x3 * x;
+ T x5 = x4 * x;
+ return T(1) + x + (x2 * T(0.5)) + (x3 * T(0.1666666667)) + (x4 * T(0.041666667)) + (x5 * T(0.008333333333));
+ }
+ /* // Try to handle all values of float... but often shower than std::exp, glm::floor and the loop kill the performance
+ GLM_FUNC_QUALIFIER float fastExp(float x)
+ {
+ const float e = 2.718281828f;
+ const float IntegerPart = floor(x);
+ const float FloatPart = x - IntegerPart;
+ float z = 1.f;
+
+ for(int i = 0; i < int(IntegerPart); ++i)
+ z *= e;
+
+ const float x2 = FloatPart * FloatPart;
+ const float x3 = x2 * FloatPart;
+ const float x4 = x3 * FloatPart;
+ const float x5 = x4 * FloatPart;
+ return z * (1.0f + FloatPart + (x2 * 0.5f) + (x3 * 0.1666666667f) + (x4 * 0.041666667f) + (x5 * 0.008333333333f));
+ }
+
+ // Increase accuracy on number bigger that 1 and smaller than -1 but it's not enough for high and negative numbers
+ GLM_FUNC_QUALIFIER float fastExp(float x)
+ {
+ // This has a better looking and same performance in release mode than the following code. However, in debug mode it's slower.
+ // return 1.0f + x * (1.0f + x * 0.5f * (1.0f + x * 0.3333333333f * (1.0f + x * 0.25 * (1.0f + x * 0.2f))));
+ float x2 = x * x;
+ float x3 = x2 * x;
+ float x4 = x3 * x;
+ float x5 = x4 * x;
+ float x6 = x5 * x;
+ float x7 = x6 * x;
+ float x8 = x7 * x;
+ return 1.0f + x + (x2 * 0.5f) + (x3 * 0.1666666667f) + (x4 * 0.041666667f) + (x5 * 0.008333333333f)+ (x6 * 0.00138888888888f) + (x7 * 0.000198412698f) + (x8 * 0.0000248015873f);;
+ }
+ */
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> fastExp(vecType<T, P> const & x)
+ {
+ return detail::functor1<T, T, P, vecType>::call(fastExp, x);
+ }
+
+ // fastLog
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType fastLog(genType x)
+ {
+ return std::log(x);
+ }
+
+ /* Slower than the VC7.1 function...
+ GLM_FUNC_QUALIFIER float fastLog(float x)
+ {
+ float y1 = (x - 1.0f) / (x + 1.0f);
+ float y2 = y1 * y1;
+ return 2.0f * y1 * (1.0f + y2 * (0.3333333333f + y2 * (0.2f + y2 * 0.1428571429f)));
+ }
+ */
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> fastLog(vecType<T, P> const & x)
+ {
+ return detail::functor1<T, T, P, vecType>::call(fastLog, x);
+ }
+
+ //fastExp2, ln2 = 0.69314718055994530941723212145818f
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType fastExp2(genType x)
+ {
+ return fastExp(0.69314718055994530941723212145818f * x);
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> fastExp2(vecType<T, P> const & x)
+ {
+ return detail::functor1<T, T, P, vecType>::call(fastExp2, x);
+ }
+
+ // fastLog2, ln2 = 0.69314718055994530941723212145818f
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType fastLog2(genType x)
+ {
+ return fastLog(x) / 0.69314718055994530941723212145818f;
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> fastLog2(vecType<T, P> const & x)
+ {
+ return detail::functor1<T, T, P, vecType>::call(fastLog2, x);
+ }
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtx/fast_square_root.hpp b/src/third_party/glm/glm/gtx/fast_square_root.hpp
new file mode 100644
index 0000000..35aa7f3
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/fast_square_root.hpp
@@ -0,0 +1,88 @@
+/// @ref gtx_fast_square_root
+/// @file glm/gtx/fast_square_root.hpp
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_fast_square_root GLM_GTX_fast_square_root
+/// @ingroup gtx
+///
+/// @brief Fast but less accurate implementations of square root based functions.
+/// - Sqrt optimisation based on Newton's method,
+/// www.gamedev.net/community/forums/topic.asp?topic id=139956
+///
+/// <glm/gtx/fast_square_root.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependency:
+#include "../common.hpp"
+#include "../exponential.hpp"
+#include "../geometric.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_fast_square_root extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_fast_square_root
+ /// @{
+
+ /// Faster than the common sqrt function but less accurate.
+ ///
+ /// @see gtx_fast_square_root extension.
+ template <typename genType>
+ GLM_FUNC_DECL genType fastSqrt(genType x);
+
+ /// Faster than the common sqrt function but less accurate.
+ ///
+ /// @see gtx_fast_square_root extension.
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> fastSqrt(vecType<T, P> const & x);
+
+ /// Faster than the common inversesqrt function but less accurate.
+ ///
+ /// @see gtx_fast_square_root extension.
+ template <typename genType>
+ GLM_FUNC_DECL genType fastInverseSqrt(genType x);
+
+ /// Faster than the common inversesqrt function but less accurate.
+ ///
+ /// @see gtx_fast_square_root extension.
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> fastInverseSqrt(vecType<T, P> const & x);
+
+ /// Faster than the common length function but less accurate.
+ ///
+ /// @see gtx_fast_square_root extension.
+ template <typename genType>
+ GLM_FUNC_DECL genType fastLength(genType x);
+
+ /// Faster than the common length function but less accurate.
+ ///
+ /// @see gtx_fast_square_root extension.
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL T fastLength(vecType<T, P> const & x);
+
+ /// Faster than the common distance function but less accurate.
+ ///
+ /// @see gtx_fast_square_root extension.
+ template <typename genType>
+ GLM_FUNC_DECL genType fastDistance(genType x, genType y);
+
+ /// Faster than the common distance function but less accurate.
+ ///
+ /// @see gtx_fast_square_root extension.
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL T fastDistance(vecType<T, P> const & x, vecType<T, P> const & y);
+
+ /// Faster than the common normalize function but less accurate.
+ ///
+ /// @see gtx_fast_square_root extension.
+ template <typename genType>
+ GLM_FUNC_DECL genType fastNormalize(genType const & x);
+
+ /// @}
+}// namespace glm
+
+#include "fast_square_root.inl"
diff --git a/src/third_party/glm/glm/gtx/fast_square_root.inl b/src/third_party/glm/glm/gtx/fast_square_root.inl
new file mode 100644
index 0000000..73950ae
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/fast_square_root.inl
@@ -0,0 +1,81 @@
+/// @ref gtx_fast_square_root
+/// @file glm/gtx/fast_square_root.inl
+
+namespace glm
+{
+ // fastSqrt
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType fastSqrt(genType x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'fastSqrt' only accept floating-point input");
+
+ return genType(1) / fastInverseSqrt(x);
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> fastSqrt(vecType<T, P> const & x)
+ {
+ return detail::functor1<T, T, P, vecType>::call(fastSqrt, x);
+ }
+
+ // fastInversesqrt
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType fastInverseSqrt(genType x)
+ {
+# ifdef __CUDACC__ // Wordaround for a CUDA compiler bug up to CUDA6
+ tvec1<T, P> tmp(detail::compute_inversesqrt<tvec1, genType, lowp, detail::is_aligned<lowp>::value>::call(tvec1<genType, lowp>(x)));
+ return tmp.x;
+# else
+ return detail::compute_inversesqrt<tvec1, genType, highp, detail::is_aligned<highp>::value>::call(tvec1<genType, lowp>(x)).x;
+# endif
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> fastInverseSqrt(vecType<T, P> const & x)
+ {
+ return detail::compute_inversesqrt<vecType, T, P, detail::is_aligned<P>::value>::call(x);
+ }
+
+ // fastLength
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType fastLength(genType x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'fastLength' only accept floating-point inputs");
+
+ return abs(x);
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER T fastLength(vecType<T, P> const & x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'fastLength' only accept floating-point inputs");
+
+ return fastSqrt(dot(x, x));
+ }
+
+ // fastDistance
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType fastDistance(genType x, genType y)
+ {
+ return fastLength(y - x);
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER T fastDistance(vecType<T, P> const & x, vecType<T, P> const & y)
+ {
+ return fastLength(y - x);
+ }
+
+ // fastNormalize
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType fastNormalize(genType x)
+ {
+ return x > genType(0) ? genType(1) : -genType(1);
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> fastNormalize(vecType<T, P> const & x)
+ {
+ return x * fastInverseSqrt(dot(x, x));
+ }
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtx/fast_trigonometry.hpp b/src/third_party/glm/glm/gtx/fast_trigonometry.hpp
new file mode 100644
index 0000000..ccb1d22
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/fast_trigonometry.hpp
@@ -0,0 +1,75 @@
+/// @ref gtx_fast_trigonometry
+/// @file glm/gtx/fast_trigonometry.hpp
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_fast_trigonometry GLM_GTX_fast_trigonometry
+/// @ingroup gtx
+///
+/// @brief Fast but less accurate implementations of trigonometric functions.
+///
+/// <glm/gtx/fast_trigonometry.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependency:
+#include "../gtc/constants.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_fast_trigonometry extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_fast_trigonometry
+ /// @{
+
+ /// Wrap an angle to [0 2pi[
+ /// From GLM_GTX_fast_trigonometry extension.
+ template <typename T>
+ GLM_FUNC_DECL T wrapAngle(T angle);
+
+ /// Faster than the common sin function but less accurate.
+ /// From GLM_GTX_fast_trigonometry extension.
+ template <typename T>
+ GLM_FUNC_DECL T fastSin(T angle);
+
+ /// Faster than the common cos function but less accurate.
+ /// From GLM_GTX_fast_trigonometry extension.
+ template <typename T>
+ GLM_FUNC_DECL T fastCos(T angle);
+
+ /// Faster than the common tan function but less accurate.
+ /// Defined between -2pi and 2pi.
+ /// From GLM_GTX_fast_trigonometry extension.
+ template <typename T>
+ GLM_FUNC_DECL T fastTan(T angle);
+
+ /// Faster than the common asin function but less accurate.
+ /// Defined between -2pi and 2pi.
+ /// From GLM_GTX_fast_trigonometry extension.
+ template <typename T>
+ GLM_FUNC_DECL T fastAsin(T angle);
+
+ /// Faster than the common acos function but less accurate.
+ /// Defined between -2pi and 2pi.
+ /// From GLM_GTX_fast_trigonometry extension.
+ template <typename T>
+ GLM_FUNC_DECL T fastAcos(T angle);
+
+ /// Faster than the common atan function but less accurate.
+ /// Defined between -2pi and 2pi.
+ /// From GLM_GTX_fast_trigonometry extension.
+ template <typename T>
+ GLM_FUNC_DECL T fastAtan(T y, T x);
+
+ /// Faster than the common atan function but less accurate.
+ /// Defined between -2pi and 2pi.
+ /// From GLM_GTX_fast_trigonometry extension.
+ template <typename T>
+ GLM_FUNC_DECL T fastAtan(T angle);
+
+ /// @}
+}//namespace glm
+
+#include "fast_trigonometry.inl"
diff --git a/src/third_party/glm/glm/gtx/fast_trigonometry.inl b/src/third_party/glm/glm/gtx/fast_trigonometry.inl
new file mode 100644
index 0000000..f576c17
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/fast_trigonometry.inl
@@ -0,0 +1,143 @@
+/// @ref gtx_fast_trigonometry
+/// @file glm/gtx/fast_trigonometry.inl
+
+namespace glm{
+namespace detail
+{
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> taylorCos(vecType<T, P> const & x)
+ {
+ return static_cast<T>(1)
+ - (x * x) / 2.f
+ + (x * x * x * x) / 24.f
+ - (x * x * x * x * x * x) / 720.f
+ + (x * x * x * x * x * x * x * x) / 40320.f;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER T cos_52s(T x)
+ {
+ T const xx(x * x);
+ return (T(0.9999932946) + xx * (T(-0.4999124376) + xx * (T(0.0414877472) + xx * T(-0.0012712095))));
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> cos_52s(vecType<T, P> const & x)
+ {
+ return detail::functor1<T, T, P, vecType>::call(cos_52s, x);
+ }
+}//namespace detail
+
+ // wrapAngle
+ template <typename T>
+ GLM_FUNC_QUALIFIER T wrapAngle(T angle)
+ {
+ return abs<T>(mod<T>(angle, two_pi<T>()));
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> wrapAngle(vecType<T, P> const & x)
+ {
+ return detail::functor1<T, T, P, vecType>::call(wrapAngle, x);
+ }
+
+ // cos
+ template <typename T>
+ GLM_FUNC_QUALIFIER T fastCos(T x)
+ {
+ T const angle(wrapAngle<T>(x));
+
+ if(angle < half_pi<T>())
+ return detail::cos_52s(angle);
+ if(angle < pi<T>())
+ return -detail::cos_52s(pi<T>() - angle);
+ if(angle < (T(3) * half_pi<T>()))
+ return -detail::cos_52s(angle - pi<T>());
+
+ return detail::cos_52s(two_pi<T>() - angle);
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> fastCos(vecType<T, P> const & x)
+ {
+ return detail::functor1<T, T, P, vecType>::call(fastCos, x);
+ }
+
+ // sin
+ template <typename T>
+ GLM_FUNC_QUALIFIER T fastSin(T x)
+ {
+ return fastCos<T>(half_pi<T>() - x);
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> fastSin(vecType<T, P> const & x)
+ {
+ return detail::functor1<T, T, P, vecType>::call(fastSin, x);
+ }
+
+ // tan
+ template <typename T>
+ GLM_FUNC_QUALIFIER T fastTan(T x)
+ {
+ return x + (x * x * x * T(0.3333333333)) + (x * x * x * x * x * T(0.1333333333333)) + (x * x * x * x * x * x * x * T(0.0539682539));
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> fastTan(vecType<T, P> const & x)
+ {
+ return detail::functor1<T, T, P, vecType>::call(fastTan, x);
+ }
+
+ // asin
+ template <typename T>
+ GLM_FUNC_QUALIFIER T fastAsin(T x)
+ {
+ return x + (x * x * x * T(0.166666667)) + (x * x * x * x * x * T(0.075)) + (x * x * x * x * x * x * x * T(0.0446428571)) + (x * x * x * x * x * x * x * x * x * T(0.0303819444));// + (x * x * x * x * x * x * x * x * x * x * x * T(0.022372159));
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> fastAsin(vecType<T, P> const & x)
+ {
+ return detail::functor1<T, T, P, vecType>::call(fastAsin, x);
+ }
+
+ // acos
+ template <typename T>
+ GLM_FUNC_QUALIFIER T fastAcos(T x)
+ {
+ return T(1.5707963267948966192313216916398) - fastAsin(x); //(PI / 2)
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> fastAcos(vecType<T, P> const & x)
+ {
+ return detail::functor1<T, T, P, vecType>::call(fastAcos, x);
+ }
+
+ // atan
+ template <typename T>
+ GLM_FUNC_QUALIFIER T fastAtan(T y, T x)
+ {
+ T sgn = sign(y) * sign(x);
+ return abs(fastAtan(y / x)) * sgn;
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> fastAtan(vecType<T, P> const & y, vecType<T, P> const & x)
+ {
+ return detail::functor2<T, P, vecType>::call(fastAtan, y, x);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER T fastAtan(T x)
+ {
+ return x - (x * x * x * T(0.333333333333)) + (x * x * x * x * x * T(0.2)) - (x * x * x * x * x * x * x * T(0.1428571429)) + (x * x * x * x * x * x * x * x * x * T(0.111111111111)) - (x * x * x * x * x * x * x * x * x * x * x * T(0.0909090909));
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> fastAtan(vecType<T, P> const & x)
+ {
+ return detail::functor1<T, T, P, vecType>::call(fastAtan, x);
+ }
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtx/float_notmalize.inl b/src/third_party/glm/glm/gtx/float_notmalize.inl
new file mode 100644
index 0000000..4dde025
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/float_notmalize.inl
@@ -0,0 +1,14 @@
+/// @ref gtx_float_normalize
+/// @file glm/gtx/float_normalize.inl
+
+#include <limits>
+
+namespace glm
+{
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<float, P> floatNormalize(vecType<T, P> const & v)
+ {
+ return vecType<float, P>(v) / static_cast<float>(std::numeric_limits<T>::max());
+ }
+
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtx/gradient_paint.hpp b/src/third_party/glm/glm/gtx/gradient_paint.hpp
new file mode 100644
index 0000000..de1f18d
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/gradient_paint.hpp
@@ -0,0 +1,48 @@
+/// @ref gtx_gradient_paint
+/// @file glm/gtx/gradient_paint.hpp
+///
+/// @see core (dependence)
+/// @see gtx_optimum_pow (dependence)
+///
+/// @defgroup gtx_gradient_paint GLM_GTX_gradient_paint
+/// @ingroup gtx
+///
+/// @brief Functions that return the color of procedural gradient for specific coordinates.
+/// <glm/gtx/gradient_paint.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependency:
+#include "../glm.hpp"
+#include "../gtx/optimum_pow.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_gradient_paint extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_gradient_paint
+ /// @{
+
+ /// Return a color from a radial gradient.
+ /// @see - gtx_gradient_paint
+ template <typename T, precision P>
+ GLM_FUNC_DECL T radialGradient(
+ tvec2<T, P> const & Center,
+ T const & Radius,
+ tvec2<T, P> const & Focal,
+ tvec2<T, P> const & Position);
+
+ /// Return a color from a linear gradient.
+ /// @see - gtx_gradient_paint
+ template <typename T, precision P>
+ GLM_FUNC_DECL T linearGradient(
+ tvec2<T, P> const & Point0,
+ tvec2<T, P> const & Point1,
+ tvec2<T, P> const & Position);
+
+ /// @}
+}// namespace glm
+
+#include "gradient_paint.inl"
diff --git a/src/third_party/glm/glm/gtx/gradient_paint.inl b/src/third_party/glm/glm/gtx/gradient_paint.inl
new file mode 100644
index 0000000..aaa5ce1
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/gradient_paint.inl
@@ -0,0 +1,37 @@
+/// @ref gtx_gradient_paint
+/// @file glm/gtx/gradient_paint.inl
+
+namespace glm
+{
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER T radialGradient
+ (
+ tvec2<T, P> const & Center,
+ T const & Radius,
+ tvec2<T, P> const & Focal,
+ tvec2<T, P> const & Position
+ )
+ {
+ tvec2<T, P> F = Focal - Center;
+ tvec2<T, P> D = Position - Focal;
+ T Radius2 = pow2(Radius);
+ T Fx2 = pow2(F.x);
+ T Fy2 = pow2(F.y);
+
+ T Numerator = (D.x * F.x + D.y * F.y) + sqrt(Radius2 * (pow2(D.x) + pow2(D.y)) - pow2(D.x * F.y - D.y * F.x));
+ T Denominator = Radius2 - (Fx2 + Fy2);
+ return Numerator / Denominator;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER T linearGradient
+ (
+ tvec2<T, P> const & Point0,
+ tvec2<T, P> const & Point1,
+ tvec2<T, P> const & Position
+ )
+ {
+ tvec2<T, P> Dist = Point1 - Point0;
+ return (Dist.x * (Position.x - Point0.x) + Dist.y * (Position.y - Point0.y)) / glm::dot(Dist, Dist);
+ }
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtx/handed_coordinate_space.hpp b/src/third_party/glm/glm/gtx/handed_coordinate_space.hpp
new file mode 100644
index 0000000..2ee5175
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/handed_coordinate_space.hpp
@@ -0,0 +1,46 @@
+/// @ref gtx_handed_coordinate_space
+/// @file glm/gtx/handed_coordinate_space.hpp
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_handed_coordinate_space GLM_GTX_handed_coordinate_space
+/// @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.
+
+#pragma once
+
+// Dependency:
+#include "../glm.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_handed_coordinate_space extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_handed_coordinate_space
+ /// @{
+
+ //! Return if a trihedron right handed or not.
+ //! From GLM_GTX_handed_coordinate_space extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL bool rightHanded(
+ tvec3<T, P> const & tangent,
+ tvec3<T, P> const & binormal,
+ tvec3<T, P> const & normal);
+
+ //! Return if a trihedron left handed or not.
+ //! From GLM_GTX_handed_coordinate_space extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL bool leftHanded(
+ tvec3<T, P> const & tangent,
+ tvec3<T, P> const & binormal,
+ tvec3<T, P> const & normal);
+
+ /// @}
+}// namespace glm
+
+#include "handed_coordinate_space.inl"
diff --git a/src/third_party/glm/glm/gtx/handed_coordinate_space.inl b/src/third_party/glm/glm/gtx/handed_coordinate_space.inl
new file mode 100644
index 0000000..2e55653
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/handed_coordinate_space.inl
@@ -0,0 +1,27 @@
+/// @ref gtx_handed_coordinate_space
+/// @file glm/gtx/handed_coordinate_space.inl
+
+namespace glm
+{
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER bool rightHanded
+ (
+ tvec3<T, P> const & tangent,
+ tvec3<T, P> const & binormal,
+ tvec3<T, P> const & normal
+ )
+ {
+ return dot(cross(normal, tangent), binormal) > T(0);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER bool leftHanded
+ (
+ tvec3<T, P> const & tangent,
+ tvec3<T, P> const & binormal,
+ tvec3<T, P> const & normal
+ )
+ {
+ return dot(cross(normal, tangent), binormal) < T(0);
+ }
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtx/hash.hpp b/src/third_party/glm/glm/gtx/hash.hpp
new file mode 100644
index 0000000..2262618
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/hash.hpp
@@ -0,0 +1,134 @@
+/// @ref gtx_hash
+/// @file glm/gtx/hash.hpp
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_hash GLM_GTX_hash
+/// @ingroup gtx
+///
+/// @brief Add std::hash support for glm types
+///
+/// <glm/gtx/hash.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+#include <functional>
+
+#include "../vec2.hpp"
+#include "../vec3.hpp"
+#include "../vec4.hpp"
+#include "../gtc/vec1.hpp"
+
+#include "../gtc/quaternion.hpp"
+#include "../gtx/dual_quaternion.hpp"
+
+#include "../mat2x2.hpp"
+#include "../mat2x3.hpp"
+#include "../mat2x4.hpp"
+
+#include "../mat3x2.hpp"
+#include "../mat3x3.hpp"
+#include "../mat3x4.hpp"
+
+#include "../mat4x2.hpp"
+#include "../mat4x3.hpp"
+#include "../mat4x4.hpp"
+
+#if !GLM_HAS_CXX11_STL
+# error "GLM_GTX_hash requires C++11 standard library support"
+#endif
+
+namespace std
+{
+ template <typename T, glm::precision P>
+ struct hash<glm::tvec1<T,P> >
+ {
+ GLM_FUNC_DECL size_t operator()(glm::tvec1<T, P> const & v) const;
+ };
+
+ template <typename T, glm::precision P>
+ struct hash<glm::tvec2<T,P> >
+ {
+ GLM_FUNC_DECL size_t operator()(glm::tvec2<T, P> const & v) const;
+ };
+
+ template <typename T, glm::precision P>
+ struct hash<glm::tvec3<T,P> >
+ {
+ GLM_FUNC_DECL size_t operator()(glm::tvec3<T, P> const & v) const;
+ };
+
+ template <typename T, glm::precision P>
+ struct hash<glm::tvec4<T,P> >
+ {
+ GLM_FUNC_DECL size_t operator()(glm::tvec4<T, P> const & v) const;
+ };
+
+ template <typename T, glm::precision P>
+ struct hash<glm::tquat<T,P>>
+ {
+ GLM_FUNC_DECL size_t operator()(glm::tquat<T, P> const & q) const;
+ };
+
+ template <typename T, glm::precision P>
+ struct hash<glm::tdualquat<T,P> >
+ {
+ GLM_FUNC_DECL size_t operator()(glm::tdualquat<T,P> const & q) const;
+ };
+
+ template <typename T, glm::precision P>
+ struct hash<glm::tmat2x2<T,P> >
+ {
+ GLM_FUNC_DECL size_t operator()(glm::tmat2x2<T,P> const & m) const;
+ };
+
+ template <typename T, glm::precision P>
+ struct hash<glm::tmat2x3<T,P> >
+ {
+ GLM_FUNC_DECL size_t operator()(glm::tmat2x3<T,P> const & m) const;
+ };
+
+ template <typename T, glm::precision P>
+ struct hash<glm::tmat2x4<T,P> >
+ {
+ GLM_FUNC_DECL size_t operator()(glm::tmat2x4<T,P> const & m) const;
+ };
+
+ template <typename T, glm::precision P>
+ struct hash<glm::tmat3x2<T,P> >
+ {
+ GLM_FUNC_DECL size_t operator()(glm::tmat3x2<T,P> const & m) const;
+ };
+
+ template <typename T, glm::precision P>
+ struct hash<glm::tmat3x3<T,P> >
+ {
+ GLM_FUNC_DECL size_t operator()(glm::tmat3x3<T,P> const & m) const;
+ };
+
+ template <typename T, glm::precision P>
+ struct hash<glm::tmat3x4<T,P> >
+ {
+ GLM_FUNC_DECL size_t operator()(glm::tmat3x4<T,P> const & m) const;
+ };
+
+ template <typename T, glm::precision P>
+ struct hash<glm::tmat4x2<T,P> >
+ {
+ GLM_FUNC_DECL size_t operator()(glm::tmat4x2<T,P> const & m) const;
+ };
+
+ template <typename T, glm::precision P>
+ struct hash<glm::tmat4x3<T,P> >
+ {
+ GLM_FUNC_DECL size_t operator()(glm::tmat4x3<T,P> const & m) const;
+ };
+
+ template <typename T, glm::precision P>
+ struct hash<glm::tmat4x4<T,P> >
+ {
+ GLM_FUNC_DECL size_t operator()(glm::tmat4x4<T,P> const & m) const;
+ };
+} // namespace std
+
+#include "hash.inl"
diff --git a/src/third_party/glm/glm/gtx/hash.inl b/src/third_party/glm/glm/gtx/hash.inl
new file mode 100644
index 0000000..c42f4f0
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/hash.inl
@@ -0,0 +1,185 @@
+/// @ref gtx_hash
+/// @file glm/gtx/hash.inl
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_hash GLM_GTX_hash
+/// @ingroup gtx
+///
+/// @brief Add std::hash support for glm types
+///
+/// <glm/gtx/hash.inl> need to be included to use these functionalities.
+
+namespace glm {
+namespace detail
+{
+ GLM_INLINE void hash_combine(size_t &seed, size_t hash)
+ {
+ hash += 0x9e3779b9 + (seed << 6) + (seed >> 2);
+ seed ^= hash;
+ }
+}}
+
+namespace std
+{
+ template <typename T, glm::precision P>
+ GLM_FUNC_QUALIFIER size_t hash<glm::tvec1<T, P>>::operator()(glm::tvec1<T, P> const & v) const
+ {
+ hash<T> hasher;
+ return hasher(v.x);
+ }
+
+ template <typename T, glm::precision P>
+ GLM_FUNC_QUALIFIER size_t hash<glm::tvec2<T, P>>::operator()(glm::tvec2<T, P> const & v) const
+ {
+ size_t seed = 0;
+ hash<T> hasher;
+ glm::detail::hash_combine(seed, hasher(v.x));
+ glm::detail::hash_combine(seed, hasher(v.y));
+ return seed;
+ }
+
+ template <typename T, glm::precision P>
+ GLM_FUNC_QUALIFIER size_t hash<glm::tvec3<T, P>>::operator()(glm::tvec3<T, P> const & v) const
+ {
+ size_t seed = 0;
+ hash<T> hasher;
+ glm::detail::hash_combine(seed, hasher(v.x));
+ glm::detail::hash_combine(seed, hasher(v.y));
+ glm::detail::hash_combine(seed, hasher(v.z));
+ return seed;
+ }
+
+ template <typename T, glm::precision P>
+ GLM_FUNC_QUALIFIER size_t hash<glm::tvec4<T, P>>::operator()(glm::tvec4<T, P> const & v) const
+ {
+ size_t seed = 0;
+ hash<T> hasher;
+ glm::detail::hash_combine(seed, hasher(v.x));
+ glm::detail::hash_combine(seed, hasher(v.y));
+ glm::detail::hash_combine(seed, hasher(v.z));
+ glm::detail::hash_combine(seed, hasher(v.w));
+ return seed;
+ }
+
+ template <typename T, glm::precision P>
+ GLM_FUNC_QUALIFIER size_t hash<glm::tquat<T, P>>::operator()(glm::tquat<T,P> const & q) const
+ {
+ size_t seed = 0;
+ hash<T> hasher;
+ glm::detail::hash_combine(seed, hasher(q.x));
+ glm::detail::hash_combine(seed, hasher(q.y));
+ glm::detail::hash_combine(seed, hasher(q.z));
+ glm::detail::hash_combine(seed, hasher(q.w));
+ return seed;
+ }
+
+ template <typename T, glm::precision P>
+ GLM_FUNC_QUALIFIER size_t hash<glm::tdualquat<T, P>>::operator()(glm::tdualquat<T, P> const & q) const
+ {
+ size_t seed = 0;
+ hash<glm::tquat<T, P>> hasher;
+ glm::detail::hash_combine(seed, hasher(q.real));
+ glm::detail::hash_combine(seed, hasher(q.dual));
+ return seed;
+ }
+
+ template <typename T, glm::precision P>
+ GLM_FUNC_QUALIFIER size_t hash<glm::tmat2x2<T, P>>::operator()(glm::tmat2x2<T, P> const & m) const
+ {
+ size_t seed = 0;
+ hash<glm::tvec2<T, P>> hasher;
+ glm::detail::hash_combine(seed, hasher(m[0]));
+ glm::detail::hash_combine(seed, hasher(m[1]));
+ return seed;
+ }
+
+ template <typename T, glm::precision P>
+ GLM_FUNC_QUALIFIER size_t hash<glm::tmat2x3<T, P>>::operator()(glm::tmat2x3<T, P> const & m) const
+ {
+ size_t seed = 0;
+ hash<glm::tvec3<T, P>> hasher;
+ glm::detail::hash_combine(seed, hasher(m[0]));
+ glm::detail::hash_combine(seed, hasher(m[1]));
+ return seed;
+ }
+
+ template <typename T, glm::precision P>
+ GLM_FUNC_QUALIFIER size_t hash<glm::tmat2x4<T, P>>::operator()(glm::tmat2x4<T, P> const & m) const
+ {
+ size_t seed = 0;
+ hash<glm::tvec4<T, P>> hasher;
+ glm::detail::hash_combine(seed, hasher(m[0]));
+ glm::detail::hash_combine(seed, hasher(m[1]));
+ return seed;
+ }
+
+ template <typename T, glm::precision P>
+ GLM_FUNC_QUALIFIER size_t hash<glm::tmat3x2<T, P>>::operator()(glm::tmat3x2<T, P> const & m) const
+ {
+ size_t seed = 0;
+ hash<glm::tvec2<T, P>> hasher;
+ glm::detail::hash_combine(seed, hasher(m[0]));
+ glm::detail::hash_combine(seed, hasher(m[1]));
+ glm::detail::hash_combine(seed, hasher(m[2]));
+ return seed;
+ }
+
+ template <typename T, glm::precision P>
+ GLM_FUNC_QUALIFIER size_t hash<glm::tmat3x3<T, P>>::operator()(glm::tmat3x3<T, P> const & m) const
+ {
+ size_t seed = 0;
+ hash<glm::tvec3<T, P>> hasher;
+ glm::detail::hash_combine(seed, hasher(m[0]));
+ glm::detail::hash_combine(seed, hasher(m[1]));
+ glm::detail::hash_combine(seed, hasher(m[2]));
+ return seed;
+ }
+
+ template <typename T, glm::precision P>
+ GLM_FUNC_QUALIFIER size_t hash<glm::tmat3x4<T, P>>::operator()(glm::tmat3x4<T, P> const & m) const
+ {
+ size_t seed = 0;
+ hash<glm::tvec4<T, P>> hasher;
+ glm::detail::hash_combine(seed, hasher(m[0]));
+ glm::detail::hash_combine(seed, hasher(m[1]));
+ glm::detail::hash_combine(seed, hasher(m[2]));
+ return seed;
+ }
+
+ template <typename T, glm::precision P>
+ GLM_FUNC_QUALIFIER size_t hash<glm::tmat4x2<T,P>>::operator()(glm::tmat4x2<T,P> const & m) const
+ {
+ size_t seed = 0;
+ hash<glm::tvec2<T, P>> hasher;
+ glm::detail::hash_combine(seed, hasher(m[0]));
+ glm::detail::hash_combine(seed, hasher(m[1]));
+ glm::detail::hash_combine(seed, hasher(m[2]));
+ glm::detail::hash_combine(seed, hasher(m[3]));
+ return seed;
+ }
+
+ template <typename T, glm::precision P>
+ GLM_FUNC_QUALIFIER size_t hash<glm::tmat4x3<T,P>>::operator()(glm::tmat4x3<T,P> const & m) const
+ {
+ size_t seed = 0;
+ hash<glm::tvec3<T, P>> hasher;
+ glm::detail::hash_combine(seed, hasher(m[0]));
+ glm::detail::hash_combine(seed, hasher(m[1]));
+ glm::detail::hash_combine(seed, hasher(m[2]));
+ glm::detail::hash_combine(seed, hasher(m[3]));
+ return seed;
+ }
+
+ template <typename T, glm::precision P>
+ GLM_FUNC_QUALIFIER size_t hash<glm::tmat4x4<T,P>>::operator()(glm::tmat4x4<T, P> const & m) const
+ {
+ size_t seed = 0;
+ hash<glm::tvec4<T, P>> hasher;
+ glm::detail::hash_combine(seed, hasher(m[0]));
+ glm::detail::hash_combine(seed, hasher(m[1]));
+ glm::detail::hash_combine(seed, hasher(m[2]));
+ glm::detail::hash_combine(seed, hasher(m[3]));
+ return seed;
+ }
+}
diff --git a/src/third_party/glm/glm/gtx/integer.hpp b/src/third_party/glm/glm/gtx/integer.hpp
new file mode 100644
index 0000000..1173a58
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/integer.hpp
@@ -0,0 +1,72 @@
+/// @ref gtx_integer
+/// @file glm/gtx/integer.hpp
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_integer GLM_GTX_integer
+/// @ingroup gtx
+///
+/// @brief Add support for integer for core functions
+///
+/// <glm/gtx/integer.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependency:
+#include "../glm.hpp"
+#include "../gtc/integer.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_integer extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_integer
+ /// @{
+
+ //! Returns x raised to the y power.
+ //! From GLM_GTX_integer extension.
+ GLM_FUNC_DECL int pow(int x, int y);
+
+ //! Returns the positive square root of x.
+ //! From GLM_GTX_integer extension.
+ GLM_FUNC_DECL int sqrt(int x);
+
+ //! Returns the floor log2 of x.
+ //! From GLM_GTX_integer extension.
+ GLM_FUNC_DECL unsigned int floor_log2(unsigned int x);
+
+ //! Modulus. Returns x - y * floor(x / y) for each component in x using the floating point value y.
+ //! From GLM_GTX_integer extension.
+ GLM_FUNC_DECL int mod(int x, int y);
+
+ //! Return the factorial value of a number (!12 max, integer only)
+ //! From GLM_GTX_integer extension.
+ template <typename genType>
+ GLM_FUNC_DECL genType factorial(genType const & x);
+
+ //! 32bit signed integer.
+ //! From GLM_GTX_integer extension.
+ typedef signed int sint;
+
+ //! Returns x raised to the y power.
+ //! From GLM_GTX_integer extension.
+ GLM_FUNC_DECL uint pow(uint x, uint y);
+
+ //! Returns the positive square root of x.
+ //! From GLM_GTX_integer extension.
+ GLM_FUNC_DECL uint sqrt(uint x);
+
+ //! Modulus. Returns x - y * floor(x / y) for each component in x using the floating point value y.
+ //! From GLM_GTX_integer extension.
+ GLM_FUNC_DECL uint mod(uint x, uint y);
+
+ //! Returns the number of leading zeros.
+ //! From GLM_GTX_integer extension.
+ GLM_FUNC_DECL uint nlz(uint x);
+
+ /// @}
+}//namespace glm
+
+#include "integer.inl"
diff --git a/src/third_party/glm/glm/gtx/integer.inl b/src/third_party/glm/glm/gtx/integer.inl
new file mode 100644
index 0000000..3a479e6
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/integer.inl
@@ -0,0 +1,182 @@
+/// @ref gtx_integer
+/// @file glm/gtx/integer.inl
+
+namespace glm
+{
+ // pow
+ GLM_FUNC_QUALIFIER int pow(int x, int y)
+ {
+ if(y == 0)
+ return 1;
+ int result = x;
+ for(int i = 1; i < y; ++i)
+ result *= x;
+ return result;
+ }
+
+ // sqrt: From Christopher J. Musial, An integer square root, Graphics Gems, 1990, page 387
+ GLM_FUNC_QUALIFIER int sqrt(int x)
+ {
+ if(x <= 1) return x;
+
+ int NextTrial = x >> 1;
+ int CurrentAnswer;
+
+ do
+ {
+ CurrentAnswer = NextTrial;
+ NextTrial = (NextTrial + x / NextTrial) >> 1;
+ } while(NextTrial < CurrentAnswer);
+
+ return CurrentAnswer;
+ }
+
+// Henry Gordon Dietz: http://aggregate.org/MAGIC/
+namespace detail
+{
+ GLM_FUNC_QUALIFIER unsigned int ones32(unsigned int x)
+ {
+ /* 32-bit recursive reduction using SWAR...
+ but first step is mapping 2-bit values
+ into sum of 2 1-bit values in sneaky way
+ */
+ x -= ((x >> 1) & 0x55555555);
+ x = (((x >> 2) & 0x33333333) + (x & 0x33333333));
+ x = (((x >> 4) + x) & 0x0f0f0f0f);
+ x += (x >> 8);
+ x += (x >> 16);
+ return(x & 0x0000003f);
+ }
+}//namespace detail
+
+ // Henry Gordon Dietz: http://aggregate.org/MAGIC/
+/*
+ GLM_FUNC_QUALIFIER unsigned int floor_log2(unsigned int x)
+ {
+ x |= (x >> 1);
+ x |= (x >> 2);
+ x |= (x >> 4);
+ x |= (x >> 8);
+ x |= (x >> 16);
+
+ return _detail::ones32(x) >> 1;
+ }
+*/
+ // mod
+ GLM_FUNC_QUALIFIER int mod(int x, int y)
+ {
+ return x - y * (x / y);
+ }
+
+ // factorial (!12 max, integer only)
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType factorial(genType const & x)
+ {
+ genType Temp = x;
+ genType Result;
+ for(Result = 1; Temp > 1; --Temp)
+ Result *= Temp;
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> factorial(
+ tvec2<T, P> const & x)
+ {
+ return tvec2<T, P>(
+ factorial(x.x),
+ factorial(x.y));
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> factorial(
+ tvec3<T, P> const & x)
+ {
+ return tvec3<T, P>(
+ factorial(x.x),
+ factorial(x.y),
+ factorial(x.z));
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> factorial(
+ tvec4<T, P> const & x)
+ {
+ return tvec4<T, P>(
+ factorial(x.x),
+ factorial(x.y),
+ factorial(x.z),
+ factorial(x.w));
+ }
+
+ GLM_FUNC_QUALIFIER uint pow(uint x, uint y)
+ {
+ uint result = x;
+ for(uint i = 1; i < y; ++i)
+ result *= x;
+ return result;
+ }
+
+ GLM_FUNC_QUALIFIER uint sqrt(uint x)
+ {
+ if(x <= 1) return x;
+
+ uint NextTrial = x >> 1;
+ uint CurrentAnswer;
+
+ do
+ {
+ CurrentAnswer = NextTrial;
+ NextTrial = (NextTrial + x / NextTrial) >> 1;
+ } while(NextTrial < CurrentAnswer);
+
+ return CurrentAnswer;
+ }
+
+ GLM_FUNC_QUALIFIER uint mod(uint x, uint y)
+ {
+ return x - y * (x / y);
+ }
+
+#if(GLM_COMPILER & (GLM_COMPILER_VC | GLM_COMPILER_GCC))
+
+ GLM_FUNC_QUALIFIER unsigned int nlz(unsigned int x)
+ {
+ return 31u - findMSB(x);
+ }
+
+#else
+
+ // Hackers Delight: http://www.hackersdelight.org/HDcode/nlz.c.txt
+ GLM_FUNC_QUALIFIER unsigned int nlz(unsigned int x)
+ {
+ int y, m, n;
+
+ y = -int(x >> 16); // If left half of x is 0,
+ m = (y >> 16) & 16; // set n = 16. If left half
+ n = 16 - m; // is nonzero, set n = 0 and
+ x = x >> m; // shift x right 16.
+ // Now x is of the form 0000xxxx.
+ y = x - 0x100; // If positions 8-15 are 0,
+ m = (y >> 16) & 8; // add 8 to n and shift x left 8.
+ n = n + m;
+ x = x << m;
+
+ y = x - 0x1000; // If positions 12-15 are 0,
+ m = (y >> 16) & 4; // add 4 to n and shift x left 4.
+ n = n + m;
+ x = x << m;
+
+ y = x - 0x4000; // If positions 14-15 are 0,
+ m = (y >> 16) & 2; // add 2 to n and shift x left 2.
+ n = n + m;
+ x = x << m;
+
+ y = x >> 14; // Set y = 0, 1, 2, or 3.
+ m = y & ~(y >> 1); // Set m = 0, 1, 2, or 2 resp.
+ return unsigned(n + 2 - m);
+ }
+
+#endif//(GLM_COMPILER)
+
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtx/intersect.hpp b/src/third_party/glm/glm/gtx/intersect.hpp
new file mode 100644
index 0000000..33b6e99
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/intersect.hpp
@@ -0,0 +1,87 @@
+/// @ref gtx_intersect
+/// @file glm/gtx/intersect.hpp
+///
+/// @see core (dependence)
+/// @see gtx_closest_point (dependence)
+///
+/// @defgroup gtx_intersect GLM_GTX_intersect
+/// @ingroup gtx
+///
+/// @brief Add intersection functions
+///
+/// <glm/gtx/intersect.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependency:
+#include <cfloat>
+#include <limits>
+#include "../glm.hpp"
+#include "../geometric.hpp"
+#include "../gtx/closest_point.hpp"
+#include "../gtx/vector_query.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_closest_point extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_intersect
+ /// @{
+
+ //! Compute the intersection of a ray and a plane.
+ //! Ray direction and plane normal must be unit length.
+ //! From GLM_GTX_intersect extension.
+ template <typename genType>
+ GLM_FUNC_DECL bool intersectRayPlane(
+ genType const & orig, genType const & dir,
+ genType const & planeOrig, genType const & planeNormal,
+ typename genType::value_type & intersectionDistance);
+
+ //! Compute the intersection of a ray and a triangle.
+ //! From GLM_GTX_intersect extension.
+ template <typename genType>
+ GLM_FUNC_DECL bool intersectRayTriangle(
+ genType const & orig, genType const & dir,
+ genType const & vert0, genType const & vert1, genType const & vert2,
+ genType & baryPosition);
+
+ //! Compute the intersection of a line and a triangle.
+ //! From GLM_GTX_intersect extension.
+ template <typename genType>
+ GLM_FUNC_DECL bool intersectLineTriangle(
+ genType const & orig, genType const & dir,
+ genType const & vert0, genType const & vert1, genType const & vert2,
+ genType & position);
+
+ //! Compute the intersection distance of a ray and a sphere.
+ //! The ray direction vector is unit length.
+ //! From GLM_GTX_intersect extension.
+ template <typename genType>
+ GLM_FUNC_DECL bool intersectRaySphere(
+ genType const & rayStarting, genType const & rayNormalizedDirection,
+ genType const & sphereCenter, typename genType::value_type const sphereRadiusSquered,
+ typename genType::value_type & intersectionDistance);
+
+ //! Compute the intersection of a ray and a sphere.
+ //! From GLM_GTX_intersect extension.
+ template <typename genType>
+ GLM_FUNC_DECL bool intersectRaySphere(
+ genType const & rayStarting, genType const & rayNormalizedDirection,
+ genType const & sphereCenter, const typename genType::value_type sphereRadius,
+ genType & intersectionPosition, genType & intersectionNormal);
+
+ //! Compute the intersection of a line and a sphere.
+ //! From GLM_GTX_intersect extension
+ template <typename genType>
+ GLM_FUNC_DECL bool intersectLineSphere(
+ genType const & point0, genType const & point1,
+ genType const & sphereCenter, typename genType::value_type sphereRadius,
+ genType & intersectionPosition1, genType & intersectionNormal1,
+ genType & intersectionPosition2 = genType(), genType & intersectionNormal2 = genType());
+
+ /// @}
+}//namespace glm
+
+#include "intersect.inl"
diff --git a/src/third_party/glm/glm/gtx/intersect.inl b/src/third_party/glm/glm/gtx/intersect.inl
new file mode 100644
index 0000000..0bb7d7f
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/intersect.inl
@@ -0,0 +1,170 @@
+/// @ref gtx_intersect
+/// @file glm/gtx/intersect.inl
+
+namespace glm
+{
+ template <typename genType>
+ GLM_FUNC_QUALIFIER bool intersectRayPlane
+ (
+ genType const & orig, genType const & dir,
+ genType const & planeOrig, genType const & planeNormal,
+ typename genType::value_type & intersectionDistance
+ )
+ {
+ typename genType::value_type d = glm::dot(dir, planeNormal);
+ typename genType::value_type Epsilon = std::numeric_limits<typename genType::value_type>::epsilon();
+
+ if(d < Epsilon)
+ {
+ intersectionDistance = glm::dot(planeOrig - orig, planeNormal) / d;
+ return true;
+ }
+
+ return false;
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER bool intersectRayTriangle
+ (
+ genType const & orig, genType const & dir,
+ genType const & v0, genType const & v1, genType const & v2,
+ genType & baryPosition
+ )
+ {
+ genType e1 = v1 - v0;
+ genType e2 = v2 - v0;
+
+ genType p = glm::cross(dir, e2);
+
+ typename genType::value_type a = glm::dot(e1, p);
+
+ typename genType::value_type Epsilon = std::numeric_limits<typename genType::value_type>::epsilon();
+ if(a < Epsilon && a > -Epsilon)
+ return false;
+
+ typename genType::value_type f = typename genType::value_type(1.0f) / a;
+
+ genType s = orig - v0;
+ baryPosition.x = f * glm::dot(s, p);
+ if(baryPosition.x < typename genType::value_type(0.0f))
+ return false;
+ if(baryPosition.x > typename genType::value_type(1.0f))
+ return false;
+
+ genType q = glm::cross(s, e1);
+ baryPosition.y = f * glm::dot(dir, q);
+ if(baryPosition.y < typename genType::value_type(0.0f))
+ return false;
+ if(baryPosition.y + baryPosition.x > typename genType::value_type(1.0f))
+ return false;
+
+ baryPosition.z = f * glm::dot(e2, q);
+
+ return baryPosition.z >= typename genType::value_type(0.0f);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER bool intersectLineTriangle
+ (
+ genType const & orig, genType const & dir,
+ genType const & vert0, genType const & vert1, genType const & vert2,
+ genType & position
+ )
+ {
+ typename genType::value_type Epsilon = std::numeric_limits<typename genType::value_type>::epsilon();
+
+ genType edge1 = vert1 - vert0;
+ genType edge2 = vert2 - vert0;
+
+ genType pvec = cross(dir, edge2);
+
+ float det = dot(edge1, pvec);
+
+ if (det > -Epsilon && det < Epsilon)
+ return false;
+ float inv_det = typename genType::value_type(1) / det;
+
+ genType tvec = orig - vert0;
+
+ position.y = dot(tvec, pvec) * inv_det;
+ if (position.y < typename genType::value_type(0) || position.y > typename genType::value_type(1))
+ return false;
+
+ genType qvec = cross(tvec, edge1);
+
+ position.z = dot(dir, qvec) * inv_det;
+ if (position.z < typename genType::value_type(0) || position.y + position.z > typename genType::value_type(1))
+ return false;
+
+ position.x = dot(edge2, qvec) * inv_det;
+
+ return true;
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER bool intersectRaySphere
+ (
+ genType const & rayStarting, genType const & rayNormalizedDirection,
+ genType const & sphereCenter, const typename genType::value_type sphereRadiusSquered,
+ typename genType::value_type & intersectionDistance
+ )
+ {
+ typename genType::value_type Epsilon = std::numeric_limits<typename genType::value_type>::epsilon();
+ genType diff = sphereCenter - rayStarting;
+ typename genType::value_type t0 = dot(diff, rayNormalizedDirection);
+ typename genType::value_type dSquared = dot(diff, diff) - t0 * t0;
+ if( dSquared > sphereRadiusSquered )
+ {
+ return false;
+ }
+ typename genType::value_type t1 = sqrt( sphereRadiusSquered - dSquared );
+ intersectionDistance = t0 > t1 + Epsilon ? t0 - t1 : t0 + t1;
+ return intersectionDistance > Epsilon;
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER bool intersectRaySphere
+ (
+ genType const & rayStarting, genType const & rayNormalizedDirection,
+ genType const & sphereCenter, const typename genType::value_type sphereRadius,
+ genType & intersectionPosition, genType & intersectionNormal
+ )
+ {
+ typename genType::value_type distance;
+ if( intersectRaySphere( rayStarting, rayNormalizedDirection, sphereCenter, sphereRadius * sphereRadius, distance ) )
+ {
+ intersectionPosition = rayStarting + rayNormalizedDirection * distance;
+ intersectionNormal = (intersectionPosition - sphereCenter) / sphereRadius;
+ return true;
+ }
+ return false;
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER bool intersectLineSphere
+ (
+ genType const & point0, genType const & point1,
+ genType const & sphereCenter, typename genType::value_type sphereRadius,
+ genType & intersectionPoint1, genType & intersectionNormal1,
+ genType & intersectionPoint2, genType & intersectionNormal2
+ )
+ {
+ typename genType::value_type Epsilon = std::numeric_limits<typename genType::value_type>::epsilon();
+ genType dir = normalize(point1 - point0);
+ genType diff = sphereCenter - point0;
+ typename genType::value_type t0 = dot(diff, dir);
+ typename genType::value_type dSquared = dot(diff, diff) - t0 * t0;
+ if( dSquared > sphereRadius * sphereRadius )
+ {
+ return false;
+ }
+ typename genType::value_type t1 = sqrt( sphereRadius * sphereRadius - dSquared );
+ if( t0 < t1 + Epsilon )
+ t1 = -t1;
+ intersectionPoint1 = point0 + dir * (t0 - t1);
+ intersectionNormal1 = (intersectionPoint1 - sphereCenter) / sphereRadius;
+ intersectionPoint2 = point0 + dir * (t0 + t1);
+ intersectionNormal2 = (intersectionPoint2 - sphereCenter) / sphereRadius;
+ return true;
+ }
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtx/io.hpp b/src/third_party/glm/glm/gtx/io.hpp
new file mode 100644
index 0000000..6aa8415
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/io.hpp
@@ -0,0 +1,197 @@
+/// @ref gtx_io
+/// @file glm/gtx/io.hpp
+/// @author Jan P Springer (regnirpsj@gmail.com)
+///
+/// @see core (dependence)
+/// @see gtc_matrix_access (dependence)
+/// @see gtc_quaternion (dependence)
+///
+/// @defgroup gtx_io GLM_GTX_io
+/// @ingroup gtx
+///
+/// @brief std::[w]ostream support for glm types
+///
+/// std::[w]ostream support for glm types + precision/width/etc. manipulators
+/// based on howard hinnant's std::chrono io proposal
+/// [http://home.roadrunner.com/~hinnant/bloomington/chrono_io.html]
+///
+/// <glm/gtx/io.hpp> needs to be included to use these functionalities.
+
+#pragma once
+
+// Dependency:
+#include "../glm.hpp"
+#include "../gtx/quaternion.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_io extension included")
+#endif
+
+#include <iosfwd> // std::basic_ostream<> (fwd)
+#include <locale> // std::locale, std::locale::facet, std::locale::id
+#include <utility> // std::pair<>
+
+namespace glm
+{
+ /// @addtogroup gtx_io
+ /// @{
+
+ namespace io
+ {
+ enum order_type { column_major, row_major};
+
+ template <typename CTy>
+ class format_punct : public std::locale::facet
+ {
+ typedef CTy char_type;
+
+ public:
+
+ static std::locale::id id;
+
+ bool formatted;
+ unsigned precision;
+ unsigned width;
+ char_type separator;
+ char_type delim_left;
+ char_type delim_right;
+ char_type space;
+ char_type newline;
+ order_type order;
+
+ GLM_FUNC_DECL explicit format_punct(size_t a = 0);
+ GLM_FUNC_DECL explicit format_punct(format_punct const&);
+ };
+
+ template <typename CTy, typename CTr = std::char_traits<CTy> >
+ class basic_state_saver {
+
+ public:
+
+ GLM_FUNC_DECL explicit basic_state_saver(std::basic_ios<CTy,CTr>&);
+ GLM_FUNC_DECL ~basic_state_saver();
+
+ private:
+
+ typedef ::std::basic_ios<CTy,CTr> state_type;
+ typedef typename state_type::char_type char_type;
+ typedef ::std::ios_base::fmtflags flags_type;
+ typedef ::std::streamsize streamsize_type;
+ typedef ::std::locale const locale_type;
+
+ state_type& state_;
+ flags_type flags_;
+ streamsize_type precision_;
+ streamsize_type width_;
+ char_type fill_;
+ locale_type locale_;
+
+ GLM_FUNC_DECL basic_state_saver& operator=(basic_state_saver const&);
+ };
+
+ typedef basic_state_saver<char> state_saver;
+ typedef basic_state_saver<wchar_t> wstate_saver;
+
+ template <typename CTy, typename CTr = std::char_traits<CTy> >
+ class basic_format_saver
+ {
+ public:
+
+ GLM_FUNC_DECL explicit basic_format_saver(std::basic_ios<CTy,CTr>&);
+ GLM_FUNC_DECL ~basic_format_saver();
+
+ private:
+
+ basic_state_saver<CTy> const bss_;
+
+ GLM_FUNC_DECL basic_format_saver& operator=(basic_format_saver const&);
+ };
+
+ typedef basic_format_saver<char> format_saver;
+ typedef basic_format_saver<wchar_t> wformat_saver;
+
+ struct precision
+ {
+ unsigned value;
+
+ GLM_FUNC_DECL explicit precision(unsigned);
+ };
+
+ struct width
+ {
+ unsigned value;
+
+ GLM_FUNC_DECL explicit width(unsigned);
+ };
+
+ template <typename CTy>
+ struct delimeter
+ {
+ CTy value[3];
+
+ GLM_FUNC_DECL explicit delimeter(CTy /* left */, CTy /* right */, CTy /* separator */ = ',');
+ };
+
+ struct order
+ {
+ order_type value;
+
+ GLM_FUNC_DECL explicit order(order_type);
+ };
+
+ // functions, inlined (inline)
+
+ template <typename FTy, typename CTy, typename CTr>
+ FTy const& get_facet(std::basic_ios<CTy,CTr>&);
+ template <typename FTy, typename CTy, typename CTr>
+ std::basic_ios<CTy,CTr>& formatted(std::basic_ios<CTy,CTr>&);
+ template <typename FTy, typename CTy, typename CTr>
+ std::basic_ios<CTy,CTr>& unformattet(std::basic_ios<CTy,CTr>&);
+
+ template <typename CTy, typename CTr>
+ std::basic_ostream<CTy, CTr>& operator<<(std::basic_ostream<CTy, CTr>&, precision const&);
+ template <typename CTy, typename CTr>
+ std::basic_ostream<CTy, CTr>& operator<<(std::basic_ostream<CTy, CTr>&, width const&);
+ template <typename CTy, typename CTr>
+ std::basic_ostream<CTy, CTr>& operator<<(std::basic_ostream<CTy, CTr>&, delimeter<CTy> const&);
+ template <typename CTy, typename CTr>
+ std::basic_ostream<CTy, CTr>& operator<<(std::basic_ostream<CTy, CTr>&, order const&);
+ }//namespace io
+
+ template <typename CTy, typename CTr, typename T, precision P>
+ GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tquat<T,P> const&);
+ template <typename CTy, typename CTr, typename T, precision P>
+ GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tvec1<T,P> const&);
+ template <typename CTy, typename CTr, typename T, precision P>
+ GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tvec2<T,P> const&);
+ template <typename CTy, typename CTr, typename T, precision P>
+ GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tvec3<T,P> const&);
+ template <typename CTy, typename CTr, typename T, precision P>
+ GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tvec4<T,P> const&);
+ template <typename CTy, typename CTr, typename T, precision P>
+ GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tmat2x2<T,P> const&);
+ template <typename CTy, typename CTr, typename T, precision P>
+ GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tmat2x3<T,P> const&);
+ template <typename CTy, typename CTr, typename T, precision P>
+ GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tmat2x4<T,P> const&);
+ template <typename CTy, typename CTr, typename T, precision P>
+ GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tmat3x2<T,P> const&);
+ template <typename CTy, typename CTr, typename T, precision P>
+ GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tmat3x3<T,P> const&);
+ template <typename CTy, typename CTr, typename T, precision P>
+ GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tmat3x4<T,P> const&);
+ template <typename CTy, typename CTr, typename T, precision P>
+ GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tmat4x2<T,P> const&);
+ template <typename CTy, typename CTr, typename T, precision P>
+ GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tmat4x3<T,P> const&);
+ template <typename CTy, typename CTr, typename T, precision P>
+ GLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, tmat4x4<T,P> const&);
+
+ template <typename CTy, typename CTr, typename T, precision P>
+ GLM_FUNC_DECL std::basic_ostream<CTy,CTr> & operator<<(std::basic_ostream<CTy,CTr> &,
+ std::pair<tmat4x4<T,P> const, tmat4x4<T,P> const> const &);
+
+ /// @}
+}//namespace glm
+
+#include "io.inl"
diff --git a/src/third_party/glm/glm/gtx/io.inl b/src/third_party/glm/glm/gtx/io.inl
new file mode 100644
index 0000000..9b70a5f
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/io.inl
@@ -0,0 +1,441 @@
+/// @ref gtx_io
+/// @file glm/gtx/io.inl
+/// @author Jan P Springer (regnirpsj@gmail.com)
+
+#include <iomanip> // std::fixed, std::setfill<>, std::setprecision, std::right, std::setw
+#include <ostream> // std::basic_ostream<>
+#include "../gtc/matrix_access.hpp" // glm::col, glm::row
+#include "../gtx/type_trait.hpp" // glm::type<>
+
+namespace glm{
+namespace io
+{
+ template <typename CTy>
+ GLM_FUNC_QUALIFIER format_punct<CTy>::format_punct(size_t a)
+ : std::locale::facet(a)
+ , formatted(true)
+ , precision(3)
+ , width(1 + 4 + 1 + precision)
+ , separator(',')
+ , delim_left('[')
+ , delim_right(']')
+ , space(' ')
+ , newline('\n')
+ , order(column_major)
+ {}
+
+ template <typename CTy>
+ GLM_FUNC_QUALIFIER format_punct<CTy>::format_punct(format_punct const& a)
+ : std::locale::facet(0)
+ , formatted(a.formatted)
+ , precision(a.precision)
+ , width(a.width)
+ , separator(a.separator)
+ , delim_left(a.delim_left)
+ , delim_right(a.delim_right)
+ , space(a.space)
+ , newline(a.newline)
+ , order(a.order)
+ {}
+
+ template <typename CTy> std::locale::id format_punct<CTy>::id;
+
+ template <typename CTy, typename CTr>
+ GLM_FUNC_QUALIFIER basic_state_saver<CTy, CTr>::basic_state_saver(std::basic_ios<CTy, CTr>& a)
+ : state_(a)
+ , flags_(a.flags())
+ , precision_(a.precision())
+ , width_(a.width())
+ , fill_(a.fill())
+ , locale_(a.getloc())
+ {}
+
+ template <typename CTy, typename CTr>
+ GLM_FUNC_QUALIFIER basic_state_saver<CTy, CTr>::~basic_state_saver()
+ {
+ state_.imbue(locale_);
+ state_.fill(fill_);
+ state_.width(width_);
+ state_.precision(precision_);
+ state_.flags(flags_);
+ }
+
+ template <typename CTy, typename CTr>
+ GLM_FUNC_QUALIFIER basic_format_saver<CTy, CTr>::basic_format_saver(std::basic_ios<CTy, CTr>& a)
+ : bss_(a)
+ {
+ a.imbue(std::locale(a.getloc(), new format_punct<CTy>(get_facet<format_punct<CTy> >(a))));
+ }
+
+ template <typename CTy, typename CTr>
+ GLM_FUNC_QUALIFIER
+ basic_format_saver<CTy, CTr>::~basic_format_saver()
+ {}
+
+ GLM_FUNC_QUALIFIER precision::precision(unsigned a)
+ : value(a)
+ {}
+
+ GLM_FUNC_QUALIFIER width::width(unsigned a)
+ : value(a)
+ {}
+
+ template <typename CTy>
+ GLM_FUNC_QUALIFIER delimeter<CTy>::delimeter(CTy a, CTy b, CTy c)
+ : value()
+ {
+ value[0] = a;
+ value[1] = b;
+ value[2] = c;
+ }
+
+ GLM_FUNC_QUALIFIER order::order(order_type a)
+ : value(a)
+ {}
+
+ template <typename FTy, typename CTy, typename CTr>
+ GLM_FUNC_QUALIFIER FTy const& get_facet(std::basic_ios<CTy, CTr>& ios)
+ {
+ if(!std::has_facet<FTy>(ios.getloc()))
+ ios.imbue(std::locale(ios.getloc(), new FTy));
+
+ return std::use_facet<FTy>(ios.getloc());
+ }
+
+ template <typename CTy, typename CTr>
+ GLM_FUNC_QUALIFIER std::basic_ios<CTy, CTr>& formatted(std::basic_ios<CTy, CTr>& ios)
+ {
+ const_cast<format_punct<CTy>&>(get_facet<format_punct<CTy> >(ios)).formatted = true;
+ return ios;
+ }
+
+ template <typename CTy, typename CTr>
+ GLM_FUNC_QUALIFIER std::basic_ios<CTy, CTr>& unformatted(std::basic_ios<CTy, CTr>& ios)
+ {
+ const_cast<format_punct<CTy>&>(get_facet<format_punct<CTy> >(ios)).formatted = false;
+ return ios;
+ }
+
+ template <typename CTy, typename CTr>
+ GLM_FUNC_QUALIFIER std::basic_ostream<CTy, CTr>& operator<<(std::basic_ostream<CTy, CTr>& os, precision const& a)
+ {
+ const_cast<format_punct<CTy>&>(get_facet<format_punct<CTy> >(os)).precision = a.value;
+ return os;
+ }
+
+ template <typename CTy, typename CTr>
+ GLM_FUNC_QUALIFIER std::basic_ostream<CTy, CTr>& operator<<(std::basic_ostream<CTy, CTr>& os, width const& a)
+ {
+ const_cast<format_punct<CTy>&>(get_facet<format_punct<CTy> >(os)).width = a.value;
+ return os;
+ }
+
+ template <typename CTy, typename CTr>
+ GLM_FUNC_QUALIFIER std::basic_ostream<CTy, CTr>& operator<<(std::basic_ostream<CTy, CTr>& os, delimeter<CTy> const& a)
+ {
+ format_punct<CTy> & fmt(const_cast<format_punct<CTy>&>(get_facet<format_punct<CTy> >(os)));
+
+ fmt.delim_left = a.value[0];
+ fmt.delim_right = a.value[1];
+ fmt.separator = a.value[2];
+
+ return os;
+ }
+
+ template <typename CTy, typename CTr>
+ GLM_FUNC_QUALIFIER std::basic_ostream<CTy, CTr>& operator<<(std::basic_ostream<CTy, CTr>& os, order const& a)
+ {
+ const_cast<format_punct<CTy>&>(get_facet<format_punct<CTy> >(os)).order = a.value;
+ return os;
+ }
+} // namespace io
+
+namespace detail
+{
+ template <typename CTy, typename CTr, template <typename, precision> class V, typename T, precision P>
+ GLM_FUNC_QUALIFIER std::basic_ostream<CTy, CTr>&
+ print_vector_on(std::basic_ostream<CTy, CTr>& os, V<T,P> const& a)
+ {
+ typename std::basic_ostream<CTy, CTr>::sentry const cerberus(os);
+
+ if(cerberus)
+ {
+ io::format_punct<CTy> const & fmt(io::get_facet<io::format_punct<CTy> >(os));
+
+ length_t const& components(type<V, T, P>::components);
+
+ if(fmt.formatted)
+ {
+ io::basic_state_saver<CTy> const bss(os);
+
+ os << std::fixed << std::right << std::setprecision(fmt.precision) << std::setfill(fmt.space) << fmt.delim_left;
+
+ for(length_t i(0); i < components; ++i)
+ {
+ os << std::setw(fmt.width) << a[i];
+ if(components-1 != i)
+ os << fmt.separator;
+ }
+
+ os << fmt.delim_right;
+ }
+ else
+ {
+ for(length_t i(0); i < components; ++i)
+ {
+ os << a[i];
+
+ if(components-1 != i)
+ os << fmt.space;
+ }
+ }
+ }
+
+ return os;
+ }
+}//namespace detail
+
+ template <typename CTy, typename CTr, typename T, precision P>
+ GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, tquat<T,P> const& a)
+ {
+ return detail::print_vector_on(os, a);
+ }
+
+ template <typename CTy, typename CTr, typename T, precision P>
+ GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, tvec1<T,P> const& a)
+ {
+ return detail::print_vector_on(os, a);
+ }
+
+ template <typename CTy, typename CTr, typename T, precision P>
+ GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, tvec2<T,P> const& a)
+ {
+ return detail::print_vector_on(os, a);
+ }
+
+ template <typename CTy, typename CTr, typename T, precision P>
+ GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, tvec3<T,P> const& a)
+ {
+ return detail::print_vector_on(os, a);
+ }
+
+ template <typename CTy, typename CTr, typename T, precision P>
+ GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, tvec4<T,P> const& a)
+ {
+ return detail::print_vector_on(os, a);
+ }
+
+namespace detail
+{
+ template <typename CTy, typename CTr, template <typename, precision> class M, typename T, precision P>
+ GLM_FUNC_QUALIFIER std::basic_ostream<CTy, CTr>& print_matrix_on(std::basic_ostream<CTy, CTr>& os, M<T,P> const& a)
+ {
+ typename std::basic_ostream<CTy,CTr>::sentry const cerberus(os);
+
+ if(cerberus)
+ {
+ io::format_punct<CTy> const & fmt(io::get_facet<io::format_punct<CTy> >(os));
+
+ length_t const& cols(type<M, T, P>::cols);
+ length_t const& rows(type<M, T, P>::rows);
+
+ if(fmt.formatted)
+ {
+ os << fmt.newline << fmt.delim_left;
+
+ switch(fmt.order)
+ {
+ case io::column_major:
+ {
+ for(length_t i(0); i < rows; ++i)
+ {
+ if (0 != i)
+ os << fmt.space;
+
+ os << row(a, i);
+
+ if(rows-1 != i)
+ os << fmt.newline;
+ }
+ }
+ break;
+
+ case io::row_major:
+ {
+ for(length_t i(0); i < cols; ++i)
+ {
+ if(0 != i)
+ os << fmt.space;
+
+ os << column(a, i);
+
+ if(cols-1 != i)
+ os << fmt.newline;
+ }
+ }
+ break;
+ }
+
+ os << fmt.delim_right;
+ }
+ else
+ {
+ switch (fmt.order)
+ {
+ case io::column_major:
+ {
+ for(length_t i(0); i < cols; ++i)
+ {
+ os << column(a, i);
+
+ if(cols - 1 != i)
+ os << fmt.space;
+ }
+ }
+ break;
+
+ case io::row_major:
+ {
+ for (length_t i(0); i < rows; ++i)
+ {
+ os << row(a, i);
+
+ if (rows-1 != i)
+ os << fmt.space;
+ }
+ }
+ break;
+ }
+ }
+ }
+
+ return os;
+ }
+}//namespace detail
+
+ template <typename CTy, typename CTr, typename T, precision P>
+ GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, tmat2x2<T,P> const& a)
+ {
+ return detail::print_matrix_on(os, a);
+ }
+
+ template <typename CTy, typename CTr, typename T, precision P>
+ GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, tmat2x3<T,P> const& a)
+ {
+ return detail::print_matrix_on(os, a);
+ }
+
+ template <typename CTy, typename CTr, typename T, precision P>
+ GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, tmat2x4<T,P> const& a)
+ {
+ return detail::print_matrix_on(os, a);
+ }
+
+ template <typename CTy, typename CTr, typename T, precision P>
+ GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, tmat3x2<T,P> const& a)
+ {
+ return detail::print_matrix_on(os, a);
+ }
+
+ template <typename CTy, typename CTr, typename T, precision P>
+ GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, tmat3x3<T,P> const& a)
+ {
+ return detail::print_matrix_on(os, a);
+ }
+
+ template <typename CTy, typename CTr, typename T, precision P>
+ GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr> & operator<<(std::basic_ostream<CTy,CTr>& os, tmat3x4<T,P> const& a)
+ {
+ return detail::print_matrix_on(os, a);
+ }
+
+ template <typename CTy, typename CTr, typename T, precision P>
+ GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr> & operator<<(std::basic_ostream<CTy,CTr>& os, tmat4x2<T,P> const& a)
+ {
+ return detail::print_matrix_on(os, a);
+ }
+
+ template <typename CTy, typename CTr, typename T, precision P>
+ GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr> & operator<<(std::basic_ostream<CTy,CTr>& os, tmat4x3<T,P> const& a)
+ {
+ return detail::print_matrix_on(os, a);
+ }
+
+ template <typename CTy, typename CTr, typename T, precision P>
+ GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr> & operator<<(std::basic_ostream<CTy,CTr>& os, tmat4x4<T,P> const& a)
+ {
+ return detail::print_matrix_on(os, a);
+ }
+
+namespace detail
+{
+ template <typename CTy, typename CTr, template <typename, precision> class M, typename T, precision P>
+ GLM_FUNC_QUALIFIER std::basic_ostream<CTy, CTr>& print_matrix_pair_on(std::basic_ostream<CTy, CTr>& os, std::pair<M<T, P> const, M<T, P> const> const& a)
+ {
+ typename std::basic_ostream<CTy,CTr>::sentry const cerberus(os);
+
+ if(cerberus)
+ {
+ io::format_punct<CTy> const& fmt(io::get_facet<io::format_punct<CTy> >(os));
+ M<T,P> const& ml(a.first);
+ M<T,P> const& mr(a.second);
+ length_t const& cols(type<M, T, P>::cols);
+ length_t const& rows(type<M, T, P>::rows);
+
+ if(fmt.formatted)
+ {
+ os << fmt.newline << fmt.delim_left;
+
+ switch(fmt.order)
+ {
+ case io::column_major:
+ {
+ for(length_t i(0); i < rows; ++i)
+ {
+ if(0 != i)
+ os << fmt.space;
+
+ os << row(ml, i) << ((rows-1 != i) ? fmt.space : fmt.delim_right) << fmt.space << ((0 != i) ? fmt.space : fmt.delim_left) << row(mr, i);
+
+ if(rows-1 != i)
+ os << fmt.newline;
+ }
+ }
+ break;
+ case io::row_major:
+ {
+ for(length_t i(0); i < cols; ++i)
+ {
+ if(0 != i)
+ os << fmt.space;
+
+ os << column(ml, i) << ((cols-1 != i) ? fmt.space : fmt.delim_right) << fmt.space << ((0 != i) ? fmt.space : fmt.delim_left) << column(mr, i);
+
+ if(cols-1 != i)
+ os << fmt.newline;
+ }
+ }
+ break;
+ }
+
+ os << fmt.delim_right;
+ }
+ else
+ {
+ os << ml << fmt.space << mr;
+ }
+ }
+
+ return os;
+ }
+}//namespace detail
+
+ template <typename CTy, typename CTr, typename T, precision P>
+ GLM_FUNC_QUALIFIER std::basic_ostream<CTy, CTr>& operator<<(
+ std::basic_ostream<CTy, CTr> & os,
+ std::pair<tmat4x4<T, P> const,
+ tmat4x4<T, P> const> const& a)
+ {
+ return detail::print_matrix_pair_on(os, a);
+ }
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtx/log_base.hpp b/src/third_party/glm/glm/gtx/log_base.hpp
new file mode 100644
index 0000000..7958fc3
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/log_base.hpp
@@ -0,0 +1,44 @@
+/// @ref gtx_log_base
+/// @file glm/gtx/log_base.hpp
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_log_base GLM_GTX_log_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.
+
+#pragma once
+
+// Dependency:
+#include "../glm.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_log_base extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_log_base
+ /// @{
+
+ /// Logarithm for any base.
+ /// From GLM_GTX_log_base.
+ template <typename genType>
+ GLM_FUNC_DECL genType log(
+ genType const & x,
+ genType const & base);
+
+ /// Logarithm for any base.
+ /// From GLM_GTX_log_base.
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<T, P> sign(
+ vecType<T, P> const & x,
+ vecType<T, P> const & base);
+
+ /// @}
+}//namespace glm
+
+#include "log_base.inl"
diff --git a/src/third_party/glm/glm/gtx/log_base.inl b/src/third_party/glm/glm/gtx/log_base.inl
new file mode 100644
index 0000000..8005d1b
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/log_base.inl
@@ -0,0 +1,18 @@
+/// @ref gtx_log_base
+/// @file glm/gtx/log_base.inl
+
+namespace glm
+{
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType log(genType const & x, genType const & base)
+ {
+ assert(x != genType(0));
+ return glm::log(x) / glm::log(base);
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> log(vecType<T, P> const & x, vecType<T, P> const & base)
+ {
+ return glm::log(x) / glm::log(base);
+ }
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtx/matrix_cross_product.hpp b/src/third_party/glm/glm/gtx/matrix_cross_product.hpp
new file mode 100644
index 0000000..d920f4e
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/matrix_cross_product.hpp
@@ -0,0 +1,43 @@
+/// @ref gtx_matrix_cross_product
+/// @file glm/gtx/matrix_cross_product.hpp
+///
+/// @see core (dependence)
+/// @see gtx_extented_min_max (dependence)
+///
+/// @defgroup gtx_matrix_cross_product GLM_GTX_matrix_cross_product
+/// @ingroup gtx
+///
+/// @brief Build cross product matrices
+///
+/// <glm/gtx/matrix_cross_product.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependency:
+#include "../glm.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_matrix_cross_product extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_matrix_cross_product
+ /// @{
+
+ //! Build a cross product matrix.
+ //! From GLM_GTX_matrix_cross_product extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x3<T, P> matrixCross3(
+ tvec3<T, P> const & x);
+
+ //! Build a cross product matrix.
+ //! From GLM_GTX_matrix_cross_product extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x4<T, P> matrixCross4(
+ tvec3<T, P> const & x);
+
+ /// @}
+}//namespace glm
+
+#include "matrix_cross_product.inl"
diff --git a/src/third_party/glm/glm/gtx/matrix_cross_product.inl b/src/third_party/glm/glm/gtx/matrix_cross_product.inl
new file mode 100644
index 0000000..16f07e9
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/matrix_cross_product.inl
@@ -0,0 +1,38 @@
+/// @ref gtx_matrix_cross_product
+/// @file glm/gtx/matrix_cross_product.inl
+
+namespace glm
+{
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> matrixCross3
+ (
+ tvec3<T, P> const & x
+ )
+ {
+ tmat3x3<T, P> Result(T(0));
+ Result[0][1] = x.z;
+ Result[1][0] = -x.z;
+ Result[0][2] = -x.y;
+ Result[2][0] = x.y;
+ Result[1][2] = x.x;
+ Result[2][1] = -x.x;
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> matrixCross4
+ (
+ tvec3<T, P> const & x
+ )
+ {
+ tmat4x4<T, P> Result(T(0));
+ Result[0][1] = x.z;
+ Result[1][0] = -x.z;
+ Result[0][2] = -x.y;
+ Result[2][0] = x.y;
+ Result[1][2] = x.x;
+ Result[2][1] = -x.x;
+ return Result;
+ }
+
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtx/matrix_decompose.hpp b/src/third_party/glm/glm/gtx/matrix_decompose.hpp
new file mode 100644
index 0000000..e163f5a
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/matrix_decompose.hpp
@@ -0,0 +1,42 @@
+/// @ref gtx_matrix_decompose
+/// @file glm/gtx/matrix_decompose.hpp
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_matrix_decompose GLM_GTX_matrix_decompose
+/// @ingroup gtx
+///
+/// @brief Decomposes a model matrix to translations, rotation and scale components
+///
+/// <glm/gtx/matrix_decompose.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependencies
+#include "../mat4x4.hpp"
+#include "../vec3.hpp"
+#include "../vec4.hpp"
+#include "../geometric.hpp"
+#include "../gtc/quaternion.hpp"
+#include "../gtc/matrix_transform.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_matrix_decompose extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_matrix_decompose
+ /// @{
+
+ /// Decomposes a model matrix to translations, rotation and scale components
+ /// @see gtx_matrix_decompose
+ template <typename T, precision P>
+ GLM_FUNC_DECL bool decompose(
+ tmat4x4<T, P> const & modelMatrix,
+ tvec3<T, P> & scale, tquat<T, P> & orientation, tvec3<T, P> & translation, tvec3<T, P> & skew, tvec4<T, P> & perspective);
+
+ /// @}
+}//namespace glm
+
+#include "matrix_decompose.inl"
diff --git a/src/third_party/glm/glm/gtx/matrix_decompose.inl b/src/third_party/glm/glm/gtx/matrix_decompose.inl
new file mode 100644
index 0000000..5bf576a
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/matrix_decompose.inl
@@ -0,0 +1,194 @@
+/// @ref gtx_matrix_decompose
+/// @file glm/gtx/matrix_decompose.inl
+
+namespace glm{
+namespace detail
+{
+ /// Make a linear combination of two vectors and return the result.
+ // result = (a * ascl) + (b * bscl)
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> combine(
+ tvec3<T, P> const & a,
+ tvec3<T, P> const & b,
+ T ascl, T bscl)
+ {
+ return (a * ascl) + (b * bscl);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> scale(tvec3<T, P> const& v, T desiredLength)
+ {
+ return v * desiredLength / length(v);
+ }
+}//namespace detail
+
+ // Matrix decompose
+ // http://www.opensource.apple.com/source/WebCore/WebCore-514/platform/graphics/transforms/TransformationMatrix.cpp
+ // Decomposes the mode matrix to translations,rotation scale components
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER bool decompose(tmat4x4<T, P> const & ModelMatrix, tvec3<T, P> & Scale, tquat<T, P> & Orientation, tvec3<T, P> & Translation, tvec3<T, P> & Skew, tvec4<T, P> & Perspective)
+ {
+ tmat4x4<T, P> LocalMatrix(ModelMatrix);
+
+ // Normalize the matrix.
+ if(LocalMatrix[3][3] == static_cast<T>(0))
+ return false;
+
+ for(length_t i = 0; i < 4; ++i)
+ for(length_t j = 0; j < 4; ++j)
+ LocalMatrix[i][j] /= LocalMatrix[3][3];
+
+ // perspectiveMatrix is used to solve for perspective, but it also provides
+ // an easy way to test for singularity of the upper 3x3 component.
+ tmat4x4<T, P> PerspectiveMatrix(LocalMatrix);
+
+ for(length_t i = 0; i < 3; i++)
+ PerspectiveMatrix[i][3] = static_cast<T>(0);
+ PerspectiveMatrix[3][3] = static_cast<T>(1);
+
+ /// TODO: Fixme!
+ if(determinant(PerspectiveMatrix) == static_cast<T>(0))
+ return false;
+
+ // First, isolate perspective. This is the messiest.
+ if(LocalMatrix[0][3] != static_cast<T>(0) || LocalMatrix[1][3] != static_cast<T>(0) || LocalMatrix[2][3] != static_cast<T>(0))
+ {
+ // rightHandSide is the right hand side of the equation.
+ tvec4<T, P> RightHandSide;
+ RightHandSide[0] = LocalMatrix[0][3];
+ RightHandSide[1] = LocalMatrix[1][3];
+ RightHandSide[2] = LocalMatrix[2][3];
+ RightHandSide[3] = LocalMatrix[3][3];
+
+ // Solve the equation by inverting PerspectiveMatrix and multiplying
+ // rightHandSide by the inverse. (This is the easiest way, not
+ // necessarily the best.)
+ tmat4x4<T, P> InversePerspectiveMatrix = glm::inverse(PerspectiveMatrix);// inverse(PerspectiveMatrix, inversePerspectiveMatrix);
+ tmat4x4<T, P> TransposedInversePerspectiveMatrix = glm::transpose(InversePerspectiveMatrix);// transposeMatrix4(inversePerspectiveMatrix, transposedInversePerspectiveMatrix);
+
+ Perspective = TransposedInversePerspectiveMatrix * RightHandSide;
+ // v4MulPointByMatrix(rightHandSide, transposedInversePerspectiveMatrix, perspectivePoint);
+
+ // Clear the perspective partition
+ LocalMatrix[0][3] = LocalMatrix[1][3] = LocalMatrix[2][3] = static_cast<T>(0);
+ LocalMatrix[3][3] = static_cast<T>(1);
+ }
+ else
+ {
+ // No perspective.
+ Perspective = tvec4<T, P>(0, 0, 0, 1);
+ }
+
+ // Next take care of translation (easy).
+ Translation = tvec3<T, P>(LocalMatrix[3]);
+ LocalMatrix[3] = tvec4<T, P>(0, 0, 0, LocalMatrix[3].w);
+
+ tvec3<T, P> Row[3], Pdum3;
+
+ // Now get scale and shear.
+ for(length_t i = 0; i < 3; ++i)
+ for(int j = 0; j < 3; ++j)
+ Row[i][j] = LocalMatrix[i][j];
+
+ // Compute X scale factor and normalize first row.
+ Scale.x = length(Row[0]);// v3Length(Row[0]);
+
+ Row[0] = detail::scale(Row[0], static_cast<T>(1));
+
+ // Compute XY shear factor and make 2nd row orthogonal to 1st.
+ Skew.z = dot(Row[0], Row[1]);
+ Row[1] = detail::combine(Row[1], Row[0], static_cast<T>(1), -Skew.z);
+
+ // Now, compute Y scale and normalize 2nd row.
+ Scale.y = length(Row[1]);
+ Row[1] = detail::scale(Row[1], static_cast<T>(1));
+ Skew.z /= Scale.y;
+
+ // Compute XZ and YZ shears, orthogonalize 3rd row.
+ Skew.y = glm::dot(Row[0], Row[2]);
+ Row[2] = detail::combine(Row[2], Row[0], static_cast<T>(1), -Skew.y);
+ Skew.x = glm::dot(Row[1], Row[2]);
+ Row[2] = detail::combine(Row[2], Row[1], static_cast<T>(1), -Skew.x);
+
+ // Next, get Z scale and normalize 3rd row.
+ Scale.z = length(Row[2]);
+ Row[2] = detail::scale(Row[2], static_cast<T>(1));
+ Skew.y /= Scale.z;
+ Skew.x /= Scale.z;
+
+ // At this point, the matrix (in rows[]) is orthonormal.
+ // Check for a coordinate system flip. If the determinant
+ // is -1, then negate the matrix and the scaling factors.
+ Pdum3 = cross(Row[1], Row[2]); // v3Cross(row[1], row[2], Pdum3);
+ if(dot(Row[0], Pdum3) < 0)
+ {
+ for(length_t i = 0; i < 3; i++)
+ {
+ Scale.x *= static_cast<T>(-1);
+ Row[i] *= static_cast<T>(-1);
+ }
+ }
+
+ // Now, get the rotations out, as described in the gem.
+
+ // FIXME - Add the ability to return either quaternions (which are
+ // easier to recompose with) or Euler angles (rx, ry, rz), which
+ // are easier for authors to deal with. The latter will only be useful
+ // when we fix https://bugs.webkit.org/show_bug.cgi?id=23799, so I
+ // will leave the Euler angle code here for now.
+
+ // ret.rotateY = asin(-Row[0][2]);
+ // if (cos(ret.rotateY) != 0) {
+ // ret.rotateX = atan2(Row[1][2], Row[2][2]);
+ // ret.rotateZ = atan2(Row[0][1], Row[0][0]);
+ // } else {
+ // ret.rotateX = atan2(-Row[2][0], Row[1][1]);
+ // ret.rotateZ = 0;
+ // }
+
+ T s, t, x, y, z, w;
+
+ t = Row[0][0] + Row[1][1] + Row[2][2] + static_cast<T>(1);
+
+ if(t > static_cast<T>(1e-4))
+ {
+ s = static_cast<T>(0.5) / sqrt(t);
+ w = static_cast<T>(0.25) / s;
+ x = (Row[2][1] - Row[1][2]) * s;
+ y = (Row[0][2] - Row[2][0]) * s;
+ z = (Row[1][0] - Row[0][1]) * s;
+ }
+ else if(Row[0][0] > Row[1][1] && Row[0][0] > Row[2][2])
+ {
+ s = sqrt (static_cast<T>(1) + Row[0][0] - Row[1][1] - Row[2][2]) * static_cast<T>(2); // S=4*qx
+ x = static_cast<T>(0.25) * s;
+ y = (Row[0][1] + Row[1][0]) / s;
+ z = (Row[0][2] + Row[2][0]) / s;
+ w = (Row[2][1] - Row[1][2]) / s;
+ }
+ else if(Row[1][1] > Row[2][2])
+ {
+ s = sqrt (static_cast<T>(1) + Row[1][1] - Row[0][0] - Row[2][2]) * static_cast<T>(2); // S=4*qy
+ x = (Row[0][1] + Row[1][0]) / s;
+ y = static_cast<T>(0.25) * s;
+ z = (Row[1][2] + Row[2][1]) / s;
+ w = (Row[0][2] - Row[2][0]) / s;
+ }
+ else
+ {
+ s = sqrt(static_cast<T>(1) + Row[2][2] - Row[0][0] - Row[1][1]) * static_cast<T>(2); // S=4*qz
+ x = (Row[0][2] + Row[2][0]) / s;
+ y = (Row[1][2] + Row[2][1]) / s;
+ z = static_cast<T>(0.25) * s;
+ w = (Row[1][0] - Row[0][1]) / s;
+ }
+
+ Orientation.x = x;
+ Orientation.y = y;
+ Orientation.z = z;
+ Orientation.w = w;
+
+ return true;
+ }
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtx/matrix_interpolation.hpp b/src/third_party/glm/glm/gtx/matrix_interpolation.hpp
new file mode 100644
index 0000000..77a69ea
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/matrix_interpolation.hpp
@@ -0,0 +1,61 @@
+/// @ref gtx_matrix_interpolation
+/// @file glm/gtx/matrix_interpolation.hpp
+/// @author Ghenadii Ursachi (the.asteroth@gmail.com)
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_matrix_interpolation GLM_GTX_matrix_interpolation
+/// @ingroup gtx
+///
+/// @brief Allows to directly interpolate two exiciting matrices.
+///
+/// <glm/gtx/matrix_interpolation.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependency:
+#include "../glm.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_matrix_interpolation extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_matrix_interpolation
+ /// @{
+
+ /// Get the axis and angle of the rotation from a matrix.
+ /// From GLM_GTX_matrix_interpolation extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL void axisAngle(
+ tmat4x4<T, P> const & mat,
+ tvec3<T, P> & axis,
+ T & angle);
+
+ /// Build a matrix from axis and angle.
+ /// From GLM_GTX_matrix_interpolation extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x4<T, P> axisAngleMatrix(
+ tvec3<T, P> const & axis,
+ T const angle);
+
+ /// Extracts the rotation part of a matrix.
+ /// From GLM_GTX_matrix_interpolation extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x4<T, P> extractMatrixRotation(
+ tmat4x4<T, P> const & mat);
+
+ /// Build a interpolation of 4 * 4 matrixes.
+ /// From GLM_GTX_matrix_interpolation extension.
+ /// Warning! works only with rotation and/or translation matrixes, scale will generate unexpected results.
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x4<T, P> interpolate(
+ tmat4x4<T, P> const & m1,
+ tmat4x4<T, P> const & m2,
+ T const delta);
+
+ /// @}
+}//namespace glm
+
+#include "matrix_interpolation.inl"
diff --git a/src/third_party/glm/glm/gtx/matrix_interpolation.inl b/src/third_party/glm/glm/gtx/matrix_interpolation.inl
new file mode 100644
index 0000000..8645f96
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/matrix_interpolation.inl
@@ -0,0 +1,134 @@
+/// @ref gtx_matrix_interpolation
+/// @file glm/gtx/matrix_interpolation.hpp
+
+namespace glm
+{
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER void axisAngle
+ (
+ tmat4x4<T, P> const & mat,
+ tvec3<T, P> & axis,
+ T & angle
+ )
+ {
+ T epsilon = (T)0.01;
+ T epsilon2 = (T)0.1;
+
+ if((abs(mat[1][0] - mat[0][1]) < epsilon) && (abs(mat[2][0] - mat[0][2]) < epsilon) && (abs(mat[2][1] - mat[1][2]) < epsilon))
+ {
+ if ((abs(mat[1][0] + mat[0][1]) < epsilon2) && (abs(mat[2][0] + mat[0][2]) < epsilon2) && (abs(mat[2][1] + mat[1][2]) < epsilon2) && (abs(mat[0][0] + mat[1][1] + mat[2][2] - (T)3.0) < epsilon2))
+ {
+ angle = (T)0.0;
+ axis.x = (T)1.0;
+ axis.y = (T)0.0;
+ axis.z = (T)0.0;
+ return;
+ }
+ angle = static_cast<T>(3.1415926535897932384626433832795);
+ T xx = (mat[0][0] + (T)1.0) / (T)2.0;
+ T yy = (mat[1][1] + (T)1.0) / (T)2.0;
+ T zz = (mat[2][2] + (T)1.0) / (T)2.0;
+ T xy = (mat[1][0] + mat[0][1]) / (T)4.0;
+ T xz = (mat[2][0] + mat[0][2]) / (T)4.0;
+ T yz = (mat[2][1] + mat[1][2]) / (T)4.0;
+ if((xx > yy) && (xx > zz))
+ {
+ if (xx < epsilon) {
+ axis.x = (T)0.0;
+ axis.y = (T)0.7071;
+ axis.z = (T)0.7071;
+ } else {
+ axis.x = sqrt(xx);
+ axis.y = xy / axis.x;
+ axis.z = xz / axis.x;
+ }
+ }
+ else if (yy > zz)
+ {
+ if (yy < epsilon) {
+ axis.x = (T)0.7071;
+ axis.y = (T)0.0;
+ axis.z = (T)0.7071;
+ } else {
+ axis.y = sqrt(yy);
+ axis.x = xy / axis.y;
+ axis.z = yz / axis.y;
+ }
+ }
+ else
+ {
+ if (zz < epsilon) {
+ axis.x = (T)0.7071;
+ axis.y = (T)0.7071;
+ axis.z = (T)0.0;
+ } else {
+ axis.z = sqrt(zz);
+ axis.x = xz / axis.z;
+ axis.y = yz / axis.z;
+ }
+ }
+ return;
+ }
+ T s = sqrt((mat[2][1] - mat[1][2]) * (mat[2][1] - mat[1][2]) + (mat[2][0] - mat[0][2]) * (mat[2][0] - mat[0][2]) + (mat[1][0] - mat[0][1]) * (mat[1][0] - mat[0][1]));
+ if (glm::abs(s) < T(0.001))
+ s = (T)1.0;
+ angle = acos((mat[0][0] + mat[1][1] + mat[2][2] - (T)1.0) / (T)2.0);
+ axis.x = (mat[1][2] - mat[2][1]) / s;
+ axis.y = (mat[2][0] - mat[0][2]) / s;
+ axis.z = (mat[0][1] - mat[1][0]) / s;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> axisAngleMatrix
+ (
+ tvec3<T, P> const & axis,
+ T const angle
+ )
+ {
+ T c = cos(angle);
+ T s = sin(angle);
+ T t = static_cast<T>(1) - c;
+ tvec3<T, P> n = normalize(axis);
+
+ return tmat4x4<T, P>(
+ t * n.x * n.x + c, t * n.x * n.y + n.z * s, t * n.x * n.z - n.y * s, T(0),
+ t * n.x * n.y - n.z * s, t * n.y * n.y + c, t * n.y * n.z + n.x * s, T(0),
+ t * n.x * n.z + n.y * s, t * n.y * n.z - n.x * s, t * n.z * n.z + c, T(0),
+ T(0), T(0), T(0), T(1)
+ );
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> extractMatrixRotation
+ (
+ tmat4x4<T, P> const & mat
+ )
+ {
+ return tmat4x4<T, P>(
+ mat[0][0], mat[0][1], mat[0][2], 0.0,
+ mat[1][0], mat[1][1], mat[1][2], 0.0,
+ mat[2][0], mat[2][1], mat[2][2], 0.0,
+ 0.0, 0.0, 0.0, 1.0
+ );
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> interpolate
+ (
+ tmat4x4<T, P> const & m1,
+ tmat4x4<T, P> const & m2,
+ T const delta
+ )
+ {
+ tmat4x4<T, P> m1rot = extractMatrixRotation(m1);
+ tmat4x4<T, P> dltRotation = m2 * transpose(m1rot);
+ tvec3<T, P> dltAxis;
+ T dltAngle;
+ axisAngle(dltRotation, dltAxis, dltAngle);
+ tmat4x4<T, P> out = axisAngleMatrix(dltAxis, dltAngle * delta) * m1rot;
+ out[3][0] = m1[3][0] + delta * (m2[3][0] - m1[3][0]);
+ out[3][1] = m1[3][1] + delta * (m2[3][1] - m1[3][1]);
+ out[3][2] = m1[3][2] + delta * (m2[3][2] - m1[3][2]);
+ return out;
+ }
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtx/matrix_major_storage.hpp b/src/third_party/glm/glm/gtx/matrix_major_storage.hpp
new file mode 100644
index 0000000..9402abe
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/matrix_major_storage.hpp
@@ -0,0 +1,115 @@
+/// @ref gtx_matrix_major_storage
+/// @file glm/gtx/matrix_major_storage.hpp
+///
+/// @see core (dependence)
+/// @see gtx_extented_min_max (dependence)
+///
+/// @defgroup gtx_matrix_major_storage GLM_GTX_matrix_major_storage
+/// @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.
+
+#pragma once
+
+// Dependency:
+#include "../glm.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_matrix_major_storage extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_matrix_major_storage
+ /// @{
+
+ //! Build a row major matrix from row vectors.
+ //! From GLM_GTX_matrix_major_storage extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat2x2<T, P> rowMajor2(
+ tvec2<T, P> const & v1,
+ tvec2<T, P> const & v2);
+
+ //! Build a row major matrix from other matrix.
+ //! From GLM_GTX_matrix_major_storage extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat2x2<T, P> rowMajor2(
+ tmat2x2<T, P> const & m);
+
+ //! Build a row major matrix from row vectors.
+ //! From GLM_GTX_matrix_major_storage extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x3<T, P> rowMajor3(
+ tvec3<T, P> const & v1,
+ tvec3<T, P> const & v2,
+ tvec3<T, P> const & v3);
+
+ //! Build a row major matrix from other matrix.
+ //! From GLM_GTX_matrix_major_storage extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x3<T, P> rowMajor3(
+ tmat3x3<T, P> const & m);
+
+ //! Build a row major matrix from row vectors.
+ //! From GLM_GTX_matrix_major_storage extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x4<T, P> rowMajor4(
+ tvec4<T, P> const & v1,
+ tvec4<T, P> const & v2,
+ tvec4<T, P> const & v3,
+ tvec4<T, P> const & v4);
+
+ //! Build a row major matrix from other matrix.
+ //! From GLM_GTX_matrix_major_storage extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x4<T, P> rowMajor4(
+ tmat4x4<T, P> const & m);
+
+ //! Build a column major matrix from column vectors.
+ //! From GLM_GTX_matrix_major_storage extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat2x2<T, P> colMajor2(
+ tvec2<T, P> const & v1,
+ tvec2<T, P> const & v2);
+
+ //! Build a column major matrix from other matrix.
+ //! From GLM_GTX_matrix_major_storage extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat2x2<T, P> colMajor2(
+ tmat2x2<T, P> const & m);
+
+ //! Build a column major matrix from column vectors.
+ //! From GLM_GTX_matrix_major_storage extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x3<T, P> colMajor3(
+ tvec3<T, P> const & v1,
+ tvec3<T, P> const & v2,
+ tvec3<T, P> const & v3);
+
+ //! Build a column major matrix from other matrix.
+ //! From GLM_GTX_matrix_major_storage extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x3<T, P> colMajor3(
+ tmat3x3<T, P> const & m);
+
+ //! Build a column major matrix from column vectors.
+ //! From GLM_GTX_matrix_major_storage extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x4<T, P> colMajor4(
+ tvec4<T, P> const & v1,
+ tvec4<T, P> const & v2,
+ tvec4<T, P> const & v3,
+ tvec4<T, P> const & v4);
+
+ //! Build a column major matrix from other matrix.
+ //! From GLM_GTX_matrix_major_storage extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x4<T, P> colMajor4(
+ tmat4x4<T, P> const & m);
+
+ /// @}
+}//namespace glm
+
+#include "matrix_major_storage.inl"
diff --git a/src/third_party/glm/glm/gtx/matrix_major_storage.inl b/src/third_party/glm/glm/gtx/matrix_major_storage.inl
new file mode 100644
index 0000000..7097739
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/matrix_major_storage.inl
@@ -0,0 +1,167 @@
+/// @ref gtx_matrix_major_storage
+/// @file glm/gtx/matrix_major_storage.hpp
+
+namespace glm
+{
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P> rowMajor2
+ (
+ tvec2<T, P> const & v1,
+ tvec2<T, P> const & v2
+ )
+ {
+ tmat2x2<T, P> Result;
+ Result[0][0] = v1.x;
+ Result[1][0] = v1.y;
+ Result[0][1] = v2.x;
+ Result[1][1] = v2.y;
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P> rowMajor2(
+ const tmat2x2<T, P>& m)
+ {
+ tmat2x2<T, P> Result;
+ Result[0][0] = m[0][0];
+ Result[0][1] = m[1][0];
+ Result[1][0] = m[0][1];
+ Result[1][1] = m[1][1];
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> rowMajor3(
+ const tvec3<T, P>& v1,
+ const tvec3<T, P>& v2,
+ const tvec3<T, P>& v3)
+ {
+ tmat3x3<T, P> Result;
+ Result[0][0] = v1.x;
+ Result[1][0] = v1.y;
+ Result[2][0] = v1.z;
+ Result[0][1] = v2.x;
+ Result[1][1] = v2.y;
+ Result[2][1] = v2.z;
+ Result[0][2] = v3.x;
+ Result[1][2] = v3.y;
+ Result[2][2] = v3.z;
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> rowMajor3(
+ const tmat3x3<T, P>& m)
+ {
+ tmat3x3<T, P> Result;
+ Result[0][0] = m[0][0];
+ Result[0][1] = m[1][0];
+ Result[0][2] = m[2][0];
+ Result[1][0] = m[0][1];
+ Result[1][1] = m[1][1];
+ Result[1][2] = m[2][1];
+ Result[2][0] = m[0][2];
+ Result[2][1] = m[1][2];
+ Result[2][2] = m[2][2];
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> rowMajor4(
+ const tvec4<T, P>& v1,
+ const tvec4<T, P>& v2,
+ const tvec4<T, P>& v3,
+ const tvec4<T, P>& v4)
+ {
+ tmat4x4<T, P> Result;
+ Result[0][0] = v1.x;
+ Result[1][0] = v1.y;
+ Result[2][0] = v1.z;
+ Result[3][0] = v1.w;
+ Result[0][1] = v2.x;
+ Result[1][1] = v2.y;
+ Result[2][1] = v2.z;
+ Result[3][1] = v2.w;
+ Result[0][2] = v3.x;
+ Result[1][2] = v3.y;
+ Result[2][2] = v3.z;
+ Result[3][2] = v3.w;
+ Result[0][3] = v4.x;
+ Result[1][3] = v4.y;
+ Result[2][3] = v4.z;
+ Result[3][3] = v4.w;
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> rowMajor4(
+ const tmat4x4<T, P>& m)
+ {
+ tmat4x4<T, P> Result;
+ Result[0][0] = m[0][0];
+ Result[0][1] = m[1][0];
+ Result[0][2] = m[2][0];
+ Result[0][3] = m[3][0];
+ Result[1][0] = m[0][1];
+ Result[1][1] = m[1][1];
+ Result[1][2] = m[2][1];
+ Result[1][3] = m[3][1];
+ Result[2][0] = m[0][2];
+ Result[2][1] = m[1][2];
+ Result[2][2] = m[2][2];
+ Result[2][3] = m[3][2];
+ Result[3][0] = m[0][3];
+ Result[3][1] = m[1][3];
+ Result[3][2] = m[2][3];
+ Result[3][3] = m[3][3];
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P> colMajor2(
+ const tvec2<T, P>& v1,
+ const tvec2<T, P>& v2)
+ {
+ return tmat2x2<T, P>(v1, v2);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P> colMajor2(
+ const tmat2x2<T, P>& m)
+ {
+ return tmat2x2<T, P>(m);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> colMajor3(
+ const tvec3<T, P>& v1,
+ const tvec3<T, P>& v2,
+ const tvec3<T, P>& v3)
+ {
+ return tmat3x3<T, P>(v1, v2, v3);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> colMajor3(
+ const tmat3x3<T, P>& m)
+ {
+ return tmat3x3<T, P>(m);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> colMajor4(
+ const tvec4<T, P>& v1,
+ const tvec4<T, P>& v2,
+ const tvec4<T, P>& v3,
+ const tvec4<T, P>& v4)
+ {
+ return tmat4x4<T, P>(v1, v2, v3, v4);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> colMajor4(
+ const tmat4x4<T, P>& m)
+ {
+ return tmat4x4<T, P>(m);
+ }
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtx/matrix_operation.hpp b/src/third_party/glm/glm/gtx/matrix_operation.hpp
new file mode 100644
index 0000000..3192ae5
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/matrix_operation.hpp
@@ -0,0 +1,84 @@
+/// @ref gtx_matrix_operation
+/// @file glm/gtx/matrix_operation.hpp
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_matrix_operation GLM_GTX_matrix_operation
+/// @ingroup gtx
+///
+/// @brief Build diagonal matrices from vectors.
+///
+/// <glm/gtx/matrix_operation.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependency:
+#include "../glm.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_matrix_operation extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_matrix_operation
+ /// @{
+
+ //! Build a diagonal matrix.
+ //! From GLM_GTX_matrix_operation extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat2x2<T, P> diagonal2x2(
+ tvec2<T, P> const & v);
+
+ //! Build a diagonal matrix.
+ //! From GLM_GTX_matrix_operation extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat2x3<T, P> diagonal2x3(
+ tvec2<T, P> const & v);
+
+ //! Build a diagonal matrix.
+ //! From GLM_GTX_matrix_operation extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat2x4<T, P> diagonal2x4(
+ tvec2<T, P> const & v);
+
+ //! Build a diagonal matrix.
+ //! From GLM_GTX_matrix_operation extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x2<T, P> diagonal3x2(
+ tvec2<T, P> const & v);
+
+ //! Build a diagonal matrix.
+ //! From GLM_GTX_matrix_operation extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x3<T, P> diagonal3x3(
+ tvec3<T, P> const & v);
+
+ //! Build a diagonal matrix.
+ //! From GLM_GTX_matrix_operation extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x4<T, P> diagonal3x4(
+ tvec3<T, P> const & v);
+
+ //! Build a diagonal matrix.
+ //! From GLM_GTX_matrix_operation extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x2<T, P> diagonal4x2(
+ tvec2<T, P> const & v);
+
+ //! Build a diagonal matrix.
+ //! From GLM_GTX_matrix_operation extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x3<T, P> diagonal4x3(
+ tvec3<T, P> const & v);
+
+ //! Build a diagonal matrix.
+ //! From GLM_GTX_matrix_operation extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x4<T, P> diagonal4x4(
+ tvec4<T, P> const & v);
+
+ /// @}
+}//namespace glm
+
+#include "matrix_operation.inl"
diff --git a/src/third_party/glm/glm/gtx/matrix_operation.inl b/src/third_party/glm/glm/gtx/matrix_operation.inl
new file mode 100644
index 0000000..1553215
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/matrix_operation.inl
@@ -0,0 +1,118 @@
+/// @ref gtx_matrix_operation
+/// @file glm/gtx/matrix_operation.inl
+
+namespace glm
+{
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x2<T, P> diagonal2x2
+ (
+ tvec2<T, P> const & v
+ )
+ {
+ tmat2x2<T, P> Result(static_cast<T>(1));
+ Result[0][0] = v[0];
+ Result[1][1] = v[1];
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x3<T, P> diagonal2x3
+ (
+ tvec2<T, P> const & v
+ )
+ {
+ tmat2x3<T, P> Result(static_cast<T>(1));
+ Result[0][0] = v[0];
+ Result[1][1] = v[1];
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat2x4<T, P> diagonal2x4
+ (
+ tvec2<T, P> const & v
+ )
+ {
+ tmat2x4<T, P> Result(static_cast<T>(1));
+ Result[0][0] = v[0];
+ Result[1][1] = v[1];
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x2<T, P> diagonal3x2
+ (
+ tvec2<T, P> const & v
+ )
+ {
+ tmat3x2<T, P> Result(static_cast<T>(1));
+ Result[0][0] = v[0];
+ Result[1][1] = v[1];
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> diagonal3x3
+ (
+ tvec3<T, P> const & v
+ )
+ {
+ tmat3x3<T, P> Result(static_cast<T>(1));
+ Result[0][0] = v[0];
+ Result[1][1] = v[1];
+ Result[2][2] = v[2];
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x4<T, P> diagonal3x4
+ (
+ tvec3<T, P> const & v
+ )
+ {
+ tmat3x4<T, P> Result(static_cast<T>(1));
+ Result[0][0] = v[0];
+ Result[1][1] = v[1];
+ Result[2][2] = v[2];
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> diagonal4x4
+ (
+ tvec4<T, P> const & v
+ )
+ {
+ tmat4x4<T, P> Result(static_cast<T>(1));
+ Result[0][0] = v[0];
+ Result[1][1] = v[1];
+ Result[2][2] = v[2];
+ Result[3][3] = v[3];
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x3<T, P> diagonal4x3
+ (
+ tvec3<T, P> const & v
+ )
+ {
+ tmat4x3<T, P> Result(static_cast<T>(1));
+ Result[0][0] = v[0];
+ Result[1][1] = v[1];
+ Result[2][2] = v[2];
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x2<T, P> diagonal4x2
+ (
+ tvec2<T, P> const & v
+ )
+ {
+ tmat4x2<T, P> Result(static_cast<T>(1));
+ Result[0][0] = v[0];
+ Result[1][1] = v[1];
+ return Result;
+ }
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtx/matrix_query.hpp b/src/third_party/glm/glm/gtx/matrix_query.hpp
new file mode 100644
index 0000000..2518274
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/matrix_query.hpp
@@ -0,0 +1,73 @@
+/// @ref gtx_matrix_query
+/// @file glm/gtx/matrix_query.hpp
+///
+/// @see core (dependence)
+/// @see gtx_vector_query (dependence)
+///
+/// @defgroup gtx_matrix_query GLM_GTX_matrix_query
+/// @ingroup gtx
+///
+/// @brief Query to evaluate matrix properties
+///
+/// <glm/gtx/matrix_query.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependency:
+#include "../glm.hpp"
+#include "../gtx/vector_query.hpp"
+#include <limits>
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_matrix_query extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_matrix_query
+ /// @{
+
+ /// Return whether a matrix a null matrix.
+ /// From GLM_GTX_matrix_query extension.
+ template<typename T, precision P>
+ GLM_FUNC_DECL bool isNull(tmat2x2<T, P> const & m, T const & epsilon);
+
+ /// Return whether a matrix a null matrix.
+ /// From GLM_GTX_matrix_query extension.
+ template<typename T, precision P>
+ GLM_FUNC_DECL bool isNull(tmat3x3<T, P> const & m, T const & epsilon);
+
+ /// Return whether a matrix is a null matrix.
+ /// From GLM_GTX_matrix_query extension.
+ template<typename T, precision P>
+ GLM_FUNC_DECL bool isNull(tmat4x4<T, P> const & m, T const & epsilon);
+
+ /// Return whether a matrix is an identity matrix.
+ /// From GLM_GTX_matrix_query extension.
+ template<typename T, precision P, template <typename, precision> class matType>
+ GLM_FUNC_DECL bool isIdentity(matType<T, P> const & m, T const & epsilon);
+
+ /// Return whether a matrix is a normalized matrix.
+ /// From GLM_GTX_matrix_query extension.
+ template<typename T, precision P>
+ GLM_FUNC_DECL bool isNormalized(tmat2x2<T, P> const & m, T const & epsilon);
+
+ /// Return whether a matrix is a normalized matrix.
+ /// From GLM_GTX_matrix_query extension.
+ template<typename T, precision P>
+ GLM_FUNC_DECL bool isNormalized(tmat3x3<T, P> const & m, T const & epsilon);
+
+ /// Return whether a matrix is a normalized matrix.
+ /// From GLM_GTX_matrix_query extension.
+ template<typename T, precision P>
+ GLM_FUNC_DECL bool isNormalized(tmat4x4<T, P> const & m, T const & epsilon);
+
+ /// Return whether a matrix is an orthonormalized matrix.
+ /// From GLM_GTX_matrix_query extension.
+ template<typename T, precision P, template <typename, precision> class matType>
+ GLM_FUNC_DECL bool isOrthogonal(matType<T, P> const & m, T const & epsilon);
+
+ /// @}
+}//namespace glm
+
+#include "matrix_query.inl"
diff --git a/src/third_party/glm/glm/gtx/matrix_query.inl b/src/third_party/glm/glm/gtx/matrix_query.inl
new file mode 100644
index 0000000..491b774
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/matrix_query.inl
@@ -0,0 +1,114 @@
+/// @ref gtx_matrix_query
+/// @file glm/gtx/matrix_query.inl
+
+namespace glm
+{
+ template<typename T, precision P>
+ GLM_FUNC_QUALIFIER bool isNull(tmat2x2<T, P> const & m, T const & epsilon)
+ {
+ bool result = true;
+ for(length_t i = 0; result && i < m.length() ; ++i)
+ result = isNull(m[i], epsilon);
+ return result;
+ }
+
+ template<typename T, precision P>
+ GLM_FUNC_QUALIFIER bool isNull(tmat3x3<T, P> const & m, T const & epsilon)
+ {
+ bool result = true;
+ for(length_t i = 0; result && i < m.length() ; ++i)
+ result = isNull(m[i], epsilon);
+ return result;
+ }
+
+ template<typename T, precision P>
+ GLM_FUNC_QUALIFIER bool isNull(tmat4x4<T, P> const & m, T const & epsilon)
+ {
+ bool result = true;
+ for(length_t i = 0; result && i < m.length() ; ++i)
+ result = isNull(m[i], epsilon);
+ return result;
+ }
+
+ template<typename T, precision P, template <typename, precision> class matType>
+ GLM_FUNC_QUALIFIER bool isIdentity(matType<T, P> const & m, T const & epsilon)
+ {
+ bool result = true;
+ for(length_t i = 0; result && i < m[0].length() ; ++i)
+ {
+ for(length_t j = 0; result && j < i ; ++j)
+ result = abs(m[i][j]) <= epsilon;
+ if(result)
+ result = abs(m[i][i] - 1) <= epsilon;
+ for(length_t j = i + 1; result && j < m.length(); ++j)
+ result = abs(m[i][j]) <= epsilon;
+ }
+ return result;
+ }
+
+ template<typename T, precision P>
+ GLM_FUNC_QUALIFIER bool isNormalized(tmat2x2<T, P> const & m, T const & epsilon)
+ {
+ bool result(true);
+ for(length_t i = 0; result && i < m.length(); ++i)
+ result = isNormalized(m[i], epsilon);
+ for(length_t i = 0; result && i < m.length(); ++i)
+ {
+ typename tmat2x2<T, P>::col_type v;
+ for(length_t j = 0; j < m.length(); ++j)
+ v[j] = m[j][i];
+ result = isNormalized(v, epsilon);
+ }
+ return result;
+ }
+
+ template<typename T, precision P>
+ GLM_FUNC_QUALIFIER bool isNormalized(tmat3x3<T, P> const & m, T const & epsilon)
+ {
+ bool result(true);
+ for(length_t i = 0; result && i < m.length(); ++i)
+ result = isNormalized(m[i], epsilon);
+ for(length_t i = 0; result && i < m.length(); ++i)
+ {
+ typename tmat3x3<T, P>::col_type v;
+ for(length_t j = 0; j < m.length(); ++j)
+ v[j] = m[j][i];
+ result = isNormalized(v, epsilon);
+ }
+ return result;
+ }
+
+ template<typename T, precision P>
+ GLM_FUNC_QUALIFIER bool isNormalized(tmat4x4<T, P> const & m, T const & epsilon)
+ {
+ bool result(true);
+ for(length_t i = 0; result && i < m.length(); ++i)
+ result = isNormalized(m[i], epsilon);
+ for(length_t i = 0; result && i < m.length(); ++i)
+ {
+ typename tmat4x4<T, P>::col_type v;
+ for(length_t j = 0; j < m.length(); ++j)
+ v[j] = m[j][i];
+ result = isNormalized(v, epsilon);
+ }
+ return result;
+ }
+
+ template<typename T, precision P, template <typename, precision> class matType>
+ GLM_FUNC_QUALIFIER bool isOrthogonal(matType<T, P> const & m, T const & epsilon)
+ {
+ bool result(true);
+ for(length_t i(0); result && i < m.length() - 1; ++i)
+ for(length_t j(i + 1); result && j < m.length(); ++j)
+ result = areOrthogonal(m[i], m[j], epsilon);
+
+ if(result)
+ {
+ matType<T, P> tmp = transpose(m);
+ for(length_t i(0); result && i < m.length() - 1 ; ++i)
+ for(length_t j(i + 1); result && j < m.length(); ++j)
+ result = areOrthogonal(tmp[i], tmp[j], epsilon);
+ }
+ return result;
+ }
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtx/matrix_transform_2d.hpp b/src/third_party/glm/glm/gtx/matrix_transform_2d.hpp
new file mode 100644
index 0000000..91f4834
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/matrix_transform_2d.hpp
@@ -0,0 +1,78 @@
+/// @ref gtx_matrix_transform_2d
+/// @file glm/gtx/matrix_transform_2d.hpp
+/// @author Miguel Ángel Pérez Martínez
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_matrix_transform_2d GLM_GTX_matrix_transform_2d
+/// @ingroup gtx
+///
+/// @brief Defines functions that generate common 2d transformation matrices.
+///
+/// <glm/gtx/matrix_transform_2d.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependency:
+#include "../mat3x3.hpp"
+#include "../vec2.hpp"
+
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_matrix_transform_2d extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_matrix_transform_2d
+ /// @{
+
+ /// Builds a translation 3 * 3 matrix created from a vector of 2 components.
+ ///
+ /// @param m Input matrix multiplied by this translation matrix.
+ /// @param v Coordinates of a translation vector.
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> translate(
+ tmat3x3<T, P> const & m,
+ tvec2<T, P> const & v);
+
+ /// Builds a rotation 3 * 3 matrix created from an angle.
+ ///
+ /// @param m Input matrix multiplied by this translation matrix.
+ /// @param angle Rotation angle expressed in radians if GLM_FORCE_RADIANS is defined or degrees otherwise.
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> rotate(
+ tmat3x3<T, P> const & m,
+ T angle);
+
+ /// Builds a scale 3 * 3 matrix created from a vector of 2 components.
+ ///
+ /// @param m Input matrix multiplied by this translation matrix.
+ /// @param v Coordinates of a scale vector.
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> scale(
+ tmat3x3<T, P> const & m,
+ tvec2<T, P> const & v);
+
+ /// Builds an horizontal (parallel to the x axis) shear 3 * 3 matrix.
+ ///
+ /// @param m Input matrix multiplied by this translation matrix.
+ /// @param y Shear factor.
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> shearX(
+ tmat3x3<T, P> const & m,
+ T y);
+
+ /// Builds a vertical (parallel to the y axis) shear 3 * 3 matrix.
+ ///
+ /// @param m Input matrix multiplied by this translation matrix.
+ /// @param x Shear factor.
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> shearY(
+ tmat3x3<T, P> const & m,
+ T x);
+
+ /// @}
+}//namespace glm
+
+#include "matrix_transform_2d.inl"
diff --git a/src/third_party/glm/glm/gtx/matrix_transform_2d.inl b/src/third_party/glm/glm/gtx/matrix_transform_2d.inl
new file mode 100644
index 0000000..bea5670
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/matrix_transform_2d.inl
@@ -0,0 +1,69 @@
+/// @ref gtx_matrix_transform_2d
+/// @file glm/gtc/matrix_transform_2d.inl
+/// @author Miguel Ángel Pérez Martínez
+
+#include "../trigonometric.hpp"
+
+namespace glm
+{
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> translate(
+ tmat3x3<T, P> const & m,
+ tvec2<T, P> const & v)
+ {
+ tmat3x3<T, P> Result(m);
+ Result[2] = m[0] * v[0] + m[1] * v[1] + m[2];
+ return Result;
+ }
+
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> rotate(
+ tmat3x3<T, P> const & m,
+ T angle)
+ {
+ T const a = angle;
+ T const c = cos(a);
+ T const s = sin(a);
+
+ tmat3x3<T, P> Result(uninitialize);
+ Result[0] = m[0] * c + m[1] * s;
+ Result[1] = m[0] * -s + m[1] * c;
+ Result[2] = m[2];
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> scale(
+ tmat3x3<T, P> const & m,
+ tvec2<T, P> const & v)
+ {
+ tmat3x3<T, P> Result(uninitialize);
+ Result[0] = m[0] * v[0];
+ Result[1] = m[1] * v[1];
+ Result[2] = m[2];
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> shearX(
+ tmat3x3<T, P> const & m,
+ T y)
+ {
+ tmat3x3<T, P> Result(1);
+ Result[0][1] = y;
+ return m * Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> shearY(
+ tmat3x3<T, P> const & m,
+ T x)
+ {
+ tmat3x3<T, P> Result(1);
+ Result[1][0] = x;
+ return m * Result;
+ }
+
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtx/mixed_product.hpp b/src/third_party/glm/glm/gtx/mixed_product.hpp
new file mode 100644
index 0000000..65861f7
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/mixed_product.hpp
@@ -0,0 +1,37 @@
+/// @ref gtx_mixed_product
+/// @file glm/gtx/mixed_product.hpp
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_mixed_product GLM_GTX_mixed_producte
+/// @ingroup gtx
+///
+/// @brief Mixed product of 3 vectors.
+///
+/// <glm/gtx/mixed_product.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependency:
+#include "../glm.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_mixed_product extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_mixed_product
+ /// @{
+
+ /// @brief Mixed product of 3 vectors (from GLM_GTX_mixed_product extension)
+ template <typename T, precision P>
+ GLM_FUNC_DECL T mixedProduct(
+ tvec3<T, P> const & v1,
+ tvec3<T, P> const & v2,
+ tvec3<T, P> const & v3);
+
+ /// @}
+}// namespace glm
+
+#include "mixed_product.inl"
diff --git a/src/third_party/glm/glm/gtx/mixed_product.inl b/src/third_party/glm/glm/gtx/mixed_product.inl
new file mode 100644
index 0000000..a6ede59
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/mixed_product.inl
@@ -0,0 +1,16 @@
+/// @ref gtx_mixed_product
+/// @file glm/gtx/mixed_product.inl
+
+namespace glm
+{
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER T mixedProduct
+ (
+ tvec3<T, P> const & v1,
+ tvec3<T, P> const & v2,
+ tvec3<T, P> const & v3
+ )
+ {
+ return dot(cross(v1, v2), v3);
+ }
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtx/norm.hpp b/src/third_party/glm/glm/gtx/norm.hpp
new file mode 100644
index 0000000..b3cb528
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/norm.hpp
@@ -0,0 +1,86 @@
+/// @ref gtx_norm
+/// @file glm/gtx/norm.hpp
+///
+/// @see core (dependence)
+/// @see gtx_quaternion (dependence)
+///
+/// @defgroup gtx_norm GLM_GTX_norm
+/// @ingroup gtx
+///
+/// @brief Various ways to compute vector norms.
+///
+/// <glm/gtx/norm.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependency:
+#include "../detail/func_geometric.hpp"
+#include "../gtx/quaternion.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_norm extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_norm
+ /// @{
+
+ /// Returns the squared length of x.
+ /// From GLM_GTX_norm extension.
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL T length2(
+ vecType<T, P> const & x);
+
+ /// Returns the squared distance between p0 and p1, i.e., length2(p0 - p1).
+ /// From GLM_GTX_norm extension.
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL T distance2(
+ vecType<T, P> const & p0,
+ vecType<T, P> const & p1);
+
+ //! Returns the L1 norm between x and y.
+ //! From GLM_GTX_norm extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL T l1Norm(
+ tvec3<T, P> const & x,
+ tvec3<T, P> const & y);
+
+ //! Returns the L1 norm of v.
+ //! From GLM_GTX_norm extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL T l1Norm(
+ tvec3<T, P> const & v);
+
+ //! Returns the L2 norm between x and y.
+ //! From GLM_GTX_norm extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL T l2Norm(
+ tvec3<T, P> const & x,
+ tvec3<T, P> const & y);
+
+ //! Returns the L2 norm of v.
+ //! From GLM_GTX_norm extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL T l2Norm(
+ tvec3<T, P> const & x);
+
+ //! Returns the L norm between x and y.
+ //! From GLM_GTX_norm extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL T lxNorm(
+ tvec3<T, P> const & x,
+ tvec3<T, P> const & y,
+ unsigned int Depth);
+
+ //! Returns the L norm of v.
+ //! From GLM_GTX_norm extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL T lxNorm(
+ tvec3<T, P> const & x,
+ unsigned int Depth);
+
+ /// @}
+}//namespace glm
+
+#include "norm.inl"
diff --git a/src/third_party/glm/glm/gtx/norm.inl b/src/third_party/glm/glm/gtx/norm.inl
new file mode 100644
index 0000000..20954ec
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/norm.inl
@@ -0,0 +1,106 @@
+/// @ref gtx_norm
+/// @file glm/gtx/norm.inl
+
+#include "../detail/precision.hpp"
+
+namespace glm{
+namespace detail
+{
+ template <template <typename, precision> class vecType, typename T, precision P, bool Aligned>
+ struct compute_length2
+ {
+ GLM_FUNC_QUALIFIER static T call(vecType<T, P> const & v)
+ {
+ return dot(v, v);
+ }
+ };
+}//namespace detail
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType length2(genType x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'length2' accepts only floating-point inputs");
+ return x * x;
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER T length2(vecType<T, P> const & v)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'length2' accepts only floating-point inputs");
+ return detail::compute_length2<vecType, T, P, detail::is_aligned<P>::value>::call(v);
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER T distance2(T p0, T p1)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'distance2' accepts only floating-point inputs");
+ return length2(p1 - p0);
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER T distance2(vecType<T, P> const & p0, vecType<T, P> const & p1)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'distance2' accepts only floating-point inputs");
+ return length2(p1 - p0);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER T l1Norm
+ (
+ tvec3<T, P> const & a,
+ tvec3<T, P> const & b
+ )
+ {
+ return abs(b.x - a.x) + abs(b.y - a.y) + abs(b.z - a.z);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER T l1Norm
+ (
+ tvec3<T, P> const & v
+ )
+ {
+ return abs(v.x) + abs(v.y) + abs(v.z);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER T l2Norm
+ (
+ tvec3<T, P> const & a,
+ tvec3<T, P> const & b
+ )
+ {
+ return length(b - a);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER T l2Norm
+ (
+ tvec3<T, P> const & v
+ )
+ {
+ return length(v);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER T lxNorm
+ (
+ tvec3<T, P> const & x,
+ tvec3<T, P> const & y,
+ unsigned int Depth
+ )
+ {
+ return pow(pow(y.x - x.x, T(Depth)) + pow(y.y - x.y, T(Depth)) + pow(y.z - x.z, T(Depth)), T(1) / T(Depth));
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER T lxNorm
+ (
+ tvec3<T, P> const & v,
+ unsigned int Depth
+ )
+ {
+ return pow(pow(v.x, T(Depth)) + pow(v.y, T(Depth)) + pow(v.z, T(Depth)), T(1) / T(Depth));
+ }
+
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtx/normal.hpp b/src/third_party/glm/glm/gtx/normal.hpp
new file mode 100644
index 0000000..2e0044e
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/normal.hpp
@@ -0,0 +1,39 @@
+/// @ref gtx_normal
+/// @file glm/gtx/normal.hpp
+///
+/// @see core (dependence)
+/// @see gtx_extented_min_max (dependence)
+///
+/// @defgroup gtx_normal GLM_GTX_normal
+/// @ingroup gtx
+///
+/// @brief Compute the normal of a triangle.
+///
+/// <glm/gtx/normal.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependency:
+#include "../glm.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_normal extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_normal
+ /// @{
+
+ //! Computes triangle normal from triangle points.
+ //! From GLM_GTX_normal extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> triangleNormal(
+ tvec3<T, P> const & p1,
+ tvec3<T, P> const & p2,
+ tvec3<T, P> const & p3);
+
+ /// @}
+}//namespace glm
+
+#include "normal.inl"
diff --git a/src/third_party/glm/glm/gtx/normal.inl b/src/third_party/glm/glm/gtx/normal.inl
new file mode 100644
index 0000000..e442317
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/normal.inl
@@ -0,0 +1,16 @@
+/// @ref gtx_normal
+/// @file glm/gtx/normal.inl
+
+namespace glm
+{
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> triangleNormal
+ (
+ tvec3<T, P> const & p1,
+ tvec3<T, P> const & p2,
+ tvec3<T, P> const & p3
+ )
+ {
+ return normalize(cross(p1 - p2, p1 - p3));
+ }
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtx/normalize_dot.hpp b/src/third_party/glm/glm/gtx/normalize_dot.hpp
new file mode 100644
index 0000000..de650d3
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/normalize_dot.hpp
@@ -0,0 +1,45 @@
+/// @ref gtx_normalize_dot
+/// @file glm/gtx/normalize_dot.hpp
+///
+/// @see core (dependence)
+/// @see gtx_fast_square_root (dependence)
+///
+/// @defgroup gtx_normalize_dot GLM_GTX_normalize_dot
+/// @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.
+
+#pragma once
+
+// Dependency:
+#include "../gtx/fast_square_root.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_normalize_dot extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_normalize_dot
+ /// @{
+
+ /// Normalize parameters and returns the dot product of x and y.
+ /// It's faster that dot(normalize(x), normalize(y)).
+ ///
+ /// @see gtx_normalize_dot extension.
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL T normalizeDot(vecType<T, P> const & x, vecType<T, P> const & y);
+
+ /// Normalize parameters and returns the dot product of x and y.
+ /// Faster that dot(fastNormalize(x), fastNormalize(y)).
+ ///
+ /// @see gtx_normalize_dot extension.
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL T fastNormalizeDot(vecType<T, P> const & x, vecType<T, P> const & y);
+
+ /// @}
+}//namespace glm
+
+#include "normalize_dot.inl"
diff --git a/src/third_party/glm/glm/gtx/normalize_dot.inl b/src/third_party/glm/glm/gtx/normalize_dot.inl
new file mode 100644
index 0000000..0d01ffe
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/normalize_dot.inl
@@ -0,0 +1,17 @@
+/// @ref gtx_normalize_dot
+/// @file glm/gtx/normalize_dot.inl
+
+namespace glm
+{
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER T normalizeDot(vecType<T, P> const & x, vecType<T, P> const & y)
+ {
+ return glm::dot(x, y) * glm::inversesqrt(glm::dot(x, x) * glm::dot(y, y));
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER T fastNormalizeDot(vecType<T, P> const & x, vecType<T, P> const & y)
+ {
+ return glm::dot(x, y) * glm::fastInverseSqrt(glm::dot(x, x) * glm::dot(y, y));
+ }
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtx/number_precision.hpp b/src/third_party/glm/glm/gtx/number_precision.hpp
new file mode 100644
index 0000000..736d035
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/number_precision.hpp
@@ -0,0 +1,57 @@
+/// @ref gtx_number_precision
+/// @file glm/gtx/number_precision.hpp
+///
+/// @see core (dependence)
+/// @see gtc_type_precision (dependence)
+/// @see gtc_quaternion (dependence)
+///
+/// @defgroup gtx_number_precision GLM_GTX_number_precision
+/// @ingroup gtx
+///
+/// @brief Defined size types.
+///
+/// <glm/gtx/number_precision.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependency:
+#include "../glm.hpp"
+#include "../gtc/type_precision.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_number_precision extension included")
+#endif
+
+namespace glm{
+namespace gtx
+{
+ /////////////////////////////
+ // Unsigned int vector types
+
+ /// @addtogroup gtx_number_precision
+ /// @{
+
+ typedef u8 u8vec1; //!< \brief 8bit unsigned integer scalar. (from GLM_GTX_number_precision extension)
+ typedef u16 u16vec1; //!< \brief 16bit unsigned integer scalar. (from GLM_GTX_number_precision extension)
+ typedef u32 u32vec1; //!< \brief 32bit unsigned integer scalar. (from GLM_GTX_number_precision extension)
+ typedef u64 u64vec1; //!< \brief 64bit unsigned integer scalar. (from GLM_GTX_number_precision extension)
+
+ //////////////////////
+ // Float vector types
+
+ typedef f32 f32vec1; //!< \brief Single-precision floating-point scalar. (from GLM_GTX_number_precision extension)
+ typedef f64 f64vec1; //!< \brief Single-precision floating-point scalar. (from GLM_GTX_number_precision extension)
+
+ //////////////////////
+ // Float matrix types
+
+ typedef f32 f32mat1; //!< \brief Single-precision floating-point scalar. (from GLM_GTX_number_precision extension)
+ typedef f32 f32mat1x1; //!< \brief Single-precision floating-point scalar. (from GLM_GTX_number_precision extension)
+ typedef f64 f64mat1; //!< \brief Double-precision floating-point scalar. (from GLM_GTX_number_precision extension)
+ typedef f64 f64mat1x1; //!< \brief Double-precision floating-point scalar. (from GLM_GTX_number_precision extension)
+
+ /// @}
+}//namespace gtx
+}//namespace glm
+
+#include "number_precision.inl"
diff --git a/src/third_party/glm/glm/gtx/number_precision.inl b/src/third_party/glm/glm/gtx/number_precision.inl
new file mode 100644
index 0000000..b54cf66
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/number_precision.inl
@@ -0,0 +1,7 @@
+/// @ref gtx_number_precision
+/// @file glm/gtx/number_precision.inl
+
+namespace glm
+{
+
+}
diff --git a/src/third_party/glm/glm/gtx/optimum_pow.hpp b/src/third_party/glm/glm/gtx/optimum_pow.hpp
new file mode 100644
index 0000000..e9510c4
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/optimum_pow.hpp
@@ -0,0 +1,50 @@
+/// @ref gtx_optimum_pow
+/// @file glm/gtx/optimum_pow.hpp
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_optimum_pow GLM_GTX_optimum_pow
+/// @ingroup gtx
+///
+/// @brief Integer exponentiation of power functions.
+///
+/// <glm/gtx/optimum_pow.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependency:
+#include "../glm.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_optimum_pow extension included")
+#endif
+
+namespace glm{
+namespace gtx
+{
+ /// @addtogroup gtx_optimum_pow
+ /// @{
+
+ /// Returns x raised to the power of 2.
+ ///
+ /// @see gtx_optimum_pow
+ template <typename genType>
+ GLM_FUNC_DECL genType pow2(genType const & x);
+
+ /// Returns x raised to the power of 3.
+ ///
+ /// @see gtx_optimum_pow
+ template <typename genType>
+ GLM_FUNC_DECL genType pow3(genType const & x);
+
+ /// Returns x raised to the power of 4.
+ ///
+ /// @see gtx_optimum_pow
+ template <typename genType>
+ GLM_FUNC_DECL genType pow4(genType const & x);
+
+ /// @}
+}//namespace gtx
+}//namespace glm
+
+#include "optimum_pow.inl"
diff --git a/src/third_party/glm/glm/gtx/optimum_pow.inl b/src/third_party/glm/glm/gtx/optimum_pow.inl
new file mode 100644
index 0000000..2216a74
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/optimum_pow.inl
@@ -0,0 +1,23 @@
+/// @ref gtx_optimum_pow
+/// @file glm/gtx/optimum_pow.inl
+
+namespace glm
+{
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType pow2(genType const & x)
+ {
+ return x * x;
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType pow3(genType const & x)
+ {
+ return x * x * x;
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType pow4(genType const & x)
+ {
+ return (x * x) * (x * x);
+ }
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtx/orthonormalize.hpp b/src/third_party/glm/glm/gtx/orthonormalize.hpp
new file mode 100644
index 0000000..4bea449
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/orthonormalize.hpp
@@ -0,0 +1,45 @@
+/// @ref gtx_orthonormalize
+/// @file glm/gtx/orthonormalize.hpp
+///
+/// @see core (dependence)
+/// @see gtx_extented_min_max (dependence)
+///
+/// @defgroup gtx_orthonormalize GLM_GTX_orthonormalize
+/// @ingroup gtx
+///
+/// @brief Orthonormalize matrices.
+///
+/// <glm/gtx/orthonormalize.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependency:
+#include "../vec3.hpp"
+#include "../mat3x3.hpp"
+#include "../geometric.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_orthonormalize extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_orthonormalize
+ /// @{
+
+ /// Returns the orthonormalized matrix of m.
+ ///
+ /// @see gtx_orthonormalize
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x3<T, P> orthonormalize(tmat3x3<T, P> const & m);
+
+ /// Orthonormalizes x according y.
+ ///
+ /// @see gtx_orthonormalize
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> orthonormalize(tvec3<T, P> const & x, tvec3<T, P> const & y);
+
+ /// @}
+}//namespace glm
+
+#include "orthonormalize.inl"
diff --git a/src/third_party/glm/glm/gtx/orthonormalize.inl b/src/third_party/glm/glm/gtx/orthonormalize.inl
new file mode 100644
index 0000000..4796384
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/orthonormalize.inl
@@ -0,0 +1,30 @@
+/// @ref gtx_orthonormalize
+/// @file glm/gtx/orthonormalize.inl
+
+namespace glm
+{
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> orthonormalize(tmat3x3<T, P> const & m)
+ {
+ tmat3x3<T, P> r = m;
+
+ r[0] = normalize(r[0]);
+
+ T d0 = dot(r[0], r[1]);
+ r[1] -= r[0] * d0;
+ r[1] = normalize(r[1]);
+
+ T d1 = dot(r[1], r[2]);
+ d0 = dot(r[0], r[2]);
+ r[2] -= r[0] * d0 + r[1] * d1;
+ r[2] = normalize(r[2]);
+
+ return r;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> orthonormalize(tvec3<T, P> const & x, tvec3<T, P> const & y)
+ {
+ return normalize(x - y * dot(y, x));
+ }
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtx/perpendicular.hpp b/src/third_party/glm/glm/gtx/perpendicular.hpp
new file mode 100644
index 0000000..8b6260a
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/perpendicular.hpp
@@ -0,0 +1,39 @@
+/// @ref gtx_perpendicular
+/// @file glm/gtx/perpendicular.hpp
+///
+/// @see core (dependence)
+/// @see gtx_projection (dependence)
+///
+/// @defgroup gtx_perpendicular GLM_GTX_perpendicular
+/// @ingroup gtx
+///
+/// @brief Perpendicular of a vector from other one
+///
+/// <glm/gtx/perpendicular.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependency:
+#include "../glm.hpp"
+#include "../gtx/projection.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_perpendicular extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_perpendicular
+ /// @{
+
+ //! Projects x a perpendicular axis of Normal.
+ //! From GLM_GTX_perpendicular extension.
+ template <typename vecType>
+ GLM_FUNC_DECL vecType perp(
+ vecType const & x,
+ vecType const & Normal);
+
+ /// @}
+}//namespace glm
+
+#include "perpendicular.inl"
diff --git a/src/third_party/glm/glm/gtx/perpendicular.inl b/src/third_party/glm/glm/gtx/perpendicular.inl
new file mode 100644
index 0000000..08a7a81
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/perpendicular.inl
@@ -0,0 +1,15 @@
+/// @ref gtx_perpendicular
+/// @file glm/gtx/perpendicular.inl
+
+namespace glm
+{
+ template <typename vecType>
+ GLM_FUNC_QUALIFIER vecType perp
+ (
+ vecType const & x,
+ vecType const & Normal
+ )
+ {
+ return x - proj(x, Normal);
+ }
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtx/polar_coordinates.hpp b/src/third_party/glm/glm/gtx/polar_coordinates.hpp
new file mode 100644
index 0000000..c647c0f
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/polar_coordinates.hpp
@@ -0,0 +1,44 @@
+/// @ref gtx_polar_coordinates
+/// @file glm/gtx/polar_coordinates.hpp
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_polar_coordinates GLM_GTX_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.
+
+#pragma once
+
+// Dependency:
+#include "../glm.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_polar_coordinates extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_polar_coordinates
+ /// @{
+
+ /// Convert Euclidean to Polar coordinates, x is the xz distance, y, the latitude and z the longitude.
+ ///
+ /// @see gtx_polar_coordinates
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> polar(
+ tvec3<T, P> const & euclidean);
+
+ /// Convert Polar to Euclidean coordinates.
+ ///
+ /// @see gtx_polar_coordinates
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> euclidean(
+ tvec2<T, P> const & polar);
+
+ /// @}
+}//namespace glm
+
+#include "polar_coordinates.inl"
diff --git a/src/third_party/glm/glm/gtx/polar_coordinates.inl b/src/third_party/glm/glm/gtx/polar_coordinates.inl
new file mode 100644
index 0000000..afc9d2b
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/polar_coordinates.inl
@@ -0,0 +1,37 @@
+/// @ref gtx_polar_coordinates
+/// @file glm/gtx/polar_coordinates.inl
+
+namespace glm
+{
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> polar
+ (
+ tvec3<T, P> const & euclidean
+ )
+ {
+ T const Length(length(euclidean));
+ tvec3<T, P> const tmp(euclidean / Length);
+ T const xz_dist(sqrt(tmp.x * tmp.x + tmp.z * tmp.z));
+
+ return tvec3<T, P>(
+ asin(tmp.y), // latitude
+ atan(tmp.x, tmp.z), // longitude
+ xz_dist); // xz distance
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> euclidean
+ (
+ tvec2<T, P> const & polar
+ )
+ {
+ T const latitude(polar.x);
+ T const longitude(polar.y);
+
+ return tvec3<T, P>(
+ cos(latitude) * sin(longitude),
+ sin(latitude),
+ cos(latitude) * cos(longitude));
+ }
+
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtx/projection.hpp b/src/third_party/glm/glm/gtx/projection.hpp
new file mode 100644
index 0000000..fcddae8
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/projection.hpp
@@ -0,0 +1,36 @@
+/// @ref gtx_projection
+/// @file glm/gtx/projection.hpp
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_projection GLM_GTX_projection
+/// @ingroup gtx
+///
+/// @brief Projection of a vector to other one
+///
+/// <glm/gtx/projection.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependency:
+#include "../geometric.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_projection extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_projection
+ /// @{
+
+ /// Projects x on Normal.
+ ///
+ /// @see gtx_projection
+ template <typename vecType>
+ GLM_FUNC_DECL vecType proj(vecType const & x, vecType const & Normal);
+
+ /// @}
+}//namespace glm
+
+#include "projection.inl"
diff --git a/src/third_party/glm/glm/gtx/projection.inl b/src/third_party/glm/glm/gtx/projection.inl
new file mode 100644
index 0000000..d21fe83
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/projection.inl
@@ -0,0 +1,11 @@
+/// @ref gtx_projection
+/// @file glm/gtx/projection.inl
+
+namespace glm
+{
+ template <typename vecType>
+ GLM_FUNC_QUALIFIER vecType proj(vecType const & x, vecType const & Normal)
+ {
+ return glm::dot(x, Normal) / glm::dot(Normal, Normal) * Normal;
+ }
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtx/quaternion.hpp b/src/third_party/glm/glm/gtx/quaternion.hpp
new file mode 100644
index 0000000..674d7e7
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/quaternion.hpp
@@ -0,0 +1,185 @@
+/// @ref gtx_quaternion
+/// @file glm/gtx/quaternion.hpp
+///
+/// @see core (dependence)
+/// @see gtx_extented_min_max (dependence)
+///
+/// @defgroup gtx_quaternion GLM_GTX_quaternion
+/// @ingroup gtx
+///
+/// @brief Extented quaternion types and functions
+///
+/// <glm/gtx/quaternion.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependency:
+#include "../glm.hpp"
+#include "../gtc/constants.hpp"
+#include "../gtc/quaternion.hpp"
+#include "../gtx/norm.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_quaternion extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_quaternion
+ /// @{
+
+ /// Compute a cross product between a quaternion and a vector.
+ ///
+ /// @see gtx_quaternion
+ template<typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> cross(
+ tquat<T, P> const & q,
+ tvec3<T, P> const & v);
+
+ //! Compute a cross product between a vector and a quaternion.
+ ///
+ /// @see gtx_quaternion
+ template<typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> cross(
+ tvec3<T, P> const & v,
+ tquat<T, P> const & q);
+
+ //! Compute a point on a path according squad equation.
+ //! q1 and q2 are control points; s1 and s2 are intermediate control points.
+ ///
+ /// @see gtx_quaternion
+ template<typename T, precision P>
+ GLM_FUNC_DECL tquat<T, P> squad(
+ tquat<T, P> const & q1,
+ tquat<T, P> const & q2,
+ tquat<T, P> const & s1,
+ tquat<T, P> const & s2,
+ T const & h);
+
+ //! Returns an intermediate control point for squad interpolation.
+ ///
+ /// @see gtx_quaternion
+ template<typename T, precision P>
+ GLM_FUNC_DECL tquat<T, P> intermediate(
+ tquat<T, P> const & prev,
+ tquat<T, P> const & curr,
+ tquat<T, P> const & next);
+
+ //! Returns a exp of a quaternion.
+ ///
+ /// @see gtx_quaternion
+ template<typename T, precision P>
+ GLM_FUNC_DECL tquat<T, P> exp(
+ tquat<T, P> const & q);
+
+ //! Returns a log of a quaternion.
+ ///
+ /// @see gtx_quaternion
+ template<typename T, precision P>
+ GLM_FUNC_DECL tquat<T, P> log(
+ tquat<T, P> const & q);
+
+ /// Returns x raised to the y power.
+ ///
+ /// @see gtx_quaternion
+ template<typename T, precision P>
+ GLM_FUNC_DECL tquat<T, P> pow(
+ tquat<T, P> const & x,
+ T const & y);
+
+ //! Returns quarternion square root.
+ ///
+ /// @see gtx_quaternion
+ //template<typename T, precision P>
+ //tquat<T, P> sqrt(
+ // tquat<T, P> const & q);
+
+ //! Rotates a 3 components vector by a quaternion.
+ ///
+ /// @see gtx_quaternion
+ template<typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> rotate(
+ tquat<T, P> const & q,
+ tvec3<T, P> const & v);
+
+ /// Rotates a 4 components vector by a quaternion.
+ ///
+ /// @see gtx_quaternion
+ template<typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> rotate(
+ tquat<T, P> const & q,
+ tvec4<T, P> const & v);
+
+ /// Extract the real component of a quaternion.
+ ///
+ /// @see gtx_quaternion
+ template<typename T, precision P>
+ GLM_FUNC_DECL T extractRealComponent(
+ tquat<T, P> const & q);
+
+ /// Converts a quaternion to a 3 * 3 matrix.
+ ///
+ /// @see gtx_quaternion
+ template<typename T, precision P>
+ GLM_FUNC_DECL tmat3x3<T, P> toMat3(
+ tquat<T, P> const & x){return mat3_cast(x);}
+
+ /// Converts a quaternion to a 4 * 4 matrix.
+ ///
+ /// @see gtx_quaternion
+ template<typename T, precision P>
+ GLM_FUNC_DECL tmat4x4<T, P> toMat4(
+ tquat<T, P> const & x){return mat4_cast(x);}
+
+ /// Converts a 3 * 3 matrix to a quaternion.
+ ///
+ /// @see gtx_quaternion
+ template<typename T, precision P>
+ GLM_FUNC_DECL tquat<T, P> toQuat(
+ tmat3x3<T, P> const & x){return quat_cast(x);}
+
+ /// Converts a 4 * 4 matrix to a quaternion.
+ ///
+ /// @see gtx_quaternion
+ template<typename T, precision P>
+ GLM_FUNC_DECL tquat<T, P> toQuat(
+ tmat4x4<T, P> const & x){return quat_cast(x);}
+
+ /// Quaternion interpolation using the rotation short path.
+ ///
+ /// @see gtx_quaternion
+ template<typename T, precision P>
+ GLM_FUNC_DECL tquat<T, P> shortMix(
+ tquat<T, P> const & x,
+ tquat<T, P> const & y,
+ T const & a);
+
+ /// Quaternion normalized linear interpolation.
+ ///
+ /// @see gtx_quaternion
+ template<typename T, precision P>
+ GLM_FUNC_DECL tquat<T, P> fastMix(
+ tquat<T, P> const & x,
+ tquat<T, P> const & y,
+ T const & a);
+
+ /// Compute the rotation between two vectors.
+ /// param orig vector, needs to be normalized
+ /// param dest vector, needs to be normalized
+ ///
+ /// @see gtx_quaternion
+ template<typename T, precision P>
+ GLM_FUNC_DECL tquat<T, P> rotation(
+ tvec3<T, P> const & orig,
+ tvec3<T, P> const & dest);
+
+ /// Returns the squared length of x.
+ ///
+ /// @see gtx_quaternion
+ template<typename T, precision P>
+ GLM_FUNC_DECL T length2(tquat<T, P> const & q);
+
+ /// @}
+}//namespace glm
+
+#include "quaternion.inl"
diff --git a/src/third_party/glm/glm/gtx/quaternion.inl b/src/third_party/glm/glm/gtx/quaternion.inl
new file mode 100644
index 0000000..c86ec18
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/quaternion.inl
@@ -0,0 +1,212 @@
+/// @ref gtx_quaternion
+/// @file glm/gtx/quaternion.inl
+
+#include <limits>
+#include "../gtc/constants.hpp"
+
+namespace glm
+{
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> cross(tvec3<T, P> const& v, tquat<T, P> const& q)
+ {
+ return inverse(q) * v;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> cross(tquat<T, P> const& q, tvec3<T, P> const& v)
+ {
+ return q * v;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tquat<T, P> squad
+ (
+ tquat<T, P> const & q1,
+ tquat<T, P> const & q2,
+ tquat<T, P> const & s1,
+ tquat<T, P> const & s2,
+ T const & h)
+ {
+ return mix(mix(q1, q2, h), mix(s1, s2, h), static_cast<T>(2) * (static_cast<T>(1) - h) * h);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tquat<T, P> intermediate
+ (
+ tquat<T, P> const & prev,
+ tquat<T, P> const & curr,
+ tquat<T, P> const & next
+ )
+ {
+ tquat<T, P> invQuat = inverse(curr);
+ return exp((log(next + invQuat) + log(prev + invQuat)) / static_cast<T>(-4)) * curr;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tquat<T, P> exp(tquat<T, P> const& q)
+ {
+ tvec3<T, P> u(q.x, q.y, q.z);
+ T const Angle = glm::length(u);
+ if (Angle < epsilon<T>())
+ return tquat<T, P>();
+
+ tvec3<T, P> const v(u / Angle);
+ return tquat<T, P>(cos(Angle), sin(Angle) * v);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tquat<T, P> log(tquat<T, P> const& q)
+ {
+ tvec3<T, P> u(q.x, q.y, q.z);
+ T Vec3Len = length(u);
+
+ if (Vec3Len < epsilon<T>())
+ {
+ if(q.w > static_cast<T>(0))
+ return tquat<T, P>(log(q.w), static_cast<T>(0), static_cast<T>(0), static_cast<T>(0));
+ else if(q.w < static_cast<T>(0))
+ return tquat<T, P>(log(-q.w), pi<T>(), static_cast<T>(0), static_cast<T>(0));
+ else
+ return tquat<T, P>(std::numeric_limits<T>::infinity(), std::numeric_limits<T>::infinity(), std::numeric_limits<T>::infinity(), std::numeric_limits<T>::infinity());
+ }
+ else
+ {
+ T t = atan(Vec3Len, T(q.w)) / Vec3Len;
+ T QuatLen2 = Vec3Len * Vec3Len + q.w * q.w;
+ return tquat<T, P>(static_cast<T>(0.5) * log(QuatLen2), t * q.x, t * q.y, t * q.z);
+ }
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tquat<T, P> pow(tquat<T, P> const & x, T const & y)
+ {
+ //Raising to the power of 0 should yield 1
+ //Needed to prevent a division by 0 error later on
+ if(y > -epsilon<T>() && y < epsilon<T>())
+ return tquat<T, P>(1,0,0,0);
+
+ //To deal with non-unit quaternions
+ T magnitude = sqrt(x.x * x.x + x.y * x.y + x.z * x.z + x.w *x.w);
+
+ //Equivalent to raising a real number to a power
+ //Needed to prevent a division by 0 error later on
+ if(abs(x.w / magnitude) > static_cast<T>(1) - epsilon<T>() && abs(x.w / magnitude) < static_cast<T>(1) + epsilon<T>())
+ return tquat<T, P>(pow(x.w, y),0,0,0);
+
+ T Angle = acos(x.w / magnitude);
+ T NewAngle = Angle * y;
+ T Div = sin(NewAngle) / sin(Angle);
+ T Mag = pow(magnitude, y - static_cast<T>(1));
+
+ return tquat<T, P>(cos(NewAngle) * magnitude * Mag, x.x * Div * Mag, x.y * Div * Mag, x.z * Div * Mag);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> rotate(tquat<T, P> const& q, tvec3<T, P> const& v)
+ {
+ return q * v;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> rotate(tquat<T, P> const& q, tvec4<T, P> const& v)
+ {
+ return q * v;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER T extractRealComponent(tquat<T, P> const& q)
+ {
+ T w = static_cast<T>(1) - q.x * q.x - q.y * q.y - q.z * q.z;
+ if(w < T(0))
+ return T(0);
+ else
+ return -sqrt(w);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER T length2(tquat<T, P> const& q)
+ {
+ return q.x * q.x + q.y * q.y + q.z * q.z + q.w * q.w;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tquat<T, P> shortMix(tquat<T, P> const& x, tquat<T, P> const& y, T const& a)
+ {
+ if(a <= static_cast<T>(0)) return x;
+ if(a >= static_cast<T>(1)) return y;
+
+ T fCos = dot(x, y);
+ tquat<T, P> y2(y); //BUG!!! tquat<T> y2;
+ if(fCos < static_cast<T>(0))
+ {
+ y2 = -y;
+ fCos = -fCos;
+ }
+
+ //if(fCos > 1.0f) // problem
+ T k0, k1;
+ if(fCos > (static_cast<T>(1) - epsilon<T>()))
+ {
+ k0 = static_cast<T>(1) - a;
+ k1 = static_cast<T>(0) + a; //BUG!!! 1.0f + a;
+ }
+ else
+ {
+ T fSin = sqrt(T(1) - fCos * fCos);
+ T fAngle = atan(fSin, fCos);
+ T fOneOverSin = static_cast<T>(1) / fSin;
+ k0 = sin((static_cast<T>(1) - a) * fAngle) * fOneOverSin;
+ k1 = sin((static_cast<T>(0) + a) * fAngle) * fOneOverSin;
+ }
+
+ return tquat<T, P>(
+ k0 * x.w + k1 * y2.w,
+ k0 * x.x + k1 * y2.x,
+ k0 * x.y + k1 * y2.y,
+ k0 * x.z + k1 * y2.z);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tquat<T, P> fastMix(tquat<T, P> const& x, tquat<T, P> const& y, T const & a)
+ {
+ return glm::normalize(x * (static_cast<T>(1) - a) + (y * a));
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tquat<T, P> rotation(tvec3<T, P> const& orig, tvec3<T, P> const& dest)
+ {
+ T cosTheta = dot(orig, dest);
+ tvec3<T, P> rotationAxis;
+
+ if(cosTheta >= static_cast<T>(1) - epsilon<T>())
+ return quat();
+
+ if(cosTheta < static_cast<T>(-1) + epsilon<T>())
+ {
+ // special case when vectors in opposite directions :
+ // there is no "ideal" rotation axis
+ // So guess one; any will do as long as it's perpendicular to start
+ // This implementation favors a rotation around the Up axis (Y),
+ // since it's often what you want to do.
+ rotationAxis = cross(tvec3<T, P>(0, 0, 1), orig);
+ if(length2(rotationAxis) < epsilon<T>()) // bad luck, they were parallel, try again!
+ rotationAxis = cross(tvec3<T, P>(1, 0, 0), orig);
+
+ rotationAxis = normalize(rotationAxis);
+ return angleAxis(pi<T>(), rotationAxis);
+ }
+
+ // Implementation from Stan Melax's Game Programming Gems 1 article
+ rotationAxis = cross(orig, dest);
+
+ T s = sqrt((T(1) + cosTheta) * static_cast<T>(2));
+ T invs = static_cast<T>(1) / s;
+
+ return tquat<T, P>(
+ s * static_cast<T>(0.5f),
+ rotationAxis.x * invs,
+ rotationAxis.y * invs,
+ rotationAxis.z * invs);
+ }
+
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtx/range.hpp b/src/third_party/glm/glm/gtx/range.hpp
new file mode 100644
index 0000000..00d78b4
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/range.hpp
@@ -0,0 +1,85 @@
+/// @ref gtx_range
+/// @file glm/gtx/range.hpp
+/// @author Joshua Moerman
+///
+/// @defgroup gtx_range GLM_GTX_range
+/// @ingroup gtx
+///
+/// @brief Defines begin and end for vectors and matrices. Useful for range-based for loop.
+/// The range is defined over the elements, not over columns or rows (e.g. mat4 has 16 elements).
+///
+/// <glm/gtx/range.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependencies
+#include "../detail/setup.hpp"
+
+#if !GLM_HAS_RANGE_FOR
+# error "GLM_GTX_range requires C++11 suppport or 'range for'"
+#endif
+
+#include "../gtc/type_ptr.hpp"
+#include "../gtc/vec1.hpp"
+
+namespace glm
+{
+ /// @addtogroup gtx_range
+ /// @{
+
+ template <typename T, precision P>
+ inline length_t components(tvec1<T, P> const & v)
+ {
+ return v.length();
+ }
+
+ template <typename T, precision P>
+ inline length_t components(tvec2<T, P> const & v)
+ {
+ return v.length();
+ }
+
+ template <typename T, precision P>
+ inline length_t components(tvec3<T, P> const & v)
+ {
+ return v.length();
+ }
+
+ template <typename T, precision P>
+ inline length_t components(tvec4<T, P> const & v)
+ {
+ return v.length();
+ }
+
+ template <typename genType>
+ inline length_t components(genType const & m)
+ {
+ return m.length() * m[0].length();
+ }
+
+ template <typename genType>
+ inline typename genType::value_type const * begin(genType const & v)
+ {
+ return value_ptr(v);
+ }
+
+ template <typename genType>
+ inline typename genType::value_type const * end(genType const & v)
+ {
+ return begin(v) + components(v);
+ }
+
+ template <typename genType>
+ inline typename genType::value_type * begin(genType& v)
+ {
+ return value_ptr(v);
+ }
+
+ template <typename genType>
+ inline typename genType::value_type * end(genType& v)
+ {
+ return begin(v) + components(v);
+ }
+
+ /// @}
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtx/raw_data.hpp b/src/third_party/glm/glm/gtx/raw_data.hpp
new file mode 100644
index 0000000..2625fd1
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/raw_data.hpp
@@ -0,0 +1,47 @@
+/// @ref gtx_raw_data
+/// @file glm/gtx/raw_data.hpp
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_raw_data GLM_GTX_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.
+
+#pragma once
+
+// Dependencies
+#include "../detail/setup.hpp"
+#include "../detail/type_int.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_raw_data extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_raw_data
+ /// @{
+
+ //! Type for byte numbers.
+ //! From GLM_GTX_raw_data extension.
+ typedef detail::uint8 byte;
+
+ //! Type for word numbers.
+ //! From GLM_GTX_raw_data extension.
+ typedef detail::uint16 word;
+
+ //! Type for dword numbers.
+ //! From GLM_GTX_raw_data extension.
+ typedef detail::uint32 dword;
+
+ //! Type for qword numbers.
+ //! From GLM_GTX_raw_data extension.
+ typedef detail::uint64 qword;
+
+ /// @}
+}// namespace glm
+
+#include "raw_data.inl"
diff --git a/src/third_party/glm/glm/gtx/raw_data.inl b/src/third_party/glm/glm/gtx/raw_data.inl
new file mode 100644
index 0000000..29af148
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/raw_data.inl
@@ -0,0 +1,2 @@
+/// @ref gtx_raw_data
+/// @file glm/gtx/raw_data.inl
diff --git a/src/third_party/glm/glm/gtx/rotate_normalized_axis.hpp b/src/third_party/glm/glm/gtx/rotate_normalized_axis.hpp
new file mode 100644
index 0000000..f1dfa7b
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/rotate_normalized_axis.hpp
@@ -0,0 +1,64 @@
+/// @ref gtx_rotate_normalized_axis
+/// @file glm/gtx/rotate_normalized_axis.hpp
+///
+/// @see core (dependence)
+/// @see gtc_matrix_transform
+/// @see gtc_quaternion
+///
+/// @defgroup gtx_rotate_normalized_axis GLM_GTX_rotate_normalized_axis
+/// @ingroup gtx
+///
+/// @brief Quaternions and matrices rotations around normalized axis.
+///
+/// <glm/gtx/rotate_normalized_axis.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependency:
+#include "../glm.hpp"
+#include "../gtc/epsilon.hpp"
+#include "../gtc/quaternion.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_rotate_normalized_axis extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_rotate_normalized_axis
+ /// @{
+
+ /// Builds a rotation 4 * 4 matrix created from a normalized axis and an angle.
+ ///
+ /// @param m Input matrix multiplied by this rotation matrix.
+ /// @param angle Rotation angle expressed in radians if GLM_FORCE_RADIANS is define or degrees otherwise.
+ /// @param axis Rotation axis, must be normalized.
+ /// @tparam T Value type used to build the matrix. Currently supported: half (not recommanded), float or double.
+ ///
+ /// @see gtx_rotate_normalized_axis
+ /// @see - rotate(T angle, T x, T y, T z)
+ /// @see - rotate(tmat4x4<T, P> const & m, T angle, T x, T y, T z)
+ /// @see - rotate(T angle, tvec3<T, P> const & v)
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x4<T, P> rotateNormalizedAxis(
+ tmat4x4<T, P> const & m,
+ T const & angle,
+ tvec3<T, P> const & axis);
+
+ /// Rotates a quaternion from a vector of 3 components normalized axis and an angle.
+ ///
+ /// @param q Source orientation
+ /// @param angle Angle expressed in radians if GLM_FORCE_RADIANS is define or degrees otherwise.
+ /// @param axis Normalized axis of the rotation, must be normalized.
+ ///
+ /// @see gtx_rotate_normalized_axis
+ template <typename T, precision P>
+ GLM_FUNC_DECL tquat<T, P> rotateNormalizedAxis(
+ tquat<T, P> const & q,
+ T const & angle,
+ tvec3<T, P> const & axis);
+
+ /// @}
+}//namespace glm
+
+#include "rotate_normalized_axis.inl"
diff --git a/src/third_party/glm/glm/gtx/rotate_normalized_axis.inl b/src/third_party/glm/glm/gtx/rotate_normalized_axis.inl
new file mode 100644
index 0000000..dc1b1a8
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/rotate_normalized_axis.inl
@@ -0,0 +1,59 @@
+/// @ref gtx_rotate_normalized_axis
+/// @file glm/gtx/rotate_normalized_axis.inl
+
+namespace glm
+{
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> rotateNormalizedAxis
+ (
+ tmat4x4<T, P> const & m,
+ T const & angle,
+ tvec3<T, P> const & v
+ )
+ {
+ T const a = angle;
+ T const c = cos(a);
+ T const s = sin(a);
+
+ tvec3<T, P> const axis(v);
+
+ tvec3<T, P> const temp((static_cast<T>(1) - c) * axis);
+
+ tmat4x4<T, P> Rotate(uninitialize);
+ Rotate[0][0] = c + temp[0] * axis[0];
+ Rotate[0][1] = 0 + temp[0] * axis[1] + s * axis[2];
+ Rotate[0][2] = 0 + temp[0] * axis[2] - s * axis[1];
+
+ Rotate[1][0] = 0 + temp[1] * axis[0] - s * axis[2];
+ Rotate[1][1] = c + temp[1] * axis[1];
+ Rotate[1][2] = 0 + temp[1] * axis[2] + s * axis[0];
+
+ Rotate[2][0] = 0 + temp[2] * axis[0] + s * axis[1];
+ Rotate[2][1] = 0 + temp[2] * axis[1] - s * axis[0];
+ Rotate[2][2] = c + temp[2] * axis[2];
+
+ tmat4x4<T, P> Result(uninitialize);
+ Result[0] = m[0] * Rotate[0][0] + m[1] * Rotate[0][1] + m[2] * Rotate[0][2];
+ Result[1] = m[0] * Rotate[1][0] + m[1] * Rotate[1][1] + m[2] * Rotate[1][2];
+ Result[2] = m[0] * Rotate[2][0] + m[1] * Rotate[2][1] + m[2] * Rotate[2][2];
+ Result[3] = m[3];
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tquat<T, P> rotateNormalizedAxis
+ (
+ tquat<T, P> const & q,
+ T const & angle,
+ tvec3<T, P> const & v
+ )
+ {
+ tvec3<T, P> const Tmp(v);
+
+ T const AngleRad(angle);
+ T const Sin = sin(AngleRad * T(0.5));
+
+ return q * tquat<T, P>(cos(AngleRad * static_cast<T>(0.5)), Tmp.x * Sin, Tmp.y * Sin, Tmp.z * Sin);
+ //return gtc::quaternion::cross(q, tquat<T, P>(cos(AngleRad * T(0.5)), Tmp.x * fSin, Tmp.y * fSin, Tmp.z * fSin));
+ }
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtx/rotate_vector.hpp b/src/third_party/glm/glm/gtx/rotate_vector.hpp
new file mode 100644
index 0000000..91d1784
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/rotate_vector.hpp
@@ -0,0 +1,117 @@
+/// @ref gtx_rotate_vector
+/// @file glm/gtx/rotate_vector.hpp
+///
+/// @see core (dependence)
+/// @see gtx_transform (dependence)
+///
+/// @defgroup gtx_rotate_vector GLM_GTX_rotate_vector
+/// @ingroup gtx
+///
+/// @brief Function to directly rotate a vector
+///
+/// <glm/gtx/rotate_vector.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependency:
+#include "../glm.hpp"
+#include "../gtx/transform.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_rotate_vector extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_rotate_vector
+ /// @{
+
+ /// Returns Spherical interpolation between two vectors
+ ///
+ /// @param x A first vector
+ /// @param y A second vector
+ /// @param a Interpolation factor. The interpolation is defined beyond the range [0, 1].
+ ///
+ /// @see gtx_rotate_vector
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> slerp(
+ tvec3<T, P> const & x,
+ tvec3<T, P> const & y,
+ T const & a);
+
+ //! Rotate a two dimensional vector.
+ //! From GLM_GTX_rotate_vector extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec2<T, P> rotate(
+ tvec2<T, P> const & v,
+ T const & angle);
+
+ //! Rotate a three dimensional vector around an axis.
+ //! From GLM_GTX_rotate_vector extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> rotate(
+ tvec3<T, P> const & v,
+ T const & angle,
+ tvec3<T, P> const & normal);
+
+ //! Rotate a four dimensional vector around an axis.
+ //! From GLM_GTX_rotate_vector extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> rotate(
+ tvec4<T, P> const & v,
+ T const & angle,
+ tvec3<T, P> const & normal);
+
+ //! Rotate a three dimensional vector around the X axis.
+ //! From GLM_GTX_rotate_vector extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> rotateX(
+ tvec3<T, P> const & v,
+ T const & angle);
+
+ //! Rotate a three dimensional vector around the Y axis.
+ //! From GLM_GTX_rotate_vector extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> rotateY(
+ tvec3<T, P> const & v,
+ T const & angle);
+
+ //! Rotate a three dimensional vector around the Z axis.
+ //! From GLM_GTX_rotate_vector extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec3<T, P> rotateZ(
+ tvec3<T, P> const & v,
+ T const & angle);
+
+ //! Rotate a four dimentionnals vector around the X axis.
+ //! From GLM_GTX_rotate_vector extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> rotateX(
+ tvec4<T, P> const & v,
+ T const & angle);
+
+ //! Rotate a four dimensional vector around the X axis.
+ //! From GLM_GTX_rotate_vector extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> rotateY(
+ tvec4<T, P> const & v,
+ T const & angle);
+
+ //! Rotate a four dimensional vector around the X axis.
+ //! From GLM_GTX_rotate_vector extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL tvec4<T, P> rotateZ(
+ tvec4<T, P> const & v,
+ T const & angle);
+
+ //! Build a rotation matrix from a normal and a up vector.
+ //! From GLM_GTX_rotate_vector extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x4<T, P> orientation(
+ tvec3<T, P> const & Normal,
+ tvec3<T, P> const & Up);
+
+ /// @}
+}//namespace glm
+
+#include "rotate_vector.inl"
diff --git a/src/third_party/glm/glm/gtx/rotate_vector.inl b/src/third_party/glm/glm/gtx/rotate_vector.inl
new file mode 100644
index 0000000..5620e96
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/rotate_vector.inl
@@ -0,0 +1,188 @@
+/// @ref gtx_rotate_vector
+/// @file glm/gtx/rotate_vector.inl
+
+namespace glm
+{
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> slerp
+ (
+ tvec3<T, P> const & x,
+ tvec3<T, P> const & y,
+ T const & a
+ )
+ {
+ // get cosine of angle between vectors (-1 -> 1)
+ T CosAlpha = dot(x, y);
+ // get angle (0 -> pi)
+ T Alpha = acos(CosAlpha);
+ // get sine of angle between vectors (0 -> 1)
+ T SinAlpha = sin(Alpha);
+ // this breaks down when SinAlpha = 0, i.e. Alpha = 0 or pi
+ T t1 = sin((static_cast<T>(1) - a) * Alpha) / SinAlpha;
+ T t2 = sin(a * Alpha) / SinAlpha;
+
+ // interpolate src vectors
+ return x * t1 + y * t2;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<T, P> rotate
+ (
+ tvec2<T, P> const & v,
+ T const & angle
+ )
+ {
+ tvec2<T, P> Result;
+ T const Cos(cos(angle));
+ T const Sin(sin(angle));
+
+ Result.x = v.x * Cos - v.y * Sin;
+ Result.y = v.x * Sin + v.y * Cos;
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> rotate
+ (
+ tvec3<T, P> const & v,
+ T const & angle,
+ tvec3<T, P> const & normal
+ )
+ {
+ return tmat3x3<T, P>(glm::rotate(angle, normal)) * v;
+ }
+ /*
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> rotateGTX(
+ const tvec3<T, P>& x,
+ T angle,
+ const tvec3<T, P>& normal)
+ {
+ const T Cos = cos(radians(angle));
+ const T Sin = sin(radians(angle));
+ return x * Cos + ((x * normal) * (T(1) - Cos)) * normal + cross(x, normal) * Sin;
+ }
+ */
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> rotate
+ (
+ tvec4<T, P> const & v,
+ T const & angle,
+ tvec3<T, P> const & normal
+ )
+ {
+ return rotate(angle, normal) * v;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> rotateX
+ (
+ tvec3<T, P> const & v,
+ T const & angle
+ )
+ {
+ tvec3<T, P> Result(v);
+ T const Cos(cos(angle));
+ T const Sin(sin(angle));
+
+ Result.y = v.y * Cos - v.z * Sin;
+ Result.z = v.y * Sin + v.z * Cos;
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> rotateY
+ (
+ tvec3<T, P> const & v,
+ T const & angle
+ )
+ {
+ tvec3<T, P> Result = v;
+ T const Cos(cos(angle));
+ T const Sin(sin(angle));
+
+ Result.x = v.x * Cos + v.z * Sin;
+ Result.z = -v.x * Sin + v.z * Cos;
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<T, P> rotateZ
+ (
+ tvec3<T, P> const & v,
+ T const & angle
+ )
+ {
+ tvec3<T, P> Result = v;
+ T const Cos(cos(angle));
+ T const Sin(sin(angle));
+
+ Result.x = v.x * Cos - v.y * Sin;
+ Result.y = v.x * Sin + v.y * Cos;
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> rotateX
+ (
+ tvec4<T, P> const & v,
+ T const & angle
+ )
+ {
+ tvec4<T, P> Result = v;
+ T const Cos(cos(angle));
+ T const Sin(sin(angle));
+
+ Result.y = v.y * Cos - v.z * Sin;
+ Result.z = v.y * Sin + v.z * Cos;
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> rotateY
+ (
+ tvec4<T, P> const & v,
+ T const & angle
+ )
+ {
+ tvec4<T, P> Result = v;
+ T const Cos(cos(angle));
+ T const Sin(sin(angle));
+
+ Result.x = v.x * Cos + v.z * Sin;
+ Result.z = -v.x * Sin + v.z * Cos;
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<T, P> rotateZ
+ (
+ tvec4<T, P> const & v,
+ T const & angle
+ )
+ {
+ tvec4<T, P> Result = v;
+ T const Cos(cos(angle));
+ T const Sin(sin(angle));
+
+ Result.x = v.x * Cos - v.y * Sin;
+ Result.y = v.x * Sin + v.y * Cos;
+ return Result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> orientation
+ (
+ tvec3<T, P> const & Normal,
+ tvec3<T, P> const & Up
+ )
+ {
+ if(all(equal(Normal, Up)))
+ return tmat4x4<T, P>(T(1));
+
+ tvec3<T, P> RotationAxis = cross(Up, Normal);
+ T Angle = acos(dot(Normal, Up));
+
+ return rotate(Angle, RotationAxis);
+ }
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtx/scalar_multiplication.hpp b/src/third_party/glm/glm/gtx/scalar_multiplication.hpp
new file mode 100644
index 0000000..695e841
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/scalar_multiplication.hpp
@@ -0,0 +1,69 @@
+/// @ref gtx
+/// @file glm/gtx/scalar_multiplication.hpp
+/// @author Joshua Moerman
+///
+/// @brief Enables scalar multiplication for all types
+///
+/// Since GLSL is very strict about types, the following (often used) combinations do not work:
+/// double * vec4
+/// int * vec4
+/// vec4 / int
+/// So we'll fix that! Of course "float * vec4" should remain the same (hence the enable_if magic)
+
+#pragma once
+
+#include "../detail/setup.hpp"
+
+#if !GLM_HAS_TEMPLATE_ALIASES && !(GLM_COMPILER & GLM_COMPILER_GCC)
+# error "GLM_GTX_scalar_multiplication requires C++11 support or alias templates and if not support for GCC"
+#endif
+
+#include "../vec2.hpp"
+#include "../vec3.hpp"
+#include "../vec4.hpp"
+#include "../mat2x2.hpp"
+#include <type_traits>
+
+namespace glm
+{
+ template <typename T, typename Vec>
+ using return_type_scalar_multiplication = typename std::enable_if<
+ !std::is_same<T, float>::value // T may not be a float
+ && std::is_arithmetic<T>::value, Vec // But it may be an int or double (no vec3 or mat3, ...)
+ >::type;
+
+#define GLM_IMPLEMENT_SCAL_MULT(Vec) \
+ template <typename T> \
+ return_type_scalar_multiplication<T, Vec> \
+ operator*(T const & s, Vec rh){ \
+ return rh *= static_cast<float>(s); \
+ } \
+ \
+ template <typename T> \
+ return_type_scalar_multiplication<T, Vec> \
+ operator*(Vec lh, T const & s){ \
+ return lh *= static_cast<float>(s); \
+ } \
+ \
+ template <typename T> \
+ return_type_scalar_multiplication<T, Vec> \
+ operator/(Vec lh, T const & s){ \
+ return lh *= 1.0f / s; \
+ }
+
+GLM_IMPLEMENT_SCAL_MULT(vec2)
+GLM_IMPLEMENT_SCAL_MULT(vec3)
+GLM_IMPLEMENT_SCAL_MULT(vec4)
+
+GLM_IMPLEMENT_SCAL_MULT(mat2)
+GLM_IMPLEMENT_SCAL_MULT(mat2x3)
+GLM_IMPLEMENT_SCAL_MULT(mat2x4)
+GLM_IMPLEMENT_SCAL_MULT(mat3x2)
+GLM_IMPLEMENT_SCAL_MULT(mat3)
+GLM_IMPLEMENT_SCAL_MULT(mat3x4)
+GLM_IMPLEMENT_SCAL_MULT(mat4x2)
+GLM_IMPLEMENT_SCAL_MULT(mat4x3)
+GLM_IMPLEMENT_SCAL_MULT(mat4)
+
+#undef GLM_IMPLEMENT_SCAL_MULT
+} // namespace glm
diff --git a/src/third_party/glm/glm/gtx/scalar_relational.hpp b/src/third_party/glm/glm/gtx/scalar_relational.hpp
new file mode 100644
index 0000000..9695716
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/scalar_relational.hpp
@@ -0,0 +1,32 @@
+/// @ref gtx_scalar_relational
+/// @file glm/gtx/scalar_relational.hpp
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_scalar_relational GLM_GTX_scalar_relational
+/// @ingroup gtx
+///
+/// @brief Extend a position from a source to a position at a defined length.
+///
+/// <glm/gtx/scalar_relational.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependency:
+#include "../glm.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_extend extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_scalar_relational
+ /// @{
+
+
+
+ /// @}
+}//namespace glm
+
+#include "scalar_relational.inl"
diff --git a/src/third_party/glm/glm/gtx/scalar_relational.inl b/src/third_party/glm/glm/gtx/scalar_relational.inl
new file mode 100644
index 0000000..709da04
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/scalar_relational.inl
@@ -0,0 +1,89 @@
+/// @ref gtx_scalar_relational
+/// @file glm/gtx/scalar_relational.inl
+
+namespace glm
+{
+ template <typename T>
+ GLM_FUNC_QUALIFIER bool lessThan
+ (
+ T const & x,
+ T const & y
+ )
+ {
+ return x < y;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER bool lessThanEqual
+ (
+ T const & x,
+ T const & y
+ )
+ {
+ return x <= y;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER bool greaterThan
+ (
+ T const & x,
+ T const & y
+ )
+ {
+ return x > y;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER bool greaterThanEqual
+ (
+ T const & x,
+ T const & y
+ )
+ {
+ return x >= y;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER bool equal
+ (
+ T const & x,
+ T const & y
+ )
+ {
+ return x == y;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER bool notEqual
+ (
+ T const & x,
+ T const & y
+ )
+ {
+ return x != y;
+ }
+
+ GLM_FUNC_QUALIFIER bool any
+ (
+ bool const & x
+ )
+ {
+ return x;
+ }
+
+ GLM_FUNC_QUALIFIER bool all
+ (
+ bool const & x
+ )
+ {
+ return x;
+ }
+
+ GLM_FUNC_QUALIFIER bool not_
+ (
+ bool const & x
+ )
+ {
+ return !x;
+ }
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtx/spline.hpp b/src/third_party/glm/glm/gtx/spline.hpp
new file mode 100644
index 0000000..333a5bc
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/spline.hpp
@@ -0,0 +1,61 @@
+/// @ref gtx_spline
+/// @file glm/gtx/spline.hpp
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_spline GLM_GTX_spline
+/// @ingroup gtx
+///
+/// @brief Spline functions
+///
+/// <glm/gtx/spline.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependency:
+#include "../glm.hpp"
+#include "../gtx/optimum_pow.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_spline extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_spline
+ /// @{
+
+ /// Return a point from a catmull rom curve.
+ /// @see gtx_spline extension.
+ template <typename genType>
+ GLM_FUNC_DECL genType catmullRom(
+ genType const & v1,
+ genType const & v2,
+ genType const & v3,
+ genType const & v4,
+ typename genType::value_type const & s);
+
+ /// Return a point from a hermite curve.
+ /// @see gtx_spline extension.
+ template <typename genType>
+ GLM_FUNC_DECL genType hermite(
+ genType const & v1,
+ genType const & t1,
+ genType const & v2,
+ genType const & t2,
+ typename genType::value_type const & s);
+
+ /// Return a point from a cubic curve.
+ /// @see gtx_spline extension.
+ template <typename genType>
+ GLM_FUNC_DECL genType cubic(
+ genType const & v1,
+ genType const & v2,
+ genType const & v3,
+ genType const & v4,
+ typename genType::value_type const & s);
+
+ /// @}
+}//namespace glm
+
+#include "spline.inl"
diff --git a/src/third_party/glm/glm/gtx/spline.inl b/src/third_party/glm/glm/gtx/spline.inl
new file mode 100644
index 0000000..fcd3382
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/spline.inl
@@ -0,0 +1,63 @@
+/// @ref gtx_spline
+/// @file glm/gtx/spline.inl
+
+namespace glm
+{
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType catmullRom
+ (
+ genType const & v1,
+ genType const & v2,
+ genType const & v3,
+ genType const & v4,
+ typename genType::value_type const & s
+ )
+ {
+ typename genType::value_type s1 = s;
+ typename genType::value_type s2 = pow2(s);
+ typename genType::value_type s3 = pow3(s);
+
+ typename genType::value_type f1 = -s3 + typename genType::value_type(2) * s2 - s;
+ typename genType::value_type f2 = typename genType::value_type(3) * s3 - typename genType::value_type(5) * s2 + typename genType::value_type(2);
+ typename genType::value_type f3 = typename genType::value_type(-3) * s3 + typename genType::value_type(4) * s2 + s;
+ typename genType::value_type f4 = s3 - s2;
+
+ return (f1 * v1 + f2 * v2 + f3 * v3 + f4 * v4) / typename genType::value_type(2);
+
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType hermite
+ (
+ genType const & v1,
+ genType const & t1,
+ genType const & v2,
+ genType const & t2,
+ typename genType::value_type const & s
+ )
+ {
+ typename genType::value_type s1 = s;
+ typename genType::value_type s2 = pow2(s);
+ typename genType::value_type s3 = pow3(s);
+
+ typename genType::value_type f1 = typename genType::value_type(2) * s3 - typename genType::value_type(3) * s2 + typename genType::value_type(1);
+ typename genType::value_type f2 = typename genType::value_type(-2) * s3 + typename genType::value_type(3) * s2;
+ typename genType::value_type f3 = s3 - typename genType::value_type(2) * s2 + s;
+ typename genType::value_type f4 = s3 - s2;
+
+ return f1 * v1 + f2 * v2 + f3 * t1 + f4 * t2;
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType cubic
+ (
+ genType const & v1,
+ genType const & v2,
+ genType const & v3,
+ genType const & v4,
+ typename genType::value_type const & s
+ )
+ {
+ return ((v1 * s + v2) * s + v3) * s + v4;
+ }
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtx/std_based_type.hpp b/src/third_party/glm/glm/gtx/std_based_type.hpp
new file mode 100644
index 0000000..ea1791b
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/std_based_type.hpp
@@ -0,0 +1,63 @@
+/// @ref gtx_std_based_type
+/// @file glm/gtx/std_based_type.hpp
+///
+/// @see core (dependence)
+/// @see gtx_extented_min_max (dependence)
+///
+/// @defgroup gtx_std_based_type GLM_GTX_std_based_type
+/// @ingroup gtx
+///
+/// @brief Adds vector types based on STL value types.
+/// <glm/gtx/std_based_type.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependency:
+#include "../glm.hpp"
+#include <cstdlib>
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_std_based_type extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_std_based_type
+ /// @{
+
+ /// Vector type based of one std::size_t component.
+ /// @see GLM_GTX_std_based_type
+ typedef tvec1<std::size_t, defaultp> size1;
+
+ /// Vector type based of two std::size_t components.
+ /// @see GLM_GTX_std_based_type
+ typedef tvec2<std::size_t, defaultp> size2;
+
+ /// Vector type based of three std::size_t components.
+ /// @see GLM_GTX_std_based_type
+ typedef tvec3<std::size_t, defaultp> size3;
+
+ /// Vector type based of four std::size_t components.
+ /// @see GLM_GTX_std_based_type
+ typedef tvec4<std::size_t, defaultp> size4;
+
+ /// Vector type based of one std::size_t component.
+ /// @see GLM_GTX_std_based_type
+ typedef tvec1<std::size_t, defaultp> size1_t;
+
+ /// Vector type based of two std::size_t components.
+ /// @see GLM_GTX_std_based_type
+ typedef tvec2<std::size_t, defaultp> size2_t;
+
+ /// Vector type based of three std::size_t components.
+ /// @see GLM_GTX_std_based_type
+ typedef tvec3<std::size_t, defaultp> size3_t;
+
+ /// Vector type based of four std::size_t components.
+ /// @see GLM_GTX_std_based_type
+ typedef tvec4<std::size_t, defaultp> size4_t;
+
+ /// @}
+}//namespace glm
+
+#include "std_based_type.inl"
diff --git a/src/third_party/glm/glm/gtx/std_based_type.inl b/src/third_party/glm/glm/gtx/std_based_type.inl
new file mode 100644
index 0000000..ca431a3
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/std_based_type.inl
@@ -0,0 +1,7 @@
+/// @ref gtx_std_based_type
+/// @file glm/gtx/std_based_type.inl
+
+namespace glm
+{
+
+}
diff --git a/src/third_party/glm/glm/gtx/string_cast.hpp b/src/third_party/glm/glm/gtx/string_cast.hpp
new file mode 100644
index 0000000..d2b9fc6a
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/string_cast.hpp
@@ -0,0 +1,47 @@
+/// @ref gtx_string_cast
+/// @file glm/gtx/string_cast.hpp
+///
+/// @see core (dependence)
+/// @see gtc_half_float (dependence)
+/// @see gtx_integer (dependence)
+/// @see gtx_quaternion (dependence)
+///
+/// @defgroup gtx_string_cast GLM_GTX_string_cast
+/// @ingroup gtx
+///
+/// @brief Setup strings for GLM type values
+///
+/// <glm/gtx/string_cast.hpp> need to be included to use these functionalities.
+/// This extension is not supported with CUDA
+
+#pragma once
+
+// Dependency:
+#include "../glm.hpp"
+#include "../gtc/type_precision.hpp"
+#include "../gtc/quaternion.hpp"
+#include "../gtx/dual_quaternion.hpp"
+#include <string>
+
+#if(GLM_COMPILER & GLM_COMPILER_CUDA)
+# error "GLM_GTX_string_cast is not supported on CUDA compiler"
+#endif
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_string_cast extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_string_cast
+ /// @{
+
+ /// Create a string from a GLM vector or matrix typed variable.
+ /// @see gtx_string_cast extension.
+ template <template <typename, precision> class matType, typename T, precision P>
+ GLM_FUNC_DECL std::string to_string(matType<T, P> const & x);
+
+ /// @}
+}//namespace glm
+
+#include "string_cast.inl"
diff --git a/src/third_party/glm/glm/gtx/string_cast.inl b/src/third_party/glm/glm/gtx/string_cast.inl
new file mode 100644
index 0000000..19f136b
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/string_cast.inl
@@ -0,0 +1,458 @@
+/// @ref gtx_string_cast
+/// @file glm/gtx/string_cast.inl
+
+#include <cstdarg>
+#include <cstdio>
+
+namespace glm{
+namespace detail
+{
+ GLM_FUNC_QUALIFIER std::string format(const char* msg, ...)
+ {
+ std::size_t const STRING_BUFFER(4096);
+ char text[STRING_BUFFER];
+ va_list list;
+
+ if(msg == 0)
+ return std::string();
+
+ va_start(list, msg);
+# if(GLM_COMPILER & GLM_COMPILER_VC)
+ vsprintf_s(text, STRING_BUFFER, msg, list);
+# else//
+ vsprintf(text, msg, list);
+# endif//
+ va_end(list);
+
+ return std::string(text);
+ }
+
+ static const char* LabelTrue = "true";
+ static const char* LabelFalse = "false";
+
+ template <typename T, bool isFloat = false>
+ struct literal
+ {
+ GLM_FUNC_QUALIFIER static char const * value() {return "%d";};
+ };
+
+ template <typename T>
+ struct literal<T, true>
+ {
+ GLM_FUNC_QUALIFIER static char const * value() {return "%f";};
+ };
+
+# if GLM_MODEL == GLM_MODEL_32 && GLM_COMPILER && GLM_COMPILER_VC
+ template <>
+ struct literal<uint64_t, false>
+ {
+ GLM_FUNC_QUALIFIER static char const * value() {return "%lld";};
+ };
+
+ template <>
+ struct literal<int64_t, false>
+ {
+ GLM_FUNC_QUALIFIER static char const * value() {return "%lld";};
+ };
+# endif//GLM_MODEL == GLM_MODEL_32 && GLM_COMPILER && GLM_COMPILER_VC
+
+ template <typename T>
+ struct prefix{};
+
+ template <>
+ struct prefix<float>
+ {
+ GLM_FUNC_QUALIFIER static char const * value() {return "";};
+ };
+
+ template <>
+ struct prefix<double>
+ {
+ GLM_FUNC_QUALIFIER static char const * value() {return "d";};
+ };
+
+ template <>
+ struct prefix<bool>
+ {
+ GLM_FUNC_QUALIFIER static char const * value() {return "b";};
+ };
+
+ template <>
+ struct prefix<uint8_t>
+ {
+ GLM_FUNC_QUALIFIER static char const * value() {return "u8";};
+ };
+
+ template <>
+ struct prefix<int8_t>
+ {
+ GLM_FUNC_QUALIFIER static char const * value() {return "i8";};
+ };
+
+ template <>
+ struct prefix<uint16_t>
+ {
+ GLM_FUNC_QUALIFIER static char const * value() {return "u16";};
+ };
+
+ template <>
+ struct prefix<int16_t>
+ {
+ GLM_FUNC_QUALIFIER static char const * value() {return "i16";};
+ };
+
+ template <>
+ struct prefix<uint32_t>
+ {
+ GLM_FUNC_QUALIFIER static char const * value() {return "u";};
+ };
+
+ template <>
+ struct prefix<int32_t>
+ {
+ GLM_FUNC_QUALIFIER static char const * value() {return "i";};
+ };
+
+ template <>
+ struct prefix<uint64_t>
+ {
+ GLM_FUNC_QUALIFIER static char const * value() {return "u64";};
+ };
+
+ template <>
+ struct prefix<int64_t>
+ {
+ GLM_FUNC_QUALIFIER static char const * value() {return "i64";};
+ };
+
+ template <template <typename, precision> class matType, typename T, precision P>
+ struct compute_to_string
+ {};
+
+ template <precision P>
+ struct compute_to_string<tvec1, bool, P>
+ {
+ GLM_FUNC_QUALIFIER static std::string call(tvec1<bool, P> const & x)
+ {
+ return detail::format("bvec1(%s)",
+ x[0] ? detail::LabelTrue : detail::LabelFalse);
+ }
+ };
+
+ template <precision P>
+ struct compute_to_string<tvec2, bool, P>
+ {
+ GLM_FUNC_QUALIFIER static std::string call(tvec2<bool, P> const & x)
+ {
+ return detail::format("bvec2(%s, %s)",
+ x[0] ? detail::LabelTrue : detail::LabelFalse,
+ x[1] ? detail::LabelTrue : detail::LabelFalse);
+ }
+ };
+
+ template <precision P>
+ struct compute_to_string<tvec3, bool, P>
+ {
+ GLM_FUNC_QUALIFIER static std::string call(tvec3<bool, P> const & x)
+ {
+ return detail::format("bvec3(%s, %s, %s)",
+ x[0] ? detail::LabelTrue : detail::LabelFalse,
+ x[1] ? detail::LabelTrue : detail::LabelFalse,
+ x[2] ? detail::LabelTrue : detail::LabelFalse);
+ }
+ };
+
+ template <precision P>
+ struct compute_to_string<tvec4, bool, P>
+ {
+ GLM_FUNC_QUALIFIER static std::string call(tvec4<bool, P> const & x)
+ {
+ return detail::format("bvec4(%s, %s, %s, %s)",
+ x[0] ? detail::LabelTrue : detail::LabelFalse,
+ x[1] ? detail::LabelTrue : detail::LabelFalse,
+ x[2] ? detail::LabelTrue : detail::LabelFalse,
+ x[3] ? detail::LabelTrue : detail::LabelFalse);
+ }
+ };
+
+ template <typename T, precision P>
+ struct compute_to_string<tvec1, T, P>
+ {
+ GLM_FUNC_QUALIFIER static std::string call(tvec1<T, P> const & x)
+ {
+ char const * PrefixStr = prefix<T>::value();
+ char const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value();
+ std::string FormatStr(detail::format("%svec1(%s)",
+ PrefixStr,
+ LiteralStr));
+
+ return detail::format(FormatStr.c_str(), x[0]);
+ }
+ };
+
+ template <typename T, precision P>
+ struct compute_to_string<tvec2, T, P>
+ {
+ GLM_FUNC_QUALIFIER static std::string call(tvec2<T, P> const & x)
+ {
+ char const * PrefixStr = prefix<T>::value();
+ char const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value();
+ std::string FormatStr(detail::format("%svec2(%s, %s)",
+ PrefixStr,
+ LiteralStr, LiteralStr));
+
+ return detail::format(FormatStr.c_str(), x[0], x[1]);
+ }
+ };
+
+ template <typename T, precision P>
+ struct compute_to_string<tvec3, T, P>
+ {
+ GLM_FUNC_QUALIFIER static std::string call(tvec3<T, P> const & x)
+ {
+ char const * PrefixStr = prefix<T>::value();
+ char const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value();
+ std::string FormatStr(detail::format("%svec3(%s, %s, %s)",
+ PrefixStr,
+ LiteralStr, LiteralStr, LiteralStr));
+
+ return detail::format(FormatStr.c_str(), x[0], x[1], x[2]);
+ }
+ };
+
+ template <typename T, precision P>
+ struct compute_to_string<tvec4, T, P>
+ {
+ GLM_FUNC_QUALIFIER static std::string call(tvec4<T, P> const & x)
+ {
+ char const * PrefixStr = prefix<T>::value();
+ char const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value();
+ std::string FormatStr(detail::format("%svec4(%s, %s, %s, %s)",
+ PrefixStr,
+ LiteralStr, LiteralStr, LiteralStr, LiteralStr));
+
+ return detail::format(FormatStr.c_str(), x[0], x[1], x[2], x[3]);
+ }
+ };
+
+
+ template <typename T, precision P>
+ struct compute_to_string<tmat2x2, T, P>
+ {
+ GLM_FUNC_QUALIFIER static std::string call(tmat2x2<T, P> const & x)
+ {
+ char const * PrefixStr = prefix<T>::value();
+ char const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value();
+ std::string FormatStr(detail::format("%smat2x2((%s, %s), (%s, %s))",
+ PrefixStr,
+ LiteralStr, LiteralStr,
+ LiteralStr, LiteralStr));
+
+ return detail::format(FormatStr.c_str(),
+ x[0][0], x[0][1],
+ x[1][0], x[1][1]);
+ }
+ };
+
+ template <typename T, precision P>
+ struct compute_to_string<tmat2x3, T, P>
+ {
+ GLM_FUNC_QUALIFIER static std::string call(tmat2x3<T, P> const & x)
+ {
+ char const * PrefixStr = prefix<T>::value();
+ char const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value();
+ std::string FormatStr(detail::format("%smat2x3((%s, %s, %s), (%s, %s, %s))",
+ PrefixStr,
+ LiteralStr, LiteralStr, LiteralStr,
+ LiteralStr, LiteralStr, LiteralStr));
+
+ return detail::format(FormatStr.c_str(),
+ x[0][0], x[0][1], x[0][2],
+ x[1][0], x[1][1], x[1][2]);
+ }
+ };
+
+ template <typename T, precision P>
+ struct compute_to_string<tmat2x4, T, P>
+ {
+ GLM_FUNC_QUALIFIER static std::string call(tmat2x4<T, P> const & x)
+ {
+ char const * PrefixStr = prefix<T>::value();
+ char const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value();
+ std::string FormatStr(detail::format("%smat2x4((%s, %s, %s, %s), (%s, %s, %s, %s))",
+ PrefixStr,
+ LiteralStr, LiteralStr, LiteralStr, LiteralStr,
+ LiteralStr, LiteralStr, LiteralStr, LiteralStr));
+
+ return detail::format(FormatStr.c_str(),
+ x[0][0], x[0][1], x[0][2], x[0][3],
+ x[1][0], x[1][1], x[1][2], x[1][3]);
+ }
+ };
+
+ template <typename T, precision P>
+ struct compute_to_string<tmat3x2, T, P>
+ {
+ GLM_FUNC_QUALIFIER static std::string call(tmat3x2<T, P> const & x)
+ {
+ char const * PrefixStr = prefix<T>::value();
+ char const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value();
+ std::string FormatStr(detail::format("%smat3x2((%s, %s), (%s, %s), (%s, %s))",
+ PrefixStr,
+ LiteralStr, LiteralStr,
+ LiteralStr, LiteralStr,
+ LiteralStr, LiteralStr));
+
+ return detail::format(FormatStr.c_str(),
+ x[0][0], x[0][1],
+ x[1][0], x[1][1],
+ x[2][0], x[2][1]);
+ }
+ };
+
+ template <typename T, precision P>
+ struct compute_to_string<tmat3x3, T, P>
+ {
+ GLM_FUNC_QUALIFIER static std::string call(tmat3x3<T, P> const & x)
+ {
+ char const * PrefixStr = prefix<T>::value();
+ char const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value();
+ std::string FormatStr(detail::format("%smat3x3((%s, %s, %s), (%s, %s, %s), (%s, %s, %s))",
+ PrefixStr,
+ LiteralStr, LiteralStr, LiteralStr,
+ LiteralStr, LiteralStr, LiteralStr,
+ LiteralStr, LiteralStr, LiteralStr));
+
+ return detail::format(FormatStr.c_str(),
+ x[0][0], x[0][1], x[0][2],
+ x[1][0], x[1][1], x[1][2],
+ x[2][0], x[2][1], x[2][2]);
+ }
+ };
+
+ template <typename T, precision P>
+ struct compute_to_string<tmat3x4, T, P>
+ {
+ GLM_FUNC_QUALIFIER static std::string call(tmat3x4<T, P> const & x)
+ {
+ char const * PrefixStr = prefix<T>::value();
+ char const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value();
+ std::string FormatStr(detail::format("%smat3x4((%s, %s, %s, %s), (%s, %s, %s, %s), (%s, %s, %s, %s))",
+ PrefixStr,
+ LiteralStr, LiteralStr, LiteralStr, LiteralStr,
+ LiteralStr, LiteralStr, LiteralStr, LiteralStr,
+ LiteralStr, LiteralStr, LiteralStr, LiteralStr));
+
+ return detail::format(FormatStr.c_str(),
+ x[0][0], x[0][1], x[0][2], x[0][3],
+ x[1][0], x[1][1], x[1][2], x[1][3],
+ x[2][0], x[2][1], x[2][2], x[2][3]);
+ }
+ };
+
+ template <typename T, precision P>
+ struct compute_to_string<tmat4x2, T, P>
+ {
+ GLM_FUNC_QUALIFIER static std::string call(tmat4x2<T, P> const & x)
+ {
+ char const * PrefixStr = prefix<T>::value();
+ char const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value();
+ std::string FormatStr(detail::format("%smat4x2((%s, %s), (%s, %s), (%s, %s), (%s, %s))",
+ PrefixStr,
+ LiteralStr, LiteralStr,
+ LiteralStr, LiteralStr,
+ LiteralStr, LiteralStr,
+ LiteralStr, LiteralStr));
+
+ return detail::format(FormatStr.c_str(),
+ x[0][0], x[0][1],
+ x[1][0], x[1][1],
+ x[2][0], x[2][1],
+ x[3][0], x[3][1]);
+ }
+ };
+
+ template <typename T, precision P>
+ struct compute_to_string<tmat4x3, T, P>
+ {
+ GLM_FUNC_QUALIFIER static std::string call(tmat4x3<T, P> const & x)
+ {
+ char const * PrefixStr = prefix<T>::value();
+ char const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value();
+ std::string FormatStr(detail::format("%smat4x3((%s, %s, %s), (%s, %s, %s), (%s, %s, %s), (%s, %s, %s))",
+ PrefixStr,
+ LiteralStr, LiteralStr, LiteralStr,
+ LiteralStr, LiteralStr, LiteralStr,
+ LiteralStr, LiteralStr, LiteralStr,
+ LiteralStr, LiteralStr, LiteralStr));
+
+ return detail::format(FormatStr.c_str(),
+ x[0][0], x[0][1], x[0][2],
+ x[1][0], x[1][1], x[1][2],
+ x[2][0], x[2][1], x[2][2],
+ x[3][0], x[3][1], x[3][2]);
+ }
+ };
+
+ template <typename T, precision P>
+ struct compute_to_string<tmat4x4, T, P>
+ {
+ GLM_FUNC_QUALIFIER static std::string call(tmat4x4<T, P> const & x)
+ {
+ char const * PrefixStr = prefix<T>::value();
+ char const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value();
+ std::string FormatStr(detail::format("%smat4x4((%s, %s, %s, %s), (%s, %s, %s, %s), (%s, %s, %s, %s), (%s, %s, %s, %s))",
+ PrefixStr,
+ LiteralStr, LiteralStr, LiteralStr, LiteralStr,
+ LiteralStr, LiteralStr, LiteralStr, LiteralStr,
+ LiteralStr, LiteralStr, LiteralStr, LiteralStr,
+ LiteralStr, LiteralStr, LiteralStr, LiteralStr));
+
+ return detail::format(FormatStr.c_str(),
+ x[0][0], x[0][1], x[0][2], x[0][3],
+ x[1][0], x[1][1], x[1][2], x[1][3],
+ x[2][0], x[2][1], x[2][2], x[2][3],
+ x[3][0], x[3][1], x[3][2], x[3][3]);
+ }
+ };
+
+
+ template <typename T, precision P>
+ struct compute_to_string<tquat, T, P>
+ {
+ GLM_FUNC_QUALIFIER static std::string call(tquat<T, P> const & x)
+ {
+ char const * PrefixStr = prefix<T>::value();
+ char const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value();
+ std::string FormatStr(detail::format("%squat(%s, %s, %s, %s)",
+ PrefixStr,
+ LiteralStr, LiteralStr, LiteralStr, LiteralStr));
+
+ return detail::format(FormatStr.c_str(), x[0], x[1], x[2], x[3]);
+ }
+ };
+
+ template <typename T, precision P>
+ struct compute_to_string<tdualquat, T, P>
+ {
+ GLM_FUNC_QUALIFIER static std::string call(tdualquat<T, P> const & x)
+ {
+ char const * PrefixStr = prefix<T>::value();
+ char const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value();
+ std::string FormatStr(detail::format("%sdualquat((%s, %s, %s, %s), (%s, %s, %s, %s))",
+ PrefixStr,
+ LiteralStr, LiteralStr, LiteralStr, LiteralStr));
+
+ return detail::format(FormatStr.c_str(), x.real[0], x.real[1], x.real[2], x.real[3], x.dual[0], x.dual[1], x.dual[2], x.dual[3]);
+ }
+ };
+
+}//namespace detail
+
+template <template <typename, precision> class matType, typename T, precision P>
+GLM_FUNC_QUALIFIER std::string to_string(matType<T, P> const & x)
+{
+ return detail::compute_to_string<matType, T, P>::call(x);
+}
+
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtx/transform.hpp b/src/third_party/glm/glm/gtx/transform.hpp
new file mode 100644
index 0000000..365748b
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/transform.hpp
@@ -0,0 +1,56 @@
+/// @ref gtx_transform
+/// @file glm/gtx/transform.hpp
+///
+/// @see core (dependence)
+/// @see gtc_matrix_transform (dependence)
+/// @see gtx_transform
+/// @see gtx_transform2
+///
+/// @defgroup gtx_transform GLM_GTX_transform
+/// @ingroup gtx
+///
+/// @brief Add transformation matrices
+///
+/// <glm/gtx/transform.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependency:
+#include "../glm.hpp"
+#include "../gtc/matrix_transform.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_transform extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_transform
+ /// @{
+
+ /// Transforms a matrix with a translation 4 * 4 matrix created from 3 scalars.
+ /// @see gtc_matrix_transform
+ /// @see gtx_transform
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x4<T, P> translate(
+ tvec3<T, P> const & v);
+
+ /// Builds a rotation 4 * 4 matrix created from an axis of 3 scalars and an angle expressed in radians.
+ /// @see gtc_matrix_transform
+ /// @see gtx_transform
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x4<T, P> rotate(
+ T angle,
+ tvec3<T, P> const & v);
+
+ /// Transforms a matrix with a scale 4 * 4 matrix created from a vector of 3 components.
+ /// @see gtc_matrix_transform
+ /// @see gtx_transform
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x4<T, P> scale(
+ tvec3<T, P> const & v);
+
+ /// @}
+}// namespace glm
+
+#include "transform.inl"
diff --git a/src/third_party/glm/glm/gtx/transform.inl b/src/third_party/glm/glm/gtx/transform.inl
new file mode 100644
index 0000000..516d866
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/transform.inl
@@ -0,0 +1,24 @@
+/// @ref gtx_transform
+/// @file glm/gtx/transform.inl
+
+namespace glm
+{
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> translate(tvec3<T, P> const & v)
+ {
+ return translate(tmat4x4<T, P>(static_cast<T>(1)), v);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> rotate(T angle, tvec3<T, P> const & v)
+ {
+ return rotate(tmat4x4<T, P>(static_cast<T>(1)), angle, v);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> scale(tvec3<T, P> const & v)
+ {
+ return scale(tmat4x4<T, P>(static_cast<T>(1)), v);
+ }
+
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtx/transform2.hpp b/src/third_party/glm/glm/gtx/transform2.hpp
new file mode 100644
index 0000000..bf5fbc9
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/transform2.hpp
@@ -0,0 +1,107 @@
+/// @ref gtx_transform2
+/// @file glm/gtx/transform2.hpp
+///
+/// @see core (dependence)
+/// @see gtx_transform (dependence)
+///
+/// @defgroup gtx_transform2 GLM_GTX_transform2
+/// @ingroup gtx
+///
+/// @brief Add extra transformation matrices
+///
+/// <glm/gtx/transform2.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependency:
+#include "../glm.hpp"
+#include "../gtx/transform.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_transform2 extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_transform2
+ /// @{
+
+ //! Transforms a matrix with a shearing on X axis.
+ //! From GLM_GTX_transform2 extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x3<T, P> shearX2D(
+ tmat3x3<T, P> const & m,
+ T y);
+
+ //! Transforms a matrix with a shearing on Y axis.
+ //! From GLM_GTX_transform2 extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x3<T, P> shearY2D(
+ tmat3x3<T, P> const & m,
+ T x);
+
+ //! Transforms a matrix with a shearing on X axis
+ //! From GLM_GTX_transform2 extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x4<T, P> shearX3D(
+ const tmat4x4<T, P> & m,
+ T y,
+ T z);
+
+ //! Transforms a matrix with a shearing on Y axis.
+ //! From GLM_GTX_transform2 extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x4<T, P> shearY3D(
+ const tmat4x4<T, P> & m,
+ T x,
+ T z);
+
+ //! Transforms a matrix with a shearing on Z axis.
+ //! From GLM_GTX_transform2 extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x4<T, P> shearZ3D(
+ const tmat4x4<T, P> & m,
+ T x,
+ T y);
+
+ //template <typename T> GLM_FUNC_QUALIFIER tmat4x4<T, P> shear(const tmat4x4<T, P> & m, shearPlane, planePoint, angle)
+ // Identity + tan(angle) * cross(Normal, OnPlaneVector) 0
+ // - dot(PointOnPlane, normal) * OnPlaneVector 1
+
+ // Reflect functions seem to don't work
+ //template <typename T> tmat3x3<T, P> reflect2D(const tmat3x3<T, P> & m, const tvec3<T, P>& normal){return reflect2DGTX(m, normal);} //!< \brief Build a reflection matrix (from GLM_GTX_transform2 extension)
+ //template <typename T> tmat4x4<T, P> reflect3D(const tmat4x4<T, P> & m, const tvec3<T, P>& normal){return reflect3DGTX(m, normal);} //!< \brief Build a reflection matrix (from GLM_GTX_transform2 extension)
+
+ //! Build planar projection matrix along normal axis.
+ //! From GLM_GTX_transform2 extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat3x3<T, P> proj2D(
+ const tmat3x3<T, P> & m,
+ const tvec3<T, P>& normal);
+
+ //! Build planar projection matrix along normal axis.
+ //! From GLM_GTX_transform2 extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL tmat4x4<T, P> proj3D(
+ const tmat4x4<T, P> & m,
+ const tvec3<T, P>& normal);
+
+ //! Build a scale bias matrix.
+ //! From GLM_GTX_transform2 extension.
+ template <typename valType, precision P>
+ GLM_FUNC_DECL tmat4x4<valType, P> scaleBias(
+ valType scale,
+ valType bias);
+
+ //! Build a scale bias matrix.
+ //! From GLM_GTX_transform2 extension.
+ template <typename valType, precision P>
+ GLM_FUNC_DECL tmat4x4<valType, P> scaleBias(
+ tmat4x4<valType, P> const & m,
+ valType scale,
+ valType bias);
+
+ /// @}
+}// namespace glm
+
+#include "transform2.inl"
diff --git a/src/third_party/glm/glm/gtx/transform2.inl b/src/third_party/glm/glm/gtx/transform2.inl
new file mode 100644
index 0000000..b65bd3d
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/transform2.inl
@@ -0,0 +1,126 @@
+/// @ref gtx_transform2
+/// @file glm/gtx/transform2.inl
+
+namespace glm
+{
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> shearX2D(tmat3x3<T, P> const& m, T s)
+ {
+ tmat3x3<T, P> r(1);
+ r[0][1] = s;
+ return m * r;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> shearY2D(tmat3x3<T, P> const& m, T s)
+ {
+ tmat3x3<T, P> r(1);
+ r[1][0] = s;
+ return m * r;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> shearX3D(tmat4x4<T, P> const& m, T s, T t)
+ {
+ tmat4x4<T, P> r(1);
+ r[1][0] = s;
+ r[2][0] = t;
+ return m * r;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> shearY3D(tmat4x4<T, P> const& m, T s, T t)
+ {
+ tmat4x4<T, P> r(1);
+ r[0][1] = s;
+ r[2][1] = t;
+ return m * r;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> shearZ3D(tmat4x4<T, P> const& m, T s, T t)
+ {
+ tmat4x4<T, P> r(1);
+ r[0][2] = s;
+ r[1][2] = t;
+ return m * r;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> reflect2D(tmat3x3<T, P> const& m, tvec3<T, P> const& normal)
+ {
+ tmat3x3<T, P> r(static_cast<T>(1));
+ r[0][0] = static_cast<T>(1) - static_cast<T>(2) * normal.x * normal.x;
+ r[0][1] = -static_cast<T>(2) * normal.x * normal.y;
+ r[1][0] = -static_cast<T>(2) * normal.x * normal.y;
+ r[1][1] = static_cast<T>(1) - static_cast<T>(2) * normal.y * normal.y;
+ return m * r;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> reflect3D(tmat4x4<T, P> const& m, tvec3<T, P> const& normal)
+ {
+ tmat4x4<T, P> r(static_cast<T>(1));
+ r[0][0] = static_cast<T>(1) - static_cast<T>(2) * normal.x * normal.x;
+ r[0][1] = -static_cast<T>(2) * normal.x * normal.y;
+ r[0][2] = -static_cast<T>(2) * normal.x * normal.z;
+
+ r[1][0] = -static_cast<T>(2) * normal.x * normal.y;
+ r[1][1] = static_cast<T>(1) - static_cast<T>(2) * normal.y * normal.y;
+ r[1][2] = -static_cast<T>(2) * normal.y * normal.z;
+
+ r[2][0] = -static_cast<T>(2) * normal.x * normal.z;
+ r[2][1] = -static_cast<T>(2) * normal.y * normal.z;
+ r[2][2] = static_cast<T>(1) - static_cast<T>(2) * normal.z * normal.z;
+ return m * r;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat3x3<T, P> proj2D(
+ const tmat3x3<T, P>& m,
+ const tvec3<T, P>& normal)
+ {
+ tmat3x3<T, P> r(static_cast<T>(1));
+ r[0][0] = static_cast<T>(1) - normal.x * normal.x;
+ r[0][1] = - normal.x * normal.y;
+ r[1][0] = - normal.x * normal.y;
+ r[1][1] = static_cast<T>(1) - normal.y * normal.y;
+ return m * r;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> proj3D(
+ const tmat4x4<T, P>& m,
+ const tvec3<T, P>& normal)
+ {
+ tmat4x4<T, P> r(static_cast<T>(1));
+ r[0][0] = static_cast<T>(1) - normal.x * normal.x;
+ r[0][1] = - normal.x * normal.y;
+ r[0][2] = - normal.x * normal.z;
+ r[1][0] = - normal.x * normal.y;
+ r[1][1] = static_cast<T>(1) - normal.y * normal.y;
+ r[1][2] = - normal.y * normal.z;
+ r[2][0] = - normal.x * normal.z;
+ r[2][1] = - normal.y * normal.z;
+ r[2][2] = static_cast<T>(1) - normal.z * normal.z;
+ return m * r;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> scaleBias(T scale, T bias)
+ {
+ tmat4x4<T, P> result;
+ result[3] = tvec4<T, P>(tvec3<T, P>(bias), static_cast<T>(1));
+ result[0][0] = scale;
+ result[1][1] = scale;
+ result[2][2] = scale;
+ return result;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> scaleBias(tmat4x4<T, P> const& m, T scale, T bias)
+ {
+ return m * scaleBias(scale, bias);
+ }
+}//namespace glm
+
diff --git a/src/third_party/glm/glm/gtx/type_aligned.hpp b/src/third_party/glm/glm/gtx/type_aligned.hpp
new file mode 100644
index 0000000..8962a6f
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/type_aligned.hpp
@@ -0,0 +1,966 @@
+/// @ref gtx_type_aligned
+/// @file glm/gtx/type_aligned.hpp
+///
+/// @see core (dependence)
+/// @see gtc_quaternion (dependence)
+///
+/// @defgroup gtx_type_aligned GLM_GTX_type_aligned
+/// @ingroup gtx
+///
+/// @brief Defines aligned types.
+///
+/// @ref core_precision defines aligned types.
+///
+/// <glm/gtx/type_aligned.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependency:
+#include "../gtc/type_precision.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_type_aligned extension included")
+#endif
+
+namespace glm
+{
+ ///////////////////////////
+ // Signed int vector types
+
+ /// @addtogroup gtx_type_aligned
+ /// @{
+
+ /// Low precision 8 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(lowp_int8, aligned_lowp_int8, 1);
+
+ /// Low precision 16 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(lowp_int16, aligned_lowp_int16, 2);
+
+ /// Low precision 32 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(lowp_int32, aligned_lowp_int32, 4);
+
+ /// Low precision 64 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(lowp_int64, aligned_lowp_int64, 8);
+
+
+ /// Low precision 8 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(lowp_int8_t, aligned_lowp_int8_t, 1);
+
+ /// Low precision 16 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(lowp_int16_t, aligned_lowp_int16_t, 2);
+
+ /// Low precision 32 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(lowp_int32_t, aligned_lowp_int32_t, 4);
+
+ /// Low precision 64 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(lowp_int64_t, aligned_lowp_int64_t, 8);
+
+
+ /// Low precision 8 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(lowp_i8, aligned_lowp_i8, 1);
+
+ /// Low precision 16 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(lowp_i16, aligned_lowp_i16, 2);
+
+ /// Low precision 32 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(lowp_i32, aligned_lowp_i32, 4);
+
+ /// Low precision 64 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(lowp_i64, aligned_lowp_i64, 8);
+
+
+ /// Medium precision 8 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(mediump_int8, aligned_mediump_int8, 1);
+
+ /// Medium precision 16 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(mediump_int16, aligned_mediump_int16, 2);
+
+ /// Medium precision 32 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(mediump_int32, aligned_mediump_int32, 4);
+
+ /// Medium precision 64 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(mediump_int64, aligned_mediump_int64, 8);
+
+
+ /// Medium precision 8 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(mediump_int8_t, aligned_mediump_int8_t, 1);
+
+ /// Medium precision 16 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(mediump_int16_t, aligned_mediump_int16_t, 2);
+
+ /// Medium precision 32 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(mediump_int32_t, aligned_mediump_int32_t, 4);
+
+ /// Medium precision 64 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(mediump_int64_t, aligned_mediump_int64_t, 8);
+
+
+ /// Medium precision 8 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(mediump_i8, aligned_mediump_i8, 1);
+
+ /// Medium precision 16 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(mediump_i16, aligned_mediump_i16, 2);
+
+ /// Medium precision 32 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(mediump_i32, aligned_mediump_i32, 4);
+
+ /// Medium precision 64 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(mediump_i64, aligned_mediump_i64, 8);
+
+
+ /// High precision 8 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(highp_int8, aligned_highp_int8, 1);
+
+ /// High precision 16 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(highp_int16, aligned_highp_int16, 2);
+
+ /// High precision 32 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(highp_int32, aligned_highp_int32, 4);
+
+ /// High precision 64 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(highp_int64, aligned_highp_int64, 8);
+
+
+ /// High precision 8 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(highp_int8_t, aligned_highp_int8_t, 1);
+
+ /// High precision 16 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(highp_int16_t, aligned_highp_int16_t, 2);
+
+ /// High precision 32 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(highp_int32_t, aligned_highp_int32_t, 4);
+
+ /// High precision 64 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(highp_int64_t, aligned_highp_int64_t, 8);
+
+
+ /// High precision 8 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(highp_i8, aligned_highp_i8, 1);
+
+ /// High precision 16 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(highp_i16, aligned_highp_i16, 2);
+
+ /// High precision 32 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(highp_i32, aligned_highp_i32, 4);
+
+ /// High precision 64 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(highp_i64, aligned_highp_i64, 8);
+
+
+ /// Default precision 8 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(int8, aligned_int8, 1);
+
+ /// Default precision 16 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(int16, aligned_int16, 2);
+
+ /// Default precision 32 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(int32, aligned_int32, 4);
+
+ /// Default precision 64 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(int64, aligned_int64, 8);
+
+
+ /// Default precision 8 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(int8_t, aligned_int8_t, 1);
+
+ /// Default precision 16 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(int16_t, aligned_int16_t, 2);
+
+ /// Default precision 32 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(int32_t, aligned_int32_t, 4);
+
+ /// Default precision 64 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(int64_t, aligned_int64_t, 8);
+
+
+ /// Default precision 8 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(i8, aligned_i8, 1);
+
+ /// Default precision 16 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(i16, aligned_i16, 2);
+
+ /// Default precision 32 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(i32, aligned_i32, 4);
+
+ /// Default precision 64 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(i64, aligned_i64, 8);
+
+
+ /// Default precision 32 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(ivec1, aligned_ivec1, 4);
+
+ /// Default precision 32 bit signed integer aligned vector of 2 components type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(ivec2, aligned_ivec2, 8);
+
+ /// Default precision 32 bit signed integer aligned vector of 3 components type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(ivec3, aligned_ivec3, 16);
+
+ /// Default precision 32 bit signed integer aligned vector of 4 components type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(ivec4, aligned_ivec4, 16);
+
+
+ /// Default precision 8 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(i8vec1, aligned_i8vec1, 1);
+
+ /// Default precision 8 bit signed integer aligned vector of 2 components type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(i8vec2, aligned_i8vec2, 2);
+
+ /// Default precision 8 bit signed integer aligned vector of 3 components type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(i8vec3, aligned_i8vec3, 4);
+
+ /// Default precision 8 bit signed integer aligned vector of 4 components type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(i8vec4, aligned_i8vec4, 4);
+
+
+ /// Default precision 16 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(i16vec1, aligned_i16vec1, 2);
+
+ /// Default precision 16 bit signed integer aligned vector of 2 components type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(i16vec2, aligned_i16vec2, 4);
+
+ /// Default precision 16 bit signed integer aligned vector of 3 components type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(i16vec3, aligned_i16vec3, 8);
+
+ /// Default precision 16 bit signed integer aligned vector of 4 components type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(i16vec4, aligned_i16vec4, 8);
+
+
+ /// Default precision 32 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(i32vec1, aligned_i32vec1, 4);
+
+ /// Default precision 32 bit signed integer aligned vector of 2 components type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(i32vec2, aligned_i32vec2, 8);
+
+ /// Default precision 32 bit signed integer aligned vector of 3 components type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(i32vec3, aligned_i32vec3, 16);
+
+ /// Default precision 32 bit signed integer aligned vector of 4 components type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(i32vec4, aligned_i32vec4, 16);
+
+
+ /// Default precision 64 bit signed integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(i64vec1, aligned_i64vec1, 8);
+
+ /// Default precision 64 bit signed integer aligned vector of 2 components type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(i64vec2, aligned_i64vec2, 16);
+
+ /// Default precision 64 bit signed integer aligned vector of 3 components type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(i64vec3, aligned_i64vec3, 32);
+
+ /// Default precision 64 bit signed integer aligned vector of 4 components type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(i64vec4, aligned_i64vec4, 32);
+
+
+ /////////////////////////////
+ // Unsigned int vector types
+
+ /// Low precision 8 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(lowp_uint8, aligned_lowp_uint8, 1);
+
+ /// Low precision 16 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(lowp_uint16, aligned_lowp_uint16, 2);
+
+ /// Low precision 32 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(lowp_uint32, aligned_lowp_uint32, 4);
+
+ /// Low precision 64 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(lowp_uint64, aligned_lowp_uint64, 8);
+
+
+ /// Low precision 8 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(lowp_uint8_t, aligned_lowp_uint8_t, 1);
+
+ /// Low precision 16 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(lowp_uint16_t, aligned_lowp_uint16_t, 2);
+
+ /// Low precision 32 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(lowp_uint32_t, aligned_lowp_uint32_t, 4);
+
+ /// Low precision 64 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(lowp_uint64_t, aligned_lowp_uint64_t, 8);
+
+
+ /// Low precision 8 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(lowp_u8, aligned_lowp_u8, 1);
+
+ /// Low precision 16 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(lowp_u16, aligned_lowp_u16, 2);
+
+ /// Low precision 32 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(lowp_u32, aligned_lowp_u32, 4);
+
+ /// Low precision 64 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(lowp_u64, aligned_lowp_u64, 8);
+
+
+ /// Medium precision 8 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(mediump_uint8, aligned_mediump_uint8, 1);
+
+ /// Medium precision 16 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(mediump_uint16, aligned_mediump_uint16, 2);
+
+ /// Medium precision 32 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(mediump_uint32, aligned_mediump_uint32, 4);
+
+ /// Medium precision 64 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(mediump_uint64, aligned_mediump_uint64, 8);
+
+
+ /// Medium precision 8 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(mediump_uint8_t, aligned_mediump_uint8_t, 1);
+
+ /// Medium precision 16 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(mediump_uint16_t, aligned_mediump_uint16_t, 2);
+
+ /// Medium precision 32 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(mediump_uint32_t, aligned_mediump_uint32_t, 4);
+
+ /// Medium precision 64 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(mediump_uint64_t, aligned_mediump_uint64_t, 8);
+
+
+ /// Medium precision 8 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(mediump_u8, aligned_mediump_u8, 1);
+
+ /// Medium precision 16 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(mediump_u16, aligned_mediump_u16, 2);
+
+ /// Medium precision 32 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(mediump_u32, aligned_mediump_u32, 4);
+
+ /// Medium precision 64 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(mediump_u64, aligned_mediump_u64, 8);
+
+
+ /// High precision 8 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(highp_uint8, aligned_highp_uint8, 1);
+
+ /// High precision 16 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(highp_uint16, aligned_highp_uint16, 2);
+
+ /// High precision 32 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(highp_uint32, aligned_highp_uint32, 4);
+
+ /// High precision 64 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(highp_uint64, aligned_highp_uint64, 8);
+
+
+ /// High precision 8 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(highp_uint8_t, aligned_highp_uint8_t, 1);
+
+ /// High precision 16 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(highp_uint16_t, aligned_highp_uint16_t, 2);
+
+ /// High precision 32 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(highp_uint32_t, aligned_highp_uint32_t, 4);
+
+ /// High precision 64 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(highp_uint64_t, aligned_highp_uint64_t, 8);
+
+
+ /// High precision 8 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(highp_u8, aligned_highp_u8, 1);
+
+ /// High precision 16 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(highp_u16, aligned_highp_u16, 2);
+
+ /// High precision 32 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(highp_u32, aligned_highp_u32, 4);
+
+ /// High precision 64 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(highp_u64, aligned_highp_u64, 8);
+
+
+ /// Default precision 8 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(uint8, aligned_uint8, 1);
+
+ /// Default precision 16 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(uint16, aligned_uint16, 2);
+
+ /// Default precision 32 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(uint32, aligned_uint32, 4);
+
+ /// Default precision 64 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(uint64, aligned_uint64, 8);
+
+
+ /// Default precision 8 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(uint8_t, aligned_uint8_t, 1);
+
+ /// Default precision 16 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(uint16_t, aligned_uint16_t, 2);
+
+ /// Default precision 32 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(uint32_t, aligned_uint32_t, 4);
+
+ /// Default precision 64 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(uint64_t, aligned_uint64_t, 8);
+
+
+ /// Default precision 8 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(u8, aligned_u8, 1);
+
+ /// Default precision 16 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(u16, aligned_u16, 2);
+
+ /// Default precision 32 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(u32, aligned_u32, 4);
+
+ /// Default precision 64 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(u64, aligned_u64, 8);
+
+
+ /// Default precision 32 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(uvec1, aligned_uvec1, 4);
+
+ /// Default precision 32 bit unsigned integer aligned vector of 2 components type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(uvec2, aligned_uvec2, 8);
+
+ /// Default precision 32 bit unsigned integer aligned vector of 3 components type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(uvec3, aligned_uvec3, 16);
+
+ /// Default precision 32 bit unsigned integer aligned vector of 4 components type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(uvec4, aligned_uvec4, 16);
+
+
+ /// Default precision 8 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(u8vec1, aligned_u8vec1, 1);
+
+ /// Default precision 8 bit unsigned integer aligned vector of 2 components type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(u8vec2, aligned_u8vec2, 2);
+
+ /// Default precision 8 bit unsigned integer aligned vector of 3 components type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(u8vec3, aligned_u8vec3, 4);
+
+ /// Default precision 8 bit unsigned integer aligned vector of 4 components type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(u8vec4, aligned_u8vec4, 4);
+
+
+ /// Default precision 16 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(u16vec1, aligned_u16vec1, 2);
+
+ /// Default precision 16 bit unsigned integer aligned vector of 2 components type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(u16vec2, aligned_u16vec2, 4);
+
+ /// Default precision 16 bit unsigned integer aligned vector of 3 components type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(u16vec3, aligned_u16vec3, 8);
+
+ /// Default precision 16 bit unsigned integer aligned vector of 4 components type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(u16vec4, aligned_u16vec4, 8);
+
+
+ /// Default precision 32 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(u32vec1, aligned_u32vec1, 4);
+
+ /// Default precision 32 bit unsigned integer aligned vector of 2 components type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(u32vec2, aligned_u32vec2, 8);
+
+ /// Default precision 32 bit unsigned integer aligned vector of 3 components type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(u32vec3, aligned_u32vec3, 16);
+
+ /// Default precision 32 bit unsigned integer aligned vector of 4 components type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(u32vec4, aligned_u32vec4, 16);
+
+
+ /// Default precision 64 bit unsigned integer aligned scalar type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(u64vec1, aligned_u64vec1, 8);
+
+ /// Default precision 64 bit unsigned integer aligned vector of 2 components type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(u64vec2, aligned_u64vec2, 16);
+
+ /// Default precision 64 bit unsigned integer aligned vector of 3 components type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(u64vec3, aligned_u64vec3, 32);
+
+ /// Default precision 64 bit unsigned integer aligned vector of 4 components type.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(u64vec4, aligned_u64vec4, 32);
+
+
+ //////////////////////
+ // Float vector types
+
+ /// 32 bit single-precision floating-point aligned scalar.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(float32, aligned_float32, 4);
+
+ /// 64 bit double-precision floating-point aligned scalar.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(float64, aligned_float64, 8);
+
+
+ /// 32 bit single-precision floating-point aligned scalar.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(float32_t, aligned_float32_t, 4);
+
+ /// 64 bit double-precision floating-point aligned scalar.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(float64_t, aligned_float64_t, 8);
+
+
+ /// 32 bit single-precision floating-point aligned scalar.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(float32, aligned_f32, 4);
+
+ /// 64 bit double-precision floating-point aligned scalar.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(float64, aligned_f64, 8);
+
+
+ /// Single-precision floating-point aligned vector of 1 component.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(vec1, aligned_vec1, 4);
+
+ /// Single-precision floating-point aligned vector of 2 components.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(vec2, aligned_vec2, 8);
+
+ /// Single-precision floating-point aligned vector of 3 components.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(vec3, aligned_vec3, 16);
+
+ /// Single-precision floating-point aligned vector of 4 components.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(vec4, aligned_vec4, 16);
+
+
+ /// Single-precision floating-point aligned vector of 1 component.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(fvec1, aligned_fvec1, 4);
+
+ /// Single-precision floating-point aligned vector of 2 components.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(fvec2, aligned_fvec2, 8);
+
+ /// Single-precision floating-point aligned vector of 3 components.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(fvec3, aligned_fvec3, 16);
+
+ /// Single-precision floating-point aligned vector of 4 components.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(fvec4, aligned_fvec4, 16);
+
+
+ /// Single-precision floating-point aligned vector of 1 component.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(f32vec1, aligned_f32vec1, 4);
+
+ /// Single-precision floating-point aligned vector of 2 components.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(f32vec2, aligned_f32vec2, 8);
+
+ /// Single-precision floating-point aligned vector of 3 components.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(f32vec3, aligned_f32vec3, 16);
+
+ /// Single-precision floating-point aligned vector of 4 components.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(f32vec4, aligned_f32vec4, 16);
+
+
+ /// Double-precision floating-point aligned vector of 1 component.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(dvec1, aligned_dvec1, 8);
+
+ /// Double-precision floating-point aligned vector of 2 components.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(dvec2, aligned_dvec2, 16);
+
+ /// Double-precision floating-point aligned vector of 3 components.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(dvec3, aligned_dvec3, 32);
+
+ /// Double-precision floating-point aligned vector of 4 components.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(dvec4, aligned_dvec4, 32);
+
+
+ /// Double-precision floating-point aligned vector of 1 component.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(f64vec1, aligned_f64vec1, 8);
+
+ /// Double-precision floating-point aligned vector of 2 components.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(f64vec2, aligned_f64vec2, 16);
+
+ /// Double-precision floating-point aligned vector of 3 components.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(f64vec3, aligned_f64vec3, 32);
+
+ /// Double-precision floating-point aligned vector of 4 components.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(f64vec4, aligned_f64vec4, 32);
+
+
+ //////////////////////
+ // Float matrix types
+
+ /// Single-precision floating-point aligned 1x1 matrix.
+ /// @see gtx_type_aligned
+ //typedef detail::tmat1<f32> mat1;
+
+ /// Single-precision floating-point aligned 2x2 matrix.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(mat2, aligned_mat2, 16);
+
+ /// Single-precision floating-point aligned 3x3 matrix.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(mat3, aligned_mat3, 16);
+
+ /// Single-precision floating-point aligned 4x4 matrix.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(mat4, aligned_mat4, 16);
+
+
+ /// Single-precision floating-point aligned 1x1 matrix.
+ /// @see gtx_type_aligned
+ //typedef detail::tmat1x1<f32> mat1;
+
+ /// Single-precision floating-point aligned 2x2 matrix.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(mat2x2, aligned_mat2x2, 16);
+
+ /// Single-precision floating-point aligned 3x3 matrix.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(mat3x3, aligned_mat3x3, 16);
+
+ /// Single-precision floating-point aligned 4x4 matrix.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(mat4x4, aligned_mat4x4, 16);
+
+
+ /// Single-precision floating-point aligned 1x1 matrix.
+ /// @see gtx_type_aligned
+ //typedef detail::tmat1x1<f32> fmat1;
+
+ /// Single-precision floating-point aligned 2x2 matrix.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(fmat2x2, aligned_fmat2, 16);
+
+ /// Single-precision floating-point aligned 3x3 matrix.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(fmat3x3, aligned_fmat3, 16);
+
+ /// Single-precision floating-point aligned 4x4 matrix.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(fmat4x4, aligned_fmat4, 16);
+
+
+ /// Single-precision floating-point aligned 1x1 matrix.
+ /// @see gtx_type_aligned
+ //typedef f32 fmat1x1;
+
+ /// Single-precision floating-point aligned 2x2 matrix.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(fmat2x2, aligned_fmat2x2, 16);
+
+ /// Single-precision floating-point aligned 2x3 matrix.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(fmat2x3, aligned_fmat2x3, 16);
+
+ /// Single-precision floating-point aligned 2x4 matrix.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(fmat2x4, aligned_fmat2x4, 16);
+
+ /// Single-precision floating-point aligned 3x2 matrix.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(fmat3x2, aligned_fmat3x2, 16);
+
+ /// Single-precision floating-point aligned 3x3 matrix.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(fmat3x3, aligned_fmat3x3, 16);
+
+ /// Single-precision floating-point aligned 3x4 matrix.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(fmat3x4, aligned_fmat3x4, 16);
+
+ /// Single-precision floating-point aligned 4x2 matrix.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(fmat4x2, aligned_fmat4x2, 16);
+
+ /// Single-precision floating-point aligned 4x3 matrix.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(fmat4x3, aligned_fmat4x3, 16);
+
+ /// Single-precision floating-point aligned 4x4 matrix.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(fmat4x4, aligned_fmat4x4, 16);
+
+
+ /// Single-precision floating-point aligned 1x1 matrix.
+ /// @see gtx_type_aligned
+ //typedef detail::tmat1x1<f32, defaultp> f32mat1;
+
+ /// Single-precision floating-point aligned 2x2 matrix.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(f32mat2x2, aligned_f32mat2, 16);
+
+ /// Single-precision floating-point aligned 3x3 matrix.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(f32mat3x3, aligned_f32mat3, 16);
+
+ /// Single-precision floating-point aligned 4x4 matrix.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(f32mat4x4, aligned_f32mat4, 16);
+
+
+ /// Single-precision floating-point aligned 1x1 matrix.
+ /// @see gtx_type_aligned
+ //typedef f32 f32mat1x1;
+
+ /// Single-precision floating-point aligned 2x2 matrix.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(f32mat2x2, aligned_f32mat2x2, 16);
+
+ /// Single-precision floating-point aligned 2x3 matrix.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(f32mat2x3, aligned_f32mat2x3, 16);
+
+ /// Single-precision floating-point aligned 2x4 matrix.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(f32mat2x4, aligned_f32mat2x4, 16);
+
+ /// Single-precision floating-point aligned 3x2 matrix.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(f32mat3x2, aligned_f32mat3x2, 16);
+
+ /// Single-precision floating-point aligned 3x3 matrix.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(f32mat3x3, aligned_f32mat3x3, 16);
+
+ /// Single-precision floating-point aligned 3x4 matrix.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(f32mat3x4, aligned_f32mat3x4, 16);
+
+ /// Single-precision floating-point aligned 4x2 matrix.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(f32mat4x2, aligned_f32mat4x2, 16);
+
+ /// Single-precision floating-point aligned 4x3 matrix.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(f32mat4x3, aligned_f32mat4x3, 16);
+
+ /// Single-precision floating-point aligned 4x4 matrix.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(f32mat4x4, aligned_f32mat4x4, 16);
+
+
+ /// Double-precision floating-point aligned 1x1 matrix.
+ /// @see gtx_type_aligned
+ //typedef detail::tmat1x1<f64, defaultp> f64mat1;
+
+ /// Double-precision floating-point aligned 2x2 matrix.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(f64mat2x2, aligned_f64mat2, 32);
+
+ /// Double-precision floating-point aligned 3x3 matrix.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(f64mat3x3, aligned_f64mat3, 32);
+
+ /// Double-precision floating-point aligned 4x4 matrix.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(f64mat4x4, aligned_f64mat4, 32);
+
+
+ /// Double-precision floating-point aligned 1x1 matrix.
+ /// @see gtx_type_aligned
+ //typedef f64 f64mat1x1;
+
+ /// Double-precision floating-point aligned 2x2 matrix.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(f64mat2x2, aligned_f64mat2x2, 32);
+
+ /// Double-precision floating-point aligned 2x3 matrix.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(f64mat2x3, aligned_f64mat2x3, 32);
+
+ /// Double-precision floating-point aligned 2x4 matrix.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(f64mat2x4, aligned_f64mat2x4, 32);
+
+ /// Double-precision floating-point aligned 3x2 matrix.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(f64mat3x2, aligned_f64mat3x2, 32);
+
+ /// Double-precision floating-point aligned 3x3 matrix.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(f64mat3x3, aligned_f64mat3x3, 32);
+
+ /// Double-precision floating-point aligned 3x4 matrix.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(f64mat3x4, aligned_f64mat3x4, 32);
+
+ /// Double-precision floating-point aligned 4x2 matrix.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(f64mat4x2, aligned_f64mat4x2, 32);
+
+ /// Double-precision floating-point aligned 4x3 matrix.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(f64mat4x3, aligned_f64mat4x3, 32);
+
+ /// Double-precision floating-point aligned 4x4 matrix.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(f64mat4x4, aligned_f64mat4x4, 32);
+
+
+ //////////////////////////
+ // Quaternion types
+
+ /// Single-precision floating-point aligned quaternion.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(quat, aligned_quat, 16);
+
+ /// Single-precision floating-point aligned quaternion.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(fquat, aligned_fquat, 16);
+
+ /// Double-precision floating-point aligned quaternion.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(dquat, aligned_dquat, 32);
+
+ /// Single-precision floating-point aligned quaternion.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(f32quat, aligned_f32quat, 16);
+
+ /// Double-precision floating-point aligned quaternion.
+ /// @see gtx_type_aligned
+ GLM_ALIGNED_TYPEDEF(f64quat, aligned_f64quat, 32);
+
+ /// @}
+}//namespace glm
+
+#include "type_aligned.inl"
diff --git a/src/third_party/glm/glm/gtx/type_aligned.inl b/src/third_party/glm/glm/gtx/type_aligned.inl
new file mode 100644
index 0000000..83202df
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/type_aligned.inl
@@ -0,0 +1,7 @@
+/// @ref gtc_type_aligned
+/// @file glm/gtc/type_aligned.inl
+
+namespace glm
+{
+
+}
diff --git a/src/third_party/glm/glm/gtx/type_trait.hpp b/src/third_party/glm/glm/gtx/type_trait.hpp
new file mode 100644
index 0000000..0207a06
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/type_trait.hpp
@@ -0,0 +1,252 @@
+/// @ref gtx_type_trait
+/// @file glm/gtx/type_trait.hpp
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_type_trait GLM_GTX_type_trait
+/// @ingroup gtx
+///
+/// @brief Defines traits for each type.
+///
+/// <glm/gtx/type_trait.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependency:
+#include "../detail/type_vec2.hpp"
+#include "../detail/type_vec3.hpp"
+#include "../detail/type_vec4.hpp"
+#include "../detail/type_mat2x2.hpp"
+#include "../detail/type_mat2x3.hpp"
+#include "../detail/type_mat2x4.hpp"
+#include "../detail/type_mat3x2.hpp"
+#include "../detail/type_mat3x3.hpp"
+#include "../detail/type_mat3x4.hpp"
+#include "../detail/type_mat4x2.hpp"
+#include "../detail/type_mat4x3.hpp"
+#include "../detail/type_mat4x4.hpp"
+#include "../gtc/quaternion.hpp"
+#include "../gtx/dual_quaternion.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_type_trait extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_type_trait
+ /// @{
+
+ template <template <typename, precision> class genType, typename T, precision P>
+ struct type
+ {
+ static bool const is_vec = false;
+ static bool const is_mat = false;
+ static bool const is_quat = false;
+ static length_t const components = 0;
+ static length_t const cols = 0;
+ static length_t const rows = 0;
+ };
+
+ template <typename T, precision P>
+ struct type<tvec1, T, P>
+ {
+ static bool const is_vec = true;
+ static bool const is_mat = false;
+ static bool const is_quat = false;
+ enum
+ {
+ components = 1
+ };
+ };
+
+ template <typename T, precision P>
+ struct type<tvec2, T, P>
+ {
+ static bool const is_vec = true;
+ static bool const is_mat = false;
+ static bool const is_quat = false;
+ enum
+ {
+ components = 2
+ };
+ };
+
+ template <typename T, precision P>
+ struct type<tvec3, T, P>
+ {
+ static bool const is_vec = true;
+ static bool const is_mat = false;
+ static bool const is_quat = false;
+ enum
+ {
+ components = 3
+ };
+ };
+
+ template <typename T, precision P>
+ struct type<tvec4, T, P>
+ {
+ static bool const is_vec = true;
+ static bool const is_mat = false;
+ static bool const is_quat = false;
+ enum
+ {
+ components = 4
+ };
+ };
+
+ template <typename T, precision P>
+ struct type<tmat2x2, T, P>
+ {
+ static bool const is_vec = false;
+ static bool const is_mat = true;
+ static bool const is_quat = false;
+ enum
+ {
+ components = 2,
+ cols = 2,
+ rows = 2
+ };
+ };
+
+ template <typename T, precision P>
+ struct type<tmat2x3, T, P>
+ {
+ static bool const is_vec = false;
+ static bool const is_mat = true;
+ static bool const is_quat = false;
+ enum
+ {
+ components = 2,
+ cols = 2,
+ rows = 3
+ };
+ };
+
+ template <typename T, precision P>
+ struct type<tmat2x4, T, P>
+ {
+ static bool const is_vec = false;
+ static bool const is_mat = true;
+ static bool const is_quat = false;
+ enum
+ {
+ components = 2,
+ cols = 2,
+ rows = 4
+ };
+ };
+
+ template <typename T, precision P>
+ struct type<tmat3x2, T, P>
+ {
+ static bool const is_vec = false;
+ static bool const is_mat = true;
+ static bool const is_quat = false;
+ enum
+ {
+ components = 3,
+ cols = 3,
+ rows = 2
+ };
+ };
+
+ template <typename T, precision P>
+ struct type<tmat3x3, T, P>
+ {
+ static bool const is_vec = false;
+ static bool const is_mat = true;
+ static bool const is_quat = false;
+ enum
+ {
+ components = 3,
+ cols = 3,
+ rows = 3
+ };
+ };
+
+ template <typename T, precision P>
+ struct type<tmat3x4, T, P>
+ {
+ static bool const is_vec = false;
+ static bool const is_mat = true;
+ static bool const is_quat = false;
+ enum
+ {
+ components = 3,
+ cols = 3,
+ rows = 4
+ };
+ };
+
+ template <typename T, precision P>
+ struct type<tmat4x2, T, P>
+ {
+ static bool const is_vec = false;
+ static bool const is_mat = true;
+ static bool const is_quat = false;
+ enum
+ {
+ components = 4,
+ cols = 4,
+ rows = 2
+ };
+ };
+
+ template <typename T, precision P>
+ struct type<tmat4x3, T, P>
+ {
+ static bool const is_vec = false;
+ static bool const is_mat = true;
+ static bool const is_quat = false;
+ enum
+ {
+ components = 4,
+ cols = 4,
+ rows = 3
+ };
+ };
+
+ template <typename T, precision P>
+ struct type<tmat4x4, T, P>
+ {
+ static bool const is_vec = false;
+ static bool const is_mat = true;
+ static bool const is_quat = false;
+ enum
+ {
+ components = 4,
+ cols = 4,
+ rows = 4
+ };
+ };
+
+ template <typename T, precision P>
+ struct type<tquat, T, P>
+ {
+ static bool const is_vec = false;
+ static bool const is_mat = false;
+ static bool const is_quat = true;
+ enum
+ {
+ components = 4
+ };
+ };
+
+ template <typename T, precision P>
+ struct type<tdualquat, T, P>
+ {
+ static bool const is_vec = false;
+ static bool const is_mat = false;
+ static bool const is_quat = true;
+ enum
+ {
+ components = 8
+ };
+ };
+
+ /// @}
+}//namespace glm
+
+#include "type_trait.inl"
diff --git a/src/third_party/glm/glm/gtx/type_trait.inl b/src/third_party/glm/glm/gtx/type_trait.inl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/type_trait.inl
diff --git a/src/third_party/glm/glm/gtx/vector_angle.hpp b/src/third_party/glm/glm/gtx/vector_angle.hpp
new file mode 100644
index 0000000..d52d3f8
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/vector_angle.hpp
@@ -0,0 +1,60 @@
+/// @ref gtx_vector_angle
+/// @file glm/gtx/vector_angle.hpp
+///
+/// @see core (dependence)
+/// @see gtx_quaternion (dependence)
+/// @see gtx_epsilon (dependence)
+///
+/// @defgroup gtx_vector_angle GLM_GTX_vector_angle
+/// @ingroup gtx
+///
+/// @brief Compute angle between vectors
+///
+/// <glm/gtx/vector_angle.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependency:
+#include "../glm.hpp"
+#include "../gtc/epsilon.hpp"
+#include "../gtx/quaternion.hpp"
+#include "../gtx/rotate_vector.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_vector_angle extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_vector_angle
+ /// @{
+
+ //! Returns the absolute angle between two vectors.
+ //! Parameters need to be normalized.
+ /// @see gtx_vector_angle extension.
+ template <typename vecType>
+ GLM_FUNC_DECL typename vecType::value_type angle(
+ vecType const & x,
+ vecType const & y);
+
+ //! Returns the oriented angle between two 2d vectors.
+ //! Parameters need to be normalized.
+ /// @see gtx_vector_angle extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL T orientedAngle(
+ tvec2<T, P> const & x,
+ tvec2<T, P> const & y);
+
+ //! Returns the oriented angle between two 3d vectors based from a reference axis.
+ //! Parameters need to be normalized.
+ /// @see gtx_vector_angle extension.
+ template <typename T, precision P>
+ GLM_FUNC_DECL T orientedAngle(
+ tvec3<T, P> const & x,
+ tvec3<T, P> const & y,
+ tvec3<T, P> const & ref);
+
+ /// @}
+}// namespace glm
+
+#include "vector_angle.inl"
diff --git a/src/third_party/glm/glm/gtx/vector_angle.inl b/src/third_party/glm/glm/gtx/vector_angle.inl
new file mode 100644
index 0000000..05c3028
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/vector_angle.inl
@@ -0,0 +1,58 @@
+/// @ref gtx_vector_angle
+/// @file glm/gtx/vector_angle.inl
+
+namespace glm
+{
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType angle
+ (
+ genType const & x,
+ genType const & y
+ )
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'angle' only accept floating-point inputs");
+ return acos(clamp(dot(x, y), genType(-1), genType(1)));
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER T angle
+ (
+ vecType<T, P> const & x,
+ vecType<T, P> const & y
+ )
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'angle' only accept floating-point inputs");
+ return acos(clamp(dot(x, y), T(-1), T(1)));
+ }
+
+ //! \todo epsilon is hard coded to 0.01
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER T orientedAngle
+ (
+ tvec2<T, P> const & x,
+ tvec2<T, P> const & y
+ )
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'orientedAngle' only accept floating-point inputs");
+ T const Angle(acos(clamp(dot(x, y), T(-1), T(1))));
+
+ if(all(epsilonEqual(y, glm::rotate(x, Angle), T(0.0001))))
+ return Angle;
+ else
+ return -Angle;
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER T orientedAngle
+ (
+ tvec3<T, P> const & x,
+ tvec3<T, P> const & y,
+ tvec3<T, P> const & ref
+ )
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'orientedAngle' only accept floating-point inputs");
+
+ T const Angle(acos(clamp(dot(x, y), T(-1), T(1))));
+ return mix(Angle, -Angle, dot(ref, cross(x, y)) < T(0));
+ }
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtx/vector_query.hpp b/src/third_party/glm/glm/gtx/vector_query.hpp
new file mode 100644
index 0000000..2c0d022
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/vector_query.hpp
@@ -0,0 +1,62 @@
+/// @ref gtx_vector_query
+/// @file glm/gtx/vector_query.hpp
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_vector_query GLM_GTX_vector_query
+/// @ingroup gtx
+///
+/// @brief Query informations of vector types
+///
+/// <glm/gtx/vector_query.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependency:
+#include "../glm.hpp"
+#include <cfloat>
+#include <limits>
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_vector_query extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_vector_query
+ /// @{
+
+ //! Check whether two vectors are collinears.
+ /// @see gtx_vector_query extensions.
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL bool areCollinear(vecType<T, P> const & v0, vecType<T, P> const & v1, T const & epsilon);
+
+ //! Check whether two vectors are orthogonals.
+ /// @see gtx_vector_query extensions.
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL bool areOrthogonal(vecType<T, P> const & v0, vecType<T, P> const & v1, T const & epsilon);
+
+ //! Check whether a vector is normalized.
+ /// @see gtx_vector_query extensions.
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL bool isNormalized(vecType<T, P> const & v, T const & epsilon);
+
+ //! Check whether a vector is null.
+ /// @see gtx_vector_query extensions.
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL bool isNull(vecType<T, P> const & v, T const & epsilon);
+
+ //! Check whether a each component of a vector is null.
+ /// @see gtx_vector_query extensions.
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL vecType<bool, P> isCompNull(vecType<T, P> const & v, T const & epsilon);
+
+ //! Check whether two vectors are orthonormal.
+ /// @see gtx_vector_query extensions.
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_DECL bool areOrthonormal(vecType<T, P> const & v0, vecType<T, P> const & v1, T const & epsilon);
+
+ /// @}
+}// namespace glm
+
+#include "vector_query.inl"
diff --git a/src/third_party/glm/glm/gtx/vector_query.inl b/src/third_party/glm/glm/gtx/vector_query.inl
new file mode 100644
index 0000000..85ea5e5
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/vector_query.inl
@@ -0,0 +1,193 @@
+/// @ref gtx_vector_query
+/// @file glm/gtx/vector_query.inl
+
+#include <cassert>
+
+namespace glm{
+namespace detail
+{
+ template <typename T, precision P, template <typename, precision> class vecType>
+ struct compute_areCollinear{};
+
+ template <typename T, precision P>
+ struct compute_areCollinear<T, P, tvec2>
+ {
+ GLM_FUNC_QUALIFIER static bool call(tvec2<T, P> const & v0, tvec2<T, P> const & v1, T const & epsilon)
+ {
+ return length(cross(tvec3<T, P>(v0, static_cast<T>(0)), tvec3<T, P>(v1, static_cast<T>(0)))) < epsilon;
+ }
+ };
+
+ template <typename T, precision P>
+ struct compute_areCollinear<T, P, tvec3>
+ {
+ GLM_FUNC_QUALIFIER static bool call(tvec3<T, P> const & v0, tvec3<T, P> const & v1, T const & epsilon)
+ {
+ return length(cross(v0, v1)) < epsilon;
+ }
+ };
+
+ template <typename T, precision P>
+ struct compute_areCollinear<T, P, tvec4>
+ {
+ GLM_FUNC_QUALIFIER static bool call(tvec4<T, P> const & v0, tvec4<T, P> const & v1, T const & epsilon)
+ {
+ return length(cross(tvec3<T, P>(v0), tvec3<T, P>(v1))) < epsilon;
+ }
+ };
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ struct compute_isCompNull{};
+
+ template <typename T, precision P>
+ struct compute_isCompNull<T, P, tvec2>
+ {
+ GLM_FUNC_QUALIFIER static tvec2<bool, P> call(tvec2<T, P> const & v, T const & epsilon)
+ {
+ return tvec2<bool, P>(
+ (abs(v.x) < epsilon),
+ (abs(v.y) < epsilon));
+ }
+ };
+
+ template <typename T, precision P>
+ struct compute_isCompNull<T, P, tvec3>
+ {
+ GLM_FUNC_QUALIFIER static tvec3<bool, P> call(tvec3<T, P> const & v, T const & epsilon)
+ {
+ return tvec3<bool, P>(
+ (abs(v.x) < epsilon),
+ (abs(v.y) < epsilon),
+ (abs(v.z) < epsilon));
+ }
+ };
+
+ template <typename T, precision P>
+ struct compute_isCompNull<T, P, tvec4>
+ {
+ GLM_FUNC_QUALIFIER static tvec4<bool, P> call(tvec4<T, P> const & v, T const & epsilon)
+ {
+ return tvec4<bool, P>(
+ (abs(v.x) < epsilon),
+ (abs(v.y) < epsilon),
+ (abs(v.z) < epsilon),
+ (abs(v.w) < epsilon));
+ }
+ };
+
+}//namespace detail
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER bool areCollinear
+ (
+ vecType<T, P> const & v0,
+ vecType<T, P> const & v1,
+ T const & epsilon
+ )
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'areCollinear' only accept floating-point inputs");
+
+ return detail::compute_areCollinear<T, P, vecType>::call(v0, v1, epsilon);
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER bool areOrthogonal
+ (
+ vecType<T, P> const & v0,
+ vecType<T, P> const & v1,
+ T const & epsilon
+ )
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'areOrthogonal' only accept floating-point inputs");
+
+ return abs(dot(v0, v1)) <= max(
+ static_cast<T>(1),
+ length(v0)) * max(static_cast<T>(1), length(v1)) * epsilon;
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER bool isNormalized
+ (
+ vecType<T, P> const & v,
+ T const & epsilon
+ )
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'isNormalized' only accept floating-point inputs");
+
+ return abs(length(v) - static_cast<T>(1)) <= static_cast<T>(2) * epsilon;
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER bool isNull
+ (
+ vecType<T, P> const & v,
+ T const & epsilon
+ )
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'isNull' only accept floating-point inputs");
+
+ return length(v) <= epsilon;
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<bool, P> isCompNull
+ (
+ vecType<T, P> const & v,
+ T const & epsilon
+ )
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'isCompNull' only accept floating-point inputs");
+
+ return detail::compute_isCompNull<T, P, vecType>::call(v, epsilon);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec2<bool, P> isCompNull
+ (
+ tvec2<T, P> const & v,
+ T const & epsilon)
+ {
+ return tvec2<bool, P>(
+ abs(v.x) < epsilon,
+ abs(v.y) < epsilon);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec3<bool, P> isCompNull
+ (
+ tvec3<T, P> const & v,
+ T const & epsilon
+ )
+ {
+ return tvec3<bool, P>(
+ abs(v.x) < epsilon,
+ abs(v.y) < epsilon,
+ abs(v.z) < epsilon);
+ }
+
+ template <typename T, precision P>
+ GLM_FUNC_QUALIFIER tvec4<bool, P> isCompNull
+ (
+ tvec4<T, P> const & v,
+ T const & epsilon
+ )
+ {
+ return tvec4<bool, P>(
+ abs(v.x) < epsilon,
+ abs(v.y) < epsilon,
+ abs(v.z) < epsilon,
+ abs(v.w) < epsilon);
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER bool areOrthonormal
+ (
+ vecType<T, P> const & v0,
+ vecType<T, P> const & v1,
+ T const & epsilon
+ )
+ {
+ return isNormalized(v0, epsilon) && isNormalized(v1, epsilon) && (abs(dot(v0, v1)) <= epsilon);
+ }
+
+}//namespace glm
diff --git a/src/third_party/glm/glm/gtx/wrap.hpp b/src/third_party/glm/glm/gtx/wrap.hpp
new file mode 100644
index 0000000..0060073
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/wrap.hpp
@@ -0,0 +1,51 @@
+/// @ref gtx_wrap
+/// @file glm/gtx/wrap.hpp
+///
+/// @see core (dependence)
+///
+/// @defgroup gtx_wrap GLM_GTX_wrap
+/// @ingroup gtx
+///
+/// @brief Wrapping mode of texture coordinates.
+///
+/// <glm/gtx/wrap.hpp> need to be included to use these functionalities.
+
+#pragma once
+
+// Dependency:
+#include "../glm.hpp"
+#include "../gtc/vec1.hpp"
+
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
+# pragma message("GLM: GLM_GTX_wrap extension included")
+#endif
+
+namespace glm
+{
+ /// @addtogroup gtx_wrap
+ /// @{
+
+ /// Simulate GL_CLAMP OpenGL wrap mode
+ /// @see gtx_wrap extension.
+ template <typename genType>
+ GLM_FUNC_DECL genType clamp(genType const& Texcoord);
+
+ /// Simulate GL_REPEAT OpenGL wrap mode
+ /// @see gtx_wrap extension.
+ template <typename genType>
+ GLM_FUNC_DECL genType repeat(genType const& Texcoord);
+
+ /// Simulate GL_MIRRORED_REPEAT OpenGL wrap mode
+ /// @see gtx_wrap extension.
+ template <typename genType>
+ GLM_FUNC_DECL genType mirrorClamp(genType const& Texcoord);
+
+ /// Simulate GL_MIRROR_REPEAT OpenGL wrap mode
+ /// @see gtx_wrap extension.
+ template <typename genType>
+ GLM_FUNC_DECL genType mirrorRepeat(genType const& Texcoord);
+
+ /// @}
+}// namespace glm
+
+#include "wrap.inl"
diff --git a/src/third_party/glm/glm/gtx/wrap.inl b/src/third_party/glm/glm/gtx/wrap.inl
new file mode 100644
index 0000000..941a803
--- /dev/null
+++ b/src/third_party/glm/glm/gtx/wrap.inl
@@ -0,0 +1,58 @@
+/// @ref gtx_wrap
+/// @file glm/gtx/wrap.inl
+
+namespace glm
+{
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> clamp(vecType<T, P> const& Texcoord)
+ {
+ return glm::clamp(Texcoord, vecType<T, P>(0), vecType<T, P>(1));
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType clamp(genType const & Texcoord)
+ {
+ return clamp(tvec1<genType, defaultp>(Texcoord)).x;
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> repeat(vecType<T, P> const& Texcoord)
+ {
+ return glm::fract(Texcoord);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType repeat(genType const & Texcoord)
+ {
+ return repeat(tvec1<genType, defaultp>(Texcoord)).x;
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> mirrorClamp(vecType<T, P> const& Texcoord)
+ {
+ return glm::fract(glm::abs(Texcoord));
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType mirrorClamp(genType const & Texcoord)
+ {
+ return mirrorClamp(tvec1<genType, defaultp>(Texcoord)).x;
+ }
+
+ template <typename T, precision P, template <typename, precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> mirrorRepeat(vecType<T, P> const& Texcoord)
+ {
+ vecType<T, P> const Abs = glm::abs(Texcoord);
+ vecType<T, P> const Clamp = glm::mod(glm::floor(Abs), vecType<T, P>(2));
+ vecType<T, P> const Floor = glm::floor(Abs);
+ vecType<T, P> const Rest = Abs - Floor;
+ vecType<T, P> const Mirror = Clamp + Rest;
+ return mix(Rest, vecType<T, P>(1) - Rest, glm::greaterThanEqual(Mirror, vecType<T, P>(1)));
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType mirrorRepeat(genType const& Texcoord)
+ {
+ return mirrorRepeat(tvec1<genType, defaultp>(Texcoord)).x;
+ }
+}//namespace glm
diff --git a/src/third_party/glm/glm/integer.hpp b/src/third_party/glm/glm/integer.hpp
new file mode 100644
index 0000000..178e10e
--- /dev/null
+++ b/src/third_party/glm/glm/integer.hpp
@@ -0,0 +1,6 @@
+/// @ref core
+/// @file glm/integer.hpp
+
+#pragma once
+
+#include "detail/func_integer.hpp"
diff --git a/src/third_party/glm/glm/mat2x2.hpp b/src/third_party/glm/glm/mat2x2.hpp
new file mode 100644
index 0000000..420fe9d
--- /dev/null
+++ b/src/third_party/glm/glm/mat2x2.hpp
@@ -0,0 +1,52 @@
+/// @ref core
+/// @file glm/mat2x2.hpp
+
+#pragma once
+
+#include "detail/type_mat2x2.hpp"
+
+namespace glm
+{
+ /// 2 columns of 2 components matrix of low precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat2x2<float, lowp> lowp_mat2;
+
+ /// 2 columns of 2 components matrix of medium precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat2x2<float, mediump> mediump_mat2;
+
+ /// 2 columns of 2 components matrix of high precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat2x2<float, highp> highp_mat2;
+
+ /// 2 columns of 2 components matrix of low precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat2x2<float, lowp> lowp_mat2x2;
+
+ /// 2 columns of 2 components matrix of medium precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat2x2<float, mediump> mediump_mat2x2;
+
+ /// 2 columns of 2 components matrix of high precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat2x2<float, highp> highp_mat2x2;
+
+}//namespace glm
diff --git a/src/third_party/glm/glm/mat2x3.hpp b/src/third_party/glm/glm/mat2x3.hpp
new file mode 100644
index 0000000..5c1cc70
--- /dev/null
+++ b/src/third_party/glm/glm/mat2x3.hpp
@@ -0,0 +1,32 @@
+/// @ref core
+/// @file glm/mat2x3.hpp
+
+#pragma once
+
+#include "detail/type_mat2x3.hpp"
+
+namespace glm
+{
+ /// 2 columns of 3 components matrix of low precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat2x3<float, lowp> lowp_mat2x3;
+
+ /// 2 columns of 3 components matrix of medium precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat2x3<float, mediump> mediump_mat2x3;
+
+ /// 2 columns of 3 components matrix of high precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat2x3<float, highp> highp_mat2x3;
+
+}//namespace glm
+
diff --git a/src/third_party/glm/glm/mat2x4.hpp b/src/third_party/glm/glm/mat2x4.hpp
new file mode 100644
index 0000000..a82f136
--- /dev/null
+++ b/src/third_party/glm/glm/mat2x4.hpp
@@ -0,0 +1,31 @@
+/// @ref core
+/// @file glm/mat2x4.hpp
+
+#pragma once
+
+#include "detail/type_mat2x4.hpp"
+
+namespace glm
+{
+ /// 2 columns of 4 components matrix of low precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat2x4<float, lowp> lowp_mat2x4;
+
+ /// 2 columns of 4 components matrix of medium precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat2x4<float, mediump> mediump_mat2x4;
+
+ /// 2 columns of 4 components matrix of high precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat2x4<float, highp> highp_mat2x4;
+
+}//namespace glm
diff --git a/src/third_party/glm/glm/mat3x2.hpp b/src/third_party/glm/glm/mat3x2.hpp
new file mode 100644
index 0000000..40a56de
--- /dev/null
+++ b/src/third_party/glm/glm/mat3x2.hpp
@@ -0,0 +1,31 @@
+/// @ref core
+/// @file glm/mat3x2.hpp
+
+#pragma once
+
+#include "detail/type_mat3x2.hpp"
+
+namespace glm
+{
+ /// 3 columns of 2 components matrix of low precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat3x2<float, lowp> lowp_mat3x2;
+
+ /// 3 columns of 2 components matrix of medium precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat3x2<float, mediump> mediump_mat3x2;
+
+ /// 3 columns of 2 components matrix of high precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat3x2<float, highp> highp_mat3x2;
+
+}//namespace
diff --git a/src/third_party/glm/glm/mat3x3.hpp b/src/third_party/glm/glm/mat3x3.hpp
new file mode 100644
index 0000000..66bfdfa
--- /dev/null
+++ b/src/third_party/glm/glm/mat3x3.hpp
@@ -0,0 +1,52 @@
+/// @ref core
+/// @file glm/mat3x3.hpp
+
+#pragma once
+
+#include "detail/type_mat3x3.hpp"
+
+namespace glm
+{
+ /// 3 columns of 3 components matrix of low precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat3x3<float, lowp> lowp_mat3;
+
+ /// 3 columns of 3 components matrix of medium precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat3x3<float, mediump> mediump_mat3;
+
+ /// 3 columns of 3 components matrix of high precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat3x3<float, highp> highp_mat3;
+
+ /// 3 columns of 3 components matrix of low precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat3x3<float, lowp> lowp_mat3x3;
+
+ /// 3 columns of 3 components matrix of medium precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat3x3<float, mediump> mediump_mat3x3;
+
+ /// 3 columns of 3 components matrix of high precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat3x3<float, highp> highp_mat3x3;
+
+}//namespace glm
diff --git a/src/third_party/glm/glm/mat3x4.hpp b/src/third_party/glm/glm/mat3x4.hpp
new file mode 100644
index 0000000..5f83407
--- /dev/null
+++ b/src/third_party/glm/glm/mat3x4.hpp
@@ -0,0 +1,31 @@
+/// @ref core
+/// @file glm/mat3x4.hpp
+
+#pragma once
+
+#include "detail/type_mat3x4.hpp"
+
+namespace glm
+{
+ /// 3 columns of 4 components matrix of low precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat3x4<float, lowp> lowp_mat3x4;
+
+ /// 3 columns of 4 components matrix of medium precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat3x4<float, mediump> mediump_mat3x4;
+
+ /// 3 columns of 4 components matrix of high precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat3x4<float, highp> highp_mat3x4;
+
+}//namespace glm
diff --git a/src/third_party/glm/glm/mat4x2.hpp b/src/third_party/glm/glm/mat4x2.hpp
new file mode 100644
index 0000000..fe67c4f
--- /dev/null
+++ b/src/third_party/glm/glm/mat4x2.hpp
@@ -0,0 +1,31 @@
+/// @ref core
+/// @file glm/mat4x2.hpp
+
+#pragma once
+
+#include "detail/type_mat4x2.hpp"
+
+namespace glm
+{
+ /// 4 columns of 2 components matrix of low precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat4x2<float, lowp> lowp_mat4x2;
+
+ /// 4 columns of 2 components matrix of medium precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat4x2<float, mediump> mediump_mat4x2;
+
+ /// 4 columns of 2 components matrix of high precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat4x2<float, highp> highp_mat4x2;
+
+}//namespace glm
diff --git a/src/third_party/glm/glm/mat4x3.hpp b/src/third_party/glm/glm/mat4x3.hpp
new file mode 100644
index 0000000..7484599
--- /dev/null
+++ b/src/third_party/glm/glm/mat4x3.hpp
@@ -0,0 +1,31 @@
+/// @ref core
+/// @file glm/mat4x4.hpp
+
+#pragma once
+
+#include "detail/type_mat4x3.hpp"
+
+namespace glm
+{
+ /// 4 columns of 3 components matrix of low precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat4x3<float, lowp> lowp_mat4x3;
+
+ /// 4 columns of 3 components matrix of medium precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat4x3<float, mediump> mediump_mat4x3;
+
+ /// 4 columns of 3 components matrix of high precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat4x3<float, highp> highp_mat4x3;
+
+}//namespace glm
diff --git a/src/third_party/glm/glm/mat4x4.hpp b/src/third_party/glm/glm/mat4x4.hpp
new file mode 100644
index 0000000..d6c44e8
--- /dev/null
+++ b/src/third_party/glm/glm/mat4x4.hpp
@@ -0,0 +1,52 @@
+/// @ref core
+/// @file glm/mat4x4.hpp
+
+#pragma once
+
+#include "detail/type_mat4x4.hpp"
+
+namespace glm
+{
+ /// 4 columns of 4 components matrix of low precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat4x4<float, lowp> lowp_mat4;
+
+ /// 4 columns of 4 components matrix of medium precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat4x4<float, mediump> mediump_mat4;
+
+ /// 4 columns of 4 components matrix of high precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat4x4<float, highp> highp_mat4;
+
+ /// 4 columns of 4 components matrix of low precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat4x4<float, lowp> lowp_mat4x4;
+
+ /// 4 columns of 4 components matrix of medium precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat4x4<float, mediump> mediump_mat4x4;
+
+ /// 4 columns of 4 components matrix of high precision floating-point numbers.
+ /// There is no guarantee on the actual precision.
+ ///
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
+ /// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
+ typedef tmat4x4<float, highp> highp_mat4x4;
+
+}//namespace glm
diff --git a/src/third_party/glm/glm/matrix.hpp b/src/third_party/glm/glm/matrix.hpp
new file mode 100644
index 0000000..736dd49
--- /dev/null
+++ b/src/third_party/glm/glm/matrix.hpp
@@ -0,0 +1,6 @@
+/// @ref core
+/// @file glm/matrix.hpp
+
+#pragma once
+
+#include "detail/func_matrix.hpp"
diff --git a/src/third_party/glm/glm/packing.hpp b/src/third_party/glm/glm/packing.hpp
new file mode 100644
index 0000000..4545adb
--- /dev/null
+++ b/src/third_party/glm/glm/packing.hpp
@@ -0,0 +1,6 @@
+/// @ref core
+/// @file glm/packing.hpp
+
+#pragma once
+
+#include "detail/func_packing.hpp"
diff --git a/src/third_party/glm/glm/simd/common.h b/src/third_party/glm/glm/simd/common.h
new file mode 100644
index 0000000..d8c212d
--- /dev/null
+++ b/src/third_party/glm/glm/simd/common.h
@@ -0,0 +1,240 @@
+/// @ref simd
+/// @file glm/simd/common.h
+
+#pragma once
+
+#include "platform.h"
+
+#if GLM_ARCH & GLM_ARCH_SSE2_BIT
+
+GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_add(glm_vec4 a, glm_vec4 b)
+{
+ return _mm_add_ps(a, b);
+}
+
+GLM_FUNC_QUALIFIER glm_vec4 glm_vec1_add(glm_vec4 a, glm_vec4 b)
+{
+ return _mm_add_ss(a, b);
+}
+
+GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_sub(glm_vec4 a, glm_vec4 b)
+{
+ return _mm_sub_ps(a, b);
+}
+
+GLM_FUNC_QUALIFIER glm_vec4 glm_vec1_sub(glm_vec4 a, glm_vec4 b)
+{
+ return _mm_sub_ss(a, b);
+}
+
+GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_mul(glm_vec4 a, glm_vec4 b)
+{
+ return _mm_mul_ps(a, b);
+}
+
+GLM_FUNC_QUALIFIER glm_vec4 glm_vec1_mul(glm_vec4 a, glm_vec4 b)
+{
+ return _mm_mul_ss(a, b);
+}
+
+GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_div(glm_vec4 a, glm_vec4 b)
+{
+ return _mm_div_ps(a, b);
+}
+
+GLM_FUNC_QUALIFIER glm_vec4 glm_vec1_div(glm_vec4 a, glm_vec4 b)
+{
+ return _mm_div_ss(a, b);
+}
+
+GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_div_lowp(glm_vec4 a, glm_vec4 b)
+{
+ return glm_vec4_mul(a, _mm_rcp_ps(b));
+}
+
+GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_swizzle_xyzw(glm_vec4 a)
+{
+# if GLM_ARCH & GLM_ARCH_AVX2_BIT
+ return _mm_permute_ps(a, _MM_SHUFFLE(3, 2, 1, 0));
+# else
+ return _mm_shuffle_ps(a, a, _MM_SHUFFLE(3, 2, 1, 0));
+# endif
+}
+
+GLM_FUNC_QUALIFIER glm_vec4 glm_vec1_fma(glm_vec4 a, glm_vec4 b, glm_vec4 c)
+{
+# if GLM_ARCH & GLM_ARCH_AVX2_BIT
+ return _mm_fmadd_ss(a, b, c);
+# else
+ return _mm_add_ss(_mm_mul_ss(a, b), c);
+# endif
+}
+
+GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_fma(glm_vec4 a, glm_vec4 b, glm_vec4 c)
+{
+# if GLM_ARCH & GLM_ARCH_AVX2_BIT
+ return _mm_fmadd_ps(a, b, c);
+# else
+ return glm_vec4_add(glm_vec4_mul(a, b), c);
+# endif
+}
+
+GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_abs(glm_vec4 x)
+{
+ return _mm_and_ps(x, _mm_castsi128_ps(_mm_set1_epi32(0x7FFFFFFF)));
+}
+
+GLM_FUNC_QUALIFIER glm_ivec4 glm_ivec4_abs(glm_ivec4 x)
+{
+# if GLM_ARCH & GLM_ARCH_SSSE3_BIT
+ return _mm_sign_epi32(x, x);
+# else
+ glm_ivec4 const sgn0 = _mm_srai_epi32(x, 31);
+ glm_ivec4 const inv0 = _mm_xor_si128(x, sgn0);
+ glm_ivec4 const sub0 = _mm_sub_epi32(inv0, sgn0);
+ return sub0;
+# endif
+}
+
+GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_sign(glm_vec4 x)
+{
+ glm_vec4 const zro0 = _mm_setzero_ps();
+ glm_vec4 const cmp0 = _mm_cmplt_ps(x, zro0);
+ glm_vec4 const cmp1 = _mm_cmpgt_ps(x, zro0);
+ glm_vec4 const and0 = _mm_and_ps(cmp0, _mm_set1_ps(-1.0f));
+ glm_vec4 const and1 = _mm_and_ps(cmp1, _mm_set1_ps(1.0f));
+ glm_vec4 const or0 = _mm_or_ps(and0, and1);;
+ return or0;
+}
+
+GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_round(glm_vec4 x)
+{
+# if GLM_ARCH & GLM_ARCH_SSE41_BIT
+ return _mm_round_ps(x, _MM_FROUND_TO_NEAREST_INT);
+# else
+ glm_vec4 const sgn0 = _mm_castsi128_ps(_mm_set1_epi32(0x80000000));
+ glm_vec4 const and0 = _mm_and_ps(sgn0, x);
+ glm_vec4 const or0 = _mm_or_ps(and0, _mm_set_ps1(8388608.0f));
+ glm_vec4 const add0 = glm_vec4_add(x, or0);
+ glm_vec4 const sub0 = glm_vec4_sub(add0, or0);
+ return sub0;
+# endif
+}
+
+GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_floor(glm_vec4 x)
+{
+# if GLM_ARCH & GLM_ARCH_SSE41_BIT
+ return _mm_floor_ps(x);
+# else
+ glm_vec4 const rnd0 = glm_vec4_round(x);
+ glm_vec4 const cmp0 = _mm_cmplt_ps(x, rnd0);
+ glm_vec4 const and0 = _mm_and_ps(cmp0, _mm_set1_ps(1.0f));
+ glm_vec4 const sub0 = glm_vec4_sub(rnd0, and0);
+ return sub0;
+# endif
+}
+
+/* trunc TODO
+GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_trunc(glm_vec4 x)
+{
+ return glm_vec4();
+}
+*/
+
+//roundEven
+GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_roundEven(glm_vec4 x)
+{
+ glm_vec4 const sgn0 = _mm_castsi128_ps(_mm_set1_epi32(0x80000000));
+ glm_vec4 const and0 = _mm_and_ps(sgn0, x);
+ glm_vec4 const or0 = _mm_or_ps(and0, _mm_set_ps1(8388608.0f));
+ glm_vec4 const add0 = glm_vec4_add(x, or0);
+ glm_vec4 const sub0 = glm_vec4_sub(add0, or0);
+ return sub0;
+}
+
+GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_ceil(glm_vec4 x)
+{
+# if GLM_ARCH & GLM_ARCH_SSE41_BIT
+ return _mm_ceil_ps(x);
+# else
+ glm_vec4 const rnd0 = glm_vec4_round(x);
+ glm_vec4 const cmp0 = _mm_cmpgt_ps(x, rnd0);
+ glm_vec4 const and0 = _mm_and_ps(cmp0, _mm_set1_ps(1.0f));
+ glm_vec4 const add0 = glm_vec4_add(rnd0, and0);
+ return add0;
+# endif
+}
+
+GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_fract(glm_vec4 x)
+{
+ glm_vec4 const flr0 = glm_vec4_floor(x);
+ glm_vec4 const sub0 = glm_vec4_sub(x, flr0);
+ return sub0;
+}
+
+GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_mod(glm_vec4 x, glm_vec4 y)
+{
+ glm_vec4 const div0 = glm_vec4_div(x, y);
+ glm_vec4 const flr0 = glm_vec4_floor(div0);
+ glm_vec4 const mul0 = glm_vec4_mul(y, flr0);
+ glm_vec4 const sub0 = glm_vec4_sub(x, mul0);
+ return sub0;
+}
+
+GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_clamp(glm_vec4 v, glm_vec4 minVal, glm_vec4 maxVal)
+{
+ glm_vec4 const min0 = _mm_min_ps(v, maxVal);
+ glm_vec4 const max0 = _mm_max_ps(min0, minVal);
+ return max0;
+}
+
+GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_mix(glm_vec4 v1, glm_vec4 v2, glm_vec4 a)
+{
+ glm_vec4 const sub0 = glm_vec4_sub(_mm_set1_ps(1.0f), a);
+ glm_vec4 const mul0 = glm_vec4_mul(v1, sub0);
+ glm_vec4 const mad0 = glm_vec4_fma(v2, a, mul0);
+ return mad0;
+}
+
+GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_step(glm_vec4 edge, glm_vec4 x)
+{
+ glm_vec4 const cmp = _mm_cmple_ps(x, edge);
+ return _mm_movemask_ps(cmp) == 0 ? _mm_set1_ps(1.0f) : _mm_setzero_ps();
+}
+
+GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_smoothstep(glm_vec4 edge0, glm_vec4 edge1, glm_vec4 x)
+{
+ glm_vec4 const sub0 = glm_vec4_sub(x, edge0);
+ glm_vec4 const sub1 = glm_vec4_sub(edge1, edge0);
+ glm_vec4 const div0 = glm_vec4_sub(sub0, sub1);
+ glm_vec4 const clp0 = glm_vec4_clamp(div0, _mm_setzero_ps(), _mm_set1_ps(1.0f));
+ glm_vec4 const mul0 = glm_vec4_mul(_mm_set1_ps(2.0f), clp0);
+ glm_vec4 const sub2 = glm_vec4_sub(_mm_set1_ps(3.0f), mul0);
+ glm_vec4 const mul1 = glm_vec4_mul(clp0, clp0);
+ glm_vec4 const mul2 = glm_vec4_mul(mul1, sub2);
+ return mul2;
+}
+
+// Agner Fog method
+GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_nan(glm_vec4 x)
+{
+ glm_ivec4 const t1 = _mm_castps_si128(x); // reinterpret as 32-bit integer
+ glm_ivec4 const t2 = _mm_sll_epi32(t1, _mm_cvtsi32_si128(1)); // shift out sign bit
+ glm_ivec4 const t3 = _mm_set1_epi32(0xFF000000); // exponent mask
+ glm_ivec4 const t4 = _mm_and_si128(t2, t3); // exponent
+ glm_ivec4 const t5 = _mm_andnot_si128(t3, t2); // fraction
+ glm_ivec4 const Equal = _mm_cmpeq_epi32(t3, t4);
+ glm_ivec4 const Nequal = _mm_cmpeq_epi32(t5, _mm_setzero_si128());
+ glm_ivec4 const And = _mm_and_si128(Equal, Nequal);
+ return _mm_castsi128_ps(And); // exponent = all 1s and fraction != 0
+}
+
+// Agner Fog method
+GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_inf(glm_vec4 x)
+{
+ glm_ivec4 const t1 = _mm_castps_si128(x); // reinterpret as 32-bit integer
+ glm_ivec4 const t2 = _mm_sll_epi32(t1, _mm_cvtsi32_si128(1)); // shift out sign bit
+ return _mm_castsi128_ps(_mm_cmpeq_epi32(t2, _mm_set1_epi32(0xFF000000))); // exponent is all 1s, fraction is 0
+}
+
+#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT
diff --git a/src/third_party/glm/glm/simd/exponential.h b/src/third_party/glm/glm/simd/exponential.h
new file mode 100644
index 0000000..4eb0fb7
--- /dev/null
+++ b/src/third_party/glm/glm/simd/exponential.h
@@ -0,0 +1,20 @@
+/// @ref simd
+/// @file glm/simd/experimental.h
+
+#pragma once
+
+#include "platform.h"
+
+#if GLM_ARCH & GLM_ARCH_SSE2_BIT
+
+GLM_FUNC_QUALIFIER glm_vec4 glm_vec1_sqrt_lowp(glm_vec4 x)
+{
+ return _mm_mul_ss(_mm_rsqrt_ss(x), x);
+}
+
+GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_sqrt_lowp(glm_vec4 x)
+{
+ return _mm_mul_ps(_mm_rsqrt_ps(x), x);
+}
+
+#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT
diff --git a/src/third_party/glm/glm/simd/geometric.h b/src/third_party/glm/glm/simd/geometric.h
new file mode 100644
index 0000000..ca53387
--- /dev/null
+++ b/src/third_party/glm/glm/simd/geometric.h
@@ -0,0 +1,124 @@
+/// @ref simd
+/// @file glm/simd/geometric.h
+
+#pragma once
+
+#include "common.h"
+
+#if GLM_ARCH & GLM_ARCH_SSE2_BIT
+
+GLM_FUNC_DECL glm_vec4 glm_vec4_dot(glm_vec4 v1, glm_vec4 v2);
+GLM_FUNC_DECL glm_vec4 glm_vec1_dot(glm_vec4 v1, glm_vec4 v2);
+
+GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_length(glm_vec4 x)
+{
+ glm_vec4 const dot0 = glm_vec4_dot(x, x);
+ glm_vec4 const sqt0 = _mm_sqrt_ps(dot0);
+ return sqt0;
+}
+
+GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_distance(glm_vec4 p0, glm_vec4 p1)
+{
+ glm_vec4 const sub0 = _mm_sub_ps(p0, p1);
+ glm_vec4 const len0 = glm_vec4_length(sub0);
+ return len0;
+}
+
+GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_dot(glm_vec4 v1, glm_vec4 v2)
+{
+# if GLM_ARCH & GLM_ARCH_AVX_BIT
+ return _mm_dp_ps(v1, v2, 0xff);
+# elif GLM_ARCH & GLM_ARCH_SSE3_BIT
+ glm_vec4 const mul0 = _mm_mul_ps(v1, v2);
+ glm_vec4 const hadd0 = _mm_hadd_ps(mul0, mul0);
+ glm_vec4 const hadd1 = _mm_hadd_ps(hadd0, hadd0);
+ return hadd1;
+# else
+ glm_vec4 const mul0 = _mm_mul_ps(v1, v2);
+ glm_vec4 const swp0 = _mm_shuffle_ps(mul0, mul0, _MM_SHUFFLE(2, 3, 0, 1));
+ glm_vec4 const add0 = _mm_add_ps(mul0, swp0);
+ glm_vec4 const swp1 = _mm_shuffle_ps(add0, add0, _MM_SHUFFLE(0, 1, 2, 3));
+ glm_vec4 const add1 = _mm_add_ps(add0, swp1);
+ return add1;
+# endif
+}
+
+GLM_FUNC_QUALIFIER glm_vec4 glm_vec1_dot(glm_vec4 v1, glm_vec4 v2)
+{
+# if GLM_ARCH & GLM_ARCH_AVX_BIT
+ return _mm_dp_ps(v1, v2, 0xff);
+# elif GLM_ARCH & GLM_ARCH_SSE3_BIT
+ glm_vec4 const mul0 = _mm_mul_ps(v1, v2);
+ glm_vec4 const had0 = _mm_hadd_ps(mul0, mul0);
+ glm_vec4 const had1 = _mm_hadd_ps(had0, had0);
+ return had1;
+# else
+ glm_vec4 const mul0 = _mm_mul_ps(v1, v2);
+ glm_vec4 const mov0 = _mm_movehl_ps(mul0, mul0);
+ glm_vec4 const add0 = _mm_add_ps(mov0, mul0);
+ glm_vec4 const swp1 = _mm_shuffle_ps(add0, add0, 1);
+ glm_vec4 const add1 = _mm_add_ss(add0, swp1);
+ return add1;
+# endif
+}
+
+GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_cross(glm_vec4 v1, glm_vec4 v2)
+{
+ glm_vec4 const swp0 = _mm_shuffle_ps(v1, v1, _MM_SHUFFLE(3, 0, 2, 1));
+ glm_vec4 const swp1 = _mm_shuffle_ps(v1, v1, _MM_SHUFFLE(3, 1, 0, 2));
+ glm_vec4 const swp2 = _mm_shuffle_ps(v2, v2, _MM_SHUFFLE(3, 0, 2, 1));
+ glm_vec4 const swp3 = _mm_shuffle_ps(v2, v2, _MM_SHUFFLE(3, 1, 0, 2));
+ glm_vec4 const mul0 = _mm_mul_ps(swp0, swp3);
+ glm_vec4 const mul1 = _mm_mul_ps(swp1, swp2);
+ glm_vec4 const sub0 = _mm_sub_ps(mul0, mul1);
+ return sub0;
+}
+
+GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_normalize(glm_vec4 v)
+{
+ glm_vec4 const dot0 = glm_vec4_dot(v, v);
+ glm_vec4 const isr0 = _mm_rsqrt_ps(dot0);
+ glm_vec4 const mul0 = _mm_mul_ps(v, isr0);
+ return mul0;
+}
+
+GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_faceforward(glm_vec4 N, glm_vec4 I, glm_vec4 Nref)
+{
+ glm_vec4 const dot0 = glm_vec4_dot(Nref, I);
+ glm_vec4 const sgn0 = glm_vec4_sign(dot0);
+ glm_vec4 const mul0 = _mm_mul_ps(sgn0, _mm_set1_ps(-1.0f));
+ glm_vec4 const mul1 = _mm_mul_ps(N, mul0);
+ return mul1;
+}
+
+GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_reflect(glm_vec4 I, glm_vec4 N)
+{
+ glm_vec4 const dot0 = glm_vec4_dot(N, I);
+ glm_vec4 const mul0 = _mm_mul_ps(N, dot0);
+ glm_vec4 const mul1 = _mm_mul_ps(mul0, _mm_set1_ps(2.0f));
+ glm_vec4 const sub0 = _mm_sub_ps(I, mul1);
+ return sub0;
+}
+
+GLM_FUNC_QUALIFIER __m128 glm_vec4_refract(glm_vec4 I, glm_vec4 N, glm_vec4 eta)
+{
+ glm_vec4 const dot0 = glm_vec4_dot(N, I);
+ glm_vec4 const mul0 = _mm_mul_ps(eta, eta);
+ glm_vec4 const mul1 = _mm_mul_ps(dot0, dot0);
+ glm_vec4 const sub0 = _mm_sub_ps(_mm_set1_ps(1.0f), mul0);
+ glm_vec4 const sub1 = _mm_sub_ps(_mm_set1_ps(1.0f), mul1);
+ glm_vec4 const mul2 = _mm_mul_ps(sub0, sub1);
+
+ if(_mm_movemask_ps(_mm_cmplt_ss(mul2, _mm_set1_ps(0.0f))) == 0)
+ return _mm_set1_ps(0.0f);
+
+ glm_vec4 const sqt0 = _mm_sqrt_ps(mul2);
+ glm_vec4 const mad0 = glm_vec4_fma(eta, dot0, sqt0);
+ glm_vec4 const mul4 = _mm_mul_ps(mad0, N);
+ glm_vec4 const mul5 = _mm_mul_ps(eta, I);
+ glm_vec4 const sub2 = _mm_sub_ps(mul5, mul4);
+
+ return sub2;
+}
+
+#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT
diff --git a/src/third_party/glm/glm/simd/integer.h b/src/third_party/glm/glm/simd/integer.h
new file mode 100644
index 0000000..50fd824
--- /dev/null
+++ b/src/third_party/glm/glm/simd/integer.h
@@ -0,0 +1,115 @@
+/// @ref simd
+/// @file glm/simd/integer.h
+
+#pragma once
+
+#if GLM_ARCH & GLM_ARCH_SSE2_BIT
+
+GLM_FUNC_QUALIFIER glm_uvec4 glm_i128_interleave(glm_uvec4 x)
+{
+ glm_uvec4 const Mask4 = _mm_set1_epi32(0x0000FFFF);
+ glm_uvec4 const Mask3 = _mm_set1_epi32(0x00FF00FF);
+ glm_uvec4 const Mask2 = _mm_set1_epi32(0x0F0F0F0F);
+ glm_uvec4 const Mask1 = _mm_set1_epi32(0x33333333);
+ glm_uvec4 const Mask0 = _mm_set1_epi32(0x55555555);
+
+ glm_uvec4 Reg1;
+ glm_uvec4 Reg2;
+
+ // REG1 = x;
+ // REG2 = y;
+ //Reg1 = _mm_unpacklo_epi64(x, y);
+ Reg1 = x;
+
+ //REG1 = ((REG1 << 16) | REG1) & glm::uint64(0x0000FFFF0000FFFF);
+ //REG2 = ((REG2 << 16) | REG2) & glm::uint64(0x0000FFFF0000FFFF);
+ Reg2 = _mm_slli_si128(Reg1, 2);
+ Reg1 = _mm_or_si128(Reg2, Reg1);
+ Reg1 = _mm_and_si128(Reg1, Mask4);
+
+ //REG1 = ((REG1 << 8) | REG1) & glm::uint64(0x00FF00FF00FF00FF);
+ //REG2 = ((REG2 << 8) | REG2) & glm::uint64(0x00FF00FF00FF00FF);
+ Reg2 = _mm_slli_si128(Reg1, 1);
+ Reg1 = _mm_or_si128(Reg2, Reg1);
+ Reg1 = _mm_and_si128(Reg1, Mask3);
+
+ //REG1 = ((REG1 << 4) | REG1) & glm::uint64(0x0F0F0F0F0F0F0F0F);
+ //REG2 = ((REG2 << 4) | REG2) & glm::uint64(0x0F0F0F0F0F0F0F0F);
+ Reg2 = _mm_slli_epi32(Reg1, 4);
+ Reg1 = _mm_or_si128(Reg2, Reg1);
+ Reg1 = _mm_and_si128(Reg1, Mask2);
+
+ //REG1 = ((REG1 << 2) | REG1) & glm::uint64(0x3333333333333333);
+ //REG2 = ((REG2 << 2) | REG2) & glm::uint64(0x3333333333333333);
+ Reg2 = _mm_slli_epi32(Reg1, 2);
+ Reg1 = _mm_or_si128(Reg2, Reg1);
+ Reg1 = _mm_and_si128(Reg1, Mask1);
+
+ //REG1 = ((REG1 << 1) | REG1) & glm::uint64(0x5555555555555555);
+ //REG2 = ((REG2 << 1) | REG2) & glm::uint64(0x5555555555555555);
+ Reg2 = _mm_slli_epi32(Reg1, 1);
+ Reg1 = _mm_or_si128(Reg2, Reg1);
+ Reg1 = _mm_and_si128(Reg1, Mask0);
+
+ //return REG1 | (REG2 << 1);
+ Reg2 = _mm_slli_epi32(Reg1, 1);
+ Reg2 = _mm_srli_si128(Reg2, 8);
+ Reg1 = _mm_or_si128(Reg1, Reg2);
+
+ return Reg1;
+}
+
+GLM_FUNC_QUALIFIER glm_uvec4 glm_i128_interleave2(glm_uvec4 x, glm_uvec4 y)
+{
+ glm_uvec4 const Mask4 = _mm_set1_epi32(0x0000FFFF);
+ glm_uvec4 const Mask3 = _mm_set1_epi32(0x00FF00FF);
+ glm_uvec4 const Mask2 = _mm_set1_epi32(0x0F0F0F0F);
+ glm_uvec4 const Mask1 = _mm_set1_epi32(0x33333333);
+ glm_uvec4 const Mask0 = _mm_set1_epi32(0x55555555);
+
+ glm_uvec4 Reg1;
+ glm_uvec4 Reg2;
+
+ // REG1 = x;
+ // REG2 = y;
+ Reg1 = _mm_unpacklo_epi64(x, y);
+
+ //REG1 = ((REG1 << 16) | REG1) & glm::uint64(0x0000FFFF0000FFFF);
+ //REG2 = ((REG2 << 16) | REG2) & glm::uint64(0x0000FFFF0000FFFF);
+ Reg2 = _mm_slli_si128(Reg1, 2);
+ Reg1 = _mm_or_si128(Reg2, Reg1);
+ Reg1 = _mm_and_si128(Reg1, Mask4);
+
+ //REG1 = ((REG1 << 8) | REG1) & glm::uint64(0x00FF00FF00FF00FF);
+ //REG2 = ((REG2 << 8) | REG2) & glm::uint64(0x00FF00FF00FF00FF);
+ Reg2 = _mm_slli_si128(Reg1, 1);
+ Reg1 = _mm_or_si128(Reg2, Reg1);
+ Reg1 = _mm_and_si128(Reg1, Mask3);
+
+ //REG1 = ((REG1 << 4) | REG1) & glm::uint64(0x0F0F0F0F0F0F0F0F);
+ //REG2 = ((REG2 << 4) | REG2) & glm::uint64(0x0F0F0F0F0F0F0F0F);
+ Reg2 = _mm_slli_epi32(Reg1, 4);
+ Reg1 = _mm_or_si128(Reg2, Reg1);
+ Reg1 = _mm_and_si128(Reg1, Mask2);
+
+ //REG1 = ((REG1 << 2) | REG1) & glm::uint64(0x3333333333333333);
+ //REG2 = ((REG2 << 2) | REG2) & glm::uint64(0x3333333333333333);
+ Reg2 = _mm_slli_epi32(Reg1, 2);
+ Reg1 = _mm_or_si128(Reg2, Reg1);
+ Reg1 = _mm_and_si128(Reg1, Mask1);
+
+ //REG1 = ((REG1 << 1) | REG1) & glm::uint64(0x5555555555555555);
+ //REG2 = ((REG2 << 1) | REG2) & glm::uint64(0x5555555555555555);
+ Reg2 = _mm_slli_epi32(Reg1, 1);
+ Reg1 = _mm_or_si128(Reg2, Reg1);
+ Reg1 = _mm_and_si128(Reg1, Mask0);
+
+ //return REG1 | (REG2 << 1);
+ Reg2 = _mm_slli_epi32(Reg1, 1);
+ Reg2 = _mm_srli_si128(Reg2, 8);
+ Reg1 = _mm_or_si128(Reg1, Reg2);
+
+ return Reg1;
+}
+
+#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT
diff --git a/src/third_party/glm/glm/simd/matrix.h b/src/third_party/glm/glm/simd/matrix.h
new file mode 100644
index 0000000..549d40c
--- /dev/null
+++ b/src/third_party/glm/glm/simd/matrix.h
@@ -0,0 +1,1028 @@
+/// @ref simd
+/// @file glm/simd/matrix.h
+
+#pragma once
+
+#include "geometric.h"
+
+#if GLM_ARCH & GLM_ARCH_SSE2_BIT
+
+GLM_FUNC_QUALIFIER void glm_mat4_matrixCompMult(glm_vec4 const in1[4], glm_vec4 const in2[4], glm_vec4 out[4])
+{
+ out[0] = _mm_mul_ps(in1[0], in2[0]);
+ out[1] = _mm_mul_ps(in1[1], in2[1]);
+ out[2] = _mm_mul_ps(in1[2], in2[2]);
+ out[3] = _mm_mul_ps(in1[3], in2[3]);
+}
+
+GLM_FUNC_QUALIFIER void glm_mat4_add(glm_vec4 const in1[4], glm_vec4 const in2[4], glm_vec4 out[4])
+{
+ out[0] = _mm_add_ps(in1[0], in2[0]);
+ out[1] = _mm_add_ps(in1[1], in2[1]);
+ out[2] = _mm_add_ps(in1[2], in2[2]);
+ out[3] = _mm_add_ps(in1[3], in2[3]);
+}
+
+GLM_FUNC_QUALIFIER void glm_mat4_sub(glm_vec4 const in1[4], glm_vec4 const in2[4], glm_vec4 out[4])
+{
+ out[0] = _mm_sub_ps(in1[0], in2[0]);
+ out[1] = _mm_sub_ps(in1[1], in2[1]);
+ out[2] = _mm_sub_ps(in1[2], in2[2]);
+ out[3] = _mm_sub_ps(in1[3], in2[3]);
+}
+
+GLM_FUNC_QUALIFIER glm_vec4 glm_mat4_mul_vec4(glm_vec4 const m[4], glm_vec4 v)
+{
+ __m128 v0 = _mm_shuffle_ps(v, v, _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 v1 = _mm_shuffle_ps(v, v, _MM_SHUFFLE(1, 1, 1, 1));
+ __m128 v2 = _mm_shuffle_ps(v, v, _MM_SHUFFLE(2, 2, 2, 2));
+ __m128 v3 = _mm_shuffle_ps(v, v, _MM_SHUFFLE(3, 3, 3, 3));
+
+ __m128 m0 = _mm_mul_ps(m[0], v0);
+ __m128 m1 = _mm_mul_ps(m[1], v1);
+ __m128 m2 = _mm_mul_ps(m[2], v2);
+ __m128 m3 = _mm_mul_ps(m[3], v3);
+
+ __m128 a0 = _mm_add_ps(m0, m1);
+ __m128 a1 = _mm_add_ps(m2, m3);
+ __m128 a2 = _mm_add_ps(a0, a1);
+
+ return a2;
+}
+
+GLM_FUNC_QUALIFIER __m128 glm_vec4_mul_mat4(glm_vec4 v, glm_vec4 const m[4])
+{
+ __m128 i0 = m[0];
+ __m128 i1 = m[1];
+ __m128 i2 = m[2];
+ __m128 i3 = m[3];
+
+ __m128 m0 = _mm_mul_ps(v, i0);
+ __m128 m1 = _mm_mul_ps(v, i1);
+ __m128 m2 = _mm_mul_ps(v, i2);
+ __m128 m3 = _mm_mul_ps(v, i3);
+
+ __m128 u0 = _mm_unpacklo_ps(m0, m1);
+ __m128 u1 = _mm_unpackhi_ps(m0, m1);
+ __m128 a0 = _mm_add_ps(u0, u1);
+
+ __m128 u2 = _mm_unpacklo_ps(m2, m3);
+ __m128 u3 = _mm_unpackhi_ps(m2, m3);
+ __m128 a1 = _mm_add_ps(u2, u3);
+
+ __m128 f0 = _mm_movelh_ps(a0, a1);
+ __m128 f1 = _mm_movehl_ps(a1, a0);
+ __m128 f2 = _mm_add_ps(f0, f1);
+
+ return f2;
+}
+
+GLM_FUNC_QUALIFIER void glm_mat4_mul(glm_vec4 const in1[4], glm_vec4 const in2[4], glm_vec4 out[4])
+{
+ {
+ __m128 e0 = _mm_shuffle_ps(in2[0], in2[0], _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 e1 = _mm_shuffle_ps(in2[0], in2[0], _MM_SHUFFLE(1, 1, 1, 1));
+ __m128 e2 = _mm_shuffle_ps(in2[0], in2[0], _MM_SHUFFLE(2, 2, 2, 2));
+ __m128 e3 = _mm_shuffle_ps(in2[0], in2[0], _MM_SHUFFLE(3, 3, 3, 3));
+
+ __m128 m0 = _mm_mul_ps(in1[0], e0);
+ __m128 m1 = _mm_mul_ps(in1[1], e1);
+ __m128 m2 = _mm_mul_ps(in1[2], e2);
+ __m128 m3 = _mm_mul_ps(in1[3], e3);
+
+ __m128 a0 = _mm_add_ps(m0, m1);
+ __m128 a1 = _mm_add_ps(m2, m3);
+ __m128 a2 = _mm_add_ps(a0, a1);
+
+ out[0] = a2;
+ }
+
+ {
+ __m128 e0 = _mm_shuffle_ps(in2[1], in2[1], _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 e1 = _mm_shuffle_ps(in2[1], in2[1], _MM_SHUFFLE(1, 1, 1, 1));
+ __m128 e2 = _mm_shuffle_ps(in2[1], in2[1], _MM_SHUFFLE(2, 2, 2, 2));
+ __m128 e3 = _mm_shuffle_ps(in2[1], in2[1], _MM_SHUFFLE(3, 3, 3, 3));
+
+ __m128 m0 = _mm_mul_ps(in1[0], e0);
+ __m128 m1 = _mm_mul_ps(in1[1], e1);
+ __m128 m2 = _mm_mul_ps(in1[2], e2);
+ __m128 m3 = _mm_mul_ps(in1[3], e3);
+
+ __m128 a0 = _mm_add_ps(m0, m1);
+ __m128 a1 = _mm_add_ps(m2, m3);
+ __m128 a2 = _mm_add_ps(a0, a1);
+
+ out[1] = a2;
+ }
+
+ {
+ __m128 e0 = _mm_shuffle_ps(in2[2], in2[2], _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 e1 = _mm_shuffle_ps(in2[2], in2[2], _MM_SHUFFLE(1, 1, 1, 1));
+ __m128 e2 = _mm_shuffle_ps(in2[2], in2[2], _MM_SHUFFLE(2, 2, 2, 2));
+ __m128 e3 = _mm_shuffle_ps(in2[2], in2[2], _MM_SHUFFLE(3, 3, 3, 3));
+
+ __m128 m0 = _mm_mul_ps(in1[0], e0);
+ __m128 m1 = _mm_mul_ps(in1[1], e1);
+ __m128 m2 = _mm_mul_ps(in1[2], e2);
+ __m128 m3 = _mm_mul_ps(in1[3], e3);
+
+ __m128 a0 = _mm_add_ps(m0, m1);
+ __m128 a1 = _mm_add_ps(m2, m3);
+ __m128 a2 = _mm_add_ps(a0, a1);
+
+ out[2] = a2;
+ }
+
+ {
+ //(__m128&)_mm_shuffle_epi32(__m128i&)in2[0], _MM_SHUFFLE(3, 3, 3, 3))
+ __m128 e0 = _mm_shuffle_ps(in2[3], in2[3], _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 e1 = _mm_shuffle_ps(in2[3], in2[3], _MM_SHUFFLE(1, 1, 1, 1));
+ __m128 e2 = _mm_shuffle_ps(in2[3], in2[3], _MM_SHUFFLE(2, 2, 2, 2));
+ __m128 e3 = _mm_shuffle_ps(in2[3], in2[3], _MM_SHUFFLE(3, 3, 3, 3));
+
+ __m128 m0 = _mm_mul_ps(in1[0], e0);
+ __m128 m1 = _mm_mul_ps(in1[1], e1);
+ __m128 m2 = _mm_mul_ps(in1[2], e2);
+ __m128 m3 = _mm_mul_ps(in1[3], e3);
+
+ __m128 a0 = _mm_add_ps(m0, m1);
+ __m128 a1 = _mm_add_ps(m2, m3);
+ __m128 a2 = _mm_add_ps(a0, a1);
+
+ out[3] = a2;
+ }
+}
+
+GLM_FUNC_QUALIFIER void glm_mat4_transpose(glm_vec4 const in[4], glm_vec4 out[4])
+{
+ __m128 tmp0 = _mm_shuffle_ps(in[0], in[1], 0x44);
+ __m128 tmp2 = _mm_shuffle_ps(in[0], in[1], 0xEE);
+ __m128 tmp1 = _mm_shuffle_ps(in[2], in[3], 0x44);
+ __m128 tmp3 = _mm_shuffle_ps(in[2], in[3], 0xEE);
+
+ out[0] = _mm_shuffle_ps(tmp0, tmp1, 0x88);
+ out[1] = _mm_shuffle_ps(tmp0, tmp1, 0xDD);
+ out[2] = _mm_shuffle_ps(tmp2, tmp3, 0x88);
+ out[3] = _mm_shuffle_ps(tmp2, tmp3, 0xDD);
+}
+
+GLM_FUNC_QUALIFIER glm_vec4 glm_mat4_determinant_highp(glm_vec4 const in[4])
+{
+ __m128 Fac0;
+ {
+ // valType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];
+ // valType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];
+ // valType SubFactor06 = m[1][2] * m[3][3] - m[3][2] * m[1][3];
+ // valType SubFactor13 = m[1][2] * m[2][3] - m[2][2] * m[1][3];
+
+ __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3));
+ __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2));
+
+ __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2));
+ __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3));
+
+ __m128 Mul00 = _mm_mul_ps(Swp00, Swp01);
+ __m128 Mul01 = _mm_mul_ps(Swp02, Swp03);
+ Fac0 = _mm_sub_ps(Mul00, Mul01);
+ }
+
+ __m128 Fac1;
+ {
+ // valType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3];
+ // valType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3];
+ // valType SubFactor07 = m[1][1] * m[3][3] - m[3][1] * m[1][3];
+ // valType SubFactor14 = m[1][1] * m[2][3] - m[2][1] * m[1][3];
+
+ __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3));
+ __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1));
+
+ __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1));
+ __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3));
+
+ __m128 Mul00 = _mm_mul_ps(Swp00, Swp01);
+ __m128 Mul01 = _mm_mul_ps(Swp02, Swp03);
+ Fac1 = _mm_sub_ps(Mul00, Mul01);
+ }
+
+
+ __m128 Fac2;
+ {
+ // valType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2];
+ // valType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2];
+ // valType SubFactor08 = m[1][1] * m[3][2] - m[3][1] * m[1][2];
+ // valType SubFactor15 = m[1][1] * m[2][2] - m[2][1] * m[1][2];
+
+ __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2));
+ __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1));
+
+ __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1));
+ __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2));
+
+ __m128 Mul00 = _mm_mul_ps(Swp00, Swp01);
+ __m128 Mul01 = _mm_mul_ps(Swp02, Swp03);
+ Fac2 = _mm_sub_ps(Mul00, Mul01);
+ }
+
+ __m128 Fac3;
+ {
+ // valType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3];
+ // valType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3];
+ // valType SubFactor09 = m[1][0] * m[3][3] - m[3][0] * m[1][3];
+ // valType SubFactor16 = m[1][0] * m[2][3] - m[2][0] * m[1][3];
+
+ __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3));
+ __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0));
+
+ __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3));
+
+ __m128 Mul00 = _mm_mul_ps(Swp00, Swp01);
+ __m128 Mul01 = _mm_mul_ps(Swp02, Swp03);
+ Fac3 = _mm_sub_ps(Mul00, Mul01);
+ }
+
+ __m128 Fac4;
+ {
+ // valType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2];
+ // valType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2];
+ // valType SubFactor10 = m[1][0] * m[3][2] - m[3][0] * m[1][2];
+ // valType SubFactor17 = m[1][0] * m[2][2] - m[2][0] * m[1][2];
+
+ __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2));
+ __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0));
+
+ __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2));
+
+ __m128 Mul00 = _mm_mul_ps(Swp00, Swp01);
+ __m128 Mul01 = _mm_mul_ps(Swp02, Swp03);
+ Fac4 = _mm_sub_ps(Mul00, Mul01);
+ }
+
+ __m128 Fac5;
+ {
+ // valType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1];
+ // valType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1];
+ // valType SubFactor12 = m[1][0] * m[3][1] - m[3][0] * m[1][1];
+ // valType SubFactor18 = m[1][0] * m[2][1] - m[2][0] * m[1][1];
+
+ __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1));
+ __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0));
+
+ __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1));
+
+ __m128 Mul00 = _mm_mul_ps(Swp00, Swp01);
+ __m128 Mul01 = _mm_mul_ps(Swp02, Swp03);
+ Fac5 = _mm_sub_ps(Mul00, Mul01);
+ }
+
+ __m128 SignA = _mm_set_ps( 1.0f,-1.0f, 1.0f,-1.0f);
+ __m128 SignB = _mm_set_ps(-1.0f, 1.0f,-1.0f, 1.0f);
+
+ // m[1][0]
+ // m[0][0]
+ // m[0][0]
+ // m[0][0]
+ __m128 Temp0 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 Vec0 = _mm_shuffle_ps(Temp0, Temp0, _MM_SHUFFLE(2, 2, 2, 0));
+
+ // m[1][1]
+ // m[0][1]
+ // m[0][1]
+ // m[0][1]
+ __m128 Temp1 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(1, 1, 1, 1));
+ __m128 Vec1 = _mm_shuffle_ps(Temp1, Temp1, _MM_SHUFFLE(2, 2, 2, 0));
+
+ // m[1][2]
+ // m[0][2]
+ // m[0][2]
+ // m[0][2]
+ __m128 Temp2 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(2, 2, 2, 2));
+ __m128 Vec2 = _mm_shuffle_ps(Temp2, Temp2, _MM_SHUFFLE(2, 2, 2, 0));
+
+ // m[1][3]
+ // m[0][3]
+ // m[0][3]
+ // m[0][3]
+ __m128 Temp3 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(3, 3, 3, 3));
+ __m128 Vec3 = _mm_shuffle_ps(Temp3, Temp3, _MM_SHUFFLE(2, 2, 2, 0));
+
+ // col0
+ // + (Vec1[0] * Fac0[0] - Vec2[0] * Fac1[0] + Vec3[0] * Fac2[0]),
+ // - (Vec1[1] * Fac0[1] - Vec2[1] * Fac1[1] + Vec3[1] * Fac2[1]),
+ // + (Vec1[2] * Fac0[2] - Vec2[2] * Fac1[2] + Vec3[2] * Fac2[2]),
+ // - (Vec1[3] * Fac0[3] - Vec2[3] * Fac1[3] + Vec3[3] * Fac2[3]),
+ __m128 Mul00 = _mm_mul_ps(Vec1, Fac0);
+ __m128 Mul01 = _mm_mul_ps(Vec2, Fac1);
+ __m128 Mul02 = _mm_mul_ps(Vec3, Fac2);
+ __m128 Sub00 = _mm_sub_ps(Mul00, Mul01);
+ __m128 Add00 = _mm_add_ps(Sub00, Mul02);
+ __m128 Inv0 = _mm_mul_ps(SignB, Add00);
+
+ // col1
+ // - (Vec0[0] * Fac0[0] - Vec2[0] * Fac3[0] + Vec3[0] * Fac4[0]),
+ // + (Vec0[0] * Fac0[1] - Vec2[1] * Fac3[1] + Vec3[1] * Fac4[1]),
+ // - (Vec0[0] * Fac0[2] - Vec2[2] * Fac3[2] + Vec3[2] * Fac4[2]),
+ // + (Vec0[0] * Fac0[3] - Vec2[3] * Fac3[3] + Vec3[3] * Fac4[3]),
+ __m128 Mul03 = _mm_mul_ps(Vec0, Fac0);
+ __m128 Mul04 = _mm_mul_ps(Vec2, Fac3);
+ __m128 Mul05 = _mm_mul_ps(Vec3, Fac4);
+ __m128 Sub01 = _mm_sub_ps(Mul03, Mul04);
+ __m128 Add01 = _mm_add_ps(Sub01, Mul05);
+ __m128 Inv1 = _mm_mul_ps(SignA, Add01);
+
+ // col2
+ // + (Vec0[0] * Fac1[0] - Vec1[0] * Fac3[0] + Vec3[0] * Fac5[0]),
+ // - (Vec0[0] * Fac1[1] - Vec1[1] * Fac3[1] + Vec3[1] * Fac5[1]),
+ // + (Vec0[0] * Fac1[2] - Vec1[2] * Fac3[2] + Vec3[2] * Fac5[2]),
+ // - (Vec0[0] * Fac1[3] - Vec1[3] * Fac3[3] + Vec3[3] * Fac5[3]),
+ __m128 Mul06 = _mm_mul_ps(Vec0, Fac1);
+ __m128 Mul07 = _mm_mul_ps(Vec1, Fac3);
+ __m128 Mul08 = _mm_mul_ps(Vec3, Fac5);
+ __m128 Sub02 = _mm_sub_ps(Mul06, Mul07);
+ __m128 Add02 = _mm_add_ps(Sub02, Mul08);
+ __m128 Inv2 = _mm_mul_ps(SignB, Add02);
+
+ // col3
+ // - (Vec1[0] * Fac2[0] - Vec1[0] * Fac4[0] + Vec2[0] * Fac5[0]),
+ // + (Vec1[0] * Fac2[1] - Vec1[1] * Fac4[1] + Vec2[1] * Fac5[1]),
+ // - (Vec1[0] * Fac2[2] - Vec1[2] * Fac4[2] + Vec2[2] * Fac5[2]),
+ // + (Vec1[0] * Fac2[3] - Vec1[3] * Fac4[3] + Vec2[3] * Fac5[3]));
+ __m128 Mul09 = _mm_mul_ps(Vec0, Fac2);
+ __m128 Mul10 = _mm_mul_ps(Vec1, Fac4);
+ __m128 Mul11 = _mm_mul_ps(Vec2, Fac5);
+ __m128 Sub03 = _mm_sub_ps(Mul09, Mul10);
+ __m128 Add03 = _mm_add_ps(Sub03, Mul11);
+ __m128 Inv3 = _mm_mul_ps(SignA, Add03);
+
+ __m128 Row0 = _mm_shuffle_ps(Inv0, Inv1, _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 Row1 = _mm_shuffle_ps(Inv2, Inv3, _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 Row2 = _mm_shuffle_ps(Row0, Row1, _MM_SHUFFLE(2, 0, 2, 0));
+
+ // valType Determinant = m[0][0] * Inverse[0][0]
+ // + m[0][1] * Inverse[1][0]
+ // + m[0][2] * Inverse[2][0]
+ // + m[0][3] * Inverse[3][0];
+ __m128 Det0 = glm_vec4_dot(in[0], Row2);
+ return Det0;
+}
+
+GLM_FUNC_QUALIFIER glm_vec4 glm_mat4_determinant_lowp(glm_vec4 const m[4])
+{
+ // _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(
+
+ //T SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];
+ //T SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3];
+ //T SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2];
+ //T SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3];
+ //T SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2];
+ //T SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1];
+
+ // First 2 columns
+ __m128 Swp2A = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[2]), _MM_SHUFFLE(0, 1, 1, 2)));
+ __m128 Swp3A = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[3]), _MM_SHUFFLE(3, 2, 3, 3)));
+ __m128 MulA = _mm_mul_ps(Swp2A, Swp3A);
+
+ // Second 2 columns
+ __m128 Swp2B = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[2]), _MM_SHUFFLE(3, 2, 3, 3)));
+ __m128 Swp3B = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[3]), _MM_SHUFFLE(0, 1, 1, 2)));
+ __m128 MulB = _mm_mul_ps(Swp2B, Swp3B);
+
+ // Columns subtraction
+ __m128 SubE = _mm_sub_ps(MulA, MulB);
+
+ // Last 2 rows
+ __m128 Swp2C = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[2]), _MM_SHUFFLE(0, 0, 1, 2)));
+ __m128 Swp3C = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[3]), _MM_SHUFFLE(1, 2, 0, 0)));
+ __m128 MulC = _mm_mul_ps(Swp2C, Swp3C);
+ __m128 SubF = _mm_sub_ps(_mm_movehl_ps(MulC, MulC), MulC);
+
+ //tvec4<T, P> DetCof(
+ // + (m[1][1] * SubFactor00 - m[1][2] * SubFactor01 + m[1][3] * SubFactor02),
+ // - (m[1][0] * SubFactor00 - m[1][2] * SubFactor03 + m[1][3] * SubFactor04),
+ // + (m[1][0] * SubFactor01 - m[1][1] * SubFactor03 + m[1][3] * SubFactor05),
+ // - (m[1][0] * SubFactor02 - m[1][1] * SubFactor04 + m[1][2] * SubFactor05));
+
+ __m128 SubFacA = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(SubE), _MM_SHUFFLE(2, 1, 0, 0)));
+ __m128 SwpFacA = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[1]), _MM_SHUFFLE(0, 0, 0, 1)));
+ __m128 MulFacA = _mm_mul_ps(SwpFacA, SubFacA);
+
+ __m128 SubTmpB = _mm_shuffle_ps(SubE, SubF, _MM_SHUFFLE(0, 0, 3, 1));
+ __m128 SubFacB = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(SubTmpB), _MM_SHUFFLE(3, 1, 1, 0)));//SubF[0], SubE[3], SubE[3], SubE[1];
+ __m128 SwpFacB = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[1]), _MM_SHUFFLE(1, 1, 2, 2)));
+ __m128 MulFacB = _mm_mul_ps(SwpFacB, SubFacB);
+
+ __m128 SubRes = _mm_sub_ps(MulFacA, MulFacB);
+
+ __m128 SubTmpC = _mm_shuffle_ps(SubE, SubF, _MM_SHUFFLE(1, 0, 2, 2));
+ __m128 SubFacC = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(SubTmpC), _MM_SHUFFLE(3, 3, 2, 0)));
+ __m128 SwpFacC = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[1]), _MM_SHUFFLE(2, 3, 3, 3)));
+ __m128 MulFacC = _mm_mul_ps(SwpFacC, SubFacC);
+
+ __m128 AddRes = _mm_add_ps(SubRes, MulFacC);
+ __m128 DetCof = _mm_mul_ps(AddRes, _mm_setr_ps( 1.0f,-1.0f, 1.0f,-1.0f));
+
+ //return m[0][0] * DetCof[0]
+ // + m[0][1] * DetCof[1]
+ // + m[0][2] * DetCof[2]
+ // + m[0][3] * DetCof[3];
+
+ return glm_vec4_dot(m[0], DetCof);
+}
+
+GLM_FUNC_QUALIFIER glm_vec4 glm_mat4_determinant(glm_vec4 const m[4])
+{
+ // _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(add)
+
+ //T SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];
+ //T SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3];
+ //T SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2];
+ //T SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3];
+ //T SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2];
+ //T SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1];
+
+ // First 2 columns
+ __m128 Swp2A = _mm_shuffle_ps(m[2], m[2], _MM_SHUFFLE(0, 1, 1, 2));
+ __m128 Swp3A = _mm_shuffle_ps(m[3], m[3], _MM_SHUFFLE(3, 2, 3, 3));
+ __m128 MulA = _mm_mul_ps(Swp2A, Swp3A);
+
+ // Second 2 columns
+ __m128 Swp2B = _mm_shuffle_ps(m[2], m[2], _MM_SHUFFLE(3, 2, 3, 3));
+ __m128 Swp3B = _mm_shuffle_ps(m[3], m[3], _MM_SHUFFLE(0, 1, 1, 2));
+ __m128 MulB = _mm_mul_ps(Swp2B, Swp3B);
+
+ // Columns subtraction
+ __m128 SubE = _mm_sub_ps(MulA, MulB);
+
+ // Last 2 rows
+ __m128 Swp2C = _mm_shuffle_ps(m[2], m[2], _MM_SHUFFLE(0, 0, 1, 2));
+ __m128 Swp3C = _mm_shuffle_ps(m[3], m[3], _MM_SHUFFLE(1, 2, 0, 0));
+ __m128 MulC = _mm_mul_ps(Swp2C, Swp3C);
+ __m128 SubF = _mm_sub_ps(_mm_movehl_ps(MulC, MulC), MulC);
+
+ //tvec4<T, P> DetCof(
+ // + (m[1][1] * SubFactor00 - m[1][2] * SubFactor01 + m[1][3] * SubFactor02),
+ // - (m[1][0] * SubFactor00 - m[1][2] * SubFactor03 + m[1][3] * SubFactor04),
+ // + (m[1][0] * SubFactor01 - m[1][1] * SubFactor03 + m[1][3] * SubFactor05),
+ // - (m[1][0] * SubFactor02 - m[1][1] * SubFactor04 + m[1][2] * SubFactor05));
+
+ __m128 SubFacA = _mm_shuffle_ps(SubE, SubE, _MM_SHUFFLE(2, 1, 0, 0));
+ __m128 SwpFacA = _mm_shuffle_ps(m[1], m[1], _MM_SHUFFLE(0, 0, 0, 1));
+ __m128 MulFacA = _mm_mul_ps(SwpFacA, SubFacA);
+
+ __m128 SubTmpB = _mm_shuffle_ps(SubE, SubF, _MM_SHUFFLE(0, 0, 3, 1));
+ __m128 SubFacB = _mm_shuffle_ps(SubTmpB, SubTmpB, _MM_SHUFFLE(3, 1, 1, 0));//SubF[0], SubE[3], SubE[3], SubE[1];
+ __m128 SwpFacB = _mm_shuffle_ps(m[1], m[1], _MM_SHUFFLE(1, 1, 2, 2));
+ __m128 MulFacB = _mm_mul_ps(SwpFacB, SubFacB);
+
+ __m128 SubRes = _mm_sub_ps(MulFacA, MulFacB);
+
+ __m128 SubTmpC = _mm_shuffle_ps(SubE, SubF, _MM_SHUFFLE(1, 0, 2, 2));
+ __m128 SubFacC = _mm_shuffle_ps(SubTmpC, SubTmpC, _MM_SHUFFLE(3, 3, 2, 0));
+ __m128 SwpFacC = _mm_shuffle_ps(m[1], m[1], _MM_SHUFFLE(2, 3, 3, 3));
+ __m128 MulFacC = _mm_mul_ps(SwpFacC, SubFacC);
+
+ __m128 AddRes = _mm_add_ps(SubRes, MulFacC);
+ __m128 DetCof = _mm_mul_ps(AddRes, _mm_setr_ps( 1.0f,-1.0f, 1.0f,-1.0f));
+
+ //return m[0][0] * DetCof[0]
+ // + m[0][1] * DetCof[1]
+ // + m[0][2] * DetCof[2]
+ // + m[0][3] * DetCof[3];
+
+ return glm_vec4_dot(m[0], DetCof);
+}
+
+GLM_FUNC_QUALIFIER void glm_mat4_inverse(glm_vec4 const in[4], glm_vec4 out[4])
+{
+ __m128 Fac0;
+ {
+ // valType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];
+ // valType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];
+ // valType SubFactor06 = m[1][2] * m[3][3] - m[3][2] * m[1][3];
+ // valType SubFactor13 = m[1][2] * m[2][3] - m[2][2] * m[1][3];
+
+ __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3));
+ __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2));
+
+ __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2));
+ __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3));
+
+ __m128 Mul00 = _mm_mul_ps(Swp00, Swp01);
+ __m128 Mul01 = _mm_mul_ps(Swp02, Swp03);
+ Fac0 = _mm_sub_ps(Mul00, Mul01);
+ }
+
+ __m128 Fac1;
+ {
+ // valType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3];
+ // valType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3];
+ // valType SubFactor07 = m[1][1] * m[3][3] - m[3][1] * m[1][3];
+ // valType SubFactor14 = m[1][1] * m[2][3] - m[2][1] * m[1][3];
+
+ __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3));
+ __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1));
+
+ __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1));
+ __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3));
+
+ __m128 Mul00 = _mm_mul_ps(Swp00, Swp01);
+ __m128 Mul01 = _mm_mul_ps(Swp02, Swp03);
+ Fac1 = _mm_sub_ps(Mul00, Mul01);
+ }
+
+
+ __m128 Fac2;
+ {
+ // valType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2];
+ // valType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2];
+ // valType SubFactor08 = m[1][1] * m[3][2] - m[3][1] * m[1][2];
+ // valType SubFactor15 = m[1][1] * m[2][2] - m[2][1] * m[1][2];
+
+ __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2));
+ __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1));
+
+ __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1));
+ __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2));
+
+ __m128 Mul00 = _mm_mul_ps(Swp00, Swp01);
+ __m128 Mul01 = _mm_mul_ps(Swp02, Swp03);
+ Fac2 = _mm_sub_ps(Mul00, Mul01);
+ }
+
+ __m128 Fac3;
+ {
+ // valType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3];
+ // valType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3];
+ // valType SubFactor09 = m[1][0] * m[3][3] - m[3][0] * m[1][3];
+ // valType SubFactor16 = m[1][0] * m[2][3] - m[2][0] * m[1][3];
+
+ __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3));
+ __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0));
+
+ __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3));
+
+ __m128 Mul00 = _mm_mul_ps(Swp00, Swp01);
+ __m128 Mul01 = _mm_mul_ps(Swp02, Swp03);
+ Fac3 = _mm_sub_ps(Mul00, Mul01);
+ }
+
+ __m128 Fac4;
+ {
+ // valType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2];
+ // valType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2];
+ // valType SubFactor10 = m[1][0] * m[3][2] - m[3][0] * m[1][2];
+ // valType SubFactor17 = m[1][0] * m[2][2] - m[2][0] * m[1][2];
+
+ __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2));
+ __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0));
+
+ __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2));
+
+ __m128 Mul00 = _mm_mul_ps(Swp00, Swp01);
+ __m128 Mul01 = _mm_mul_ps(Swp02, Swp03);
+ Fac4 = _mm_sub_ps(Mul00, Mul01);
+ }
+
+ __m128 Fac5;
+ {
+ // valType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1];
+ // valType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1];
+ // valType SubFactor12 = m[1][0] * m[3][1] - m[3][0] * m[1][1];
+ // valType SubFactor18 = m[1][0] * m[2][1] - m[2][0] * m[1][1];
+
+ __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1));
+ __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0));
+
+ __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1));
+
+ __m128 Mul00 = _mm_mul_ps(Swp00, Swp01);
+ __m128 Mul01 = _mm_mul_ps(Swp02, Swp03);
+ Fac5 = _mm_sub_ps(Mul00, Mul01);
+ }
+
+ __m128 SignA = _mm_set_ps( 1.0f,-1.0f, 1.0f,-1.0f);
+ __m128 SignB = _mm_set_ps(-1.0f, 1.0f,-1.0f, 1.0f);
+
+ // m[1][0]
+ // m[0][0]
+ // m[0][0]
+ // m[0][0]
+ __m128 Temp0 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 Vec0 = _mm_shuffle_ps(Temp0, Temp0, _MM_SHUFFLE(2, 2, 2, 0));
+
+ // m[1][1]
+ // m[0][1]
+ // m[0][1]
+ // m[0][1]
+ __m128 Temp1 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(1, 1, 1, 1));
+ __m128 Vec1 = _mm_shuffle_ps(Temp1, Temp1, _MM_SHUFFLE(2, 2, 2, 0));
+
+ // m[1][2]
+ // m[0][2]
+ // m[0][2]
+ // m[0][2]
+ __m128 Temp2 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(2, 2, 2, 2));
+ __m128 Vec2 = _mm_shuffle_ps(Temp2, Temp2, _MM_SHUFFLE(2, 2, 2, 0));
+
+ // m[1][3]
+ // m[0][3]
+ // m[0][3]
+ // m[0][3]
+ __m128 Temp3 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(3, 3, 3, 3));
+ __m128 Vec3 = _mm_shuffle_ps(Temp3, Temp3, _MM_SHUFFLE(2, 2, 2, 0));
+
+ // col0
+ // + (Vec1[0] * Fac0[0] - Vec2[0] * Fac1[0] + Vec3[0] * Fac2[0]),
+ // - (Vec1[1] * Fac0[1] - Vec2[1] * Fac1[1] + Vec3[1] * Fac2[1]),
+ // + (Vec1[2] * Fac0[2] - Vec2[2] * Fac1[2] + Vec3[2] * Fac2[2]),
+ // - (Vec1[3] * Fac0[3] - Vec2[3] * Fac1[3] + Vec3[3] * Fac2[3]),
+ __m128 Mul00 = _mm_mul_ps(Vec1, Fac0);
+ __m128 Mul01 = _mm_mul_ps(Vec2, Fac1);
+ __m128 Mul02 = _mm_mul_ps(Vec3, Fac2);
+ __m128 Sub00 = _mm_sub_ps(Mul00, Mul01);
+ __m128 Add00 = _mm_add_ps(Sub00, Mul02);
+ __m128 Inv0 = _mm_mul_ps(SignB, Add00);
+
+ // col1
+ // - (Vec0[0] * Fac0[0] - Vec2[0] * Fac3[0] + Vec3[0] * Fac4[0]),
+ // + (Vec0[0] * Fac0[1] - Vec2[1] * Fac3[1] + Vec3[1] * Fac4[1]),
+ // - (Vec0[0] * Fac0[2] - Vec2[2] * Fac3[2] + Vec3[2] * Fac4[2]),
+ // + (Vec0[0] * Fac0[3] - Vec2[3] * Fac3[3] + Vec3[3] * Fac4[3]),
+ __m128 Mul03 = _mm_mul_ps(Vec0, Fac0);
+ __m128 Mul04 = _mm_mul_ps(Vec2, Fac3);
+ __m128 Mul05 = _mm_mul_ps(Vec3, Fac4);
+ __m128 Sub01 = _mm_sub_ps(Mul03, Mul04);
+ __m128 Add01 = _mm_add_ps(Sub01, Mul05);
+ __m128 Inv1 = _mm_mul_ps(SignA, Add01);
+
+ // col2
+ // + (Vec0[0] * Fac1[0] - Vec1[0] * Fac3[0] + Vec3[0] * Fac5[0]),
+ // - (Vec0[0] * Fac1[1] - Vec1[1] * Fac3[1] + Vec3[1] * Fac5[1]),
+ // + (Vec0[0] * Fac1[2] - Vec1[2] * Fac3[2] + Vec3[2] * Fac5[2]),
+ // - (Vec0[0] * Fac1[3] - Vec1[3] * Fac3[3] + Vec3[3] * Fac5[3]),
+ __m128 Mul06 = _mm_mul_ps(Vec0, Fac1);
+ __m128 Mul07 = _mm_mul_ps(Vec1, Fac3);
+ __m128 Mul08 = _mm_mul_ps(Vec3, Fac5);
+ __m128 Sub02 = _mm_sub_ps(Mul06, Mul07);
+ __m128 Add02 = _mm_add_ps(Sub02, Mul08);
+ __m128 Inv2 = _mm_mul_ps(SignB, Add02);
+
+ // col3
+ // - (Vec1[0] * Fac2[0] - Vec1[0] * Fac4[0] + Vec2[0] * Fac5[0]),
+ // + (Vec1[0] * Fac2[1] - Vec1[1] * Fac4[1] + Vec2[1] * Fac5[1]),
+ // - (Vec1[0] * Fac2[2] - Vec1[2] * Fac4[2] + Vec2[2] * Fac5[2]),
+ // + (Vec1[0] * Fac2[3] - Vec1[3] * Fac4[3] + Vec2[3] * Fac5[3]));
+ __m128 Mul09 = _mm_mul_ps(Vec0, Fac2);
+ __m128 Mul10 = _mm_mul_ps(Vec1, Fac4);
+ __m128 Mul11 = _mm_mul_ps(Vec2, Fac5);
+ __m128 Sub03 = _mm_sub_ps(Mul09, Mul10);
+ __m128 Add03 = _mm_add_ps(Sub03, Mul11);
+ __m128 Inv3 = _mm_mul_ps(SignA, Add03);
+
+ __m128 Row0 = _mm_shuffle_ps(Inv0, Inv1, _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 Row1 = _mm_shuffle_ps(Inv2, Inv3, _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 Row2 = _mm_shuffle_ps(Row0, Row1, _MM_SHUFFLE(2, 0, 2, 0));
+
+ // valType Determinant = m[0][0] * Inverse[0][0]
+ // + m[0][1] * Inverse[1][0]
+ // + m[0][2] * Inverse[2][0]
+ // + m[0][3] * Inverse[3][0];
+ __m128 Det0 = glm_vec4_dot(in[0], Row2);
+ __m128 Rcp0 = _mm_div_ps(_mm_set1_ps(1.0f), Det0);
+ //__m128 Rcp0 = _mm_rcp_ps(Det0);
+
+ // Inverse /= Determinant;
+ out[0] = _mm_mul_ps(Inv0, Rcp0);
+ out[1] = _mm_mul_ps(Inv1, Rcp0);
+ out[2] = _mm_mul_ps(Inv2, Rcp0);
+ out[3] = _mm_mul_ps(Inv3, Rcp0);
+}
+
+GLM_FUNC_QUALIFIER void glm_mat4_inverse_lowp(glm_vec4 const in[4], glm_vec4 out[4])
+{
+ __m128 Fac0;
+ {
+ // valType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];
+ // valType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];
+ // valType SubFactor06 = m[1][2] * m[3][3] - m[3][2] * m[1][3];
+ // valType SubFactor13 = m[1][2] * m[2][3] - m[2][2] * m[1][3];
+
+ __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3));
+ __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2));
+
+ __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2));
+ __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3));
+
+ __m128 Mul00 = _mm_mul_ps(Swp00, Swp01);
+ __m128 Mul01 = _mm_mul_ps(Swp02, Swp03);
+ Fac0 = _mm_sub_ps(Mul00, Mul01);
+ }
+
+ __m128 Fac1;
+ {
+ // valType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3];
+ // valType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3];
+ // valType SubFactor07 = m[1][1] * m[3][3] - m[3][1] * m[1][3];
+ // valType SubFactor14 = m[1][1] * m[2][3] - m[2][1] * m[1][3];
+
+ __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3));
+ __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1));
+
+ __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1));
+ __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3));
+
+ __m128 Mul00 = _mm_mul_ps(Swp00, Swp01);
+ __m128 Mul01 = _mm_mul_ps(Swp02, Swp03);
+ Fac1 = _mm_sub_ps(Mul00, Mul01);
+ }
+
+
+ __m128 Fac2;
+ {
+ // valType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2];
+ // valType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2];
+ // valType SubFactor08 = m[1][1] * m[3][2] - m[3][1] * m[1][2];
+ // valType SubFactor15 = m[1][1] * m[2][2] - m[2][1] * m[1][2];
+
+ __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2));
+ __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1));
+
+ __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1));
+ __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2));
+
+ __m128 Mul00 = _mm_mul_ps(Swp00, Swp01);
+ __m128 Mul01 = _mm_mul_ps(Swp02, Swp03);
+ Fac2 = _mm_sub_ps(Mul00, Mul01);
+ }
+
+ __m128 Fac3;
+ {
+ // valType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3];
+ // valType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3];
+ // valType SubFactor09 = m[1][0] * m[3][3] - m[3][0] * m[1][3];
+ // valType SubFactor16 = m[1][0] * m[2][3] - m[2][0] * m[1][3];
+
+ __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3));
+ __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0));
+
+ __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3));
+
+ __m128 Mul00 = _mm_mul_ps(Swp00, Swp01);
+ __m128 Mul01 = _mm_mul_ps(Swp02, Swp03);
+ Fac3 = _mm_sub_ps(Mul00, Mul01);
+ }
+
+ __m128 Fac4;
+ {
+ // valType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2];
+ // valType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2];
+ // valType SubFactor10 = m[1][0] * m[3][2] - m[3][0] * m[1][2];
+ // valType SubFactor17 = m[1][0] * m[2][2] - m[2][0] * m[1][2];
+
+ __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2));
+ __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0));
+
+ __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2));
+
+ __m128 Mul00 = _mm_mul_ps(Swp00, Swp01);
+ __m128 Mul01 = _mm_mul_ps(Swp02, Swp03);
+ Fac4 = _mm_sub_ps(Mul00, Mul01);
+ }
+
+ __m128 Fac5;
+ {
+ // valType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1];
+ // valType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1];
+ // valType SubFactor12 = m[1][0] * m[3][1] - m[3][0] * m[1][1];
+ // valType SubFactor18 = m[1][0] * m[2][1] - m[2][0] * m[1][1];
+
+ __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1));
+ __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0));
+
+ __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));
+ __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1));
+
+ __m128 Mul00 = _mm_mul_ps(Swp00, Swp01);
+ __m128 Mul01 = _mm_mul_ps(Swp02, Swp03);
+ Fac5 = _mm_sub_ps(Mul00, Mul01);
+ }
+
+ __m128 SignA = _mm_set_ps( 1.0f,-1.0f, 1.0f,-1.0f);
+ __m128 SignB = _mm_set_ps(-1.0f, 1.0f,-1.0f, 1.0f);
+
+ // m[1][0]
+ // m[0][0]
+ // m[0][0]
+ // m[0][0]
+ __m128 Temp0 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 Vec0 = _mm_shuffle_ps(Temp0, Temp0, _MM_SHUFFLE(2, 2, 2, 0));
+
+ // m[1][1]
+ // m[0][1]
+ // m[0][1]
+ // m[0][1]
+ __m128 Temp1 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(1, 1, 1, 1));
+ __m128 Vec1 = _mm_shuffle_ps(Temp1, Temp1, _MM_SHUFFLE(2, 2, 2, 0));
+
+ // m[1][2]
+ // m[0][2]
+ // m[0][2]
+ // m[0][2]
+ __m128 Temp2 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(2, 2, 2, 2));
+ __m128 Vec2 = _mm_shuffle_ps(Temp2, Temp2, _MM_SHUFFLE(2, 2, 2, 0));
+
+ // m[1][3]
+ // m[0][3]
+ // m[0][3]
+ // m[0][3]
+ __m128 Temp3 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(3, 3, 3, 3));
+ __m128 Vec3 = _mm_shuffle_ps(Temp3, Temp3, _MM_SHUFFLE(2, 2, 2, 0));
+
+ // col0
+ // + (Vec1[0] * Fac0[0] - Vec2[0] * Fac1[0] + Vec3[0] * Fac2[0]),
+ // - (Vec1[1] * Fac0[1] - Vec2[1] * Fac1[1] + Vec3[1] * Fac2[1]),
+ // + (Vec1[2] * Fac0[2] - Vec2[2] * Fac1[2] + Vec3[2] * Fac2[2]),
+ // - (Vec1[3] * Fac0[3] - Vec2[3] * Fac1[3] + Vec3[3] * Fac2[3]),
+ __m128 Mul00 = _mm_mul_ps(Vec1, Fac0);
+ __m128 Mul01 = _mm_mul_ps(Vec2, Fac1);
+ __m128 Mul02 = _mm_mul_ps(Vec3, Fac2);
+ __m128 Sub00 = _mm_sub_ps(Mul00, Mul01);
+ __m128 Add00 = _mm_add_ps(Sub00, Mul02);
+ __m128 Inv0 = _mm_mul_ps(SignB, Add00);
+
+ // col1
+ // - (Vec0[0] * Fac0[0] - Vec2[0] * Fac3[0] + Vec3[0] * Fac4[0]),
+ // + (Vec0[0] * Fac0[1] - Vec2[1] * Fac3[1] + Vec3[1] * Fac4[1]),
+ // - (Vec0[0] * Fac0[2] - Vec2[2] * Fac3[2] + Vec3[2] * Fac4[2]),
+ // + (Vec0[0] * Fac0[3] - Vec2[3] * Fac3[3] + Vec3[3] * Fac4[3]),
+ __m128 Mul03 = _mm_mul_ps(Vec0, Fac0);
+ __m128 Mul04 = _mm_mul_ps(Vec2, Fac3);
+ __m128 Mul05 = _mm_mul_ps(Vec3, Fac4);
+ __m128 Sub01 = _mm_sub_ps(Mul03, Mul04);
+ __m128 Add01 = _mm_add_ps(Sub01, Mul05);
+ __m128 Inv1 = _mm_mul_ps(SignA, Add01);
+
+ // col2
+ // + (Vec0[0] * Fac1[0] - Vec1[0] * Fac3[0] + Vec3[0] * Fac5[0]),
+ // - (Vec0[0] * Fac1[1] - Vec1[1] * Fac3[1] + Vec3[1] * Fac5[1]),
+ // + (Vec0[0] * Fac1[2] - Vec1[2] * Fac3[2] + Vec3[2] * Fac5[2]),
+ // - (Vec0[0] * Fac1[3] - Vec1[3] * Fac3[3] + Vec3[3] * Fac5[3]),
+ __m128 Mul06 = _mm_mul_ps(Vec0, Fac1);
+ __m128 Mul07 = _mm_mul_ps(Vec1, Fac3);
+ __m128 Mul08 = _mm_mul_ps(Vec3, Fac5);
+ __m128 Sub02 = _mm_sub_ps(Mul06, Mul07);
+ __m128 Add02 = _mm_add_ps(Sub02, Mul08);
+ __m128 Inv2 = _mm_mul_ps(SignB, Add02);
+
+ // col3
+ // - (Vec1[0] * Fac2[0] - Vec1[0] * Fac4[0] + Vec2[0] * Fac5[0]),
+ // + (Vec1[0] * Fac2[1] - Vec1[1] * Fac4[1] + Vec2[1] * Fac5[1]),
+ // - (Vec1[0] * Fac2[2] - Vec1[2] * Fac4[2] + Vec2[2] * Fac5[2]),
+ // + (Vec1[0] * Fac2[3] - Vec1[3] * Fac4[3] + Vec2[3] * Fac5[3]));
+ __m128 Mul09 = _mm_mul_ps(Vec0, Fac2);
+ __m128 Mul10 = _mm_mul_ps(Vec1, Fac4);
+ __m128 Mul11 = _mm_mul_ps(Vec2, Fac5);
+ __m128 Sub03 = _mm_sub_ps(Mul09, Mul10);
+ __m128 Add03 = _mm_add_ps(Sub03, Mul11);
+ __m128 Inv3 = _mm_mul_ps(SignA, Add03);
+
+ __m128 Row0 = _mm_shuffle_ps(Inv0, Inv1, _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 Row1 = _mm_shuffle_ps(Inv2, Inv3, _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 Row2 = _mm_shuffle_ps(Row0, Row1, _MM_SHUFFLE(2, 0, 2, 0));
+
+ // valType Determinant = m[0][0] * Inverse[0][0]
+ // + m[0][1] * Inverse[1][0]
+ // + m[0][2] * Inverse[2][0]
+ // + m[0][3] * Inverse[3][0];
+ __m128 Det0 = glm_vec4_dot(in[0], Row2);
+ __m128 Rcp0 = _mm_rcp_ps(Det0);
+ //__m128 Rcp0 = _mm_div_ps(one, Det0);
+ // Inverse /= Determinant;
+ out[0] = _mm_mul_ps(Inv0, Rcp0);
+ out[1] = _mm_mul_ps(Inv1, Rcp0);
+ out[2] = _mm_mul_ps(Inv2, Rcp0);
+ out[3] = _mm_mul_ps(Inv3, Rcp0);
+}
+/*
+GLM_FUNC_QUALIFIER void glm_mat4_rotate(__m128 const in[4], float Angle, float const v[3], __m128 out[4])
+{
+ float a = glm::radians(Angle);
+ float c = cos(a);
+ float s = sin(a);
+
+ glm::vec4 AxisA(v[0], v[1], v[2], float(0));
+ __m128 AxisB = _mm_set_ps(AxisA.w, AxisA.z, AxisA.y, AxisA.x);
+ __m128 AxisC = detail::sse_nrm_ps(AxisB);
+
+ __m128 Cos0 = _mm_set_ss(c);
+ __m128 CosA = _mm_shuffle_ps(Cos0, Cos0, _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 Sin0 = _mm_set_ss(s);
+ __m128 SinA = _mm_shuffle_ps(Sin0, Sin0, _MM_SHUFFLE(0, 0, 0, 0));
+
+ // tvec3<T, P> temp = (valType(1) - c) * axis;
+ __m128 Temp0 = _mm_sub_ps(one, CosA);
+ __m128 Temp1 = _mm_mul_ps(Temp0, AxisC);
+
+ //Rotate[0][0] = c + temp[0] * axis[0];
+ //Rotate[0][1] = 0 + temp[0] * axis[1] + s * axis[2];
+ //Rotate[0][2] = 0 + temp[0] * axis[2] - s * axis[1];
+ __m128 Axis0 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(0, 0, 0, 0));
+ __m128 TmpA0 = _mm_mul_ps(Axis0, AxisC);
+ __m128 CosA0 = _mm_shuffle_ps(Cos0, Cos0, _MM_SHUFFLE(1, 1, 1, 0));
+ __m128 TmpA1 = _mm_add_ps(CosA0, TmpA0);
+ __m128 SinA0 = SinA;//_mm_set_ps(0.0f, s, -s, 0.0f);
+ __m128 TmpA2 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(3, 1, 2, 3));
+ __m128 TmpA3 = _mm_mul_ps(SinA0, TmpA2);
+ __m128 TmpA4 = _mm_add_ps(TmpA1, TmpA3);
+
+ //Rotate[1][0] = 0 + temp[1] * axis[0] - s * axis[2];
+ //Rotate[1][1] = c + temp[1] * axis[1];
+ //Rotate[1][2] = 0 + temp[1] * axis[2] + s * axis[0];
+ __m128 Axis1 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(1, 1, 1, 1));
+ __m128 TmpB0 = _mm_mul_ps(Axis1, AxisC);
+ __m128 CosA1 = _mm_shuffle_ps(Cos0, Cos0, _MM_SHUFFLE(1, 1, 0, 1));
+ __m128 TmpB1 = _mm_add_ps(CosA1, TmpB0);
+ __m128 SinB0 = SinA;//_mm_set_ps(-s, 0.0f, s, 0.0f);
+ __m128 TmpB2 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(3, 0, 3, 2));
+ __m128 TmpB3 = _mm_mul_ps(SinA0, TmpB2);
+ __m128 TmpB4 = _mm_add_ps(TmpB1, TmpB3);
+
+ //Rotate[2][0] = 0 + temp[2] * axis[0] + s * axis[1];
+ //Rotate[2][1] = 0 + temp[2] * axis[1] - s * axis[0];
+ //Rotate[2][2] = c + temp[2] * axis[2];
+ __m128 Axis2 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(2, 2, 2, 2));
+ __m128 TmpC0 = _mm_mul_ps(Axis2, AxisC);
+ __m128 CosA2 = _mm_shuffle_ps(Cos0, Cos0, _MM_SHUFFLE(1, 0, 1, 1));
+ __m128 TmpC1 = _mm_add_ps(CosA2, TmpC0);
+ __m128 SinC0 = SinA;//_mm_set_ps(s, -s, 0.0f, 0.0f);
+ __m128 TmpC2 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(3, 3, 0, 1));
+ __m128 TmpC3 = _mm_mul_ps(SinA0, TmpC2);
+ __m128 TmpC4 = _mm_add_ps(TmpC1, TmpC3);
+
+ __m128 Result[4];
+ Result[0] = TmpA4;
+ Result[1] = TmpB4;
+ Result[2] = TmpC4;
+ Result[3] = _mm_set_ps(1, 0, 0, 0);
+
+ //tmat4x4<valType> Result(uninitialize);
+ //Result[0] = m[0] * Rotate[0][0] + m[1] * Rotate[0][1] + m[2] * Rotate[0][2];
+ //Result[1] = m[0] * Rotate[1][0] + m[1] * Rotate[1][1] + m[2] * Rotate[1][2];
+ //Result[2] = m[0] * Rotate[2][0] + m[1] * Rotate[2][1] + m[2] * Rotate[2][2];
+ //Result[3] = m[3];
+ //return Result;
+ sse_mul_ps(in, Result, out);
+}
+*/
+GLM_FUNC_QUALIFIER void glm_mat4_outerProduct(__m128 const & c, __m128 const & r, __m128 out[4])
+{
+ out[0] = _mm_mul_ps(c, _mm_shuffle_ps(r, r, _MM_SHUFFLE(0, 0, 0, 0)));
+ out[1] = _mm_mul_ps(c, _mm_shuffle_ps(r, r, _MM_SHUFFLE(1, 1, 1, 1)));
+ out[2] = _mm_mul_ps(c, _mm_shuffle_ps(r, r, _MM_SHUFFLE(2, 2, 2, 2)));
+ out[3] = _mm_mul_ps(c, _mm_shuffle_ps(r, r, _MM_SHUFFLE(3, 3, 3, 3)));
+}
+
+#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT
diff --git a/src/third_party/glm/glm/simd/packing.h b/src/third_party/glm/glm/simd/packing.h
new file mode 100644
index 0000000..609163e
--- /dev/null
+++ b/src/third_party/glm/glm/simd/packing.h
@@ -0,0 +1,8 @@
+/// @ref simd
+/// @file glm/simd/packing.h
+
+#pragma once
+
+#if GLM_ARCH & GLM_ARCH_SSE2_BIT
+
+#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT
diff --git a/src/third_party/glm/glm/simd/platform.h b/src/third_party/glm/glm/simd/platform.h
new file mode 100644
index 0000000..85eb4b5
--- /dev/null
+++ b/src/third_party/glm/glm/simd/platform.h
@@ -0,0 +1,437 @@
+/// @ref simd
+/// @file glm/simd/platform.h
+
+#pragma once
+
+///////////////////////////////////////////////////////////////////////////////////
+// Platform
+
+#define GLM_PLATFORM_UNKNOWN 0x00000000
+#define GLM_PLATFORM_WINDOWS 0x00010000
+#define GLM_PLATFORM_LINUX 0x00020000
+#define GLM_PLATFORM_APPLE 0x00040000
+//#define GLM_PLATFORM_IOS 0x00080000
+#define GLM_PLATFORM_ANDROID 0x00100000
+#define GLM_PLATFORM_CHROME_NACL 0x00200000
+#define GLM_PLATFORM_UNIX 0x00400000
+#define GLM_PLATFORM_QNXNTO 0x00800000
+#define GLM_PLATFORM_WINCE 0x01000000
+#define GLM_PLATFORM_CYGWIN 0x02000000
+
+#ifdef GLM_FORCE_PLATFORM_UNKNOWN
+# define GLM_PLATFORM GLM_PLATFORM_UNKNOWN
+#elif defined(__CYGWIN__)
+# define GLM_PLATFORM GLM_PLATFORM_CYGWIN
+#elif defined(__QNXNTO__)
+# define GLM_PLATFORM GLM_PLATFORM_QNXNTO
+#elif defined(__APPLE__)
+# define GLM_PLATFORM GLM_PLATFORM_APPLE
+#elif defined(WINCE)
+# define GLM_PLATFORM GLM_PLATFORM_WINCE
+#elif defined(_WIN32)
+# define GLM_PLATFORM GLM_PLATFORM_WINDOWS
+#elif defined(__native_client__)
+# define GLM_PLATFORM GLM_PLATFORM_CHROME_NACL
+#elif defined(__ANDROID__)
+# define GLM_PLATFORM GLM_PLATFORM_ANDROID
+#elif defined(__linux)
+# define GLM_PLATFORM GLM_PLATFORM_LINUX
+#elif defined(__unix)
+# define GLM_PLATFORM GLM_PLATFORM_UNIX
+#else
+# define GLM_PLATFORM GLM_PLATFORM_UNKNOWN
+#endif//
+
+// Report platform detection
+#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_MESSAGE_PLATFORM_DISPLAYED)
+# define GLM_MESSAGE_PLATFORM_DISPLAYED
+# if(GLM_PLATFORM & GLM_PLATFORM_QNXNTO)
+# pragma message("GLM: QNX platform detected")
+//# elif(GLM_PLATFORM & GLM_PLATFORM_IOS)
+//# pragma message("GLM: iOS platform detected")
+# elif(GLM_PLATFORM & GLM_PLATFORM_APPLE)
+# pragma message("GLM: Apple platform detected")
+# elif(GLM_PLATFORM & GLM_PLATFORM_WINCE)
+# pragma message("GLM: WinCE platform detected")
+# elif(GLM_PLATFORM & GLM_PLATFORM_WINDOWS)
+# pragma message("GLM: Windows platform detected")
+# elif(GLM_PLATFORM & GLM_PLATFORM_CHROME_NACL)
+# pragma message("GLM: Native Client detected")
+# elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID)
+# pragma message("GLM: Android platform detected")
+# elif(GLM_PLATFORM & GLM_PLATFORM_LINUX)
+# pragma message("GLM: Linux platform detected")
+# elif(GLM_PLATFORM & GLM_PLATFORM_UNIX)
+# pragma message("GLM: UNIX platform detected")
+# elif(GLM_PLATFORM & GLM_PLATFORM_UNKNOWN)
+# pragma message("GLM: platform unknown")
+# else
+# pragma message("GLM: platform not detected")
+# endif
+#endif//GLM_MESSAGES
+
+///////////////////////////////////////////////////////////////////////////////////
+// Compiler
+
+#define GLM_COMPILER_UNKNOWN 0x00000000
+
+// Intel
+#define GLM_COMPILER_INTEL 0x00100000
+#define GLM_COMPILER_INTEL12 0x00100010
+#define GLM_COMPILER_INTEL12_1 0x00100020
+#define GLM_COMPILER_INTEL13 0x00100030
+#define GLM_COMPILER_INTEL14 0x00100040
+#define GLM_COMPILER_INTEL15 0x00100050
+#define GLM_COMPILER_INTEL16 0x00100060
+
+// Visual C++ defines
+#define GLM_COMPILER_VC 0x01000000
+#define GLM_COMPILER_VC2010 0x01000090
+#define GLM_COMPILER_VC2012 0x010000A0
+#define GLM_COMPILER_VC2013 0x010000B0
+#define GLM_COMPILER_VC2015 0x010000C0
+
+// GCC defines
+#define GLM_COMPILER_GCC 0x02000000
+#define GLM_COMPILER_GCC44 0x020000B0
+#define GLM_COMPILER_GCC45 0x020000C0
+#define GLM_COMPILER_GCC46 0x020000D0
+#define GLM_COMPILER_GCC47 0x020000E0
+#define GLM_COMPILER_GCC48 0x020000F0
+#define GLM_COMPILER_GCC49 0x02000100
+#define GLM_COMPILER_GCC50 0x02000200
+#define GLM_COMPILER_GCC51 0x02000300
+#define GLM_COMPILER_GCC52 0x02000400
+#define GLM_COMPILER_GCC53 0x02000500
+#define GLM_COMPILER_GCC54 0x02000600
+#define GLM_COMPILER_GCC60 0x02000700
+#define GLM_COMPILER_GCC61 0x02000800
+#define GLM_COMPILER_GCC62 0x02000900
+#define GLM_COMPILER_GCC70 0x02000A00
+#define GLM_COMPILER_GCC71 0x02000B00
+#define GLM_COMPILER_GCC72 0x02000C00
+#define GLM_COMPILER_GCC80 0x02000D00
+
+// CUDA
+#define GLM_COMPILER_CUDA 0x10000000
+#define GLM_COMPILER_CUDA40 0x10000040
+#define GLM_COMPILER_CUDA41 0x10000050
+#define GLM_COMPILER_CUDA42 0x10000060
+#define GLM_COMPILER_CUDA50 0x10000070
+#define GLM_COMPILER_CUDA60 0x10000080
+#define GLM_COMPILER_CUDA65 0x10000090
+#define GLM_COMPILER_CUDA70 0x100000A0
+#define GLM_COMPILER_CUDA75 0x100000B0
+#define GLM_COMPILER_CUDA80 0x100000C0
+
+// Clang
+#define GLM_COMPILER_CLANG 0x20000000
+#define GLM_COMPILER_CLANG32 0x20000030
+#define GLM_COMPILER_CLANG33 0x20000040
+#define GLM_COMPILER_CLANG34 0x20000050
+#define GLM_COMPILER_CLANG35 0x20000060
+#define GLM_COMPILER_CLANG36 0x20000070
+#define GLM_COMPILER_CLANG37 0x20000080
+#define GLM_COMPILER_CLANG38 0x20000090
+#define GLM_COMPILER_CLANG39 0x200000A0
+
+// Build model
+#define GLM_MODEL_32 0x00000010
+#define GLM_MODEL_64 0x00000020
+
+// Force generic C++ compiler
+#ifdef GLM_FORCE_COMPILER_UNKNOWN
+# define GLM_COMPILER GLM_COMPILER_UNKNOWN
+
+#elif defined(__INTEL_COMPILER)
+# if __INTEL_COMPILER == 1200
+# define GLM_COMPILER GLM_COMPILER_INTEL12
+# elif __INTEL_COMPILER == 1210
+# define GLM_COMPILER GLM_COMPILER_INTEL12_1
+# elif __INTEL_COMPILER == 1300
+# define GLM_COMPILER GLM_COMPILER_INTEL13
+# elif __INTEL_COMPILER == 1400
+# define GLM_COMPILER GLM_COMPILER_INTEL14
+# elif __INTEL_COMPILER == 1500
+# define GLM_COMPILER GLM_COMPILER_INTEL15
+# elif __INTEL_COMPILER >= 1600
+# define GLM_COMPILER GLM_COMPILER_INTEL16
+# else
+# define GLM_COMPILER GLM_COMPILER_INTEL
+# endif
+
+// CUDA
+#elif defined(__CUDACC__)
+# if !defined(CUDA_VERSION) && !defined(GLM_FORCE_CUDA)
+# include <cuda.h> // make sure version is defined since nvcc does not define it itself!
+# endif
+# if CUDA_VERSION < 3000
+# error "GLM requires CUDA 3.0 or higher"
+# else
+# define GLM_COMPILER GLM_COMPILER_CUDA
+# endif
+
+// Clang
+#elif defined(__clang__)
+# if GLM_PLATFORM & GLM_PLATFORM_APPLE
+# if __clang_major__ == 5 && __clang_minor__ == 0
+# define GLM_COMPILER GLM_COMPILER_CLANG33
+# elif __clang_major__ == 5 && __clang_minor__ == 1
+# define GLM_COMPILER GLM_COMPILER_CLANG34
+# elif __clang_major__ == 6 && __clang_minor__ == 0
+# define GLM_COMPILER GLM_COMPILER_CLANG35
+# elif __clang_major__ == 6 && __clang_minor__ >= 1
+# define GLM_COMPILER GLM_COMPILER_CLANG36
+# elif __clang_major__ >= 7
+# define GLM_COMPILER GLM_COMPILER_CLANG37
+# else
+# define GLM_COMPILER GLM_COMPILER_CLANG
+# endif
+# else
+# if __clang_major__ == 3 && __clang_minor__ == 0
+# define GLM_COMPILER GLM_COMPILER_CLANG30
+# elif __clang_major__ == 3 && __clang_minor__ == 1
+# define GLM_COMPILER GLM_COMPILER_CLANG31
+# elif __clang_major__ == 3 && __clang_minor__ == 2
+# define GLM_COMPILER GLM_COMPILER_CLANG32
+# elif __clang_major__ == 3 && __clang_minor__ == 3
+# define GLM_COMPILER GLM_COMPILER_CLANG33
+# elif __clang_major__ == 3 && __clang_minor__ == 4
+# define GLM_COMPILER GLM_COMPILER_CLANG34
+# elif __clang_major__ == 3 && __clang_minor__ == 5
+# define GLM_COMPILER GLM_COMPILER_CLANG35
+# elif __clang_major__ == 3 && __clang_minor__ == 6
+# define GLM_COMPILER GLM_COMPILER_CLANG36
+# elif __clang_major__ == 3 && __clang_minor__ == 7
+# define GLM_COMPILER GLM_COMPILER_CLANG37
+# elif __clang_major__ == 3 && __clang_minor__ == 8
+# define GLM_COMPILER GLM_COMPILER_CLANG38
+# elif __clang_major__ == 3 && __clang_minor__ >= 9
+# define GLM_COMPILER GLM_COMPILER_CLANG39
+# elif __clang_major__ >= 4
+# define GLM_COMPILER GLM_COMPILER_CLANG39
+# else
+# define GLM_COMPILER GLM_COMPILER_CLANG
+# endif
+# endif
+
+// Visual C++
+#elif defined(_MSC_VER)
+# if _MSC_VER < 1600
+# error "GLM requires Visual C++ 2010 or higher"
+# elif _MSC_VER == 1600
+# define GLM_COMPILER GLM_COMPILER_VC2010
+# elif _MSC_VER == 1700
+# define GLM_COMPILER GLM_COMPILER_VC2012
+# elif _MSC_VER == 1800
+# define GLM_COMPILER GLM_COMPILER_VC2013
+# elif _MSC_VER >= 1900
+# define GLM_COMPILER GLM_COMPILER_VC2015
+# else//_MSC_VER
+# define GLM_COMPILER GLM_COMPILER_VC
+# endif//_MSC_VER
+
+// G++
+#elif defined(__GNUC__) || defined(__MINGW32__)
+# if (__GNUC__ == 4) && (__GNUC_MINOR__ == 2)
+# define GLM_COMPILER (GLM_COMPILER_GCC42)
+# elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 3)
+# define GLM_COMPILER (GLM_COMPILER_GCC43)
+# elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 4)
+# define GLM_COMPILER (GLM_COMPILER_GCC44)
+# elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 5)
+# define GLM_COMPILER (GLM_COMPILER_GCC45)
+# elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 6)
+# define GLM_COMPILER (GLM_COMPILER_GCC46)
+# elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 7)
+# define GLM_COMPILER (GLM_COMPILER_GCC47)
+# elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 8)
+# define GLM_COMPILER (GLM_COMPILER_GCC48)
+# elif (__GNUC__ == 4) && (__GNUC_MINOR__ >= 9)
+# define GLM_COMPILER (GLM_COMPILER_GCC49)
+# elif (__GNUC__ == 5) && (__GNUC_MINOR__ == 0)
+# define GLM_COMPILER (GLM_COMPILER_GCC50)
+# elif (__GNUC__ == 5) && (__GNUC_MINOR__ == 1)
+# define GLM_COMPILER (GLM_COMPILER_GCC51)
+# elif (__GNUC__ == 5) && (__GNUC_MINOR__ == 2)
+# define GLM_COMPILER (GLM_COMPILER_GCC52)
+# elif (__GNUC__ == 5) && (__GNUC_MINOR__ == 3)
+# define GLM_COMPILER (GLM_COMPILER_GCC53)
+# elif (__GNUC__ == 5) && (__GNUC_MINOR__ >= 4)
+# define GLM_COMPILER (GLM_COMPILER_GCC54)
+# elif (__GNUC__ == 6) && (__GNUC_MINOR__ == 0)
+# define GLM_COMPILER (GLM_COMPILER_GCC60)
+# elif (__GNUC__ == 6) && (__GNUC_MINOR__ == 1)
+# define GLM_COMPILER (GLM_COMPILER_GCC61)
+# elif (__GNUC__ == 6) && (__GNUC_MINOR__ >= 2)
+# define GLM_COMPILER (GLM_COMPILER_GCC62)
+# elif (__GNUC__ == 7) && (__GNUC_MINOR__ == 0)
+# define GLM_COMPILER (GLM_COMPILER_GCC70)
+# elif (__GNUC__ == 7) && (__GNUC_MINOR__ == 1)
+# define GLM_COMPILER (GLM_COMPILER_GCC71)
+# elif (__GNUC__ == 7) && (__GNUC_MINOR__ == 2)
+# define GLM_COMPILER (GLM_COMPILER_GCC72)
+# elif (__GNUC__ >= 8)
+# define GLM_COMPILER (GLM_COMPILER_GCC80)
+# else
+# define GLM_COMPILER (GLM_COMPILER_GCC)
+# endif
+
+#else
+# define GLM_COMPILER GLM_COMPILER_UNKNOWN
+#endif
+
+#ifndef GLM_COMPILER
+# error "GLM_COMPILER undefined, your compiler may not be supported by GLM. Add #define GLM_COMPILER 0 to ignore this message."
+#endif//GLM_COMPILER
+
+///////////////////////////////////////////////////////////////////////////////////
+// Instruction sets
+
+// User defines: GLM_FORCE_PURE GLM_FORCE_SSE2 GLM_FORCE_SSE3 GLM_FORCE_AVX GLM_FORCE_AVX2 GLM_FORCE_AVX2
+
+#define GLM_ARCH_X86_BIT 0x00000001
+#define GLM_ARCH_SSE2_BIT 0x00000002
+#define GLM_ARCH_SSE3_BIT 0x00000004
+#define GLM_ARCH_SSSE3_BIT 0x00000008
+#define GLM_ARCH_SSE41_BIT 0x00000010
+#define GLM_ARCH_SSE42_BIT 0x00000020
+#define GLM_ARCH_AVX_BIT 0x00000040
+#define GLM_ARCH_AVX2_BIT 0x00000080
+#define GLM_ARCH_AVX512_BIT 0x00000100 // Skylake subset
+#define GLM_ARCH_ARM_BIT 0x00000100
+#define GLM_ARCH_NEON_BIT 0x00000200
+#define GLM_ARCH_MIPS_BIT 0x00010000
+#define GLM_ARCH_PPC_BIT 0x01000000
+
+#define GLM_ARCH_PURE (0x00000000)
+#define GLM_ARCH_X86 (GLM_ARCH_X86_BIT)
+#define GLM_ARCH_SSE2 (GLM_ARCH_SSE2_BIT | GLM_ARCH_X86)
+#define GLM_ARCH_SSE3 (GLM_ARCH_SSE3_BIT | GLM_ARCH_SSE2)
+#define GLM_ARCH_SSSE3 (GLM_ARCH_SSSE3_BIT | GLM_ARCH_SSE3)
+#define GLM_ARCH_SSE41 (GLM_ARCH_SSE41_BIT | GLM_ARCH_SSSE3)
+#define GLM_ARCH_SSE42 (GLM_ARCH_SSE42_BIT | GLM_ARCH_SSE41)
+#define GLM_ARCH_AVX (GLM_ARCH_AVX_BIT | GLM_ARCH_SSE42)
+#define GLM_ARCH_AVX2 (GLM_ARCH_AVX2_BIT | GLM_ARCH_AVX)
+#define GLM_ARCH_AVX512 (GLM_ARCH_AVX512_BIT | GLM_ARCH_AVX2) // Skylake subset
+#define GLM_ARCH_ARM (GLM_ARCH_ARM_BIT)
+#define GLM_ARCH_NEON (GLM_ARCH_NEON_BIT | GLM_ARCH_ARM)
+#define GLM_ARCH_MIPS (GLM_ARCH_MIPS_BIT)
+#define GLM_ARCH_PPC (GLM_ARCH_PPC_BIT)
+
+#if defined(GLM_FORCE_PURE)
+# define GLM_ARCH GLM_ARCH_PURE
+#elif defined(GLM_FORCE_MIPS)
+# define GLM_ARCH (GLM_ARCH_MIPS)
+#elif defined(GLM_FORCE_PPC)
+# define GLM_ARCH (GLM_ARCH_PPC)
+#elif defined(GLM_FORCE_NEON)
+# define GLM_ARCH (GLM_ARCH_NEON)
+#elif defined(GLM_FORCE_AVX512)
+# define GLM_ARCH (GLM_ARCH_AVX512)
+#elif defined(GLM_FORCE_AVX2)
+# define GLM_ARCH (GLM_ARCH_AVX2)
+#elif defined(GLM_FORCE_AVX)
+# define GLM_ARCH (GLM_ARCH_AVX)
+#elif defined(GLM_FORCE_SSE42)
+# define GLM_ARCH (GLM_ARCH_SSE42)
+#elif defined(GLM_FORCE_SSE41)
+# define GLM_ARCH (GLM_ARCH_SSE41)
+#elif defined(GLM_FORCE_SSSE3)
+# define GLM_ARCH (GLM_ARCH_SSSE3)
+#elif defined(GLM_FORCE_SSE3)
+# define GLM_ARCH (GLM_ARCH_SSE3)
+#elif defined(GLM_FORCE_SSE2)
+# define GLM_ARCH (GLM_ARCH_SSE2)
+#elif (GLM_COMPILER & (GLM_COMPILER_CLANG | GLM_COMPILER_GCC)) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_LINUX))
+// This is Skylake set of instruction set
+# if defined(__AVX512BW__) && defined(__AVX512F__) && defined(__AVX512CD__) && defined(__AVX512VL__) && defined(__AVX512DQ__)
+# define GLM_ARCH (GLM_ARCH_AVX512)
+# elif defined(__AVX2__)
+# define GLM_ARCH (GLM_ARCH_AVX2)
+# elif defined(__AVX__)
+# define GLM_ARCH (GLM_ARCH_AVX)
+# elif defined(__SSE4_2__)
+# define GLM_ARCH (GLM_ARCH_SSE42)
+# elif defined(__SSE4_1__)
+# define GLM_ARCH (GLM_ARCH_SSE41)
+# elif defined(__SSSE3__)
+# define GLM_ARCH (GLM_ARCH_SSSE3)
+# elif defined(__SSE3__)
+# define GLM_ARCH (GLM_ARCH_SSE3)
+# elif defined(__SSE2__)
+# define GLM_ARCH (GLM_ARCH_SSE2)
+# elif defined(__i386__) || defined(__x86_64__)
+# define GLM_ARCH (GLM_ARCH_X86)
+# elif defined(__ARM_NEON)
+# define GLM_ARCH (GLM_ARCH_ARM | GLM_ARCH_NEON)
+# elif defined(__arm__ )
+# define GLM_ARCH (GLM_ARCH_ARM)
+# elif defined(__mips__ )
+# define GLM_ARCH (GLM_ARCH_MIPS)
+# elif defined(__powerpc__ )
+# define GLM_ARCH (GLM_ARCH_PPC)
+# else
+# define GLM_ARCH (GLM_ARCH_PURE)
+# endif
+#elif (GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))
+# if defined(_M_ARM)
+# define GLM_ARCH (GLM_ARCH_ARM)
+# elif defined(__AVX2__)
+# define GLM_ARCH (GLM_ARCH_AVX2)
+# elif defined(__AVX__)
+# define GLM_ARCH (GLM_ARCH_AVX)
+# elif defined(_M_X64)
+# define GLM_ARCH (GLM_ARCH_SSE2)
+# elif defined(_M_IX86_FP)
+# if _M_IX86_FP >= 2
+# define GLM_ARCH (GLM_ARCH_SSE2)
+# else
+# define GLM_ARCH (GLM_ARCH_PURE)
+# endif
+# elif defined(_M_PPC)
+# define GLM_ARCH (GLM_ARCH_PPC)
+# else
+# define GLM_ARCH (GLM_ARCH_PURE)
+# endif
+#else
+# define GLM_ARCH GLM_ARCH_PURE
+#endif
+
+// With MinGW-W64, including intrinsic headers before intrin.h will produce some errors. The problem is
+// that windows.h (and maybe other headers) will silently include intrin.h, which of course causes problems.
+// To fix, we just explicitly include intrin.h here.
+#if defined(__MINGW64__) && (GLM_ARCH != GLM_ARCH_PURE)
+# include <intrin.h>
+#endif
+
+#if GLM_ARCH & GLM_ARCH_AVX2_BIT
+# include <immintrin.h>
+#elif GLM_ARCH & GLM_ARCH_AVX_BIT
+# include <immintrin.h>
+#elif GLM_ARCH & GLM_ARCH_SSE42_BIT
+# include <nmmintrin.h>
+#elif GLM_ARCH & GLM_ARCH_SSE41_BIT
+# include <smmintrin.h>
+#elif GLM_ARCH & GLM_ARCH_SSSE3_BIT
+# include <tmmintrin.h>
+#elif GLM_ARCH & GLM_ARCH_SSE3_BIT
+# include <pmmintrin.h>
+#elif GLM_ARCH & GLM_ARCH_SSE2_BIT
+# include <emmintrin.h>
+#endif//GLM_ARCH
+
+#if GLM_ARCH & GLM_ARCH_SSE2_BIT
+ typedef __m128 glm_vec4;
+ typedef __m128i glm_ivec4;
+ typedef __m128i glm_uvec4;
+#endif
+
+#if GLM_ARCH & GLM_ARCH_AVX_BIT
+ typedef __m256d glm_dvec4;
+#endif
+
+#if GLM_ARCH & GLM_ARCH_AVX2_BIT
+ typedef __m256i glm_i64vec4;
+ typedef __m256i glm_u64vec4;
+#endif
diff --git a/src/third_party/glm/glm/simd/trigonometric.h b/src/third_party/glm/glm/simd/trigonometric.h
new file mode 100644
index 0000000..739b796
--- /dev/null
+++ b/src/third_party/glm/glm/simd/trigonometric.h
@@ -0,0 +1,9 @@
+/// @ref simd
+/// @file glm/simd/trigonometric.h
+
+#pragma once
+
+#if GLM_ARCH & GLM_ARCH_SSE2_BIT
+
+#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT
+
diff --git a/src/third_party/glm/glm/simd/vector_relational.h b/src/third_party/glm/glm/simd/vector_relational.h
new file mode 100644
index 0000000..f7385e9
--- /dev/null
+++ b/src/third_party/glm/glm/simd/vector_relational.h
@@ -0,0 +1,8 @@
+/// @ref simd
+/// @file glm/simd/vector_relational.h
+
+#pragma once
+
+#if GLM_ARCH & GLM_ARCH_SSE2_BIT
+
+#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT
diff --git a/src/third_party/glm/glm/trigonometric.hpp b/src/third_party/glm/glm/trigonometric.hpp
new file mode 100644
index 0000000..a9ce87c
--- /dev/null
+++ b/src/third_party/glm/glm/trigonometric.hpp
@@ -0,0 +1,6 @@
+/// @ref core
+/// @file glm/trigonometric.hpp
+
+#pragma once
+
+#include "detail/func_trigonometric.hpp"
diff --git a/src/third_party/glm/glm/vec2.hpp b/src/third_party/glm/glm/vec2.hpp
new file mode 100644
index 0000000..764c2e0
--- /dev/null
+++ b/src/third_party/glm/glm/vec2.hpp
@@ -0,0 +1,6 @@
+/// @ref core
+/// @file glm/vec2.hpp
+
+#pragma once
+
+#include "detail/type_vec2.hpp"
diff --git a/src/third_party/glm/glm/vec3.hpp b/src/third_party/glm/glm/vec3.hpp
new file mode 100644
index 0000000..eccda31
--- /dev/null
+++ b/src/third_party/glm/glm/vec3.hpp
@@ -0,0 +1,6 @@
+/// @ref core
+/// @file glm/vec3.hpp
+
+#pragma once
+
+#include "detail/type_vec3.hpp"
diff --git a/src/third_party/glm/glm/vec4.hpp b/src/third_party/glm/glm/vec4.hpp
new file mode 100644
index 0000000..ad66f5e
--- /dev/null
+++ b/src/third_party/glm/glm/vec4.hpp
@@ -0,0 +1,6 @@
+/// @ref core
+/// @file glm/vec4.hpp
+
+#pragma once
+
+#include "detail/type_vec4.hpp"
diff --git a/src/third_party/glm/glm/vector_relational.hpp b/src/third_party/glm/glm/vector_relational.hpp
new file mode 100644
index 0000000..d234190
--- /dev/null
+++ b/src/third_party/glm/glm/vector_relational.hpp
@@ -0,0 +1,6 @@
+/// @ref core
+/// @file glm/vector_relational.hpp
+
+#pragma once
+
+#include "detail/func_vector_relational.hpp"
diff --git a/src/third_party/glm/readme.md b/src/third_party/glm/readme.md
new file mode 100644
index 0000000..111abde
--- /dev/null
+++ b/src/third_party/glm/readme.md
@@ -0,0 +1,969 @@
+
+
+[OpenGL Mathematics](http://glm.g-truc.net/) (*GLM*) is a header only C++ mathematics library for graphics software based on the [OpenGL Shading Language (GLSL) specifications](https://www.opengl.org/registry/doc/GLSLangSpec.4.50.diff.pdf).
+
+*GLM* provides classes and functions designed and implemented with the same naming conventions and functionalities than *GLSL* so that anyone who knows *GLSL*, can use *GLM* as well in C++.
+
+This project isn't limited to *GLSL* features. An extension system, based on the *GLSL* extension conventions, provides extended capabilities: matrix transformations, quaternions, data packing, random numbers, noise, etc...
+
+This library works perfectly with *[OpenGL](https://www.opengl.org)* 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 development context that requires a simple and convenient mathematics library.
+
+*GLM* is written in C++98 but can take advantage of C++11 when supported by the compiler. It is a platform independent library with no dependence and it officially supports the following compilers:
+- [Apple Clang 4.0](https://developer.apple.com/library/mac/documentation/CompilerTools/Conceptual/LLVMCompilerOverview/index.html) and higher
+- [GCC](http://gcc.gnu.org/) 4.2 and higher
+- [Intel C++ Composer](https://software.intel.com/en-us/intel-compilers) XE 2013 and higher
+- [LLVM](http://llvm.org/) 3.0 and higher
+- [Visual C++](http://www.visualstudio.com/) 2010 and higher
+- [CUDA](https://developer.nvidia.com/about-cuda) 4.0 and higher (experimental)
+- Any conform C++98 or C++11 compiler
+
+For more information about *GLM*, please have a look at the [manual](http://glm.g-truc.net/0.9.7/glm-0.9.7.pdf) and the [API reference documentation](http://glm.g-truc.net/0.9.7/api/index.html).
+The source code and the documentation are licensed under the [Happy Bunny License (Modified MIT) or the MIT License](./copying.txt).
+
+Thanks for contributing to the project by [submitting issues](https://github.com/g-truc/glm/issues) for bug reports and feature requests. Any feedback is welcome at [glm@g-truc.net](mailto://glm@g-truc.net).
+
+
+```c++
+#include <glm/vec3.hpp> // glm::vec3
+#include <glm/vec4.hpp> // glm::vec4
+#include <glm/mat4x4.hpp> // glm::mat4
+#include <glm/gtc/matrix_transform.hpp> // glm::translate, glm::rotate, glm::scale, glm::perspective
+#include <glm/gtc/constants.hpp> // glm::pi
+
+glm::mat4 camera(float Translate, glm::vec2 const & Rotate)
+{
+ glm::mat4 Projection = glm::perspective(glm::pi<float>() * 0.25f, 4.0f / 3.0f, 0.1f, 100.f);
+ glm::mat4 View = glm::translate(glm::mat4(1.0f), glm::vec3(0.0f, 0.0f, -Translate));
+ View = glm::rotate(View, Rotate.y, glm::vec3(-1.0f, 0.0f, 0.0f));
+ View = glm::rotate(View, Rotate.x, glm::vec3(0.0f, 1.0f, 0.0f));
+ glm::mat4 Model = glm::scale(glm::mat4(1.0f), glm::vec3(0.5f));
+ return Projection * View * Model;
+}
+```
+
+## Project Health
+
+| Service | System | Compiler | Status |
+| ------- | ------ | -------- | ------ |
+| [Drone](https://drone.io/github.com/g-truc/glm) | Linux 64 bits | GCC 4.6.3 | [](https://drone.io/github.com/g-truc/glm/latest) |
+
+## [Lastest release](https://github.com/g-truc/glm/releases/latest)
+
+## Release notes
+
+#### [GLM 0.9.9.0](https://github.com/g-truc/glm/releases/latest) - 2017-XX-XX
+##### Features:
+- Added GTC_color_encoding extension
+
+##### Improvements:
+
+##### Fixes:
+
+##### Deprecation:
+- Removed GLM_GTX_simd_vec4 extension
+- Removed GLM_GTX_simd_mat4 extension
+- Removed GLM_GTX_simd_quat extension
+- Removed GLM_SWIZZLE, use GLM_FORCE_SWIZZLE instead
+- Removed GLM_MESSAGES, use GLM_FORCE_MESSAGES instead
+- Removed GLM_DEPTH_ZERO_TO_ONE, use GLM_FORCE_DEPTH_ZERO_TO_ONE instead
+- Removed GLM_LEFT_HANDED, use GLM_FORCE_LEFT_HANDED instead
+
+#### [GLM 0.9.8.2](https://github.com/g-truc/glm/tree/0.9.8) - 2016-09-25
+##### Fixes:
+
+
+#### [GLM 0.9.8.1](https://github.com/g-truc/glm/releases/tag/0.9.8.1) - 2016-09-25
+##### Improvements:
+- Optimized quaternion log function #554
+
+##### Fixes:
+- Fixed GCC warning filtering, replaced -pedantic by -Wpedantic
+- Fixed SIMD faceforward bug. #549
+- Fixed GCC 4.8 with C++11 compilation option #550
+- Fixed Visual Studio aligned type W4 warning #548
+- Fixed packing/unpacking function fixed for 5_6_5 and 5_5_5_1 #552
+
+#### [GLM 0.9.8.0](https://github.com/g-truc/glm/releases/tag/0.9.8.0) - 2016-09-11
+##### Features:
+- Added right and left handed projection and clip control support #447 #415 #119
+- Added compNormalize and compScale functions to GTX_component_wise
+- Added packF3x9_E1x5 and unpackF3x9_E1x5 to GTC_packing for RGB9E5 #416
+- Added (un)packHalf to GTC_packing
+- Added (un)packUnorm and (un)packSnorm to GTC_packing
+- Added 16bit pack and unpack to GTC_packing
+- Added 8bit pack and unpack to GTC_packing
+- Added missing bvec* && and || operators
+- Added iround and uround to GTC_integer, fast round on positive values
+- Added raw SIMD API
+- Added 'aligned' qualifiers
+- Added GTC_type_aligned with aligned *vec* types
+- Added GTC_functions extension
+- Added quaternion version of isnan and isinf #521
+- Added lowestBitValue to GTX_bit #536
+- Added GLM_FORCE_UNRESTRICTED_GENTYPE allowing non basic genType #543
+
+##### Improvements:
+- Improved SIMD and swizzle operators interactions with GCC and Clang #474
+- Improved GTC_random linearRand documentation
+- Improved GTC_reciprocal documentation
+- Improved GLM_FORCE_EXPLICIT_CTOR coverage #481
+- Improved OpenMP support detection for Clang, GCC, ICC and VC
+- Improved GTX_wrap for SIMD friendliness
+- Added constexpr for *vec*, *mat*, *quat* and *dual_quat* types #493
+- Added NEON instruction set detection
+- Added MIPS CPUs detection
+- Added PowerPC CPUs detection
+- Use Cuda built-in function for abs function implementation with Cuda compiler
+- Factorized GLM_COMPILER_LLVM and GLM_COMPILER_APPLE_CLANG into GLM_COMPILER_CLANG
+- No more warnings for use of long long
+- Added more information to build messages
+
+##### Fixes:
+- Fixed GTX_extended_min_max filename typo #386
+- Fixed intersectRayTriangle to not do any unintentional backface culling
+- Fixed long long warnings when using C++98 on GCC and Clang #482
+- Fixed sign with signed integer function on non-x86 architecture
+- Fixed strict aliasing warnings #473
+- Fixed missing vec1 overload to length2 and distance2 functions #431
+- Fixed GLM test '/fp:fast' and '/Za' command-line options are incompatible
+- Fixed quaterion to mat3 cast function mat3_cast from GTC_quaternion #542
+- Fixed GTX_io for Cuda #547 #546
+
+##### Deprecation:
+- Removed GLM_FORCE_SIZE_FUNC define
+- Deprecated GLM_GTX_simd_vec4 extension
+- Deprecated GLM_GTX_simd_mat4 extension
+- Deprecated GLM_GTX_simd_quat extension
+- Deprecated GLM_SWIZZLE, use GLM_FORCE_SWIZZLE instead
+- Deprecated GLM_MESSAGES, use GLM_FORCE_MESSAGES instead
+
+--------------------------------------------------------------------------------
+#### [GLM 0.9.7.6](https://github.com/g-truc/glm/releases/tag/0.9.7.6) - 2016-07-16
+##### Improvements:
+- Added pkg-config file #509
+- Updated list of compiler versions detected
+- Improved C++ 11 STL detection #523
+
+##### Fixes:
+- Fixed STL for C++11 detection on ICC #510
+- Fixed missing vec1 overload to length2 and distance2 functions #431
+- Fixed long long warnings when using C++98 on GCC and Clang #482
+- Fixed scalar reciprocal functions (GTC_reciprocal) #520
+
+--------------------------------------------------------------------------------
+#### [GLM 0.9.7.5](https://github.com/g-truc/glm/releases/tag/0.9.7.5) - 2016-05-24
+##### Improvements:
+- Added Visual C++ Clang toolset detection
+
+##### Fixes:
+- Fixed uaddCarry warning #497
+- Fixed roundPowerOfTwo and floorPowerOfTwo #503
+- Fixed Visual C++ SIMD instruction set automatic detection in 64 bits
+- Fixed to_string when used with GLM_FORCE_INLINE #506
+- Fixed GLM_FORCE_INLINE with binary vec4 operators
+- Fixed GTX_extended_min_max filename typo #386
+- Fixed intersectRayTriangle to not do any unintentional backface culling
+
+--------------------------------------------------------------------------------
+#### [GLM 0.9.7.4](https://github.com/g-truc/glm/releases/tag/0.9.7.4) - 2016-03-19
+##### Fixes:
+- Fixed asinh and atanh warning with C++98 STL #484
+- Fixed polar coordinates function latitude #485
+- Fixed outerProduct defintions and operator signatures for mat2x4 and vec4 #475
+- Fixed eulerAngles precision error, returns NaN #451
+- Fixed undefined reference errors #489
+- Fixed missing GLM_PLATFORM_CYGWIN declaration #495
+- Fixed various undefined reference errors #490
+
+--------------------------------------------------------------------------------
+#### [GLM 0.9.7.3](https://github.com/g-truc/glm/releases/tag/0.9.7.3) - 2016-02-21
+##### Improvements:
+- Added AVX512 detection
+
+##### Fixes:
+- Fixed CMake policy warning
+- Fixed GCC 6.0 detection #477
+- Fixed Clang build on Windows #479
+- Fixed 64 bits constants warnings on GCC #463
+
+--------------------------------------------------------------------------------
+#### [GLM 0.9.7.2](https://github.com/g-truc/glm/releases/tag/0.9.7.2) - 2016-01-03
+##### Fixes:
+- Fixed GTC_round floorMultiple/ceilMultiple #412
+- Fixed GTC_packing unpackUnorm3x10_1x2 #414
+- Fixed GTC_matrix_inverse affineInverse #192
+- Fixed ICC on Linux build errors #449
+- Fixed ldexp and frexp compilation errors
+- Fixed "Declaration shadows a field" warning #468
+- Fixed 'GLM_COMPILER_VC2005 is not defined' warning #468
+- Fixed various 'X is not defined' warnings #468
+- Fixed missing unary + operator #435
+- Fixed Cygwin build errors when using C++11 #405
+
+--------------------------------------------------------------------------------
+#### [GLM 0.9.7.1](https://github.com/g-truc/glm/releases/tag/0.9.7.1) - 2015-09-07
+##### Improvements:
+- Improved constexpr for constant functions coverage #198
+- Added to_string for quat and dual_quat in GTX_string_cast #375
+- Improved overall execution time of unit tests #396
+
+##### Fixes:
+- Fixed strict alignment warnings #235 #370
+- Fixed link errors on compilers not supported default function #377
+- Fixed compilation warnings in vec4
+- Fixed non-identity quaternions for equal vectors #234
+- Fixed excessive GTX_fast_trigonometry execution time #396
+- Fixed Visual Studio 2015 'hides class member' warnings #394
+- Fixed builtin bitscan never being used #392
+- Removed unused func_noise.* files #398
+
+--------------------------------------------------------------------------------
+#### [GLM 0.9.7.0](https://github.com/g-truc/glm/releases/tag/0.9.7.0) - 2015-08-02
+##### Features:
+- Added GTC_color_space: convertLinearToSRGB and convertSRGBToLinear functions
+- Added 'fmod' overload to GTX_common with tests #308
+- Left handed perspective and lookAt functions #314
+- Added functions eulerAngleXYZ and extractEulerAngleXYZ #311
+- Added <glm/gtx/hash.hpp> to perform std::hash on GLM types #320 #367
+- Added <glm/gtx/wrap.hpp> for texcoord wrapping
+- Added static components and precision members to all vector and quat types #350
+- Added .gitignore #349
+- Added support of defaulted functions to GLM types, to use them in unions #366
+
+##### Improvements:
+- Changed usage of __has_include to support Intel compiler #307
+- Specialized integer implementation of YCoCg-R #310
+- Don't show status message in 'FindGLM' if 'QUIET' option is set. #317
+- Added master branch continuous integration service on Linux 64 #332
+- Clarified manual regarding angle unit in GLM, added FAQ 11 #326
+- Updated list of compiler versions
+
+##### Fixes:
+- Fixed default precision for quat and dual_quat type #312
+- Fixed (u)int64 MSB/LSB handling on BE archs #306
+- Fixed multi-line comment warning in g++. #315
+- Fixed specifier removal by 'std::make_pair<>' #333
+- Fixed perspective fovy argument documentation #327
+- Removed -m64 causing build issues on Linux 32 #331
+- Fixed isfinite with C++98 compilers #343
+- Fixed Intel compiler build error on Linux #354
+- Fixed use of libstdc++ with Clang #351
+- Fixed quaternion pow #346
+- Fixed decompose warnings #373
+- Fixed matrix conversions #371
+
+##### Deprecation:
+- Removed integer specification for 'mod' in GTC_integer #308
+- Removed GTX_multiple, replaced by GTC_round
+
+--------------------------------------------------------------------------------
+#### [GLM 0.9.6.3](https://github.com/g-truc/glm/releases/tag/0.9.6.3) - 2015-02-15
+- Fixed Android doesn't have C++ 11 STL #284
+
+--------------------------------------------------------------------------------
+#### [GLM 0.9.6.2](https://github.com/g-truc/glm/releases/tag/0.9.6.2) - 2015-02-15
+##### Features:
+- Added display of GLM version with other GLM_MESSAGES
+- Added ARM instruction set detection
+
+--------------------------------------------------------------------------------
+##### Improvements:
+- Removed assert for perspective with zFar < zNear #298
+- Added Visual Studio natvis support for vec1, quat and dualqual types
+- Cleaned up C++11 feature detections
+- Clarify GLM licensing
+
+##### Fixes:
+- Fixed faceforward build #289
+- Fixed conflict with Xlib #define True 1 #293
+- Fixed decompose function VS2010 templating issues #294
+- Fixed mat4x3 = mat2x3 * mat4x2 operator #297
+- Fixed warnings in F2x11_1x10 packing function in GTC_packing #295
+- Fixed Visual Studio natvis support for vec4 #288
+- Fixed GTC_packing *pack*norm*x* build and added tests #292
+- Disabled GTX_scalar_multiplication for GCC, failing to build tests #242
+- Fixed Visual C++ 2015 constexpr errors: Disabled only partial support
+- Fixed functions not inlined with Clang #302
+- Fixed memory corruption (undefined behaviour) #303
+
+--------------------------------------------------------------------------------
+#### [GLM 0.9.6.1](https://github.com/g-truc/glm/releases/tag/0.9.6.1) - 2014-12-10
+##### Features:
+- Added GLM_LANG_CXX14_FLAG and GLM_LANG_CXX1Z_FLAG language feature flags
+- Added C++14 detection
+
+##### Improvements:
+- Clean up GLM_MESSAGES compilation log to report only detected capabilities
+
+##### Fixes:
+- Fixed scalar uaddCarry build error with Cuda #276
+- Fixed C++11 explicit conversion operators detection #282
+- Fixed missing explicit conversion when using integer log2 with *vec1 types
+- Fixed 64 bits integer GTX_string_cast to_string on VC 32 bit compiler
+- Fixed Android build issue, STL C++11 is not supported by the NDK #284
+- Fixed unsupported _BitScanForward64 and _BitScanReverse64 in VC10
+- Fixed Visual C++ 32 bit build #283
+- Fixed GLM_FORCE_SIZE_FUNC pragma message
+- Fixed C++98 only build
+- Fixed conflict between GTX_compatibility and GTC_quaternion #286
+- Fixed C++ language restriction using GLM_FORCE_CXX**
+
+--------------------------------------------------------------------------------
+#### [GLM 0.9.6.0](https://github.com/g-truc/glm/releases/tag/0.9.6.0) - 2014-11-30
+##### Features:
+- Exposed template vector and matrix types in 'glm' namespace #239, #244
+- Added GTX_scalar_multiplication for C++ 11 compiler only #242
+- Added GTX_range for C++ 11 compiler only #240
+- Added closestPointOnLine function for tvec2 to GTX_closest_point #238
+- Added GTC_vec1 extension, *vec1 support to *vec* types
+- Updated GTX_associated_min_max with vec1 support
+- Added support of precision and integers to linearRand #230
+- Added Integer types support to GTX_string_cast #249
+- Added vec3 slerp #237
+- Added GTX_common with isdenomal #223
+- Added GLM_FORCE_SIZE_FUNC to replace .length() by .size() #245
+- Added GLM_FORCE_NO_CTOR_INIT
+- Added 'uninitialize' to explicitly not initialize a GLM type
+- Added GTC_bitfield extension, promoted GTX_bit
+- Added GTC_integer extension, promoted GTX_bit and GTX_integer
+- Added GTC_round extension, promoted GTX_bit
+- Added GLM_FORCE_EXPLICIT_CTOR to require explicit type conversions #269
+- Added GTX_type_aligned for aligned vector, matrix and quaternion types
+
+##### Improvements:
+- Rely on C++11 to implement isinf and isnan
+- Removed GLM_FORCE_CUDA, Cuda is implicitly detected
+- Separated Apple Clang and LLVM compiler detection
+- Used pragma once
+- Undetected C++ compiler automatically compile with GLM_FORCE_CXX98 and
+ GLM_FORCE_PURE
+- Added not function (from GLSL specification) on VC12
+- Optimized bitfieldReverse and bitCount functions
+- Optimized findLSB and findMSB functions.
+- Optimized matrix-vector multiple performance with Cuda #257, #258
+- Reduced integer type redifinitions #233
+- Rewrited of GTX_fast_trigonometry #264 #265
+- Made types trivially copyable #263
+- Removed <iostream> in GLM tests
+- Used std features within GLM without redeclaring
+- Optimized cot function #272
+- Optimized sign function #272
+- Added explicit cast from quat to mat3 and mat4 #275
+
+##### Fixes:
+- Fixed std::nextafter not supported with C++11 on Android #217
+- Fixed missing value_type for dual quaternion
+- Fixed return type of dual quaternion length
+- Fixed infinite loop in isfinite function with GCC #221
+- Fixed Visual Studio 14 compiler warnings
+- Fixed implicit conversion from another tvec2 type to another tvec2 #241
+- Fixed lack of consistency of quat and dualquat constructors
+- Fixed uaddCarray #253
+- Fixed float comparison warnings #270
+
+##### Deprecation:
+- Removed degrees for function parameters
+- Removed GLM_FORCE_RADIANS, active by default
+- Removed VC 2005 / 8 and 2008 / 9 support
+- Removed GCC 3.4 to 4.3 support
+- Removed LLVM GCC support
+- Removed LLVM 2.6 to 3.1 support
+- Removed CUDA 3.0 to 3.2 support
+
+--------------------------------------------------------------------------------
+#### [GLM 0.9.5.4 - 2014-06-21](https://github.com/g-truc/glm/releases/tag/0.9.5.4)
+- Fixed non-utf8 character #196
+- Added FindGLM install for CMake #189
+- Fixed GTX_color_space - saturation #195
+- Fixed glm::isinf and glm::isnan for with Android NDK 9d #191
+- Fixed builtin GLM_ARCH_SSE4 #204
+- Optimized Quaternion vector rotation #205
+- Fixed missing doxygen @endcond tag #211
+- Fixed instruction set detection with Clang #158
+- Fixed orientate3 function #207
+- Fixed lerp when cosTheta is close to 1 in quaternion slerp #210
+- Added GTX_io for io with <iostream> #144
+- Fixed fastDistance ambiguity #215
+- Fixed tweakedInfinitePerspective #208 and added user-defined epsilon to
+ tweakedInfinitePerspective
+- Fixed std::copy and std::vector with GLM types #214
+- Fixed strict aliasing issues #212, #152
+- Fixed std::nextafter not supported with C++11 on Android #213
+- Fixed corner cases in exp and log functions for quaternions #199
+
+--------------------------------------------------------------------------------
+#### GLM 0.9.5.3 - 2014-04-02
+- Added instruction set auto detection with Visual C++ using _M_IX86_FP - /arch
+ compiler argument
+- Fixed GTX_raw_data code dependency
+- Fixed GCC instruction set detection
+- Added GLM_GTX_matrix_transform_2d extension (#178, #176)
+- Fixed CUDA issues (#169, #168, #183, #182)
+- Added support for all extensions but GTX_string_cast to CUDA
+- Fixed strict aliasing warnings in GCC 4.8.1 / Android NDK 9c (#152)
+- Fixed missing bitfieldInterleave definisions
+- Fixed usubBorrow (#171)
+- Fixed eulerAngle*** not consistent for right-handed coordinate system (#173)
+- Added full tests for eulerAngle*** functions (#173)
+- Added workaround for a CUDA compiler bug (#186, #185)
+
+--------------------------------------------------------------------------------
+#### GLM 0.9.5.2 - 2014-02-08
+- Fixed initializer list ambiguity (#159, #160)
+- Fixed warnings with the Android NDK 9c
+- Fixed non power of two matrix products
+- Fixed mix function link error
+- Fixed SSE code included in GLM tests on "pure" platforms
+- Fixed undefined reference to fastInverseSqrt (#161)
+- Fixed GLM_FORCE_RADIANS with <glm/ext.hpp> build error (#165)
+- Fix dot product clamp range for vector angle functions. (#163)
+- Tentative fix for strict aliasing warning in GCC 4.8.1 / Android NDK 9c (#152)
+- Fixed GLM_GTC_constants description brief (#162)
+
+--------------------------------------------------------------------------------
+#### GLM 0.9.5.1 - 2014-01-11
+- Fixed angle and orientedAngle that sometimes return NaN values (#145)
+- Deprecated degrees for function parameters and display a message
+- Added possible static_cast conversion of GLM types (#72)
+- Fixed error 'inverse' is not a member of 'glm' from glm::unProject (#146)
+- Fixed mismatch between some declarations and definitions
+- Fixed inverse link error when using namespace glm; (#147)
+- Optimized matrix inverse and division code (#149)
+- Added intersectRayPlane function (#153)
+- Fixed outerProduct return type (#155)
+
+--------------------------------------------------------------------------------
+#### GLM 0.9.5.0 - 2013-12-25
+- Added forward declarations (glm/fwd.hpp) for faster compilations
+- Added per feature headers
+- Minimized GLM internal dependencies
+- Improved Intel Compiler detection
+- Added bitfieldInterleave and _mm_bit_interleave_si128 functions
+- Added GTX_scalar_relational
+- Added GTX_dual_quaternion
+- Added rotation function to GTX_quaternion (#22)
+- Added precision variation of each type
+- Added quaternion comparison functions
+- Fixed GTX_multiple for negative value
+- Removed GTX_ocl_type extension
+- Fixed post increment and decrement operators
+- Fixed perspective with zNear == 0 (#71)
+- Removed l-value swizzle operators
+- Cleaned up compiler detection code for unsupported compilers
+- Replaced C cast by C++ casts
+- Fixed .length() that should return a int and not a size_t
+- Added GLM_FORCE_SIZE_T_LENGTH and glm::length_t
+- Removed unnecessary conversions
+- Optimized packing and unpacking functions
+- Removed the normalization of the up argument of lookAt function (#114)
+- Added low precision specializations of inversesqrt
+- Fixed ldexp and frexp implementations
+- Increased assert coverage
+- Increased static_assert coverage
+- Replaced GLM traits by STL traits when possible
+- Allowed including individual core feature
+- Increased unit tests completness
+- Added creating of a quaternion from two vectors
+- Added C++11 initializer lists
+- Fixed umulExtended and imulExtended implementations for vector types (#76)
+- Fixed CUDA coverage for GTC extensions
+- Added GTX_io extension
+- Improved GLM messages enabled when defining GLM_MESSAGES
+- Hidden matrix _inverse function implementation detail into private section
+
+--------------------------------------------------------------------------------
+#### [GLM 0.9.4.6](https://github.com/g-truc/glm/releases/tag/0.9.4.6) - 2013-09-20
+- Fixed detection to select the last known compiler if newer version #106
+- Fixed is_int and is_uint code duplication with GCC and C++11 #107
+- Fixed test suite build while using Clang in C++11 mode
+- Added c++1y mode support in CMake test suite
+- Removed ms extension mode to CMake when no using Visual C++
+- Added pedantic mode to CMake test suite for Clang and GCC
+- Added use of GCC frontend on Unix for ICC and Visual C++ fronted on Windows
+ for ICC
+- Added compilation errors for unsupported compiler versions
+- Fixed glm::orientation with GLM_FORCE_RADIANS defined #112
+- Fixed const ref issue on assignment operator taking a scalar parameter #116
+- Fixed glm::eulerAngleY implementation #117
+
+--------------------------------------------------------------------------------
+#### GLM 0.9.4.5 - 2013-08-12
+- Fixed CUDA support
+- Fixed inclusion of intrinsics in "pure" mode #92
+- Fixed language detection on GCC when the C++0x mode isn't enabled #95
+- Fixed issue #97: register is deprecated in C++11
+- Fixed issue #96: CUDA issues
+- Added Windows CE detection #92
+- Added missing value_ptr for quaternions #99
+
+--------------------------------------------------------------------------------
+#### GLM 0.9.4.4 - 2013-05-29
+- Fixed slerp when costheta is close to 1 #65
+- Fixed mat4x2 value_type constructor #70
+- Fixed glm.natvis for Visual C++ 12 #82
+- Added assert in inversesqrt to detect division by zero #61
+- Fixed missing swizzle operators #86
+- Fixed CUDA warnings #86
+- Fixed GLM natvis for VC11 #82
+- Fixed GLM_GTX_multiple with negative values #79
+- Fixed glm::perspective when zNear is zero #71
+
+--------------------------------------------------------------------------------
+#### GLM 0.9.4.3 - 2013-03-20
+- Detected qualifier for Clang
+- Fixed C++11 mode for GCC, couldn't be enabled without MS extensions
+- Fixed squad, intermediate and exp quaternion functions
+- Fixed GTX_polar_coordinates euclidean function, takes a vec2 instead of a vec3
+- Clarify the license applying on the manual
+- Added a docx copy of the manual
+- Fixed GLM_GTX_matrix_interpolation
+- Fixed isnan and isinf on Android with Clang
+- Autodetected C++ version using __cplusplus value
+- Fixed mix for bool and bvec* third parameter
+
+--------------------------------------------------------------------------------
+#### GLM 0.9.4.2 - 2013-02-14
+- Fixed compAdd from GTX_component_wise
+- Fixed SIMD support for Intel compiler on Windows
+- Fixed isnan and isinf for CUDA compiler
+- Fixed GLM_FORCE_RADIANS on glm::perspective
+- Fixed GCC warnings
+- Fixed packDouble2x32 on Xcode
+- Fixed mix for vec4 SSE implementation
+- Fixed 0x2013 dash character in comments that cause issue in Windows
+ Japanese mode
+- Fixed documentation warnings
+- Fixed CUDA warnings
+
+--------------------------------------------------------------------------------
+#### GLM 0.9.4.1 - 2012-12-22
+- Improved half support: -0.0 case and implicit conversions
+- Fixed Intel Composer Compiler support on Linux
+- Fixed interaction between quaternion and euler angles
+- Fixed GTC_constants build
+- Fixed GTX_multiple
+- Fixed quat slerp using mix function when cosTheta close to 1
+- Improved fvec4SIMD and fmat4x4SIMD implementations
+- Fixed assert messages
+- Added slerp and lerp quaternion functions and tests
+
+--------------------------------------------------------------------------------
+#### GLM 0.9.4.0 - 2012-11-18
+- Added Intel Composer Compiler support
+- Promoted GTC_espilon extension
+- Promoted GTC_ulp extension
+- Removed GLM website from the source repository
+- Added GLM_FORCE_RADIANS so that all functions takes radians for arguments
+- Fixed detection of Clang and LLVM GCC on MacOS X
+- Added debugger visualizers for Visual C++ 2012
+
+--------------------------------------------------------------------------------
+#### [GLM 0.9.3.4](https://github.com/g-truc/glm/releases/tag/0.9.3.4) - 2012-06-30
+- Added SSE4 and AVX2 detection.
+- Removed VIRTREV_xstream and the incompatibility generated with GCC
+- Fixed C++11 compiler option for GCC
+- Removed MS language extension option for GCC (not fonctionnal)
+- Fixed bitfieldExtract for vector types
+- Fixed warnings
+- Fixed SSE includes
+
+--------------------------------------------------------------------------------
+#### GLM 0.9.3.3 - 2012-05-10
+- Fixed isinf and isnan
+- Improved compatibility with Intel compiler
+- Added CMake test build options: SIMD, C++11, fast math and MS land ext
+- Fixed SIMD mat4 test on GCC
+- Fixed perspectiveFov implementation
+- Fixed matrixCompMult for none-square matrices
+- Fixed namespace issue on stream operators
+- Fixed various warnings
+- Added VC11 support
+
+--------------------------------------------------------------------------------
+#### GLM 0.9.3.2 - 2012-03-15
+- Fixed doxygen documentation
+- Fixed Clang version detection
+- Fixed simd mat4 /= operator
+
+--------------------------------------------------------------------------------
+#### GLM 0.9.3.1 - 2012-01-25
+- Fixed platform detection
+- Fixed warnings
+- Removed detail code from Doxygen doc
+
+--------------------------------------------------------------------------------
+#### GLM 0.9.3.0 - 2012-01-09
+- Added CPP Check project
+- Fixed conflict with Windows headers
+- Fixed isinf implementation
+- Fixed Boost conflict
+- Fixed warnings
+
+--------------------------------------------------------------------------------
+#### GLM 0.9.3.B - 2011-12-12
+- Added support for Chrone Native Client
+- Added epsilon constant
+- Removed value_size function from vector types
+- Fixed roundEven on GCC
+- Improved API documentation
+- Fixed modf implementation
+- Fixed step function accuracy
+- Fixed outerProduct
+
+--------------------------------------------------------------------------------
+#### GLM 0.9.3.A - 2011-11-11
+- Improved doxygen documentation
+- Added new swizzle operators for C++11 compilers
+- Added new swizzle operators declared as functions
+- Added GLSL 4.20 length for vector and matrix types
+- Promoted GLM_GTC_noise extension: simplex, perlin, periodic noise functions
+- Promoted GLM_GTC_random extension: linear, gaussian and various random number
+generation distribution
+- Added GLM_GTX_constants: provides useful constants
+- Added extension versioning
+- Removed many unused namespaces
+- Fixed half based type contructors
+- Added GLSL core noise functions
+
+--------------------------------------------------------------------------------
+#### [GLM 0.9.2.7](https://github.com/g-truc/glm/releases/tag/0.9.2.7) - 2011-10-24
+- Added more swizzling constructors
+- Added missing none-squared matrix products
+
+--------------------------------------------------------------------------------
+#### [GLM 0.9.2.6](https://github.com/g-truc/glm/releases/tag/0.9.2.6) - 2011-10-01
+- Fixed half based type build on old GCC
+- Fixed /W4 warnings on Visual C++
+- Fixed some missing l-value swizzle operators
+
+--------------------------------------------------------------------------------
+#### GLM 0.9.2.5 - 2011-09-20
+- Fixed floatBitToXint functions
+- Fixed pack and unpack functions
+- Fixed round functions
+
+--------------------------------------------------------------------------------
+#### GLM 0.9.2.4 - 2011-09-03
+- Fixed extensions bugs
+
+--------------------------------------------------------------------------------
+#### GLM 0.9.2.3 - 2011-06-08
+- Fixed build issues
+
+--------------------------------------------------------------------------------
+#### GLM 0.9.2.2 - 2011-06-02
+- Expend matrix constructors flexibility
+- Improved quaternion implementation
+- Fixed many warnings across platforms and compilers
+
+--------------------------------------------------------------------------------
+#### GLM 0.9.2.1 - 2011-05-24
+- Automatically detect CUDA support
+- Improved compiler detection
+- Fixed errors and warnings in VC with C++ extensions disabled
+- Fixed and tested GLM_GTX_vector_angle
+- Fixed and tested GLM_GTX_rotate_vector
+
+--------------------------------------------------------------------------------
+#### GLM 0.9.2.0 - 2011-05-09
+- Added CUDA support
+- Added CTest test suite
+- Added GLM_GTX_ulp extension
+- Added GLM_GTX_noise extension
+- Added GLM_GTX_matrix_interpolation extension
+- Updated quaternion slerp interpolation
+
+--------------------------------------------------------------------------------
+#### [GLM 0.9.1.3](https://github.com/g-truc/glm/releases/tag/0.9.1.3) - 2011-05-07
+- Fixed bugs
+
+--------------------------------------------------------------------------------
+#### GLM 0.9.1.2 - 2011-04-15
+- Fixed bugs
+
+--------------------------------------------------------------------------------
+#### GLM 0.9.1.1 - 2011-03-17
+- Fixed bugs
+
+--------------------------------------------------------------------------------
+#### GLM 0.9.1.0 - 2011-03-03
+- Fixed bugs
+
+--------------------------------------------------------------------------------
+#### GLM 0.9.1.B - 2011-02-13
+- Updated API documentation
+- Improved SIMD implementation
+- Fixed Linux build
+
+--------------------------------------------------------------------------------
+#### [GLM 0.9.0.8](https://github.com/g-truc/glm/releases/tag/0.9.0.8) - 2011-02-13
+- Added quaternion product operator.
+- Clarify that GLM is a header only library.
+
+--------------------------------------------------------------------------------
+#### GLM 0.9.1.A - 2011-01-31
+- Added SIMD support
+- Added new swizzle functions
+- Improved static assert error message with C++0x static_assert
+- New setup system
+- Reduced branching
+- Fixed trunc implementation
+
+--------------------------------------------------------------------------------
+#### [GLM 0.9.0.7](https://github.com/g-truc/glm/releases/tag/0.9.0.7) - 2011-01-30
+- Added GLSL 4.10 packing functions
+- Added == and != operators for every types.
+
+--------------------------------------------------------------------------------
+#### GLM 0.9.0.6 - 2010-12-21
+- Many matrices bugs fixed
+
+--------------------------------------------------------------------------------
+#### GLM 0.9.0.5 - 2010-11-01
+- Improved Clang support
+- Fixed bugs
+
+--------------------------------------------------------------------------------
+#### GLM 0.9.0.4 - 2010-10-04
+- Added autoexp for GLM
+- Fixed bugs
+
+--------------------------------------------------------------------------------
+#### GLM 0.9.0.3 - 2010-08-26
+- Fixed non-squared matrix operators
+
+--------------------------------------------------------------------------------
+#### GLM 0.9.0.2 - 2010-07-08
+- Added GLM_GTX_int_10_10_10_2
+- Fixed bugs
+
+--------------------------------------------------------------------------------
+#### GLM 0.9.0.1 - 2010-06-21
+- Fixed extensions errors
+
+--------------------------------------------------------------------------------
+#### GLM 0.9.0.0 - 2010-05-25
+- Objective-C support
+- Fixed warnings
+- Updated documentation
+
+--------------------------------------------------------------------------------
+#### GLM 0.9.B.2 - 2010-04-30
+- Git transition
+- Removed experimental code from releases
+- Fixed bugs
+
+--------------------------------------------------------------------------------
+#### GLM 0.9.B.1 - 2010-04-03
+- Based on GLSL 4.00 specification
+- Added the new core functions
+- Added some implicit conversion support
+
+--------------------------------------------------------------------------------
+#### GLM 0.9.A.2 - 2010-02-20
+- Improved some possible errors messages
+- Improved declarations and definitions match
+
+--------------------------------------------------------------------------------
+#### GLM 0.9.A.1 - 2010-02-09
+- Removed deprecated features
+- Internal redesign
+
+--------------------------------------------------------------------------------
+#### GLM 0.8.4.4 final - 2010-01-25
+- Fixed warnings
+
+--------------------------------------------------------------------------------
+#### GLM 0.8.4.3 final - 2009-11-16
+- Fixed Half float arithmetic
+- Fixed setup defines
+
+--------------------------------------------------------------------------------
+#### GLM 0.8.4.2 final - 2009-10-19
+- Fixed Half float adds
+
+--------------------------------------------------------------------------------
+#### GLM 0.8.4.1 final - 2009-10-05
+- Updated documentation
+- Fixed MacOS X build
+
+--------------------------------------------------------------------------------
+#### GLM 0.8.4.0 final - 2009-09-16
+- Added GCC 4.4 and VC2010 support
+- Added matrix optimizations
+
+--------------------------------------------------------------------------------
+#### GLM 0.8.3.5 final - 2009-08-11
+- Fixed bugs
+
+--------------------------------------------------------------------------------
+#### GLM 0.8.3.4 final - 2009-08-10
+- Updated GLM according GLSL 1.5 spec
+- Fixed bugs
+
+--------------------------------------------------------------------------------
+#### GLM 0.8.3.3 final - 2009-06-25
+- Fixed bugs
+
+--------------------------------------------------------------------------------
+#### GLM 0.8.3.2 final - 2009-06-04
+- Added GLM_GTC_quaternion
+- Added GLM_GTC_type_precision
+
+--------------------------------------------------------------------------------
+#### GLM 0.8.3.1 final - 2009-05-21
+- Fixed old extension system.
+
+--------------------------------------------------------------------------------
+#### GLM 0.8.3.0 final - 2009-05-06
+- Added stable extensions.
+- Added new extension system.
+
+--------------------------------------------------------------------------------
+#### GLM 0.8.2.3 final - 2009-04-01
+- Fixed bugs.
+
+--------------------------------------------------------------------------------
+#### GLM 0.8.2.2 final - 2009-02-24
+- Fixed bugs.
+
+--------------------------------------------------------------------------------
+#### GLM 0.8.2.1 final - 2009-02-13
+- Fixed bugs.
+
+--------------------------------------------------------------------------------
+#### GLM 0.8.2 final - 2009-01-21
+- Fixed bugs.
+
+--------------------------------------------------------------------------------
+#### GLM 0.8.1 final - 2008-10-30
+- Fixed bugs.
+
+--------------------------------------------------------------------------------
+#### GLM 0.8.0 final - 2008-10-23
+- New method to use extension.
+
+--------------------------------------------------------------------------------
+#### GLM 0.8.0 beta3 - 2008-10-10
+- Added CMake support for GLM tests.
+
+--------------------------------------------------------------------------------
+#### GLM 0.8.0 beta2 - 2008-10-04
+- Improved half scalars and vectors support.
+
+--------------------------------------------------------------------------------
+#### GLM 0.8.0 beta1 - 2008-09-26
+- Improved GLSL conformance
+- Added GLSL 1.30 support
+- Improved API documentation
+
+--------------------------------------------------------------------------------
+#### GLM 0.7.6 final - 2008-08-08
+- Improved C++ standard comformance
+- Added Static assert for types checking
+
+--------------------------------------------------------------------------------
+#### GLM 0.7.5 final - 2008-07-05
+- Added build message system with Visual Studio
+- Pedantic build with GCC
+
+--------------------------------------------------------------------------------
+#### GLM 0.7.4 final - 2008-06-01
+- Added external dependencies system.
+
+--------------------------------------------------------------------------------
+#### GLM 0.7.3 final - 2008-05-24
+- Fixed bugs
+- Added new extension group
+
+--------------------------------------------------------------------------------
+#### GLM 0.7.2 final - 2008-04-27
+- Updated documentation
+- Added preprocessor options
+
+--------------------------------------------------------------------------------
+#### GLM 0.7.1 final - 2008-03-24
+- Disabled half on GCC
+- Fixed extensions
+
+--------------------------------------------------------------------------------
+#### GLM 0.7.0 final - 2008-03-22
+- Changed to MIT license
+- Added new documentation
+
+--------------------------------------------------------------------------------
+#### GLM 0.6.4 - 2007-12-10
+- Fixed swizzle operators
+
+--------------------------------------------------------------------------------
+#### GLM 0.6.3 - 2007-11-05
+- Fixed type data accesses
+- Fixed 3DSMax sdk conflict
+
+--------------------------------------------------------------------------------
+#### GLM 0.6.2 - 2007-10-08
+- Fixed extension
+
+--------------------------------------------------------------------------------
+#### GLM 0.6.1 - 2007-10-07
+- Fixed a namespace error
+- Added extensions
+
+--------------------------------------------------------------------------------
+#### GLM 0.6.0 : 2007-09-16
+- Added new extension namespace mecanium
+- Added Automatic compiler detection
+
+--------------------------------------------------------------------------------
+#### GLM 0.5.1 - 2007-02-19
+- Fixed swizzle operators
+
+--------------------------------------------------------------------------------
+#### GLM 0.5.0 - 2007-01-06
+- Upgrated to GLSL 1.2
+- Added swizzle operators
+- Added setup settings
+
+--------------------------------------------------------------------------------
+#### GLM 0.4.1 - 2006-05-22
+- Added OpenGL examples
+
+--------------------------------------------------------------------------------
+#### GLM 0.4.0 - 2006-05-17
+- Added missing operators to vec* and mat*
+- Added first GLSL 1.2 features
+- Fixed windows.h before glm.h when windows.h required
+
+--------------------------------------------------------------------------------
+#### GLM 0.3.2 - 2006-04-21
+- Fixed texcoord components access.
+- Fixed mat4 and imat4 division operators.
+
+--------------------------------------------------------------------------------
+#### GLM 0.3.1 - 2006-03-28
+- Added GCC 4.0 support under MacOS X.
+- Added GCC 4.0 and 4.1 support under Linux.
+- Added code optimisations.
+
+--------------------------------------------------------------------------------
+#### GLM 0.3 - 2006-02-19
+- Improved GLSL type conversion and construction compliance.
+- Added experimental extensions.
+- Added Doxygen Documentation.
+- Added code optimisations.
+- Fixed bugs.
+
+--------------------------------------------------------------------------------
+#### GLM 0.2 - 2005-05-05
+- Improve adaptative from GLSL.
+- Add experimental extensions based on OpenGL extension process.
+- Fixe bugs.
+
+--------------------------------------------------------------------------------
+#### GLM 0.1 - 2005-02-21
+- Add vec2, vec3, vec4 GLSL types
+- Add ivec2, ivec3, ivec4 GLSL types
+- Add bvec2, bvec3, bvec4 GLSL types
+- Add mat2, mat3, mat4 GLSL types
+- Add almost all functions
+
diff --git a/src/third_party/glm/test/CMakeLists.txt b/src/third_party/glm/test/CMakeLists.txt
new file mode 100644
index 0000000..2d216c8
--- /dev/null
+++ b/src/third_party/glm/test/CMakeLists.txt
@@ -0,0 +1,17 @@
+function(glmCreateTestGTC NAME)
+ if(GLM_TEST_ENABLE)
+ set(SAMPLE_NAME test-${NAME})
+ add_executable(${SAMPLE_NAME} ${NAME}.cpp)
+
+ add_test(
+ NAME ${SAMPLE_NAME}
+ COMMAND $<TARGET_FILE:${SAMPLE_NAME}> )
+ endif(GLM_TEST_ENABLE)
+endfunction()
+
+add_subdirectory(bug)
+add_subdirectory(core)
+add_subdirectory(gtc)
+add_subdirectory(gtx)
+
+
diff --git a/src/third_party/glm/test/bug/CMakeLists.txt b/src/third_party/glm/test/bug/CMakeLists.txt
new file mode 100644
index 0000000..26e8569
--- /dev/null
+++ b/src/third_party/glm/test/bug/CMakeLists.txt
@@ -0,0 +1 @@
+glmCreateTestGTC(bug_ms_vec_static)
diff --git a/src/third_party/glm/test/bug/bug_ms_vec_static.cpp b/src/third_party/glm/test/bug/bug_ms_vec_static.cpp
new file mode 100644
index 0000000..812d97b
--- /dev/null
+++ b/src/third_party/glm/test/bug/bug_ms_vec_static.cpp
@@ -0,0 +1,14 @@
+#define GLM_FORCE_SWIZZLE
+#include <glm/vec2.hpp>
+
+struct Foo
+{
+ static glm::vec2 Bar;
+};
+
+glm::vec2 Foo::Bar = glm::vec2(1.f, 1.f);
+
+int main()
+{
+ return 0;
+}
diff --git a/src/third_party/glm/test/core/CMakeLists.txt b/src/third_party/glm/test/core/CMakeLists.txt
new file mode 100644
index 0000000..71ab6e2
--- /dev/null
+++ b/src/third_party/glm/test/core/CMakeLists.txt
@@ -0,0 +1,39 @@
+glmCreateTestGTC(core_force_pure)
+glmCreateTestGTC(core_type_aligned)
+glmCreateTestGTC(core_type_cast)
+glmCreateTestGTC(core_type_ctor)
+glmCreateTestGTC(core_type_float)
+glmCreateTestGTC(core_type_int)
+glmCreateTestGTC(core_type_length)
+glmCreateTestGTC(core_type_mat2x2)
+glmCreateTestGTC(core_type_mat2x3)
+glmCreateTestGTC(core_type_mat2x4)
+glmCreateTestGTC(core_type_mat3x2)
+glmCreateTestGTC(core_type_mat3x3)
+glmCreateTestGTC(core_type_mat3x4)
+glmCreateTestGTC(core_type_mat4x2)
+glmCreateTestGTC(core_type_mat4x3)
+glmCreateTestGTC(core_type_mat4x4)
+glmCreateTestGTC(core_type_vec1)
+glmCreateTestGTC(core_type_vec2)
+glmCreateTestGTC(core_type_vec3)
+glmCreateTestGTC(core_type_vec4)
+glmCreateTestGTC(core_func_common)
+glmCreateTestGTC(core_func_exponential)
+glmCreateTestGTC(core_func_geometric)
+glmCreateTestGTC(core_func_integer)
+glmCreateTestGTC(core_func_integer_bit_count)
+glmCreateTestGTC(core_func_integer_find_lsb)
+glmCreateTestGTC(core_func_integer_find_msb)
+glmCreateTestGTC(core_func_matrix)
+glmCreateTestGTC(core_func_noise)
+glmCreateTestGTC(core_func_packing)
+glmCreateTestGTC(core_func_trigonometric)
+glmCreateTestGTC(core_func_vector_relational)
+glmCreateTestGTC(core_func_swizzle)
+glmCreateTestGTC(core_setup_force_cxx98)
+glmCreateTestGTC(core_setup_message)
+glmCreateTestGTC(core_setup_precision)
+
+
+
diff --git a/src/third_party/glm/test/core/core_force_pure.cpp b/src/third_party/glm/test/core/core_force_pure.cpp
new file mode 100644
index 0000000..68f8211
--- /dev/null
+++ b/src/third_party/glm/test/core/core_force_pure.cpp
@@ -0,0 +1,421 @@
+#define GLM_FORCE_PURE
+#define GLM_FORCE_ALIGNED
+#define GLM_FORCE_SWIZZLE
+#include <glm/vector_relational.hpp>
+#include <glm/vec2.hpp>
+#include <glm/vec3.hpp>
+#include <glm/vec4.hpp>
+#include <cstdio>
+#include <ctime>
+#include <vector>
+
+int test_vec4_ctor()
+{
+ int Error = 0;
+
+ {
+ glm::ivec4 A(1, 2, 3, 4);
+ glm::ivec4 B(A);
+ Error += glm::all(glm::equal(A, B)) ? 0 : 1;
+ }
+
+# if GLM_HAS_TRIVIAL_QUERIES
+ // Error += std::is_trivially_default_constructible<glm::vec4>::value ? 0 : 1;
+ // Error += std::is_trivially_copy_assignable<glm::vec4>::value ? 0 : 1;
+ Error += std::is_trivially_copyable<glm::vec4>::value ? 0 : 1;
+ Error += std::is_trivially_copyable<glm::dvec4>::value ? 0 : 1;
+ Error += std::is_trivially_copyable<glm::ivec4>::value ? 0 : 1;
+ Error += std::is_trivially_copyable<glm::uvec4>::value ? 0 : 1;
+
+ Error += std::is_copy_constructible<glm::vec4>::value ? 0 : 1;
+# endif
+
+#if GLM_HAS_INITIALIZER_LISTS
+ {
+ glm::vec4 a{ 0, 1, 2, 3 };
+ std::vector<glm::vec4> v = {
+ {0, 1, 2, 3},
+ {4, 5, 6, 7},
+ {8, 9, 0, 1}};
+ }
+
+ {
+ glm::dvec4 a{ 0, 1, 2, 3 };
+ std::vector<glm::dvec4> v = {
+ {0, 1, 2, 3},
+ {4, 5, 6, 7},
+ {8, 9, 0, 1}};
+ }
+#endif
+
+#if GLM_HAS_UNRESTRICTED_UNIONS && defined(GLM_FORCE_SWIZZLE)
+ {
+ glm::vec4 A = glm::vec4(1.0f, 2.0f, 3.0f, 4.0f);
+ glm::vec4 B = A.xyzw;
+ glm::vec4 C(A.xyzw);
+ glm::vec4 D(A.xyzw());
+ glm::vec4 E(A.x, A.yzw);
+ glm::vec4 F(A.x, A.yzw());
+ glm::vec4 G(A.xyz, A.w);
+ glm::vec4 H(A.xyz(), A.w);
+ glm::vec4 I(A.xy, A.zw);
+ glm::vec4 J(A.xy(), A.zw());
+ glm::vec4 K(A.x, A.y, A.zw);
+ glm::vec4 L(A.x, A.yz, A.w);
+ glm::vec4 M(A.xy, A.z, A.w);
+
+ Error += glm::all(glm::equal(A, B)) ? 0 : 1;
+ Error += glm::all(glm::equal(A, C)) ? 0 : 1;
+ Error += glm::all(glm::equal(A, D)) ? 0 : 1;
+ Error += glm::all(glm::equal(A, E)) ? 0 : 1;
+ Error += glm::all(glm::equal(A, F)) ? 0 : 1;
+ Error += glm::all(glm::equal(A, G)) ? 0 : 1;
+ Error += glm::all(glm::equal(A, H)) ? 0 : 1;
+ Error += glm::all(glm::equal(A, I)) ? 0 : 1;
+ Error += glm::all(glm::equal(A, J)) ? 0 : 1;
+ Error += glm::all(glm::equal(A, K)) ? 0 : 1;
+ Error += glm::all(glm::equal(A, L)) ? 0 : 1;
+ Error += glm::all(glm::equal(A, M)) ? 0 : 1;
+ }
+#endif// GLM_HAS_UNRESTRICTED_UNIONS && defined(GLM_FORCE_SWIZZLE)
+
+ {
+ glm::vec4 A(1);
+ glm::vec4 B(1, 1, 1, 1);
+
+ Error += A == B ? 0 : 1;
+ }
+
+ {
+ std::vector<glm::vec4> Tests;
+ Tests.push_back(glm::vec4(glm::vec2(1, 2), 3, 4));
+ Tests.push_back(glm::vec4(1, glm::vec2(2, 3), 4));
+ Tests.push_back(glm::vec4(1, 2, glm::vec2(3, 4)));
+ Tests.push_back(glm::vec4(glm::vec3(1, 2, 3), 4));
+ Tests.push_back(glm::vec4(1, glm::vec3(2, 3, 4)));
+ Tests.push_back(glm::vec4(glm::vec2(1, 2), glm::vec2(3, 4)));
+ Tests.push_back(glm::vec4(1, 2, 3, 4));
+ Tests.push_back(glm::vec4(glm::vec4(1, 2, 3, 4)));
+
+ for(std::size_t i = 0; i < Tests.size(); ++i)
+ Error += Tests[i] == glm::vec4(1, 2, 3, 4) ? 0 : 1;
+ }
+
+ return Error;
+}
+
+int test_bvec4_ctor()
+{
+ int Error = 0;
+
+ glm::bvec4 const A(true);
+ glm::bvec4 const B(true);
+ glm::bvec4 const C(false);
+ glm::bvec4 const D = A && B;
+ glm::bvec4 const E = A && C;
+ glm::bvec4 const F = A || C;
+ bool const G = A == C;
+ bool const H = A != C;
+
+ Error += D == glm::bvec4(true) ? 0 : 1;
+ Error += E == glm::bvec4(false) ? 0 : 1;
+ Error += F == glm::bvec4(true) ? 0 : 1;
+
+ return Error;
+}
+
+int test_vec4_operators()
+{
+ int Error = 0;
+
+ {
+ glm::vec4 A(1.0f);
+ glm::vec4 B(1.0f);
+ bool R = A != B;
+ bool S = A == B;
+
+ Error += (S && !R) ? 0 : 1;
+ }
+
+ {
+ glm::vec4 A(1.0f, 2.0f, 3.0f, 4.0f);
+ glm::vec4 B(4.0f, 5.0f, 6.0f, 7.0f);
+
+ glm::vec4 C = A + B;
+ Error += C == glm::vec4(5, 7, 9, 11) ? 0 : 1;
+
+ glm::vec4 D = B - A;
+ Error += D == glm::vec4(3, 3, 3, 3) ? 0 : 1;
+
+ glm::vec4 E = A * B;
+ Error += E == glm::vec4(4, 10, 18, 28) ? 0 : 1;
+
+ glm::vec4 F = B / A;
+ Error += F == glm::vec4(4, 2.5, 2, 7.0f / 4.0f) ? 0 : 1;
+
+ glm::vec4 G = A + 1.0f;
+ Error += G == glm::vec4(2, 3, 4, 5) ? 0 : 1;
+
+ glm::vec4 H = B - 1.0f;
+ Error += H == glm::vec4(3, 4, 5, 6) ? 0 : 1;
+
+ glm::vec4 I = A * 2.0f;
+ Error += I == glm::vec4(2, 4, 6, 8) ? 0 : 1;
+
+ glm::vec4 J = B / 2.0f;
+ Error += J == glm::vec4(2, 2.5, 3, 3.5) ? 0 : 1;
+
+ glm::vec4 K = 1.0f + A;
+ Error += K == glm::vec4(2, 3, 4, 5) ? 0 : 1;
+
+ glm::vec4 L = 1.0f - B;
+ Error += L == glm::vec4(-3, -4, -5, -6) ? 0 : 1;
+
+ glm::vec4 M = 2.0f * A;
+ Error += M == glm::vec4(2, 4, 6, 8) ? 0 : 1;
+
+ glm::vec4 N = 2.0f / B;
+ Error += N == glm::vec4(0.5, 2.0 / 5.0, 2.0 / 6.0, 2.0 / 7.0) ? 0 : 1;
+ }
+
+ {
+ glm::vec4 A(1.0f, 2.0f, 3.0f, 4.0f);
+ glm::vec4 B(4.0f, 5.0f, 6.0f, 7.0f);
+
+ A += B;
+ Error += A == glm::vec4(5, 7, 9, 11) ? 0 : 1;
+
+ A += 1.0f;
+ Error += A == glm::vec4(6, 8, 10, 12) ? 0 : 1;
+ }
+ {
+ glm::vec4 A(1.0f, 2.0f, 3.0f, 4.0f);
+ glm::vec4 B(4.0f, 5.0f, 6.0f, 7.0f);
+
+ B -= A;
+ Error += B == glm::vec4(3, 3, 3, 3) ? 0 : 1;
+
+ B -= 1.0f;
+ Error += B == glm::vec4(2, 2, 2, 2) ? 0 : 1;
+ }
+ {
+ glm::vec4 A(1.0f, 2.0f, 3.0f, 4.0f);
+ glm::vec4 B(4.0f, 5.0f, 6.0f, 7.0f);
+
+ A *= B;
+ Error += A == glm::vec4(4, 10, 18, 28) ? 0 : 1;
+
+ A *= 2.0f;
+ Error += A == glm::vec4(8, 20, 36, 56) ? 0 : 1;
+ }
+ {
+ glm::vec4 A(1.0f, 2.0f, 3.0f, 4.0f);
+ glm::vec4 B(4.0f, 5.0f, 6.0f, 7.0f);
+
+ B /= A;
+ Error += B == glm::vec4(4, 2.5, 2, 7.0f / 4.0f) ? 0 : 1;
+
+ B /= 2.0f;
+ Error += B == glm::vec4(2, 1.25, 1, 7.0f / 4.0f / 2.0f) ? 0 : 1;
+ }
+ {
+ glm::vec4 B(2.0f);
+
+ B /= B.y;
+ Error += B == glm::vec4(1.0f) ? 0 : 1;
+ }
+
+ {
+ glm::vec4 A(1.0f, 2.0f, 3.0f, 4.0f);
+ glm::vec4 B = -A;
+ Error += B == glm::vec4(-1.0f, -2.0f, -3.0f, -4.0f) ? 0 : 1;
+ }
+
+ {
+ glm::vec4 A(1.0f, 2.0f, 3.0f, 4.0f);
+ glm::vec4 B = --A;
+ Error += B == glm::vec4(0.0f, 1.0f, 2.0f, 3.0f) ? 0 : 1;
+ }
+
+ {
+ glm::vec4 A(1.0f, 2.0f, 3.0f, 4.0f);
+ glm::vec4 B = A--;
+ Error += B == glm::vec4(1.0f, 2.0f, 3.0f, 4.0f) ? 0 : 1;
+ Error += A == glm::vec4(0.0f, 1.0f, 2.0f, 3.0f) ? 0 : 1;
+ }
+
+ {
+ glm::vec4 A(1.0f, 2.0f, 3.0f, 4.0f);
+ glm::vec4 B = ++A;
+ Error += B == glm::vec4(2.0f, 3.0f, 4.0f, 5.0f) ? 0 : 1;
+ }
+
+ {
+ glm::vec4 A(1.0f, 2.0f, 3.0f, 4.0f);
+ glm::vec4 B = A++;
+ Error += B == glm::vec4(1.0f, 2.0f, 3.0f, 4.0f) ? 0 : 1;
+ Error += A == glm::vec4(2.0f, 3.0f, 4.0f, 5.0f) ? 0 : 1;
+ }
+
+ return Error;
+}
+
+int test_vec4_equal()
+{
+ int Error = 0;
+
+ {
+ glm::vec4 const A(1, 2, 3, 4);
+ glm::vec4 const B(1, 2, 3, 4);
+ Error += A == B ? 0 : 1;
+ Error += A != B ? 1 : 0;
+ }
+
+ {
+ glm::ivec4 const A(1, 2, 3, 4);
+ glm::ivec4 const B(1, 2, 3, 4);
+ Error += A == B ? 0 : 1;
+ Error += A != B ? 1 : 0;
+ }
+
+ return Error;
+}
+
+int test_vec4_size()
+{
+ int Error = 0;
+
+ Error += sizeof(glm::vec4) == sizeof(glm::lowp_vec4) ? 0 : 1;
+ Error += sizeof(glm::vec4) == sizeof(glm::mediump_vec4) ? 0 : 1;
+ Error += sizeof(glm::vec4) == sizeof(glm::highp_vec4) ? 0 : 1;
+ Error += 16 == sizeof(glm::mediump_vec4) ? 0 : 1;
+ Error += sizeof(glm::dvec4) == sizeof(glm::lowp_dvec4) ? 0 : 1;
+ Error += sizeof(glm::dvec4) == sizeof(glm::mediump_dvec4) ? 0 : 1;
+ Error += sizeof(glm::dvec4) == sizeof(glm::highp_dvec4) ? 0 : 1;
+ Error += 32 == sizeof(glm::highp_dvec4) ? 0 : 1;
+ Error += glm::vec4().length() == 4 ? 0 : 1;
+ Error += glm::dvec4().length() == 4 ? 0 : 1;
+
+ return Error;
+}
+
+int test_vec4_swizzle_partial()
+{
+ int Error = 0;
+
+ glm::vec4 A(1, 2, 3, 4);
+
+# if GLM_HAS_UNRESTRICTED_UNIONS && defined(GLM_SWIZZLE_RELAX)
+ {
+ glm::vec4 B(A.xy, A.zw);
+ Error += A == B ? 0 : 1;
+ }
+ {
+ glm::vec4 B(A.xy, 3.0f, 4.0f);
+ Error += A == B ? 0 : 1;
+ }
+ {
+ glm::vec4 B(1.0f, A.yz, 4.0f);
+ Error += A == B ? 0 : 1;
+ }
+ {
+ glm::vec4 B(1.0f, 2.0f, A.zw);
+ Error += A == B ? 0 : 1;
+ }
+
+ {
+ glm::vec4 B(A.xyz, 4.0f);
+ Error += A == B ? 0 : 1;
+ }
+ {
+ glm::vec4 B(1.0f, A.yzw);
+ Error += A == B ? 0 : 1;
+ }
+# endif
+
+ return Error;
+}
+
+int test_operator_increment()
+{
+ int Error(0);
+
+ glm::ivec4 v0(1);
+ glm::ivec4 v1(v0);
+ glm::ivec4 v2(v0);
+ glm::ivec4 v3 = ++v1;
+ glm::ivec4 v4 = v2++;
+
+ Error += glm::all(glm::equal(v0, v4)) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, v2)) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, v3)) ? 0 : 1;
+
+ int i0(1);
+ int i1(i0);
+ int i2(i0);
+ int i3 = ++i1;
+ int i4 = i2++;
+
+ Error += i0 == i4 ? 0 : 1;
+ Error += i1 == i2 ? 0 : 1;
+ Error += i1 == i3 ? 0 : 1;
+
+ return Error;
+}
+
+namespace heap
+{
+ class A
+ {
+ float f;
+ };
+
+ class B : public A
+ {
+ float g;
+ glm::vec4 v;
+ };
+
+ int test()
+ {
+ int Error(0);
+
+ A* p = new B;
+ delete p;
+
+ return Error;
+ }
+}//namespace heap
+
+int test_vec4_simd()
+{
+ int Error = 0;
+
+ glm::vec4 const a(std::clock(), std::clock(), std::clock(), std::clock());
+ glm::vec4 const b(std::clock(), std::clock(), std::clock(), std::clock());
+
+ glm::vec4 const c(b * a);
+ glm::vec4 const d(a + c);
+
+ Error += glm::all(glm::greaterThanEqual(d, glm::vec4(0))) ? 0 : 1;
+
+ return Error;
+}
+
+int main()
+{
+ int Error(0);
+
+ Error += test_vec4_ctor();
+ Error += test_bvec4_ctor();
+ Error += test_vec4_size();
+ Error += test_vec4_operators();
+ Error += test_vec4_equal();
+ Error += test_vec4_swizzle_partial();
+ Error += test_vec4_simd();
+ Error += test_operator_increment();
+ Error += heap::test();
+
+ return Error;
+}
+
diff --git a/src/third_party/glm/test/core/core_func_common.cpp b/src/third_party/glm/test/core/core_func_common.cpp
new file mode 100644
index 0000000..6ff3c39
--- /dev/null
+++ b/src/third_party/glm/test/core/core_func_common.cpp
@@ -0,0 +1,1272 @@
+#define GLM_FORCE_EXPLICIT_CTOR
+#include <glm/common.hpp>
+#include <glm/gtc/constants.hpp>
+#include <glm/gtc/epsilon.hpp>
+#include <glm/gtc/vec1.hpp>
+#include <glm/gtc/random.hpp>
+#include <vector>
+#include <cstdio>
+#include <cmath>
+#include <ctime>
+
+namespace floor_
+{
+ int test()
+ {
+ int Error(0);
+
+ {
+ float A(1.1f);
+ float B = glm::floor(A);
+ }
+
+ {
+ double A(1.1f);
+ double B = glm::floor(A);
+ }
+
+ {
+ glm::vec1 A(1.1f);
+ glm::vec1 B = glm::floor(A);
+
+ Error += glm::all(glm::epsilonEqual(B, glm::vec1(1.0), 0.0001f)) ? 0 : 1;
+ }
+
+ {
+ glm::dvec1 A(1.1f);
+ glm::dvec1 B = glm::floor(A);
+
+ Error += glm::all(glm::epsilonEqual(B, glm::dvec1(1.0), 0.0001)) ? 0 : 1;
+ }
+
+ {
+ glm::vec2 A(1.1f);
+ glm::vec2 B = glm::floor(A);
+
+ Error += glm::all(glm::epsilonEqual(B, glm::vec2(1.0), 0.0001f)) ? 0 : 1;
+ }
+
+ {
+ glm::dvec2 A(1.1f);
+ glm::dvec2 B = glm::floor(A);
+
+ Error += glm::all(glm::epsilonEqual(B, glm::dvec2(1.0), 0.0001)) ? 0 : 1;
+ }
+
+ {
+ glm::vec3 A(1.1f);
+ glm::vec3 B = glm::floor(A);
+
+ Error += glm::all(glm::epsilonEqual(B, glm::vec3(1.0), 0.0001f)) ? 0 : 1;
+ }
+
+ {
+ glm::dvec3 A(1.1f);
+ glm::dvec3 B = glm::floor(A);
+
+ Error += glm::all(glm::epsilonEqual(B, glm::dvec3(1.0), 0.0001)) ? 0 : 1;
+ }
+
+ {
+ glm::vec4 A(1.1f);
+ glm::vec4 B = glm::floor(A);
+
+ Error += glm::all(glm::epsilonEqual(B, glm::vec4(1.0), 0.0001f)) ? 0 : 1;
+ }
+
+ {
+ glm::dvec4 A(1.1f);
+ glm::dvec4 B = glm::floor(A);
+
+ Error += glm::all(glm::epsilonEqual(B, glm::dvec4(1.0), 0.0001)) ? 0 : 1;
+ }
+
+ return Error;
+ }
+}//namespace floor
+
+namespace modf_
+{
+ int test()
+ {
+ int Error(0);
+
+ {
+ float X(1.5f);
+ float I(0.0f);
+ float A = glm::modf(X, I);
+
+ Error += I == 1.0f ? 0 : 1;
+ Error += A == 0.5f ? 0 : 1;
+ }
+
+ {
+ glm::vec4 X(1.1f, 1.2f, 1.5f, 1.7f);
+ glm::vec4 I(0.0f);
+ glm::vec4 A = glm::modf(X, I);
+
+ Error += I == glm::vec4(1.0f) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(A, glm::vec4(0.1f, 0.2f, 0.5f, 0.7f), 0.00001f)) ? 0 : 1;
+ }
+
+ {
+ glm::dvec4 X(1.1, 1.2, 1.5, 1.7);
+ glm::dvec4 I(0.0);
+ glm::dvec4 A = glm::modf(X, I);
+
+ Error += I == glm::dvec4(1.0) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(A, glm::dvec4(0.1, 0.2, 0.5, 0.7), 0.000000001)) ? 0 : 1;
+ }
+
+ {
+ double X(1.5);
+ double I(0.0);
+ double A = glm::modf(X, I);
+
+ Error += I == 1.0 ? 0 : 1;
+ Error += A == 0.5 ? 0 : 1;
+ }
+
+ return Error;
+ }
+}//namespace modf
+
+namespace mod_
+{
+ int test()
+ {
+ int Error(0);
+
+ {
+ float A(1.5f);
+ float B(1.0f);
+ float C = glm::mod(A, B);
+
+ Error += glm::abs(C - 0.5f) < 0.00001f ? 0 : 1;
+ }
+
+ {
+ float A(-0.2f);
+ float B(1.0f);
+ float C = glm::mod(A, B);
+
+ Error += glm::abs(C - 0.8f) < 0.00001f ? 0 : 1;
+ }
+
+ {
+ float A(3.0);
+ float B(2.0f);
+ float C = glm::mod(A, B);
+
+ Error += glm::abs(C - 1.0f) < 0.00001f ? 0 : 1;
+ }
+
+ {
+ glm::vec4 A(3.0);
+ float B(2.0f);
+ glm::vec4 C = glm::mod(A, B);
+
+ Error += glm::all(glm::epsilonEqual(C, glm::vec4(1.0f), 0.00001f)) ? 0 : 1;
+ }
+
+ {
+ glm::vec4 A(3.0);
+ glm::vec4 B(2.0f);
+ glm::vec4 C = glm::mod(A, B);
+
+ Error += glm::all(glm::epsilonEqual(C, glm::vec4(1.0f), 0.00001f)) ? 0 : 1;
+ }
+
+ return Error;
+ }
+}//namespace mod_
+
+namespace floatBitsToInt
+{
+ int test()
+ {
+ int Error = 0;
+
+ {
+ float A = 1.0f;
+ int B = glm::floatBitsToInt(A);
+ float C = glm::intBitsToFloat(B);
+ int D = *(int*)&A;
+ Error += B == D ? 0 : 1;
+ Error += A == C ? 0 : 1;
+ }
+
+ {
+ glm::vec2 A(1.0f, 2.0f);
+ glm::ivec2 B = glm::floatBitsToInt(A);
+ glm::vec2 C = glm::intBitsToFloat(B);
+ Error += B.x == *(int*)&(A.x) ? 0 : 1;
+ Error += B.y == *(int*)&(A.y) ? 0 : 1;
+ Error += A == C? 0 : 1;
+ }
+
+ {
+ glm::vec3 A(1.0f, 2.0f, 3.0f);
+ glm::ivec3 B = glm::floatBitsToInt(A);
+ glm::vec3 C = glm::intBitsToFloat(B);
+ Error += B.x == *(int*)&(A.x) ? 0 : 1;
+ Error += B.y == *(int*)&(A.y) ? 0 : 1;
+ Error += B.z == *(int*)&(A.z) ? 0 : 1;
+ Error += A == C? 0 : 1;
+ }
+
+ {
+ glm::vec4 A(1.0f, 2.0f, 3.0f, 4.0f);
+ glm::ivec4 B = glm::floatBitsToInt(A);
+ glm::vec4 C = glm::intBitsToFloat(B);
+ Error += B.x == *(int*)&(A.x) ? 0 : 1;
+ Error += B.y == *(int*)&(A.y) ? 0 : 1;
+ Error += B.z == *(int*)&(A.z) ? 0 : 1;
+ Error += B.w == *(int*)&(A.w) ? 0 : 1;
+ Error += A == C? 0 : 1;
+ }
+
+ return Error;
+ }
+}//namespace floatBitsToInt
+
+namespace floatBitsToUint
+{
+ int test()
+ {
+ int Error = 0;
+
+ {
+ float A = 1.0f;
+ glm::uint B = glm::floatBitsToUint(A);
+ float C = glm::intBitsToFloat(B);
+ Error += B == *(glm::uint*)&A ? 0 : 1;
+ Error += A == C? 0 : 1;
+ }
+
+ {
+ glm::vec2 A(1.0f, 2.0f);
+ glm::uvec2 B = glm::floatBitsToUint(A);
+ glm::vec2 C = glm::uintBitsToFloat(B);
+ Error += B.x == *(glm::uint*)&(A.x) ? 0 : 1;
+ Error += B.y == *(glm::uint*)&(A.y) ? 0 : 1;
+ Error += A == C ? 0 : 1;
+ }
+
+ {
+ glm::vec3 A(1.0f, 2.0f, 3.0f);
+ glm::uvec3 B = glm::floatBitsToUint(A);
+ glm::vec3 C = glm::uintBitsToFloat(B);
+ Error += B.x == *(glm::uint*)&(A.x) ? 0 : 1;
+ Error += B.y == *(glm::uint*)&(A.y) ? 0 : 1;
+ Error += B.z == *(glm::uint*)&(A.z) ? 0 : 1;
+ Error += A == C? 0 : 1;
+ }
+
+ {
+ glm::vec4 A(1.0f, 2.0f, 3.0f, 4.0f);
+ glm::uvec4 B = glm::floatBitsToUint(A);
+ glm::vec4 C = glm::uintBitsToFloat(B);
+ Error += B.x == *(glm::uint*)&(A.x) ? 0 : 1;
+ Error += B.y == *(glm::uint*)&(A.y) ? 0 : 1;
+ Error += B.z == *(glm::uint*)&(A.z) ? 0 : 1;
+ Error += B.w == *(glm::uint*)&(A.w) ? 0 : 1;
+ Error += A == C? 0 : 1;
+ }
+
+ return Error;
+ }
+}//namespace floatBitsToUint
+
+namespace min_
+{
+ int test()
+ {
+ int Error = 0;
+
+ glm::vec1 A0 = glm::min(glm::vec1(1), glm::vec1(1));
+
+ glm::vec2 B0 = glm::min(glm::vec2(1), glm::vec2(1));
+ glm::vec2 B1 = glm::min(glm::vec2(1), 1.0f);
+ bool B2 = glm::all(glm::equal(B0, B1));
+ Error += B2 ? 0 : 1;
+
+ glm::vec3 C0 = glm::min(glm::vec3(1), glm::vec3(1));
+ glm::vec3 C1 = glm::min(glm::vec3(1), 1.0f);
+ bool C2 = glm::all(glm::equal(C0, C1));
+ Error += C2 ? 0 : 1;
+
+ glm::vec4 D0 = glm::min(glm::vec4(1), glm::vec4(1));
+ glm::vec4 D1 = glm::min(glm::vec4(1), 1.0f);
+ bool D2 = glm::all(glm::equal(D0, D1));
+ Error += D2 ? 0 : 1;
+
+ return Error;
+ }
+}//namespace min_
+
+namespace max_
+{
+ int test()
+ {
+ int Error = 0;
+
+ glm::vec1 A0 = glm::max(glm::vec1(1), glm::vec1(1));
+
+ glm::vec2 B0 = glm::max(glm::vec2(1), glm::vec2(1));
+ glm::vec2 B1 = glm::max(glm::vec2(1), 1.0f);
+ bool B2 = glm::all(glm::equal(B0, B1));
+ Error += B2 ? 0 : 1;
+
+ glm::vec3 C0 = glm::max(glm::vec3(1), glm::vec3(1));
+ glm::vec3 C1 = glm::max(glm::vec3(1), 1.0f);
+ bool C2 = glm::all(glm::equal(C0, C1));
+ Error += C2 ? 0 : 1;
+
+ glm::vec4 D0 = glm::max(glm::vec4(1), glm::vec4(1));
+ glm::vec4 D1 = glm::max(glm::vec4(1), 1.0f);
+ bool D2 = glm::all(glm::equal(D0, D1));
+ Error += D2 ? 0 : 1;
+
+ return Error;
+ }
+}//namespace max_
+
+namespace clamp_
+{
+ int test()
+ {
+ int Error = 0;
+
+ return Error;
+ }
+}//namespace clamp_
+
+namespace mix_
+{
+ template <typename T, typename B>
+ struct entry
+ {
+ T x;
+ T y;
+ B a;
+ T Result;
+ };
+
+ entry<float, bool> TestBool[] =
+ {
+ {0.0f, 1.0f, false, 0.0f},
+ {0.0f, 1.0f, true, 1.0f},
+ {-1.0f, 1.0f, false, -1.0f},
+ {-1.0f, 1.0f, true, 1.0f}
+ };
+
+ entry<float, float> TestFloat[] =
+ {
+ {0.0f, 1.0f, 0.0f, 0.0f},
+ {0.0f, 1.0f, 1.0f, 1.0f},
+ {-1.0f, 1.0f, 0.0f, -1.0f},
+ {-1.0f, 1.0f, 1.0f, 1.0f}
+ };
+
+ entry<glm::vec2, bool> TestVec2Bool[] =
+ {
+ {glm::vec2(0.0f), glm::vec2(1.0f), false, glm::vec2(0.0f)},
+ {glm::vec2(0.0f), glm::vec2(1.0f), true, glm::vec2(1.0f)},
+ {glm::vec2(-1.0f), glm::vec2(1.0f), false, glm::vec2(-1.0f)},
+ {glm::vec2(-1.0f), glm::vec2(1.0f), true, glm::vec2(1.0f)}
+ };
+
+ entry<glm::vec2, glm::bvec2> TestBVec2[] =
+ {
+ {glm::vec2(0.0f), glm::vec2(1.0f), glm::bvec2(false), glm::vec2(0.0f)},
+ {glm::vec2(0.0f), glm::vec2(1.0f), glm::bvec2(true), glm::vec2(1.0f)},
+ {glm::vec2(-1.0f), glm::vec2(1.0f), glm::bvec2(false), glm::vec2(-1.0f)},
+ {glm::vec2(-1.0f), glm::vec2(1.0f), glm::bvec2(true), glm::vec2(1.0f)},
+ {glm::vec2(-1.0f), glm::vec2(1.0f), glm::bvec2(true, false), glm::vec2(1.0f, -1.0f)}
+ };
+
+ entry<glm::vec3, bool> TestVec3Bool[] =
+ {
+ {glm::vec3(0.0f), glm::vec3(1.0f), false, glm::vec3(0.0f)},
+ {glm::vec3(0.0f), glm::vec3(1.0f), true, glm::vec3(1.0f)},
+ {glm::vec3(-1.0f), glm::vec3(1.0f), false, glm::vec3(-1.0f)},
+ {glm::vec3(-1.0f), glm::vec3(1.0f), true, glm::vec3(1.0f)}
+ };
+
+ entry<glm::vec3, glm::bvec3> TestBVec3[] =
+ {
+ {glm::vec3(0.0f), glm::vec3(1.0f), glm::bvec3(false), glm::vec3(0.0f)},
+ {glm::vec3(0.0f), glm::vec3(1.0f), glm::bvec3(true), glm::vec3(1.0f)},
+ {glm::vec3(-1.0f), glm::vec3(1.0f), glm::bvec3(false), glm::vec3(-1.0f)},
+ {glm::vec3(-1.0f), glm::vec3(1.0f), glm::bvec3(true), glm::vec3(1.0f)},
+ {glm::vec3(1.0f, 2.0f, 3.0f), glm::vec3(4.0f, 5.0f, 6.0f), glm::bvec3(true, false, true), glm::vec3(4.0f, 2.0f, 6.0f)}
+ };
+
+ entry<glm::vec4, bool> TestVec4Bool[] =
+ {
+ {glm::vec4(0.0f), glm::vec4(1.0f), false, glm::vec4(0.0f)},
+ {glm::vec4(0.0f), glm::vec4(1.0f), true, glm::vec4(1.0f)},
+ {glm::vec4(-1.0f), glm::vec4(1.0f), false, glm::vec4(-1.0f)},
+ {glm::vec4(-1.0f), glm::vec4(1.0f), true, glm::vec4(1.0f)}
+ };
+
+ entry<glm::vec4, glm::bvec4> TestBVec4[] =
+ {
+ {glm::vec4(0.0f, 0.0f, 1.0f, 1.0f), glm::vec4(2.0f, 2.0f, 3.0f, 3.0f), glm::bvec4(false, true, false, true), glm::vec4(0.0f, 2.0f, 1.0f, 3.0f)},
+ {glm::vec4(0.0f), glm::vec4(1.0f), glm::bvec4(true), glm::vec4(1.0f)},
+ {glm::vec4(-1.0f), glm::vec4(1.0f), glm::bvec4(false), glm::vec4(-1.0f)},
+ {glm::vec4(-1.0f), glm::vec4(1.0f), glm::bvec4(true), glm::vec4(1.0f)},
+ {glm::vec4(1.0f, 2.0f, 3.0f, 4.0f), glm::vec4(5.0f, 6.0f, 7.0f, 8.0f), glm::bvec4(true, false, true, false), glm::vec4(5.0f, 2.0f, 7.0f, 4.0f)}
+ };
+
+ int test()
+ {
+ int Error = 0;
+
+ // Float with bool
+ {
+ for(std::size_t i = 0; i < sizeof(TestBool) / sizeof(entry<float, bool>); ++i)
+ {
+ float Result = glm::mix(TestBool[i].x, TestBool[i].y, TestBool[i].a);
+ Error += glm::epsilonEqual(Result, TestBool[i].Result, glm::epsilon<float>()) ? 0 : 1;
+ }
+ }
+
+ // Float with float
+ {
+ for(std::size_t i = 0; i < sizeof(TestFloat) / sizeof(entry<float, float>); ++i)
+ {
+ float Result = glm::mix(TestFloat[i].x, TestFloat[i].y, TestFloat[i].a);
+ Error += glm::epsilonEqual(Result, TestFloat[i].Result, glm::epsilon<float>()) ? 0 : 1;
+ }
+ }
+
+ // vec2 with bool
+ {
+ for(std::size_t i = 0; i < sizeof(TestVec2Bool) / sizeof(entry<glm::vec2, bool>); ++i)
+ {
+ glm::vec2 Result = glm::mix(TestVec2Bool[i].x, TestVec2Bool[i].y, TestVec2Bool[i].a);
+ Error += glm::epsilonEqual(Result.x, TestVec2Bool[i].Result.x, glm::epsilon<float>()) ? 0 : 1;
+ Error += glm::epsilonEqual(Result.y, TestVec2Bool[i].Result.y, glm::epsilon<float>()) ? 0 : 1;
+ }
+ }
+
+ // vec2 with bvec2
+ {
+ for(std::size_t i = 0; i < sizeof(TestBVec2) / sizeof(entry<glm::vec2, glm::bvec2>); ++i)
+ {
+ glm::vec2 Result = glm::mix(TestBVec2[i].x, TestBVec2[i].y, TestBVec2[i].a);
+ Error += glm::epsilonEqual(Result.x, TestBVec2[i].Result.x, glm::epsilon<float>()) ? 0 : 1;
+ Error += glm::epsilonEqual(Result.y, TestBVec2[i].Result.y, glm::epsilon<float>()) ? 0 : 1;
+ }
+ }
+
+ // vec3 with bool
+ {
+ for(std::size_t i = 0; i < sizeof(TestVec3Bool) / sizeof(entry<glm::vec3, bool>); ++i)
+ {
+ glm::vec3 Result = glm::mix(TestVec3Bool[i].x, TestVec3Bool[i].y, TestVec3Bool[i].a);
+ Error += glm::epsilonEqual(Result.x, TestVec3Bool[i].Result.x, glm::epsilon<float>()) ? 0 : 1;
+ Error += glm::epsilonEqual(Result.y, TestVec3Bool[i].Result.y, glm::epsilon<float>()) ? 0 : 1;
+ Error += glm::epsilonEqual(Result.z, TestVec3Bool[i].Result.z, glm::epsilon<float>()) ? 0 : 1;
+ }
+ }
+
+ // vec3 with bvec3
+ {
+ for(std::size_t i = 0; i < sizeof(TestBVec3) / sizeof(entry<glm::vec3, glm::bvec3>); ++i)
+ {
+ glm::vec3 Result = glm::mix(TestBVec3[i].x, TestBVec3[i].y, TestBVec3[i].a);
+ Error += glm::epsilonEqual(Result.x, TestBVec3[i].Result.x, glm::epsilon<float>()) ? 0 : 1;
+ Error += glm::epsilonEqual(Result.y, TestBVec3[i].Result.y, glm::epsilon<float>()) ? 0 : 1;
+ Error += glm::epsilonEqual(Result.z, TestBVec3[i].Result.z, glm::epsilon<float>()) ? 0 : 1;
+ }
+ }
+
+ // vec4 with bool
+ {
+ for(std::size_t i = 0; i < sizeof(TestVec4Bool) / sizeof(entry<glm::vec4, bool>); ++i)
+ {
+ glm::vec4 Result = glm::mix(TestVec4Bool[i].x, TestVec4Bool[i].y, TestVec4Bool[i].a);
+ Error += glm::epsilonEqual(Result.x, TestVec4Bool[i].Result.x, glm::epsilon<float>()) ? 0 : 1;
+ Error += glm::epsilonEqual(Result.y, TestVec4Bool[i].Result.y, glm::epsilon<float>()) ? 0 : 1;
+ Error += glm::epsilonEqual(Result.z, TestVec4Bool[i].Result.z, glm::epsilon<float>()) ? 0 : 1;
+ Error += glm::epsilonEqual(Result.w, TestVec4Bool[i].Result.w, glm::epsilon<float>()) ? 0 : 1;
+ }
+ }
+
+ // vec4 with bvec4
+ {
+ for(std::size_t i = 0; i < sizeof(TestBVec4) / sizeof(entry<glm::vec4, glm::bvec4>); ++i)
+ {
+ glm::vec4 Result = glm::mix(TestBVec4[i].x, TestBVec4[i].y, TestBVec4[i].a);
+ Error += glm::epsilonEqual(Result.x, TestBVec4[i].Result.x, glm::epsilon<float>()) ? 0 : 1;
+ Error += glm::epsilonEqual(Result.y, TestBVec4[i].Result.y, glm::epsilon<float>()) ? 0 : 1;
+ Error += glm::epsilonEqual(Result.z, TestBVec4[i].Result.z, glm::epsilon<float>()) ? 0 : 1;
+ Error += glm::epsilonEqual(Result.w, TestBVec4[i].Result.w, glm::epsilon<float>()) ? 0 : 1;
+ }
+ }
+
+ return Error;
+ }
+}//namespace mix_
+
+namespace step_
+{
+ template <typename EDGE, typename VEC>
+ struct entry
+ {
+ EDGE edge;
+ VEC x;
+ VEC result;
+ };
+
+ entry<float, glm::vec4> TestVec4Scalar [] =
+ {
+ { 1.0f, glm::vec4(1.0f, 2.0f, 3.0f, 4.0f), glm::vec4(1.0f) },
+ { 0.0f, glm::vec4(1.0f, 2.0f, 3.0f, 4.0f), glm::vec4(1.0f) },
+ { 0.0f, glm::vec4(-1.0f, -2.0f, -3.0f, -4.0f), glm::vec4(0.0f) }
+ };
+
+ entry<glm::vec4, glm::vec4> TestVec4Vector [] =
+ {
+ { glm::vec4(-1.0f, -2.0f, -3.0f, -4.0f), glm::vec4(-2.0f, -3.0f, -4.0f, -5.0f), glm::vec4(0.0f) },
+ { glm::vec4( 0.0f, 1.0f, 2.0f, 3.0f), glm::vec4( 1.0f, 2.0f, 3.0f, 4.0f), glm::vec4(1.0f) },
+ { glm::vec4( 2.0f, 3.0f, 4.0f, 5.0f), glm::vec4( 1.0f, 2.0f, 3.0f, 4.0f), glm::vec4(0.0f) },
+ { glm::vec4( 0.0f, 1.0f, 2.0f, 3.0f), glm::vec4(-1.0f,-2.0f,-3.0f,-4.0f), glm::vec4(0.0f) }
+ };
+
+ int test()
+ {
+ int Error = 0;
+
+ // vec4 and float
+ {
+ for (std::size_t i = 0; i < sizeof(TestVec4Scalar) / sizeof(entry<float, glm::vec4>); ++i)
+ {
+ glm::vec4 Result = glm::step(TestVec4Scalar[i].edge, TestVec4Scalar[i].x);
+ Error += glm::all(glm::epsilonEqual(Result, TestVec4Scalar[i].result, glm::epsilon<float>())) ? 0 : 1;
+ }
+ }
+
+ // vec4 and vec4
+ {
+ for (std::size_t i = 0; i < sizeof(TestVec4Vector) / sizeof(entry<glm::vec4, glm::vec4>); ++i)
+ {
+ glm::vec4 Result = glm::step(TestVec4Vector[i].edge, TestVec4Vector[i].x);
+ Error += glm::all(glm::epsilonEqual(Result, TestVec4Vector[i].result, glm::epsilon<float>())) ? 0 : 1;
+ }
+ }
+
+ return Error;
+ }
+}//namespace step_
+
+namespace round_
+{
+ int test()
+ {
+ int Error = 0;
+
+ {
+ float A = glm::round(0.0f);
+ Error += A == 0.0f ? 0 : 1;
+ float B = glm::round(0.5f);
+ Error += B == 1.0f ? 0 : 1;
+ float C = glm::round(1.0f);
+ Error += C == 1.0f ? 0 : 1;
+ float D = glm::round(0.1f);
+ Error += D == 0.0f ? 0 : 1;
+ float E = glm::round(0.9f);
+ Error += E == 1.0f ? 0 : 1;
+ float F = glm::round(1.5f);
+ Error += F == 2.0f ? 0 : 1;
+ float G = glm::round(1.9f);
+ Error += G == 2.0f ? 0 : 1;
+ }
+
+ {
+ float A = glm::round(-0.0f);
+ Error += A == 0.0f ? 0 : 1;
+ float B = glm::round(-0.5f);
+ Error += B == -1.0f ? 0 : 1;
+ float C = glm::round(-1.0f);
+ Error += C == -1.0f ? 0 : 1;
+ float D = glm::round(-0.1f);
+ Error += D == 0.0f ? 0 : 1;
+ float E = glm::round(-0.9f);
+ Error += E == -1.0f ? 0 : 1;
+ float F = glm::round(-1.5f);
+ Error += F == -2.0f ? 0 : 1;
+ float G = glm::round(-1.9f);
+ Error += G == -2.0f ? 0 : 1;
+ }
+
+ return Error;
+ }
+}//namespace round_
+
+namespace roundEven
+{
+ int test()
+ {
+ int Error = 0;
+
+ {
+ float A1 = glm::roundEven(-1.5f);
+ Error += glm::epsilonEqual(A1, -2.0f, 0.0001f) ? 0 : 1;
+
+ float A2 = glm::roundEven(1.5f);
+ Error += glm::epsilonEqual(A2, 2.0f, 0.0001f) ? 0 : 1;
+
+ float A5 = glm::roundEven(-2.5f);
+ Error += glm::epsilonEqual(A5, -2.0f, 0.0001f) ? 0 : 1;
+
+ float A6 = glm::roundEven(2.5f);
+ Error += glm::epsilonEqual(A6, 2.0f, 0.0001f) ? 0 : 1;
+
+ float A3 = glm::roundEven(-3.5f);
+ Error += glm::epsilonEqual(A3, -4.0f, 0.0001f) ? 0 : 1;
+
+ float A4 = glm::roundEven(3.5f);
+ Error += glm::epsilonEqual(A4, 4.0f, 0.0001f) ? 0 : 1;
+
+ float C7 = glm::roundEven(-4.5f);
+ Error += glm::epsilonEqual(C7, -4.0f, 0.0001f) ? 0 : 1;
+
+ float C8 = glm::roundEven(4.5f);
+ Error += glm::epsilonEqual(C8, 4.0f, 0.0001f) ? 0 : 1;
+
+ float C1 = glm::roundEven(-5.5f);
+ Error += glm::epsilonEqual(C1, -6.0f, 0.0001f) ? 0 : 1;
+
+ float C2 = glm::roundEven(5.5f);
+ Error += glm::epsilonEqual(C2, 6.0f, 0.0001f) ? 0 : 1;
+
+ float C3 = glm::roundEven(-6.5f);
+ Error += glm::epsilonEqual(C3, -6.0f, 0.0001f) ? 0 : 1;
+
+ float C4 = glm::roundEven(6.5f);
+ Error += glm::epsilonEqual(C4, 6.0f, 0.0001f) ? 0 : 1;
+
+ float C5 = glm::roundEven(-7.5f);
+ Error += glm::epsilonEqual(C5, -8.0f, 0.0001f) ? 0 : 1;
+
+ float C6 = glm::roundEven(7.5f);
+ Error += glm::epsilonEqual(C6, 8.0f, 0.0001f) ? 0 : 1;
+
+ Error += 0;
+ }
+
+ {
+ float A7 = glm::roundEven(-2.4f);
+ Error += glm::epsilonEqual(A7, -2.0f, 0.0001f) ? 0 : 1;
+
+ float A8 = glm::roundEven(2.4f);
+ Error += glm::epsilonEqual(A8, 2.0f, 0.0001f) ? 0 : 1;
+
+ float B1 = glm::roundEven(-2.6f);
+ Error += glm::epsilonEqual(B1, -3.0f, 0.0001f) ? 0 : 1;
+
+ float B2 = glm::roundEven(2.6f);
+ Error += glm::epsilonEqual(B2, 3.0f, 0.0001f) ? 0 : 1;
+
+ float B3 = glm::roundEven(-2.0f);
+ Error += glm::epsilonEqual(B3, -2.0f, 0.0001f) ? 0 : 1;
+
+ float B4 = glm::roundEven(2.0f);
+ Error += glm::epsilonEqual(B4, 2.0f, 0.0001f) ? 0 : 1;
+
+ Error += 0;
+ }
+
+ {
+ float A = glm::roundEven(0.0f);
+ Error += A == 0.0f ? 0 : 1;
+ float B = glm::roundEven(0.5f);
+ Error += B == 0.0f ? 0 : 1;
+ float C = glm::roundEven(1.0f);
+ Error += C == 1.0f ? 0 : 1;
+ float D = glm::roundEven(0.1f);
+ Error += D == 0.0f ? 0 : 1;
+ float E = glm::roundEven(0.9f);
+ Error += E == 1.0f ? 0 : 1;
+ float F = glm::roundEven(1.5f);
+ Error += F == 2.0f ? 0 : 1;
+ float G = glm::roundEven(1.9f);
+ Error += G == 2.0f ? 0 : 1;
+ }
+
+ {
+ float A = glm::roundEven(-0.0f);
+ Error += A == 0.0f ? 0 : 1;
+ float B = glm::roundEven(-0.5f);
+ Error += B == -0.0f ? 0 : 1;
+ float C = glm::roundEven(-1.0f);
+ Error += C == -1.0f ? 0 : 1;
+ float D = glm::roundEven(-0.1f);
+ Error += D == 0.0f ? 0 : 1;
+ float E = glm::roundEven(-0.9f);
+ Error += E == -1.0f ? 0 : 1;
+ float F = glm::roundEven(-1.5f);
+ Error += F == -2.0f ? 0 : 1;
+ float G = glm::roundEven(-1.9f);
+ Error += G == -2.0f ? 0 : 1;
+ }
+
+ {
+ float A = glm::roundEven(1.5f);
+ Error += A == 2.0f ? 0 : 1;
+ float B = glm::roundEven(2.5f);
+ Error += B == 2.0f ? 0 : 1;
+ float C = glm::roundEven(3.5f);
+ Error += C == 4.0f ? 0 : 1;
+ float D = glm::roundEven(4.5f);
+ Error += D == 4.0f ? 0 : 1;
+ float E = glm::roundEven(5.5f);
+ Error += E == 6.0f ? 0 : 1;
+ float F = glm::roundEven(6.5f);
+ Error += F == 6.0f ? 0 : 1;
+ float G = glm::roundEven(7.5f);
+ Error += G == 8.0f ? 0 : 1;
+ }
+
+ {
+ float A = glm::roundEven(-1.5f);
+ Error += A == -2.0f ? 0 : 1;
+ float B = glm::roundEven(-2.5f);
+ Error += B == -2.0f ? 0 : 1;
+ float C = glm::roundEven(-3.5f);
+ Error += C == -4.0f ? 0 : 1;
+ float D = glm::roundEven(-4.5f);
+ Error += D == -4.0f ? 0 : 1;
+ float E = glm::roundEven(-5.5f);
+ Error += E == -6.0f ? 0 : 1;
+ float F = glm::roundEven(-6.5f);
+ Error += F == -6.0f ? 0 : 1;
+ float G = glm::roundEven(-7.5f);
+ Error += G == -8.0f ? 0 : 1;
+ }
+
+ return Error;
+ }
+}//namespace roundEven
+
+namespace isnan_
+{
+ int test()
+ {
+ int Error = 0;
+
+ float Zero_f = 0.0;
+ double Zero_d = 0.0;
+
+ {
+ Error += true == glm::isnan(0.0/Zero_d) ? 0 : 1;
+ Error += true == glm::any(glm::isnan(glm::dvec2(0.0 / Zero_d))) ? 0 : 1;
+ Error += true == glm::any(glm::isnan(glm::dvec3(0.0 / Zero_d))) ? 0 : 1;
+ Error += true == glm::any(glm::isnan(glm::dvec4(0.0 / Zero_d))) ? 0 : 1;
+ }
+
+ {
+ Error += true == glm::isnan(0.0f/Zero_f) ? 0 : 1;
+ Error += true == glm::any(glm::isnan(glm::vec2(0.0f/Zero_f))) ? 0 : 1;
+ Error += true == glm::any(glm::isnan(glm::vec3(0.0f/Zero_f))) ? 0 : 1;
+ Error += true == glm::any(glm::isnan(glm::vec4(0.0f/Zero_f))) ? 0 : 1;
+ }
+
+ return Error;
+ }
+}//namespace isnan_
+
+namespace isinf_
+{
+ int test()
+ {
+ int Error = 0;
+
+ float Zero_f = 0.0;
+ double Zero_d = 0.0;
+
+ {
+ Error += true == glm::isinf( 1.0/Zero_d) ? 0 : 1;
+ Error += true == glm::isinf(-1.0/Zero_d) ? 0 : 1;
+ Error += true == glm::any(glm::isinf(glm::dvec2( 1.0/Zero_d))) ? 0 : 1;
+ Error += true == glm::any(glm::isinf(glm::dvec2(-1.0/Zero_d))) ? 0 : 1;
+ Error += true == glm::any(glm::isinf(glm::dvec3( 1.0/Zero_d))) ? 0 : 1;
+ Error += true == glm::any(glm::isinf(glm::dvec3(-1.0/Zero_d))) ? 0 : 1;
+ Error += true == glm::any(glm::isinf(glm::dvec4( 1.0/Zero_d))) ? 0 : 1;
+ Error += true == glm::any(glm::isinf(glm::dvec4(-1.0/Zero_d))) ? 0 : 1;
+ }
+
+ {
+ Error += true == glm::isinf( 1.0f/Zero_f) ? 0 : 1;
+ Error += true == glm::isinf(-1.0f/Zero_f) ? 0 : 1;
+ Error += true == glm::any(glm::isinf(glm::vec2( 1.0f/Zero_f))) ? 0 : 1;
+ Error += true == glm::any(glm::isinf(glm::vec2(-1.0f/Zero_f))) ? 0 : 1;
+ Error += true == glm::any(glm::isinf(glm::vec3( 1.0f/Zero_f))) ? 0 : 1;
+ Error += true == glm::any(glm::isinf(glm::vec3(-1.0f/Zero_f))) ? 0 : 1;
+ Error += true == glm::any(glm::isinf(glm::vec4( 1.0f/Zero_f))) ? 0 : 1;
+ Error += true == glm::any(glm::isinf(glm::vec4(-1.0f/Zero_f))) ? 0 : 1;
+ }
+
+ return Error;
+ }
+}//namespace isinf_
+
+namespace sign
+{
+ template <typename genFIType>
+ GLM_FUNC_QUALIFIER genFIType sign_if(genFIType x)
+ {
+ GLM_STATIC_ASSERT(
+ std::numeric_limits<genFIType>::is_iec559 ||
+ (std::numeric_limits<genFIType>::is_signed && std::numeric_limits<genFIType>::is_integer), "'sign' only accept signed inputs");
+
+ genFIType result;
+ if(x > genFIType(0))
+ result = genFIType(1);
+ else if(x < genFIType(0))
+ result = genFIType(-1);
+ else
+ result = genFIType(0);
+ return result;
+ }
+
+ template <typename genFIType>
+ GLM_FUNC_QUALIFIER genFIType sign_alu1(genFIType x)
+ {
+ GLM_STATIC_ASSERT(
+ std::numeric_limits<genFIType>::is_signed && std::numeric_limits<genFIType>::is_integer,
+ "'sign' only accept integer inputs");
+
+ return (x >> 31) | ((unsigned)-x >> 31);
+ }
+
+ template <typename genFIType>
+ GLM_FUNC_QUALIFIER genFIType sign_alu2(genFIType x)
+ {
+ GLM_STATIC_ASSERT(
+ std::numeric_limits<genFIType>::is_signed && std::numeric_limits<genFIType>::is_integer,
+ "'sign' only accept integer inputs");
+
+ return -((unsigned)x >> 31) | (-(unsigned)x >> 31);
+ }
+
+ template <typename genFIType>
+ GLM_FUNC_QUALIFIER genFIType sign_sub(genFIType x)
+ {
+ GLM_STATIC_ASSERT(
+ std::numeric_limits<genFIType>::is_signed && std::numeric_limits<genFIType>::is_integer,
+ "'sign' only accept integer inputs");
+
+ return ((unsigned)-x >> 31) - ((unsigned)x >> 31);
+ }
+
+ template <typename genFIType>
+ GLM_FUNC_QUALIFIER genFIType sign_cmp(genFIType x)
+ {
+ GLM_STATIC_ASSERT(
+ std::numeric_limits<genFIType>::is_signed && std::numeric_limits<genFIType>::is_integer,
+ "'sign' only accept integer inputs");
+
+ return (x > 0) - (x < 0);
+ }
+
+ template <typename genType>
+ struct type
+ {
+ genType Value;
+ genType Return;
+ };
+
+ int test_int32()
+ {
+ type<glm::int32> const Data[] =
+ {
+ { std::numeric_limits<glm::int32>::max(), 1},
+ { std::numeric_limits<glm::int32>::min(), -1},
+ { 0, 0},
+ { 1, 1},
+ { 2, 1},
+ { 3, 1},
+ {-1,-1},
+ {-2,-1},
+ {-3,-1}
+ };
+
+ int Error = 0;
+
+ for(std::size_t i = 0; i < sizeof(Data) / sizeof(type<glm::int32>); ++i)
+ {
+ glm::int32 Result = glm::sign(Data[i].Value);
+ Error += Data[i].Return == Result ? 0 : 1;
+ }
+
+ for(std::size_t i = 0; i < sizeof(Data) / sizeof(type<glm::int32>); ++i)
+ {
+ glm::int32 Result = sign_cmp(Data[i].Value);
+ Error += Data[i].Return == Result ? 0 : 1;
+ }
+
+ for(std::size_t i = 0; i < sizeof(Data) / sizeof(type<glm::int32>); ++i)
+ {
+ glm::int32 Result = sign_if(Data[i].Value);
+ Error += Data[i].Return == Result ? 0 : 1;
+ }
+
+ for(std::size_t i = 0; i < sizeof(Data) / sizeof(type<glm::int32>); ++i)
+ {
+ glm::int32 Result = sign_alu1(Data[i].Value);
+ Error += Data[i].Return == Result ? 0 : 1;
+ }
+
+ for(std::size_t i = 0; i < sizeof(Data) / sizeof(type<glm::int32>); ++i)
+ {
+ glm::int32 Result = sign_alu2(Data[i].Value);
+ Error += Data[i].Return == Result ? 0 : 1;
+ }
+
+ return Error;
+ }
+
+ int test_i32vec4()
+ {
+ type<glm::i32vec4> const Data[] =
+ {
+ {glm::i32vec4( 1), glm::i32vec4( 1)},
+ {glm::i32vec4( 0), glm::i32vec4( 0)},
+ {glm::i32vec4( 2), glm::i32vec4( 1)},
+ {glm::i32vec4( 3), glm::i32vec4( 1)},
+ {glm::i32vec4(-1), glm::i32vec4(-1)},
+ {glm::i32vec4(-2), glm::i32vec4(-1)},
+ {glm::i32vec4(-3), glm::i32vec4(-1)}
+ };
+
+ int Error = 0;
+
+ for(std::size_t i = 0; i < sizeof(Data) / sizeof(type<glm::i32vec4>); ++i)
+ {
+ glm::i32vec4 Result = glm::sign(Data[i].Value);
+ Error += glm::all(glm::equal(Data[i].Return, Result)) ? 0 : 1;
+ }
+
+ return Error;
+ }
+
+ int test_f32vec4()
+ {
+ type<glm::vec4> const Data[] =
+ {
+ {glm::vec4( 1), glm::vec4( 1)},
+ {glm::vec4( 0), glm::vec4( 0)},
+ {glm::vec4( 2), glm::vec4( 1)},
+ {glm::vec4( 3), glm::vec4( 1)},
+ {glm::vec4(-1), glm::vec4(-1)},
+ {glm::vec4(-2), glm::vec4(-1)},
+ {glm::vec4(-3), glm::vec4(-1)}
+ };
+
+ int Error = 0;
+
+ for(std::size_t i = 0; i < sizeof(Data) / sizeof(type<glm::vec4>); ++i)
+ {
+ glm::vec4 Result = glm::sign(Data[i].Value);
+ Error += glm::all(glm::equal(Data[i].Return, Result)) ? 0 : 1;
+ }
+
+ return Error;
+ }
+
+ int test()
+ {
+ int Error = 0;
+
+ Error += test_int32();
+ Error += test_i32vec4();
+ Error += test_f32vec4();
+
+ return Error;
+ }
+
+ int perf_rand(std::size_t Samples)
+ {
+ int Error = 0;
+
+ std::size_t const Count = Samples;
+ std::vector<glm::int32> Input, Output;
+ Input.resize(Count);
+ Output.resize(Count);
+ for(std::size_t i = 0; i < Count; ++i)
+ Input[i] = static_cast<glm::int32>(glm::linearRand(-65536.f, 65536.f));
+
+ std::clock_t Timestamp0 = std::clock();
+
+ for(std::size_t i = 0; i < Count; ++i)
+ Output[i] = sign_cmp(Input[i]);
+
+ std::clock_t Timestamp1 = std::clock();
+
+ for(std::size_t i = 0; i < Count; ++i)
+ Output[i] = sign_if(Input[i]);
+
+ std::clock_t Timestamp2 = std::clock();
+
+ for(std::size_t i = 0; i < Count; ++i)
+ Output[i] = sign_alu1(Input[i]);
+
+ std::clock_t Timestamp3 = std::clock();
+
+ for(std::size_t i = 0; i < Count; ++i)
+ Output[i] = sign_alu2(Input[i]);
+
+ std::clock_t Timestamp4 = std::clock();
+
+ for(std::size_t i = 0; i < Count; ++i)
+ Output[i] = sign_sub(Input[i]);
+
+ std::clock_t Timestamp5 = std::clock();
+
+ for(std::size_t i = 0; i < Count; ++i)
+ Output[i] = glm::sign(Input[i]);
+
+ std::clock_t Timestamp6 = std::clock();
+
+ std::printf("sign_cmp(rand) Time %d clocks\n", static_cast<unsigned int>(Timestamp1 - Timestamp0));
+ std::printf("sign_if(rand) Time %d clocks\n", static_cast<unsigned int>(Timestamp2 - Timestamp1));
+ std::printf("sign_alu1(rand) Time %d clocks\n", static_cast<unsigned int>(Timestamp3 - Timestamp2));
+ std::printf("sign_alu2(rand) Time %d clocks\n", static_cast<unsigned int>(Timestamp4 - Timestamp3));
+ std::printf("sign_sub(rand) Time %d clocks\n", static_cast<unsigned int>(Timestamp5 - Timestamp4));
+ std::printf("glm::sign(rand) Time %d clocks\n", static_cast<unsigned int>(Timestamp6 - Timestamp5));
+
+ return Error;
+ }
+
+ int perf_linear(std::size_t Samples)
+ {
+ int Error = 0;
+
+ std::size_t const Count = Samples;
+ std::vector<glm::int32> Input, Output;
+ Input.resize(Count);
+ Output.resize(Count);
+ for(std::size_t i = 0; i < Count; ++i)
+ Input[i] = static_cast<glm::int32>(i);
+
+ std::clock_t Timestamp0 = std::clock();
+
+ for(std::size_t i = 0; i < Count; ++i)
+ Output[i] = sign_cmp(Input[i]);
+
+ std::clock_t Timestamp1 = std::clock();
+
+ for(std::size_t i = 0; i < Count; ++i)
+ Output[i] = sign_if(Input[i]);
+
+ std::clock_t Timestamp2 = std::clock();
+
+ for(std::size_t i = 0; i < Count; ++i)
+ Output[i] = sign_alu1(Input[i]);
+
+ std::clock_t Timestamp3 = std::clock();
+
+ for(std::size_t i = 0; i < Count; ++i)
+ Output[i] = sign_alu2(Input[i]);
+
+ std::clock_t Timestamp4 = std::clock();
+
+ for(std::size_t i = 0; i < Count; ++i)
+ Output[i] = sign_sub(Input[i]);
+
+ std::clock_t Timestamp5 = std::clock();
+
+ std::printf("sign_cmp(linear) Time %d clocks\n", static_cast<unsigned int>(Timestamp1 - Timestamp0));
+ std::printf("sign_if(linear) Time %d clocks\n", static_cast<unsigned int>(Timestamp2 - Timestamp1));
+ std::printf("sign_alu1(linear) Time %d clocks\n", static_cast<unsigned int>(Timestamp3 - Timestamp2));
+ std::printf("sign_alu2(linear) Time %d clocks\n", static_cast<unsigned int>(Timestamp4 - Timestamp3));
+ std::printf("sign_sub(linear) Time %d clocks\n", static_cast<unsigned int>(Timestamp5 - Timestamp4));
+
+ return Error;
+ }
+
+ int perf_linear_cal(std::size_t Samples)
+ {
+ int Error = 0;
+
+ glm::int32 const Count = static_cast<glm::int32>(Samples);
+
+ std::clock_t Timestamp0 = std::clock();
+ glm::int32 Sum = 0;
+
+ for(glm::int32 i = 1; i < Count; ++i)
+ Sum += sign_cmp(i);
+
+ std::clock_t Timestamp1 = std::clock();
+
+ for(glm::int32 i = 1; i < Count; ++i)
+ Sum += sign_if(i);
+
+ std::clock_t Timestamp2 = std::clock();
+
+ for(glm::int32 i = 1; i < Count; ++i)
+ Sum += sign_alu1(i);
+
+ std::clock_t Timestamp3 = std::clock();
+
+ for(glm::int32 i = 1; i < Count; ++i)
+ Sum += sign_alu2(i);
+
+ std::clock_t Timestamp4 = std::clock();
+
+ for(glm::int32 i = 1; i < Count; ++i)
+ Sum += sign_sub(i);
+
+ std::clock_t Timestamp5 = std::clock();
+
+ std::printf("Sum %d\n", static_cast<unsigned int>(Sum));
+
+ std::printf("sign_cmp(linear_cal) Time %d clocks\n", static_cast<unsigned int>(Timestamp1 - Timestamp0));
+ std::printf("sign_if(linear_cal) Time %d clocks\n", static_cast<unsigned int>(Timestamp2 - Timestamp1));
+ std::printf("sign_alu1(linear_cal) Time %d clocks\n", static_cast<unsigned int>(Timestamp3 - Timestamp2));
+ std::printf("sign_alu2(linear_cal) Time %d clocks\n", static_cast<unsigned int>(Timestamp4 - Timestamp3));
+ std::printf("sign_sub(linear_cal) Time %d clocks\n", static_cast<unsigned int>(Timestamp5 - Timestamp4));
+
+ return Error;
+ }
+
+ int perf(std::size_t Samples)
+ {
+ int Error(0);
+
+ Error += perf_linear_cal(Samples);
+ Error += perf_linear(Samples);
+ Error += perf_rand(Samples);
+
+ return Error;
+ }
+}//namespace sign
+
+namespace frexp_
+{
+ int test()
+ {
+ int Error(0);
+
+ {
+ glm::vec1 x(1024);
+ glm::ivec1 exp;
+ glm::vec1 A = glm::frexp(x, exp);
+ Error += glm::all(glm::epsilonEqual(A, glm::vec1(0.5), 0.00001f)) ? 0 : 1;
+ Error += glm::all(glm::equal(exp, glm::ivec1(11))) ? 0 : 1;
+ }
+
+ {
+ glm::vec2 x(1024, 0.24);
+ glm::ivec2 exp;
+ glm::vec2 A = glm::frexp(x, exp);
+ Error += glm::all(glm::epsilonEqual(A, glm::vec2(0.5, 0.96), 0.00001f)) ? 0 : 1;
+ Error += glm::all(glm::equal(exp, glm::ivec2(11, -2))) ? 0 : 1;
+ }
+
+ {
+ glm::vec3 x(1024, 0.24, 0);
+ glm::ivec3 exp;
+ glm::vec3 A = glm::frexp(x, exp);
+ Error += glm::all(glm::epsilonEqual(A, glm::vec3(0.5, 0.96, 0.0), 0.00001f)) ? 0 : 1;
+ Error += glm::all(glm::equal(exp, glm::ivec3(11, -2, 0))) ? 0 : 1;
+ }
+
+ {
+ glm::vec4 x(1024, 0.24, 0, -1.33);
+ glm::ivec4 exp;
+ glm::vec4 A = glm::frexp(x, exp);
+ Error += glm::all(glm::epsilonEqual(A, glm::vec4(0.5, 0.96, 0.0, -0.665), 0.00001f)) ? 0 : 1;
+ Error += glm::all(glm::equal(exp, glm::ivec4(11, -2, 0, 1))) ? 0 : 1;
+ }
+
+ return Error;
+ }
+}//namespace frexp_
+
+namespace ldexp_
+{
+ int test()
+ {
+ int Error(0);
+
+ {
+ glm::vec1 A = glm::vec1(0.5);
+ glm::ivec1 exp = glm::ivec1(11);
+ glm::vec1 x = glm::ldexp(A, exp);
+ Error += glm::all(glm::epsilonEqual(x, glm::vec1(1024),0.00001f)) ? 0 : 1;
+ }
+
+ {
+ glm::vec2 A = glm::vec2(0.5, 0.96);
+ glm::ivec2 exp = glm::ivec2(11, -2);
+ glm::vec2 x = glm::ldexp(A, exp);
+ Error += glm::all(glm::epsilonEqual(x, glm::vec2(1024, .24),0.00001f)) ? 0 : 1;
+ }
+
+ {
+ glm::vec3 A = glm::vec3(0.5, 0.96, 0.0);
+ glm::ivec3 exp = glm::ivec3(11, -2, 0);
+ glm::vec3 x = glm::ldexp(A, exp);
+ Error += glm::all(glm::epsilonEqual(x, glm::vec3(1024, .24, 0),0.00001f)) ? 0 : 1;
+ }
+
+ {
+ glm::vec4 A = glm::vec4(0.5, 0.96, 0.0, -0.665);
+ glm::ivec4 exp = glm::ivec4(11, -2, 0, 1);
+ glm::vec4 x = glm::ldexp(A, exp);
+ Error += glm::all(glm::epsilonEqual(x, glm::vec4(1024, .24, 0, -1.33),0.00001f)) ? 0 : 1;
+ }
+
+ return Error;
+ }
+}//namespace ldexp_
+
+int main()
+{
+ int Error = 0;
+
+ glm::ivec4 const a(1);
+ glm::ivec4 const b = ~a;
+
+ glm::int32 const c(1);
+ glm::int32 const d = ~c;
+
+# if GLM_ARCH & GLM_ARCH_AVX_BIT && GLM_HAS_UNRESTRICTED_UNIONS
+ glm_vec4 const A = _mm_set_ps(4, 3, 2, 1);
+ glm_vec4 const B = glm_vec4_swizzle_xyzw(A);
+ glm_vec4 const C = _mm_permute_ps(A, _MM_SHUFFLE(3, 2, 1, 0));
+ glm_vec4 const D = _mm_permute_ps(A, _MM_SHUFFLE(0, 1, 2, 3));
+ glm_vec4 const E = _mm_shuffle_ps(A, A, _MM_SHUFFLE(0, 1, 2, 3));
+# endif
+
+ Error += sign::test();
+ Error += floor_::test();
+ Error += mod_::test();
+ Error += modf_::test();
+ Error += floatBitsToInt::test();
+ Error += floatBitsToUint::test();
+ Error += mix_::test();
+ Error += step_::test();
+ Error += max_::test();
+ Error += min_::test();
+ Error += round_::test();
+ Error += roundEven::test();
+ Error += isnan_::test();
+ Error += isinf_::test();
+ Error += frexp_::test();
+ Error += ldexp_::test();
+
+# ifdef NDEBUG
+ std::size_t Samples = 1000;
+ Error += sign::perf(Samples);
+# endif
+
+ return Error;
+}
+
diff --git a/src/third_party/glm/test/core/core_func_exponential.cpp b/src/third_party/glm/test/core/core_func_exponential.cpp
new file mode 100644
index 0000000..665d8df
--- /dev/null
+++ b/src/third_party/glm/test/core/core_func_exponential.cpp
@@ -0,0 +1,128 @@
+#include <glm/common.hpp>
+#include <glm/exponential.hpp>
+#include <glm/gtc/ulp.hpp>
+#include <glm/gtc/vec1.hpp>
+
+int test_pow()
+{
+ int Error(0);
+
+ float A = glm::pow(10.f, 10.f);
+ glm::vec1 B = glm::pow(glm::vec1(10.f), glm::vec1(10.f));
+ glm::vec2 C = glm::pow(glm::vec2(10.f), glm::vec2(10.f));
+ glm::vec3 D = glm::pow(glm::vec3(10.f), glm::vec3(10.f));
+ glm::vec4 E = glm::pow(glm::vec4(10.f), glm::vec4(10.f));
+
+ return Error;
+}
+
+int test_exp()
+{
+ int Error(0);
+
+ float A = glm::exp(10.f);
+ glm::vec1 B = glm::exp(glm::vec1(10.f));
+ glm::vec2 C = glm::exp(glm::vec2(10.f));
+ glm::vec3 D = glm::exp(glm::vec3(10.f));
+ glm::vec4 E = glm::exp(glm::vec4(10.f));
+
+ return Error;
+}
+
+int test_log()
+{
+ int Error(0);
+
+ float A = glm::log(10.f);
+ glm::vec1 B = glm::log(glm::vec1(10.f));
+ glm::vec2 C = glm::log(glm::vec2(10.f));
+ glm::vec3 D = glm::log(glm::vec3(10.f));
+ glm::vec4 E = glm::log(glm::vec4(10.f));
+
+ return Error;
+}
+
+int test_exp2()
+{
+ int Error(0);
+
+ float A = glm::exp2(10.f);
+ glm::vec1 B = glm::exp2(glm::vec1(10.f));
+ glm::vec2 C = glm::exp2(glm::vec2(10.f));
+ glm::vec3 D = glm::exp2(glm::vec3(10.f));
+ glm::vec4 E = glm::exp2(glm::vec4(10.f));
+
+ return Error;
+}
+
+int test_log2()
+{
+ int Error(0);
+
+ float A = glm::log2(10.f);
+ glm::vec1 B = glm::log2(glm::vec1(10.f));
+ glm::vec2 C = glm::log2(glm::vec2(10.f));
+ glm::vec3 D = glm::log2(glm::vec3(10.f));
+ glm::vec4 E = glm::log2(glm::vec4(10.f));
+
+ return Error;
+}
+
+int test_sqrt()
+{
+ int Error(0);
+
+# if GLM_ARCH & GLM_ARCH_SSE2_BIT
+ for(float f = 0.1f; f < 30.0f; f += 0.1f)
+ {
+ float r = _mm_cvtss_f32(_mm_sqrt_ps(_mm_set1_ps(f)));
+ float s = std::sqrt(f);
+ Error += glm::abs(r - s) < 0.01f ? 0 : 1;
+ assert(!Error);
+ }
+# endif//GLM_ARCH & GLM_ARCH_SSE2_BIT
+
+ float A = glm::sqrt(10.f);
+ glm::vec1 B = glm::sqrt(glm::vec1(10.f));
+ glm::vec2 C = glm::sqrt(glm::vec2(10.f));
+ glm::vec3 D = glm::sqrt(glm::vec3(10.f));
+ glm::vec4 E = glm::sqrt(glm::vec4(10.f));
+
+ return Error;
+}
+
+int test_inversesqrt()
+{
+ int Error(0);
+
+ glm::uint ulp(0);
+ float diff(0.0f);
+
+ for(float f = 0.001f; f < 10.f; f *= 1.001f)
+ {
+ glm::lowp_fvec1 u(f);
+ glm::lowp_fvec1 lowp_v = glm::inversesqrt(u);
+ float defaultp_v = glm::inversesqrt(f);
+
+ ulp = glm::max(glm::float_distance(lowp_v.x, defaultp_v), ulp);
+ diff = glm::abs(lowp_v.x - defaultp_v);
+ }
+
+ return Error;
+}
+
+int main()
+{
+ int Error(0);
+
+ Error += test_pow();
+ Error += test_exp();
+ Error += test_log();
+ Error += test_exp2();
+ Error += test_log2();
+ Error += test_sqrt();
+ Error += test_inversesqrt();
+
+ return Error;
+}
+
diff --git a/src/third_party/glm/test/core/core_func_geometric.cpp b/src/third_party/glm/test/core/core_func_geometric.cpp
new file mode 100644
index 0000000..5c3379c
--- /dev/null
+++ b/src/third_party/glm/test/core/core_func_geometric.cpp
@@ -0,0 +1,193 @@
+#include <glm/geometric.hpp>
+#include <glm/vector_relational.hpp>
+#include <glm/gtc/epsilon.hpp>
+#include <glm/gtc/vec1.hpp>
+#include <limits>
+
+namespace length
+{
+ int test()
+ {
+ float Length1 = glm::length(glm::vec1(1));
+ float Length2 = glm::length(glm::vec2(1, 0));
+ float Length3 = glm::length(glm::vec3(1, 0, 0));
+ float Length4 = glm::length(glm::vec4(1, 0, 0, 0));
+
+ int Error = 0;
+
+ Error += glm::abs(Length1 - 1.0f) < std::numeric_limits<float>::epsilon() ? 0 : 1;
+ Error += glm::abs(Length2 - 1.0f) < std::numeric_limits<float>::epsilon() ? 0 : 1;
+ Error += glm::abs(Length3 - 1.0f) < std::numeric_limits<float>::epsilon() ? 0 : 1;
+ Error += glm::abs(Length4 - 1.0f) < std::numeric_limits<float>::epsilon() ? 0 : 1;
+
+ return Error;
+ }
+}//namespace length
+
+namespace distance
+{
+ int test()
+ {
+ float Distance1 = glm::distance(glm::vec1(1), glm::vec1(1));
+ float Distance2 = glm::distance(glm::vec2(1, 0), glm::vec2(1, 0));
+ float Distance3 = glm::distance(glm::vec3(1, 0, 0), glm::vec3(1, 0, 0));
+ float Distance4 = glm::distance(glm::vec4(1, 0, 0, 0), glm::vec4(1, 0, 0, 0));
+
+ int Error = 0;
+
+ Error += glm::abs(Distance1) < std::numeric_limits<float>::epsilon() ? 0 : 1;
+ Error += glm::abs(Distance2) < std::numeric_limits<float>::epsilon() ? 0 : 1;
+ Error += glm::abs(Distance3) < std::numeric_limits<float>::epsilon() ? 0 : 1;
+ Error += glm::abs(Distance4) < std::numeric_limits<float>::epsilon() ? 0 : 1;
+
+ return Error;
+ }
+}//namespace distance
+
+namespace dot
+{
+ int test()
+ {
+ float Dot1 = glm::dot(glm::vec1(1), glm::vec1(1));
+ float Dot2 = glm::dot(glm::vec2(1), glm::vec2(1));
+ float Dot3 = glm::dot(glm::vec3(1), glm::vec3(1));
+ float Dot4 = glm::dot(glm::vec4(1), glm::vec4(1));
+
+ int Error = 0;
+
+ Error += glm::abs(Dot1 - 1.0f) < std::numeric_limits<float>::epsilon() ? 0 : 1;
+ Error += glm::abs(Dot2 - 2.0f) < std::numeric_limits<float>::epsilon() ? 0 : 1;
+ Error += glm::abs(Dot3 - 3.0f) < std::numeric_limits<float>::epsilon() ? 0 : 1;
+ Error += glm::abs(Dot4 - 4.0f) < std::numeric_limits<float>::epsilon() ? 0 : 1;
+
+ return Error;
+ }
+}//namespace dot
+
+namespace cross
+{
+ int test()
+ {
+ glm::vec3 Cross1 = glm::cross(glm::vec3(1, 0, 0), glm::vec3(0, 1, 0));
+ glm::vec3 Cross2 = glm::cross(glm::vec3(0, 1, 0), glm::vec3(1, 0, 0));
+
+ int Error = 0;
+
+ Error += glm::all(glm::lessThan(glm::abs(Cross1 - glm::vec3(0, 0, 1)), glm::vec3(std::numeric_limits<float>::epsilon()))) ? 0 : 1;
+ Error += glm::all(glm::lessThan(glm::abs(Cross2 - glm::vec3(0, 0,-1)), glm::vec3(std::numeric_limits<float>::epsilon()))) ? 0 : 1;
+
+ return Error;
+ }
+}//namespace cross
+
+namespace normalize
+{
+ int test()
+ {
+ glm::vec3 Normalize1 = glm::normalize(glm::vec3(1, 0, 0));
+ glm::vec3 Normalize2 = glm::normalize(glm::vec3(2, 0, 0));
+
+ glm::vec3 Normalize3 = glm::normalize(glm::vec3(-0.6, 0.7, -0.5));
+
+ glm::vec3 ro = glm::vec3(glm::cos(5.f) * 3.f, 2.f, glm::sin(5.f) * 3.f);
+ glm::vec3 w = glm::normalize(glm::vec3(0, -0.2f, 0) - ro);
+ glm::vec3 u = glm::normalize(glm::cross(w, glm::vec3(0, 1, 0)));
+ glm::vec3 v = glm::cross(u, w);
+
+ int Error = 0;
+
+ Error += glm::all(glm::lessThan(glm::abs(Normalize1 - glm::vec3(1, 0, 0)), glm::vec3(std::numeric_limits<float>::epsilon()))) ? 0 : 1;
+ Error += glm::all(glm::lessThan(glm::abs(Normalize2 - glm::vec3(1, 0, 0)), glm::vec3(std::numeric_limits<float>::epsilon()))) ? 0 : 1;
+
+ return Error;
+ }
+}//namespace normalize
+
+namespace faceforward
+{
+ int test()
+ {
+ int Error = 0;
+
+ {
+ glm::vec3 N(0.0f, 0.0f, 1.0f);
+ glm::vec3 I(1.0f, 0.0f, 1.0f);
+ glm::vec3 Nref(0.0f, 0.0f, 1.0f);
+ glm::vec3 F = glm::faceforward(N, I, Nref);
+ }
+
+ return Error;
+ }
+}//namespace faceforward
+
+namespace reflect
+{
+ int test()
+ {
+ int Error = 0;
+
+ {
+ glm::vec2 A(1.0f,-1.0f);
+ glm::vec2 B(0.0f, 1.0f);
+ glm::vec2 C = glm::reflect(A, B);
+ Error += C == glm::vec2(1.0, 1.0) ? 0 : 1;
+ }
+
+ {
+ glm::dvec2 A(1.0f,-1.0f);
+ glm::dvec2 B(0.0f, 1.0f);
+ glm::dvec2 C = glm::reflect(A, B);
+ Error += C == glm::dvec2(1.0, 1.0) ? 0 : 1;
+ }
+
+ return Error;
+ }
+}//namespace reflect
+
+namespace refract
+{
+ int test()
+ {
+ int Error = 0;
+
+ {
+ float A(-1.0f);
+ float B(1.0f);
+ float C = glm::refract(A, B, 0.5f);
+ Error += C == -1.0f ? 0 : 1;
+ }
+
+ {
+ glm::vec2 A(0.0f,-1.0f);
+ glm::vec2 B(0.0f, 1.0f);
+ glm::vec2 C = glm::refract(A, B, 0.5f);
+ Error += glm::all(glm::epsilonEqual(C, glm::vec2(0.0, -1.0), 0.0001f)) ? 0 : 1;
+ }
+
+ {
+ glm::dvec2 A(0.0f,-1.0f);
+ glm::dvec2 B(0.0f, 1.0f);
+ glm::dvec2 C = glm::refract(A, B, 0.5);
+ Error += C == glm::dvec2(0.0, -1.0) ? 0 : 1;
+ }
+
+ return Error;
+ }
+}//namespace refract
+
+int main()
+{
+ int Error(0);
+
+ Error += length::test();
+ Error += distance::test();
+ Error += dot::test();
+ Error += cross::test();
+ Error += normalize::test();
+ Error += faceforward::test();
+ Error += reflect::test();
+ Error += refract::test();
+
+ return Error;
+}
+
diff --git a/src/third_party/glm/test/core/core_func_integer.cpp b/src/third_party/glm/test/core/core_func_integer.cpp
new file mode 100644
index 0000000..c44153d
--- /dev/null
+++ b/src/third_party/glm/test/core/core_func_integer.cpp
@@ -0,0 +1,1554 @@
+#include <glm/integer.hpp>
+#include <glm/vector_relational.hpp>
+#include <glm/gtc/vec1.hpp>
+#include <vector>
+#include <ctime>
+#include <cstdio>
+
+enum result
+{
+ SUCCESS,
+ FAIL,
+ ASSERT,
+ STATIC_ASSERT
+};
+
+namespace bitfieldInsert
+{
+ template <typename genType, typename sizeType>
+ struct type
+ {
+ genType Base;
+ genType Insert;
+ sizeType Offset;
+ sizeType Bits;
+ genType Return;
+ };
+
+ typedef type<glm::uint, glm::uint> typeU32;
+
+ typeU32 const Data32[] =
+ {
+ {0x00000000, 0xffffffff, 0, 32, 0xffffffff},
+ {0x00000000, 0xffffffff, 0, 31, 0x7fffffff},
+ {0x00000000, 0xffffffff, 0, 0, 0x00000000},
+ {0xff000000, 0x0000ff00, 8, 8, 0xff00ff00},
+ {0xffff0000, 0x0000ffff, 16, 16, 0x00000000},
+ {0x0000ffff, 0xffff0000, 16, 16, 0xffffffff}
+ };
+
+ int test()
+ {
+ int Error = 0;
+ glm::uint count = sizeof(Data32) / sizeof(typeU32);
+
+ for(glm::uint i = 0; i < count; ++i)
+ {
+ glm::uint Return = glm::bitfieldInsert(
+ Data32[i].Base,
+ Data32[i].Insert,
+ Data32[i].Offset,
+ Data32[i].Bits);
+
+ Error += Data32[i].Return == Return ? 0 : 1;
+ }
+
+ return Error;
+ }
+}//bitfieldInsert
+
+namespace bitfieldExtract
+{
+ template <typename genType, typename sizeType>
+ struct type
+ {
+ genType Value;
+ sizeType Offset;
+ sizeType Bits;
+ genType Return;
+ result Result;
+ };
+
+ typedef type<glm::uint, glm::uint> typeU32;
+
+ typeU32 const Data32[] =
+ {
+ {0xffffffff, 0,32, 0xffffffff, SUCCESS},
+ {0xffffffff, 8, 0, 0x00000000, SUCCESS},
+ {0x00000000, 0,32, 0x00000000, SUCCESS},
+ {0x0f0f0f0f, 0,32, 0x0f0f0f0f, SUCCESS},
+ {0x00000000, 8, 0, 0x00000000, SUCCESS},
+ {0x80000000,31, 1, 0x00000001, SUCCESS},
+ {0x7fffffff,31, 1, 0x00000000, SUCCESS},
+ {0x00000300, 8, 8, 0x00000003, SUCCESS},
+ {0x0000ff00, 8, 8, 0x000000ff, SUCCESS},
+ {0xfffffff0, 0, 5, 0x00000010, SUCCESS},
+ {0x000000ff, 1, 3, 0x00000007, SUCCESS},
+ {0x000000ff, 0, 3, 0x00000007, SUCCESS},
+ {0x00000000, 0, 2, 0x00000000, SUCCESS},
+ {0xffffffff, 0, 8, 0x000000ff, SUCCESS},
+ {0xffff0000,16,16, 0x0000ffff, SUCCESS},
+ {0xfffffff0, 0, 8, 0x00000000, FAIL},
+ {0xffffffff,16,16, 0x00000000, FAIL},
+ //{0xffffffff,32, 1, 0x00000000, ASSERT}, // Throw an assert
+ //{0xffffffff, 0,33, 0x00000000, ASSERT}, // Throw an assert
+ //{0xffffffff,16,16, 0x00000000, ASSERT}, // Throw an assert
+ };
+
+ int test()
+ {
+ int Error = 0;
+
+ glm::uint count = sizeof(Data32) / sizeof(typeU32);
+
+ for(glm::uint i = 0; i < count; ++i)
+ {
+ glm::uint Return = glm::bitfieldExtract(
+ Data32[i].Value,
+ Data32[i].Offset,
+ Data32[i].Bits);
+
+ bool Compare = Data32[i].Return == Return;
+
+ if(Data32[i].Result == SUCCESS && Compare)
+ continue;
+ else if(Data32[i].Result == FAIL && !Compare)
+ continue;
+
+ Error += 1;
+ }
+
+ return Error;
+ }
+}//extractField
+
+namespace bitfieldReverse
+{
+/*
+ GLM_FUNC_QUALIFIER unsigned int bitfieldReverseLoop(unsigned int v)
+ {
+ unsigned int Result(0);
+ unsigned int const BitSize = static_cast<unsigned int>(sizeof(unsigned int) * 8);
+ for(unsigned int i = 0; i < BitSize; ++i)
+ {
+ unsigned int const BitSet(v & (static_cast<unsigned int>(1) << i));
+ unsigned int const BitFirst(BitSet >> i);
+ Result |= BitFirst << (BitSize - 1 - i);
+ }
+ return Result;
+ }
+
+ GLM_FUNC_QUALIFIER glm::uint64_t bitfieldReverseLoop(glm::uint64_t v)
+ {
+ glm::uint64_t Result(0);
+ glm::uint64_t const BitSize = static_cast<glm::uint64_t>(sizeof(unsigned int) * 8);
+ for(glm::uint64_t i = 0; i < BitSize; ++i)
+ {
+ glm::uint64_t const BitSet(v & (static_cast<glm::uint64_t>(1) << i));
+ glm::uint64_t const BitFirst(BitSet >> i);
+ Result |= BitFirst << (BitSize - 1 - i);
+ }
+ return Result;
+ }
+*/
+ template <typename T, glm::precision P, template <typename, glm::precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> bitfieldReverseLoop(vecType<T, P> const & v)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, "'bitfieldReverse' only accept integer values");
+
+ vecType<T, P> Result(0);
+ T const BitSize = static_cast<T>(sizeof(T) * 8);
+ for(T i = 0; i < BitSize; ++i)
+ {
+ vecType<T, P> const BitSet(v & (static_cast<T>(1) << i));
+ vecType<T, P> const BitFirst(BitSet >> i);
+ Result |= BitFirst << (BitSize - 1 - i);
+ }
+ return Result;
+ }
+
+ template <typename T>
+ GLM_FUNC_QUALIFIER T bitfieldReverseLoop(T v)
+ {
+ return bitfieldReverseLoop(glm::tvec1<T>(v)).x;
+ }
+
+ GLM_FUNC_QUALIFIER glm::uint32_t bitfieldReverseUint32(glm::uint32_t x)
+ {
+ x = (x & 0x55555555) << 1 | (x & 0xAAAAAAAA) >> 1;
+ x = (x & 0x33333333) << 2 | (x & 0xCCCCCCCC) >> 2;
+ x = (x & 0x0F0F0F0F) << 4 | (x & 0xF0F0F0F0) >> 4;
+ x = (x & 0x00FF00FF) << 8 | (x & 0xFF00FF00) >> 8;
+ x = (x & 0x0000FFFF) << 16 | (x & 0xFFFF0000) >> 16;
+ return x;
+ }
+
+ GLM_FUNC_QUALIFIER glm::uint64_t bitfieldReverseUint64(glm::uint64_t x)
+ {
+ x = (x & 0x5555555555555555) << 1 | (x & 0xAAAAAAAAAAAAAAAA) >> 1;
+ x = (x & 0x3333333333333333) << 2 | (x & 0xCCCCCCCCCCCCCCCC) >> 2;
+ x = (x & 0x0F0F0F0F0F0F0F0F) << 4 | (x & 0xF0F0F0F0F0F0F0F0) >> 4;
+ x = (x & 0x00FF00FF00FF00FF) << 8 | (x & 0xFF00FF00FF00FF00) >> 8;
+ x = (x & 0x0000FFFF0000FFFF) << 16 | (x & 0xFFFF0000FFFF0000) >> 16;
+ x = (x & 0x00000000FFFFFFFF) << 32 | (x & 0xFFFFFFFF00000000) >> 32;
+ return x;
+ }
+
+ template <bool EXEC = false>
+ struct compute_bitfieldReverseStep
+ {
+ template <typename T, glm::precision P, template <class, glm::precision> class vecType>
+ GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & v, T, T)
+ {
+ return v;
+ }
+ };
+
+ template <>
+ struct compute_bitfieldReverseStep<true>
+ {
+ template <typename T, glm::precision P, template <class, glm::precision> class vecType>
+ GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & v, T Mask, T Shift)
+ {
+ return (v & Mask) << Shift | (v & (~Mask)) >> Shift;
+ }
+ };
+
+ template <typename T, glm::precision P, template <typename, glm::precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> bitfieldReverseOps(vecType<T, P> const & v)
+ {
+ vecType<T, P> x(v);
+ x = compute_bitfieldReverseStep<sizeof(T) * 8 >= 2>::call(x, T(0x5555555555555555ull), static_cast<T>( 1));
+ x = compute_bitfieldReverseStep<sizeof(T) * 8 >= 4>::call(x, T(0x3333333333333333ull), static_cast<T>( 2));
+ x = compute_bitfieldReverseStep<sizeof(T) * 8 >= 8>::call(x, T(0x0F0F0F0F0F0F0F0Full), static_cast<T>( 4));
+ x = compute_bitfieldReverseStep<sizeof(T) * 8 >= 16>::call(x, T(0x00FF00FF00FF00FFull), static_cast<T>( 8));
+ x = compute_bitfieldReverseStep<sizeof(T) * 8 >= 32>::call(x, T(0x0000FFFF0000FFFFull), static_cast<T>(16));
+ x = compute_bitfieldReverseStep<sizeof(T) * 8 >= 64>::call(x, T(0x00000000FFFFFFFFull), static_cast<T>(32));
+ return x;
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType bitfieldReverseOps(genType x)
+ {
+ return bitfieldReverseOps(glm::tvec1<genType, glm::defaultp>(x)).x;
+ }
+
+ template <typename genType>
+ struct type
+ {
+ genType Value;
+ genType Return;
+ result Result;
+ };
+
+ typedef type<glm::uint> typeU32;
+
+ typeU32 const Data32[] =
+ {
+ {0x00000001, 0x80000000, SUCCESS},
+ {0x0000000f, 0xf0000000, SUCCESS},
+ {0x000000ff, 0xff000000, SUCCESS},
+ {0xf0000000, 0x0000000f, SUCCESS},
+ {0xff000000, 0x000000ff, SUCCESS},
+ {0xffffffff, 0xffffffff, SUCCESS},
+ {0x00000000, 0x00000000, SUCCESS}
+ };
+
+ typedef type<glm::uint64> typeU64;
+
+#if(((GLM_COMPILER & GLM_COMPILER_GCC) == GLM_COMPILER_GCC) && (GLM_COMPILER < GLM_COMPILER_GCC44))
+ typeU64 const Data64[] =
+ {
+ {0xf000000000000000LLU, 0x000000000000000fLLU, SUCCESS},
+ {0xffffffffffffffffLLU, 0xffffffffffffffffLLU, SUCCESS},
+ {0x0000000000000000LLU, 0x0000000000000000LLU, SUCCESS}
+ };
+#else
+ typeU64 const Data64[] =
+ {
+ {0x00000000000000ff, 0xff00000000000000, SUCCESS},
+ {0x000000000000000f, 0xf000000000000000, SUCCESS},
+ {0xf000000000000000, 0x000000000000000f, SUCCESS},
+ {0xffffffffffffffff, 0xffffffffffffffff, SUCCESS},
+ {0x0000000000000000, 0x0000000000000000, SUCCESS}
+ };
+#endif
+
+ int test32_bitfieldReverse()
+ {
+ int Error = 0;
+ std::size_t const Count = sizeof(Data32) / sizeof(typeU32);
+
+ for(std::size_t i = 0; i < Count; ++i)
+ {
+ glm::uint Return = glm::bitfieldReverse(Data32[i].Value);
+
+ bool Compare = Data32[i].Return == Return;
+
+ if(Data32[i].Result == SUCCESS)
+ Error += Compare ? 0 : 1;
+ else
+ Error += Compare ? 1 : 0;
+ }
+
+ return Error;
+ }
+
+ int test32_bitfieldReverseLoop()
+ {
+ int Error = 0;
+ std::size_t const Count = sizeof(Data32) / sizeof(typeU32);
+
+ for(std::size_t i = 0; i < Count; ++i)
+ {
+ glm::uint Return = bitfieldReverseLoop(Data32[i].Value);
+
+ bool Compare = Data32[i].Return == Return;
+
+ if(Data32[i].Result == SUCCESS)
+ Error += Compare ? 0 : 1;
+ else
+ Error += Compare ? 1 : 0;
+ }
+
+ return Error;
+ }
+
+ int test32_bitfieldReverseUint32()
+ {
+ int Error = 0;
+ std::size_t const Count = sizeof(Data32) / sizeof(typeU32);
+
+ for(std::size_t i = 0; i < Count; ++i)
+ {
+ glm::uint Return = bitfieldReverseUint32(Data32[i].Value);
+
+ bool Compare = Data32[i].Return == Return;
+
+ if(Data32[i].Result == SUCCESS)
+ Error += Compare ? 0 : 1;
+ else
+ Error += Compare ? 1 : 0;
+ }
+
+ return Error;
+ }
+
+ int test32_bitfieldReverseOps()
+ {
+ int Error = 0;
+ std::size_t const Count = sizeof(Data32) / sizeof(typeU32);
+
+ for(std::size_t i = 0; i < Count; ++i)
+ {
+ glm::uint Return = bitfieldReverseOps(Data32[i].Value);
+
+ bool Compare = Data32[i].Return == Return;
+
+ if(Data32[i].Result == SUCCESS)
+ Error += Compare ? 0 : 1;
+ else
+ Error += Compare ? 1 : 0;
+ }
+
+ return Error;
+ }
+
+ int test64_bitfieldReverse()
+ {
+ int Error = 0;
+ std::size_t const Count = sizeof(Data64) / sizeof(typeU64);
+
+ for(std::size_t i = 0; i < Count; ++i)
+ {
+ glm::uint64 Return = glm::bitfieldReverse(Data64[i].Value);
+
+ bool Compare = Data64[i].Return == Return;
+
+ if(Data64[i].Result == SUCCESS)
+ Error += Compare ? 0 : 1;
+ else
+ Error += Compare ? 1 : 0;
+ }
+
+ return Error;
+ }
+
+ int test64_bitfieldReverseLoop()
+ {
+ int Error = 0;
+ std::size_t const Count = sizeof(Data64) / sizeof(typeU64);
+
+ for(std::size_t i = 0; i < Count; ++i)
+ {
+ glm::uint64 Return = bitfieldReverseLoop(Data64[i].Value);
+
+ bool Compare = Data64[i].Return == Return;
+
+ if(Data32[i].Result == SUCCESS)
+ Error += Compare ? 0 : 1;
+ else
+ Error += Compare ? 1 : 0;
+ }
+
+ return Error;
+ }
+
+ int test64_bitfieldReverseUint64()
+ {
+ int Error = 0;
+ std::size_t const Count = sizeof(Data64) / sizeof(typeU64);
+
+ for(std::size_t i = 0; i < Count; ++i)
+ {
+ glm::uint64 Return = bitfieldReverseUint64(Data64[i].Value);
+
+ bool Compare = Data64[i].Return == Return;
+
+ if(Data64[i].Result == SUCCESS)
+ Error += Compare ? 0 : 1;
+ else
+ Error += Compare ? 1 : 0;
+ }
+
+ return Error;
+ }
+
+ int test64_bitfieldReverseOps()
+ {
+ int Error = 0;
+ std::size_t const Count = sizeof(Data64) / sizeof(typeU64);
+
+ for(std::size_t i = 0; i < Count; ++i)
+ {
+ glm::uint64 Return = bitfieldReverseOps(Data64[i].Value);
+
+ bool Compare = Data64[i].Return == Return;
+
+ if(Data64[i].Result == SUCCESS)
+ Error += Compare ? 0 : 1;
+ else
+ Error += Compare ? 1 : 0;
+ }
+
+ return Error;
+ }
+
+ int test()
+ {
+ int Error = 0;
+
+ Error += test32_bitfieldReverse();
+ Error += test32_bitfieldReverseLoop();
+ Error += test32_bitfieldReverseUint32();
+ Error += test32_bitfieldReverseOps();
+
+ Error += test64_bitfieldReverse();
+ Error += test64_bitfieldReverseLoop();
+ Error += test64_bitfieldReverseUint64();
+ Error += test64_bitfieldReverseOps();
+
+ return Error;
+ }
+
+ int perf32(glm::uint32 Count)
+ {
+ int Error = 0;
+
+ std::vector<glm::uint32> Data;
+ Data.resize(static_cast<std::size_t>(Count));
+
+ std::clock_t Timestamps0 = std::clock();
+
+ for(glm::uint32 k = 0; k < Count; ++k)
+ Data[k] = glm::bitfieldReverse(k);
+
+ std::clock_t Timestamps1 = std::clock();
+
+ for(glm::uint32 k = 0; k < Count; ++k)
+ Data[k] = bitfieldReverseLoop(k);
+
+ std::clock_t Timestamps2 = std::clock();
+
+ for(glm::uint32 k = 0; k < Count; ++k)
+ Data[k] = bitfieldReverseUint32(k);
+
+ std::clock_t Timestamps3 = std::clock();
+
+ for(glm::uint32 k = 0; k < Count; ++k)
+ Data[k] = bitfieldReverseOps(k);
+
+ std::clock_t Timestamps4 = std::clock();
+
+ std::printf("glm::bitfieldReverse: %d clocks\n", static_cast<unsigned int>(Timestamps1 - Timestamps0));
+ std::printf("bitfieldReverseLoop: %d clocks\n", static_cast<unsigned int>(Timestamps2 - Timestamps1));
+ std::printf("bitfieldReverseUint32: %d clocks\n", static_cast<unsigned int>(Timestamps3 - Timestamps2));
+ std::printf("bitfieldReverseOps: %d clocks\n", static_cast<unsigned int>(Timestamps4 - Timestamps3));
+
+ return Error;
+ }
+
+ int perf64(glm::uint64 Count)
+ {
+ int Error = 0;
+
+ std::vector<glm::uint64> Data;
+ Data.resize(static_cast<std::size_t>(Count));
+
+ std::clock_t Timestamps0 = std::clock();
+
+ for(glm::uint32 k = 0; k < Count; ++k)
+ Data[k] = glm::bitfieldReverse(k);
+
+ std::clock_t Timestamps1 = std::clock();
+
+ for(glm::uint64 k = 0; k < Count; ++k)
+ Data[k] = bitfieldReverseLoop(k);
+
+ std::clock_t Timestamps2 = std::clock();
+
+ for(glm::uint64 k = 0; k < Count; ++k)
+ Data[k] = bitfieldReverseUint64(k);
+
+ std::clock_t Timestamps3 = std::clock();
+
+ for(glm::uint64 k = 0; k < Count; ++k)
+ Data[k] = bitfieldReverseOps(k);
+
+ std::clock_t Timestamps4 = std::clock();
+
+ std::printf("glm::bitfieldReverse - 64: %d clocks\n", static_cast<unsigned int>(Timestamps1 - Timestamps0));
+ std::printf("bitfieldReverseLoop - 64: %d clocks\n", static_cast<unsigned int>(Timestamps2 - Timestamps1));
+ std::printf("bitfieldReverseUint - 64: %d clocks\n", static_cast<unsigned int>(Timestamps3 - Timestamps2));
+ std::printf("bitfieldReverseOps - 64: %d clocks\n", static_cast<unsigned int>(Timestamps4 - Timestamps3));
+
+ return Error;
+ }
+
+ int perf(std::size_t Samples)
+ {
+ int Error = 0;
+
+ Error += perf32(static_cast<glm::uint32>(Samples));
+ Error += perf64(static_cast<glm::uint64>(Samples));
+
+ return Error;
+ }
+}//bitfieldReverse
+
+namespace findMSB
+{
+ template <typename genType, typename retType>
+ struct type
+ {
+ genType Value;
+ retType Return;
+ };
+
+# if GLM_HAS_BITSCAN_WINDOWS
+ template <typename genIUType>
+ GLM_FUNC_QUALIFIER int findMSB_intrinsic(genIUType Value)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, "'findMSB' only accept integer values");
+
+ if(Value == 0)
+ return -1;
+
+ unsigned long Result(0);
+ _BitScanReverse(&Result, Value);
+ return int(Result);
+ }
+# endif//GLM_HAS_BITSCAN_WINDOWS
+
+# if GLM_ARCH & GLM_ARCH_AVX && GLM_COMPILER & GLM_COMPILER_VC
+ template <typename genIUType>
+ GLM_FUNC_QUALIFIER int findMSB_avx(genIUType Value)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, "'findMSB' only accept integer values");
+
+ if(Value == 0)
+ return -1;
+
+ return int(_tzcnt_u32(Value));
+ }
+# endif//GLM_ARCH & GLM_ARCH_AVX && GLM_PLATFORM & GLM_PLATFORM_WINDOWS
+
+ template <typename genIUType>
+ GLM_FUNC_QUALIFIER int findMSB_095(genIUType Value)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, "'findMSB' only accept integer values");
+
+ if(Value == genIUType(0) || Value == genIUType(-1))
+ return -1;
+ else if(Value > 0)
+ {
+ genIUType Bit = genIUType(-1);
+ for(genIUType tmp = Value; tmp > 0; tmp >>= 1, ++Bit){}
+ return Bit;
+ }
+ else //if(Value < 0)
+ {
+ int const BitCount(sizeof(genIUType) * 8);
+ int MostSignificantBit(-1);
+ for(int BitIndex(0); BitIndex < BitCount; ++BitIndex)
+ MostSignificantBit = (Value & (1 << BitIndex)) ? MostSignificantBit : BitIndex;
+ assert(MostSignificantBit >= 0);
+ return MostSignificantBit;
+ }
+ }
+
+ template <typename genIUType>
+ GLM_FUNC_QUALIFIER int findMSB_nlz1(genIUType x)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, "'findMSB' only accept integer values");
+
+ if (x == 0)
+ return -1;
+
+ int n = 0;
+ if (x <= 0x0000FFFF) {n = n +16; x = x <<16;}
+ if (x <= 0x00FFFFFF) {n = n + 8; x = x << 8;}
+ if (x <= 0x0FFFFFFF) {n = n + 4; x = x << 4;}
+ if (x <= 0x3FFFFFFF) {n = n + 2; x = x << 2;}
+ if (x <= 0x7FFFFFFF) {n = n + 1;}
+ return 31 - n;
+ }
+
+ int findMSB_nlz2(unsigned int x)
+ {
+ unsigned y;
+ int n;
+
+ n = 32;
+ y = x >>16; if (y != 0) {n = n -16; x = y;}
+ y = x >> 8; if (y != 0) {n = n - 8; x = y;}
+ y = x >> 4; if (y != 0) {n = n - 4; x = y;}
+ y = x >> 2; if (y != 0) {n = n - 2; x = y;}
+ y = x >> 1; if (y != 0) return n - 2;
+ return 32 - (n - x);
+ }
+
+ int findMSB_pop(unsigned int x)
+ {
+ x = x | (x >> 1);
+ x = x | (x >> 2);
+ x = x | (x >> 4);
+ x = x | (x >> 8);
+ x = x | (x >>16);
+ return 31 - glm::bitCount(~x);
+ }
+
+ int perf_int(std::size_t Count)
+ {
+ type<int, int> const Data[] =
+ {
+ {0x00000000, -1},
+ {0x00000001, 0},
+ {0x00000002, 1},
+ {0x00000003, 1},
+ {0x00000004, 2},
+ {0x00000005, 2},
+ {0x00000007, 2},
+ {0x00000008, 3},
+ {0x00000010, 4},
+ {0x00000020, 5},
+ {0x00000040, 6},
+ {0x00000080, 7},
+ {0x00000100, 8},
+ {0x00000200, 9},
+ {0x00000400, 10},
+ {0x00000800, 11},
+ {0x00001000, 12},
+ {0x00002000, 13},
+ {0x00004000, 14},
+ {0x00008000, 15},
+ {0x00010000, 16},
+ {0x00020000, 17},
+ {0x00040000, 18},
+ {0x00080000, 19},
+ {0x00100000, 20},
+ {0x00200000, 21},
+ {0x00400000, 22},
+ {0x00800000, 23},
+ {0x01000000, 24},
+ {0x02000000, 25},
+ {0x04000000, 26},
+ {0x08000000, 27},
+ {0x10000000, 28},
+ {0x20000000, 29},
+ {0x40000000, 30}
+ };
+
+ int Error(0);
+
+ std::clock_t Timestamps0 = std::clock();
+
+ for(std::size_t k = 0; k < Count; ++k)
+ for(std::size_t i = 0; i < sizeof(Data) / sizeof(type<int, int>); ++i)
+ {
+ int Result = glm::findMSB(Data[i].Value);
+ Error += Data[i].Return == Result ? 0 : 1;
+ }
+
+ std::clock_t Timestamps1 = std::clock();
+
+ for(std::size_t k = 0; k < Count; ++k)
+ for(std::size_t i = 0; i < sizeof(Data) / sizeof(type<int, int>); ++i)
+ {
+ int Result = findMSB_nlz1(Data[i].Value);
+ Error += Data[i].Return == Result ? 0 : 1;
+ }
+
+ std::clock_t Timestamps2 = std::clock();
+
+ for(std::size_t k = 0; k < Count; ++k)
+ for(std::size_t i = 0; i < sizeof(Data) / sizeof(type<int, int>); ++i)
+ {
+ int Result = findMSB_nlz2(Data[i].Value);
+ Error += Data[i].Return == Result ? 0 : 1;
+ }
+
+ std::clock_t Timestamps3 = std::clock();
+
+ for(std::size_t k = 0; k < Count; ++k)
+ for(std::size_t i = 0; i < sizeof(Data) / sizeof(type<int, int>); ++i)
+ {
+ int Result = findMSB_095(Data[i].Value);
+ Error += Data[i].Return == Result ? 0 : 1;
+ }
+
+ std::clock_t Timestamps4 = std::clock();
+
+# if GLM_HAS_BITSCAN_WINDOWS
+ for(std::size_t k = 0; k < Count; ++k)
+ for(std::size_t i = 0; i < sizeof(Data) / sizeof(type<int, int>); ++i)
+ {
+ int Result = findMSB_intrinsic(Data[i].Value);
+ Error += Data[i].Return == Result ? 0 : 1;
+ }
+# endif//GLM_HAS_BITSCAN_WINDOWS
+
+ std::clock_t Timestamps5 = std::clock();
+
+ for(std::size_t k = 0; k < Count; ++k)
+ for(std::size_t i = 0; i < sizeof(Data) / sizeof(type<int, int>); ++i)
+ {
+ int Result = findMSB_pop(Data[i].Value);
+ Error += Data[i].Return == Result ? 0 : 1;
+ }
+
+ std::clock_t Timestamps6 = std::clock();
+
+# if GLM_ARCH & GLM_ARCH_AVX && GLM_COMPILER & GLM_COMPILER_VC
+ for(std::size_t k = 0; k < Count; ++k)
+ for(std::size_t i = 0; i < sizeof(Data) / sizeof(type<int, int>); ++i)
+ {
+ int Result = findMSB_avx(Data[i].Value);
+ Error += Data[i].Return == Result ? 0 : 1;
+ }
+# endif
+
+ std::clock_t Timestamps7 = std::clock();
+
+ std::printf("glm::findMSB: %d clocks\n", static_cast<unsigned int>(Timestamps1 - Timestamps0));
+ std::printf("findMSB - nlz1: %d clocks\n", static_cast<unsigned int>(Timestamps2 - Timestamps1));
+ std::printf("findMSB - nlz2: %d clocks\n", static_cast<unsigned int>(Timestamps3 - Timestamps2));
+ std::printf("findMSB - 0.9.5: %d clocks\n", static_cast<unsigned int>(Timestamps4 - Timestamps3));
+
+# if GLM_HAS_BITSCAN_WINDOWS
+ std::printf("findMSB - intrinsics: %d clocks\n", static_cast<unsigned int>(Timestamps5 - Timestamps4));
+# endif//GLM_HAS_BITSCAN_WINDOWS
+ std::printf("findMSB - pop: %d clocks\n", static_cast<unsigned int>(Timestamps6 - Timestamps5));
+
+# if GLM_ARCH & GLM_ARCH_AVX && GLM_COMPILER & GLM_COMPILER_VC
+ std::printf("findMSB - avx tzcnt: %d clocks\n", static_cast<unsigned int>(Timestamps7 - Timestamps6));
+# endif//GLM_ARCH & GLM_ARCH_AVX && GLM_PLATFORM & GLM_PLATFORM_WINDOWS
+
+ return Error;
+ }
+
+ int test_ivec4()
+ {
+ type<glm::ivec4, glm::ivec4> const Data[] =
+ {
+ {glm::ivec4(0x00000000), glm::ivec4(-1)},
+ {glm::ivec4(0x00000001), glm::ivec4( 0)},
+ {glm::ivec4(0x00000002), glm::ivec4( 1)},
+ {glm::ivec4(0x00000003), glm::ivec4( 1)},
+ {glm::ivec4(0x00000004), glm::ivec4( 2)},
+ {glm::ivec4(0x00000005), glm::ivec4( 2)},
+ {glm::ivec4(0x00000007), glm::ivec4( 2)},
+ {glm::ivec4(0x00000008), glm::ivec4( 3)},
+ {glm::ivec4(0x00000010), glm::ivec4( 4)},
+ {glm::ivec4(0x00000020), glm::ivec4( 5)},
+ {glm::ivec4(0x00000040), glm::ivec4( 6)},
+ {glm::ivec4(0x00000080), glm::ivec4( 7)},
+ {glm::ivec4(0x00000100), glm::ivec4( 8)},
+ {glm::ivec4(0x00000200), glm::ivec4( 9)},
+ {glm::ivec4(0x00000400), glm::ivec4(10)},
+ {glm::ivec4(0x00000800), glm::ivec4(11)},
+ {glm::ivec4(0x00001000), glm::ivec4(12)},
+ {glm::ivec4(0x00002000), glm::ivec4(13)},
+ {glm::ivec4(0x00004000), glm::ivec4(14)},
+ {glm::ivec4(0x00008000), glm::ivec4(15)},
+ {glm::ivec4(0x00010000), glm::ivec4(16)},
+ {glm::ivec4(0x00020000), glm::ivec4(17)},
+ {glm::ivec4(0x00040000), glm::ivec4(18)},
+ {glm::ivec4(0x00080000), glm::ivec4(19)},
+ {glm::ivec4(0x00100000), glm::ivec4(20)},
+ {glm::ivec4(0x00200000), glm::ivec4(21)},
+ {glm::ivec4(0x00400000), glm::ivec4(22)},
+ {glm::ivec4(0x00800000), glm::ivec4(23)},
+ {glm::ivec4(0x01000000), glm::ivec4(24)},
+ {glm::ivec4(0x02000000), glm::ivec4(25)},
+ {glm::ivec4(0x04000000), glm::ivec4(26)},
+ {glm::ivec4(0x08000000), glm::ivec4(27)},
+ {glm::ivec4(0x10000000), glm::ivec4(28)},
+ {glm::ivec4(0x20000000), glm::ivec4(29)},
+ {glm::ivec4(0x40000000), glm::ivec4(30)}
+ };
+
+ int Error(0);
+
+ for(std::size_t i = 0; i < sizeof(Data) / sizeof(type<glm::ivec4, glm::ivec4>); ++i)
+ {
+ glm::ivec4 Result0 = glm::findMSB(Data[i].Value);
+ Error += glm::all(glm::equal(Data[i].Return, Result0)) ? 0 : 1;
+ }
+
+ return Error;
+ }
+
+ int test_int()
+ {
+ typedef type<glm::uint, int> entry;
+
+ entry const Data[] =
+ {
+ {0x00000000, -1},
+ {0x00000001, 0},
+ {0x00000002, 1},
+ {0x00000003, 1},
+ {0x00000004, 2},
+ {0x00000005, 2},
+ {0x00000007, 2},
+ {0x00000008, 3},
+ {0x00000010, 4},
+ {0x00000020, 5},
+ {0x00000040, 6},
+ {0x00000080, 7},
+ {0x00000100, 8},
+ {0x00000200, 9},
+ {0x00000400, 10},
+ {0x00000800, 11},
+ {0x00001000, 12},
+ {0x00002000, 13},
+ {0x00004000, 14},
+ {0x00008000, 15},
+ {0x00010000, 16},
+ {0x00020000, 17},
+ {0x00040000, 18},
+ {0x00080000, 19},
+ {0x00100000, 20},
+ {0x00200000, 21},
+ {0x00400000, 22},
+ {0x00800000, 23},
+ {0x01000000, 24},
+ {0x02000000, 25},
+ {0x04000000, 26},
+ {0x08000000, 27},
+ {0x10000000, 28},
+ {0x20000000, 29},
+ {0x40000000, 30}
+ };
+
+ int Error(0);
+
+ for(std::size_t i = 0; i < sizeof(Data) / sizeof(entry); ++i)
+ {
+ int Result0 = glm::findMSB(Data[i].Value);
+ Error += Data[i].Return == Result0 ? 0 : 1;
+ }
+
+ for(std::size_t i = 0; i < sizeof(Data) / sizeof(entry); ++i)
+ {
+ int Result0 = findMSB_nlz1(Data[i].Value);
+ Error += Data[i].Return == Result0 ? 0 : 1;
+ }
+/*
+ for(std::size_t i = 0; i < sizeof(Data) / sizeof(entry); ++i)
+ {
+ int Result0 = findMSB_nlz2(Data[i].Value);
+ Error += Data[i].Return == Result0 ? 0 : 1;
+ }
+*/
+ for(std::size_t i = 0; i < sizeof(Data) / sizeof(entry); ++i)
+ {
+ int Result0 = findMSB_095(Data[i].Value);
+ Error += Data[i].Return == Result0 ? 0 : 1;
+ }
+
+# if GLM_HAS_BITSCAN_WINDOWS
+ for(std::size_t i = 0; i < sizeof(Data) / sizeof(entry); ++i)
+ {
+ int Result0 = findMSB_intrinsic(Data[i].Value);
+ Error += Data[i].Return == Result0 ? 0 : 1;
+ }
+# endif//GLM_HAS_BITSCAN_WINDOWS
+
+ for(std::size_t i = 0; i < sizeof(Data) / sizeof(entry); ++i)
+ {
+ int Result0 = findMSB_pop(Data[i].Value);
+ Error += Data[i].Return == Result0 ? 0 : 1;
+ }
+
+ return Error;
+ }
+
+ int test()
+ {
+ int Error(0);
+
+ Error += test_ivec4();
+ Error += test_int();
+
+ return Error;
+ }
+
+ int perf(std::size_t Samples)
+ {
+ int Error(0);
+
+ Error += perf_int(Samples);
+
+ return Error;
+ }
+}//findMSB
+
+namespace findLSB
+{
+ template <typename genType, typename retType>
+ struct type
+ {
+ genType Value;
+ retType Return;
+ };
+
+ typedef type<int, int> entry;
+
+ entry const DataI32[] =
+ {
+ {0x00000001, 0},
+ {0x00000003, 0},
+ {0x00000002, 1},
+ // {0x80000000, 31}, // Clang generates an error with this
+ {0x00010000, 16},
+ {0x7FFF0000, 16},
+ {0x7F000000, 24},
+ {0x7F00FF00, 8},
+ {0x00000000, -1}
+ };
+
+# if GLM_HAS_BITSCAN_WINDOWS
+ template <typename genIUType>
+ GLM_FUNC_QUALIFIER int findLSB_intrinsic(genIUType Value)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, "'findLSB' only accept integer values");
+
+ if(Value == 0)
+ return -1;
+
+ unsigned long Result(0);
+ _BitScanForward(&Result, Value);
+ return int(Result);
+ }
+# endif
+
+ template <typename genIUType>
+ GLM_FUNC_QUALIFIER int findLSB_095(genIUType Value)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, "'findLSB' only accept integer values");
+ if(Value == 0)
+ return -1;
+
+ genIUType Bit;
+ for(Bit = genIUType(0); !(Value & (1 << Bit)); ++Bit){}
+ return Bit;
+ }
+
+ template <typename genIUType>
+ GLM_FUNC_QUALIFIER int findLSB_ntz2(genIUType x)
+ {
+ if(x == 0)
+ return -1;
+
+ return glm::bitCount(~x & (x - static_cast<genIUType>(1)));
+ }
+
+ template <typename genIUType>
+ GLM_FUNC_QUALIFIER int findLSB_branchfree(genIUType x)
+ {
+ bool IsNull(x == 0);
+ int const Keep(!IsNull);
+ int const Discard(IsNull);
+
+ return static_cast<int>(glm::bitCount(~x & (x - static_cast<genIUType>(1)))) * Keep + Discard * -1;
+ }
+
+ int test_int()
+ {
+ int Error(0);
+
+ for(std::size_t i = 0; i < sizeof(DataI32) / sizeof(entry); ++i)
+ {
+ int Result = glm::findLSB(DataI32[i].Value);
+ Error += DataI32[i].Return == Result ? 0 : 1;
+ }
+
+ for(std::size_t i = 0; i < sizeof(DataI32) / sizeof(entry); ++i)
+ {
+ int Result = findLSB_095(DataI32[i].Value);
+ Error += DataI32[i].Return == Result ? 0 : 1;
+ }
+
+# if GLM_HAS_BITSCAN_WINDOWS
+ for(std::size_t i = 0; i < sizeof(DataI32) / sizeof(entry); ++i)
+ {
+ int Result = findLSB_intrinsic(DataI32[i].Value);
+ Error += DataI32[i].Return == Result ? 0 : 1;
+ }
+# endif
+
+ for(std::size_t i = 0; i < sizeof(DataI32) / sizeof(entry); ++i)
+ {
+ int Result = findLSB_ntz2(DataI32[i].Value);
+ Error += DataI32[i].Return == Result ? 0 : 1;
+ }
+
+ for(std::size_t i = 0; i < sizeof(DataI32) / sizeof(entry); ++i)
+ {
+ int Result = findLSB_branchfree(DataI32[i].Value);
+ Error += DataI32[i].Return == Result ? 0 : 1;
+ }
+
+ return Error;
+ }
+
+ int test()
+ {
+ int Error(0);
+
+ Error += test_int();
+
+ return Error;
+ }
+
+ int perf_int(std::size_t Count)
+ {
+ int Error(0);
+
+ std::clock_t Timestamps0 = std::clock();
+
+ for(std::size_t k = 0; k < Count; ++k)
+ for(std::size_t i = 0; i < sizeof(DataI32) / sizeof(entry); ++i)
+ {
+ int Result = glm::findLSB(DataI32[i].Value);
+ Error += DataI32[i].Return == Result ? 0 : 1;
+ }
+
+ std::clock_t Timestamps1 = std::clock();
+
+ for(std::size_t k = 0; k < Count; ++k)
+ for(std::size_t i = 0; i < sizeof(DataI32) / sizeof(entry); ++i)
+ {
+ int Result = findLSB_095(DataI32[i].Value);
+ Error += DataI32[i].Return == Result ? 0 : 1;
+ }
+
+ std::clock_t Timestamps2 = std::clock();
+
+# if GLM_HAS_BITSCAN_WINDOWS
+ for(std::size_t k = 0; k < Count; ++k)
+ for(std::size_t i = 0; i < sizeof(DataI32) / sizeof(entry); ++i)
+ {
+ int Result = findLSB_intrinsic(DataI32[i].Value);
+ Error += DataI32[i].Return == Result ? 0 : 1;
+ }
+# endif
+
+ std::clock_t Timestamps3 = std::clock();
+
+ for(std::size_t k = 0; k < Count; ++k)
+ for(std::size_t i = 0; i < sizeof(DataI32) / sizeof(entry); ++i)
+ {
+ int Result = findLSB_ntz2(DataI32[i].Value);
+ Error += DataI32[i].Return == Result ? 0 : 1;
+ }
+
+ std::clock_t Timestamps4 = std::clock();
+
+ for(std::size_t k = 0; k < Count; ++k)
+ for(std::size_t i = 0; i < sizeof(DataI32) / sizeof(entry); ++i)
+ {
+ int Result = findLSB_branchfree(DataI32[i].Value);
+ Error += DataI32[i].Return == Result ? 0 : 1;
+ }
+
+ std::clock_t Timestamps5 = std::clock();
+
+ std::printf("glm::findLSB: %d clocks\n", static_cast<unsigned int>(Timestamps1 - Timestamps0));
+ std::printf("findLSB - 0.9.5: %d clocks\n", static_cast<unsigned int>(Timestamps2 - Timestamps1));
+
+# if GLM_HAS_BITSCAN_WINDOWS
+ std::printf("findLSB - intrinsics: %d clocks\n", static_cast<unsigned int>(Timestamps3 - Timestamps2));
+# endif
+
+ std::printf("findLSB - ntz2: %d clocks\n", static_cast<unsigned int>(Timestamps4 - Timestamps3));
+ std::printf("findLSB - branchfree: %d clocks\n", static_cast<unsigned int>(Timestamps5 - Timestamps4));
+
+ return Error;
+ }
+
+ int perf(std::size_t Samples)
+ {
+ int Error(0);
+
+ Error += perf_int(Samples);
+
+ return Error;
+ }
+}//findLSB
+
+namespace uaddCarry
+{
+ int test()
+ {
+ int Error(0);
+
+ {
+ glm::uint x = std::numeric_limits<glm::uint>::max();
+ glm::uint y = 0;
+ glm::uint Carry = 0;
+ glm::uint Result = glm::uaddCarry(x, y, Carry);
+
+ Error += Carry == 0 ? 0 : 1;
+ Error += Result == std::numeric_limits<glm::uint>::max() ? 0 : 1;
+ }
+
+ {
+ glm::uint x = std::numeric_limits<glm::uint>::max();
+ glm::uint y = 1;
+ glm::uint Carry = 0;
+ glm::uint Result = glm::uaddCarry(x, y, Carry);
+
+ Error += Carry == 1 ? 0 : 1;
+ Error += Result == 0 ? 0 : 1;
+ }
+
+ {
+ glm::uvec1 x(std::numeric_limits<glm::uint>::max());
+ glm::uvec1 y(0);
+ glm::uvec1 Carry(0);
+ glm::uvec1 Result(glm::uaddCarry(x, y, Carry));
+
+ Error += glm::all(glm::equal(Carry, glm::uvec1(0))) ? 0 : 1;
+ Error += glm::all(glm::equal(Result, glm::uvec1(std::numeric_limits<glm::uint>::max()))) ? 0 : 1;
+ }
+
+ {
+ glm::uvec1 x(std::numeric_limits<glm::uint>::max());
+ glm::uvec1 y(1);
+ glm::uvec1 Carry(0);
+ glm::uvec1 Result(glm::uaddCarry(x, y, Carry));
+
+ Error += glm::all(glm::equal(Carry, glm::uvec1(1))) ? 0 : 1;
+ Error += glm::all(glm::equal(Result, glm::uvec1(0))) ? 0 : 1;
+ }
+
+ return Error;
+ }
+}//namespace uaddCarry
+
+namespace usubBorrow
+{
+ int test()
+ {
+ int Error(0);
+
+ {
+ glm::uint x = 16;
+ glm::uint y = 17;
+ glm::uint Borrow = 0;
+ glm::uint Result = glm::usubBorrow(x, y, Borrow);
+
+ Error += Borrow == 1 ? 0 : 1;
+ Error += Result == 1 ? 0 : 1;
+ }
+
+ {
+ glm::uvec1 x(16);
+ glm::uvec1 y(17);
+ glm::uvec1 Borrow(0);
+ glm::uvec1 Result(glm::usubBorrow(x, y, Borrow));
+
+ Error += glm::all(glm::equal(Borrow, glm::uvec1(1))) ? 0 : 1;
+ Error += glm::all(glm::equal(Result, glm::uvec1(1))) ? 0 : 1;
+ }
+
+ {
+ glm::uvec2 x(16);
+ glm::uvec2 y(17);
+ glm::uvec2 Borrow(0);
+ glm::uvec2 Result(glm::usubBorrow(x, y, Borrow));
+
+ Error += glm::all(glm::equal(Borrow, glm::uvec2(1))) ? 0 : 1;
+ Error += glm::all(glm::equal(Result, glm::uvec2(1))) ? 0 : 1;
+ }
+
+ {
+ glm::uvec3 x(16);
+ glm::uvec3 y(17);
+ glm::uvec3 Borrow(0);
+ glm::uvec3 Result(glm::usubBorrow(x, y, Borrow));
+
+ Error += glm::all(glm::equal(Borrow, glm::uvec3(1))) ? 0 : 1;
+ Error += glm::all(glm::equal(Result, glm::uvec3(1))) ? 0 : 1;
+ }
+
+ {
+ glm::uvec4 x(16);
+ glm::uvec4 y(17);
+ glm::uvec4 Borrow(0);
+ glm::uvec4 Result(glm::usubBorrow(x, y, Borrow));
+
+ Error += glm::all(glm::equal(Borrow, glm::uvec4(1))) ? 0 : 1;
+ Error += glm::all(glm::equal(Result, glm::uvec4(1))) ? 0 : 1;
+ }
+
+ return Error;
+ }
+}//namespace usubBorrow
+
+namespace umulExtended
+{
+ int test()
+ {
+ int Error(0);
+
+ {
+ glm::uint x = 2;
+ glm::uint y = 3;
+ glm::uint msb = 0;
+ glm::uint lsb = 0;
+ glm::umulExtended(x, y, msb, lsb);
+
+ Error += msb == 0 ? 0 : 1;
+ Error += lsb == 6 ? 0 : 1;
+ }
+
+ {
+ glm::uvec1 x(2);
+ glm::uvec1 y(3);
+ glm::uvec1 msb(0);
+ glm::uvec1 lsb(0);
+ glm::umulExtended(x, y, msb, lsb);
+
+ Error += glm::all(glm::equal(msb, glm::uvec1(0))) ? 0 : 1;
+ Error += glm::all(glm::equal(lsb, glm::uvec1(6))) ? 0 : 1;
+ }
+
+ {
+ glm::uvec2 x(2);
+ glm::uvec2 y(3);
+ glm::uvec2 msb(0);
+ glm::uvec2 lsb(0);
+ glm::umulExtended(x, y, msb, lsb);
+
+ Error += glm::all(glm::equal(msb, glm::uvec2(0))) ? 0 : 1;
+ Error += glm::all(glm::equal(lsb, glm::uvec2(6))) ? 0 : 1;
+ }
+
+ {
+ glm::uvec3 x(2);
+ glm::uvec3 y(3);
+ glm::uvec3 msb(0);
+ glm::uvec3 lsb(0);
+ glm::umulExtended(x, y, msb, lsb);
+
+ Error += glm::all(glm::equal(msb, glm::uvec3(0))) ? 0 : 1;
+ Error += glm::all(glm::equal(lsb, glm::uvec3(6))) ? 0 : 1;
+ }
+
+ {
+ glm::uvec4 x(2);
+ glm::uvec4 y(3);
+ glm::uvec4 msb(0);
+ glm::uvec4 lsb(0);
+ glm::umulExtended(x, y, msb, lsb);
+
+ Error += glm::all(glm::equal(msb, glm::uvec4(0))) ? 0 : 1;
+ Error += glm::all(glm::equal(lsb, glm::uvec4(6))) ? 0 : 1;
+ }
+
+ return Error;
+ }
+}//namespace umulExtended
+
+namespace imulExtended
+{
+ int test()
+ {
+ int Error(0);
+
+ {
+ int x = 2;
+ int y = 3;
+ int msb = 0;
+ int lsb = 0;
+ glm::imulExtended(x, y, msb, lsb);
+
+ Error += msb == 0 ? 0 : 1;
+ Error += lsb == 6 ? 0 : 1;
+ }
+
+ {
+ glm::ivec1 x(2);
+ glm::ivec1 y(3);
+ glm::ivec1 msb(0);
+ glm::ivec1 lsb(0);
+ glm::imulExtended(x, y, msb, lsb);
+
+ Error += glm::all(glm::equal(msb, glm::ivec1(0))) ? 0 : 1;
+ Error += glm::all(glm::equal(lsb, glm::ivec1(6))) ? 0 : 1;
+ }
+
+ {
+ glm::ivec2 x(2);
+ glm::ivec2 y(3);
+ glm::ivec2 msb(0);
+ glm::ivec2 lsb(0);
+ glm::imulExtended(x, y, msb, lsb);
+
+ Error += glm::all(glm::equal(msb, glm::ivec2(0))) ? 0 : 1;
+ Error += glm::all(glm::equal(lsb, glm::ivec2(6))) ? 0 : 1;
+ }
+
+ {
+ glm::ivec3 x(2);
+ glm::ivec3 y(3);
+ glm::ivec3 msb(0);
+ glm::ivec3 lsb(0);
+ glm::imulExtended(x, y, msb, lsb);
+
+ Error += glm::all(glm::equal(msb, glm::ivec3(0))) ? 0 : 1;
+ Error += glm::all(glm::equal(lsb, glm::ivec3(6))) ? 0 : 1;
+ }
+
+ {
+ glm::ivec4 x(2);
+ glm::ivec4 y(3);
+ glm::ivec4 msb(0);
+ glm::ivec4 lsb(0);
+ glm::imulExtended(x, y, msb, lsb);
+
+ Error += glm::all(glm::equal(msb, glm::ivec4(0))) ? 0 : 1;
+ Error += glm::all(glm::equal(lsb, glm::ivec4(6))) ? 0 : 1;
+ }
+
+ return Error;
+ }
+}//namespace imulExtended
+
+namespace bitCount
+{
+ template <typename genType>
+ struct type
+ {
+ genType Value;
+ genType Return;
+ };
+
+ type<int> const DataI32[] =
+ {
+ {0x00000001, 1},
+ {0x00000003, 2},
+ {0x00000002, 1},
+ {0x7fffffff, 31},
+ {0x00000000, 0}
+ };
+
+ template <typename T>
+ inline int bitCount_if(T v)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, "'bitCount' only accept integer values");
+
+ int Count(0);
+ for(T i = 0, n = static_cast<T>(sizeof(T) * 8); i < n; ++i)
+ {
+ if(v & static_cast<T>(1 << i))
+ ++Count;
+ }
+ return Count;
+ }
+
+ template <typename T>
+ inline int bitCount_vec(T v)
+ {
+ GLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, "'bitCount' only accept integer values");
+
+ int Count(0);
+ for(T i = 0, n = static_cast<T>(sizeof(T) * 8); i < n; ++i)
+ {
+ Count += static_cast<int>((v >> i) & static_cast<T>(1));
+ }
+ return Count;
+ }
+
+ template <bool EXEC = false>
+ struct compute_bitfieldBitCountStep
+ {
+ template <typename T, glm::precision P, template <class, glm::precision> class vecType>
+ GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & v, T, T)
+ {
+ return v;
+ }
+ };
+
+ template <>
+ struct compute_bitfieldBitCountStep<true>
+ {
+ template <typename T, glm::precision P, template <class, glm::precision> class vecType>
+ GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & v, T Mask, T Shift)
+ {
+ return (v & Mask) + ((v >> Shift) & Mask);
+ }
+ };
+
+ template <typename T, glm::precision P, template <typename, glm::precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<int, P> bitCount_bitfield(vecType<T, P> const & v)
+ {
+ vecType<typename glm::detail::make_unsigned<T>::type, P> x(*reinterpret_cast<vecType<typename glm::detail::make_unsigned<T>::type, P> const *>(&v));
+ x = compute_bitfieldBitCountStep<sizeof(T) * 8 >= 2>::call(x, typename glm::detail::make_unsigned<T>::type(0x5555555555555555ull), typename glm::detail::make_unsigned<T>::type( 1));
+ x = compute_bitfieldBitCountStep<sizeof(T) * 8 >= 4>::call(x, typename glm::detail::make_unsigned<T>::type(0x3333333333333333ull), typename glm::detail::make_unsigned<T>::type( 2));
+ x = compute_bitfieldBitCountStep<sizeof(T) * 8 >= 8>::call(x, typename glm::detail::make_unsigned<T>::type(0x0F0F0F0F0F0F0F0Full), typename glm::detail::make_unsigned<T>::type( 4));
+ x = compute_bitfieldBitCountStep<sizeof(T) * 8 >= 16>::call(x, typename glm::detail::make_unsigned<T>::type(0x00FF00FF00FF00FFull), typename glm::detail::make_unsigned<T>::type( 8));
+ x = compute_bitfieldBitCountStep<sizeof(T) * 8 >= 32>::call(x, typename glm::detail::make_unsigned<T>::type(0x0000FFFF0000FFFFull), typename glm::detail::make_unsigned<T>::type(16));
+ x = compute_bitfieldBitCountStep<sizeof(T) * 8 >= 64>::call(x, typename glm::detail::make_unsigned<T>::type(0x00000000FFFFFFFFull), typename glm::detail::make_unsigned<T>::type(32));
+ return vecType<int, P>(x);
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER int bitCount_bitfield(genType x)
+ {
+ return bitCount_bitfield(glm::tvec1<genType, glm::defaultp>(x)).x;
+ }
+
+ int perf(std::size_t Size)
+ {
+ int Error(0);
+
+ std::vector<int> v;
+ v.resize(Size);
+
+ std::vector<glm::ivec4> w;
+ w.resize(Size);
+
+
+ std::clock_t TimestampsA = std::clock();
+
+ // bitCount - TimeIf
+ {
+ for(std::size_t i = 0, n = v.size(); i < n; ++i)
+ v[i] = bitCount_if(static_cast<int>(i));
+ }
+
+ std::clock_t TimestampsB = std::clock();
+
+ // bitCount - TimeVec
+ {
+ for(std::size_t i = 0, n = v.size(); i < n; ++i)
+ v[i] = bitCount_vec(i);
+ }
+
+ std::clock_t TimestampsC = std::clock();
+
+ // bitCount - TimeDefault
+ {
+ for(std::size_t i = 0, n = v.size(); i < n; ++i)
+ v[i] = glm::bitCount(i);
+ }
+
+ std::clock_t TimestampsD = std::clock();
+
+ // bitCount - TimeVec4
+ {
+ for(std::size_t i = 0, n = v.size(); i < n; ++i)
+ w[i] = glm::bitCount(glm::ivec4(static_cast<int>(i)));
+ }
+
+ std::clock_t TimestampsE = std::clock();
+
+ {
+ for(std::size_t i = 0, n = v.size(); i < n; ++i)
+ v[i] = bitCount_bitfield(static_cast<int>(i));
+ }
+
+ std::clock_t TimestampsF = std::clock();
+
+ std::printf("bitCount - TimeIf %d\n", static_cast<unsigned int>(TimestampsB - TimestampsA));
+ std::printf("bitCount - TimeVec %d\n", static_cast<unsigned int>(TimestampsC - TimestampsB));
+ std::printf("bitCount - TimeDefault %d\n", static_cast<unsigned int>(TimestampsD - TimestampsC));
+ std::printf("bitCount - TimeVec4 %d\n", static_cast<unsigned int>(TimestampsE - TimestampsD));
+ std::printf("bitCount - bitfield %d\n", static_cast<unsigned int>(TimestampsF - TimestampsE));
+
+ return Error;
+ }
+
+ int test()
+ {
+ int Error(0);
+
+ for(std::size_t i = 0, n = sizeof(DataI32) / sizeof(type<int>); i < n; ++i)
+ {
+ int ResultA = glm::bitCount(DataI32[i].Value);
+ int ResultB = bitCount_if(DataI32[i].Value);
+ int ResultC = bitCount_vec(DataI32[i].Value);
+ int ResultE = bitCount_bitfield(DataI32[i].Value);
+
+ Error += DataI32[i].Return == ResultA ? 0 : 1;
+ Error += DataI32[i].Return == ResultB ? 0 : 1;
+ Error += DataI32[i].Return == ResultC ? 0 : 1;
+ Error += DataI32[i].Return == ResultE ? 0 : 1;
+
+ assert(!Error);
+ }
+
+ return Error;
+ }
+}//bitCount
+
+int main()
+{
+ int Error = 0;
+
+ Error += ::bitCount::test();
+ Error += ::bitfieldReverse::test();
+ Error += ::findMSB::test();
+ Error += ::findLSB::test();
+ Error += ::umulExtended::test();
+ Error += ::imulExtended::test();
+ Error += ::uaddCarry::test();
+ Error += ::usubBorrow::test();
+ Error += ::bitfieldInsert::test();
+ Error += ::bitfieldExtract::test();
+
+# ifdef NDEBUG
+ std::size_t const Samples = 1000;
+ ::bitCount::perf(Samples);
+ ::bitfieldReverse::perf(Samples);
+ ::findMSB::perf(Samples);
+ ::findLSB::perf(Samples);
+# endif
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/core/core_func_integer_bit_count.cpp b/src/third_party/glm/test/core/core_func_integer_bit_count.cpp
new file mode 100644
index 0000000..f8cba2c
--- /dev/null
+++ b/src/third_party/glm/test/core/core_func_integer_bit_count.cpp
@@ -0,0 +1,291 @@
+// This has the programs for computing the number of 1-bits
+// in a word, or byte, etc.
+// Max line length is 57, to fit in hacker.book.
+#include <stdio.h>
+#include <stdlib.h> //To define "exit", req'd by XLC.
+#include <ctime>
+
+unsigned rotatel(unsigned x, int n)
+{
+ if ((unsigned)n > 63) {printf("rotatel, n out of range.\n"); exit(1);}
+ return (x << n) | (x >> (32 - n));
+}
+
+int pop0(unsigned x)
+{
+ x = (x & 0x55555555) + ((x >> 1) & 0x55555555);
+ x = (x & 0x33333333) + ((x >> 2) & 0x33333333);
+ x = (x & 0x0F0F0F0F) + ((x >> 4) & 0x0F0F0F0F);
+ x = (x & 0x00FF00FF) + ((x >> 8) & 0x00FF00FF);
+ x = (x & 0x0000FFFF) + ((x >>16) & 0x0000FFFF);
+ return x;
+}
+
+int pop1(unsigned x)
+{
+ x = x - ((x >> 1) & 0x55555555);
+ x = (x & 0x33333333) + ((x >> 2) & 0x33333333);
+ x = (x + (x >> 4)) & 0x0F0F0F0F;
+ x = x + (x >> 8);
+ x = x + (x >> 16);
+ return x & 0x0000003F;
+}
+/* Note: an alternative to the last three executable lines above is:
+ return x*0x01010101 >> 24;
+if your machine has a fast multiplier (suggested by Jari Kirma). */
+
+int pop2(unsigned x)
+{
+ unsigned n;
+
+ n = (x >> 1) & 033333333333; // Count bits in
+ x = x - n; // each 3-bit
+ n = (n >> 1) & 033333333333; // field.
+ x = x - n;
+ x = (x + (x >> 3)) & 030707070707; // 6-bit sums.
+ return x%63; // Add 6-bit sums.
+}
+
+/* An alternative to the "return" statement above is:
+ return ((x * 0404040404) >> 26) + // Add 6-bit sums.
+ (x >> 30);
+which runs faster on most machines (suggested by Norbert Juffa). */
+
+int pop3(unsigned x)
+{
+ unsigned n;
+
+ n = (x >> 1) & 0x77777777; // Count bits in
+ x = x - n; // each 4-bit
+ n = (n >> 1) & 0x77777777; // field.
+ x = x - n;
+ n = (n >> 1) & 0x77777777;
+ x = x - n;
+ x = (x + (x >> 4)) & 0x0F0F0F0F; // Get byte sums.
+ x = x*0x01010101; // Add the bytes.
+ return x >> 24;
+}
+
+int pop4(unsigned x)
+{
+ int n;
+
+ n = 0;
+ while (x != 0) {
+ n = n + 1;
+ x = x & (x - 1);
+ }
+ return n;
+}
+
+int pop5(unsigned x)
+{
+ int i, sum;
+
+ // Rotate and sum method // Shift right & subtract
+
+ sum = x; // sum = x;
+ for (i = 1; i <= 31; i++) { // while (x != 0) {
+ x = rotatel(x, 1); // x = x >> 1;
+ sum = sum + x; // sum = sum - x;
+ } // }
+ return -sum; // return sum;
+}
+
+int pop5a(unsigned x)
+{
+ int sum;
+
+ // Shift right & subtract
+
+ sum = x;
+ while (x != 0) {
+ x = x >> 1;
+ sum = sum - x;
+ }
+ return sum;
+}
+
+int pop6(unsigned x)
+{ // Table lookup.
+ static char table[256] = {
+ 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4,
+ 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
+ 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
+ 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
+
+ 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
+ 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
+ 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
+ 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
+
+ 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
+ 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
+ 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
+ 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
+
+ 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
+ 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
+ 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
+ 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8};
+
+ return table[x & 0xFF] +
+ table[(x >> 8) & 0xFF] +
+ table[(x >> 16) & 0xFF] +
+ table[(x >> 24)];
+}
+
+// The following works only for 8-bit quantities.
+int pop7(unsigned x)
+{
+ x = x*0x08040201; // Make 4 copies.
+ x = x >> 3; // So next step hits proper bits.
+ x = x & 0x11111111; // Every 4th bit.
+ x = x*0x11111111; // Sum the digits (each 0 or 1).
+ x = x >> 28; // Position the result.
+ return x;
+}
+
+// The following works only for 7-bit quantities.
+int pop8(unsigned x)
+{
+ x = x*0x02040810; // Make 4 copies, left-adjusted.
+ x = x & 0x11111111; // Every 4th bit.
+ x = x*0x11111111; // Sum the digits (each 0 or 1).
+ x = x >> 28; // Position the result.
+ return x;
+}
+
+// The following works only for 15-bit quantities.
+int pop9(unsigned x)
+{
+ unsigned long long y;
+ y = x * 0x0002000400080010ULL;
+ y = y & 0x1111111111111111ULL;
+ y = y * 0x1111111111111111ULL;
+ y = y >> 60;
+ return y;
+}
+
+int errors;
+void error(int x, int y)
+{
+ errors = errors + 1;
+ printf("Error for x = %08x, got %08x\n", x, y);
+}
+
+int main()
+{
+# ifdef NDEBUG
+
+ int i, n;
+ static unsigned test[] = {0,0, 1,1, 2,1, 3,2, 4,1, 5,2, 6,2, 7,3,
+ 8,1, 9,2, 10,2, 11,3, 12,2, 13,3, 14,3, 15,4, 16,1, 17,2,
+ 0x3F,6, 0x40,1, 0x41,2, 0x7f,7, 0x80,1, 0x81,2, 0xfe,7, 0xff,8,
+ 0x4000,1, 0x4001,2, 0x7000,3, 0x7fff,15,
+ 0x55555555,16, 0xAAAAAAAA, 16, 0xFF000000,8, 0xC0C0C0C0,8,
+ 0x0FFFFFF0,24, 0x80000000,1, 0xFFFFFFFF,32};
+
+ std::size_t const Count = 1000000;
+
+ n = sizeof(test)/4;
+
+ std::clock_t TimestampBeg = 0;
+ std::clock_t TimestampEnd = 0;
+
+ TimestampBeg = std::clock();
+ for (std::size_t k = 0; k < Count; ++k)
+ for (i = 0; i < n; i += 2) {
+ if (pop0(test[i]) != test[i+1]) error(test[i], pop0(test[i]));}
+ TimestampEnd = std::clock();
+
+ printf("pop0: %ld clocks\n", TimestampEnd - TimestampBeg);
+
+ TimestampBeg = std::clock();
+ for (std::size_t k = 0; k < Count; ++k)
+ for (i = 0; i < n; i += 2) {
+ if (pop1(test[i]) != test[i+1]) error(test[i], pop1(test[i]));}
+ TimestampEnd = std::clock();
+
+ printf("pop1: %ld clocks\n", TimestampEnd - TimestampBeg);
+
+ TimestampBeg = std::clock();
+ for (std::size_t k = 0; k < Count; ++k)
+ for (i = 0; i < n; i += 2) {
+ if (pop2(test[i]) != test[i+1]) error(test[i], pop2(test[i]));}
+ TimestampEnd = std::clock();
+
+ printf("pop2: %ld clocks\n", TimestampEnd - TimestampBeg);
+
+ TimestampBeg = std::clock();
+ for (std::size_t k = 0; k < Count; ++k)
+ for (i = 0; i < n; i += 2) {
+ if (pop3(test[i]) != test[i+1]) error(test[i], pop3(test[i]));}
+ TimestampEnd = std::clock();
+
+ printf("pop3: %ld clocks\n", TimestampEnd - TimestampBeg);
+
+ TimestampBeg = std::clock();
+ for (std::size_t k = 0; k < Count; ++k)
+ for (i = 0; i < n; i += 2) {
+ if (pop4(test[i]) != test[i+1]) error(test[i], pop4(test[i]));}
+ TimestampEnd = std::clock();
+
+ printf("pop4: %ld clocks\n", TimestampEnd - TimestampBeg);
+
+ TimestampBeg = std::clock();
+ for (std::size_t k = 0; k < Count; ++k)
+ for (i = 0; i < n; i += 2) {
+ if (pop5(test[i]) != test[i+1]) error(test[i], pop5(test[i]));}
+ TimestampEnd = std::clock();
+
+ printf("pop5: %ld clocks\n", TimestampEnd - TimestampBeg);
+
+ TimestampBeg = std::clock();
+ for (std::size_t k = 0; k < Count; ++k)
+ for (i = 0; i < n; i += 2) {
+ if (pop5a(test[i]) != test[i+1]) error(test[i], pop5a(test[i]));}
+ TimestampEnd = std::clock();
+
+ printf("pop5a: %ld clocks\n", TimestampEnd - TimestampBeg);
+
+ TimestampBeg = std::clock();
+ for (std::size_t k = 0; k < Count; ++k)
+ for (i = 0; i < n; i += 2) {
+ if (pop6(test[i]) != test[i+1]) error(test[i], pop6(test[i]));}
+ TimestampEnd = std::clock();
+
+ printf("pop6: %ld clocks\n", TimestampEnd - TimestampBeg);
+
+ TimestampBeg = std::clock();
+ for (std::size_t k = 0; k < Count; ++k)
+ for (i = 0; i < n; i += 2) {
+ if ((test[i] & 0xffffff00) == 0)
+ if (pop7(test[i]) != test[i+1]) error(test[i], pop7(test[i]));}
+ TimestampEnd = std::clock();
+
+ printf("pop7: %ld clocks\n", TimestampEnd - TimestampBeg);
+
+ TimestampBeg = std::clock();
+ for (std::size_t k = 0; k < Count; ++k)
+ for (i = 0; i < n; i += 2) {
+ if ((test[i] & 0xffffff80) == 0)
+ if (pop8(test[i]) != test[i+1]) error(test[i], pop8(test[i]));}
+ TimestampEnd = std::clock();
+
+ printf("pop8: %ld clocks\n", TimestampEnd - TimestampBeg);
+
+ TimestampBeg = std::clock();
+ for (std::size_t k = 0; k < Count; ++k)
+ for (i = 0; i < n; i += 2) {
+ if ((test[i] & 0xffff8000) == 0)
+ if (pop9(test[i]) != test[i+1]) error(test[i], pop9(test[i]));}
+ TimestampEnd = std::clock();
+
+ printf("pop9: %ld clocks\n", TimestampEnd - TimestampBeg);
+
+ if (errors == 0)
+ printf("Passed all %d cases.\n", sizeof(test)/8);
+
+# endif//NDEBUG
+}
diff --git a/src/third_party/glm/test/core/core_func_integer_find_lsb.cpp b/src/third_party/glm/test/core/core_func_integer_find_lsb.cpp
new file mode 100644
index 0000000..69eb27c
--- /dev/null
+++ b/src/third_party/glm/test/core/core_func_integer_find_lsb.cpp
@@ -0,0 +1,400 @@
+// This has the programs for computing the number of trailing zeros
+// in a word.
+// Max line length is 57, to fit in hacker.book.
+#include <cstdio>
+#include <cstdlib> //To define "exit", req'd by XLC.
+#include <ctime>
+
+int nlz(unsigned x) {
+ int pop(unsigned x);
+
+ x = x | (x >> 1);
+ x = x | (x >> 2);
+ x = x | (x >> 4);
+ x = x | (x >> 8);
+ x = x | (x >>16);
+ return pop(~x);
+}
+
+int pop(unsigned x) {
+ x = x - ((x >> 1) & 0x55555555);
+ x = (x & 0x33333333) + ((x >> 2) & 0x33333333);
+ x = (x + (x >> 4)) & 0x0F0F0F0F;
+ x = x + (x << 8);
+ x = x + (x << 16);
+ return x >> 24;
+}
+
+int ntz1(unsigned x) {
+ return 32 - nlz(~x & (x-1));
+}
+
+int ntz2(unsigned x) {
+ return pop(~x & (x - 1));
+}
+
+int ntz3(unsigned x) {
+ int n;
+
+ if (x == 0) return(32);
+ n = 1;
+ if ((x & 0x0000FFFF) == 0) {n = n +16; x = x >>16;}
+ if ((x & 0x000000FF) == 0) {n = n + 8; x = x >> 8;}
+ if ((x & 0x0000000F) == 0) {n = n + 4; x = x >> 4;}
+ if ((x & 0x00000003) == 0) {n = n + 2; x = x >> 2;}
+ return n - (x & 1);
+}
+
+int ntz4(unsigned x) {
+ unsigned y;
+ int n;
+
+ if (x == 0) return 32;
+ n = 31;
+ y = x <<16; if (y != 0) {n = n -16; x = y;}
+ y = x << 8; if (y != 0) {n = n - 8; x = y;}
+ y = x << 4; if (y != 0) {n = n - 4; x = y;}
+ y = x << 2; if (y != 0) {n = n - 2; x = y;}
+ y = x << 1; if (y != 0) {n = n - 1;}
+ return n;
+}
+
+int ntz4a(unsigned x) {
+ unsigned y;
+ int n;
+
+ if (x == 0) return 32;
+ n = 31;
+ y = x <<16; if (y != 0) {n = n -16; x = y;}
+ y = x << 8; if (y != 0) {n = n - 8; x = y;}
+ y = x << 4; if (y != 0) {n = n - 4; x = y;}
+ y = x << 2; if (y != 0) {n = n - 2; x = y;}
+ n = n - ((x << 1) >> 31);
+ return n;
+}
+
+int ntz5(char x)
+{
+ if (x & 15) {
+ if (x & 3) {
+ if (x & 1) return 0;
+ else return 1;
+ }
+ else if (x & 4) return 2;
+ else return 3;
+ }
+ else if (x & 0x30) {
+ if (x & 0x10) return 4;
+ else return 5;
+ }
+ else if (x & 0x40) return 6;
+ else if (x) return 7;
+ else return 8;
+}
+
+int ntz6(unsigned x) {
+ int n;
+
+ x = ~x & (x - 1);
+ n = 0; // n = 32;
+ while(x != 0) { // while (x != 0) {
+ n = n + 1; // n = n - 1;
+ x = x >> 1; // x = x + x;
+ } // }
+ return n; // return n;
+}
+
+int ntz6a(unsigned x)
+{
+ int n = 32;
+
+ while (x != 0) {
+ n = n - 1;
+ x = x + x;
+ }
+ return n;
+}
+
+/* Dean Gaudet's algorithm. To be most useful there must be a good way
+to evaluate the C "conditional expression" (a?b:c construction) without
+branching. The result of a?b:c is b if a is true (nonzero), and c if a
+is false (0).
+ For example, a compare to zero op that sets a target GPR to 1 if the
+operand is 0, and to 0 if the operand is nonzero, will do it. With this
+instruction, the algorithm is entirely branch-free. But the most
+interesting thing about it is the high degree of parallelism. All six
+lines with conditional expressions can be executed in parallel (on a
+machine with sufficient computational units).
+ Although the instruction count is 30 measured statically, it could
+execute in only 10 cycles on a machine with sufficient parallelism.
+ The first two uses of y can instead be x, which would increase the
+useful parallelism on most machines (the assignments to y, bz, and b4
+could then all run in parallel). */
+
+int ntz7(unsigned x)
+{
+ unsigned y, bz, b4, b3, b2, b1, b0;
+
+ y = x & -x; // Isolate rightmost 1-bit.
+ bz = y ? 0 : 1; // 1 if y = 0.
+ b4 = (y & 0x0000FFFF) ? 0 : 16;
+ b3 = (y & 0x00FF00FF) ? 0 : 8;
+ b2 = (y & 0x0F0F0F0F) ? 0 : 4;
+ b1 = (y & 0x33333333) ? 0 : 2;
+ b0 = (y & 0x55555555) ? 0 : 1;
+ return bz + b4 + b3 + b2 + b1 + b0;
+}
+
+int ntz7_christophe(unsigned x)
+{
+ unsigned y, bz, b4, b3, b2, b1, b0;
+
+ y = x & -x; // Isolate rightmost 1-bit.
+ bz = unsigned(!bool(y)); // 1 if y = 0.
+ b4 = unsigned(!bool(y & 0x0000FFFF)) * 16;
+ b3 = unsigned(!bool(y & 0x00FF00FF)) * 8;
+ b2 = unsigned(!bool(y & 0x0F0F0F0F)) * 4;
+ b1 = unsigned(!bool(y & 0x33333333)) * 2;
+ b0 = unsigned(!bool(y & 0x55555555)) * 1;
+ return bz + b4 + b3 + b2 + b1 + b0;
+}
+
+/* Below is David Seal's algorithm, found at
+http://www.ciphersbyritter.com/NEWS4/BITCT.HTM Table
+entries marked "u" are unused. 6 ops including a
+multiply, plus an indexed load. */
+
+#define u 99
+int ntz8(unsigned x)
+{
+ static char table[64] =
+ {32, 0, 1,12, 2, 6, u,13, 3, u, 7, u, u, u, u,14,
+ 10, 4, u, u, 8, u, u,25, u, u, u, u, u,21,27,15,
+ 31,11, 5, u, u, u, u, u, 9, u, u,24, u, u,20,26,
+ 30, u, u, u, u,23, u,19, 29, u,22,18,28,17,16, u};
+
+ x = (x & -x)*0x0450FBAF;
+ return table[x >> 26];
+}
+
+/* Seal's algorithm with multiply expanded.
+9 elementary ops plus an indexed load. */
+
+int ntz8a(unsigned x)
+{
+ static char table[64] =
+ {32, 0, 1,12, 2, 6, u,13, 3, u, 7, u, u, u, u,14,
+ 10, 4, u, u, 8, u, u,25, u, u, u, u, u,21,27,15,
+ 31,11, 5, u, u, u, u, u, 9, u, u,24, u, u,20,26,
+ 30, u, u, u, u,23, u,19, 29, u,22,18,28,17,16, u};
+
+ x = (x & -x);
+ x = (x << 4) + x; // x = x*17.
+ x = (x << 6) + x; // x = x*65.
+ x = (x << 16) - x; // x = x*65535.
+ return table[x >> 26];
+}
+
+/* Reiser's algorithm. Three ops including a "remainder,"
+plus an indexed load. */
+
+int ntz9(unsigned x) {
+
+ static char table[37] = {32, 0, 1, 26, 2, 23, 27,
+ u, 3, 16, 24, 30, 28, 11, u, 13, 4,
+ 7, 17, u, 25, 22, 31, 15, 29, 10, 12,
+ 6, u, 21, 14, 9, 5, 20, 8, 19, 18};
+
+ x = (x & -x)%37;
+ return table[x];
+}
+
+/* Using a de Bruijn sequence. This is a table lookup with a 32-entry
+table. The de Bruijn sequence used here is
+ 0000 0100 1101 0111 0110 0101 0001 1111,
+obtained from Danny Dube's October 3, 1997, posting in
+comp.compression.research. Thanks to Norbert Juffa for this reference. */
+
+int ntz10(unsigned x) {
+
+ static char table[32] =
+ { 0, 1, 2,24, 3,19, 6,25, 22, 4,20,10,16, 7,12,26,
+ 31,23,18, 5,21, 9,15,11, 30,17, 8,14,29,13,28,27};
+
+ if (x == 0) return 32;
+ x = (x & -x)*0x04D7651F;
+ return table[x >> 27];
+}
+
+/* Norbert Juffa's code, answer to exercise 1 of Chapter 5 (2nd ed). */
+
+#define SLOW_MUL
+int ntz11 (unsigned int n) {
+
+ static unsigned char tab[32] =
+ { 0, 1, 2, 24, 3, 19, 6, 25,
+ 22, 4, 20, 10, 16, 7, 12, 26,
+ 31, 23, 18, 5, 21, 9, 15, 11,
+ 30, 17, 8, 14, 29, 13, 28, 27
+ };
+ unsigned int k;
+ n = n & (-n); /* isolate lsb */
+ printf("n = %d\n", n);
+#if defined(SLOW_MUL)
+ k = (n << 11) - n;
+ k = (k << 2) + k;
+ k = (k << 8) + n;
+ k = (k << 5) - k;
+#else
+ k = n * 0x4d7651f;
+#endif
+ return n ? tab[k>>27] : 32;
+}
+
+int errors;
+void error(int x, int y) {
+ errors = errors + 1;
+ printf("Error for x = %08x, got %d\n", x, y);
+}
+
+/* ------------------------------ main ------------------------------ */
+
+int main()
+{
+# ifdef NDEBUG
+
+ int i, m, n;
+ static unsigned test[] = {0,32, 1,0, 2,1, 3,0, 4,2, 5,0, 6,1, 7,0,
+ 8,3, 9,0, 16,4, 32,5, 64,6, 128,7, 255,0, 256,8, 512,9, 1024,10,
+ 2048,11, 4096,12, 8192,13, 16384,14, 32768,15, 65536,16,
+ 0x20000,17, 0x40000,18, 0x80000,19, 0x100000,20, 0x200000,21,
+ 0x400000,22, 0x800000,23, 0x1000000,24, 0x2000000,25,
+ 0x4000000,26, 0x8000000,27, 0x10000000,28, 0x20000000,29,
+ 0x40000000,30, 0x80000000,31, 0xFFFFFFF0,4, 0x3000FF00,8,
+ 0xC0000000,30, 0x60000000,29, 0x00011000, 12};
+
+ std::size_t const Count = 1000;
+
+ n = sizeof(test)/4;
+
+ std::clock_t TimestampBeg = 0;
+ std::clock_t TimestampEnd = 0;
+
+ TimestampBeg = std::clock();
+ for (std::size_t k = 0; k < Count; ++k)
+ for (i = 0; i < n; i += 2) {
+ if (ntz1(test[i]) != test[i+1]) error(test[i], ntz1(test[i]));}
+ TimestampEnd = std::clock();
+
+ printf("ntz1: %d clocks\n", TimestampEnd - TimestampBeg);
+
+ TimestampBeg = std::clock();
+ for (std::size_t k = 0; k < Count; ++k)
+ for (i = 0; i < n; i += 2) {
+ if (ntz2(test[i]) != test[i+1]) error(test[i], ntz2(test[i]));}
+ TimestampEnd = std::clock();
+
+ printf("ntz2: %d clocks\n", TimestampEnd - TimestampBeg);
+
+ TimestampBeg = std::clock();
+ for (std::size_t k = 0; k < Count; ++k)
+ for (i = 0; i < n; i += 2) {
+ if (ntz3(test[i]) != test[i+1]) error(test[i], ntz3(test[i]));}
+ TimestampEnd = std::clock();
+
+ printf("ntz3: %d clocks\n", TimestampEnd - TimestampBeg);
+
+ TimestampBeg = std::clock();
+ for (std::size_t k = 0; k < Count; ++k)
+ for (i = 0; i < n; i += 2) {
+ if (ntz4(test[i]) != test[i+1]) error(test[i], ntz4(test[i]));}
+ TimestampEnd = std::clock();
+
+ printf("ntz4: %d clocks\n", TimestampEnd - TimestampBeg);
+
+ TimestampBeg = std::clock();
+ for (std::size_t k = 0; k < Count; ++k)
+ for (i = 0; i < n; i += 2) {
+ if (ntz4a(test[i]) != test[i+1]) error(test[i], ntz4a(test[i]));}
+ TimestampEnd = std::clock();
+
+ printf("ntz4a: %d clocks\n", TimestampEnd - TimestampBeg);
+
+ TimestampBeg = std::clock();
+ for (std::size_t k = 0; k < Count; ++k)
+ for (i = 0; i < n; i += 2) {
+ m = test[i+1]; if (m > 8) m = 8;
+ if (ntz5(test[i]) != m) error(test[i], ntz5(test[i]));}
+ TimestampEnd = std::clock();
+
+ printf("ntz5: %d clocks\n", TimestampEnd - TimestampBeg);
+
+ TimestampBeg = std::clock();
+ for (std::size_t k = 0; k < Count; ++k)
+ for (i = 0; i < n; i += 2) {
+ if (ntz6(test[i]) != test[i+1]) error(test[i], ntz6(test[i]));}
+ TimestampEnd = std::clock();
+
+ printf("ntz6: %d clocks\n", TimestampEnd - TimestampBeg);
+
+ TimestampBeg = std::clock();
+ for (std::size_t k = 0; k < Count; ++k)
+ for (i = 0; i < n; i += 2) {
+ if (ntz6a(test[i]) != test[i+1]) error(test[i], ntz6a(test[i]));}
+ TimestampEnd = std::clock();
+
+ printf("ntz6a: %d clocks\n", TimestampEnd - TimestampBeg);
+
+ TimestampBeg = std::clock();
+ for (std::size_t k = 0; k < Count; ++k)
+ for (i = 0; i < n; i += 2) {
+ if (ntz7(test[i]) != test[i+1]) error(test[i], ntz7(test[i]));}
+ TimestampEnd = std::clock();
+
+ printf("ntz7: %d clocks\n", TimestampEnd - TimestampBeg);
+
+ TimestampBeg = std::clock();
+ for (std::size_t k = 0; k < Count; ++k)
+ for (i = 0; i < n; i += 2) {
+ if (ntz7_christophe(test[i]) != test[i+1]) error(test[i], ntz7(test[i]));}
+ TimestampEnd = std::clock();
+
+ printf("ntz7_christophe: %d clocks\n", TimestampEnd - TimestampBeg);
+
+ TimestampBeg = std::clock();
+ for (std::size_t k = 0; k < Count; ++k)
+ for (i = 0; i < n; i += 2) {
+ if (ntz8(test[i]) != test[i+1]) error(test[i], ntz8(test[i]));}
+ TimestampEnd = std::clock();
+
+ printf("ntz8: %d clocks\n", TimestampEnd - TimestampBeg);
+
+ TimestampBeg = std::clock();
+ for (std::size_t k = 0; k < Count; ++k)
+ for (i = 0; i < n; i += 2) {
+ if (ntz8a(test[i]) != test[i+1]) error(test[i], ntz8a(test[i]));}
+ TimestampEnd = std::clock();
+
+ printf("ntz8a: %d clocks\n", TimestampEnd - TimestampBeg);
+
+ TimestampBeg = std::clock();
+ for (std::size_t k = 0; k < Count; ++k)
+ for (i = 0; i < n; i += 2) {
+ if (ntz9(test[i]) != test[i+1]) error(test[i], ntz9(test[i]));}
+ TimestampEnd = std::clock();
+
+ printf("ntz9: %d clocks\n", TimestampEnd - TimestampBeg);
+
+ TimestampBeg = std::clock();
+ for (std::size_t k = 0; k < Count; ++k)
+ for (i = 0; i < n; i += 2) {
+ if (ntz10(test[i]) != test[i+1]) error(test[i], ntz10(test[i]));}
+ TimestampEnd = std::clock();
+
+ printf("ntz10: %d clocks\n", TimestampEnd - TimestampBeg);
+
+ if (errors == 0)
+ printf("Passed all %d cases.\n", sizeof(test)/8);
+
+# endif//NDEBUG
+}
diff --git a/src/third_party/glm/test/core/core_func_integer_find_msb.cpp b/src/third_party/glm/test/core/core_func_integer_find_msb.cpp
new file mode 100644
index 0000000..00268c8
--- /dev/null
+++ b/src/third_party/glm/test/core/core_func_integer_find_msb.cpp
@@ -0,0 +1,438 @@
+// This has the programs for computing the number of leading zeros
+// in a word.
+// Max line length is 57, to fit in hacker.book.
+// Compile with g++, not gcc.
+#include <cstdio>
+#include <cstdlib> // To define "exit", req'd by XLC.
+#include <ctime>
+
+#define LE 1 // 1 for little-endian, 0 for big-endian.
+
+int pop(unsigned x) {
+ x = x - ((x >> 1) & 0x55555555);
+ x = (x & 0x33333333) + ((x >> 2) & 0x33333333);
+ x = (x + (x >> 4)) & 0x0F0F0F0F;
+ x = x + (x << 8);
+ x = x + (x << 16);
+ return x >> 24;
+}
+
+int nlz1(unsigned x) {
+ int n;
+
+ if (x == 0) return(32);
+ n = 0;
+ if (x <= 0x0000FFFF) {n = n +16; x = x <<16;}
+ if (x <= 0x00FFFFFF) {n = n + 8; x = x << 8;}
+ if (x <= 0x0FFFFFFF) {n = n + 4; x = x << 4;}
+ if (x <= 0x3FFFFFFF) {n = n + 2; x = x << 2;}
+ if (x <= 0x7FFFFFFF) {n = n + 1;}
+ return n;
+}
+
+int nlz1a(unsigned x) {
+ int n;
+
+/* if (x == 0) return(32); */
+ if ((int)x <= 0) return (~x >> 26) & 32;
+ n = 1;
+ if ((x >> 16) == 0) {n = n +16; x = x <<16;}
+ if ((x >> 24) == 0) {n = n + 8; x = x << 8;}
+ if ((x >> 28) == 0) {n = n + 4; x = x << 4;}
+ if ((x >> 30) == 0) {n = n + 2; x = x << 2;}
+ n = n - (x >> 31);
+ return n;
+}
+// On basic Risc, 12 to 20 instructions.
+
+int nlz2(unsigned x) {
+ unsigned y;
+ int n;
+
+ n = 32;
+ y = x >>16; if (y != 0) {n = n -16; x = y;}
+ y = x >> 8; if (y != 0) {n = n - 8; x = y;}
+ y = x >> 4; if (y != 0) {n = n - 4; x = y;}
+ y = x >> 2; if (y != 0) {n = n - 2; x = y;}
+ y = x >> 1; if (y != 0) return n - 2;
+ return n - x;
+}
+
+// As above but coded as a loop for compactness:
+// 23 to 33 basic Risc instructions.
+int nlz2a(unsigned x) {
+ unsigned y;
+ int n, c;
+
+ n = 32;
+ c = 16;
+ do {
+ y = x >> c; if (y != 0) {n = n - c; x = y;}
+ c = c >> 1;
+ } while (c != 0);
+ return n - x;
+}
+
+int nlz3(int x) {
+ int y, n;
+
+ n = 0;
+ y = x;
+L: if (x < 0) return n;
+ if (y == 0) return 32 - n;
+ n = n + 1;
+ x = x << 1;
+ y = y >> 1;
+ goto L;
+}
+
+int nlz4(unsigned x) {
+ int y, m, n;
+
+ y = -(x >> 16); // If left half of x is 0,
+ m = (y >> 16) & 16; // set n = 16. If left half
+ n = 16 - m; // is nonzero, set n = 0 and
+ x = x >> m; // shift x right 16.
+ // Now x is of the form 0000xxxx.
+ y = x - 0x100; // If positions 8-15 are 0,
+ m = (y >> 16) & 8; // add 8 to n and shift x left 8.
+ n = n + m;
+ x = x << m;
+
+ y = x - 0x1000; // If positions 12-15 are 0,
+ m = (y >> 16) & 4; // add 4 to n and shift x left 4.
+ n = n + m;
+ x = x << m;
+
+ y = x - 0x4000; // If positions 14-15 are 0,
+ m = (y >> 16) & 2; // add 2 to n and shift x left 2.
+ n = n + m;
+ x = x << m;
+
+ y = x >> 14; // Set y = 0, 1, 2, or 3.
+ m = y & ~(y >> 1); // Set m = 0, 1, 2, or 2 resp.
+ return n + 2 - m;
+}
+
+int nlz5(unsigned x) {
+ int pop(unsigned x);
+
+ x = x | (x >> 1);
+ x = x | (x >> 2);
+ x = x | (x >> 4);
+ x = x | (x >> 8);
+ x = x | (x >>16);
+ return pop(~x);
+}
+
+/* The four programs below are not valid ANSI C programs. This is
+because they refer to the same storage locations as two different types.
+However, they work with xlc/AIX, gcc/AIX, and gcc/NT. If you try to
+code them more compactly by declaring a variable xx to be "double," and
+then using
+
+ n = 1054 - (*((unsigned *)&xx + LE) >> 20);
+
+then you are violating not only the rule above, but also the ANSI C
+rule that pointer arithmetic can be performed only on pointers to
+array elements.
+ When coded with the above statement, the program fails with xlc,
+gcc/AIX, and gcc/NT, at some optimization levels.
+ BTW, these programs use the "anonymous union" feature of C++, not
+available in C. */
+
+int nlz6(unsigned k) {
+ union {
+ unsigned asInt[2];
+ double asDouble;
+ };
+ int n;
+
+ asDouble = (double)k + 0.5;
+ n = 1054 - (asInt[LE] >> 20);
+ return n;
+}
+
+int nlz7(unsigned k) {
+ union {
+ unsigned asInt[2];
+ double asDouble;
+ };
+ int n;
+
+ asDouble = (double)k;
+ n = 1054 - (asInt[LE] >> 20);
+ n = (n & 31) + (n >> 9);
+ return n;
+}
+
+ /* In single precision, round-to-nearest mode, the basic method fails for:
+ k = 0, k = 01FFFFFF, 03FFFFFE <= k <= 03FFFFFF,
+ 07FFFFFC <= k <= 07FFFFFF,
+ 0FFFFFF8 <= k <= 0FFFFFFF,
+ ...
+ 7FFFFFC0 <= k <= 7FFFFFFF.
+ FFFFFF80 <= k <= FFFFFFFF.
+ For k = 0 it gives 158, and for the other values it is too low by 1. */
+
+int nlz8(unsigned k) {
+ union {
+ unsigned asInt;
+ float asFloat;
+ };
+ int n;
+
+ k = k & ~(k >> 1); /* Fix problem with rounding. */
+ asFloat = (float)k + 0.5f;
+ n = 158 - (asInt >> 23);
+ return n;
+}
+
+/* The example below shows how to make a macro for nlz. It uses an
+extension to the C and C++ languages that is provided by the GNU C/C++
+compiler, namely, that of allowing statements and declarations in
+expressions (see "Using and Porting GNU CC", by Richard M. Stallman
+(1998). The underscores are necessary to protect against the
+possibility that the macro argument will conflict with one of its local
+variables, e.g., NLZ(k). */
+
+int nlz9(unsigned k) {
+ union {
+ unsigned asInt;
+ float asFloat;
+ };
+ int n;
+
+ k = k & ~(k >> 1); /* Fix problem with rounding. */
+ asFloat = (float)k;
+ n = 158 - (asInt >> 23);
+ n = (n & 31) + (n >> 6); /* Fix problem with k = 0. */
+ return n;
+}
+
+/* Below are three nearly equivalent programs for computing the number
+of leading zeros in a word. This material is not in HD, but may be in a
+future edition.
+ Immediately below is Robert Harley's algorithm, found at the
+comp.arch newsgroup entry dated 7/12/96, pointed out to me by Norbert
+Juffa.
+ Table entries marked "u" are unused. 14 ops including a multiply,
+plus an indexed load.
+ The smallest multiplier that works is 0x045BCED1 = 17*65*129*513 (all
+of form 2**k + 1). There are no multipliers of three terms of the form
+2**k +- 1 that work, with a table size of 64 or 128. There are some,
+with a table size of 64, if you precede the multiplication with x = x -
+(x >> 1), but that seems less elegant. There are also some if you use a
+table size of 256, the smallest is 0x01033CBF = 65*255*1025 (this would
+save two instructions in the form of this algorithm with the
+multiplication expanded into shifts and adds, but the table size is
+getting a bit large). */
+
+#define u 99
+int nlz10(unsigned x) {
+
+ static char table[64] =
+ {32,31, u,16, u,30, 3, u, 15, u, u, u,29,10, 2, u,
+ u, u,12,14,21, u,19, u, u,28, u,25, u, 9, 1, u,
+ 17, u, 4, u, u, u,11, u, 13,22,20, u,26, u, u,18,
+ 5, u, u,23, u,27, u, 6, u,24, 7, u, 8, u, 0, u};
+
+ x = x | (x >> 1); // Propagate leftmost
+ x = x | (x >> 2); // 1-bit to the right.
+ x = x | (x >> 4);
+ x = x | (x >> 8);
+ x = x | (x >>16);
+ x = x*0x06EB14F9; // Multiplier is 7*255**3.
+ return table[x >> 26];
+}
+
+/* Harley's algorithm with multiply expanded.
+19 elementary ops plus an indexed load. */
+
+int nlz10a(unsigned x) {
+
+ static char table[64] =
+ {32,31, u,16, u,30, 3, u, 15, u, u, u,29,10, 2, u,
+ u, u,12,14,21, u,19, u, u,28, u,25, u, 9, 1, u,
+ 17, u, 4, u, u, u,11, u, 13,22,20, u,26, u, u,18,
+ 5, u, u,23, u,27, u, 6, u,24, 7, u, 8, u, 0, u};
+
+ x = x | (x >> 1); // Propagate leftmost
+ x = x | (x >> 2); // 1-bit to the right.
+ x = x | (x >> 4);
+ x = x | (x >> 8);
+ x = x | (x >> 16);
+ x = (x << 3) - x; // Multiply by 7.
+ x = (x << 8) - x; // Multiply by 255.
+ x = (x << 8) - x; // Again.
+ x = (x << 8) - x; // Again.
+ return table[x >> 26];
+}
+
+/* Julius Goryavsky's version of Harley's algorithm.
+17 elementary ops plus an indexed load, if the machine
+has "and not." */
+
+int nlz10b(unsigned x) {
+
+ static char table[64] =
+ {32,20,19, u, u,18, u, 7, 10,17, u, u,14, u, 6, u,
+ u, 9, u,16, u, u, 1,26, u,13, u, u,24, 5, u, u,
+ u,21, u, 8,11, u,15, u, u, u, u, 2,27, 0,25, u,
+ 22, u,12, u, u, 3,28, u, 23, u, 4,29, u, u,30,31};
+
+ x = x | (x >> 1); // Propagate leftmost
+ x = x | (x >> 2); // 1-bit to the right.
+ x = x | (x >> 4);
+ x = x | (x >> 8);
+ x = x & ~(x >> 16);
+ x = x*0xFD7049FF; // Activate this line or the following 3.
+// x = (x << 9) - x; // Multiply by 511.
+// x = (x << 11) - x; // Multiply by 2047.
+// x = (x << 14) - x; // Multiply by 16383.
+ return table[x >> 26];
+}
+
+int errors;
+void error(int x, int y) {
+ errors = errors + 1;
+ printf("Error for x = %08x, got %d\n", x, y);
+}
+
+int main()
+{
+# ifdef NDEBUG
+
+ int i, n;
+ static unsigned test[] = {0,32, 1,31, 2,30, 3,30, 4,29, 5,29, 6,29,
+ 7,29, 8,28, 9,28, 16,27, 32,26, 64,25, 128,24, 255,24, 256,23,
+ 512,22, 1024,21, 2048,20, 4096,19, 8192,18, 16384,17, 32768,16,
+ 65536,15, 0x20000,14, 0x40000,13, 0x80000,12, 0x100000,11,
+ 0x200000,10, 0x400000,9, 0x800000,8, 0x1000000,7, 0x2000000,6,
+ 0x4000000,5, 0x8000000,4, 0x0FFFFFFF,4, 0x10000000,3,
+ 0x3000FFFF,2, 0x50003333,1, 0x7FFFFFFF,1, 0x80000000,0,
+ 0xFFFFFFFF,0};
+ std::size_t const Count = 1000;
+
+ n = sizeof(test)/4;
+
+ std::clock_t TimestampBeg = 0;
+ std::clock_t TimestampEnd = 0;
+
+ TimestampBeg = std::clock();
+ for (std::size_t k = 0; k < Count; ++k)
+ for (i = 0; i < n; i += 2) {
+ if (nlz1(test[i]) != test[i+1]) error(test[i], nlz1(test[i]));}
+ TimestampEnd = std::clock();
+
+ printf("nlz1: %d clocks\n", TimestampEnd - TimestampBeg);
+
+ TimestampBeg = std::clock();
+ for (std::size_t k = 0; k < Count; ++k)
+ for (i = 0; i < n; i += 2) {
+ if (nlz1a(test[i]) != test[i+1]) error(test[i], nlz1a(test[i]));}
+ TimestampEnd = std::clock();
+
+ printf("nlz1a: %d clocks\n", TimestampEnd - TimestampBeg);
+
+ TimestampBeg = std::clock();
+ for (std::size_t k = 0; k < Count; ++k)
+ for (i = 0; i < n; i += 2) {
+ if (nlz2(test[i]) != test[i+1]) error(test[i], nlz2(test[i]));}
+ TimestampEnd = std::clock();
+
+ printf("nlz2: %d clocks\n", TimestampEnd - TimestampBeg);
+
+ TimestampBeg = std::clock();
+ for (std::size_t k = 0; k < Count; ++k)
+ for (i = 0; i < n; i += 2) {
+ if (nlz2a(test[i]) != test[i+1]) error(test[i], nlz2a(test[i]));}
+ TimestampEnd = std::clock();
+
+ printf("nlz2a: %d clocks\n", TimestampEnd - TimestampBeg);
+
+ TimestampBeg = std::clock();
+ for (std::size_t k = 0; k < Count; ++k)
+ for (i = 0; i < n; i += 2) {
+ if (nlz3(test[i]) != test[i+1]) error(test[i], nlz3(test[i]));}
+ TimestampEnd = std::clock();
+
+ printf("nlz3: %d clocks\n", TimestampEnd - TimestampBeg);
+
+ TimestampBeg = std::clock();
+ for (std::size_t k = 0; k < Count; ++k)
+ for (i = 0; i < n; i += 2) {
+ if (nlz4(test[i]) != test[i+1]) error(test[i], nlz4(test[i]));}
+ TimestampEnd = std::clock();
+
+ printf("nlz4: %d clocks\n", TimestampEnd - TimestampBeg);
+
+ TimestampBeg = std::clock();
+ for (std::size_t k = 0; k < Count; ++k)
+ for (i = 0; i < n; i += 2) {
+ if (nlz5(test[i]) != test[i+1]) error(test[i], nlz5(test[i]));}
+ TimestampEnd = std::clock();
+
+ printf("nlz5: %d clocks\n", TimestampEnd - TimestampBeg);
+
+ TimestampBeg = std::clock();
+ for (std::size_t k = 0; k < Count; ++k)
+ for (i = 0; i < n; i += 2) {
+ if (nlz6(test[i]) != test[i+1]) error(test[i], nlz6(test[i]));}
+ TimestampEnd = std::clock();
+
+ printf("nlz6: %d clocks\n", TimestampEnd - TimestampBeg);
+
+ TimestampBeg = std::clock();
+ for (std::size_t k = 0; k < Count; ++k)
+ for (i = 0; i < n; i += 2) {
+ if (nlz7(test[i]) != test[i+1]) error(test[i], nlz7(test[i]));}
+ TimestampEnd = std::clock();
+
+ printf("nlz7: %d clocks\n", TimestampEnd - TimestampBeg);
+
+ TimestampBeg = std::clock();
+ for (std::size_t k = 0; k < Count; ++k)
+ for (i = 0; i < n; i += 2) {
+ if (nlz8(test[i]) != test[i+1]) error(test[i], nlz8(test[i]));}
+ TimestampEnd = std::clock();
+
+ printf("nlz8: %d clocks\n", TimestampEnd - TimestampBeg);
+
+ TimestampBeg = std::clock();
+ for (std::size_t k = 0; k < Count; ++k)
+ for (i = 0; i < n; i += 2) {
+ if (nlz9(test[i]) != test[i+1]) error(test[i], nlz9(test[i]));}
+ TimestampEnd = std::clock();
+
+ printf("nlz9: %d clocks\n", TimestampEnd - TimestampBeg);
+
+ TimestampBeg = std::clock();
+ for (std::size_t k = 0; k < Count; ++k)
+ for (i = 0; i < n; i += 2) {
+ if (nlz10(test[i]) != test[i+1]) error(test[i], nlz10(test[i]));}
+ TimestampEnd = std::clock();
+
+ printf("nlz10: %d clocks\n", TimestampEnd - TimestampBeg);
+
+ TimestampBeg = std::clock();
+ for (std::size_t k = 0; k < Count; ++k)
+ for (i = 0; i < n; i += 2) {
+ if (nlz10a(test[i]) != test[i+1]) error(test[i], nlz10a(test[i]));}
+ TimestampEnd = std::clock();
+
+ printf("nlz10a: %d clocks\n", TimestampEnd - TimestampBeg);
+
+ TimestampBeg = std::clock();
+ for (std::size_t k = 0; k < Count; ++k)
+ for (i = 0; i < n; i += 2) {
+ if (nlz10b(test[i]) != test[i+1]) error(test[i], nlz10b(test[i]));}
+ TimestampEnd = std::clock();
+
+ printf("nlz10b: %d clocks\n", TimestampEnd - TimestampBeg);
+
+ if (errors == 0)
+ printf("Passed all %d cases.\n", sizeof(test)/8);
+
+# endif//NDEBUG
+}
diff --git a/src/third_party/glm/test/core/core_func_matrix.cpp b/src/third_party/glm/test/core/core_func_matrix.cpp
new file mode 100644
index 0000000..8037deb
--- /dev/null
+++ b/src/third_party/glm/test/core/core_func_matrix.cpp
@@ -0,0 +1,277 @@
+#include <glm/matrix.hpp>
+#include <glm/gtc/matrix_transform.hpp>
+#include <glm/gtc/ulp.hpp>
+#include <glm/gtc/epsilon.hpp>
+#include <vector>
+#include <ctime>
+#include <cstdio>
+
+using namespace glm;
+
+int test_matrixCompMult()
+{
+ int Error(0);
+
+ {
+ mat2 m(0, 1, 2, 3);
+ mat2 n = matrixCompMult(m, m);
+ Error += n == mat2(0, 1, 4, 9) ? 0 : 1;
+ }
+
+ {
+ mat2x3 m(0, 1, 2, 3, 4, 5);
+ mat2x3 n = matrixCompMult(m, m);
+ Error += n == mat2x3(0, 1, 4, 9, 16, 25) ? 0 : 1;
+ }
+
+ {
+ mat2x4 m(0, 1, 2, 3, 4, 5, 6, 7);
+ mat2x4 n = matrixCompMult(m, m);
+ Error += n == mat2x4(0, 1, 4, 9, 16, 25, 36, 49) ? 0 : 1;
+ }
+
+ {
+ mat3 m(0, 1, 2, 3, 4, 5, 6, 7, 8);
+ mat3 n = matrixCompMult(m, m);
+ Error += n == mat3(0, 1, 4, 9, 16, 25, 36, 49, 64) ? 0 : 1;
+ }
+
+ {
+ mat3x2 m(0, 1, 2, 3, 4, 5);
+ mat3x2 n = matrixCompMult(m, m);
+ Error += n == mat3x2(0, 1, 4, 9, 16, 25) ? 0 : 1;
+ }
+
+ {
+ mat3x4 m(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11);
+ mat3x4 n = matrixCompMult(m, m);
+ Error += n == mat3x4(0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121) ? 0 : 1;
+ }
+
+ {
+ mat4 m(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
+ mat4 n = matrixCompMult(m, m);
+ Error += n == mat4(0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225) ? 0 : 1;
+ }
+
+ {
+ mat4x2 m(0, 1, 2, 3, 4, 5, 6, 7);
+ mat4x2 n = matrixCompMult(m, m);
+ Error += n == mat4x2(0, 1, 4, 9, 16, 25, 36, 49) ? 0 : 1;
+ }
+
+ {
+ mat4x3 m(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11);
+ mat4x3 n = matrixCompMult(m, m);
+ Error += n == mat4x3(0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121) ? 0 : 1;
+ }
+
+ return Error;
+}
+
+int test_outerProduct()
+{
+ { glm::mat2 m = glm::outerProduct(glm::vec2(1.0f), glm::vec2(1.0f)); }
+ { glm::mat3 m = glm::outerProduct(glm::vec3(1.0f), glm::vec3(1.0f)); }
+ { glm::mat4 m = glm::outerProduct(glm::vec4(1.0f), glm::vec4(1.0f)); }
+
+ { glm::mat2x3 m = glm::outerProduct(glm::vec3(1.0f), glm::vec2(1.0f)); }
+ { glm::mat2x4 m = glm::outerProduct(glm::vec4(1.0f), glm::vec2(1.0f)); }
+
+ { glm::mat3x2 m = glm::outerProduct(glm::vec2(1.0f), glm::vec3(1.0f)); }
+ { glm::mat3x4 m = glm::outerProduct(glm::vec4(1.0f), glm::vec3(1.0f)); }
+
+ { glm::mat4x2 m = glm::outerProduct(glm::vec2(1.0f), glm::vec4(1.0f)); }
+ { glm::mat4x3 m = glm::outerProduct(glm::vec3(1.0f), glm::vec4(1.0f)); }
+
+ return 0;
+}
+
+int test_transpose()
+{
+ int Error(0);
+
+ {
+ mat2 m(0, 1, 2, 3);
+ mat2 t = transpose(m);
+ Error += t == mat2(0, 2, 1, 3) ? 0 : 1;
+ }
+
+ {
+ mat2x3 m(0, 1, 2, 3, 4, 5);
+ mat3x2 t = transpose(m);
+ Error += t == mat3x2(0, 3, 1, 4, 2, 5) ? 0 : 1;
+ }
+
+ {
+ mat2x4 m(0, 1, 2, 3, 4, 5, 6, 7);
+ mat4x2 t = transpose(m);
+ Error += t == mat4x2(0, 4, 1, 5, 2, 6, 3, 7) ? 0 : 1;
+ }
+
+ {
+ mat3 m(0, 1, 2, 3, 4, 5, 6, 7, 8);
+ mat3 t = transpose(m);
+ Error += t == mat3(0, 3, 6, 1, 4, 7, 2, 5, 8) ? 0 : 1;
+ }
+
+ {
+ mat3x2 m(0, 1, 2, 3, 4, 5);
+ mat2x3 t = transpose(m);
+ Error += t == mat2x3(0, 2, 4, 1, 3, 5) ? 0 : 1;
+ }
+
+ {
+ mat3x4 m(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11);
+ mat4x3 t = transpose(m);
+ Error += t == mat4x3(0, 4, 8, 1, 5, 9, 2, 6, 10, 3, 7, 11) ? 0 : 1;
+ }
+
+ {
+ mat4 m(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
+ mat4 t = transpose(m);
+ Error += t == mat4(0, 4, 8, 12, 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15) ? 0 : 1;
+ }
+
+ {
+ mat4x2 m(0, 1, 2, 3, 4, 5, 6, 7);
+ mat2x4 t = transpose(m);
+ Error += t == mat2x4(0, 2, 4, 6, 1, 3, 5, 7) ? 0 : 1;
+ }
+
+ {
+ mat4x3 m(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11);
+ mat3x4 t = transpose(m);
+ Error += t == mat3x4(0, 3, 6, 9, 1, 4, 7, 10, 2, 5, 8, 11) ? 0 : 1;
+ }
+
+ return Error;
+}
+
+int test_determinant()
+{
+
+
+ return 0;
+}
+
+int test_inverse()
+{
+ int Failed(0);
+
+ glm::mat4x4 A4x4(
+ glm::vec4(1, 0, 1, 0),
+ glm::vec4(0, 1, 0, 0),
+ glm::vec4(0, 0, 1, 0),
+ glm::vec4(0, 0, 0, 1));
+ glm::mat4x4 B4x4 = inverse(A4x4);
+ glm::mat4x4 I4x4 = A4x4 * B4x4;
+ Failed += I4x4 == glm::mat4x4(1) ? 0 : 1;
+
+ glm::mat3x3 A3x3(
+ glm::vec3(1, 0, 1),
+ glm::vec3(0, 1, 0),
+ glm::vec3(0, 0, 1));
+ glm::mat3x3 B3x3 = glm::inverse(A3x3);
+ glm::mat3x3 I3x3 = A3x3 * B3x3;
+ Failed += I3x3 == glm::mat3x3(1) ? 0 : 1;
+
+ glm::mat2x2 A2x2(
+ glm::vec2(1, 1),
+ glm::vec2(0, 1));
+ glm::mat2x2 B2x2 = glm::inverse(A2x2);
+ glm::mat2x2 I2x2 = A2x2 * B2x2;
+ Failed += I2x2 == glm::mat2x2(1) ? 0 : 1;
+
+ return Failed;
+}
+
+int test_inverse_simd()
+{
+ int Error = 0;
+
+ glm::mat4x4 const Identity(1);
+
+ glm::mat4x4 const A4x4(
+ glm::vec4(1, 0, 1, 0),
+ glm::vec4(0, 1, 0, 0),
+ glm::vec4(0, 0, 1, 0),
+ glm::vec4(0, 0, 0, 1));
+ glm::mat4x4 const B4x4 = glm::inverse(A4x4);
+ glm::mat4x4 const I4x4 = A4x4 * B4x4;
+
+ Error += glm::all(glm::epsilonEqual(I4x4[0], Identity[0], 0.001f)) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(I4x4[1], Identity[1], 0.001f)) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(I4x4[2], Identity[2], 0.001f)) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(I4x4[3], Identity[3], 0.001f)) ? 0 : 1;
+
+ return Error;
+}
+
+template <typename VEC3, typename MAT4>
+int test_inverse_perf(std::size_t Count, std::size_t Instance, char const * Message)
+{
+ std::vector<MAT4> TestInputs;
+ TestInputs.resize(Count);
+ std::vector<MAT4> TestOutputs;
+ TestOutputs.resize(TestInputs.size());
+
+ VEC3 Axis(glm::normalize(VEC3(1.0f, 2.0f, 3.0f)));
+
+ for(std::size_t i = 0; i < TestInputs.size(); ++i)
+ {
+ typename MAT4::value_type f = static_cast<typename MAT4::value_type>(i + Instance) * typename MAT4::value_type(0.1) + typename MAT4::value_type(0.1);
+ TestInputs[i] = glm::rotate(glm::translate(MAT4(1), Axis * f), f, Axis);
+ //TestInputs[i] = glm::translate(MAT4(1), Axis * f);
+ }
+
+ std::clock_t StartTime = std::clock();
+
+ for(std::size_t i = 0; i < TestInputs.size(); ++i)
+ TestOutputs[i] = glm::inverse(TestInputs[i]);
+
+ std::clock_t EndTime = std::clock();
+
+ for(std::size_t i = 0; i < TestInputs.size(); ++i)
+ TestOutputs[i] = TestOutputs[i] * TestInputs[i];
+
+ typename MAT4::value_type Diff(0);
+ for(std::size_t Entry = 0; Entry < TestOutputs.size(); ++Entry)
+ {
+ MAT4 i(1.0);
+ MAT4 m(TestOutputs[Entry]);
+ for(glm::length_t y = 0; y < m.length(); ++y)
+ for(glm::length_t x = 0; x < m[y].length(); ++x)
+ Diff = glm::max(m[y][x], i[y][x]);
+ }
+
+ //glm::uint Ulp = 0;
+ //Ulp = glm::max(glm::float_distance(*Dst, *Src), Ulp);
+
+ printf("inverse<%s>(%f): %lu\n", Message, Diff, EndTime - StartTime);
+
+ return 0;
+}
+
+int main()
+{
+ int Error(0);
+ Error += test_matrixCompMult();
+ Error += test_outerProduct();
+ Error += test_transpose();
+ Error += test_determinant();
+ Error += test_inverse();
+ Error += test_inverse_simd();
+
+# ifdef NDEBUG
+ std::size_t const Samples(1000);
+ for(std::size_t i = 0; i < 1; ++i)
+ {
+ Error += test_inverse_perf<glm::vec3, glm::mat4>(Samples, i, "mat4");
+ Error += test_inverse_perf<glm::dvec3, glm::dmat4>(Samples, i, "dmat4");
+ }
+# endif//NDEBUG
+
+ return Error;
+}
+
diff --git a/src/third_party/glm/test/core/core_func_noise.cpp b/src/third_party/glm/test/core/core_func_noise.cpp
new file mode 100644
index 0000000..41db681
--- /dev/null
+++ b/src/third_party/glm/test/core/core_func_noise.cpp
@@ -0,0 +1,7 @@
+int main()
+{
+ int Failed = 0;
+
+ return Failed;
+}
+
diff --git a/src/third_party/glm/test/core/core_func_packing.cpp b/src/third_party/glm/test/core/core_func_packing.cpp
new file mode 100644
index 0000000..c3cd14a
--- /dev/null
+++ b/src/third_party/glm/test/core/core_func_packing.cpp
@@ -0,0 +1,156 @@
+#include <glm/gtc/type_precision.hpp>
+#include <glm/gtc/epsilon.hpp>
+#include <glm/vector_relational.hpp>
+#include <glm/packing.hpp>
+#include <vector>
+
+int test_packUnorm2x16()
+{
+ int Error = 0;
+
+ std::vector<glm::vec2> A;
+ A.push_back(glm::vec2(1.0f, 0.0f));
+ A.push_back(glm::vec2(0.5f, 0.7f));
+ A.push_back(glm::vec2(0.1f, 0.2f));
+
+ for(std::size_t i = 0; i < A.size(); ++i)
+ {
+ glm::vec2 B(A[i]);
+ glm::uint32 C = glm::packUnorm2x16(B);
+ glm::vec2 D = glm::unpackUnorm2x16(C);
+ Error += glm::all(glm::epsilonEqual(B, D, 1.0f / 65535.f)) ? 0 : 1;
+ assert(!Error);
+ }
+
+ return Error;
+}
+
+int test_packSnorm2x16()
+{
+ int Error = 0;
+
+ std::vector<glm::vec2> A;
+ A.push_back(glm::vec2( 1.0f, 0.0f));
+ A.push_back(glm::vec2(-0.5f,-0.7f));
+ A.push_back(glm::vec2(-0.1f, 0.1f));
+
+ for(std::size_t i = 0; i < A.size(); ++i)
+ {
+ glm::vec2 B(A[i]);
+ glm::uint32 C = glm::packSnorm2x16(B);
+ glm::vec2 D = glm::unpackSnorm2x16(C);
+ Error += glm::all(glm::epsilonEqual(B, D, 1.0f / 32767.0f * 2.0f)) ? 0 : 1;
+ assert(!Error);
+ }
+
+ return Error;
+}
+
+int test_packUnorm4x8()
+{
+ int Error = 0;
+
+ glm::uint32 Packed = glm::packUnorm4x8(glm::vec4(1.0f, 0.5f, 0.0f, 1.0f));
+ glm::u8vec4 Vec(255, 128, 0, 255);
+ glm::uint32 & Ref = *reinterpret_cast<glm::uint32*>(&Vec[0]);
+
+ Error += Packed == Ref ? 0 : 1;
+
+ std::vector<glm::vec4> A;
+ A.push_back(glm::vec4(1.0f, 0.7f, 0.3f, 0.0f));
+ A.push_back(glm::vec4(0.5f, 0.1f, 0.2f, 0.3f));
+
+ for(std::size_t i = 0; i < A.size(); ++i)
+ {
+ glm::vec4 B(A[i]);
+ glm::uint32 C = glm::packUnorm4x8(B);
+ glm::vec4 D = glm::unpackUnorm4x8(C);
+ Error += glm::all(glm::epsilonEqual(B, D, 1.0f / 255.f)) ? 0 : 1;
+ assert(!Error);
+ }
+
+ return Error;
+}
+
+int test_packSnorm4x8()
+{
+ int Error = 0;
+
+ std::vector<glm::vec4> A;
+ A.push_back(glm::vec4( 1.0f, 0.0f,-0.5f,-1.0f));
+ A.push_back(glm::vec4(-0.7f,-0.1f, 0.1f, 0.7f));
+
+ for(std::size_t i = 0; i < A.size(); ++i)
+ {
+ glm::vec4 B(A[i]);
+ glm::uint32 C = glm::packSnorm4x8(B);
+ glm::vec4 D = glm::unpackSnorm4x8(C);
+ Error += glm::all(glm::epsilonEqual(B, D, 1.0f / 127.f)) ? 0 : 1;
+ assert(!Error);
+ }
+
+ return Error;
+}
+
+int test_packHalf2x16()
+{
+ int Error = 0;
+/*
+ std::vector<glm::hvec2> A;
+ A.push_back(glm::hvec2(glm::half( 1.0f), glm::half( 2.0f)));
+ A.push_back(glm::hvec2(glm::half(-1.0f), glm::half(-2.0f)));
+ A.push_back(glm::hvec2(glm::half(-1.1f), glm::half( 1.1f)));
+*/
+ std::vector<glm::vec2> A;
+ A.push_back(glm::vec2( 1.0f, 2.0f));
+ A.push_back(glm::vec2(-1.0f,-2.0f));
+ A.push_back(glm::vec2(-1.1f, 1.1f));
+
+ for(std::size_t i = 0; i < A.size(); ++i)
+ {
+ glm::vec2 B(A[i]);
+ glm::uint C = glm::packHalf2x16(B);
+ glm::vec2 D = glm::unpackHalf2x16(C);
+ //Error += B == D ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(B, D, 1.0f / 127.f)) ? 0 : 1;
+ assert(!Error);
+ }
+
+ return Error;
+}
+
+int test_packDouble2x32()
+{
+ int Error = 0;
+
+ std::vector<glm::uvec2> A;
+ A.push_back(glm::uvec2( 1, 2));
+ A.push_back(glm::uvec2(-1,-2));
+ A.push_back(glm::uvec2(-1000, 1100));
+
+ for(std::size_t i = 0; i < A.size(); ++i)
+ {
+ glm::uvec2 B(A[i]);
+ double C = glm::packDouble2x32(B);
+ glm::uvec2 D = glm::unpackDouble2x32(C);
+ Error += B == D ? 0 : 1;
+ assert(!Error);
+ }
+
+ return Error;
+}
+
+int main()
+{
+ int Error = 0;
+
+ Error += test_packSnorm4x8();
+ Error += test_packUnorm4x8();
+ Error += test_packSnorm2x16();
+ Error += test_packUnorm2x16();
+ Error += test_packHalf2x16();
+ Error += test_packDouble2x32();
+
+ return Error;
+}
+
diff --git a/src/third_party/glm/test/core/core_func_swizzle.cpp b/src/third_party/glm/test/core/core_func_swizzle.cpp
new file mode 100644
index 0000000..dfd6c8a
--- /dev/null
+++ b/src/third_party/glm/test/core/core_func_swizzle.cpp
@@ -0,0 +1,78 @@
+#define GLM_FORCE_MESSAGES
+#define GLM_FORCE_SWIZZLE
+#include <glm/glm.hpp>
+
+int test_ivec2_swizzle()
+{
+ int Error = 0;
+
+ glm::ivec2 A(1, 2);
+ glm::ivec2 B = A.yx();
+ glm::ivec2 C = B.yx();
+
+ Error += A != B ? 0 : 1;
+ Error += A == C ? 0 : 1;
+
+ return Error;
+}
+
+int test_ivec3_swizzle()
+{
+ int Error = 0;
+
+ glm::ivec3 A(1, 2, 3);
+ glm::ivec3 B = A.zyx();
+ glm::ivec3 C = B.zyx();
+
+ Error += A != B ? 0 : 1;
+ Error += A == C ? 0 : 1;
+
+ return Error;
+}
+
+int test_ivec4_swizzle()
+{
+ int Error = 0;
+
+ glm::ivec4 A(1, 2, 3, 4);
+ glm::ivec4 B = A.wzyx();
+ glm::ivec4 C = B.wzyx();
+
+ Error += A != B ? 0 : 1;
+ Error += A == C ? 0 : 1;
+
+ return Error;
+}
+
+int test_vec4_swizzle()
+{
+ int Error = 0;
+
+ glm::vec4 A(1, 2, 3, 4);
+ glm::vec4 B = A.wzyx();
+ glm::vec4 C = B.wzyx();
+
+ Error += A != B ? 0 : 1;
+ Error += A == C ? 0 : 1;
+
+ float f = glm::dot(C.wzyx(), C.xyzw());
+ Error += glm::abs(f - 20.f) < 0.01f ? 0 : 1;
+
+ return Error;
+}
+
+int main()
+{
+ int Error = 0;
+
+ Error += test_ivec2_swizzle();
+ Error += test_ivec3_swizzle();
+ Error += test_ivec4_swizzle();
+
+ Error += test_vec4_swizzle();
+
+ return Error;
+}
+
+
+
diff --git a/src/third_party/glm/test/core/core_func_trigonometric.cpp b/src/third_party/glm/test/core/core_func_trigonometric.cpp
new file mode 100644
index 0000000..3172340
--- /dev/null
+++ b/src/third_party/glm/test/core/core_func_trigonometric.cpp
@@ -0,0 +1,10 @@
+#include <glm/trigonometric.hpp>
+
+int main()
+{
+ int Error = 0;
+
+
+ return Error;
+}
+
diff --git a/src/third_party/glm/test/core/core_func_vector_relational.cpp b/src/third_party/glm/test/core/core_func_vector_relational.cpp
new file mode 100644
index 0000000..c98f789
--- /dev/null
+++ b/src/third_party/glm/test/core/core_func_vector_relational.cpp
@@ -0,0 +1,42 @@
+#include <glm/vec2.hpp>
+#include <glm/vec3.hpp>
+#include <glm/vec4.hpp>
+#include <glm/vector_relational.hpp>
+#include <glm/gtc/vec1.hpp>
+
+int test_not()
+{
+ int Error(0);
+
+ {
+ glm::bvec1 v(false);
+ Error += glm::all(glm::not_(v)) ? 0 : 1;
+ }
+
+ {
+ glm::bvec2 v(false);
+ Error += glm::all(glm::not_(v)) ? 0 : 1;
+ }
+
+ {
+ glm::bvec3 v(false);
+ Error += glm::all(glm::not_(v)) ? 0 : 1;
+ }
+
+ {
+ glm::bvec4 v(false);
+ Error += glm::all(glm::not_(v)) ? 0 : 1;
+ }
+
+ return Error;
+}
+
+int main()
+{
+ int Error(0);
+
+ Error += test_not();
+
+ return Error;
+}
+
diff --git a/src/third_party/glm/test/core/core_setup_force_cxx98.cpp b/src/third_party/glm/test/core/core_setup_force_cxx98.cpp
new file mode 100644
index 0000000..4b59501
--- /dev/null
+++ b/src/third_party/glm/test/core/core_setup_force_cxx98.cpp
@@ -0,0 +1,10 @@
+#define GLM_FORCE_CXX98
+#include <glm/glm.hpp>
+#include <glm/ext.hpp>
+
+int main()
+{
+ int Error = 0;
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/core/core_setup_message.cpp b/src/third_party/glm/test/core/core_setup_message.cpp
new file mode 100644
index 0000000..7eaf702
--- /dev/null
+++ b/src/third_party/glm/test/core/core_setup_message.cpp
@@ -0,0 +1,263 @@
+#define GLM_FORCE_MESSAGES
+#include <glm/vec3.hpp>
+#include <cstdio>
+
+int test_compiler()
+{
+ int Error(0);
+
+ if(GLM_COMPILER & GLM_COMPILER_VC)
+ {
+ switch(GLM_COMPILER)
+ {
+ case GLM_COMPILER_VC2010:
+ std::printf("GLM_COMPILER_VC2010\n");
+ break;
+ case GLM_COMPILER_VC2012:
+ std::printf("GLM_COMPILER_VC2012\n");
+ break;
+ case GLM_COMPILER_VC2013:
+ std::printf("GLM_COMPILER_VC2013\n");
+ break;
+ case GLM_COMPILER_VC2015:
+ std::printf("GLM_COMPILER_VC2015\n");
+ break;
+ default:
+ std::printf("Visual C++ version not detected\n");
+ Error += 1;
+ break;
+ }
+ }
+ else if(GLM_COMPILER & GLM_COMPILER_GCC)
+ {
+ switch(GLM_COMPILER)
+ {
+ case GLM_COMPILER_GCC44:
+ std::printf("GLM_COMPILER_GCC44\n");
+ break;
+ case GLM_COMPILER_GCC45:
+ std::printf("GLM_COMPILER_GCC45\n");
+ break;
+ case GLM_COMPILER_GCC46:
+ std::printf("GLM_COMPILER_GCC46\n");
+ break;
+ case GLM_COMPILER_GCC47:
+ std::printf("GLM_COMPILER_GCC47\n");
+ break;
+ case GLM_COMPILER_GCC48:
+ std::printf("GLM_COMPILER_GCC48\n");
+ break;
+ case GLM_COMPILER_GCC49:
+ std::printf("GLM_COMPILER_GCC49\n");
+ break;
+ case GLM_COMPILER_GCC50:
+ std::printf("GLM_COMPILER_GCC50\n");
+ break;
+ case GLM_COMPILER_GCC51:
+ std::printf("GLM_COMPILER_GCC51\n");
+ break;
+ case GLM_COMPILER_GCC52:
+ std::printf("GLM_COMPILER_GCC52\n");
+ break;
+ case GLM_COMPILER_GCC53:
+ std::printf("GLM_COMPILER_GCC53\n");
+ break;
+ case GLM_COMPILER_GCC54:
+ std::printf("GLM_COMPILER_GCC54\n");
+ break;
+ case GLM_COMPILER_GCC60:
+ std::printf("GLM_COMPILER_GCC60\n");
+ break;
+ case GLM_COMPILER_GCC61:
+ std::printf("GLM_COMPILER_GCC61\n");
+ break;
+ case GLM_COMPILER_GCC62:
+ std::printf("GLM_COMPILER_GCC62\n");
+ break;
+ case GLM_COMPILER_GCC70:
+ std::printf("GLM_COMPILER_GCC70\n");
+ break;
+ case GLM_COMPILER_GCC71:
+ std::printf("GLM_COMPILER_GCC71\n");
+ break;
+ case GLM_COMPILER_GCC72:
+ std::printf("GLM_COMPILER_GCC72\n");
+ break;
+ case GLM_COMPILER_GCC80:
+ std::printf("GLM_COMPILER_GCC80\n");
+ break;
+ default:
+ std::printf("GCC version not detected\n");
+ Error += 1;
+ break;
+ }
+ }
+ else if(GLM_COMPILER & GLM_COMPILER_CUDA)
+ {
+ std::printf("GLM_COMPILER_CUDA\n");
+ }
+ else if(GLM_COMPILER & GLM_COMPILER_CLANG)
+ {
+ switch(GLM_COMPILER)
+ {
+ case GLM_COMPILER_CLANG32:
+ std::printf("GLM_COMPILER_CLANG32\n");
+ break;
+ case GLM_COMPILER_CLANG33:
+ std::printf("GLM_COMPILER_CLANG33\n");
+ break;
+ case GLM_COMPILER_CLANG34:
+ std::printf("GLM_COMPILER_CLANG34\n");
+ break;
+ case GLM_COMPILER_CLANG35:
+ std::printf("GLM_COMPILER_CLANG35\n");
+ break;
+ case GLM_COMPILER_CLANG36:
+ std::printf("GLM_COMPILER_CLANG36\n");
+ break;
+ case GLM_COMPILER_CLANG37:
+ std::printf("GLM_COMPILER_CLANG37\n");
+ break;
+ case GLM_COMPILER_CLANG38:
+ std::printf("GLM_COMPILER_CLANG38\n");
+ break;
+ case GLM_COMPILER_CLANG39:
+ std::printf("GLM_COMPILER_CLANG39\n");
+ break;
+ default:
+ std::printf("LLVM version not detected\n");
+ break;
+ }
+ }
+ else if(GLM_COMPILER & GLM_COMPILER_INTEL)
+ {
+ switch(GLM_COMPILER)
+ {
+ case GLM_COMPILER_INTEL12:
+ std::printf("GLM_COMPILER_INTEL12\n");
+ break;
+ case GLM_COMPILER_INTEL12_1:
+ std::printf("GLM_COMPILER_INTEL12_1\n");
+ break;
+ case GLM_COMPILER_INTEL13:
+ std::printf("GLM_COMPILER_INTEL13\n");
+ break;
+ case GLM_COMPILER_INTEL14:
+ std::printf("GLM_COMPILER_INTEL14\n");
+ break;
+ case GLM_COMPILER_INTEL15:
+ std::printf("GLM_COMPILER_INTEL15\n");
+ break;
+ case GLM_COMPILER_INTEL16:
+ std::printf("GLM_COMPILER_INTEL16\n");
+ break;
+ default:
+ std::printf("Intel compiler version not detected\n");
+ Error += 1;
+ break;
+ }
+ }
+ else
+ {
+ std::printf("Undetected compiler\n");
+ Error += 1;
+ }
+
+ return Error;
+}
+
+int test_model()
+{
+ int Error = 0;
+
+ Error += ((sizeof(void*) == 4) && (GLM_MODEL == GLM_MODEL_32)) || ((sizeof(void*) == 8) && (GLM_MODEL == GLM_MODEL_64)) ? 0 : 1;
+
+ if(GLM_MODEL == GLM_MODEL_32)
+ std::printf("GLM_MODEL_32\n");
+ else if(GLM_MODEL == GLM_MODEL_64)
+ std::printf("GLM_MODEL_64\n");
+
+ return Error;
+}
+
+int test_instruction_set()
+{
+ int Error = 0;
+
+ std::printf("GLM_ARCH: ");
+
+ if(GLM_ARCH == GLM_ARCH_PURE)
+ std::printf("GLM_ARCH_PURE ");
+ if(GLM_ARCH & GLM_ARCH_ARM_BIT)
+ std::printf("ARM ");
+ if(GLM_ARCH & GLM_ARCH_NEON_BIT)
+ std::printf("NEON ");
+ if(GLM_ARCH & GLM_ARCH_AVX2)
+ std::printf("AVX2 ");
+ if(GLM_ARCH & GLM_ARCH_AVX)
+ std::printf("AVX ");
+ if(GLM_ARCH & GLM_ARCH_SSE42_BIT)
+ std::printf("SSE4.2 ");
+ if(GLM_ARCH & GLM_ARCH_SSE41_BIT)
+ std::printf("SSE4.1 ");
+ if(GLM_ARCH & GLM_ARCH_SSSE3_BIT)
+ std::printf("SSSE3 ");
+ if(GLM_ARCH & GLM_ARCH_SSE3_BIT)
+ std::printf("SSE3 ");
+ if(GLM_ARCH & GLM_ARCH_SSE2_BIT)
+ std::printf("SSE2 ");
+
+ std::printf("\n");
+
+ return Error;
+}
+
+int test_cpp_version()
+{
+ std::printf("__cplusplus: %lld\n", __cplusplus);
+
+ return 0;
+}
+
+int test_operators()
+{
+ glm::vec3 A(1.0f);
+ glm::vec3 B(1.0f);
+ bool R = A != B;
+ bool S = A == B;
+
+ return (S && !R) ? 0 : 1;
+}
+
+template <typename T>
+struct vec
+{
+
+};
+
+template <template <typename> class C, typename T>
+struct Class
+{
+
+};
+
+template <typename T>
+struct Class<vec, T>
+{
+
+};
+
+int main()
+{
+ //Class<vec, float> C;
+
+ int Error = 0;
+
+ Error += test_cpp_version();
+ Error += test_compiler();
+ Error += test_model();
+ Error += test_instruction_set();
+ Error += test_operators();
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/core/core_setup_precision.cpp b/src/third_party/glm/test/core/core_setup_precision.cpp
new file mode 100644
index 0000000..b44bc50
--- /dev/null
+++ b/src/third_party/glm/test/core/core_setup_precision.cpp
@@ -0,0 +1,58 @@
+#define GLM_FORCE_INLINE
+#define GLM_PRECISION_HIGHP_FLOAT
+#include <glm/glm.hpp>
+#include <glm/ext.hpp>
+
+static int test_mat()
+{
+ int Error = 0;
+
+ Error += sizeof(glm::mat2) == sizeof(glm::highp_mat2) ? 0 : 1;
+ Error += sizeof(glm::mat3) == sizeof(glm::highp_mat3) ? 0 : 1;
+ Error += sizeof(glm::mat4) == sizeof(glm::highp_mat4) ? 0 : 1;
+
+ Error += sizeof(glm::mat2x2) == sizeof(glm::highp_mat2x2) ? 0 : 1;
+ Error += sizeof(glm::mat2x3) == sizeof(glm::highp_mat2x3) ? 0 : 1;
+ Error += sizeof(glm::mat2x4) == sizeof(glm::highp_mat2x4) ? 0 : 1;
+ Error += sizeof(glm::mat3x2) == sizeof(glm::highp_mat3x2) ? 0 : 1;
+ Error += sizeof(glm::mat3x3) == sizeof(glm::highp_mat3x3) ? 0 : 1;
+ Error += sizeof(glm::mat3x4) == sizeof(glm::highp_mat3x4) ? 0 : 1;
+ Error += sizeof(glm::mat4x2) == sizeof(glm::highp_mat4x2) ? 0 : 1;
+ Error += sizeof(glm::mat4x3) == sizeof(glm::highp_mat4x3) ? 0 : 1;
+ Error += sizeof(glm::mat4x4) == sizeof(glm::highp_mat4x4) ? 0 : 1;
+
+ return Error;
+}
+
+static int test_vec()
+{
+ int Error = 0;
+
+ Error += sizeof(glm::vec2) == sizeof(glm::highp_vec2) ? 0 : 1;
+ Error += sizeof(glm::vec3) == sizeof(glm::highp_vec3) ? 0 : 1;
+ Error += sizeof(glm::vec4) == sizeof(glm::highp_vec4) ? 0 : 1;
+
+ return Error;
+}
+
+static int test_dvec()
+{
+ int Error = 0;
+
+ Error += sizeof(glm::dvec2) == sizeof(glm::highp_dvec2) ? 0 : 1;
+ Error += sizeof(glm::dvec3) == sizeof(glm::highp_dvec3) ? 0 : 1;
+ Error += sizeof(glm::dvec4) == sizeof(glm::highp_dvec4) ? 0 : 1;
+
+ return Error;
+}
+
+int main()
+{
+ int Error = 0;
+
+ Error += test_mat();
+ Error += test_vec();
+ Error += test_dvec();
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/core/core_type_aligned.cpp b/src/third_party/glm/test/core/core_type_aligned.cpp
new file mode 100644
index 0000000..cbb591f
--- /dev/null
+++ b/src/third_party/glm/test/core/core_type_aligned.cpp
@@ -0,0 +1,128 @@
+#include <glm/glm.hpp>
+
+int test_aligned()
+{
+ int Error = 0;
+
+ size_t size1_aligned = sizeof(glm::detail::storage<int, 1, true>::type);
+ Error += size1_aligned == 1 ? 0 : 1;
+ size_t size2_aligned = sizeof(glm::detail::storage<int, 2, true>::type);
+ Error += size2_aligned == 2 ? 0 : 1;
+ size_t size4_aligned = sizeof(glm::detail::storage<int, 4, true>::type);
+ Error += size4_aligned == 4 ? 0 : 1;
+ size_t size8_aligned = sizeof(glm::detail::storage<int, 8, true>::type);
+ Error += size8_aligned == 8 ? 0 : 1;
+ size_t size16_aligned = sizeof(glm::detail::storage<int, 16, true>::type);
+ Error += size16_aligned == 16 ? 0 : 1;
+ size_t size32_aligned = sizeof(glm::detail::storage<int, 32, true>::type);
+ Error += size32_aligned == 32 ? 0 : 1;
+ size_t size64_aligned = sizeof(glm::detail::storage<int, 64, true>::type);
+ Error += size64_aligned == 64 ? 0 : 1;
+
+# if GLM_HAS_ALIGNOF
+
+ size_t align1_aligned = alignof(glm::detail::storage<int, 1, true>::type);
+ Error += align1_aligned == 1 ? 0 : 1;
+ size_t align2_aligned = alignof(glm::detail::storage<int, 2, true>::type);
+ Error += align2_aligned == 2 ? 0 : 1;
+ size_t align4_aligned = alignof(glm::detail::storage<int, 4, true>::type);
+ Error += align4_aligned == 4 ? 0 : 1;
+ size_t align8_aligned = alignof(glm::detail::storage<int, 8, true>::type);
+ Error += align8_aligned == 8 ? 0 : 1;
+ size_t align16_aligned = alignof(glm::detail::storage<int, 16, true>::type);
+ Error += align16_aligned == 16 ? 0 : 1;
+ size_t align32_aligned = alignof(glm::detail::storage<int, 32, true>::type);
+ Error += align32_aligned == 32 ? 0 : 1;
+ size_t align64_aligned = alignof(glm::detail::storage<int, 64, true>::type);
+ Error += align64_aligned == 64 ? 0 : 1;
+
+# elif GLM_COMPILER & GLM_COMPILER_GCC
+
+ size_t align1_aligned = __alignof__(glm::detail::storage<int, 1, true>::type);
+ Error += align1_aligned == 1 ? 0 : 1;
+ size_t align2_aligned = __alignof__(glm::detail::storage<int, 2, true>::type);
+ Error += align2_aligned == 2 ? 0 : 1;
+ size_t align4_aligned = __alignof__(glm::detail::storage<int, 4, true>::type);
+ Error += align4_aligned == 4 ? 0 : 1;
+ size_t align8_aligned = __alignof__(glm::detail::storage<int, 8, true>::type);
+ Error += align8_aligned == 8 ? 0 : 1;
+ size_t align16_aligned = __alignof__(glm::detail::storage<int, 16, true>::type);
+ Error += align16_aligned == 16 ? 0 : 1;
+ size_t align32_aligned = __alignof__(glm::detail::storage<int, 32, true>::type);
+ Error += align32_aligned == 32 ? 0 : 1;
+ size_t align64_aligned = __alignof__(glm::detail::storage<int, 64, true>::type);
+ Error += align64_aligned == 64 ? 0 : 1;
+
+# endif //GLM_HAS_ALIGNOF
+
+ return Error;
+}
+
+int test_unaligned()
+{
+ int Error = 0;
+
+ size_t size1_unaligned = sizeof(glm::detail::storage<int, 1, false>::type);
+ Error += size1_unaligned == 1 ? 0 : 1;
+ size_t size2_unaligned = sizeof(glm::detail::storage<int, 2, false>::type);
+ Error += size2_unaligned == 2 ? 0 : 1;
+ size_t size4_unaligned = sizeof(glm::detail::storage<int, 4, false>::type);
+ Error += size4_unaligned == 4 ? 0 : 1;
+ size_t size8_unaligned = sizeof(glm::detail::storage<int, 8, false>::type);
+ Error += size8_unaligned == 8 ? 0 : 1;
+ size_t size16_unaligned = sizeof(glm::detail::storage<int, 16, false>::type);
+ Error += size16_unaligned == 16 ? 0 : 1;
+ size_t size32_unaligned = sizeof(glm::detail::storage<int, 32, false>::type);
+ Error += size32_unaligned == 32 ? 0 : 1;
+ size_t size64_unaligned = sizeof(glm::detail::storage<int, 64, false>::type);
+ Error += size64_unaligned == 64 ? 0 : 1;
+
+# if GLM_HAS_ALIGNOF
+
+ size_t align1_unaligned = alignof(glm::detail::storage<int, 1, false>::type);
+ Error += align1_unaligned == 1 ? 0 : 1;
+ size_t align2_unaligned = alignof(glm::detail::storage<int, 2, false>::type);
+ Error += align2_unaligned == 1 ? 0 : 1;
+ size_t align4_unaligned = alignof(glm::detail::storage<int, 4, false>::type);
+ Error += align4_unaligned == 1 ? 0 : 1;
+ size_t align8_unaligned = alignof(glm::detail::storage<int, 8, false>::type);
+ Error += align8_unaligned == 1 ? 0 : 1;
+ size_t align16_unaligned = alignof(glm::detail::storage<int, 16, false>::type);
+ Error += align16_unaligned == 1 ? 0 : 1;
+ size_t align32_unaligned = alignof(glm::detail::storage<int, 32, false>::type);
+ Error += align32_unaligned == 1 ? 0 : 1;
+ size_t align64_unaligned = alignof(glm::detail::storage<int, 64, false>::type);
+ Error += align64_unaligned == 1 ? 0 : 1;
+
+# else
+
+ size_t align1_unaligned = __alignof__(glm::detail::storage<int, 1, false>::type);
+ Error += align1_unaligned == 1 ? 0 : 1;
+ size_t align2_unaligned = __alignof__(glm::detail::storage<int, 2, false>::type);
+ Error += align2_unaligned == 1 ? 0 : 1;
+ size_t align4_unaligned = __alignof__(glm::detail::storage<int, 4, false>::type);
+ Error += align4_unaligned == 1 ? 0 : 1;
+ size_t align8_unaligned = __alignof__(glm::detail::storage<int, 8, false>::type);
+ Error += align8_unaligned == 1 ? 0 : 1;
+ size_t align16_unaligned = __alignof__(glm::detail::storage<int, 16, false>::type);
+ Error += align16_unaligned == 1 ? 0 : 1;
+ size_t align32_unaligned = __alignof__(glm::detail::storage<int, 32, false>::type);
+ Error += align32_unaligned == 1 ? 0 : 1;
+ size_t align64_unaligned = __alignof__(glm::detail::storage<int, 64, false>::type);
+ Error += align64_unaligned == 1 ? 0 : 1;
+
+# endif //GLM_HAS_ALIGNOF
+
+ return Error;
+}
+
+
+int main()
+{
+ int Error = 0;
+
+ Error += test_aligned();
+ Error += test_unaligned();
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/core/core_type_cast.cpp b/src/third_party/glm/test/core/core_type_cast.cpp
new file mode 100644
index 0000000..b1c0291
--- /dev/null
+++ b/src/third_party/glm/test/core/core_type_cast.cpp
@@ -0,0 +1,144 @@
+#include <glm/glm.hpp>
+#include <algorithm>
+#include <vector>
+#include <iterator>
+
+struct my_vec2
+{
+ operator glm::vec2() { return glm::vec2(x, y); }
+ float x, y;
+};
+
+int test_vec2_cast()
+{
+ glm::vec2 A(1.0f, 2.0f);
+ glm::lowp_vec2 B(A);
+ glm::mediump_vec2 C(A);
+ glm::highp_vec2 D(A);
+
+ glm::vec2 E = static_cast<glm::vec2>(A);
+ glm::lowp_vec2 F = static_cast<glm::lowp_vec2>(A);
+ glm::mediump_vec2 G = static_cast<glm::mediump_vec2>(A);
+ glm::highp_vec2 H = static_cast<glm::highp_vec2>(A);
+
+ my_vec2 I;
+ glm::vec2 J = static_cast<glm::vec2>(I);
+ glm::vec2 K(7.8f);
+
+ int Error(0);
+
+ Error += glm::all(glm::equal(A, E)) ? 0 : 1;
+ Error += glm::all(glm::equal(B, F)) ? 0 : 1;
+ Error += glm::all(glm::equal(C, G)) ? 0 : 1;
+ Error += glm::all(glm::equal(D, H)) ? 0 : 1;
+
+ return Error;
+}
+
+int test_vec3_cast()
+{
+ glm::vec3 A(1.0f, 2.0f, 3.0f);
+ glm::lowp_vec3 B(A);
+ glm::mediump_vec3 C(A);
+ glm::highp_vec3 D(A);
+
+ glm::vec3 E = static_cast<glm::vec3>(A);
+ glm::lowp_vec3 F = static_cast<glm::lowp_vec3>(A);
+ glm::mediump_vec3 G = static_cast<glm::mediump_vec3>(A);
+ glm::highp_vec3 H = static_cast<glm::highp_vec3>(A);
+
+ int Error(0);
+
+ Error += glm::all(glm::equal(A, E)) ? 0 : 1;
+ Error += glm::all(glm::equal(B, F)) ? 0 : 1;
+ Error += glm::all(glm::equal(C, G)) ? 0 : 1;
+ Error += glm::all(glm::equal(D, H)) ? 0 : 1;
+
+ return Error;
+}
+
+int test_vec4_cast()
+{
+ glm::vec4 A(1.0f, 2.0f, 3.0f, 4.0f);
+ glm::lowp_vec4 B(A);
+ glm::mediump_vec4 C(A);
+ glm::highp_vec4 D(A);
+
+ glm::vec4 E = static_cast<glm::vec4>(A);
+ glm::lowp_vec4 F = static_cast<glm::lowp_vec4>(A);
+ glm::mediump_vec4 G = static_cast<glm::mediump_vec4>(A);
+ glm::highp_vec4 H = static_cast<glm::highp_vec4>(A);
+
+ int Error(0);
+
+ Error += glm::all(glm::equal(A, E)) ? 0 : 1;
+ Error += glm::all(glm::equal(B, F)) ? 0 : 1;
+ Error += glm::all(glm::equal(C, G)) ? 0 : 1;
+ Error += glm::all(glm::equal(D, H)) ? 0 : 1;
+
+ return Error;
+}
+
+int test_std_copy()
+{
+ int Error = 0;
+
+ {
+ std::vector<int> High;
+ High.resize(64);
+ std::vector<int> Medium(High.size());
+
+ std::copy(High.begin(), High.end(), Medium.begin());
+
+ *Medium.begin() = *High.begin();
+ }
+
+ {
+ std::vector<glm::dvec4> High4;
+ High4.resize(64);
+ std::vector<glm::vec4> Medium4(High4.size());
+
+ std::copy(High4.begin(), High4.end(), Medium4.begin());
+
+ *Medium4.begin() = *High4.begin();
+ }
+
+ {
+ std::vector<glm::dvec3> High3;
+ High3.resize(64);
+ std::vector<glm::vec3> Medium3(High3.size());
+
+ std::copy(High3.begin(), High3.end(), Medium3.begin());
+
+ *Medium3.begin() = *High3.begin();
+ }
+
+ {
+ std::vector<glm::dvec2> High2;
+ High2.resize(64);
+ std::vector<glm::vec2> Medium2(High2.size());
+
+ std::copy(High2.begin(), High2.end(), Medium2.begin());
+
+ *Medium2.begin() = *High2.begin();
+ }
+
+ glm::dvec4 v1;
+ glm::vec4 v2;
+
+ v2 = v1;
+
+ return Error;
+}
+
+int main()
+{
+ int Error = 0;
+
+ Error += test_std_copy();
+ Error += test_vec2_cast();
+ Error += test_vec3_cast();
+ Error += test_vec4_cast();
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/core/core_type_ctor.cpp b/src/third_party/glm/test/core/core_type_ctor.cpp
new file mode 100644
index 0000000..e9e73e4
--- /dev/null
+++ b/src/third_party/glm/test/core/core_type_ctor.cpp
@@ -0,0 +1,358 @@
+#define GLM_FORCE_NO_CTOR_INIT
+#include <glm/glm.hpp>
+#include <glm/gtc/vec1.hpp>
+#include <glm/gtc/quaternion.hpp>
+
+int test_vec1_ctor()
+{
+ int Error = 0;
+
+# if GLM_HAS_DEFAULTED_FUNCTIONS
+ {
+ union pack
+ {
+ glm::vec1 f;
+ glm::ivec1 i;
+ } A, B;
+
+ A.f = glm::vec1(0);
+ Error += glm::all(glm::equal(A.i, glm::ivec1(0))) ? 0 : 1;
+
+ B.f = glm::vec1(1);
+ Error += glm::all(glm::equal(B.i, glm::ivec1(1065353216))) ? 0 : 1;
+ }
+# endif//GLM_HAS_DEFAULTED_FUNCTIONS
+
+ return Error;
+}
+
+int test_vec2_ctor()
+{
+ int Error = 0;
+
+# if GLM_HAS_DEFAULTED_FUNCTIONS
+ {
+ union pack
+ {
+ glm::vec2 f;
+ glm::ivec2 i;
+ } A, B;
+
+ A.f = glm::vec2(0);
+ Error += glm::all(glm::equal(A.i, glm::ivec2(0))) ? 0 : 1;
+
+ B.f = glm::vec2(1);
+ Error += glm::all(glm::equal(B.i, glm::ivec2(1065353216))) ? 0 : 1;
+ }
+# endif//GLM_HAS_DEFAULTED_FUNCTIONS
+
+ return Error;
+}
+
+int test_vec3_ctor()
+{
+ int Error = 0;
+
+# if GLM_HAS_DEFAULTED_FUNCTIONS
+ {
+ union pack
+ {
+ glm::vec3 f;
+ glm::ivec3 i;
+ } A, B;
+
+ A.f = glm::vec3(0);
+ Error += glm::all(glm::equal(A.i, glm::ivec3(0))) ? 0 : 1;
+
+ B.f = glm::vec3(1);
+ Error += glm::all(glm::equal(B.i, glm::ivec3(1065353216))) ? 0 : 1;
+ }
+# endif//GLM_HAS_DEFAULTED_FUNCTIONS
+
+ return Error;
+}
+
+int test_vec4_ctor()
+{
+ int Error = 0;
+
+# ifndef GLM_FORCE_NO_CTOR_INIT
+ {
+ glm::vec4 A;
+ glm::vec4 B(0);
+ Error += glm::all(glm::equal(A, B)) ? 0 : 1;
+ }
+# endif//GLM_FORCE_NO_CTOR_INIT
+
+# if GLM_HAS_DEFAULTED_FUNCTIONS
+ {
+ union pack
+ {
+ glm::vec4 f;
+ glm::ivec4 i;
+ } A, B;
+
+ A.f = glm::vec4(0);
+ Error += glm::all(glm::equal(A.i, glm::ivec4(0))) ? 0 : 1;
+
+ B.f = glm::vec4(1);
+ Error += glm::all(glm::equal(B.i, glm::ivec4(1065353216))) ? 0 : 1;
+ }
+# endif//GLM_HAS_DEFAULTED_FUNCTIONS
+
+ return Error;
+}
+
+int test_mat2x2_ctor()
+{
+ int Error = 0;
+
+# if GLM_HAS_DEFAULTED_FUNCTIONS
+ {
+ union pack
+ {
+ glm::mat2x2 f;
+ glm::mat2x2 i;
+ } A, B;
+
+ A.f = glm::mat2x2(0);
+ Error += glm::all(glm::equal(A.i[0], glm::vec2(0))) ? 0 : 1;
+
+ B.f = glm::mat2x2(1);
+ Error += glm::all(glm::equal(B.i[0], glm::vec2(1, 0))) ? 0 : 1;
+ }
+# endif//GLM_HAS_DEFAULTED_FUNCTIONS
+
+ return Error;
+}
+
+int test_mat2x3_ctor()
+{
+ int Error = 0;
+
+# if GLM_HAS_DEFAULTED_FUNCTIONS
+ {
+ union pack
+ {
+ glm::mat2x3 f;
+ glm::mat2x3 i;
+ } A, B;
+
+ A.f = glm::mat2x3(0);
+ Error += glm::all(glm::equal(A.i[0], glm::vec3(0))) ? 0 : 1;
+
+ B.f = glm::mat2x3(1);
+ Error += glm::all(glm::equal(B.i[0], glm::vec3(1, 0, 0))) ? 0 : 1;
+ }
+# endif//GLM_HAS_DEFAULTED_FUNCTIONS
+
+ return Error;
+}
+
+int test_mat2x4_ctor()
+{
+ int Error = 0;
+
+# if GLM_HAS_DEFAULTED_FUNCTIONS
+ {
+ union pack
+ {
+ glm::mat2x4 f;
+ glm::mat2x4 i;
+ } A, B;
+
+ A.f = glm::mat2x4(0);
+ glm::vec4 const C(0, 0, 0, 0);
+ Error += glm::all(glm::equal(A.i[0], C)) ? 0 : 1;
+
+ B.f = glm::mat2x4(1);
+ glm::vec4 const D(1, 0, 0, 0);
+ Error += glm::all(glm::equal(B.i[0], D)) ? 0 : 1;
+ }
+# endif//GLM_HAS_DEFAULTED_FUNCTIONS
+
+ return Error;
+}
+
+int test_mat3x2_ctor()
+{
+ int Error = 0;
+
+# if GLM_HAS_DEFAULTED_FUNCTIONS
+ {
+ union pack
+ {
+ glm::mat3x2 f;
+ glm::mat3x2 i;
+ } A, B;
+
+ A.f = glm::mat3x2(0);
+ Error += glm::all(glm::equal(A.i[0], glm::vec2(0))) ? 0 : 1;
+
+ B.f = glm::mat3x2(1);
+ Error += glm::all(glm::equal(B.i[0], glm::vec2(1, 0))) ? 0 : 1;
+ }
+# endif//GLM_HAS_DEFAULTED_FUNCTIONS
+
+ return Error;
+}
+
+int test_mat3x3_ctor()
+{
+ int Error = 0;
+
+# if GLM_HAS_DEFAULTED_FUNCTIONS
+ {
+ union pack
+ {
+ glm::mat3x3 f;
+ glm::mat3x3 i;
+ } A, B;
+
+ A.f = glm::mat3x3(0);
+ Error += glm::all(glm::equal(A.i[0], glm::vec3(0))) ? 0 : 1;
+
+ B.f = glm::mat3x3(1);
+ Error += glm::all(glm::equal(B.i[0], glm::vec3(1, 0, 0))) ? 0 : 1;
+ }
+# endif//GLM_HAS_DEFAULTED_FUNCTIONS
+
+ return Error;
+}
+
+int test_mat3x4_ctor()
+{
+ int Error = 0;
+
+# if GLM_HAS_DEFAULTED_FUNCTIONS
+ {
+ union pack
+ {
+ glm::mat3x4 f;
+ glm::mat3x4 i;
+ } A, B;
+
+ A.f = glm::mat3x4(0);
+ Error += glm::all(glm::equal(A.i[0], glm::vec4(0))) ? 0 : 1;
+
+ B.f = glm::mat3x4(1);
+ Error += glm::all(glm::equal(B.i[0], glm::vec4(1, 0, 0, 0))) ? 0 : 1;
+ }
+# endif//GLM_HAS_DEFAULTED_FUNCTIONS
+
+ return Error;
+}
+
+int test_mat4x2_ctor()
+{
+ int Error = 0;
+
+# if GLM_HAS_DEFAULTED_FUNCTIONS
+ {
+ union pack
+ {
+ glm::mat4x2 f;
+ glm::mat4x2 i;
+ } A, B;
+
+ A.f = glm::mat4x2(0);
+ Error += glm::all(glm::equal(A.i[0], glm::vec2(0))) ? 0 : 1;
+
+ B.f = glm::mat4x2(1);
+ Error += glm::all(glm::equal(B.i[0], glm::vec2(1, 0))) ? 0 : 1;
+ }
+# endif//GLM_HAS_DEFAULTED_FUNCTIONS
+
+ return Error;
+}
+
+int test_mat4x3_ctor()
+{
+ int Error = 0;
+
+# if GLM_HAS_DEFAULTED_FUNCTIONS
+ {
+ union pack
+ {
+ glm::mat4x3 f;
+ glm::mat4x3 i;
+ } A, B;
+
+ A.f = glm::mat4x3(0);
+ Error += glm::all(glm::equal(A.i[0], glm::vec3(0))) ? 0 : 1;
+
+ B.f = glm::mat4x3(1);
+ Error += glm::all(glm::equal(B.i[0], glm::vec3(1, 0, 0))) ? 0 : 1;
+ }
+# endif//GLM_HAS_DEFAULTED_FUNCTIONS
+
+ return Error;
+}
+
+int test_mat4x4_ctor()
+{
+ int Error = 0;
+
+# if GLM_HAS_DEFAULTED_FUNCTIONS
+ {
+ union pack
+ {
+ glm::mat4 f;
+ glm::mat4 i;
+ } A, B;
+
+ A.f = glm::mat4(0);
+ Error += glm::all(glm::equal(A.i[0], glm::vec4(0))) ? 0 : 1;
+
+ B.f = glm::mat4(1);
+ Error += glm::all(glm::equal(B.i[0], glm::vec4(1, 0, 0, 0))) ? 0 : 1;
+ }
+# endif//GLM_HAS_DEFAULTED_FUNCTIONS
+
+ return Error;
+}
+
+int test_quat_ctor()
+{
+ int Error = 0;
+
+# if GLM_HAS_DEFAULTED_FUNCTIONS && defined(GLM_FORCE_NO_CTOR_INIT)
+ {
+ union pack
+ {
+ glm::quat f;
+ glm::quat i;
+ } A, B;
+
+ A.f = glm::quat(0, 0, 0, 0);
+ Error += glm::all(glm::equal(A.i, glm::quat(0, 0, 0, 0))) ? 0 : 1;
+
+ B.f = glm::quat(1, 1, 1, 1);
+ Error += glm::all(glm::equal(B.i, glm::quat(1, 1, 1, 1))) ? 0 : 1;
+ }
+# endif//GLM_HAS_DEFAULTED_FUNCTIONS
+
+ return Error;
+}
+
+int main()
+{
+ int Error = 0;
+
+ Error += test_vec1_ctor();
+ Error += test_vec2_ctor();
+ Error += test_vec3_ctor();
+ Error += test_vec4_ctor();
+ Error += test_mat2x2_ctor();
+ Error += test_mat2x3_ctor();
+ Error += test_mat2x4_ctor();
+ Error += test_mat3x2_ctor();
+ Error += test_mat3x3_ctor();
+ Error += test_mat3x4_ctor();
+ Error += test_mat4x2_ctor();
+ Error += test_mat4x3_ctor();
+ Error += test_mat4x4_ctor();
+ Error += test_quat_ctor();
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/core/core_type_float.cpp b/src/third_party/glm/test/core/core_type_float.cpp
new file mode 100644
index 0000000..11d475c
--- /dev/null
+++ b/src/third_party/glm/test/core/core_type_float.cpp
@@ -0,0 +1,31 @@
+#include <glm/glm.hpp>
+
+int test_float_size()
+{
+ return
+ sizeof(glm::float_t) != sizeof(glm::lowp_float) &&
+ sizeof(glm::float_t) != sizeof(glm::mediump_float) &&
+ sizeof(glm::float_t) != sizeof(glm::highp_float);
+}
+
+int test_float_precision()
+{
+ return (
+ sizeof(glm::lowp_float) <= sizeof(glm::mediump_float) &&
+ sizeof(glm::mediump_float) <= sizeof(glm::highp_float)) ? 0 : 1;
+}
+
+int test_vec2()
+{
+ return 0;
+}
+
+int main()
+{
+ int Error = 0;
+
+ Error += test_float_size();
+ Error += test_float_precision();
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/core/core_type_int.cpp b/src/third_party/glm/test/core/core_type_int.cpp
new file mode 100644
index 0000000..d60d568
--- /dev/null
+++ b/src/third_party/glm/test/core/core_type_int.cpp
@@ -0,0 +1,43 @@
+#include <glm/glm.hpp>
+
+int test_int_size()
+{
+ return
+ sizeof(glm::int_t) != sizeof(glm::lowp_int) &&
+ sizeof(glm::int_t) != sizeof(glm::mediump_int) &&
+ sizeof(glm::int_t) != sizeof(glm::highp_int);
+}
+
+int test_uint_size()
+{
+ return
+ sizeof(glm::uint_t) != sizeof(glm::lowp_uint) &&
+ sizeof(glm::uint_t) != sizeof(glm::mediump_uint) &&
+ sizeof(glm::uint_t) != sizeof(glm::highp_uint);
+}
+
+int test_int_precision()
+{
+ return (
+ sizeof(glm::lowp_int) <= sizeof(glm::mediump_int) &&
+ sizeof(glm::mediump_int) <= sizeof(glm::highp_int)) ? 0 : 1;
+}
+
+int test_uint_precision()
+{
+ return (
+ sizeof(glm::lowp_uint) <= sizeof(glm::mediump_uint) &&
+ sizeof(glm::mediump_uint) <= sizeof(glm::highp_uint)) ? 0 : 1;
+}
+
+int main()
+{
+ int Error = 0;
+
+ Error += test_int_size();
+ Error += test_int_precision();
+ Error += test_uint_size();
+ Error += test_uint_precision();
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/core/core_type_length.cpp b/src/third_party/glm/test/core/core_type_length.cpp
new file mode 100644
index 0000000..17c2fa9
--- /dev/null
+++ b/src/third_party/glm/test/core/core_type_length.cpp
@@ -0,0 +1,79 @@
+#include <glm/glm.hpp>
+
+int test_length_mat_non_squared()
+{
+ int Error = 0;
+
+ Error += glm::mat2x3().length() == 2 ? 0 : 1;
+ Error += glm::mat2x4().length() == 2 ? 0 : 1;
+ Error += glm::mat3x2().length() == 3 ? 0 : 1;
+ Error += glm::mat3x4().length() == 3 ? 0 : 1;
+ Error += glm::mat4x2().length() == 4 ? 0 : 1;
+ Error += glm::mat4x3().length() == 4 ? 0 : 1;
+
+ Error += glm::dmat2x3().length() == 2 ? 0 : 1;
+ Error += glm::dmat2x4().length() == 2 ? 0 : 1;
+ Error += glm::dmat3x2().length() == 3 ? 0 : 1;
+ Error += glm::dmat3x4().length() == 3 ? 0 : 1;
+ Error += glm::dmat4x2().length() == 4 ? 0 : 1;
+ Error += glm::dmat4x3().length() == 4 ? 0 : 1;
+
+ return Error;
+}
+
+int test_length_mat()
+{
+ int Error = 0;
+
+ Error += glm::mat2().length() == 2 ? 0 : 1;
+ Error += glm::mat3().length() == 3 ? 0 : 1;
+ Error += glm::mat4().length() == 4 ? 0 : 1;
+ Error += glm::mat2x2().length() == 2 ? 0 : 1;
+ Error += glm::mat3x3().length() == 3 ? 0 : 1;
+ Error += glm::mat4x4().length() == 4 ? 0 : 1;
+
+ Error += glm::dmat2().length() == 2 ? 0 : 1;
+ Error += glm::dmat3().length() == 3 ? 0 : 1;
+ Error += glm::dmat4().length() == 4 ? 0 : 1;
+ Error += glm::dmat2x2().length() == 2 ? 0 : 1;
+ Error += glm::dmat3x3().length() == 3 ? 0 : 1;
+ Error += glm::dmat4x4().length() == 4 ? 0 : 1;
+
+ return Error;
+}
+
+int test_length_vec()
+{
+
+ int Error = 0;
+
+ Error += glm::vec2().length() == 2 ? 0 : 1;
+ Error += glm::vec3().length() == 3 ? 0 : 1;
+ Error += glm::vec4().length() == 4 ? 0 : 1;
+
+ Error += glm::ivec2().length() == 2 ? 0 : 1;
+ Error += glm::ivec3().length() == 3 ? 0 : 1;
+ Error += glm::ivec4().length() == 4 ? 0 : 1;
+
+ Error += glm::uvec2().length() == 2 ? 0 : 1;
+ Error += glm::uvec3().length() == 3 ? 0 : 1;
+ Error += glm::uvec4().length() == 4 ? 0 : 1;
+
+ Error += glm::dvec2().length() == 2 ? 0 : 1;
+ Error += glm::dvec3().length() == 3 ? 0 : 1;
+ Error += glm::dvec4().length() == 4 ? 0 : 1;
+
+ return Error;
+}
+
+int main()
+{
+ int Error = 0;
+
+ Error += test_length_vec();
+ Error += test_length_mat();
+ Error += test_length_mat_non_squared();
+
+ return Error;
+}
+
diff --git a/src/third_party/glm/test/core/core_type_mat2x2.cpp b/src/third_party/glm/test/core/core_type_mat2x2.cpp
new file mode 100644
index 0000000..78c0e8d
--- /dev/null
+++ b/src/third_party/glm/test/core/core_type_mat2x2.cpp
@@ -0,0 +1,145 @@
+#include <glm/gtc/epsilon.hpp>
+#include <glm/matrix.hpp>
+#include <glm/vector_relational.hpp>
+#include <glm/mat2x2.hpp>
+#include <glm/mat2x3.hpp>
+#include <glm/mat2x4.hpp>
+#include <glm/mat3x2.hpp>
+#include <glm/mat3x3.hpp>
+#include <glm/mat3x4.hpp>
+#include <glm/mat4x2.hpp>
+#include <glm/mat4x3.hpp>
+#include <glm/mat4x4.hpp>
+#include <vector>
+
+int test_operators()
+{
+ glm::mat2x2 l(1.0f);
+ glm::mat2x2 m(1.0f);
+ glm::vec2 u(1.0f);
+ glm::vec2 v(1.0f);
+ float x = 1.0f;
+ glm::vec2 a = m * u;
+ glm::vec2 b = v * m;
+ glm::mat2x2 n = x / m;
+ glm::mat2x2 o = m / x;
+ glm::mat2x2 p = x * m;
+ glm::mat2x2 q = m * x;
+ bool R = m != q;
+ bool S = m == l;
+
+ return (S && !R) ? 0 : 1;
+}
+
+int test_inverse()
+{
+ int Error(0);
+
+ {
+ glm::mat2 const Matrix(1, 2, 3, 4);
+ glm::mat2 const Inverse = glm::inverse(Matrix);
+ glm::mat2 const Identity = Matrix * Inverse;
+
+ Error += glm::all(glm::epsilonEqual(Identity[0], glm::vec2(1.0f, 0.0f), glm::vec2(0.01f))) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(Identity[1], glm::vec2(0.0f, 1.0f), glm::vec2(0.01f))) ? 0 : 1;
+ }
+
+ {
+ glm::mat2 const Matrix(1, 2, 3, 4);
+ glm::mat2 const Identity = Matrix / Matrix;
+
+ Error += glm::all(glm::epsilonEqual(Identity[0], glm::vec2(1.0f, 0.0f), glm::vec2(0.01f))) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(Identity[1], glm::vec2(0.0f, 1.0f), glm::vec2(0.01f))) ? 0 : 1;
+ }
+
+ return Error;
+}
+
+int test_ctr()
+{
+ int Error(0);
+
+#if GLM_HAS_INITIALIZER_LISTS
+ glm::mat2x2 m0(
+ glm::vec2(0, 1),
+ glm::vec2(2, 3));
+
+ glm::mat2x2 m1{0, 1, 2, 3};
+
+ glm::mat2x2 m2{
+ {0, 1},
+ {2, 3}};
+
+ for(glm::length_t i = 0; i < m0.length(); ++i)
+ Error += glm::all(glm::equal(m0[i], m2[i])) ? 0 : 1;
+
+ for(glm::length_t i = 0; i < m1.length(); ++i)
+ Error += glm::all(glm::equal(m1[i], m2[i])) ? 0 : 1;
+
+ std::vector<glm::mat2x2> v1{
+ {0, 1, 2, 3},
+ {0, 1, 2, 3}
+ };
+
+ std::vector<glm::mat2x2> v2{
+ {
+ { 0, 1},
+ { 4, 5}
+ },
+ {
+ { 0, 1},
+ { 4, 5}
+ }
+ };
+
+#endif//GLM_HAS_INITIALIZER_LISTS
+
+ return Error;
+}
+
+namespace cast
+{
+ template <typename genType>
+ int entry()
+ {
+ int Error = 0;
+
+ genType A(1.0f);
+ glm::mat2 B(A);
+ glm::mat2 Identity(1.0f);
+
+ for(glm::length_t i = 0, length = B.length(); i < length; ++i)
+ Error += glm::all(glm::equal(B[i], Identity[i])) ? 0 : 1;
+
+ return Error;
+ }
+
+ int test()
+ {
+ int Error = 0;
+
+ Error += entry<glm::mat2x2>();
+ Error += entry<glm::mat2x3>();
+ Error += entry<glm::mat2x4>();
+ Error += entry<glm::mat3x2>();
+ Error += entry<glm::mat3x3>();
+ Error += entry<glm::mat3x4>();
+ Error += entry<glm::mat4x2>();
+ Error += entry<glm::mat4x3>();
+ Error += entry<glm::mat4x4>();
+
+ return Error;
+ }
+}//namespace cast
+
+int main()
+{
+ int Error(0);
+
+ Error += cast::test();
+ Error += test_ctr();
+ Error += test_operators();
+ Error += test_inverse();
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/core/core_type_mat2x3.cpp b/src/third_party/glm/test/core/core_type_mat2x3.cpp
new file mode 100644
index 0000000..36e4a59
--- /dev/null
+++ b/src/third_party/glm/test/core/core_type_mat2x3.cpp
@@ -0,0 +1,118 @@
+#include <glm/vector_relational.hpp>
+#include <glm/mat2x2.hpp>
+#include <glm/mat2x3.hpp>
+#include <glm/mat2x4.hpp>
+#include <glm/mat3x2.hpp>
+#include <glm/mat3x3.hpp>
+#include <glm/mat3x4.hpp>
+#include <glm/mat4x2.hpp>
+#include <glm/mat4x3.hpp>
+#include <glm/mat4x4.hpp>
+#include <vector>
+
+static int test_operators()
+{
+ glm::mat2x3 l(1.0f);
+ glm::mat2x3 m(1.0f);
+ glm::vec2 u(1.0f);
+ glm::vec3 v(1.0f);
+ float x = 1.0f;
+ glm::vec3 a = m * u;
+ glm::vec2 b = v * m;
+ glm::mat2x3 n = x / m;
+ glm::mat2x3 o = m / x;
+ glm::mat2x3 p = x * m;
+ glm::mat2x3 q = m * x;
+ bool R = m != q;
+ bool S = m == l;
+
+ return (S && !R) ? 0 : 1;
+}
+
+int test_ctr()
+{
+ int Error(0);
+
+#if GLM_HAS_INITIALIZER_LISTS
+ glm::mat2x3 m0(
+ glm::vec3(0, 1, 2),
+ glm::vec3(3, 4, 5));
+
+ glm::mat2x3 m1{0, 1, 2, 3, 4, 5};
+
+ glm::mat2x3 m2{
+ {0, 1, 2},
+ {3, 4, 5}};
+
+ for(glm::length_t i = 0; i < m0.length(); ++i)
+ Error += glm::all(glm::equal(m0[i], m2[i])) ? 0 : 1;
+
+ for(glm::length_t i = 0; i < m1.length(); ++i)
+ Error += glm::all(glm::equal(m1[i], m2[i])) ? 0 : 1;
+
+ std::vector<glm::mat2x3> v1{
+ {0, 1, 2, 3, 4, 5},
+ {0, 1, 2, 3, 4, 5}
+ };
+
+ std::vector<glm::mat2x3> v2{
+ {
+ { 0, 1, 2},
+ { 4, 5, 6}
+ },
+ {
+ { 0, 1, 2},
+ { 4, 5, 6}
+ }
+ };
+
+#endif//GLM_HAS_INITIALIZER_LISTS
+
+ return Error;
+}
+
+namespace cast
+{
+ template <typename genType>
+ int entry()
+ {
+ int Error = 0;
+
+ genType A(1.0f);
+ glm::mat2x3 B(A);
+ glm::mat2x3 Identity(1.0f);
+
+ for(glm::length_t i = 0, length = B.length(); i < length; ++i)
+ Error += glm::all(glm::equal(B[i], Identity[i])) ? 0 : 1;
+
+ return Error;
+ }
+
+ int test()
+ {
+ int Error = 0;
+
+ Error += entry<glm::mat2x2>();
+ Error += entry<glm::mat2x3>();
+ Error += entry<glm::mat2x4>();
+ Error += entry<glm::mat3x2>();
+ Error += entry<glm::mat3x3>();
+ Error += entry<glm::mat3x4>();
+ Error += entry<glm::mat4x2>();
+ Error += entry<glm::mat4x3>();
+ Error += entry<glm::mat4x4>();
+
+ return Error;
+ }
+}//namespace cast
+
+int main()
+{
+ int Error = 0;
+
+ Error += cast::test();
+ Error += test_ctr();
+ Error += test_operators();
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/core/core_type_mat2x4.cpp b/src/third_party/glm/test/core/core_type_mat2x4.cpp
new file mode 100644
index 0000000..d2435f8
--- /dev/null
+++ b/src/third_party/glm/test/core/core_type_mat2x4.cpp
@@ -0,0 +1,121 @@
+#include <glm/vector_relational.hpp>
+#include <glm/mat2x2.hpp>
+#include <glm/mat2x3.hpp>
+#include <glm/mat2x4.hpp>
+#include <glm/mat3x2.hpp>
+#include <glm/mat3x3.hpp>
+#include <glm/mat3x4.hpp>
+#include <glm/mat4x2.hpp>
+#include <glm/mat4x3.hpp>
+#include <glm/mat4x4.hpp>
+#include <vector>
+
+static int test_operators()
+{
+ glm::mat2x4 l(1.0f);
+ glm::mat2x4 m(1.0f);
+ glm::vec2 u(1.0f);
+ glm::vec4 v(1.0f);
+ float x = 1.0f;
+ glm::vec4 a = m * u;
+ glm::vec2 b = v * m;
+ glm::mat2x4 n = x / m;
+ glm::mat2x4 o = m / x;
+ glm::mat2x4 p = x * m;
+ glm::mat2x4 q = m * x;
+ bool R = m != q;
+ bool S = m == l;
+
+ return (S && !R) ? 0 : 1;
+}
+
+int test_ctr()
+{
+ int Error(0);
+
+#if(GLM_HAS_INITIALIZER_LISTS)
+ glm::mat2x4 m0(
+ glm::vec4(0, 1, 2, 3),
+ glm::vec4(4, 5, 6, 7));
+
+ glm::mat2x4 m1{0, 1, 2, 3, 4, 5, 6, 7};
+
+ glm::mat2x4 m2{
+ {0, 1, 2, 3},
+ {4, 5, 6, 7}};
+
+ for(glm::length_t i = 0; i < m0.length(); ++i)
+ Error += glm::all(glm::equal(m0[i], m2[i])) ? 0 : 1;
+
+ for(glm::length_t i = 0; i < m1.length(); ++i)
+ Error += glm::all(glm::equal(m1[i], m2[i])) ? 0 : 1;
+
+ std::vector<glm::mat2x4> v1{
+ {0, 1, 2, 3, 4, 5, 6, 7},
+ {0, 1, 2, 3, 4, 5, 6, 7}
+ };
+
+ std::vector<glm::mat2x4> v2{
+ {
+ { 0, 1, 2, 3},
+ { 4, 5, 6, 7}
+ },
+ {
+ { 0, 1, 2, 3},
+ { 4, 5, 6, 7}
+ }
+ };
+
+#endif//GLM_HAS_INITIALIZER_LISTS
+
+ return Error;
+}
+
+namespace cast
+{
+ template <typename genType>
+ int entry()
+ {
+ int Error = 0;
+
+ genType A(1.0f);
+ glm::mat2x4 B(A);
+ glm::mat2x4 Identity(1.0f);
+
+ for(glm::length_t i = 0, length = B.length(); i < length; ++i)
+ Error += glm::all(glm::equal(B[i], Identity[i])) ? 0 : 1;
+
+ return Error;
+ }
+
+ int test()
+ {
+ int Error = 0;
+
+ Error += entry<glm::mat2x2>();
+ Error += entry<glm::mat2x3>();
+ Error += entry<glm::mat2x4>();
+ Error += entry<glm::mat3x2>();
+ Error += entry<glm::mat3x3>();
+ Error += entry<glm::mat3x4>();
+ Error += entry<glm::mat4x2>();
+ Error += entry<glm::mat4x3>();
+ Error += entry<glm::mat4x4>();
+
+ return Error;
+ }
+}//namespace cast
+
+int main()
+{
+ int Error = 0;
+
+ Error += cast::test();
+ Error += test_ctr();
+ Error += test_operators();
+
+ return Error;
+}
+
+
+
diff --git a/src/third_party/glm/test/core/core_type_mat3x2.cpp b/src/third_party/glm/test/core/core_type_mat3x2.cpp
new file mode 100644
index 0000000..fdfa208
--- /dev/null
+++ b/src/third_party/glm/test/core/core_type_mat3x2.cpp
@@ -0,0 +1,124 @@
+#include <glm/vector_relational.hpp>
+#include <glm/mat2x2.hpp>
+#include <glm/mat2x3.hpp>
+#include <glm/mat2x4.hpp>
+#include <glm/mat3x2.hpp>
+#include <glm/mat3x3.hpp>
+#include <glm/mat3x4.hpp>
+#include <glm/mat4x2.hpp>
+#include <glm/mat4x3.hpp>
+#include <glm/mat4x4.hpp>
+#include <vector>
+
+static bool test_operators()
+{
+ glm::mat3x2 l(1.0f);
+ glm::mat3x2 m(1.0f);
+ glm::vec3 u(1.0f);
+ glm::vec2 v(1.0f);
+ float x = 1.0f;
+ glm::vec2 a = m * u;
+ glm::vec3 b = v * m;
+ glm::mat3x2 n = x / m;
+ glm::mat3x2 o = m / x;
+ glm::mat3x2 p = x * m;
+ glm::mat3x2 q = m * x;
+ bool R = m != q;
+ bool S = m == l;
+
+ return (S && !R) ? 0 : 1;
+}
+
+int test_ctr()
+{
+ int Error(0);
+
+#if(GLM_HAS_INITIALIZER_LISTS)
+ glm::mat3x2 m0(
+ glm::vec2(0, 1),
+ glm::vec2(2, 3),
+ glm::vec2(4, 5));
+
+ glm::mat3x2 m1{0, 1, 2, 3, 4, 5};
+
+ glm::mat3x2 m2{
+ {0, 1},
+ {2, 3},
+ {4, 5}};
+
+ for(glm::length_t i = 0; i < m0.length(); ++i)
+ Error += glm::all(glm::equal(m0[i], m2[i])) ? 0 : 1;
+
+ for(glm::length_t i = 0; i < m1.length(); ++i)
+ Error += glm::all(glm::equal(m1[i], m2[i])) ? 0 : 1;
+
+ std::vector<glm::mat3x2> v1{
+ {0, 1, 2, 3, 4, 5},
+ {0, 1, 2, 3, 4, 5}
+ };
+
+ std::vector<glm::mat3x2> v2{
+ {
+ { 0, 1},
+ { 2, 3},
+ { 4, 5}
+ },
+ {
+ { 0, 1},
+ { 2, 3},
+ { 4, 5}
+ }
+ };
+
+#endif//GLM_HAS_INITIALIZER_LISTS
+
+ return Error;
+}
+
+namespace cast
+{
+ template <typename genType>
+ int entry()
+ {
+ int Error = 0;
+
+ genType A(1.0f);
+ glm::mat3x2 B(A);
+ glm::mat3x2 Identity(1.0f);
+
+ for(glm::length_t i = 0, length = B.length(); i < length; ++i)
+ Error += glm::all(glm::equal(B[i], Identity[i])) ? 0 : 1;
+
+ return Error;
+ }
+
+ int test()
+ {
+ int Error = 0;
+
+ Error += entry<glm::mat2x2>();
+ Error += entry<glm::mat2x3>();
+ Error += entry<glm::mat2x4>();
+ Error += entry<glm::mat3x2>();
+ Error += entry<glm::mat3x3>();
+ Error += entry<glm::mat3x4>();
+ Error += entry<glm::mat4x2>();
+ Error += entry<glm::mat4x3>();
+ Error += entry<glm::mat4x4>();
+
+ return Error;
+ }
+}//namespace cast
+
+int main()
+{
+ int Error = 0;
+
+ Error += cast::test();
+ Error += test_ctr();
+ Error += test_operators();
+
+ return Error;
+}
+
+
diff --git a/src/third_party/glm/test/core/core_type_mat3x3.cpp b/src/third_party/glm/test/core/core_type_mat3x3.cpp
new file mode 100644
index 0000000..c8886a5
--- /dev/null
+++ b/src/third_party/glm/test/core/core_type_mat3x3.cpp
@@ -0,0 +1,184 @@
+#include <glm/gtc/epsilon.hpp>
+#include <glm/matrix.hpp>
+#include <glm/vector_relational.hpp>
+#include <glm/mat2x2.hpp>
+#include <glm/mat2x3.hpp>
+#include <glm/mat2x4.hpp>
+#include <glm/mat3x2.hpp>
+#include <glm/mat3x3.hpp>
+#include <glm/mat3x4.hpp>
+#include <glm/mat4x2.hpp>
+#include <glm/mat4x3.hpp>
+#include <glm/mat4x4.hpp>
+#include <cstdio>
+#include <vector>
+
+void print(glm::dmat3 const & Mat0)
+{
+ printf("mat3(\n");
+ printf("\tvec3(%2.3f, %2.3f, %2.3f)\n", Mat0[0][0], Mat0[0][1], Mat0[0][2]);
+ printf("\tvec3(%2.3f, %2.3f, %2.3f)\n", Mat0[1][0], Mat0[1][1], Mat0[1][2]);
+ printf("\tvec3(%2.3f, %2.3f, %2.3f))\n\n", Mat0[2][0], Mat0[2][1], Mat0[2][2]);
+}
+
+int test_mat3x3()
+{
+ glm::dmat3 Mat0(
+ glm::dvec3(0.6f, 0.2f, 0.3f),
+ glm::dvec3(0.2f, 0.7f, 0.5f),
+ glm::dvec3(0.3f, 0.5f, 0.7f));
+ glm::dmat3 Inv0 = glm::inverse(Mat0);
+ glm::dmat3 Res0 = Mat0 * Inv0;
+
+ print(Mat0);
+ print(Inv0);
+ print(Res0);
+
+ return 0;
+}
+
+static int test_operators()
+{
+ glm::mat3x3 l(1.0f);
+ glm::mat3x3 m(1.0f);
+ glm::vec3 u(1.0f);
+ glm::vec3 v(1.0f);
+ float x = 1.0f;
+ glm::vec3 a = m * u;
+ glm::vec3 b = v * m;
+ glm::mat3x3 n = x / m;
+ glm::mat3x3 o = m / x;
+ glm::mat3x3 p = x * m;
+ glm::mat3x3 q = m * x;
+ bool R = m != q;
+ bool S = m == l;
+
+ return (S && !R) ? 0 : 1;
+}
+
+int test_inverse()
+{
+ int Error(0);
+
+ {
+ glm::mat3 const Matrix(
+ glm::vec3(0.6f, 0.2f, 0.3f),
+ glm::vec3(0.2f, 0.7f, 0.5f),
+ glm::vec3(0.3f, 0.5f, 0.7f));
+ glm::mat3 const Inverse = glm::inverse(Matrix);
+ glm::mat3 const Identity = Matrix * Inverse;
+
+ Error += glm::all(glm::epsilonEqual(Identity[0], glm::vec3(1.0f, 0.0f, 0.0f), glm::vec3(0.01f))) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(Identity[1], glm::vec3(0.0f, 1.0f, 0.0f), glm::vec3(0.01f))) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(Identity[2], glm::vec3(0.0f, 0.0f, 1.0f), glm::vec3(0.01f))) ? 0 : 1;
+ }
+
+ {
+ glm::mat3 const Matrix(
+ glm::vec3(0.6f, 0.2f, 0.3f),
+ glm::vec3(0.2f, 0.7f, 0.5f),
+ glm::vec3(0.3f, 0.5f, 0.7f));
+ glm::mat3 const Identity = Matrix / Matrix;
+
+ Error += glm::all(glm::epsilonEqual(Identity[0], glm::vec3(1.0f, 0.0f, 0.0f), glm::vec3(0.01f))) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(Identity[1], glm::vec3(0.0f, 1.0f, 0.0f), glm::vec3(0.01f))) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(Identity[2], glm::vec3(0.0f, 0.0f, 1.0f), glm::vec3(0.01f))) ? 0 : 1;
+ }
+
+ return Error;
+}
+
+int test_ctr()
+{
+ int Error(0);
+
+#if(GLM_HAS_INITIALIZER_LISTS)
+ glm::mat3x3 m0(
+ glm::vec3(0, 1, 2),
+ glm::vec3(3, 4, 5),
+ glm::vec3(6, 7, 8));
+
+ glm::mat3x3 m1{0, 1, 2, 3, 4, 5, 6, 7, 8};
+
+ glm::mat3x3 m2{
+ {0, 1, 2},
+ {3, 4, 5},
+ {6, 7, 8}};
+
+ for(glm::length_t i = 0; i < m0.length(); ++i)
+ Error += glm::all(glm::equal(m0[i], m2[i])) ? 0 : 1;
+
+ for(glm::length_t i = 0; i < m1.length(); ++i)
+ Error += glm::all(glm::equal(m1[i], m2[i])) ? 0 : 1;
+
+ std::vector<glm::mat3x3> v1{
+ {0, 1, 2, 3, 4, 5, 6, 7, 8},
+ {0, 1, 2, 3, 4, 5, 6, 7, 8}
+ };
+
+ std::vector<glm::mat3x3> v2{
+ {
+ { 0, 1, 2},
+ { 3, 4, 5},
+ { 6, 7, 8}
+ },
+ {
+ { 0, 1, 2},
+ { 3, 4, 5},
+ { 6, 7, 8}
+ }
+ };
+
+#endif//GLM_HAS_INITIALIZER_LISTS
+
+ return Error;
+}
+
+namespace cast
+{
+ template <typename genType>
+ int entry()
+ {
+ int Error = 0;
+
+ genType A(1.0f);
+ glm::mat3x3 B(A);
+ glm::mat3x3 Identity(1.0f);
+
+ for(glm::length_t i = 0, length = B.length(); i < length; ++i)
+ Error += glm::all(glm::equal(B[i], Identity[i])) ? 0 : 1;
+
+ return Error;
+ }
+
+ int test()
+ {
+ int Error = 0;
+
+ Error += entry<glm::mat2x2>();
+ Error += entry<glm::mat2x3>();
+ Error += entry<glm::mat2x4>();
+ Error += entry<glm::mat3x2>();
+ Error += entry<glm::mat3x3>();
+ Error += entry<glm::mat3x4>();
+ Error += entry<glm::mat4x2>();
+ Error += entry<glm::mat4x3>();
+ Error += entry<glm::mat4x4>();
+
+ return Error;
+ }
+}//namespace cast
+
+int main()
+{
+ int Error = 0;
+
+ Error += cast::test();
+ Error += test_ctr();
+ Error += test_mat3x3();
+ Error += test_operators();
+ Error += test_inverse();
+
+ return Error;
+}
+
diff --git a/src/third_party/glm/test/core/core_type_mat3x4.cpp b/src/third_party/glm/test/core/core_type_mat3x4.cpp
new file mode 100644
index 0000000..131f686
--- /dev/null
+++ b/src/third_party/glm/test/core/core_type_mat3x4.cpp
@@ -0,0 +1,123 @@
+#include <glm/vector_relational.hpp>
+#include <glm/mat2x2.hpp>
+#include <glm/mat2x3.hpp>
+#include <glm/mat2x4.hpp>
+#include <glm/mat3x2.hpp>
+#include <glm/mat3x3.hpp>
+#include <glm/mat3x4.hpp>
+#include <glm/mat4x2.hpp>
+#include <glm/mat4x3.hpp>
+#include <glm/mat4x4.hpp>
+#include <vector>
+
+static bool test_operators()
+{
+ glm::mat3x4 l(1.0f);
+ glm::mat3x4 m(1.0f);
+ glm::vec3 u(1.0f);
+ glm::vec4 v(1.0f);
+ float x = 1.0f;
+ glm::vec4 a = m * u;
+ glm::vec3 b = v * m;
+ glm::mat3x4 n = x / m;
+ glm::mat3x4 o = m / x;
+ glm::mat3x4 p = x * m;
+ glm::mat3x4 q = m * x;
+ bool R = m != q;
+ bool S = m == l;
+
+ return (S && !R) ? 0 : 1;
+}
+
+int test_ctr()
+{
+ int Error(0);
+
+#if(GLM_HAS_INITIALIZER_LISTS)
+ glm::mat3x4 m0(
+ glm::vec4(0, 1, 2, 3),
+ glm::vec4(4, 5, 6, 7),
+ glm::vec4(8, 9, 10, 11));
+
+ glm::mat3x4 m1{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
+
+ glm::mat3x4 m2{
+ {0, 1, 2, 3},
+ {4, 5, 6, 7},
+ {8, 9, 10, 11}};
+
+ for(glm::length_t i = 0; i < m0.length(); ++i)
+ Error += glm::all(glm::equal(m0[i], m2[i])) ? 0 : 1;
+
+ for(glm::length_t i = 0; i < m1.length(); ++i)
+ Error += glm::all(glm::equal(m1[i], m2[i])) ? 0 : 1;
+
+ std::vector<glm::mat3x4> v1{
+ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11},
+ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}
+ };
+
+ std::vector<glm::mat3x4> v2{
+ {
+ { 0, 1, 2, 3},
+ { 4, 5, 6, 7},
+ { 8, 9, 10, 11}
+ },
+ {
+ { 0, 1, 2, 3},
+ { 4, 5, 6, 7},
+ { 8, 9, 10, 11}
+ }
+ };
+
+#endif//GLM_HAS_INITIALIZER_LISTS
+
+ return Error;
+}
+
+namespace cast
+{
+ template <typename genType>
+ int entry()
+ {
+ int Error = 0;
+
+ genType A(1.0f);
+ glm::mat3x4 B(A);
+ glm::mat3x4 Identity(1.0f);
+
+ for(glm::length_t i = 0, length = B.length(); i < length; ++i)
+ Error += glm::all(glm::equal(B[i], Identity[i])) ? 0 : 1;
+
+ return Error;
+ }
+
+ int test()
+ {
+ int Error = 0;
+
+ Error += entry<glm::mat2x2>();
+ Error += entry<glm::mat2x3>();
+ Error += entry<glm::mat2x4>();
+ Error += entry<glm::mat3x2>();
+ Error += entry<glm::mat3x3>();
+ Error += entry<glm::mat3x4>();
+ Error += entry<glm::mat4x2>();
+ Error += entry<glm::mat4x3>();
+ Error += entry<glm::mat4x4>();
+
+ return Error;
+ }
+}//namespace cast
+
+int main()
+{
+ int Error = 0;
+
+ Error += cast::test();
+ Error += test_ctr();
+ Error += test_operators();
+
+ return Error;
+}
+
diff --git a/src/third_party/glm/test/core/core_type_mat4x2.cpp b/src/third_party/glm/test/core/core_type_mat4x2.cpp
new file mode 100644
index 0000000..eecdf1c
--- /dev/null
+++ b/src/third_party/glm/test/core/core_type_mat4x2.cpp
@@ -0,0 +1,127 @@
+#include <glm/vector_relational.hpp>
+#include <glm/mat2x2.hpp>
+#include <glm/mat2x3.hpp>
+#include <glm/mat2x4.hpp>
+#include <glm/mat3x2.hpp>
+#include <glm/mat3x3.hpp>
+#include <glm/mat3x4.hpp>
+#include <glm/mat4x2.hpp>
+#include <glm/mat4x3.hpp>
+#include <glm/mat4x4.hpp>
+#include <vector>
+
+static int test_operators()
+{
+ glm::mat4x2 l(1.0f);
+ glm::mat4x2 m(1.0f);
+ glm::vec4 u(1.0f);
+ glm::vec2 v(1.0f);
+ float x = 1.0f;
+ glm::vec2 a = m * u;
+ glm::vec4 b = v * m;
+ glm::mat4x2 n = x / m;
+ glm::mat4x2 o = m / x;
+ glm::mat4x2 p = x * m;
+ glm::mat4x2 q = m * x;
+ bool R = m != q;
+ bool S = m == l;
+
+ return (S && !R) ? 0 : 1;
+}
+
+int test_ctr()
+{
+ int Error(0);
+
+#if(GLM_HAS_INITIALIZER_LISTS)
+ glm::mat4x2 m0(
+ glm::vec2(0, 1),
+ glm::vec2(2, 3),
+ glm::vec2(4, 5),
+ glm::vec2(6, 7));
+
+ glm::mat4x2 m1{0, 1, 2, 3, 4, 5, 6, 7};
+
+ glm::mat4x2 m2{
+ {0, 1},
+ {2, 3},
+ {4, 5},
+ {6, 7}};
+
+ for(glm::length_t i = 0; i < m0.length(); ++i)
+ Error += glm::all(glm::equal(m0[i], m2[i])) ? 0 : 1;
+
+ for(glm::length_t i = 0; i < m1.length(); ++i)
+ Error += glm::all(glm::equal(m1[i], m2[i])) ? 0 : 1;
+
+ std::vector<glm::mat4x2> v1{
+ {0, 1, 2, 3, 4, 5, 6, 7},
+ {0, 1, 2, 3, 4, 5, 6, 7}
+ };
+
+ std::vector<glm::mat4x2> v2{
+ {
+ { 0, 1},
+ { 4, 5},
+ { 8, 9},
+ { 12, 13}
+ },
+ {
+ { 0, 1},
+ { 4, 5},
+ { 8, 9},
+ { 12, 13}
+ }
+ };
+
+#endif//GLM_HAS_INITIALIZER_LISTS
+
+ return Error;
+}
+
+namespace cast
+{
+ template <typename genType>
+ int entry()
+ {
+ int Error = 0;
+
+ genType A(1.0f);
+ glm::mat4x2 B(A);
+ glm::mat4x2 Identity(1.0f);
+
+ for(glm::length_t i = 0, length = B.length(); i < length; ++i)
+ Error += glm::all(glm::equal(B[i], Identity[i])) ? 0 : 1;
+
+ return Error;
+ }
+
+ int test()
+ {
+ int Error = 0;
+
+ Error += entry<glm::mat2x2>();
+ Error += entry<glm::mat2x3>();
+ Error += entry<glm::mat2x4>();
+ Error += entry<glm::mat3x2>();
+ Error += entry<glm::mat3x3>();
+ Error += entry<glm::mat3x4>();
+ Error += entry<glm::mat4x2>();
+ Error += entry<glm::mat4x3>();
+ Error += entry<glm::mat4x4>();
+
+ return Error;
+ }
+}//namespace cast
+
+int main()
+{
+ int Error = 0;
+
+ Error += cast::test();
+ Error += test_ctr();
+ Error += test_operators();
+
+ return Error;
+}
+
diff --git a/src/third_party/glm/test/core/core_type_mat4x3.cpp b/src/third_party/glm/test/core/core_type_mat4x3.cpp
new file mode 100644
index 0000000..309a86b
--- /dev/null
+++ b/src/third_party/glm/test/core/core_type_mat4x3.cpp
@@ -0,0 +1,128 @@
+#include <glm/vector_relational.hpp>
+#include <glm/mat2x2.hpp>
+#include <glm/mat2x3.hpp>
+#include <glm/mat2x4.hpp>
+#include <glm/mat3x2.hpp>
+#include <glm/mat3x3.hpp>
+#include <glm/mat3x4.hpp>
+#include <glm/mat4x2.hpp>
+#include <glm/mat4x3.hpp>
+#include <glm/mat4x4.hpp>
+#include <vector>
+
+static int test_operators()
+{
+ glm::mat4x3 l(1.0f);
+ glm::mat4x3 m(1.0f);
+ glm::vec4 u(1.0f);
+ glm::vec3 v(1.0f);
+ float x = 1.0f;
+ glm::vec3 a = m * u;
+ glm::vec4 b = v * m;
+ glm::mat4x3 n = x / m;
+ glm::mat4x3 o = m / x;
+ glm::mat4x3 p = x * m;
+ glm::mat4x3 q = m * x;
+ bool R = m != q;
+ bool S = m == l;
+
+ return (S && !R) ? 0 : 1;
+}
+
+int test_ctr()
+{
+ int Error(0);
+
+#if(GLM_HAS_INITIALIZER_LISTS)
+ glm::mat4x3 m0(
+ glm::vec3(0, 1, 2),
+ glm::vec3(3, 4, 5),
+ glm::vec3(6, 7, 8),
+ glm::vec3(9, 10, 11));
+
+ glm::mat4x3 m1{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
+
+ glm::mat4x3 m2{
+ {0, 1, 2},
+ {3, 4, 5},
+ {6, 7, 8},
+ {9, 10, 11}};
+
+ for(glm::length_t i = 0; i < m0.length(); ++i)
+ Error += glm::all(glm::equal(m0[i], m2[i])) ? 0 : 1;
+
+ for(glm::length_t i = 0; i < m1.length(); ++i)
+ Error += glm::all(glm::equal(m1[i], m2[i])) ? 0 : 1;
+
+ std::vector<glm::mat4x3> v1{
+ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11},
+ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}
+ };
+
+ std::vector<glm::mat4x3> v2{
+ {
+ { 0, 1, 2 },
+ { 4, 5, 6 },
+ { 8, 9, 10 },
+ { 12, 13, 14 }
+ },
+ {
+ { 0, 1, 2 },
+ { 4, 5, 6 },
+ { 8, 9, 10 },
+ { 12, 13, 14 }
+ }
+ };
+
+#endif//GLM_HAS_INITIALIZER_LISTS
+
+ return Error;
+}
+
+namespace cast
+{
+ template <typename genType>
+ int entry()
+ {
+ int Error = 0;
+
+ genType A(1.0f);
+ glm::mat4x3 B(A);
+ glm::mat4x3 Identity(1.0f);
+
+ for(glm::length_t i = 0, length = B.length(); i < length; ++i)
+ Error += glm::all(glm::equal(B[i], Identity[i])) ? 0 : 1;
+
+ return Error;
+ }
+
+ int test()
+ {
+ int Error = 0;
+
+ Error += entry<glm::mat2x2>();
+ Error += entry<glm::mat2x3>();
+ Error += entry<glm::mat2x4>();
+ Error += entry<glm::mat3x2>();
+ Error += entry<glm::mat3x3>();
+ Error += entry<glm::mat3x4>();
+ Error += entry<glm::mat4x2>();
+ Error += entry<glm::mat4x3>();
+ Error += entry<glm::mat4x4>();
+
+ return Error;
+ }
+}//namespace cast
+
+int main()
+{
+ int Error = 0;
+
+ Error += cast::test();
+ Error += test_ctr();
+ Error += test_operators();
+
+ return Error;
+}
+
+
diff --git a/src/third_party/glm/test/core/core_type_mat4x4.cpp b/src/third_party/glm/test/core/core_type_mat4x4.cpp
new file mode 100644
index 0000000..94cc3ac
--- /dev/null
+++ b/src/third_party/glm/test/core/core_type_mat4x4.cpp
@@ -0,0 +1,313 @@
+#include <glm/gtc/epsilon.hpp>
+#include <glm/matrix.hpp>
+#include <glm/mat2x2.hpp>
+#include <glm/mat2x3.hpp>
+#include <glm/mat2x4.hpp>
+#include <glm/mat3x2.hpp>
+#include <glm/mat3x3.hpp>
+#include <glm/mat3x4.hpp>
+#include <glm/mat4x2.hpp>
+#include <glm/mat4x3.hpp>
+#include <glm/mat4x4.hpp>
+#include <cstdio>
+#include <vector>
+
+
+template <typename genType>
+void print(genType const & Mat0)
+{
+ printf("mat4(\n");
+ printf("\tvec4(%2.9f, %2.9f, %2.9f, %2.9f)\n", Mat0[0][0], Mat0[0][1], Mat0[0][2], Mat0[0][3]);
+ printf("\tvec4(%2.9f, %2.9f, %2.9f, %2.9f)\n", Mat0[1][0], Mat0[1][1], Mat0[1][2], Mat0[1][3]);
+ printf("\tvec4(%2.9f, %2.9f, %2.9f, %2.9f)\n", Mat0[2][0], Mat0[2][1], Mat0[2][2], Mat0[2][3]);
+ printf("\tvec4(%2.9f, %2.9f, %2.9f, %2.9f))\n\n", Mat0[3][0], Mat0[3][1], Mat0[3][2], Mat0[3][3]);
+}
+
+int test_inverse_mat4x4()
+{
+ glm::mat4 Mat0(
+ glm::vec4(0.6f, 0.2f, 0.3f, 0.4f),
+ glm::vec4(0.2f, 0.7f, 0.5f, 0.3f),
+ glm::vec4(0.3f, 0.5f, 0.7f, 0.2f),
+ glm::vec4(0.4f, 0.3f, 0.2f, 0.6f));
+ glm::mat4 Inv0 = glm::inverse(Mat0);
+ glm::mat4 Res0 = Mat0 * Inv0;
+
+ print(Mat0);
+ print(Inv0);
+ print(Res0);
+
+ return 0;
+}
+
+int test_inverse_dmat4x4()
+{
+ glm::dmat4 Mat0(
+ glm::dvec4(0.6f, 0.2f, 0.3f, 0.4f),
+ glm::dvec4(0.2f, 0.7f, 0.5f, 0.3f),
+ glm::dvec4(0.3f, 0.5f, 0.7f, 0.2f),
+ glm::dvec4(0.4f, 0.3f, 0.2f, 0.6f));
+ glm::dmat4 Inv0 = glm::inverse(Mat0);
+ glm::dmat4 Res0 = Mat0 * Inv0;
+
+ print(Mat0);
+ print(Inv0);
+ print(Res0);
+
+ return 0;
+}
+
+static bool test_operators()
+{
+ glm::mat4x4 l(1.0f);
+ glm::mat4x4 m(1.0f);
+ glm::vec4 u(1.0f);
+ glm::vec4 v(1.0f);
+ float x = 1.0f;
+ glm::vec4 a = m * u;
+ glm::vec4 b = v * m;
+ glm::mat4x4 n = x / m;
+ glm::mat4x4 o = m / x;
+ glm::mat4x4 p = x * m;
+ glm::mat4x4 q = m * x;
+ bool R = m != q;
+ bool S = m == l;
+
+ return (S && !R) ? 0 : 1;
+}
+
+int test_inverse()
+{
+ int Error(0);
+
+ {
+ glm::mat4 const Matrix(
+ glm::vec4(0.6f, 0.2f, 0.3f, 0.4f),
+ glm::vec4(0.2f, 0.7f, 0.5f, 0.3f),
+ glm::vec4(0.3f, 0.5f, 0.7f, 0.2f),
+ glm::vec4(0.4f, 0.3f, 0.2f, 0.6f));
+ glm::mat4 const Inverse = glm::inverse(Matrix);
+ glm::mat4 const Identity = Matrix * Inverse;
+
+ print(Matrix);
+ print(Inverse);
+ print(Identity);
+
+ Error += glm::all(glm::epsilonEqual(Identity[0], glm::vec4(1.0f, 0.0f, 0.0f, 0.0f), glm::vec4(0.01f))) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(Identity[1], glm::vec4(0.0f, 1.0f, 0.0f, 0.0f), glm::vec4(0.01f))) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(Identity[2], glm::vec4(0.0f, 0.0f, 1.0f, 0.0f), glm::vec4(0.01f))) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(Identity[3], glm::vec4(0.0f, 0.0f, 0.0f, 1.0f), glm::vec4(0.01f))) ? 0 : 1;
+ }
+
+ {
+ glm::highp_mat4 const Matrix(
+ glm::highp_vec4(0.6f, 0.2f, 0.3f, 0.4f),
+ glm::highp_vec4(0.2f, 0.7f, 0.5f, 0.3f),
+ glm::highp_vec4(0.3f, 0.5f, 0.7f, 0.2f),
+ glm::highp_vec4(0.4f, 0.3f, 0.2f, 0.6f));
+ glm::highp_mat4 const Inverse = glm::inverse(Matrix);
+ glm::highp_mat4 const Identity = Matrix * Inverse;
+
+ printf("highp_mat4 inverse\n");
+ print(Matrix);
+ print(Inverse);
+ print(Identity);
+
+ Error += glm::all(glm::epsilonEqual(Identity[0], glm::highp_vec4(1.0f, 0.0f, 0.0f, 0.0f), glm::highp_vec4(0.01f))) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(Identity[1], glm::highp_vec4(0.0f, 1.0f, 0.0f, 0.0f), glm::highp_vec4(0.01f))) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(Identity[2], glm::highp_vec4(0.0f, 0.0f, 1.0f, 0.0f), glm::highp_vec4(0.01f))) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(Identity[3], glm::highp_vec4(0.0f, 0.0f, 0.0f, 1.0f), glm::highp_vec4(0.01f))) ? 0 : 1;
+ }
+
+ {
+ glm::mediump_mat4 const Matrix(
+ glm::mediump_vec4(0.6f, 0.2f, 0.3f, 0.4f),
+ glm::mediump_vec4(0.2f, 0.7f, 0.5f, 0.3f),
+ glm::mediump_vec4(0.3f, 0.5f, 0.7f, 0.2f),
+ glm::mediump_vec4(0.4f, 0.3f, 0.2f, 0.6f));
+ glm::mediump_mat4 const Inverse = glm::inverse(Matrix);
+ glm::mediump_mat4 const Identity = Matrix * Inverse;
+
+ printf("mediump_mat4 inverse\n");
+ print(Matrix);
+ print(Inverse);
+ print(Identity);
+
+ Error += glm::all(glm::epsilonEqual(Identity[0], glm::mediump_vec4(1.0f, 0.0f, 0.0f, 0.0f), glm::mediump_vec4(0.01f))) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(Identity[1], glm::mediump_vec4(0.0f, 1.0f, 0.0f, 0.0f), glm::mediump_vec4(0.01f))) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(Identity[2], glm::mediump_vec4(0.0f, 0.0f, 1.0f, 0.0f), glm::mediump_vec4(0.01f))) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(Identity[3], glm::mediump_vec4(0.0f, 0.0f, 0.0f, 1.0f), glm::mediump_vec4(0.01f))) ? 0 : 1;
+ }
+
+ {
+ glm::lowp_mat4 const Matrix(
+ glm::lowp_vec4(0.6f, 0.2f, 0.3f, 0.4f),
+ glm::lowp_vec4(0.2f, 0.7f, 0.5f, 0.3f),
+ glm::lowp_vec4(0.3f, 0.5f, 0.7f, 0.2f),
+ glm::lowp_vec4(0.4f, 0.3f, 0.2f, 0.6f));
+ glm::lowp_mat4 const Inverse = glm::inverse(Matrix);
+ glm::lowp_mat4 const Identity = Matrix * Inverse;
+
+ printf("lowp_mat4 inverse\n");
+ print(Matrix);
+ print(Inverse);
+ print(Identity);
+
+ Error += glm::all(glm::epsilonEqual(Identity[0], glm::lowp_vec4(1.0f, 0.0f, 0.0f, 0.0f), glm::lowp_vec4(0.01f))) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(Identity[1], glm::lowp_vec4(0.0f, 1.0f, 0.0f, 0.0f), glm::lowp_vec4(0.01f))) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(Identity[2], glm::lowp_vec4(0.0f, 0.0f, 1.0f, 0.0f), glm::lowp_vec4(0.01f))) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(Identity[3], glm::lowp_vec4(0.0f, 0.0f, 0.0f, 1.0f), glm::lowp_vec4(0.01f))) ? 0 : 1;
+ }
+
+ {
+ glm::mat4 const Matrix(
+ glm::vec4(0.6f, 0.2f, 0.3f, 0.4f),
+ glm::vec4(0.2f, 0.7f, 0.5f, 0.3f),
+ glm::vec4(0.3f, 0.5f, 0.7f, 0.2f),
+ glm::vec4(0.4f, 0.3f, 0.2f, 0.6f));
+ glm::mat4 const Identity = Matrix / Matrix;
+
+ Error += glm::all(glm::epsilonEqual(Identity[0], glm::vec4(1.0f, 0.0f, 0.0f, 0.0f), glm::vec4(0.01f))) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(Identity[1], glm::vec4(0.0f, 1.0f, 0.0f, 0.0f), glm::vec4(0.01f))) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(Identity[2], glm::vec4(0.0f, 0.0f, 1.0f, 0.0f), glm::vec4(0.01f))) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(Identity[3], glm::vec4(0.0f, 0.0f, 0.0f, 1.0f), glm::vec4(0.01f))) ? 0 : 1;
+ }
+
+ return Error;
+}
+
+int test_ctr()
+{
+ int Error(0);
+
+#if GLM_HAS_TRIVIAL_QUERIES
+ //Error += std::is_trivially_default_constructible<glm::mat4>::value ? 0 : 1;
+ //Error += std::is_trivially_copy_assignable<glm::mat4>::value ? 0 : 1;
+ Error += std::is_trivially_copyable<glm::mat4>::value ? 0 : 1;
+ //Error += std::is_copy_constructible<glm::mat4>::value ? 0 : 1;
+ //Error += std::has_trivial_copy_constructor<glm::mat4>::value ? 0 : 1;
+#endif
+
+#if(GLM_HAS_INITIALIZER_LISTS)
+ glm::mat4 m0(
+ glm::vec4(0, 1, 2, 3),
+ glm::vec4(4, 5, 6, 7),
+ glm::vec4(8, 9, 10, 11),
+ glm::vec4(12, 13, 14, 15));
+
+ assert(sizeof(m0) == 4 * 4 * 4);
+
+ glm::vec4 V{0, 1, 2, 3};
+
+ glm::mat4 m1{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
+
+ glm::mat4 m2{
+ {0, 1, 2, 3},
+ {4, 5, 6, 7},
+ {8, 9, 10, 11},
+ {12, 13, 14, 15}};
+
+ for(glm::length_t i = 0; i < m0.length(); ++i)
+ Error += glm::all(glm::equal(m0[i], m2[i])) ? 0 : 1;
+
+ for(glm::length_t i = 0; i < m1.length(); ++i)
+ Error += glm::all(glm::equal(m1[i], m2[i])) ? 0 : 1;
+
+ std::vector<glm::mat4> m3{
+ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15},
+ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15},
+ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15},
+ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}};
+
+ std::vector<glm::mat4> v1{
+ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15},
+ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}};
+
+ std::vector<glm::mat4> v2{
+ {
+ { 0, 1, 2, 3 },
+ { 4, 5, 6, 7 },
+ { 8, 9, 10, 11 },
+ { 12, 13, 14, 15 }
+ },
+ {
+ { 0, 1, 2, 3 },
+ { 4, 5, 6, 7 },
+ { 8, 9, 10, 11 },
+ { 12, 13, 14, 15 }
+ }};
+
+#endif//GLM_HAS_INITIALIZER_LISTS
+
+ return Error;
+}
+
+int perf_mul()
+{
+ int Error = 0;
+
+
+
+ return Error;
+}
+
+namespace cast
+{
+ template <typename genType>
+ int entry()
+ {
+ int Error = 0;
+
+ genType A(1.0f);
+ glm::mat4x4 B(A);
+ glm::mat4x4 Identity(1.0f);
+
+ for(glm::length_t i = 0, length = B.length(); i < length; ++i)
+ Error += glm::all(glm::equal(B[i], Identity[i])) ? 0 : 1;
+
+ return Error;
+ }
+
+ int test()
+ {
+ int Error = 0;
+
+ Error += entry<glm::mat2x2>();
+ Error += entry<glm::mat2x3>();
+ Error += entry<glm::mat2x4>();
+ Error += entry<glm::mat3x2>();
+ Error += entry<glm::mat3x3>();
+ Error += entry<glm::mat3x4>();
+ Error += entry<glm::mat4x2>();
+ Error += entry<glm::mat4x3>();
+ Error += entry<glm::mat4x4>();
+
+ return Error;
+ }
+}//namespace cast
+
+struct repro
+{
+ repro(){ this->matrix = new glm::mat4(); }
+ ~repro(){delete this->matrix;}
+
+ glm::mat4* matrix;
+};
+
+int main()
+{
+ int Error = 0;
+
+ repro Repro;
+
+ Error += cast::test();
+ Error += test_ctr();
+ Error += test_inverse_dmat4x4();
+ Error += test_inverse_mat4x4();
+ Error += test_operators();
+ Error += test_inverse();
+
+ Error += perf_mul();
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/core/core_type_vec1.cpp b/src/third_party/glm/test/core/core_type_vec1.cpp
new file mode 100644
index 0000000..9177e38
--- /dev/null
+++ b/src/third_party/glm/test/core/core_type_vec1.cpp
@@ -0,0 +1,147 @@
+#define GLM_FORCE_SWIZZLE
+#include <glm/vector_relational.hpp>
+#include <glm/gtc/vec1.hpp>
+#include <vector>
+
+int test_vec1_operators()
+{
+ int Error(0);
+
+ glm::vec1 A(1.0f);
+ glm::vec1 B(1.0f);
+ {
+ bool R = A != B;
+ bool S = A == B;
+
+ Error += (S && !R) ? 0 : 1;
+ }
+
+ {
+ A *= 1.0f;
+ B *= 1.0;
+ A += 1.0f;
+ B += 1.0;
+
+ bool R = A != B;
+ bool S = A == B;
+
+ Error += (S && !R) ? 0 : 1;
+ }
+
+ return Error;
+}
+
+int test_vec1_ctor()
+{
+ int Error = 0;
+
+# if GLM_HAS_TRIVIAL_QUERIES
+ // Error += std::is_trivially_default_constructible<glm::vec1>::value ? 0 : 1;
+ // Error += std::is_trivially_copy_assignable<glm::vec1>::value ? 0 : 1;
+ Error += std::is_trivially_copyable<glm::vec1>::value ? 0 : 1;
+ Error += std::is_trivially_copyable<glm::dvec1>::value ? 0 : 1;
+ Error += std::is_trivially_copyable<glm::ivec1>::value ? 0 : 1;
+ Error += std::is_trivially_copyable<glm::uvec1>::value ? 0 : 1;
+
+ Error += std::is_copy_constructible<glm::vec1>::value ? 0 : 1;
+# endif
+
+/*
+#if GLM_HAS_INITIALIZER_LISTS
+ {
+ glm::vec1 a{ 0 };
+ std::vector<glm::vec1> v = {
+ {0.f},
+ {4.f},
+ {8.f}};
+ }
+
+ {
+ glm::dvec2 a{ 0 };
+ std::vector<glm::dvec1> v = {
+ {0.0},
+ {4.0},
+ {8.0}};
+ }
+#endif
+*/
+#if GLM_HAS_UNRESTRICTED_UNIONS && defined(GLM_FORCE_SWIZZLE)
+ {
+ glm::vec2 A = glm::vec2(1.0f, 2.0f);
+ glm::vec2 B = A.xy;
+ glm::vec2 C(A.xy);
+ glm::vec2 D(A.xy());
+
+ Error += glm::all(glm::equal(A, B)) ? 0 : 1;
+ Error += glm::all(glm::equal(A, C)) ? 0 : 1;
+ Error += glm::all(glm::equal(A, D)) ? 0 : 1;
+ }
+#endif//GLM_HAS_UNRESTRICTED_UNIONS && defined(GLM_FORCE_SWIZZLE)
+
+ {
+ glm::vec2 A = glm::vec2(2.0f);
+ glm::vec2 B = glm::vec2(2.0f, 3.0f);
+ glm::vec2 C = glm::vec2(2.0f, 3.0);
+ //glm::vec2 D = glm::dvec2(2.0); // Build error TODO: What does the specification says?
+ glm::vec2 E(glm::dvec2(2.0));
+ glm::vec2 F(glm::ivec2(2));
+ }
+
+ return Error;
+}
+
+int test_vec1_size()
+{
+ int Error = 0;
+
+ Error += sizeof(glm::vec1) == sizeof(glm::mediump_vec1) ? 0 : 1;
+ Error += 4 == sizeof(glm::mediump_vec1) ? 0 : 1;
+ Error += sizeof(glm::dvec1) == sizeof(glm::highp_dvec1) ? 0 : 1;
+ Error += 8 == sizeof(glm::highp_dvec1) ? 0 : 1;
+ Error += glm::vec1().length() == 1 ? 0 : 1;
+ Error += glm::dvec1().length() == 1 ? 0 : 1;
+
+ return Error;
+}
+
+int test_vec1_operator_increment()
+{
+ int Error(0);
+
+ glm::ivec1 v0(1);
+ glm::ivec1 v1(v0);
+ glm::ivec1 v2(v0);
+ glm::ivec1 v3 = ++v1;
+ glm::ivec1 v4 = v2++;
+
+ Error += glm::all(glm::equal(v0, v4)) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, v2)) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, v3)) ? 0 : 1;
+
+ int i0(1);
+ int i1(i0);
+ int i2(i0);
+ int i3 = ++i1;
+ int i4 = i2++;
+
+ Error += i0 == i4 ? 0 : 1;
+ Error += i1 == i2 ? 0 : 1;
+ Error += i1 == i3 ? 0 : 1;
+
+ return Error;
+}
+
+int main()
+{
+ int Error = 0;
+
+ glm::vec1 v;
+ assert(v.length() == 1);
+
+ Error += test_vec1_size();
+ Error += test_vec1_ctor();
+ Error += test_vec1_operators();
+ Error += test_vec1_operator_increment();
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/core/core_type_vec2.cpp b/src/third_party/glm/test/core/core_type_vec2.cpp
new file mode 100644
index 0000000..af7997a
--- /dev/null
+++ b/src/third_party/glm/test/core/core_type_vec2.cpp
@@ -0,0 +1,312 @@
+#define GLM_FORCE_SWIZZLE
+#include <glm/vector_relational.hpp>
+#include <glm/vec2.hpp>
+#include <vector>
+#if GLM_HAS_TRIVIAL_QUERIES
+# include <type_traits>
+#endif
+
+int test_vec2_operators()
+{
+ int Error = 0;
+
+ {
+ glm::vec2 A(1.0f);
+ glm::vec2 B(1.0f);
+ Error += A != B ? 1 : 0;
+ Error += A == B ? 0 : 1;
+ }
+
+ {
+ glm::vec2 A(1.0f);
+ glm::vec2 C = A + 1.0f;
+ A += 1.0f;
+ Error += A.x == 2.0f && A.y == 2.0f ? 0 : 1;
+ Error += A.x == C.x && A.y == C.y ? 0 : 1;
+ }
+
+ {
+ glm::vec2 A(1.0f);
+ glm::vec2 B(2.0f,-1.0f);
+ glm::vec2 C = A + B;
+ A += B;
+ Error += A.x == 3.0f && A.y == 0.0f ? 0 : 1;
+ Error += A.x == C.x && A.y == C.y ? 0 : 1;
+ }
+
+ {
+ glm::vec2 A(1.0f);
+ glm::vec2 C = A - 1.0f;
+ A -= 1.0f;
+ Error += A.x == 0.0f && A.y == 0.0f ? 0 : 1;
+ Error += A.x == C.x && A.y == C.y ? 0 : 1;
+ }
+
+ {
+ glm::vec2 A(1.0f);
+ glm::vec2 B(2.0f,-1.0f);
+ glm::vec2 C = A - B;
+ A -= B;
+ Error += A.x == -1.0f && A.y == 2.0f ? 0 : 1;
+ Error += A.x == C.x && A.y == C.y ? 0 : 1;
+ }
+
+ {
+ glm::vec2 A(1.0f);
+ glm::vec2 C = A * 2.0f;
+ A *= 2.0f;
+ Error += A.x == 2.0f && A.y == 2.0f ? 0 : 1;
+ Error += A.x == C.x && A.y == C.y ? 0 : 1;
+ }
+
+ {
+ glm::vec2 A(2.0f);
+ glm::vec2 B(2.0f);
+ glm::vec2 C = A / B;
+ A /= B;
+ Error += A.x == 1.0f && A.y == 1.0f ? 0 : 1;
+ Error += A.x == C.x && A.y == C.y ? 0 : 1;
+ }
+
+ {
+ glm::vec2 A(1.0f, 2.0f);
+ glm::vec2 B(4.0f, 5.0f);
+
+ glm::vec2 C = A + B;
+ Error += C == glm::vec2(5, 7) ? 0 : 1;
+
+ glm::vec2 D = B - A;
+ Error += D == glm::vec2(3, 3) ? 0 : 1;
+
+ glm::vec2 E = A * B;
+ Error += E == glm::vec2(4, 10) ? 0 : 1;
+
+ glm::vec2 F = B / A;
+ Error += F == glm::vec2(4, 2.5) ? 0 : 1;
+
+ glm::vec2 G = A + 1.0f;
+ Error += G == glm::vec2(2, 3) ? 0 : 1;
+
+ glm::vec2 H = B - 1.0f;
+ Error += H == glm::vec2(3, 4) ? 0 : 1;
+
+ glm::vec2 I = A * 2.0f;
+ Error += I == glm::vec2(2, 4) ? 0 : 1;
+
+ glm::vec2 J = B / 2.0f;
+ Error += J == glm::vec2(2, 2.5) ? 0 : 1;
+
+ glm::vec2 K = 1.0f + A;
+ Error += K == glm::vec2(2, 3) ? 0 : 1;
+
+ glm::vec2 L = 1.0f - B;
+ Error += L == glm::vec2(-3, -4) ? 0 : 1;
+
+ glm::vec2 M = 2.0f * A;
+ Error += M == glm::vec2(2, 4) ? 0 : 1;
+
+ glm::vec2 N = 2.0f / B;
+ Error += N == glm::vec2(0.5, 2.0 / 5.0) ? 0 : 1;
+ }
+
+ {
+ glm::vec2 A(1.0f, 2.0f);
+ glm::vec2 B(4.0f, 5.0f);
+
+ A += B;
+ Error += A == glm::vec2(5, 7) ? 0 : 1;
+
+ A += 1.0f;
+ Error += A == glm::vec2(6, 8) ? 0 : 1;
+ }
+ {
+ glm::vec2 A(1.0f, 2.0f);
+ glm::vec2 B(4.0f, 5.0f);
+
+ B -= A;
+ Error += B == glm::vec2(3, 3) ? 0 : 1;
+
+ B -= 1.0f;
+ Error += B == glm::vec2(2, 2) ? 0 : 1;
+ }
+ {
+ glm::vec2 A(1.0f, 2.0f);
+ glm::vec2 B(4.0f, 5.0f);
+
+ A *= B;
+ Error += A == glm::vec2(4, 10) ? 0 : 1;
+
+ A *= 2.0f;
+ Error += A == glm::vec2(8, 20) ? 0 : 1;
+ }
+ {
+ glm::vec2 A(1.0f, 2.0f);
+ glm::vec2 B(4.0f, 5.0f);
+
+ B /= A;
+ Error += B == glm::vec2(4, 2.5) ? 0 : 1;
+
+ B /= 2.0f;
+ Error += B == glm::vec2(2, 1.25) ? 0 : 1;
+ }
+ {
+ glm::vec2 B(2.0f);
+
+ B /= B.y;
+ Error += B == glm::vec2(1.0f) ? 0 : 1;
+ }
+
+ {
+ glm::vec2 A(1.0f, 2.0f);
+ glm::vec2 B = -A;
+ Error += B == glm::vec2(-1.0f, -2.0f) ? 0 : 1;
+ }
+
+ {
+ glm::vec2 A(1.0f, 2.0f);
+ glm::vec2 B = --A;
+ Error += B == glm::vec2(0.0f, 1.0f) ? 0 : 1;
+ }
+
+ {
+ glm::vec2 A(1.0f, 2.0f);
+ glm::vec2 B = A--;
+ Error += B == glm::vec2(1.0f, 2.0f) ? 0 : 1;
+ Error += A == glm::vec2(0.0f, 1.0f) ? 0 : 1;
+ }
+
+ {
+ glm::vec2 A(1.0f, 2.0f);
+ glm::vec2 B = ++A;
+ Error += B == glm::vec2(2.0f, 3.0f) ? 0 : 1;
+ }
+
+ {
+ glm::vec2 A(1.0f, 2.0f);
+ glm::vec2 B = A++;
+ Error += B == glm::vec2(1.0f, 2.0f) ? 0 : 1;
+ Error += A == glm::vec2(2.0f, 3.0f) ? 0 : 1;
+ }
+
+ return Error;
+}
+
+int test_vec2_ctor()
+{
+ int Error = 0;
+
+ {
+ glm::vec2 A(1);
+ glm::vec2 B(A);
+ Error += A == B ? 0 : 1;
+ }
+
+# if GLM_HAS_TRIVIAL_QUERIES
+ // Error += std::is_trivially_default_constructible<glm::vec2>::value ? 0 : 1;
+ // Error += std::is_trivially_copy_assignable<glm::vec2>::value ? 0 : 1;
+ Error += std::is_trivially_copyable<glm::vec2>::value ? 0 : 1;
+ Error += std::is_trivially_copyable<glm::dvec2>::value ? 0 : 1;
+ Error += std::is_trivially_copyable<glm::ivec2>::value ? 0 : 1;
+ Error += std::is_trivially_copyable<glm::uvec2>::value ? 0 : 1;
+
+ Error += std::is_copy_constructible<glm::vec2>::value ? 0 : 1;
+# endif
+
+#if GLM_HAS_INITIALIZER_LISTS
+ {
+ glm::vec2 a{ 0, 1 };
+ std::vector<glm::vec2> v = {
+ {0, 1},
+ {4, 5},
+ {8, 9}};
+ }
+
+ {
+ glm::dvec2 a{ 0, 1 };
+ std::vector<glm::dvec2> v = {
+ {0, 1},
+ {4, 5},
+ {8, 9}};
+ }
+#endif
+
+#if GLM_HAS_UNRESTRICTED_UNIONS && defined(GLM_FORCE_SWIZZLE)
+ {
+ glm::vec2 A = glm::vec2(1.0f, 2.0f);
+ glm::vec2 B = A.xy;
+ glm::vec2 C(A.xy);
+ glm::vec2 D(A.xy());
+
+ Error += glm::all(glm::equal(A, B)) ? 0 : 1;
+ Error += glm::all(glm::equal(A, C)) ? 0 : 1;
+ Error += glm::all(glm::equal(A, D)) ? 0 : 1;
+ }
+#endif//GLM_HAS_UNRESTRICTED_UNIONS && defined(GLM_FORCE_SWIZZLE)
+
+ {
+ glm::vec2 A = glm::vec2(2.0f);
+ glm::vec2 B = glm::vec2(2.0f, 3.0f);
+ glm::vec2 C = glm::vec2(2.0f, 3.0);
+ //glm::vec2 D = glm::dvec2(2.0); // Build error TODO: What does the specification says?
+ glm::vec2 E(glm::dvec2(2.0));
+ glm::vec2 F(glm::ivec2(2));
+ }
+
+ return Error;
+}
+
+int test_vec2_size()
+{
+ int Error = 0;
+
+ Error += sizeof(glm::vec2) == sizeof(glm::mediump_vec2) ? 0 : 1;
+ Error += 8 == sizeof(glm::mediump_vec2) ? 0 : 1;
+ Error += sizeof(glm::dvec2) == sizeof(glm::highp_dvec2) ? 0 : 1;
+ Error += 16 == sizeof(glm::highp_dvec2) ? 0 : 1;
+ Error += glm::vec2().length() == 2 ? 0 : 1;
+ Error += glm::dvec2().length() == 2 ? 0 : 1;
+
+ return Error;
+}
+
+int test_operator_increment()
+{
+ int Error(0);
+
+ glm::ivec2 v0(1);
+ glm::ivec2 v1(v0);
+ glm::ivec2 v2(v0);
+ glm::ivec2 v3 = ++v1;
+ glm::ivec2 v4 = v2++;
+
+ Error += glm::all(glm::equal(v0, v4)) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, v2)) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, v3)) ? 0 : 1;
+
+ int i0(1);
+ int i1(i0);
+ int i2(i0);
+ int i3 = ++i1;
+ int i4 = i2++;
+
+ Error += i0 == i4 ? 0 : 1;
+ Error += i1 == i2 ? 0 : 1;
+ Error += i1 == i3 ? 0 : 1;
+
+ return Error;
+}
+
+int main()
+{
+ int Error = 0;
+
+ glm::vec2 v;
+ assert(v.length() == 2);
+
+ Error += test_vec2_size();
+ Error += test_vec2_ctor();
+ Error += test_vec2_operators();
+ Error += test_operator_increment();
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/core/core_type_vec3.cpp b/src/third_party/glm/test/core/core_type_vec3.cpp
new file mode 100644
index 0000000..e6b894c
--- /dev/null
+++ b/src/third_party/glm/test/core/core_type_vec3.cpp
@@ -0,0 +1,486 @@
+#define GLM_FORCE_SWIZZLE
+#include <glm/vector_relational.hpp>
+#include <glm/geometric.hpp>
+#include <glm/vec2.hpp>
+#include <glm/vec3.hpp>
+#include <glm/vec4.hpp>
+#include <cstdio>
+#include <vector>
+
+int test_vec3_ctor()
+{
+ int Error = 0;
+
+# if GLM_HAS_TRIVIAL_QUERIES
+ // Error += std::is_trivially_default_constructible<glm::vec3>::value ? 0 : 1;
+ // Error += std::is_trivially_copy_assignable<glm::vec3>::value ? 0 : 1;
+ Error += std::is_trivially_copyable<glm::vec3>::value ? 0 : 1;
+ Error += std::is_trivially_copyable<glm::dvec3>::value ? 0 : 1;
+ Error += std::is_trivially_copyable<glm::ivec3>::value ? 0 : 1;
+ Error += std::is_trivially_copyable<glm::uvec3>::value ? 0 : 1;
+
+ Error += std::is_copy_constructible<glm::vec3>::value ? 0 : 1;
+# endif
+
+#if (GLM_HAS_INITIALIZER_LISTS)
+ {
+ glm::vec3 a{ 0, 1, 2 };
+ std::vector<glm::vec3> v = {
+ {0, 1, 2},
+ {4, 5, 6},
+ {8, 9, 0}};
+ }
+
+ {
+ glm::dvec3 a{ 0, 1, 2 };
+ std::vector<glm::dvec3> v = {
+ {0, 1, 2},
+ {4, 5, 6},
+ {8, 9, 0}};
+ }
+#endif
+
+#if(GLM_HAS_UNRESTRICTED_UNIONS && defined(GLM_FORCE_SWIZZLE))
+ {
+ glm::vec3 A = glm::vec3(1.0f, 2.0f, 3.0f);
+ glm::vec3 B = A.xyz;
+ glm::vec3 C(A.xyz);
+ glm::vec3 D(A.xyz());
+ glm::vec3 E(A.x, A.yz);
+ glm::vec3 F(A.x, A.yz());
+ glm::vec3 G(A.xy, A.z);
+ glm::vec3 H(A.xy(), A.z);
+
+ Error += glm::all(glm::equal(A, B)) ? 0 : 1;
+ Error += glm::all(glm::equal(A, C)) ? 0 : 1;
+ Error += glm::all(glm::equal(A, D)) ? 0 : 1;
+ Error += glm::all(glm::equal(A, E)) ? 0 : 1;
+ Error += glm::all(glm::equal(A, F)) ? 0 : 1;
+ Error += glm::all(glm::equal(A, G)) ? 0 : 1;
+ Error += glm::all(glm::equal(A, H)) ? 0 : 1;
+ }
+#endif//(GLM_HAS_UNRESTRICTED_UNIONS && defined(GLM_FORCE_SWIZZLE))
+
+ {
+ glm::vec3 A(1);
+ glm::vec3 B(1, 1, 1);
+
+ Error += A == B ? 0 : 1;
+ }
+
+ {
+ std::vector<glm::vec3> Tests;
+ Tests.push_back(glm::vec3(glm::vec2(1, 2), 3));
+ Tests.push_back(glm::vec3(1, glm::vec2(2, 3)));
+ Tests.push_back(glm::vec3(1, 2, 3));
+ Tests.push_back(glm::vec3(glm::vec4(1, 2, 3, 4)));
+
+ for(std::size_t i = 0; i < Tests.size(); ++i)
+ Error += Tests[i] == glm::vec3(1, 2, 3) ? 0 : 1;
+ }
+
+ return Error;
+}
+
+float foo()
+{
+ glm::vec3 bar = glm::vec3(0.0f, 1.0f, 1.0f);
+
+ return glm::length(bar);
+}
+
+int test_vec3_operators()
+{
+ int Error = 0;
+
+ {
+ glm::vec3 A(1.0f);
+ glm::vec3 B(1.0f);
+ bool R = A != B;
+ bool S = A == B;
+
+ Error += (S && !R) ? 0 : 1;
+ }
+
+ {
+ glm::vec3 A(1.0f, 2.0f, 3.0f);
+ glm::vec3 B(4.0f, 5.0f, 6.0f);
+
+ glm::vec3 C = A + B;
+ Error += C == glm::vec3(5, 7, 9) ? 0 : 1;
+
+ glm::vec3 D = B - A;
+ Error += D == glm::vec3(3, 3, 3) ? 0 : 1;
+
+ glm::vec3 E = A * B;
+ Error += E == glm::vec3(4, 10, 18) ? 0 : 1;
+
+ glm::vec3 F = B / A;
+ Error += F == glm::vec3(4, 2.5, 2) ? 0 : 1;
+
+ glm::vec3 G = A + 1.0f;
+ Error += G == glm::vec3(2, 3, 4) ? 0 : 1;
+
+ glm::vec3 H = B - 1.0f;
+ Error += H == glm::vec3(3, 4, 5) ? 0 : 1;
+
+ glm::vec3 I = A * 2.0f;
+ Error += I == glm::vec3(2, 4, 6) ? 0 : 1;
+
+ glm::vec3 J = B / 2.0f;
+ Error += J == glm::vec3(2, 2.5, 3) ? 0 : 1;
+
+ glm::vec3 K = 1.0f + A;
+ Error += K == glm::vec3(2, 3, 4) ? 0 : 1;
+
+ glm::vec3 L = 1.0f - B;
+ Error += L == glm::vec3(-3, -4, -5) ? 0 : 1;
+
+ glm::vec3 M = 2.0f * A;
+ Error += M == glm::vec3(2, 4, 6) ? 0 : 1;
+
+ glm::vec3 N = 2.0f / B;
+ Error += N == glm::vec3(0.5, 2.0 / 5.0, 2.0 / 6.0) ? 0 : 1;
+ }
+
+ {
+ glm::vec3 A(1.0f, 2.0f, 3.0f);
+ glm::vec3 B(4.0f, 5.0f, 6.0f);
+
+ A += B;
+ Error += A == glm::vec3(5, 7, 9) ? 0 : 1;
+
+ A += 1.0f;
+ Error += A == glm::vec3(6, 8, 10) ? 0 : 1;
+ }
+ {
+ glm::vec3 A(1.0f, 2.0f, 3.0f);
+ glm::vec3 B(4.0f, 5.0f, 6.0f);
+
+ B -= A;
+ Error += B == glm::vec3(3, 3, 3) ? 0 : 1;
+
+ B -= 1.0f;
+ Error += B == glm::vec3(2, 2, 2) ? 0 : 1;
+ }
+ {
+ glm::vec3 A(1.0f, 2.0f, 3.0f);
+ glm::vec3 B(4.0f, 5.0f, 6.0f);
+
+ A *= B;
+ Error += A == glm::vec3(4, 10, 18) ? 0 : 1;
+
+ A *= 2.0f;
+ Error += A == glm::vec3(8, 20, 36) ? 0 : 1;
+ }
+ {
+ glm::vec3 A(1.0f, 2.0f, 3.0f);
+ glm::vec3 B(4.0f, 5.0f, 6.0f);
+
+ B /= A;
+ Error += B == glm::vec3(4, 2.5, 2) ? 0 : 1;
+
+ B /= 2.0f;
+ Error += B == glm::vec3(2, 1.25, 1) ? 0 : 1;
+ }
+ {
+ glm::vec3 B(2.0f);
+
+ B /= B.y;
+ Error += B == glm::vec3(1.0f) ? 0 : 1;
+ }
+
+ {
+ glm::vec3 A(1.0f, 2.0f, 3.0f);
+ glm::vec3 B = -A;
+ Error += B == glm::vec3(-1.0f, -2.0f, -3.0f) ? 0 : 1;
+ }
+
+ {
+ glm::vec3 A(1.0f, 2.0f, 3.0f);
+ glm::vec3 B = --A;
+ Error += B == glm::vec3(0.0f, 1.0f, 2.0f) ? 0 : 1;
+ }
+
+ {
+ glm::vec3 A(1.0f, 2.0f, 3.0f);
+ glm::vec3 B = A--;
+ Error += B == glm::vec3(1.0f, 2.0f, 3.0f) ? 0 : 1;
+ Error += A == glm::vec3(0.0f, 1.0f, 2.0f) ? 0 : 1;
+ }
+
+ {
+ glm::vec3 A(1.0f, 2.0f, 3.0f);
+ glm::vec3 B = ++A;
+ Error += B == glm::vec3(2.0f, 3.0f, 4.0f) ? 0 : 1;
+ }
+
+ {
+ glm::vec3 A(1.0f, 2.0f, 3.0f);
+ glm::vec3 B = A++;
+ Error += B == glm::vec3(1.0f, 2.0f, 3.0f) ? 0 : 1;
+ Error += A == glm::vec3(2.0f, 3.0f, 4.0f) ? 0 : 1;
+ }
+
+ return Error;
+}
+
+int test_vec3_size()
+{
+ int Error = 0;
+
+ Error += sizeof(glm::vec3) == sizeof(glm::lowp_vec3) ? 0 : 1;
+ Error += sizeof(glm::vec3) == sizeof(glm::mediump_vec3) ? 0 : 1;
+ Error += sizeof(glm::vec3) == sizeof(glm::highp_vec3) ? 0 : 1;
+ Error += 12 == sizeof(glm::mediump_vec3) ? 0 : 1;
+ Error += sizeof(glm::dvec3) == sizeof(glm::lowp_dvec3) ? 0 : 1;
+ Error += sizeof(glm::dvec3) == sizeof(glm::mediump_dvec3) ? 0 : 1;
+ Error += sizeof(glm::dvec3) == sizeof(glm::highp_dvec3) ? 0 : 1;
+ Error += 24 == sizeof(glm::highp_dvec3) ? 0 : 1;
+ Error += glm::vec3().length() == 3 ? 0 : 1;
+ Error += glm::dvec3().length() == 3 ? 0 : 1;
+ return Error;
+}
+
+int test_vec3_swizzle3_2()
+{
+ int Error = 0;
+
+ glm::vec3 v(1, 2, 3);
+ glm::vec2 u;
+
+# if(GLM_LANG & GLM_LANG_CXXMS_FLAG)
+ // Can not assign a vec3 swizzle to a vec2
+ //u = v.xyz; //Illegal
+ //u = v.rgb; //Illegal
+ //u = v.stp; //Illegal
+
+ u = v.xx; Error += (u.x == 1.0f && u.y == 1.0f) ? 0 : 1;
+ u = v.xy; Error += (u.x == 1.0f && u.y == 2.0f) ? 0 : 1;
+ u = v.xz; Error += (u.x == 1.0f && u.y == 3.0f) ? 0 : 1;
+ u = v.yx; Error += (u.x == 2.0f && u.y == 1.0f) ? 0 : 1;
+ u = v.yy; Error += (u.x == 2.0f && u.y == 2.0f) ? 0 : 1;
+ u = v.yz; Error += (u.x == 2.0f && u.y == 3.0f) ? 0 : 1;
+ u = v.zx; Error += (u.x == 3.0f && u.y == 1.0f) ? 0 : 1;
+ u = v.zy; Error += (u.x == 3.0f && u.y == 2.0f) ? 0 : 1;
+ u = v.zz; Error += (u.x == 3.0f && u.y == 3.0f) ? 0 : 1;
+
+ u = v.rr; Error += (u.r == 1.0f && u.g == 1.0f) ? 0 : 1;
+ u = v.rg; Error += (u.r == 1.0f && u.g == 2.0f) ? 0 : 1;
+ u = v.rb; Error += (u.r == 1.0f && u.g == 3.0f) ? 0 : 1;
+ u = v.gr; Error += (u.r == 2.0f && u.g == 1.0f) ? 0 : 1;
+ u = v.gg; Error += (u.r == 2.0f && u.g == 2.0f) ? 0 : 1;
+ u = v.gb; Error += (u.r == 2.0f && u.g == 3.0f) ? 0 : 1;
+ u = v.br; Error += (u.r == 3.0f && u.g == 1.0f) ? 0 : 1;
+ u = v.bg; Error += (u.r == 3.0f && u.g == 2.0f) ? 0 : 1;
+ u = v.bb; Error += (u.r == 3.0f && u.g == 3.0f) ? 0 : 1;
+
+ u = v.ss; Error += (u.s == 1.0f && u.t == 1.0f) ? 0 : 1;
+ u = v.st; Error += (u.s == 1.0f && u.t == 2.0f) ? 0 : 1;
+ u = v.sp; Error += (u.s == 1.0f && u.t == 3.0f) ? 0 : 1;
+ u = v.ts; Error += (u.s == 2.0f && u.t == 1.0f) ? 0 : 1;
+ u = v.tt; Error += (u.s == 2.0f && u.t == 2.0f) ? 0 : 1;
+ u = v.tp; Error += (u.s == 2.0f && u.t == 3.0f) ? 0 : 1;
+ u = v.ps; Error += (u.s == 3.0f && u.t == 1.0f) ? 0 : 1;
+ u = v.pt; Error += (u.s == 3.0f && u.t == 2.0f) ? 0 : 1;
+ u = v.pp; Error += (u.s == 3.0f && u.t == 3.0f) ? 0 : 1;
+ // Mixed member aliases are not valid
+ //u = v.rx; //Illegal
+ //u = v.sy; //Illegal
+
+ u = glm::vec2(1, 2);
+ v = glm::vec3(1, 2, 3);
+ //v.xx = u; //Illegal
+ v.xy = u; Error += (v.x == 1.0f && v.y == 2.0f && v.z == 3.0f) ? 0 : 1;
+ v.xz = u; Error += (v.x == 1.0f && v.y == 2.0f && v.z == 2.0f) ? 0 : 1;
+ v.yx = u; Error += (v.x == 2.0f && v.y == 1.0f && v.z == 2.0f) ? 0 : 1;
+ //v.yy = u; //Illegal
+ v.yz = u; Error += (v.x == 2.0f && v.y == 1.0f && v.z == 2.0f) ? 0 : 1;
+ v.zx = u; Error += (v.x == 2.0f && v.y == 1.0f && v.z == 1.0f) ? 0 : 1;
+ v.zy = u; Error += (v.x == 2.0f && v.y == 2.0f && v.z == 1.0f) ? 0 : 1;
+ //v.zz = u; //Illegal
+
+# endif//GLM_LANG
+
+ return Error;
+}
+
+int test_vec3_swizzle3_3()
+{
+ int Error = 0;
+
+ glm::vec3 v(1, 2, 3);
+ glm::vec3 u;
+
+# if(GLM_LANG & GLM_LANG_CXXMS_FLAG)
+ u = v; Error += (u.x == 1.0f && u.y == 2.0f && u.z == 3.0f) ? 0 : 1;
+
+ u = v.xyz; Error += (u.x == 1.0f && u.y == 2.0f && u.z == 3.0f) ? 0 : 1;
+ u = v.zyx; Error += (u.x == 3.0f && u.y == 2.0f && u.z == 1.0f) ? 0 : 1;
+ u.zyx = v; Error += (u.x == 3.0f && u.y == 2.0f && u.z == 1.0f) ? 0 : 1;
+
+ u = v.rgb; Error += (u.x == 1.0f && u.y == 2.0f && u.z == 3.0f) ? 0 : 1;
+ u = v.bgr; Error += (u.x == 3.0f && u.y == 2.0f && u.z == 1.0f) ? 0 : 1;
+ u.bgr = v; Error += (u.x == 3.0f && u.y == 2.0f && u.z == 1.0f) ? 0 : 1;
+
+ u = v.stp; Error += (u.x == 1.0f && u.y == 2.0f && u.z == 3.0f) ? 0 : 1;
+ u = v.pts; Error += (u.x == 3.0f && u.y == 2.0f && u.z == 1.0f) ? 0 : 1;
+ u.pts = v; Error += (u.x == 3.0f && u.y == 2.0f && u.z == 1.0f) ? 0 : 1;
+# endif//GLM_LANG
+
+ return Error;
+}
+
+int test_vec3_swizzle_operators()
+{
+ int Error = 0;
+
+ glm::vec3 q, u, v;
+
+ u = glm::vec3(1, 2, 3);
+ v = glm::vec3(10, 20, 30);
+
+# if(GLM_LANG & GLM_LANG_CXXMS_FLAG)
+ // Swizzle, swizzle binary operators
+ q = u.xyz + v.xyz; Error += (q == (u + v)) ? 0 : 1;
+ q = (u.zyx + v.zyx).zyx; Error += (q == (u + v)) ? 0 : 1;
+ q = (u.xyz - v.xyz); Error += (q == (u - v)) ? 0 : 1;
+ q = (u.xyz * v.xyz); Error += (q == (u * v)) ? 0 : 1;
+ q = (u.xxx * v.xxx); Error += (q == glm::vec3(u.x * v.x)) ? 0 : 1;
+ q = (u.xyz / v.xyz); Error += (q == (u / v)) ? 0 : 1;
+
+ // vec, swizzle binary operators
+ q = u + v.xyz; Error += (q == (u + v)) ? 0 : 1;
+ q = (u - v.xyz); Error += (q == (u - v)) ? 0 : 1;
+ q = (u * v.xyz); Error += (q == (u * v)) ? 0 : 1;
+ q = (u * v.xxx); Error += (q == v.x * u) ? 0 : 1;
+ q = (u / v.xyz); Error += (q == (u / v)) ? 0 : 1;
+
+ // swizzle,vec binary operators
+ q = u.xyz + v; Error += (q == (u + v)) ? 0 : 1;
+ q = (u.xyz - v); Error += (q == (u - v)) ? 0 : 1;
+ q = (u.xyz * v); Error += (q == (u * v)) ? 0 : 1;
+ q = (u.xxx * v); Error += (q == u.x * v) ? 0 : 1;
+ q = (u.xyz / v); Error += (q == (u / v)) ? 0 : 1;
+# endif//GLM_LANG
+
+ // Compile errors
+ //q = (u.yz * v.xyz);
+ //q = (u * v.xy);
+
+ return Error;
+}
+
+int test_vec3_swizzle_functions()
+{
+ int Error = 0;
+
+ // NOTE: template functions cannot pick up the implicit conversion from
+ // a swizzle to the unswizzled type, therefore the operator() must be
+ // used. E.g.:
+ //
+ // glm::dot(u.xy, v.xy); <--- Compile error
+ // glm::dot(u.xy(), v.xy()); <--- Compiles correctly
+
+ float r;
+
+ // vec2
+ glm::vec2 a(1, 2);
+ glm::vec2 b(10, 20);
+ r = glm::dot(a, b); Error += (int(r) == 50) ? 0 : 1;
+ r = glm::dot(glm::vec2(a.xy()), glm::vec2(b.xy())); Error += (int(r) == 50) ? 0 : 1;
+ r = glm::dot(glm::vec2(a.xy()), glm::vec2(b.yy())); Error += (int(r) == 60) ? 0 : 1;
+
+ // vec3
+ glm::vec3 q, u, v;
+ u = glm::vec3(1, 2, 3);
+ v = glm::vec3(10, 20, 30);
+ r = glm::dot(u, v); Error += (int(r) == 140) ? 0 : 1;
+ r = glm::dot(u.xyz(), v.zyz()); Error += (int(r) == 160) ? 0 : 1;
+ r = glm::dot(u, v.zyx()); Error += (int(r) == 100) ? 0 : 1;
+ r = glm::dot(u.xyz(), v); Error += (int(r) == 140) ? 0 : 1;
+ r = glm::dot(u.xy(), v.xy()); Error += (int(r) == 50) ? 0 : 1;
+
+ // vec4
+ glm::vec4 s, t;
+ s = glm::vec4(1, 2, 3, 4);
+ t = glm::vec4(10, 20, 30, 40);
+ r = glm::dot(s, t); Error += (int(r) == 300) ? 0 : 1;
+ r = glm::dot(s.xyzw(), t.xyzw()); Error += (int(r) == 300) ? 0 : 1;
+ r = glm::dot(s.xyz(), t.xyz()); Error += (int(r) == 140) ? 0 : 1;
+
+ return Error;
+}
+
+int test_vec3_swizzle_partial()
+{
+ int Error = 0;
+
+ glm::vec3 A(1, 2, 3);
+
+# if(GLM_LANG & GLM_LANG_CXXMS_FLAG)
+ {
+ glm::vec3 B(A.xy, 3.0f);
+ Error += A == B ? 0 : 1;
+ }
+
+ {
+ glm::vec3 B(1.0f, A.yz);
+ Error += A == B ? 0 : 1;
+ }
+
+ {
+ glm::vec3 B(A.xyz);
+ Error += A == B ? 0 : 1;
+ }
+# endif//GLM_LANG
+
+ return Error;
+}
+
+int test_operator_increment()
+{
+ int Error(0);
+
+ glm::ivec3 v0(1);
+ glm::ivec3 v1(v0);
+ glm::ivec3 v2(v0);
+ glm::ivec3 v3 = ++v1;
+ glm::ivec3 v4 = v2++;
+
+ Error += glm::all(glm::equal(v0, v4)) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, v2)) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, v3)) ? 0 : 1;
+
+ int i0(1);
+ int i1(i0);
+ int i2(i0);
+ int i3 = ++i1;
+ int i4 = i2++;
+
+ Error += i0 == i4 ? 0 : 1;
+ Error += i1 == i2 ? 0 : 1;
+ Error += i1 == i3 ? 0 : 1;
+
+ return Error;
+}
+
+int main()
+{
+ int Error = 0;
+
+ glm::vec3 v;
+ assert(v.length() == 3);
+
+ Error += test_vec3_ctor();
+ Error += test_vec3_operators();
+ Error += test_vec3_size();
+ Error += test_vec3_swizzle3_2();
+ Error += test_vec3_swizzle3_3();
+ Error += test_vec3_swizzle_partial();
+ Error += test_vec3_swizzle_operators();
+ Error += test_vec3_swizzle_functions();
+ Error += test_operator_increment();
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/core/core_type_vec4.cpp b/src/third_party/glm/test/core/core_type_vec4.cpp
new file mode 100644
index 0000000..86e302c
--- /dev/null
+++ b/src/third_party/glm/test/core/core_type_vec4.cpp
@@ -0,0 +1,559 @@
+#define GLM_FORCE_ALIGNED
+#define GLM_FORCE_SWIZZLE
+#include <glm/vector_relational.hpp>
+#include <glm/vec2.hpp>
+#include <glm/vec3.hpp>
+#include <glm/vec4.hpp>
+#include <cstdio>
+#include <ctime>
+#include <vector>
+
+template <int Value>
+struct mask
+{
+ enum{value = Value};
+};
+
+enum comp
+{
+ X,
+ Y,
+ Z,
+ W
+};
+
+//template<comp X, comp Y, comp Z, comp W>
+//__m128 swizzle(glm::vec4 const & v)
+//{
+// __m128 Src = _mm_set_ps(v.w, v.z, v.y, v.x);
+// return _mm_shuffle_ps(Src, Src, mask<(int(W) << 6) | (int(Z) << 4) | (int(Y) << 2) | (int(X) << 0)>::value);
+//}
+
+int test_vec4_ctor()
+{
+ int Error = 0;
+
+ {
+ glm::ivec4 A(1, 2, 3, 4);
+ glm::ivec4 B(A);
+ Error += glm::all(glm::equal(A, B)) ? 0 : 1;
+ }
+
+# if GLM_HAS_TRIVIAL_QUERIES
+ // Error += std::is_trivially_default_constructible<glm::vec4>::value ? 0 : 1;
+ // Error += std::is_trivially_copy_assignable<glm::vec4>::value ? 0 : 1;
+ Error += std::is_trivially_copyable<glm::vec4>::value ? 0 : 1;
+ Error += std::is_trivially_copyable<glm::dvec4>::value ? 0 : 1;
+ Error += std::is_trivially_copyable<glm::ivec4>::value ? 0 : 1;
+ Error += std::is_trivially_copyable<glm::uvec4>::value ? 0 : 1;
+
+ Error += std::is_copy_constructible<glm::vec4>::value ? 0 : 1;
+# endif
+
+#if GLM_HAS_INITIALIZER_LISTS
+ {
+ glm::vec4 a{ 0, 1, 2, 3 };
+ std::vector<glm::vec4> v = {
+ {0, 1, 2, 3},
+ {4, 5, 6, 7},
+ {8, 9, 0, 1}};
+ }
+
+ {
+ glm::dvec4 a{ 0, 1, 2, 3 };
+ std::vector<glm::dvec4> v = {
+ {0, 1, 2, 3},
+ {4, 5, 6, 7},
+ {8, 9, 0, 1}};
+ }
+#endif
+
+#if GLM_HAS_UNRESTRICTED_UNIONS && defined(GLM_FORCE_SWIZZLE)
+ {
+ glm::vec4 A = glm::vec4(1.0f, 2.0f, 3.0f, 4.0f);
+ glm::vec4 B = A.xyzw;
+ glm::vec4 C(A.xyzw);
+ glm::vec4 D(A.xyzw());
+ glm::vec4 E(A.x, A.yzw);
+ glm::vec4 F(A.x, A.yzw());
+ glm::vec4 G(A.xyz, A.w);
+ glm::vec4 H(A.xyz(), A.w);
+ glm::vec4 I(A.xy, A.zw);
+ glm::vec4 J(A.xy(), A.zw());
+ glm::vec4 K(A.x, A.y, A.zw);
+ glm::vec4 L(A.x, A.yz, A.w);
+ glm::vec4 M(A.xy, A.z, A.w);
+
+ Error += glm::all(glm::equal(A, B)) ? 0 : 1;
+ Error += glm::all(glm::equal(A, C)) ? 0 : 1;
+ Error += glm::all(glm::equal(A, D)) ? 0 : 1;
+ Error += glm::all(glm::equal(A, E)) ? 0 : 1;
+ Error += glm::all(glm::equal(A, F)) ? 0 : 1;
+ Error += glm::all(glm::equal(A, G)) ? 0 : 1;
+ Error += glm::all(glm::equal(A, H)) ? 0 : 1;
+ Error += glm::all(glm::equal(A, I)) ? 0 : 1;
+ Error += glm::all(glm::equal(A, J)) ? 0 : 1;
+ Error += glm::all(glm::equal(A, K)) ? 0 : 1;
+ Error += glm::all(glm::equal(A, L)) ? 0 : 1;
+ Error += glm::all(glm::equal(A, M)) ? 0 : 1;
+ }
+#endif// GLM_HAS_UNRESTRICTED_UNIONS && defined(GLM_FORCE_SWIZZLE)
+
+ {
+ glm::vec4 A(1);
+ glm::vec4 B(1, 1, 1, 1);
+
+ Error += A == B ? 0 : 1;
+ }
+
+ {
+ std::vector<glm::vec4> Tests;
+ Tests.push_back(glm::vec4(glm::vec2(1, 2), 3, 4));
+ Tests.push_back(glm::vec4(1, glm::vec2(2, 3), 4));
+ Tests.push_back(glm::vec4(1, 2, glm::vec2(3, 4)));
+ Tests.push_back(glm::vec4(glm::vec3(1, 2, 3), 4));
+ Tests.push_back(glm::vec4(1, glm::vec3(2, 3, 4)));
+ Tests.push_back(glm::vec4(glm::vec2(1, 2), glm::vec2(3, 4)));
+ Tests.push_back(glm::vec4(1, 2, 3, 4));
+ Tests.push_back(glm::vec4(glm::vec4(1, 2, 3, 4)));
+
+ for(std::size_t i = 0; i < Tests.size(); ++i)
+ Error += Tests[i] == glm::vec4(1, 2, 3, 4) ? 0 : 1;
+ }
+
+ return Error;
+}
+
+int test_bvec4_ctor()
+{
+ int Error = 0;
+
+ glm::bvec4 const A(true);
+ glm::bvec4 const B(true);
+ glm::bvec4 const C(false);
+ glm::bvec4 const D = A && B;
+ glm::bvec4 const E = A && C;
+ glm::bvec4 const F = A || C;
+ bool const G = A == C;
+ bool const H = A != C;
+
+ Error += D == glm::bvec4(true) ? 0 : 1;
+ Error += E == glm::bvec4(false) ? 0 : 1;
+ Error += F == glm::bvec4(true) ? 0 : 1;
+
+ return Error;
+}
+
+int test_vec4_operators()
+{
+ int Error = 0;
+
+ {
+ glm::vec4 A(1.0f);
+ glm::vec4 B(1.0f);
+ bool R = A != B;
+ bool S = A == B;
+
+ Error += (S && !R) ? 0 : 1;
+ }
+
+ {
+ glm::vec4 A(1.0f, 2.0f, 3.0f, 4.0f);
+ glm::vec4 B(4.0f, 5.0f, 6.0f, 7.0f);
+
+ glm::vec4 C = A + B;
+ Error += C == glm::vec4(5, 7, 9, 11) ? 0 : 1;
+
+ glm::vec4 D = B - A;
+ Error += D == glm::vec4(3, 3, 3, 3) ? 0 : 1;
+
+ glm::vec4 E = A * B;
+ Error += E == glm::vec4(4, 10, 18, 28) ? 0 : 1;
+
+ glm::vec4 F = B / A;
+ Error += F == glm::vec4(4, 2.5, 2, 7.0f / 4.0f) ? 0 : 1;
+
+ glm::vec4 G = A + 1.0f;
+ Error += G == glm::vec4(2, 3, 4, 5) ? 0 : 1;
+
+ glm::vec4 H = B - 1.0f;
+ Error += H == glm::vec4(3, 4, 5, 6) ? 0 : 1;
+
+ glm::vec4 I = A * 2.0f;
+ Error += I == glm::vec4(2, 4, 6, 8) ? 0 : 1;
+
+ glm::vec4 J = B / 2.0f;
+ Error += J == glm::vec4(2, 2.5, 3, 3.5) ? 0 : 1;
+
+ glm::vec4 K = 1.0f + A;
+ Error += K == glm::vec4(2, 3, 4, 5) ? 0 : 1;
+
+ glm::vec4 L = 1.0f - B;
+ Error += L == glm::vec4(-3, -4, -5, -6) ? 0 : 1;
+
+ glm::vec4 M = 2.0f * A;
+ Error += M == glm::vec4(2, 4, 6, 8) ? 0 : 1;
+
+ glm::vec4 N = 2.0f / B;
+ Error += N == glm::vec4(0.5, 2.0 / 5.0, 2.0 / 6.0, 2.0 / 7.0) ? 0 : 1;
+ }
+
+ {
+ glm::vec4 A(1.0f, 2.0f, 3.0f, 4.0f);
+ glm::vec4 B(4.0f, 5.0f, 6.0f, 7.0f);
+
+ A += B;
+ Error += A == glm::vec4(5, 7, 9, 11) ? 0 : 1;
+
+ A += 1.0f;
+ Error += A == glm::vec4(6, 8, 10, 12) ? 0 : 1;
+ }
+ {
+ glm::vec4 A(1.0f, 2.0f, 3.0f, 4.0f);
+ glm::vec4 B(4.0f, 5.0f, 6.0f, 7.0f);
+
+ B -= A;
+ Error += B == glm::vec4(3, 3, 3, 3) ? 0 : 1;
+
+ B -= 1.0f;
+ Error += B == glm::vec4(2, 2, 2, 2) ? 0 : 1;
+ }
+ {
+ glm::vec4 A(1.0f, 2.0f, 3.0f, 4.0f);
+ glm::vec4 B(4.0f, 5.0f, 6.0f, 7.0f);
+
+ A *= B;
+ Error += A == glm::vec4(4, 10, 18, 28) ? 0 : 1;
+
+ A *= 2.0f;
+ Error += A == glm::vec4(8, 20, 36, 56) ? 0 : 1;
+ }
+ {
+ glm::vec4 A(1.0f, 2.0f, 3.0f, 4.0f);
+ glm::vec4 B(4.0f, 5.0f, 6.0f, 7.0f);
+
+ B /= A;
+ Error += B == glm::vec4(4, 2.5, 2, 7.0f / 4.0f) ? 0 : 1;
+
+ B /= 2.0f;
+ Error += B == glm::vec4(2, 1.25, 1, 7.0f / 4.0f / 2.0f) ? 0 : 1;
+ }
+ {
+ glm::vec4 B(2.0f);
+
+ B /= B.y;
+ Error += B == glm::vec4(1.0f) ? 0 : 1;
+ }
+
+ {
+ glm::vec4 A(1.0f, 2.0f, 3.0f, 4.0f);
+ glm::vec4 B = -A;
+ Error += B == glm::vec4(-1.0f, -2.0f, -3.0f, -4.0f) ? 0 : 1;
+ }
+
+ {
+ glm::vec4 A(1.0f, 2.0f, 3.0f, 4.0f);
+ glm::vec4 B = --A;
+ Error += B == glm::vec4(0.0f, 1.0f, 2.0f, 3.0f) ? 0 : 1;
+ }
+
+ {
+ glm::vec4 A(1.0f, 2.0f, 3.0f, 4.0f);
+ glm::vec4 B = A--;
+ Error += B == glm::vec4(1.0f, 2.0f, 3.0f, 4.0f) ? 0 : 1;
+ Error += A == glm::vec4(0.0f, 1.0f, 2.0f, 3.0f) ? 0 : 1;
+ }
+
+ {
+ glm::vec4 A(1.0f, 2.0f, 3.0f, 4.0f);
+ glm::vec4 B = ++A;
+ Error += B == glm::vec4(2.0f, 3.0f, 4.0f, 5.0f) ? 0 : 1;
+ }
+
+ {
+ glm::vec4 A(1.0f, 2.0f, 3.0f, 4.0f);
+ glm::vec4 B = A++;
+ Error += B == glm::vec4(1.0f, 2.0f, 3.0f, 4.0f) ? 0 : 1;
+ Error += A == glm::vec4(2.0f, 3.0f, 4.0f, 5.0f) ? 0 : 1;
+ }
+
+ return Error;
+}
+
+int test_vec4_equal()
+{
+ int Error = 0;
+
+ {
+ glm::vec4 const A(1, 2, 3, 4);
+ glm::vec4 const B(1, 2, 3, 4);
+ Error += A == B ? 0 : 1;
+ Error += A != B ? 1 : 0;
+ }
+
+ {
+ glm::ivec4 const A(1, 2, 3, 4);
+ glm::ivec4 const B(1, 2, 3, 4);
+ Error += A == B ? 0 : 1;
+ Error += A != B ? 1 : 0;
+ }
+
+ return Error;
+}
+
+int test_vec4_size()
+{
+ int Error = 0;
+
+ Error += sizeof(glm::vec4) == sizeof(glm::lowp_vec4) ? 0 : 1;
+ Error += sizeof(glm::vec4) == sizeof(glm::mediump_vec4) ? 0 : 1;
+ Error += sizeof(glm::vec4) == sizeof(glm::highp_vec4) ? 0 : 1;
+ Error += 16 == sizeof(glm::mediump_vec4) ? 0 : 1;
+ Error += sizeof(glm::dvec4) == sizeof(glm::lowp_dvec4) ? 0 : 1;
+ Error += sizeof(glm::dvec4) == sizeof(glm::mediump_dvec4) ? 0 : 1;
+ Error += sizeof(glm::dvec4) == sizeof(glm::highp_dvec4) ? 0 : 1;
+ Error += 32 == sizeof(glm::highp_dvec4) ? 0 : 1;
+ Error += glm::vec4().length() == 4 ? 0 : 1;
+ Error += glm::dvec4().length() == 4 ? 0 : 1;
+
+ return Error;
+}
+
+int test_vec4_swizzle_partial()
+{
+ int Error = 0;
+
+ glm::vec4 A(1, 2, 3, 4);
+
+# if GLM_HAS_UNRESTRICTED_UNIONS && defined(GLM_SWIZZLE_RELAX)
+ {
+ glm::vec4 B(A.xy, A.zw);
+ Error += A == B ? 0 : 1;
+ }
+ {
+ glm::vec4 B(A.xy, 3.0f, 4.0f);
+ Error += A == B ? 0 : 1;
+ }
+ {
+ glm::vec4 B(1.0f, A.yz, 4.0f);
+ Error += A == B ? 0 : 1;
+ }
+ {
+ glm::vec4 B(1.0f, 2.0f, A.zw);
+ Error += A == B ? 0 : 1;
+ }
+
+ {
+ glm::vec4 B(A.xyz, 4.0f);
+ Error += A == B ? 0 : 1;
+ }
+ {
+ glm::vec4 B(1.0f, A.yzw);
+ Error += A == B ? 0 : 1;
+ }
+# endif
+
+ return Error;
+}
+
+int test_operator_increment()
+{
+ int Error(0);
+
+ glm::ivec4 v0(1);
+ glm::ivec4 v1(v0);
+ glm::ivec4 v2(v0);
+ glm::ivec4 v3 = ++v1;
+ glm::ivec4 v4 = v2++;
+
+ Error += glm::all(glm::equal(v0, v4)) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, v2)) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, v3)) ? 0 : 1;
+
+ int i0(1);
+ int i1(i0);
+ int i2(i0);
+ int i3 = ++i1;
+ int i4 = i2++;
+
+ Error += i0 == i4 ? 0 : 1;
+ Error += i1 == i2 ? 0 : 1;
+ Error += i1 == i3 ? 0 : 1;
+
+ return Error;
+}
+
+struct AoS
+{
+ glm::vec4 A;
+ glm::vec3 B;
+ glm::vec3 C;
+ glm::vec2 D;
+};
+
+int test_vec4_perf_AoS(std::size_t Size)
+{
+ int Error(0);
+
+ std::vector<AoS> In;
+ std::vector<AoS> Out;
+ In.resize(Size);
+ Out.resize(Size);
+
+ std::clock_t StartTime = std::clock();
+
+ for(std::size_t i = 0; i < In.size(); ++i)
+ Out[i] = In[i];
+
+ std::clock_t EndTime = std::clock();
+
+ std::printf("AoS: %ld\n", EndTime - StartTime);
+
+ return Error;
+}
+
+int test_vec4_perf_SoA(std::size_t Size)
+{
+ int Error(0);
+
+ std::vector<glm::vec4> InA;
+ std::vector<glm::vec3> InB;
+ std::vector<glm::vec3> InC;
+ std::vector<glm::vec2> InD;
+ std::vector<glm::vec4> OutA;
+ std::vector<glm::vec3> OutB;
+ std::vector<glm::vec3> OutC;
+ std::vector<glm::vec2> OutD;
+
+ InA.resize(Size);
+ InB.resize(Size);
+ InC.resize(Size);
+ InD.resize(Size);
+ OutA.resize(Size);
+ OutB.resize(Size);
+ OutC.resize(Size);
+ OutD.resize(Size);
+
+ std::clock_t StartTime = std::clock();
+
+ for(std::size_t i = 0; i < InA.size(); ++i)
+ {
+ OutA[i] = InA[i];
+ OutB[i] = InB[i];
+ OutC[i] = InC[i];
+ OutD[i] = InD[i];
+ }
+
+ std::clock_t EndTime = std::clock();
+
+ std::printf("SoA: %ld\n", EndTime - StartTime);
+
+ return Error;
+}
+
+namespace heap
+{
+ class A
+ {
+ float f;
+ };
+
+ class B : public A
+ {
+ float g;
+ glm::vec4 v;
+ };
+
+ int test()
+ {
+ int Error(0);
+
+ A* p = new B;
+ delete p;
+
+ return Error;
+ }
+}//namespace heap
+
+int test_vec4_simd()
+{
+ int Error = 0;
+
+ glm::vec4 const a(std::clock(), std::clock(), std::clock(), std::clock());
+ glm::vec4 const b(std::clock(), std::clock(), std::clock(), std::clock());
+
+ glm::vec4 const c(b * a);
+ glm::vec4 const d(a + c);
+
+ Error += glm::all(glm::greaterThanEqual(d, glm::vec4(0))) ? 0 : 1;
+
+ return Error;
+}
+
+int main()
+{
+ int Error(0);
+
+/*
+ {
+ glm::ivec4 const a1(2);
+ glm::ivec4 const b1 = a1 >> 1;
+
+ __m128i const e1 = _mm_set1_epi32(2);
+ __m128i const f1 = _mm_srli_epi32(e1, 1);
+
+ glm::ivec4 const g1 = *reinterpret_cast<glm::ivec4 const* const>(&f1);
+
+ glm::ivec4 const a2(-2);
+ glm::ivec4 const b2 = a2 >> 1;
+
+ __m128i const e2 = _mm_set1_epi32(-1);
+ __m128i const f2 = _mm_srli_epi32(e2, 1);
+
+ glm::ivec4 const g2 = *reinterpret_cast<glm::ivec4 const* const>(&f2);
+
+ printf("GNI\n");
+ }
+
+ {
+ glm::uvec4 const a1(2);
+ glm::uvec4 const b1 = a1 >> 1u;
+
+ __m128i const e1 = _mm_set1_epi32(2);
+ __m128i const f1 = _mm_srli_epi32(e1, 1);
+
+ glm::uvec4 const g1 = *reinterpret_cast<glm::uvec4 const* const>(&f1);
+
+ glm::uvec4 const a2(-1);
+ glm::uvec4 const b2 = a2 >> 1u;
+
+ __m128i const e2 = _mm_set1_epi32(-1);
+ __m128i const f2 = _mm_srli_epi32(e2, 1);
+
+ glm::uvec4 const g2 = *reinterpret_cast<glm::uvec4 const* const>(&f2);
+
+ printf("GNI\n");
+ }
+*/
+ glm::vec4 v;
+ assert(v.length() == 4);
+
+# ifdef NDEBUG
+ std::size_t const Size(1000000);
+ Error += test_vec4_perf_AoS(Size);
+ Error += test_vec4_perf_SoA(Size);
+# endif//NDEBUG
+
+ Error += test_vec4_ctor();
+ Error += test_bvec4_ctor();
+ Error += test_vec4_size();
+ Error += test_vec4_operators();
+ Error += test_vec4_equal();
+ Error += test_vec4_swizzle_partial();
+ Error += test_vec4_simd();
+ Error += test_operator_increment();
+ Error += heap::test();
+
+ return Error;
+}
+
diff --git a/src/third_party/glm/test/external/gli/CMakeLists.txt b/src/third_party/glm/test/external/gli/CMakeLists.txt
new file mode 100644
index 0000000..6b91c28
--- /dev/null
+++ b/src/third_party/glm/test/external/gli/CMakeLists.txt
@@ -0,0 +1,27 @@
+set(NAME gli)
+
+file(GLOB ROOT_SOURCE *.cpp)
+file(GLOB ROOT_INLINE *.inl)
+file(GLOB ROOT_HEADER *.hpp)
+
+file(GLOB_RECURSE CORE_SOURCE ./core/*.cpp)
+file(GLOB_RECURSE CORE_INLINE ./core/*.inl)
+file(GLOB_RECURSE CORE_HEADER ./core/*.hpp)
+
+file(GLOB_RECURSE GTX_SOURCE ./gtx/*.cpp)
+file(GLOB_RECURSE GTX_INLINE ./gtx/*.inl)
+file(GLOB_RECURSE GTX_HEADER ./gtx/*.hpp)
+
+source_group("Core Files" FILES ${CORE_SOURCE})
+source_group("Core Files" FILES ${CORE_INLINE})
+source_group("Core Files" FILES ${CORE_HEADER})
+source_group("GTX Files" FILES ${GTX_SOURCE})
+source_group("GTX Files" FILES ${GTX_INLINE})
+source_group("GTX Files" FILES ${GTX_HEADER})
+
+include_directories(${CMAKE_CURRENT_SOURCE_DIR}/..)
+
+add_executable(${NAME}
+ ${ROOT_SOURCE} ${ROOT_INLINE} ${ROOT_HEADER}
+ ${CORE_SOURCE} ${CORE_INLINE} ${CORE_HEADER}
+ ${GTX_SOURCE} ${GTX_INLINE} ${GTX_HEADER} )
diff --git a/src/third_party/glm/test/external/gli/core/dummy.cpp b/src/third_party/glm/test/external/gli/core/dummy.cpp
new file mode 100644
index 0000000..0395e23
--- /dev/null
+++ b/src/third_party/glm/test/external/gli/core/dummy.cpp
@@ -0,0 +1,4 @@
+int main()
+{
+
+}
diff --git a/src/third_party/glm/test/external/gli/core/generate_mipmaps.hpp b/src/third_party/glm/test/external/gli/core/generate_mipmaps.hpp
new file mode 100644
index 0000000..4340936
--- /dev/null
+++ b/src/third_party/glm/test/external/gli/core/generate_mipmaps.hpp
@@ -0,0 +1,25 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Image Copyright (c) 2008 - 2011 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2010-09-27
+// Updated : 2010-09-27
+// Licence : This source is under MIT License
+// File : gli/core/generate_mipmaps.hpp
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLI_GENERATE_MIPMAPS_INCLUDED
+#define GLI_GENERATE_MIPMAPS_INCLUDED
+
+#include "texture2d.hpp"
+
+namespace gli
+{
+ texture2D generateMipmaps(
+ texture2D const & Texture,
+ texture2D::level_type const & BaseLevel);
+
+}//namespace gli
+
+#include "generate_mipmaps.inl"
+
+#endif//GLI_GENERATE_MIPMAPS_INCLUDED
diff --git a/src/third_party/glm/test/external/gli/core/generate_mipmaps.inl b/src/third_party/glm/test/external/gli/core/generate_mipmaps.inl
new file mode 100644
index 0000000..bbc6e4c
--- /dev/null
+++ b/src/third_party/glm/test/external/gli/core/generate_mipmaps.inl
@@ -0,0 +1,69 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Image Copyright (c) 2008 - 2011 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2010-09-27
+// Updated : 2010-09-27
+// Licence : This source is under MIT License
+// File : gli/core/generate_mipmaps.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace gli
+{
+/*
+ inline texture2D generateMipmaps
+ (
+ texture2D const & Image,
+ texture2D::level_type const & BaseLevel
+ )
+ {
+ assert(BaseLevel < Image.levels());
+ texture2D::format_type Format = Image[BaseLevel].format();
+
+ assert(Format == R8U || Format == RG8U || Format == RGB8U || Format == RGBA8U);
+ texture2D::level_type Levels = std::size_t(glm::log2(float(glm::compMax(Image[0].dimensions())))) + 1;
+
+ texture2D Result(Levels);
+ for(texture2D::level_type Level = 0; Level <= BaseLevel; ++Level)
+ Result[Level] = detail::duplicate(Image[Level]);
+
+ for(texture2D::level_type Level = BaseLevel; Level < Levels - 1; ++Level)
+ {
+ std::size_t BaseWidth = Result[Level + 0].dimensions().x;
+ texture2D::value_type * DataSrc = Result[Level + 0].data();
+
+ texture2D::dimensions_type LevelDimensions = Result[Level + 0].dimensions() >> texture2D::dimensions_type(1);
+ LevelDimensions = glm::max(LevelDimensions, texture2D::dimensions_type(1));
+ texture2D::size_type Components = Result[Level + 0].components();
+
+ texture2D::data_type DataDst(glm::compMul(LevelDimensions) * Components);
+
+ for(std::size_t j = 0; j < LevelDimensions.y; ++j)
+ for(std::size_t i = 0; i < LevelDimensions.x; ++i)
+ for(std::size_t c = 0; c < Components; ++c)
+ {
+ std::size_t x = (i << 1);
+ std::size_t y = (j << 1);
+
+ std::size_t Index00 = ((x + 0) + (y + 0) * BaseWidth) * Components + c;
+ std::size_t Index01 = ((x + 0) + (y + 1) * BaseWidth) * Components + c;
+ std::size_t Index11 = ((x + 1) + (y + 1) * BaseWidth) * Components + c;
+ std::size_t Index10 = ((x + 1) + (y + 0) * BaseWidth) * Components + c;
+
+ glm::u32 Data00 = reinterpret_cast<texture2D::value_type*>(DataSrc)[Index00];
+ glm::u32 Data01 = reinterpret_cast<texture2D::value_type*>(DataSrc)[Index01];
+ glm::u32 Data11 = reinterpret_cast<texture2D::value_type*>(DataSrc)[Index11];
+ glm::u32 Data10 = reinterpret_cast<texture2D::value_type*>(DataSrc)[Index10];
+
+ texture2D::value_type Result = (Data00 + Data01 + Data11 + Data10) >> 2;
+ texture2D::value_type * Data = reinterpret_cast<texture2D::value_type*>(DataDst.data());
+
+ *(Data + ((i + j * LevelDimensions.x) * Components + c)) = Result;
+ }
+
+ Result[Level + 1] = image2D(LevelDimensions, Format, DataDst);
+ }
+
+ return Result;
+ }
+*/
+}//namespace gli
diff --git a/src/third_party/glm/test/external/gli/core/image2d.hpp b/src/third_party/glm/test/external/gli/core/image2d.hpp
new file mode 100644
index 0000000..918514d
--- /dev/null
+++ b/src/third_party/glm/test/external/gli/core/image2d.hpp
@@ -0,0 +1,169 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Image Copyright (c) 2008 - 2011 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2011-04-05
+// Updated : 2011-04-05
+// Licence : This source is under MIT License
+// File : gli/core/image2d.hpp
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLI_CORE_IMAGE2D_INCLUDED
+#define GLI_CORE_IMAGE2D_INCLUDED
+
+// STD
+#include <vector>
+#include <cassert>
+#include <cmath>
+#include <cstring>
+
+// GLM
+#include <glm/glm.hpp>
+#include <glm/gtx/number_precision.hpp>
+#include <glm/gtx/raw_data.hpp>
+#include <glm/gtx/gradient_paint.hpp>
+#include <glm/gtx/component_wise.hpp>
+
+namespace gli
+{
+ enum format
+ {
+ FORMAT_NULL,
+
+ // Unsigned integer formats
+ R8U,
+ RG8U,
+ RGB8U,
+ RGBA8U,
+
+ R16U,
+ RG16U,
+ RGB16U,
+ RGBA16U,
+
+ R32U,
+ RG32U,
+ RGB32U,
+ RGBA32U,
+
+ // Signed integer formats
+ R8I,
+ RG8I,
+ RGB8I,
+ RGBA8I,
+
+ R16I,
+ RG16I,
+ RGB16I,
+ RGBA16I,
+
+ R32I,
+ RG32I,
+ RGB32I,
+ RGBA32I,
+
+ // Floating formats
+ R16F,
+ RG16F,
+ RGB16F,
+ RGBA16F,
+
+ R32F,
+ RG32F,
+ RGB32F,
+ RGBA32F,
+
+ // Packed formats
+ RGBE8,
+ RGB9E5,
+ RG11B10F,
+ R5G6B5,
+ RGBA4,
+ RGB10A2,
+
+ // Depth formats
+ D16,
+ D24X8,
+ D24S8,
+ D32F,
+ D32FS8X24,
+
+ // Compressed formats
+ DXT1,
+ DXT3,
+ DXT5,
+ ATI1N_UNORM,
+ ATI1N_SNORM,
+ ATI2N_UNORM,
+ ATI2N_SNORM,
+ BP_UF16,
+ BP_SF16,
+ BP,
+
+ FORMAT_MAX
+ };
+
+ enum size_type
+ {
+ LINEAR_SIZE,
+ BLOCK_SIZE,
+ BIT_PER_PIXEL,
+ COMPONENT
+ };
+
+ class image2D
+ {
+ public:
+ typedef glm::uvec2 dimensions_type;
+ typedef glm::vec2 texcoord_type;
+ typedef glm::uint32 size_type;
+ typedef glm::byte value_type;
+ typedef gli::format format_type;
+ typedef std::vector<value_type> data_type;
+
+ public:
+ image2D();
+ image2D(
+ image2D const & Image);
+
+ explicit image2D(
+ dimensions_type const & Dimensions,
+ format_type const & Format);
+
+ template <typename genType>
+ explicit image2D(
+ dimensions_type const & Dimensions,
+ format_type const & Format,
+ genType const & Value);
+
+ explicit image2D(
+ dimensions_type const & Dimensions,
+ format_type const & Format,
+ std::vector<value_type> const & Data);
+
+ ~image2D();
+
+ template <typename genType>
+ void setPixel(
+ dimensions_type const & TexelCoord,
+ genType const & TexelData);
+
+ size_type value_size() const;
+ size_type capacity() const;
+ dimensions_type dimensions() const;
+ size_type components() const;
+ format_type format() const;
+
+ value_type * data();
+ value_type const * const data() const;
+
+ private:
+ data_type Data;
+ dimensions_type Dimensions;
+ format_type Format;
+ };
+
+}//namespace gli
+
+#include "image2d.inl"
+
+#endif//GLI_CORE_IMAGE2D_INCLUDED
diff --git a/src/third_party/glm/test/external/gli/core/image2d.inl b/src/third_party/glm/test/external/gli/core/image2d.inl
new file mode 100644
index 0000000..3781be8
--- /dev/null
+++ b/src/third_party/glm/test/external/gli/core/image2d.inl
@@ -0,0 +1,229 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Image Copyright (c) 2008 - 2011 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2011-04-05
+// Updated : 2011-04-05
+// Licence : This source is under MIT License
+// File : gli/core/image2d.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace gli
+{
+ namespace detail
+ {
+ struct format_desc
+ {
+ image2D::size_type BlockSize;
+ image2D::size_type BBP;
+ image2D::size_type Component;
+ };
+
+ inline format_desc getFormatInfo(format const & Format)
+ {
+ format_desc Desc[FORMAT_MAX] =
+ {
+ { 0, 0, 0}, //FORMAT_NULL
+
+ // Unsigned integer formats
+ { 1, 8, 1}, //R8U,
+ { 2, 16, 2}, //RG8U,
+ { 3, 24, 3}, //RGB8U,
+ { 4, 32, 4}, //RGBA8U,
+
+ { 2, 16, 1}, //R16U,
+ { 4, 32, 2}, //RG16U,
+ { 6, 48, 3}, //RGB16U,
+ { 8, 64, 4}, //RGBA16U,
+
+ { 4, 32, 1}, //R32U,
+ { 8, 64, 2}, //RG32U,
+ { 12, 96, 3}, //RGB32U,
+ { 16, 128, 4}, //RGBA32U,
+
+ //// Signed integer formats
+ { 4, 32, 1}, //R8I,
+ { 8, 64, 2}, //RG8I,
+ { 12, 96, 3}, //RGB8I,
+ { 16, 128, 4}, //RGBA8I,
+
+ { 2, 16, 1}, //R16I,
+ { 4, 32, 2}, //RG16I,
+ { 6, 48, 3}, //RGB16I,
+ { 8, 64, 4}, //RGBA16I,
+
+ { 4, 32, 1}, //R32I,
+ { 8, 64, 2}, //RG32I,
+ { 12, 96, 3}, //RGB32I,
+ { 16, 128, 4}, //RGBA32I,
+
+ //// Floating formats
+ { 2, 16, 1}, //R16F,
+ { 4, 32, 2}, //RG16F,
+ { 6, 48, 3}, //RGB16F,
+ { 8, 64, 4}, //RGBA16F,
+
+ { 4, 32, 1}, //R32F,
+ { 8, 64, 2}, //RG32F,
+ { 12, 96, 3}, //RGB32F,
+ { 16, 128, 4}, //RGBA32F,
+
+ //// Packed formats
+ { 4, 32, 3}, //RGBE8,
+ { 4, 32, 3}, //RGB9E5,
+ { 4, 32, 3}, //RG11B10F,
+ { 2, 16, 3}, //R5G6B5,
+ { 2, 16, 4}, //RGBA4,
+ { 4, 32, 3}, //RGB10A2,
+
+ //// Depth formats
+ { 2, 16, 1}, //D16,
+ { 4, 32, 1}, //D24X8,
+ { 4, 32, 2}, //D24S8,
+ { 4, 32, 1}, //D32F,
+ { 8, 64, 2}, //D32FS8X24,
+
+ //// Compressed formats
+ { 8, 4, 4}, //DXT1,
+ { 16, 8, 4}, //DXT3,
+ { 16, 8, 4}, //DXT5,
+ { 8, 4, 1}, //ATI1N_UNORM,
+ { 8, 4, 1}, //ATI1N_SNORM,
+ { 16, 8, 2}, //ATI2N_UNORM,
+ { 16, 8, 2}, //ATI2N_SNORM,
+ { 16, 8, 3}, //BP_UF16,
+ { 16, 8, 3}, //BP_SF16,
+ { 16, 8, 4}, //BP,
+ };
+
+ return Desc[Format];
+ }
+
+ inline image2D::size_type sizeBlock
+ (
+ format const & Format
+ )
+ {
+ return getFormatInfo(Format).BlockSize;
+ }
+
+ inline image2D::size_type sizeBitPerPixel
+ (
+ format const & Format
+ )
+ {
+ return getFormatInfo(Format).BBP;
+ }
+
+ inline image2D::size_type sizeComponent
+ (
+ format const & Format
+ )
+ {
+ return getFormatInfo(Format).Component;
+ }
+
+ inline image2D::size_type sizeLinear
+ (
+ image2D const & Image
+ )
+ {
+ image2D::dimensions_type Dimension = Image.dimensions();
+ Dimension = glm::max(Dimension, image2D::dimensions_type(1));
+
+ image2D::size_type BlockSize = sizeBlock(Image.format());
+ image2D::size_type BPP = sizeBitPerPixel(Image.format());
+ image2D::size_type BlockCount = 0;
+ if((BlockSize << 3) == BPP)
+ BlockCount = Dimension.x * Dimension.y;
+ else
+ BlockCount = ((Dimension.x + 3) >> 2) * ((Dimension.y + 3) >> 2);
+
+ return BlockCount * BlockSize;
+ }
+ }//namespace detail
+
+ inline image2D::image2D() :
+ Data(0),
+ Dimensions(0),
+ Format(FORMAT_NULL)
+ {}
+
+ inline image2D::image2D
+ (
+ image2D const & Image
+ ) :
+ Data(Image.Data),
+ Dimensions(Image.Dimensions),
+ Format(Image.Format)
+ {}
+
+ inline image2D::image2D
+ (
+ dimensions_type const & Dimensions,
+ format_type const & Format
+ ) :
+ Data((glm::compMul(Dimensions) * detail::sizeBitPerPixel(Format)) >> 3),
+ Dimensions(Dimensions),
+ Format(Format)
+ {}
+
+ inline image2D::image2D
+ (
+ dimensions_type const & Dimensions,
+ format_type const & Format,
+ std::vector<value_type> const & Data
+ ) :
+ Data(Data),
+ Dimensions(Dimensions),
+ Format(Format)
+ {}
+
+ inline image2D::~image2D()
+ {}
+
+ template <typename genType>
+ inline void image2D::setPixel
+ (
+ dimensions_type const & TexelCoord,
+ genType const & TexelData
+ )
+ {
+ size_type Index = this->dimensions().x * sizeof(genType) * TexelCoord.y + sizeof(genType) * TexelCoord.x;
+ memcpy(this->data() + Index, &TexelData[0], sizeof(genType));
+ }
+
+ inline image2D::size_type image2D::value_size() const
+ {
+ return detail::sizeBitPerPixel(this->format());
+ }
+
+ inline image2D::size_type image2D::capacity() const
+ {
+ return detail::sizeLinear(*this);
+ }
+
+ inline image2D::dimensions_type image2D::dimensions() const
+ {
+ return this->Dimensions;
+ }
+
+ inline image2D::size_type image2D::components() const
+ {
+ return detail::sizeComponent(this->format());
+ }
+
+ inline image2D::format_type image2D::format() const
+ {
+ return this->Format;
+ }
+
+ inline image2D::value_type * image2D::data()
+ {
+ return &this->Data[0];
+ }
+
+ inline image2D::value_type const * const image2D::data() const
+ {
+ return &this->Data[0];
+ }
+}//namespace gli
diff --git a/src/third_party/glm/test/external/gli/core/operation.hpp b/src/third_party/glm/test/external/gli/core/operation.hpp
new file mode 100644
index 0000000..c23c29d
--- /dev/null
+++ b/src/third_party/glm/test/external/gli/core/operation.hpp
@@ -0,0 +1,82 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Image Copyright (c) 2008 - 2011 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2008-12-19
+// Updated : 2010-01-09
+// Licence : This source is under MIT License
+// File : gli/operation.hpp
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLI_OPERATION_INCLUDED
+#define GLI_OPERATION_INCLUDED
+
+#include "texture2d.hpp"
+
+namespace gli
+{
+ texture2D duplicate(texture2D const & Texture);
+ texture2D flip(texture2D const & Texture);
+ texture2D mirror(texture2D const & Texture);
+ texture2D swizzle(
+ texture2D const & Texture,
+ glm::uvec4 const & Channel);
+ texture2D crop(
+ texture2D const & Texture,
+ texture2D::dimensions_type const & Position,
+ texture2D::dimensions_type const & Size);
+
+ image2D crop(
+ image2D const & Image,
+ texture2D::dimensions_type const & Position,
+ texture2D::dimensions_type const & Size);
+
+ image2D copy(
+ image2D const & SrcImage,
+ image2D::dimensions_type const & SrcPosition,
+ image2D::dimensions_type const & SrcSize,
+ image2D & DstImage,
+ image2D::dimensions_type const & DstPosition);
+
+ //image operator+(image const & MipmapA, image const & MipmapB);
+ //image operator-(image const & MipmapA, image const & MipmapB);
+ //image operator*(image const & MipmapA, image const & MipmapB);
+ //image operator/(image const & MipmapA, image const & MipmapB);
+
+ //namespace wip
+ //{
+ // template <typename GENTYPE, template <typename> class SURFACE>
+ // GENTYPE fetch(SURFACE<GENTYPE> const & Image)
+ // {
+ // return GENTYPE();
+ // }
+
+ // template
+ // <
+ // typename GENTYPE,
+ // template
+ // <
+ // typename
+ // >
+ // class SURFACE,
+ // template
+ // <
+ // typename,
+ // template
+ // <
+ // typename
+ // >
+ // class
+ // >
+ // class IMAGE
+ // >
+ // GENTYPE fetch(IMAGE<GENTYPE, SURFACE> const & Image)
+ // {
+ // return GENTYPE();
+ // }
+ //}//namespace wip
+
+}//namespace gli
+
+#include "operation.inl"
+
+#endif//GLI_OPERATION_INCLUDED
diff --git a/src/third_party/glm/test/external/gli/core/operation.inl b/src/third_party/glm/test/external/gli/core/operation.inl
new file mode 100644
index 0000000..ef3394e
--- /dev/null
+++ b/src/third_party/glm/test/external/gli/core/operation.inl
@@ -0,0 +1,233 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Image Copyright (c) 2008 - 2011 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2008-12-19
+// Updated : 2010-09-08
+// Licence : This source is under MIT License
+// File : gli/core/operation.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+#include <cstring>
+
+namespace gli
+{
+ namespace detail
+ {
+ inline image2D duplicate(image2D const & Mipmap2D)
+ {
+ image2D Result(Mipmap2D.dimensions(), Mipmap2D.format());
+ memcpy(Result.data(), Mipmap2D.data(), Mipmap2D.capacity());
+ return Result;
+ }
+
+ inline image2D flip(image2D const & Mipmap2D)
+ {
+ image2D Result(Mipmap2D.dimensions(), Mipmap2D.format());
+
+ std::size_t ValueSize = Result.value_size();
+ glm::byte * DstPtr = Result.data();
+ glm::byte const * const SrcPtr = Mipmap2D.data();
+
+ for(std::size_t j = 0; j < Result.dimensions().y; ++j)
+ for(std::size_t i = 0; i < Result.dimensions().x; ++i)
+ {
+ std::size_t DstIndex = (i + j * Result.dimensions().y) * ValueSize;
+ std::size_t SrcIndex = (i + (Result.dimensions().y - j) * Result.dimensions().x) * ValueSize;
+ memcpy(DstPtr + DstIndex, SrcPtr + SrcIndex, ValueSize);
+ }
+
+ return Result;
+ }
+
+ inline image2D mirror(image2D const & Mipmap2D)
+ {
+ image2D Result(Mipmap2D.dimensions(), Mipmap2D.format());
+
+ std::size_t ValueSize = Mipmap2D.value_size();
+ glm::byte * DstPtr = Result.data();
+ glm::byte const * const SrcPtr = Mipmap2D.data();
+
+ for(std::size_t j = 0; j < Result.dimensions().y; ++j)
+ for(std::size_t i = 0; i < Result.dimensions().x; ++i)
+ {
+ std::size_t DstIndex = (i + j * Result.dimensions().x) * ValueSize;
+ std::size_t SrcIndex = ((Result.dimensions().x - i) + j * Result.dimensions().x) * ValueSize;
+ memcpy(DstPtr + DstIndex, SrcPtr + SrcIndex, ValueSize);
+ }
+
+ return Result;
+ }
+
+ inline image2D swizzle
+ (
+ image2D const & Mipmap,
+ glm::uvec4 const & Channel
+ )
+ {
+ image2D Result = detail::duplicate(Mipmap);
+
+ glm::byte * DataDst = Result.data();
+ glm::byte const * const DataSrc = Mipmap.data();
+
+ gli::texture2D::size_type CompSize = Mipmap.value_size() / Mipmap.components();
+ gli::texture2D::size_type TexelCount = Mipmap.capacity() / Mipmap.value_size();
+
+ for(gli::texture2D::size_type t = 0; t < TexelCount; ++t)
+ for(gli::texture2D::size_type c = 0; c < Mipmap.components(); ++c)
+ {
+ gli::texture2D::size_type IndexSrc = t * Mipmap.components() + Channel[static_cast<int>(c)];
+ gli::texture2D::size_type IndexDst = t * Mipmap.components() + c;
+
+ memcpy(DataDst + IndexDst, DataSrc + IndexSrc, CompSize);
+ }
+
+ return Result;
+ }
+
+ inline image2D crop
+ (
+ image2D const & Image,
+ image2D::dimensions_type const & Position,
+ image2D::dimensions_type const & Size
+ )
+ {
+ assert((Position.x + Size.x) <= Image.dimensions().x && (Position.y + Size.y) <= Image.dimensions().y);
+
+ image2D Result(Size, Image.format());
+
+ glm::byte* DstData = Result.data();
+ glm::byte const * const SrcData = Image.data();
+
+ for(std::size_t j = 0; j < Size.y; ++j)
+ {
+ std::size_t DstIndex = 0 + (0 + j) * Size.x * Image.value_size();
+ std::size_t SrcIndex = Position.x * Image.value_size() + (Position.y + j) * Image.dimensions().x * Image.value_size();
+ memcpy(DstData + DstIndex, SrcData + SrcIndex, Image.value_size() * Size.x);
+ }
+
+ return Result;
+ }
+
+ inline image2D copy
+ (
+ image2D const & SrcMipmap,
+ image2D::dimensions_type const & SrcPosition,
+ image2D::dimensions_type const & SrcSize,
+ image2D & DstMipmap,
+ image2D::dimensions_type const & DstPosition
+ )
+ {
+ assert((SrcPosition.x + SrcSize.x) <= SrcMipmap.dimensions().x && (SrcPosition.y + SrcSize.y) <= SrcMipmap.dimensions().y);
+ assert(SrcMipmap.format() == DstMipmap.format());
+
+ glm::byte * DstData = DstMipmap.data();
+ glm::byte const * const SrcData = SrcMipmap.data();
+
+ std::size_t SizeX = glm::min(std::size_t(SrcSize.x + SrcPosition.x), std::size_t(DstMipmap.dimensions().x + DstPosition.x));
+ std::size_t SizeY = glm::min(std::size_t(SrcSize.y + SrcPosition.y), std::size_t(DstMipmap.dimensions().y + DstPosition.y));
+
+ for(std::size_t j = 0; j < SizeY; ++j)
+ {
+ std::size_t DstIndex = DstPosition.x * DstMipmap.value_size() + (DstPosition.y + j) * DstMipmap.dimensions().x * DstMipmap.value_size();
+ std::size_t SrcIndex = SrcPosition.x * SrcMipmap.value_size() + (SrcPosition.y + j) * SrcMipmap.dimensions().x * SrcMipmap.value_size();
+ memcpy(DstData + DstIndex, SrcData + SrcIndex, SrcMipmap.value_size() * SizeX);
+ }
+
+ return DstMipmap;
+ }
+
+ }//namespace detail
+
+ inline texture2D duplicate(texture2D const & Texture2D)
+ {
+ texture2D Result(Texture2D.levels());
+ for(texture2D::level_type Level = 0; Level < Texture2D.levels(); ++Level)
+ Result[Level] = detail::duplicate(Texture2D[Level]);
+ return Result;
+ }
+
+ inline texture2D flip(texture2D const & Texture2D)
+ {
+ texture2D Result(Texture2D.levels());
+ for(texture2D::level_type Level = 0; Level < Texture2D.levels(); ++Level)
+ Result[Level] = detail::flip(Texture2D[Level]);
+ return Result;
+ }
+
+ inline texture2D mirror(texture2D const & Texture2D)
+ {
+ texture2D Result(Texture2D.levels());
+ for(texture2D::level_type Level = 0; Level < Texture2D.levels(); ++Level)
+ Result[Level] = detail::mirror(Texture2D[Level]);
+ return Result;
+ }
+
+ inline texture2D crop
+ (
+ texture2D const & Texture2D,
+ texture2D::dimensions_type const & Position,
+ texture2D::dimensions_type const & Size
+ )
+ {
+ texture2D Result(Texture2D.levels());
+ for(texture2D::level_type Level = 0; Level < Texture2D.levels(); ++Level)
+ Result[Level] = detail::crop(
+ Texture2D[Level],
+ Position >> texture2D::dimensions_type(Level),
+ Size >> texture2D::dimensions_type(Level));
+ return Result;
+ }
+
+ inline texture2D swizzle
+ (
+ texture2D const & Texture2D,
+ glm::uvec4 const & Channel
+ )
+ {
+ texture2D Result(Texture2D.levels());
+ for(texture2D::level_type Level = 0; Level < Texture2D.levels(); ++Level)
+ Result[Level] = detail::swizzle(Texture2D[Level], Channel);
+ return Result;
+ }
+
+ inline texture2D copy
+ (
+ texture2D const & SrcImage,
+ texture2D::level_type const & SrcLevel,
+ texture2D::dimensions_type const & SrcPosition,
+ texture2D::dimensions_type const & SrcDimensions,
+ texture2D & DstMipmap,
+ texture2D::level_type const & DstLevel,
+ texture2D::dimensions_type const & DstDimensions
+ )
+ {
+ detail::copy(
+ SrcImage[SrcLevel],
+ SrcPosition,
+ SrcDimensions,
+ DstMipmap[DstLevel],
+ DstDimensions);
+ return DstMipmap;
+ }
+
+ //inline image operator+(image const & MipmapA, image const & MipmapB)
+ //{
+ //
+ //}
+
+ //inline image operator-(image const & MipmapA, image const & MipmapB)
+ //{
+ //
+ //}
+
+ //inline image operator*(image const & MipmapA, image const & MipmapB)
+ //{
+ //
+ //}
+
+ //inline image operator/(image const & MipmapA, image const & MipmapB)
+ //{
+ //
+ //}
+
+}//namespace gli
diff --git a/src/third_party/glm/test/external/gli/core/operator.hpp b/src/third_party/glm/test/external/gli/core/operator.hpp
new file mode 100644
index 0000000..46f2732
--- /dev/null
+++ b/src/third_party/glm/test/external/gli/core/operator.hpp
@@ -0,0 +1,28 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Image Copyright (c) 2008 - 2011 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2010-01-19
+// Updated : 2010-01-19
+// Licence : This source is under MIT License
+// File : gli/core/operator.hpp
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLI_OPERATOR_INCLUDED
+#define GLI_OPERATOR_INCLUDED
+
+#include "texture2d.hpp"
+
+namespace gli{
+namespace detail
+{
+
+}//namespace detail
+
+ texture2D operator+(texture2D const & TextureA, texture2D const & TextureB);
+ texture2D operator-(texture2D const & TextureA, texture2D const & TextureB);
+
+}//namespace gli
+
+#include "operator.inl"
+
+#endif//GLI_OPERATOR_INCLUDED
diff --git a/src/third_party/glm/test/external/gli/core/operator.inl b/src/third_party/glm/test/external/gli/core/operator.inl
new file mode 100644
index 0000000..1ac8328
--- /dev/null
+++ b/src/third_party/glm/test/external/gli/core/operator.inl
@@ -0,0 +1,210 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Image Copyright (c) 2008 - 2011 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2010-01-19
+// Updated : 2010-01-19
+// Licence : This source is under MIT License
+// File : gli/core/operator.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace gli
+{
+ namespace detail
+ {
+ template <typename T>
+ void element
+ (
+ T & DataDst,
+ T const & DataSrcA,
+ T const & DataSrcB,
+ std::binary_function<T, T, T> const & Func
+ )
+ {
+ *DataDst = Func(DataSrcA, DataSrcB);
+ }
+
+ void op
+ (
+ texture2D::value_type * DataDst,
+ texture2D::value_type const * const DataSrcA,
+ texture2D::value_type const * const DataSrcB,
+ format Format
+ )
+ {
+ std::plus<>()
+ switch(Format)
+ {
+ case R8U:
+ *((glm::u8*)DataDst) = *((glm::u8*)DataSrcA) + *((glm::u8*)DataSrcB);
+ break;
+ case RG8U:
+ *((glm::u8vec2*)DataDst) = *((glm::u8vec2*)DataSrcA) + *((glm::u8vec2*)DataSrcB);
+ break;
+ case RGB8U:
+ *((glm::u8vec3*)DataDst) = *((glm::u8vec3*)DataSrcA) + *((glm::u8vec3*)DataSrcB);
+ break;
+ case RGBA8U:
+ *((glm::u8vec4*)DataDst) = *((glm::u8vec4*)DataSrcA) + *((glm::u8vec4*)DataSrcB);
+ break;
+
+ case R16U:
+ *((glm::u16*)DataDst) = *((glm::u16*)DataSrcA) + *((glm::u16*)DataSrcB);
+ break;
+ case RG16U:
+ *((glm::u16vec2*)DataDst) = *((glm::u16vec2*)DataSrcA) + *((glm::u16vec2*)DataSrcB);
+ break;
+ case RGB16U:
+ *((glm::u16vec3*)DataDst) = *((glm::u16vec3*)DataSrcA) + *((glm::u16vec3*)DataSrcB);
+ break;
+ case RGBA16U:
+ *((glm::u16vec4*)DataDst) = *((glm::u16vec4*)DataSrcA) + *((glm::u16vec4*)DataSrcB);
+ break;
+
+ case R32U:
+ *((glm::u32*)DataDst) = *((glm::u32*)DataSrcA) + *((glm::u32*)DataSrcB);
+ break;
+ case RG32U:
+ *((glm::u32vec2*)DataDst) = *((glm::u32vec2*)DataSrcA) + *((glm::u32vec2*)DataSrcB);
+ break;
+ case RGB32U:
+ *((glm::u32vec3*)DataDst) = *((glm::u32vec3*)DataSrcA) + *((glm::u32vec3*)DataSrcB);
+ break;
+ case RGBA32U:
+ *((glm::u32vec4*)DataDst) = *((glm::u32vec4*)DataSrcA) + *((glm::u32vec4*)DataSrcB);
+ break;
+
+ case R8I:
+ *((glm::i8*)DataDst) = *((glm::i8*)DataSrcA) + *((glm::i8*)DataSrcB);
+ break;
+ case RG8I:
+ *((glm::i8vec2*)DataDst) = *((glm::i8vec2*)DataSrcA) + *((glm::i8vec2*)DataSrcB);
+ break;
+ case RGB8I:
+ *((glm::i8vec3*)DataDst) = *((glm::i8vec3*)DataSrcA) + *((glm::i8vec3*)DataSrcB);
+ break;
+ case RGBA8I:
+ *((glm::i8vec4*)DataDst) = *((glm::i8vec4*)DataSrcA) + *((glm::i8vec4*)DataSrcB);
+ break;
+
+ case R16I:
+ *((glm::i16*)DataDst) = *((glm::i16*)DataSrcA) + *((glm::i16*)DataSrcB);
+ break;
+ case RG16I:
+ *((glm::i16vec2*)DataDst) = *((glm::i16vec2*)DataSrcA) + *((glm::i16vec2*)DataSrcB);
+ break;
+ case RGB16I:
+ *((glm::i16vec3*)DataDst) = *((glm::i16vec3*)DataSrcA) + *((glm::i16vec3*)DataSrcB);
+ break;
+ case RGBA16I:
+ *((glm::i16vec4*)DataDst) = *((glm::i16vec4*)DataSrcA) + *((glm::i16vec4*)DataSrcB);
+ break;
+
+ case R32I:
+ *((glm::i32*)DataDst) = *((glm::i32*)DataSrcA) + *((glm::i32*)DataSrcB);
+ break;
+ case RG32I:
+ *((glm::i32vec2*)DataDst) = *((glm::i32vec2*)DataSrcA) + *((glm::i32vec2*)DataSrcB);
+ break;
+ case RGB32I:
+ *((glm::i32vec3*)DataDst) = *((glm::i32vec3*)DataSrcA) + *((glm::i32vec3*)DataSrcB);
+ break;
+ case RGBA32I:
+ *((glm::i32vec4*)DataDst) = *((glm::i32vec4*)DataSrcA) + *((glm::i32vec4*)DataSrcB);
+ break;
+
+ case R16F:
+ *((glm::f16*)DataDst) = *((glm::f16*)DataSrcA) + *((glm::f16*)DataSrcB);
+ break;
+ case RG16F:
+ *((glm::f16vec2*)DataDst) = *((glm::f16vec2*)DataSrcA) + *((glm::f16vec2*)DataSrcB);
+ break;
+ case RGB16F:
+ *((glm::f16vec3*)DataDst) = *((glm::f16vec3*)DataSrcA) + *((glm::f16vec3*)DataSrcB);
+ break;
+ case RGBA16F:
+ *((glm::f16vec4*)DataDst) = *((glm::f16vec4*)DataSrcA) + *((glm::f16vec4*)DataSrcB);
+ break;
+
+ case R32F:
+ *((glm::f32*)DataDst) = *((glm::f32*)DataSrcA) + *((glm::f32*)DataSrcB);
+ break;
+ case RG32F:
+ *((glm::f32vec2*)DataDst) = *((glm::f32vec2*)DataSrcA) + *((glm::f32vec2*)DataSrcB);
+ break;
+ case RGB32F:
+ *((glm::f32vec3*)DataDst) = *((glm::f32vec3*)DataSrcA) + *((glm::f32vec3*)DataSrcB);
+ break;
+ case RGBA32F:
+ *((glm::f32vec4*)DataDst) = *((glm::f32vec4*)DataSrcA) + *((glm::f32vec4*)DataSrcB);
+ break;
+ default:
+ assert(0);
+ }
+ }
+
+ void add
+ (
+ texture2D::image & Result,
+ texture2D::image const & ImageA,
+ texture2D::image const & ImageB,
+ )
+ {
+
+ }
+
+ }//namespace detail
+
+ texture2D operator+
+ (
+ texture2D const & ImageA,
+ texture2D const & ImageB
+ )
+ {
+ assert(ImageA.levels() == ImageB.levels());
+ texture2D Result[ImageA.levels()];
+
+ for(texture2D::level_type Level = 0; Level < Result.levels(); ++Level)
+ {
+ assert(ImageA.capacity() == ImageB.capacity());
+ assert(ImageA.format() == ImageB.format());
+
+ Result[Level] = texture2D::image(ImageA[Level].dimensions(), ImageA[Level].format());
+
+ add(Result[Level], ImageA[Level], ImageB[Level]);
+
+ texture2D::size_type ValueSize = Result.value_size();
+ texture2D::size_type TexelCount = this->capacity() / ValueSize;
+ for(texture2D::size_type Texel = 0; Texel < TexelCount; ++Texel)
+ {
+ texture2D::value_type * DataDst = Result[Level].data() + Texel * ValueSize;
+ texture2D::value_type const * const DataSrcA = ImageA[Level].data() + Texel * ValueSize;
+ texture2D::value_type const * const DataSrcB = ImageB[Level].data() + Texel * ValueSize;
+
+ detail::op(DataDst, DataSrcA, DataSrcB, Result.format(), std::plus);
+ }
+ }
+
+ return Result;
+ }
+
+ texture2D operator-
+ (
+ texture2D const & ImageA,
+ texture2D const & ImageB
+ )
+ {
+ assert(ImageA.levels() == ImageB.levels());
+ texture2D Result[ImageA.levels()];
+
+
+ for(texture2D::level_type Level = 0; Level < ImageA.levels(); ++Level)
+ {
+ assert(ImageA.capacity() == ImageB.capacity());
+
+
+ }
+
+ return Result;
+ }
+
+}//namespace gli
diff --git a/src/third_party/glm/test/external/gli/core/shared_array.hpp b/src/third_party/glm/test/external/gli/core/shared_array.hpp
new file mode 100644
index 0000000..326a54a
--- /dev/null
+++ b/src/third_party/glm/test/external/gli/core/shared_array.hpp
@@ -0,0 +1,48 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Image Copyright (c) 2008 - 2011 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2008-12-19
+// Updated : 2005-06-13
+// Licence : This source is under MIT License
+// File : gli/shared_array.hpp
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLI_SHARED_ARRAY_INCLUDED
+#define GLI_SHARED_ARRAY_INCLUDED
+
+namespace gli
+{
+ template <typename T>
+ class shared_array
+ {
+ public:
+
+ shared_array();
+ shared_array(shared_array const & SharedArray);
+ shared_array(T * Pointer);
+ virtual ~shared_array();
+
+ void reset();
+ void reset(T * Pointer);
+
+ T & operator*();
+ T * operator->();
+ T const & operator*() const;
+ T const * const operator->() const;
+
+ T * get();
+ T const * const get() const;
+
+ shared_array & operator=(shared_array const & SharedArray);
+ bool operator==(shared_array const & SharedArray) const;
+ bool operator!=(shared_array const & SharedArray) const;
+
+ private:
+ int * Counter;
+ T * Pointer;
+ };
+}//namespace gli
+
+#include "shared_array.inl"
+
+#endif //GLI_SHARED_ARRAY_INCLUDED
diff --git a/src/third_party/glm/test/external/gli/core/shared_array.inl b/src/third_party/glm/test/external/gli/core/shared_array.inl
new file mode 100644
index 0000000..74edbb4
--- /dev/null
+++ b/src/third_party/glm/test/external/gli/core/shared_array.inl
@@ -0,0 +1,151 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Image Copyright (c) 2008 - 2011 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2008-12-19
+// Updated : 2005-06-13
+// Licence : This source is under MIT License
+// File : gli/shared_array.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace gli
+{
+ template <typename T>
+ shared_array<T>::shared_array() :
+ Counter(0),
+ Pointer(0)
+ {}
+
+ template <typename T>
+ shared_array<T>::shared_array
+ (
+ shared_array<T> const & SharedArray
+ )
+ {
+ this->Counter = SharedArray.Counter;
+ this->Pointer = SharedArray.Pointer;
+ (*this->Counter)++;
+ }
+
+ template <typename T>
+ shared_array<T>::shared_array
+ (
+ T * Pointer
+ )
+ {
+ this->reset(Pointer);
+ }
+
+ template <typename T>
+ shared_array<T>::~shared_array()
+ {
+ this->reset();
+ }
+
+ template <typename T>
+ void shared_array<T>::reset()
+ {
+ if(this->Pointer)
+ {
+ (*this->Counter)--;
+ if(*this->Counter <= 0)
+ {
+ delete this->Counter;
+ this->Counter = 0;
+ delete[] this->Pointer;
+ this->Pointer = 0;
+ }
+ }
+ }
+
+ template <typename T>
+ void shared_array<T>::reset(T * Pointer)
+ {
+ this->Counter = new int;
+ this->Pointer = Pointer;
+ *this->Counter = 1;
+ }
+
+ template <typename T>
+ shared_array<T>& shared_array<T>::operator=
+ (
+ shared_array<T> const & SharedArray
+ )
+ {
+ this->reset();
+
+ this->Counter = SharedArray.Counter;
+ this->Pointer = SharedArray.Pointer;
+ (*this->Counter)++;
+
+ return *this;
+ }
+
+ //template <typename T>
+ //shared_array<T> & shared_array<T>::operator=(T * Pointer)
+ //{
+ // if(this->Pointer)
+ // {
+ // (*this->Counter)--;
+ // if(*this->Counter <= 0)
+ // {
+ // delete this->Counter;
+ // delete[] this->Pointer;
+ // }
+ // }
+
+ // this->Counter = new int;
+ // this->Pointer = this->Pointer;
+ // (*this->Counter) = 1;
+
+ // return *this;
+ //}
+
+ template <typename T>
+ bool shared_array<T>::operator==(shared_array<T> const & SharedArray) const
+ {
+ return this->Pointer == SharedArray.Pointer;
+ }
+
+ template <typename T>
+ bool shared_array<T>::operator!=(shared_array<T> const & SharedArray) const
+ {
+ return this->Pointer != SharedArray.Pointer;
+ }
+
+ template <typename T>
+ T & shared_array<T>::operator*()
+ {
+ return *this->Pointer;
+ }
+
+ template <typename T>
+ T * shared_array<T>::operator->()
+ {
+ return this->Pointer;
+ }
+
+ template <typename T>
+ T const & shared_array<T>::operator*() const
+ {
+ return * this->Pointer;
+ }
+
+ template <typename T>
+ T const * const shared_array<T>::operator->() const
+ {
+ return this->Pointer;
+ }
+
+ template <typename T>
+ T * shared_array<T>::get()
+ {
+ return this->Pointer;
+ }
+
+ template <typename T>
+ T const * const shared_array<T>::get() const
+ {
+ return this->Pointer;
+ }
+
+}//namespace gli
diff --git a/src/third_party/glm/test/external/gli/core/shared_ptr.hpp b/src/third_party/glm/test/external/gli/core/shared_ptr.hpp
new file mode 100644
index 0000000..533e33f
--- /dev/null
+++ b/src/third_party/glm/test/external/gli/core/shared_ptr.hpp
@@ -0,0 +1,41 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Image Copyright (c) 2008 - 2011 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2008-12-19
+// Updated : 2005-06-13
+// Licence : This source is under MIT License
+// File : gli/fetch.hpp
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLI_SHARED_PTR_INCLUDED
+#define GLI_SHARED_PTR_INCLUDED
+
+namespace gli
+{
+ template <typename T>
+ class shared_ptr
+ {
+ public:
+ shared_ptr();
+ shared_ptr(shared_ptr const & SmartPtr);
+ shared_ptr(T* pPointer);
+ ~shared_ptr();
+
+ T& operator*();
+ T* operator->();
+ const T& operator*() const;
+ const T* operator->() const;
+ shared_ptr& operator=(shared_ptr const & SmartPtr);
+ shared_ptr& operator=(T* pPointer);
+ bool operator==(shared_ptr const & SmartPtr) const;
+ bool operator!=(shared_ptr const & SmartPtr) const;
+
+ private:
+ int* m_pReference;
+ T* m_pPointer;
+ };
+}//namespace gli
+
+#include "shared_ptr.inl"
+
+#endif //GLI_SHARED_PTR_INCLUDED
diff --git a/src/third_party/glm/test/external/gli/core/shared_ptr.inl b/src/third_party/glm/test/external/gli/core/shared_ptr.inl
new file mode 100644
index 0000000..4397411
--- /dev/null
+++ b/src/third_party/glm/test/external/gli/core/shared_ptr.inl
@@ -0,0 +1,125 @@
+///////////////////////////////////////////////////////////////////////////
+// Interstate Gangs : smart_ptr.inl
+///////////////////////////////////////////////////////////////////////////
+// This file is under GPL licence
+///////////////////////////////////////////////////////////////////////////
+// CHANGELOG
+// Groove - 13/06/2005 :
+// - Create file
+///////////////////////////////////////////////////////////////////////////
+
+namespace gli
+{
+ template <typename T>
+ util::CSmartPtr<T>::CSmartPtr()
+ {
+ m_pPointer = 0;
+ }
+
+ template <typename T>
+ util::CSmartPtr<T>::CSmartPtr(const util::CSmartPtr<T> & SmartPtr)
+ {
+ m_pReference = SmartPtr.m_pReference;
+ m_pPointer = SmartPtr.m_pPointer;
+ (*m_pReference)++;
+ }
+
+ template <typename T>
+ util::CSmartPtr<T>::CSmartPtr(T* pPointer)
+ {
+ m_pReference = new int;
+ m_pPointer = pPointer;
+ (*m_pReference) = 1;
+ }
+
+ template <typename T>
+ util::CSmartPtr<T>::~CSmartPtr()
+ {
+ if(!m_pPointer)
+ return;
+
+ (*m_pReference)--;
+ if(*m_pReference <= 0)
+ {
+ delete m_pReference;
+ delete m_pPointer;
+ }
+ }
+
+ template <typename T>
+ util::CSmartPtr<T>& util::CSmartPtr<T>::operator=(const util::CSmartPtr<T> & SmartPtr)
+ {
+ if(m_pPointer)
+ {
+ (*m_pReference)--;
+ if(*m_pReference <= 0)
+ {
+ delete m_pReference;
+ delete m_pPointer;
+ }
+ }
+
+ m_pReference = SmartPtr.m_pReference;
+ m_pPointer = SmartPtr.m_pPointer;
+ (*m_pReference)++;
+
+ return *this;
+ }
+
+ template <typename T>
+ util::CSmartPtr<T>& util::CSmartPtr<T>::operator=(T* pPointer)
+ {
+ if(m_pPointer)
+ {
+ (*m_pReference)--;
+ if(*m_pReference <= 0)
+ {
+ delete m_pReference;
+ delete m_pPointer;
+ }
+ }
+
+ m_pReference = new int;
+ m_pPointer = pPointer;
+ (*m_pReference) = 1;
+
+ return *this;
+ }
+
+ template <typename T>
+ bool util::CSmartPtr<T>::operator==(const util::CSmartPtr<T> & SmartPtr) const
+ {
+ return m_pPointer == SmartPtr.m_pPointer;
+ }
+
+ template <typename T>
+ bool util::CSmartPtr<T>::operator!=(const util::CSmartPtr<T> & SmartPtr) const
+ {
+ return m_pPointer != SmartPtr.m_pPointer;
+ }
+
+ template <typename T>
+ T& util::CSmartPtr<T>::operator*()
+ {
+ return *m_pPointer;
+ }
+
+ template <typename T>
+ T* util::CSmartPtr<T>::operator->()
+ {
+ return m_pPointer;
+ }
+
+ template <typename T>
+ const T& util::CSmartPtr<T>::operator*() const
+ {
+ return *m_pPointer;
+ }
+
+ template <typename T>
+ const T* util::CSmartPtr<T>::operator->() const
+ {
+ return m_pPointer;
+ }
+
+}//namespace gli
diff --git a/src/third_party/glm/test/external/gli/core/size.hpp b/src/third_party/glm/test/external/gli/core/size.hpp
new file mode 100644
index 0000000..3fe461b
--- /dev/null
+++ b/src/third_party/glm/test/external/gli/core/size.hpp
@@ -0,0 +1,31 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Image Copyright (c) 2008 - 2011 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2010-09-08
+// Updated : 2010-09-08
+// Licence : This source is under MIT License
+// File : gli/core/size.hpp
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLI_CORE_SIZE_INCLUDED
+#define GLI_CORE_SIZE_INCLUDED
+
+#include "texture2d.hpp"
+
+namespace gli
+{
+ //template <size_type sizeType>
+ image2D::size_type size(
+ image2D const & Image,
+ image2D::size_type const & SizeType);
+
+ //template <size_type sizeType>
+ texture2D::size_type size(
+ texture2D const & Texture,
+ texture2D::size_type const & SizeType);
+
+}//namespace gli
+
+#include "size.inl"
+
+#endif//GLI_CORE_SIZE_INCLUDED
diff --git a/src/third_party/glm/test/external/gli/core/size.inl b/src/third_party/glm/test/external/gli/core/size.inl
new file mode 100644
index 0000000..dfb6123
--- /dev/null
+++ b/src/third_party/glm/test/external/gli/core/size.inl
@@ -0,0 +1,47 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Image Copyright (c) 2008 - 2011 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2008-12-19
+// Updated : 2010-09-08
+// Licence : This source is under MIT License
+// File : gli/core/size.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace gli
+{
+ inline image2D::size_type size
+ (
+ image2D const & Image,
+ image2D::size_type const & SizeType
+ )
+ {
+ switch(SizeType)
+ {
+ case LINEAR_SIZE:
+ return detail::sizeLinear(Image);
+ case BLOCK_SIZE:
+ return detail::sizeBlock(Image.format());
+ case BIT_PER_PIXEL:
+ return detail::sizeBitPerPixel(Image.format());
+ case COMPONENT:
+ return detail::sizeComponent(Image.format());
+ default:
+ assert(0);
+ return 0;
+ };
+ }
+
+ inline texture2D::size_type size
+ (
+ texture2D const & Texture,
+ texture2D::size_type const & SizeType
+ )
+ {
+ texture2D::size_type Size = 0;
+ for(texture2D::level_type Level = 0; Level < Texture.levels(); ++Level)
+ Size += size(Texture[Level], SizeType);
+
+ return Size;
+ }
+
+}//namespace
diff --git a/src/third_party/glm/test/external/gli/core/texture2d.hpp b/src/third_party/glm/test/external/gli/core/texture2d.hpp
new file mode 100644
index 0000000..b5327c2
--- /dev/null
+++ b/src/third_party/glm/test/external/gli/core/texture2d.hpp
@@ -0,0 +1,122 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Image Copyright (c) 2008 - 2011 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2010-01-09
+// Updated : 2010-01-09
+// Licence : This source is under MIT License
+// File : gli/core/texture2d.hpp
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLI_CORE_TEXTURE2D_INCLUDED
+#define GLI_CORE_TEXTURE2D_INCLUDED
+
+#include "image2d.hpp"
+
+namespace gli
+{
+ enum comp
+ {
+ X = 0,
+ R = 0,
+ S = 0,
+ Y = 1,
+ G = 1,
+ T = 1,
+ Z = 2,
+ B = 2,
+ P = 2,
+ W = 3,
+ A = 3,
+ Q = 3
+ };
+
+ //template <template <typename> class mem>
+ class texture2D
+ {
+ public:
+ typedef image2D::dimensions_type dimensions_type;
+ typedef image2D::texcoord_type texcoord_type;
+ typedef image2D::size_type size_type;
+ typedef image2D::value_type value_type;
+ typedef image2D::format_type format_type;
+ typedef image2D::data_type data_type;
+ typedef std::size_t level_type;
+
+ public:
+ texture2D();
+
+ explicit texture2D(level_type const & Levels);
+ //texture2D(image const & Mipmap, bool GenerateMipmaps = false);
+
+ ~texture2D();
+
+ image2D & operator[] (
+ level_type const & Level);
+ image2D const & operator[] (
+ level_type const & Level) const;
+
+ bool empty() const;
+ format_type format() const;
+ level_type levels() const;
+ void resize(level_type const & Levels);
+
+ template <typename genType>
+ void swizzle(gli::comp X, gli::comp Y, gli::comp Z, gli::comp W);
+
+ private:
+ std::vector<image2D> Images;
+ };
+
+//namespace wip
+//{
+// // plain
+// template <typename genType>
+// class plain
+// {
+// public:
+//
+// private:
+// boost::shared_array<genType> Data;
+// };
+//
+// // texture2D
+// template
+// <
+// typename genType,
+// template <typename> class surface = plain
+// >
+// class texture2D
+// {
+// public:
+// typedef genType value_type;
+//
+// private:
+// class image_impl
+// {
+// public:
+// template <typename coordType>
+// value_type const & operator() (coordType const & Coord) const;
+//
+// private:
+// surface<value_type> Surface;
+// };
+//
+// public:
+// typedef image_impl image;
+// typedef std::vector<image> mipmaps;
+// typedef typename mipmaps::size_type level_type;
+//
+// level_type levels() const;
+// image & operator[] (level_type Level);
+// image const & operator[] (level_type Level) const;
+//
+// private:
+// mipmaps Mipmaps;
+// };
+//
+//}//namespace wip
+}//namespace gli
+
+#include "texture2d.inl"
+
+#endif//GLI_CORE_TEXTURE2D_INCLUDED
diff --git a/src/third_party/glm/test/external/gli/core/texture2d.inl b/src/third_party/glm/test/external/gli/core/texture2d.inl
new file mode 100644
index 0000000..eee2c47
--- /dev/null
+++ b/src/third_party/glm/test/external/gli/core/texture2d.inl
@@ -0,0 +1,304 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Image Copyright (c) 2008 - 2011 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2010-09-27
+// Updated : 2010-09-27
+// Licence : This source is under MIT License
+// File : gli/core/texture2D.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace gli
+{
+ namespace detail
+ {
+ inline texture2D::size_type sizeLinear
+ (
+ texture2D const & Texture
+ )
+ {
+ texture2D::size_type Result = 0;
+ for(texture2D::level_type Level = 0; Level < Texture.levels(); ++Level)
+ Result += sizeLinear(Texture[Level]);
+ return Result;
+ }
+ }//namespace detail
+
+ inline texture2D::texture2D()
+ {}
+
+ inline texture2D::texture2D
+ (
+ level_type const & Levels
+ )
+ {
+ this->Images.resize(Levels);
+ }
+
+ //inline texture2D::texture2D
+ //(
+ // image const & Mipmap,
+ // bool GenerateMipmaps // ToDo
+ //)
+ //{
+ // //std::size_t Levels = !GenerateMipmaps ? 1 : std::size_t(glm::log2(float(glm::max(Mipmap.width(), Mipmap.height()))));
+ // texture2D::level_type Levels = !GenerateMipmaps ? 1 : std::size_t(glm::log2(float(glm::compMax(Mipmap.dimensions()))));
+ // this->Mipmaps.resize(Levels);
+ // this->Mipmaps[0] = Mipmap;
+
+ // if(GenerateMipmaps)
+ // this->generateMipmaps(0);
+ //}
+
+ inline texture2D::~texture2D()
+ {}
+
+ inline image2D & texture2D::operator[] (level_type const & Level)
+ {
+ return this->Images[Level];
+ }
+
+ inline image2D const & texture2D::operator[] (level_type const & Level) const
+ {
+ return this->Images[Level];
+ }
+
+ inline bool texture2D::empty() const
+ {
+ return this->Images.size() == 0;
+ }
+
+ inline texture2D::format_type texture2D::format() const
+ {
+ return this->Images.empty() ? FORMAT_NULL : this->Images[0].format();
+ }
+
+ inline texture2D::level_type texture2D::levels() const
+ {
+ return this->Images.size();
+ }
+
+ inline void texture2D::resize
+ (
+ texture2D::level_type const & Levels
+ )
+ {
+ this->Images.resize(Levels);
+ }
+
+ template <typename genType>
+ inline void texture2D::swizzle(gli::comp X, gli::comp Y, gli::comp Z, gli::comp W)
+ {
+ for(texture2D::level_type Level = 0; Level < this->levels(); ++Level)
+ {
+ genType * Data = reinterpret_cast<genType*>(this->Images[Level].data());
+ texture2D::size_type Components = this->Images[Level].components();
+ //gli::detail::getComponents(this->Images[Level].format());
+ texture2D::size_type Size = (glm::compMul(this->Images[Level].dimensions()) * Components) / sizeof(genType);
+
+ for(texture2D::size_type i = 0; i < Size; ++i)
+ {
+ genType Copy = Data[i];
+ if(Components > 0)
+ Data[i][0] = Copy[X];
+ if(Components > 1)
+ Data[i][1] = Copy[Y];
+ if(Components > 2)
+ Data[i][2] = Copy[Z];
+ if(Components > 3)
+ Data[i][3] = Copy[W];
+ }
+ }
+ }
+
+/*
+ template <typename T>
+ inline T texture<T>::texture(float x, float y) const
+ {
+ size_type x_below = size_type(std::floor(x * (_width - 1)));
+ size_type x_above = size_type(std::ceil(x * (_width - 1)));
+ size_type y_below = size_type(std::floor(y * (_height - 1)));
+ size_type y_above = size_type(std::ceil(y * (_height - 1)));
+
+ float x_step = 1.0f / float(_width);
+ float y_step = 1.0f / float(_height);
+
+ float x_below_normalized = float(x_below) / float(_width - 1);
+ float x_above_normalized = float(x_above) / float(_width - 1);
+ float y_below_normalized = float(y_below) / float(_height - 1);
+ float y_above_normalized = float(y_above) / float(_height - 1);
+
+ T value1 = _data[x_below + y_below * _width];
+ T value2 = _data[x_above + y_below * _width];
+ T value3 = _data[x_above + y_above * _width];
+ T value4 = _data[x_below + y_above * _width];
+
+ T valueA = glm::mix(value1, value2, x - x_below_normalized);
+ T valueB = glm::mix(value4, value3, x - x_below_normalized);
+ T valueC = glm::mix(valueA, valueB, y - y_below_normalized);
+ return valueC;
+ }
+*/
+/*
+ template <typename T>
+ inline T texture(const texture2D<T>& Image2D, const glm::vec2& TexCoord)
+ {
+ texture2D<T>::size_type s_below = texture2D<T>::size_type(std::floor(TexCoord.s * (Image2D.width() - 1)));
+ texture2D<T>::size_type s_above = texture2D<T>::size_type(std::ceil(TexCoord.s * (Image2D.width() - 1)));
+ texture2D<T>::size_type t_below = texture2D<T>::size_type(std::floor(TexCoord.t * (Image2D.height() - 1)));
+ texture2D<T>::size_type t_above = texture2D<T>::size_type(std::ceil(TexCoord.t * (Image2D.height() - 1)));
+
+ glm::vec2::value_type s_step = 1.0f / glm::vec2::value_type(Image2D.width());
+ glm::vec2::value_type t_step = 1.0f / glm::vec2::value_type(Image2D.height());
+
+ glm::vec2::value_type s_below_normalized = glm::vec2::value_type(s_below) / glm::vec2::value_type(Image2D.width() - 1);
+ glm::vec2::value_type s_above_normalized = glm::vec2::value_type(s_above) / glm::vec2::value_type(Image2D.width() - 1);
+ glm::vec2::value_type t_below_normalized = glm::vec2::value_type(t_below) / glm::vec2::value_type(Image2D.height() - 1);
+ glm::vec2::value_type t_above_normalized = glm::vec2::value_type(t_above) / glm::vec2::value_type(Image2D.height() - 1);
+
+ T value1 = Image2D[s_below + t_below * Image2D.width()];
+ T value2 = Image2D[s_above + t_below * Image2D.width()];
+ T value3 = Image2D[s_above + t_above * Image2D.width()];
+ T value4 = Image2D[s_below + t_above * Image2D.width()];
+
+ T valueA = glm::mix(value1, value2, TexCoord.s - s_below_normalized);
+ T valueB = glm::mix(value4, value3, TexCoord.s - s_below_normalized);
+ T valueC = glm::mix(valueA, valueB, TexCoord.t - t_below_normalized);
+ return valueC;
+ }
+
+ template <typename T>
+ inline T textureNearest(const texture2D<T>& Image2D, const glm::vec2& TexCoord)
+ {
+ texture2D<T>::size_type s = texture2D<T>::size_type(glm::roundGTX(TexCoord.s * (Image2D.width() - 1)));
+ texture2D<T>::size_type t = texture2D<T>::size_type(std::roundGTX(TexCoord.t * (Image2D.height() - 1)));
+
+ return Image2D[s + t * Image2D.width()];
+ }
+*/
+
+namespace wip
+{
+ ////////////////
+ // image
+/*
+ //
+ template
+ <
+ typename coordType
+ >
+ template
+ <
+ typename genType,
+ template <typename> class surface
+ >
+ typename texture2D<genType, surface>::value_type &
+ texture2D<genType, surface>::image_impl<coordType>::operator()
+ (
+ coordType const & Coord
+ )
+ {
+
+ }
+*/
+/*
+ //
+ template
+ <
+ typename coordType
+ >
+ template
+ <
+ typename genType,
+ template <typename> class surface
+ >
+ typename texture2D<genType, surface>::value_type const &
+ texture2D<genType, surface>::image_impl::operator()
+ (
+ coordType const & Coord
+ ) const
+ {
+ return value_type(0);
+ }
+*/
+/*
+ //
+ template
+ <
+ typename coordType
+ >
+ template
+ <
+ typename genType,
+ template <typename> class surface
+ >
+ void texture2D<genType, surface>::image_impl::operator()
+ (
+ coordType const & Coord
+ ) const
+ {
+
+ }
+*/
+ ////
+ //template
+ //<
+ // typename genType,
+ // template <typename> class surface
+ //>
+ //template
+ //<
+ // typename coordType
+ //>
+ //typename texture2D<genType, surface>::value_type const &
+ //texture2D<genType, surface>::image_impl::operator()
+ //(
+ // coordType const & Coord
+ //) const
+ //{
+ // return value_type(0);
+ //}
+
+ //////////////////
+ //// texture2D
+
+ ////
+ //template
+ //<
+ // typename genType,
+ // template <typename> class surface
+ //>
+ //typename texture2D<genType, surface>::level_type texture2D<genType, surface>::levels() const
+ //{
+ // return this->Mipmaps.size();
+ //}
+
+ ////
+ //template
+ //<
+ // typename genType,
+ // template <typename> class surface
+ //>
+ //typename texture2D<genType, surface>::image & texture2D<genType, surface>::operator[]
+ //(
+ // typename texture2D<genType, surface>::level_type Level
+ //)
+ //{
+ // return this->Mipmaps[Level];
+ //}
+
+ ////
+ //template
+ //<
+ // typename genType,
+ // template <typename> class surface
+ //>
+ //typename texture2D<genType, surface>::image const & texture2D<genType, surface>::operator[]
+ //(
+ // typename texture2D<genType, surface>::level_type Level
+ //) const
+ //{
+ // return this->Mipmaps[Level];
+ //}
+
+}//namespace wip
+}//namespace gli
diff --git a/src/third_party/glm/test/external/gli/core/texture2d_array.hpp b/src/third_party/glm/test/external/gli/core/texture2d_array.hpp
new file mode 100644
index 0000000..cb337e3
--- /dev/null
+++ b/src/third_party/glm/test/external/gli/core/texture2d_array.hpp
@@ -0,0 +1,59 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Image Copyright (c) 2008 - 2011 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2011-04-06
+// Updated : 2011-04-06
+// Licence : This source is under MIT License
+// File : gli/core/texture2d_array.hpp
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLI_CORE_TEXTURE2D_ARRAY_INCLUDED
+#define GLI_CORE_TEXTURE2D_ARRAY_INCLUDED
+
+#include "texture2d.hpp"
+
+namespace gli
+{
+ class texture2DArray
+ {
+ public:
+ typedef texture2D::dimensions_type dimensions_type;
+ typedef texture2D::texcoord_type texcoord_type;
+ typedef texture2D::size_type size_type;
+ typedef texture2D::value_type value_type;
+ typedef texture2D::format_type format_type;
+ typedef texture2D::data_type data_type;
+ typedef texture2D::level_type level_type;
+ typedef std::vector<texture2D>::size_type layer_type;
+
+ public:
+ texture2DArray();
+
+ explicit texture2DArray(
+ layer_type const & Layers,
+ level_type const & Levels);
+
+ ~texture2DArray();
+
+ texture2D & operator[] (
+ layer_type const & Layer);
+ texture2D const & operator[] (
+ layer_type const & Layer) const;
+
+ bool empty() const;
+ format_type format() const;
+ layer_type layers() const;
+ level_type levels() const;
+ void resize(
+ layer_type const & Layers,
+ level_type const & Levels);
+
+ private:
+ std::vector<texture2D> Arrays;
+ };
+
+}//namespace gli
+
+#include "texture2d_array.inl"
+
+#endif//GLI_CORE_TEXTURE2D_ARRAY_INCLUDED
diff --git a/src/third_party/glm/test/external/gli/core/texture2d_array.inl b/src/third_party/glm/test/external/gli/core/texture2d_array.inl
new file mode 100644
index 0000000..386cac0
--- /dev/null
+++ b/src/third_party/glm/test/external/gli/core/texture2d_array.inl
@@ -0,0 +1,78 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Image Copyright (c) 2008 - 2011 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2011-04-06
+// Updated : 2011-04-06
+// Licence : This source is under MIT License
+// File : gli/core/texture_cube.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace gli
+{
+ inline texture2DArray::texture2DArray()
+ {}
+
+ inline texture2DArray::texture2DArray
+ (
+ texture2DArray::layer_type const & Layers,
+ texture2DArray::level_type const & Levels
+ )
+ {
+ this->Arrays.resize(Layers);
+ for(texture2DArray::size_type i = 0; i < this->Arrays.size(); ++i)
+ this->Arrays[i].resize(Levels);
+ }
+
+ inline texture2DArray::~texture2DArray()
+ {}
+
+ inline texture2D & texture2DArray::operator[]
+ (
+ layer_type const & Layer
+ )
+ {
+ return this->Arrays[Layer];
+ }
+
+ inline texture2D const & texture2DArray::operator[]
+ (
+ layer_type const & Layer
+ ) const
+ {
+ return this->Arrays[Layer];
+ }
+
+ inline bool texture2DArray::empty() const
+ {
+ return this->Arrays.empty();
+ }
+
+ inline texture2DArray::format_type texture2DArray::format() const
+ {
+ return this->Arrays.empty() ? FORMAT_NULL : this->Arrays[0].format();
+ }
+
+ inline texture2DArray::layer_type texture2DArray::layers() const
+ {
+ return this->Arrays.size();
+ }
+
+ inline texture2DArray::level_type texture2DArray::levels() const
+ {
+ if(this->empty())
+ return 0;
+ return this->Arrays[0].levels();
+ }
+
+ inline void texture2DArray::resize
+ (
+ texture2DArray::layer_type const & Layers,
+ texture2DArray::level_type const & Levels
+ )
+ {
+ this->Arrays.resize(Layers);
+ for(texture2DArray::layer_type i = 0; i < this->Arrays.size(); ++i)
+ this->Arrays[i].resize(Levels);
+ }
+
+}//namespace gli
diff --git a/src/third_party/glm/test/external/gli/core/texture_cube.hpp b/src/third_party/glm/test/external/gli/core/texture_cube.hpp
new file mode 100644
index 0000000..8251d23
--- /dev/null
+++ b/src/third_party/glm/test/external/gli/core/texture_cube.hpp
@@ -0,0 +1,65 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Image Copyright (c) 2008 - 2011 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2011-04-06
+// Updated : 2011-04-06
+// Licence : This source is under MIT License
+// File : gli/core/texture_cube.hpp
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLI_CORE_TEXTURE_CUBE_INCLUDED
+#define GLI_CORE_TEXTURE_CUBE_INCLUDED
+
+#include "texture2d.hpp"
+
+namespace gli
+{
+ enum face
+ {
+ POSITIVE_X,
+ NEGATIVE_X,
+ POSITIVE_Y,
+ NEGATIVE_Y,
+ POSITIVE_Z,
+ NEGATIVE_Z,
+ FACE_MAX
+ };
+
+ class textureCube
+ {
+ public:
+ typedef texture2D::dimensions_type dimensions_type;
+ typedef texture2D::texcoord_type texcoord_type;
+ typedef texture2D::size_type size_type;
+ typedef texture2D::value_type value_type;
+ typedef texture2D::format_type format_type;
+ typedef texture2D::data_type data_type;
+ typedef texture2D::level_type level_type;
+ typedef face face_type;
+
+ public:
+ textureCube();
+
+ explicit textureCube(level_type const & Levels);
+
+ ~textureCube();
+
+ texture2D & operator[] (
+ face_type const & Face);
+ texture2D const & operator[] (
+ face_type const & Face) const;
+
+ bool empty() const;
+ format_type format() const;
+ level_type levels() const;
+ void resize(level_type const & Levels);
+
+ private:
+ std::vector<texture2D> Faces;
+ };
+
+}//namespace gli
+
+#include "texture_cube.inl"
+
+#endif//GLI_CORE_TEXTURE_CUBE_INCLUDED
diff --git a/src/third_party/glm/test/external/gli/core/texture_cube.inl b/src/third_party/glm/test/external/gli/core/texture_cube.inl
new file mode 100644
index 0000000..d1cbe31
--- /dev/null
+++ b/src/third_party/glm/test/external/gli/core/texture_cube.inl
@@ -0,0 +1,70 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Image Copyright (c) 2008 - 2011 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2011-04-06
+// Updated : 2011-04-06
+// Licence : This source is under MIT License
+// File : gli/core/texture_cube.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace gli
+{
+ inline textureCube::textureCube()
+ {}
+
+ inline textureCube::textureCube
+ (
+ level_type const & Levels
+ )
+ {
+ this->Faces.resize(FACE_MAX);
+ for(textureCube::size_type i = 0; i < FACE_MAX; ++i)
+ this->Faces[i].resize(Levels);
+ }
+
+ inline textureCube::~textureCube()
+ {}
+
+ inline texture2D & textureCube::operator[]
+ (
+ face_type const & Face
+ )
+ {
+ return this->Faces[Face];
+ }
+
+ inline texture2D const & textureCube::operator[]
+ (
+ face_type const & Face
+ ) const
+ {
+ return this->Faces[Face];
+ }
+
+ inline bool textureCube::empty() const
+ {
+ return this->Faces.size() == 0;
+ }
+
+ inline textureCube::format_type textureCube::format() const
+ {
+ return this->Faces.empty() ? FORMAT_NULL : this->Faces[0].format();
+ }
+
+ inline textureCube::level_type textureCube::levels() const
+ {
+ if(this->empty())
+ return 0;
+ return this->Faces[POSITIVE_X].levels();
+ }
+
+ inline void textureCube::resize
+ (
+ level_type const & Levels
+ )
+ {
+ for(textureCube::size_type i = 0; i < FACE_MAX; ++i)
+ this->Faces[i].resize(Levels);
+ }
+
+}//namespace gli
diff --git a/src/third_party/glm/test/external/gli/core/texture_cube_array.hpp b/src/third_party/glm/test/external/gli/core/texture_cube_array.hpp
new file mode 100644
index 0000000..ac2b8b5
--- /dev/null
+++ b/src/third_party/glm/test/external/gli/core/texture_cube_array.hpp
@@ -0,0 +1,59 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Image Copyright (c) 2008 - 2011 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2011-04-06
+// Updated : 2011-04-06
+// Licence : This source is under MIT License
+// File : gli/core/texture_cube_array.hpp
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLI_CORE_TEXTURE_CUBE_ARRAY_INCLUDED
+#define GLI_CORE_TEXTURE_CUBE_ARRAY_INCLUDED
+
+#include "texture_cube.hpp"
+
+namespace gli
+{
+ class textureCubeArray
+ {
+ public:
+ typedef textureCube::dimensions_type dimensions_type;
+ typedef textureCube::texcoord_type texcoord_type;
+ typedef textureCube::size_type size_type;
+ typedef textureCube::value_type value_type;
+ typedef textureCube::format_type format_type;
+ typedef std::vector<textureCube> data_type;
+ typedef textureCube::level_type level_type;
+ typedef data_type::size_type layer_type;
+
+ public:
+ textureCubeArray();
+
+ explicit textureCubeArray(
+ layer_type const & Layers,
+ level_type const & Levels);
+
+ ~textureCubeArray();
+
+ textureCube & operator[] (
+ layer_type const & Layer);
+ textureCube const & operator[] (
+ layer_type const & Layer) const;
+
+ bool empty() const;
+ format_type format() const;
+ layer_type layers() const;
+ level_type levels() const;
+ void resize(
+ layer_type const & Layers,
+ level_type const & Levels);
+
+ private:
+ data_type Arrays;
+ };
+
+}//namespace gli
+
+#include "texture_cube_array.inl"
+
+#endif//GLI_CORE_TEXTURE_CUBE_ARRAY_INCLUDED
diff --git a/src/third_party/glm/test/external/gli/core/texture_cube_array.inl b/src/third_party/glm/test/external/gli/core/texture_cube_array.inl
new file mode 100644
index 0000000..f214902
--- /dev/null
+++ b/src/third_party/glm/test/external/gli/core/texture_cube_array.inl
@@ -0,0 +1,72 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Image Copyright (c) 2008 - 2011 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2011-04-06
+// Updated : 2011-04-06
+// Licence : This source is under MIT License
+// File : gli/core/texture_cube_array.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace gli
+{
+ inline textureCubeArray::textureCubeArray()
+ {}
+
+ inline textureCubeArray::textureCubeArray
+ (
+ layer_type const & Layers,
+ level_type const & Levels
+ )
+ {
+ this->Arrays.resize(Layers);
+ for(textureCubeArray::size_type i = 0; i < this->Arrays.size(); ++i)
+ this->Arrays[i].resize(Levels);
+ }
+
+ inline textureCubeArray::~textureCubeArray()
+ {}
+
+ inline textureCube & textureCubeArray::operator[]
+ (
+ layer_type const & Layer
+ )
+ {
+ return this->Arrays[Layer];
+ }
+
+ inline textureCube const & textureCubeArray::operator[]
+ (
+ layer_type const & Layer
+ ) const
+ {
+ return this->Arrays[Layer];
+ }
+
+ inline bool textureCubeArray::empty() const
+ {
+ return this->Arrays.empty();
+ }
+
+ inline textureCubeArray::format_type textureCubeArray::format() const
+ {
+ return this->Arrays.empty() ? FORMAT_NULL : this->Arrays[0].format();
+ }
+
+ inline textureCubeArray::level_type textureCubeArray::levels() const
+ {
+ if(this->empty())
+ return 0;
+ return this->Arrays[0].levels();
+ }
+
+ inline void textureCubeArray::resize
+ (
+ layer_type const & Layers,
+ level_type const & Levels
+ )
+ {
+ for(textureCubeArray::size_type i = 0; i < this->Arrays.size(); ++i)
+ this->Arrays[i].resize(Levels);
+ }
+
+}//namespace gli
diff --git a/src/third_party/glm/test/external/gli/gli.hpp b/src/third_party/glm/test/external/gli/gli.hpp
new file mode 100644
index 0000000..5b39447
--- /dev/null
+++ b/src/third_party/glm/test/external/gli/gli.hpp
@@ -0,0 +1,31 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Image Copyright (c) 2008 - 2011 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2008-12-19
+// Updated : 2010-09-29
+// Licence : This source is under MIT License
+// File : gli/gli.hpp
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+/*! \mainpage OpenGL Image
+ *
+ */
+
+#ifndef GLI_GLI_INCLUDED
+#define GLI_GLI_INCLUDED
+
+#define GLI_VERSION 31
+#define GLI_VERSION_MAJOR 0
+#define GLI_VERSION_MINOR 3
+#define GLI_VERSION_PATCH 1
+#define GLI_VERSION_REVISION 0
+
+#include "./core/texture2d.hpp"
+#include "./core/texture2d_array.hpp"
+#include "./core/texture_cube.hpp"
+#include "./core/texture_cube_array.hpp"
+#include "./core/size.hpp"
+#include "./core/operation.hpp"
+#include "./core/generate_mipmaps.hpp"
+
+#endif//GLI_GLI_INCLUDED
diff --git a/src/third_party/glm/test/external/gli/gtx/compression.hpp b/src/third_party/glm/test/external/gli/gtx/compression.hpp
new file mode 100644
index 0000000..e314955
--- /dev/null
+++ b/src/third_party/glm/test/external/gli/gtx/compression.hpp
@@ -0,0 +1,27 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Image Copyright (c) 2008 - 2011 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2008-12-19
+// Updated : 2010-01-09
+// Licence : This source is under MIT License
+// File : gli/gtx/compression.hpp
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLI_GTX_COMPRESSION_INCLUDED
+#define GLI_GTX_COMPRESSION_INCLUDED
+
+namespace gli{
+namespace gtx{
+namespace compression
+{
+
+
+}//namespace compression
+}//namespace gtx
+}//namespace gli
+
+namespace gli{using namespace gtx::compression;}
+
+#include "compression.inl"
+
+#endif//GLI_GTX_COMPRESSION_INCLUDED
diff --git a/src/third_party/glm/test/external/gli/gtx/compression.inl b/src/third_party/glm/test/external/gli/gtx/compression.inl
new file mode 100644
index 0000000..4aed576
--- /dev/null
+++ b/src/third_party/glm/test/external/gli/gtx/compression.inl
@@ -0,0 +1,8 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Image Copyright (c) 2008 - 2011 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2008-12-19
+// Updated : 2010-01-09
+// Licence : This source is under MIT License
+// File : gli/gtx/compression.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/third_party/glm/test/external/gli/gtx/fetch.hpp b/src/third_party/glm/test/external/gli/gtx/fetch.hpp
new file mode 100644
index 0000000..6de5309
--- /dev/null
+++ b/src/third_party/glm/test/external/gli/gtx/fetch.hpp
@@ -0,0 +1,46 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Image Copyright (c) 2008 - 2011 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2008-12-19
+// Updated : 2010-09-27
+// Licence : This source is under MIT License
+// File : gli/gtx/fetch.hpp
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLI_GTX_FETCH_INCLUDED
+#define GLI_GTX_FETCH_INCLUDED
+
+#include "../gli.hpp"
+
+namespace gli{
+namespace gtx{
+namespace fetch
+{
+ template <typename genType>
+ genType texelFetch(
+ texture2D const & Texture,
+ texture2D::dimensions_type const & Texcoord,
+ texture2D::level_type const & Level);
+
+ template <typename genType>
+ genType textureLod(
+ texture2D const & Texture,
+ texture2D::texcoord_type const & Texcoord,
+ texture2D::level_type const & Level);
+
+ template <typename genType>
+ void texelWrite(
+ texture2D & Texture,
+ texture2D::dimensions_type const & Texcoord,
+ texture2D::level_type const & Level,
+ genType const & Color);
+
+}//namespace fetch
+}//namespace gtx
+}//namespace gli
+
+namespace gli{using namespace gtx::fetch;}
+
+#include "fetch.inl"
+
+#endif//GLI_GTX_FETCH_INCLUDED
diff --git a/src/third_party/glm/test/external/gli/gtx/fetch.inl b/src/third_party/glm/test/external/gli/gtx/fetch.inl
new file mode 100644
index 0000000..d2e272d
--- /dev/null
+++ b/src/third_party/glm/test/external/gli/gtx/fetch.inl
@@ -0,0 +1,91 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Image Copyright (c) 2008 - 2011 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2008-12-19
+// Updated : 2010-09-27
+// Licence : This source is under MIT License
+// File : gli/gtx/fetch.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace gli{
+namespace gtx{
+namespace fetch
+{
+ template <typename genType>
+ inline genType texelFetch
+ (
+ texture2D const & Image,
+ texture2D::dimensions_type const & TexCoord,
+ texture2D::level_type const & Level
+ )
+ {
+ assert(Image[Level].format() == R8U || Image[Level].format() == RG8U || Image[Level].format() == RGB8U || Image[Level].format() == RGBA8U);
+
+ texture2D::dimensions_type Dimensions = Image[Level].dimensions();
+ texture2D::value_type const * const Data = Image[Level].data();
+
+ return reinterpret_cast<genType const * const>(Data)[TexCoord.x + TexCoord.y * Dimensions.x];
+ }
+
+ template <typename genType>
+ inline genType textureLod
+ (
+ texture2D const & Image,
+ texture2D::texcoord_type const & TexCoord,
+ texture2D::level_type const & Level
+ )
+ {
+ assert(Image[Level].format() == R8U || Image[Level].format() == RG8U || Image[Level].format() == RGB8U || Image[Level].format() == RGBA8U);
+
+ texture2D::dimensions_type Dimensions = Image[Level].dimensions();
+ texture2D::value_type const * const Data = Image[Level].data();
+
+ std::size_t s_below = std::size_t(glm::floor(TexCoord.s * float(Dimensions.x - 1)));
+ std::size_t s_above = std::size_t(glm::ceil( TexCoord.s * float(Dimensions.x - 1)));
+ std::size_t t_below = std::size_t(glm::floor(TexCoord.t * float(Dimensions.y - 1)));
+ std::size_t t_above = std::size_t(glm::ceil( TexCoord.t * float(Dimensions.y - 1)));
+
+ float s_step = 1.0f / float(Dimensions.x);
+ float t_step = 1.0f / float(Dimensions.y);
+
+ float s_below_normalized = s_below / float(Dimensions.x);
+ float s_above_normalized = s_above / float(Dimensions.x);
+ float t_below_normalized = t_below / float(Dimensions.y);
+ float t_above_normalized = t_above / float(Dimensions.y);
+
+ genType Value1 = reinterpret_cast<genType const * const>(Data)[s_below + t_below * Dimensions.x];
+ genType Value2 = reinterpret_cast<genType const * const>(Data)[s_above + t_below * Dimensions.x];
+ genType Value3 = reinterpret_cast<genType const * const>(Data)[s_above + t_above * Dimensions.x];
+ genType Value4 = reinterpret_cast<genType const * const>(Data)[s_below + t_above * Dimensions.x];
+
+ float BlendA = float(TexCoord.s - s_below_normalized) * float(Dimensions.x - 1);
+ float BlendB = float(TexCoord.s - s_below_normalized) * float(Dimensions.x - 1);
+ float BlendC = float(TexCoord.t - t_below_normalized) * float(Dimensions.y - 1);
+
+ genType ValueA(glm::mix(Value1, Value2, BlendA));
+ genType ValueB(glm::mix(Value4, Value3, BlendB));
+
+ return genType(glm::mix(ValueA, ValueB, BlendC));
+ }
+
+ template <typename genType>
+ void texelWrite
+ (
+ texture2D & Image,
+ texture2D::dimensions_type const & Texcoord,
+ texture2D::level_type const & Level,
+ genType const & Color
+ )
+ {
+ genType * Data = (genType*)Image[Level].data();
+ std::size_t Index = Texcoord.x + Texcoord.y * Image[Level].dimensions().x;
+
+ std::size_t Capacity = Image[Level].capacity();
+ assert(Index < Capacity);
+
+ *(Data + Index) = Color;
+ }
+
+}//namespace fetch
+}//namespace gtx
+}//namespace gli
diff --git a/src/third_party/glm/test/external/gli/gtx/gl_texture2d.hpp b/src/third_party/glm/test/external/gli/gtx/gl_texture2d.hpp
new file mode 100644
index 0000000..51b911d
--- /dev/null
+++ b/src/third_party/glm/test/external/gli/gtx/gl_texture2d.hpp
@@ -0,0 +1,33 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Image Copyright (c) 2008 - 2011 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2010-09-27
+// Updated : 2010-10-01
+// Licence : This source is under MIT License
+// File : gli/gtx/gl_texture2d.hpp
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLI_GTX_GL_TEXTURE2D_INCLUDED
+#define GLI_GTX_GL_TEXTURE2D_INCLUDED
+
+#include "../gli.hpp"
+#include "../gtx/loader.hpp"
+
+#ifndef GL_VERSION_1_1
+#error "ERROR: OpenGL must be included before GLI_GTX_gl_texture2d"
+#endif//GL_VERSION_1_1
+
+namespace gli{
+namespace gtx{
+namespace gl_texture2d
+{
+ GLuint createTexture2D(std::string const & Filename);
+}//namespace gl_texture2d
+}//namespace gtx
+}//namespace gli
+
+namespace gli{using namespace gtx::gl_texture2d;}
+
+#include "gl_texture2d.inl"
+
+#endif//GLI_GTX_GL_TEXTURE2D_INCLUDED
diff --git a/src/third_party/glm/test/external/gli/gtx/gl_texture2d.inl b/src/third_party/glm/test/external/gli/gtx/gl_texture2d.inl
new file mode 100644
index 0000000..43dbb68
--- /dev/null
+++ b/src/third_party/glm/test/external/gli/gtx/gl_texture2d.inl
@@ -0,0 +1,210 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Image Copyright (c) 2008 - 2011 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2010-09-27
+// Updated : 2010-10-01
+// Licence : This source is under MIT License
+// File : gli/gtx/gl_texture2d.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace gli{
+namespace gtx{
+namespace gl_texture2d{
+namespace detail
+{
+ //GL_COMPRESSED_RED, GL_COMPRESSED_RG, GL_COMPRESSED_RGB, GL_COMPRESSED_RGBA, GL_COMPRESSED_SRGB, GL_COMPRESSED_SRGB_ALPHA,
+ //GL_SRGB, GL_SRGB8, GL_SRGB_ALPHA, or GL_SRGB8_ALPHA8
+ struct texture_desc
+ {
+ GLint InternalFormat;
+ GLint InternalFormatCompressed;
+ GLint InternalFormatSRGB;
+ GLint InternalFormatCompressedSRGB;
+ GLenum ExternalFormat;
+ GLenum ExternalFormatRev;
+ GLenum Type;
+ };
+
+ //GL_RED, GL_RG, GL_RGB, GL_BGR, GL_RGBA, and GL_BGRA.
+ //GL_UNSIGNED_BYTE, GL_BYTE, GL_UNSIGNED_SHORT, GL_SHORT, GL_UNSIGNED_INT,
+ //GL_INT, GL_FLOAT, GL_UNSIGNED_BYTE_3_3_2, GL_UNSIGNED_BYTE_2_3_3_REV,
+ //GL_UNSIGNED_SHORT_5_6_5, GL_UNSIGNED_SHORT_5_6_5_REV, GL_UNSIGNED_SHORT_4_4_4_4,
+ //GL_UNSIGNED_SHORT_4_4_4_4_REV, GL_UNSIGNED_SHORT_5_5_5_1, GL_UNSIGNED_SHORT_1_5_5_5_REV,
+ //GL_UNSIGNED_INT_8_8_8_8, GL_UNSIGNED_INT_8_8_8_8_REV, GL_UNSIGNED_INT_10_10_10_2,
+ //GL_UNSIGNED_INT_2_10_10_10_REV
+
+# ifndef GL_COMPRESSED_RGBA_BPTC_UNORM_ARB
+# define GL_COMPRESSED_RGBA_BPTC_UNORM_ARB 0x8E8C
+# endif
+
+# ifndef GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB
+# define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB 0x8E8D
+# endif
+
+# ifndef GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB
+# define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB 0x8E8E
+# endif
+
+# ifndef GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB
+# define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB 0x8E8F
+# endif
+
+ inline texture_desc gli2ogl_cast(format const & Format)
+ {
+ texture_desc Cast[] =
+ {
+ {GL_NONE, GL_NONE, GL_NONE, GL_NONE, GL_NONE, GL_NONE, GL_NONE},
+
+ //// Normalized
+ //{GL_RED, GL_COMPRESSED_RED, GL_RED, GL_COMPRESSED_RED, GL_RED, GL_RED, GL_UNSIGNED_BYTE},
+ //{GL_RG, GL_COMPRESSED_RG, GL_RG, GL_COMPRESSED_RG, GL_RG, GL_RG, GL_UNSIGNED_BYTE},
+ //{GL_RGB, GL_COMPRESSED_RGB, GL_SRGB8, GL_COMPRESSED_SRGB, GL_RGB, GL_BGR, GL_UNSIGNED_BYTE},
+ //{GL_RGBA, GL_COMPRESSED_RGBA, GL_SRGB8_ALPHA8, GL_COMPRESSED_SRGB_ALPHA, GL_RGBA, GL_BGRA, GL_UNSIGNED_BYTE},
+
+ //{GL_RED, GL_COMPRESSED_RED, GL_RED, GL_COMPRESSED_RED, GL_RED, GL_RED, GL_UNSIGNED_SHORT},
+ //{GL_RG, GL_COMPRESSED_RG, GL_RG, GL_COMPRESSED_RG, GL_RG, GL_RG, GL_UNSIGNED_SHORT},
+ //{GL_RGB, GL_COMPRESSED_RGB, GL_SRGB8, GL_COMPRESSED_SRGB, GL_RGB, GL_BGR, GL_UNSIGNED_SHORT},
+ //{GL_RGBA, GL_COMPRESSED_RGBA, GL_SRGB8_ALPHA8, GL_COMPRESSED_SRGB_ALPHA, GL_RGBA, GL_BGRA, GL_UNSIGNED_SHORT},
+
+ //{GL_RED, GL_COMPRESSED_RED, GL_RED, GL_COMPRESSED_RED, GL_RED, GL_RED, GL_UNSIGNED_INT},
+ //{GL_RG, GL_COMPRESSED_RG, GL_RG, GL_COMPRESSED_RG, GL_RG, GL_RG, GL_UNSIGNED_INT},
+ //{GL_RGB, GL_COMPRESSED_RGB, GL_SRGB8, GL_COMPRESSED_SRGB, GL_RGB, GL_BGR, GL_UNSIGNED_INT},
+ //{GL_RGBA, GL_COMPRESSED_RGBA, GL_SRGB8_ALPHA8, GL_COMPRESSED_SRGB_ALPHA, GL_RGBA, GL_BGRA, GL_UNSIGNED_INT},
+
+ // Unsigned
+ {GL_RED, GL_COMPRESSED_RED, GL_RED, GL_COMPRESSED_RED, GL_RED, GL_RED, GL_UNSIGNED_BYTE},
+ {GL_RG, GL_COMPRESSED_RG, GL_RG, GL_COMPRESSED_RG, GL_RG, GL_RG, GL_UNSIGNED_BYTE},
+ {GL_RGB, GL_COMPRESSED_RGB, GL_SRGB8, GL_COMPRESSED_SRGB, GL_RGB, GL_BGR, GL_UNSIGNED_BYTE},
+ {GL_RGBA, GL_COMPRESSED_RGBA, GL_SRGB8_ALPHA8, GL_COMPRESSED_SRGB_ALPHA, GL_RGBA, GL_BGRA, GL_UNSIGNED_BYTE},
+
+ {GL_RED, GL_COMPRESSED_RED, GL_RED, GL_COMPRESSED_RED, GL_RED, GL_RED, GL_UNSIGNED_SHORT},
+ {GL_RG, GL_COMPRESSED_RG, GL_RG, GL_COMPRESSED_RG, GL_RG, GL_RG, GL_UNSIGNED_SHORT},
+ {GL_RGB, GL_COMPRESSED_RGB, GL_SRGB8, GL_COMPRESSED_SRGB, GL_RGB, GL_BGR, GL_UNSIGNED_SHORT},
+ {GL_RGBA, GL_COMPRESSED_RGBA, GL_SRGB8_ALPHA8, GL_COMPRESSED_SRGB_ALPHA, GL_RGBA, GL_BGRA, GL_UNSIGNED_SHORT},
+
+ {GL_RED, GL_COMPRESSED_RED, GL_RED, GL_COMPRESSED_RED, GL_RED, GL_RED, GL_UNSIGNED_INT},
+ {GL_RG, GL_COMPRESSED_RG, GL_RG, GL_COMPRESSED_RG, GL_RG, GL_RG, GL_UNSIGNED_INT},
+ {GL_RGB, GL_COMPRESSED_RGB, GL_SRGB8, GL_COMPRESSED_SRGB, GL_RGB, GL_BGR, GL_UNSIGNED_INT},
+ {GL_RGBA, GL_COMPRESSED_RGBA, GL_SRGB8_ALPHA8, GL_COMPRESSED_SRGB_ALPHA, GL_RGBA, GL_BGRA, GL_UNSIGNED_INT},
+
+ // Signed
+ {GL_RED, GL_COMPRESSED_RED, GL_RED, GL_COMPRESSED_RED, GL_RED, GL_RED, GL_BYTE},
+ {GL_RG, GL_COMPRESSED_RG, GL_RG, GL_COMPRESSED_RG, GL_RG, GL_RG, GL_BYTE},
+ {GL_RGB, GL_COMPRESSED_RGB, GL_SRGB8, GL_COMPRESSED_SRGB, GL_RGB, GL_BGR, GL_BYTE},
+ {GL_RGBA, GL_COMPRESSED_RGBA, GL_SRGB8_ALPHA8, GL_COMPRESSED_SRGB_ALPHA, GL_RGBA, GL_BGRA, GL_BYTE},
+
+ {GL_RED, GL_COMPRESSED_RED, GL_RED, GL_COMPRESSED_RED, GL_RED, GL_RED, GL_SHORT},
+ {GL_RG, GL_COMPRESSED_RG, GL_RG, GL_COMPRESSED_RG, GL_RG, GL_RG, GL_SHORT},
+ {GL_RGB, GL_COMPRESSED_RGB, GL_SRGB8, GL_COMPRESSED_SRGB, GL_RGB, GL_BGR, GL_SHORT},
+ {GL_RGBA, GL_COMPRESSED_RGBA, GL_SRGB8_ALPHA8, GL_COMPRESSED_SRGB_ALPHA, GL_RGBA, GL_BGRA, GL_SHORT},
+
+ {GL_RED, GL_COMPRESSED_RED, GL_RED, GL_COMPRESSED_RED, GL_RED, GL_RED, GL_INT},
+ {GL_RG, GL_COMPRESSED_RG, GL_RG, GL_COMPRESSED_RG, GL_RG, GL_RG, GL_INT},
+ {GL_RGB, GL_COMPRESSED_RGB, GL_SRGB8, GL_COMPRESSED_SRGB, GL_RGB, GL_BGR, GL_INT},
+ {GL_RGBA, GL_COMPRESSED_RGBA, GL_SRGB8_ALPHA8, GL_COMPRESSED_SRGB_ALPHA, GL_RGBA, GL_BGRA, GL_INT},
+
+ // Float
+ {GL_RED, GL_COMPRESSED_RED, GL_RED, GL_COMPRESSED_RED, GL_RED, GL_RED, GL_HALF_FLOAT},
+ {GL_RG, GL_COMPRESSED_RG, GL_RG, GL_COMPRESSED_RG, GL_RG, GL_RG, GL_HALF_FLOAT},
+ {GL_RGB, GL_COMPRESSED_RGB, GL_SRGB8, GL_COMPRESSED_SRGB, GL_RGB, GL_BGR, GL_HALF_FLOAT},
+ {GL_RGBA, GL_COMPRESSED_RGBA, GL_SRGB8_ALPHA8, GL_COMPRESSED_SRGB_ALPHA, GL_RGBA, GL_BGRA, GL_HALF_FLOAT},
+
+ {GL_RED, GL_COMPRESSED_RED, GL_RED, GL_COMPRESSED_RED, GL_RED, GL_RED, GL_FLOAT},
+ {GL_RG, GL_COMPRESSED_RG, GL_RG, GL_COMPRESSED_RG, GL_RG, GL_RG, GL_FLOAT},
+ {GL_RGB, GL_COMPRESSED_RGB, GL_SRGB8, GL_COMPRESSED_SRGB, GL_RGB, GL_BGR, GL_FLOAT},
+ {GL_RGBA, GL_COMPRESSED_RGBA, GL_SRGB8_ALPHA8, GL_COMPRESSED_SRGB_ALPHA, GL_RGBA, GL_BGRA, GL_FLOAT},
+
+ // Packed
+ {GL_RED, GL_COMPRESSED_RED, GL_RED, GL_COMPRESSED_RED, GL_RED, GL_RED, GL_HALF_FLOAT},
+ {GL_RGB9_E5, GL_RGB9_E5, GL_RED, GL_COMPRESSED_RED, GL_RED, GL_RED, GL_HALF_FLOAT},
+ {GL_R11F_G11F_B10F, GL_R11F_G11F_B10F, GL_RED, GL_COMPRESSED_RED, GL_RED, GL_RED, GL_HALF_FLOAT},
+ {GL_RED, GL_COMPRESSED_RED, GL_RED, GL_COMPRESSED_RED, GL_RED, GL_RED, GL_HALF_FLOAT},
+ {GL_RGBA4, GL_RGBA4, GL_RED, GL_COMPRESSED_RED, GL_RED, GL_RED, GL_HALF_FLOAT},
+ {GL_RGB10_A2, GL_RGB10_A2, GL_RED, GL_COMPRESSED_RED, GL_RED, GL_RED, GL_HALF_FLOAT},
+
+ // Depth
+ {GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT},
+ {GL_DEPTH_COMPONENT24, GL_DEPTH_COMPONENT24, GL_DEPTH_COMPONENT24, GL_DEPTH_COMPONENT24, GL_DEPTH_COMPONENT, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT},
+ {GL_DEPTH24_STENCIL8, GL_DEPTH24_STENCIL8, GL_DEPTH24_STENCIL8, GL_DEPTH24_STENCIL8, GL_DEPTH_COMPONENT, GL_DEPTH_STENCIL, GL_UNSIGNED_INT},
+ {GL_DEPTH_COMPONENT32F, GL_DEPTH_COMPONENT32F, GL_DEPTH_COMPONENT32F, GL_DEPTH_COMPONENT32F, GL_DEPTH_COMPONENT, GL_DEPTH_COMPONENT, GL_FLOAT},
+ {GL_DEPTH32F_STENCIL8, GL_DEPTH32F_STENCIL8, GL_DEPTH32F_STENCIL8, GL_DEPTH32F_STENCIL8, GL_DEPTH_COMPONENT, GL_DEPTH_STENCIL, GL_UNSIGNED_INT},
+
+ // Compressed formats
+ {GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, GL_NONE, GL_NONE, GL_NONE},
+ {GL_COMPRESSED_RGBA_S3TC_DXT3_EXT, GL_COMPRESSED_RGBA_S3TC_DXT3_EXT, GL_COMPRESSED_RGBA_S3TC_DXT3_EXT, GL_COMPRESSED_RGBA_S3TC_DXT3_EXT, GL_NONE, GL_NONE, GL_NONE},
+ {GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, GL_NONE, GL_NONE, GL_NONE},
+ {GL_COMPRESSED_RED_RGTC1, GL_COMPRESSED_RED_RGTC1, GL_COMPRESSED_RED_RGTC1, GL_COMPRESSED_RED_RGTC1, GL_NONE, GL_NONE, GL_NONE},
+ {GL_COMPRESSED_SIGNED_RED_RGTC1, GL_COMPRESSED_SIGNED_RED_RGTC1, GL_COMPRESSED_SIGNED_RED_RGTC1, GL_COMPRESSED_SIGNED_RED_RGTC1, GL_NONE, GL_NONE, GL_NONE},
+ {GL_COMPRESSED_RG_RGTC2, GL_COMPRESSED_RG_RGTC2, GL_COMPRESSED_RG_RGTC2, GL_COMPRESSED_RG_RGTC2, GL_NONE, GL_NONE, GL_NONE},
+ {GL_COMPRESSED_SIGNED_RG_RGTC2, GL_COMPRESSED_SIGNED_RG_RGTC2, GL_COMPRESSED_SIGNED_RG_RGTC2, GL_COMPRESSED_SIGNED_RG_RGTC2, GL_NONE, GL_NONE, GL_NONE},
+ {GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB, GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB, GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB, GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB, GL_NONE, GL_NONE, GL_NONE},
+ {GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB, GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB, GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB, GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB, GL_NONE, GL_NONE, GL_NONE},
+ {GL_COMPRESSED_RGBA_BPTC_UNORM_ARB, GL_COMPRESSED_RGBA_BPTC_UNORM_ARB, GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB, GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB, GL_NONE, GL_NONE, GL_NONE},
+ };
+
+ return Cast[Format];
+ }
+
+}//namespace detail
+
+ inline GLuint createTexture2D(std::string const & Filename)
+ {
+ gli::texture2D Texture = gli::load(Filename);
+ if(Texture.empty())
+ return 0;
+
+ detail::texture_desc TextureDesc = detail::gli2ogl_cast(Texture.format());
+
+ GLint Alignment = 0;
+ glGetIntegerv(GL_UNPACK_ALIGNMENT, &Alignment);
+
+ glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
+
+ GLuint Name = 0;
+ glGenTextures(1, &Name);
+ glBindTexture(GL_TEXTURE_2D, Name);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, Texture.levels() > 1 ? GL_NEAREST_MIPMAP_NEAREST : GL_NEAREST);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+
+ if(size(Texture, BIT_PER_PIXEL) == size(Texture, BLOCK_SIZE) << 3)
+ {
+ for(gli::texture2D::level_type Level = 0; Level < Texture.levels(); ++Level)
+ {
+ glTexImage2D(
+ GL_TEXTURE_2D,
+ GLint(Level),
+ TextureDesc.InternalFormat,
+ GLsizei(Texture[Level].dimensions().x),
+ GLsizei(Texture[Level].dimensions().y),
+ 0,
+ TextureDesc.ExternalFormatRev,
+ TextureDesc.Type,
+ Texture[Level].data());
+ }
+ }
+ else
+ {
+ for(gli::texture2D::level_type Level = 0; Level < Texture.levels(); ++Level)
+ {
+ glCompressedTexImage2D(
+ GL_TEXTURE_2D,
+ GLint(Level),
+ TextureDesc.InternalFormat,
+ GLsizei(Texture[Level].dimensions().x),
+ GLsizei(Texture[Level].dimensions().y),
+ 0,
+ GLsizei(Texture[Level].capacity()),
+ Texture[Level].data());
+ }
+ }
+
+ glBindTexture(GL_TEXTURE_2D, 0);
+
+ glPixelStorei(GL_UNPACK_ALIGNMENT, Alignment);
+
+ return Name;
+ }
+
+}//namespace gl_texture_2d
+}//namespace gtx
+}//namespace gli
diff --git a/src/third_party/glm/test/external/gli/gtx/gradient.hpp b/src/third_party/glm/test/external/gli/gtx/gradient.hpp
new file mode 100644
index 0000000..8a0b423
--- /dev/null
+++ b/src/third_party/glm/test/external/gli/gtx/gradient.hpp
@@ -0,0 +1,38 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Image Copyright (c) 2008 - 2011 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2008-12-19
+// Updated : 2010-01-09
+// Licence : This source is under MIT License
+// File : gli/gtx/gradient.hpp
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLI_GTX_GRADIENT_INCLUDED
+#define GLI_GTX_GRADIENT_INCLUDED
+
+#include "../gli.hpp"
+
+namespace gli{
+namespace gtx{
+namespace gradient
+{
+ texture2D radial(
+ texture2D::dimensions_type const & Size,
+ texture2D::texcoord_type const & Center,
+ float const & Radius,
+ texture2D::texcoord_type const & Focal);
+
+ texture2D linear(
+ texture2D::dimensions_type const & Size,
+ texture2D::texcoord_type const & Point0,
+ texture2D::texcoord_type const & Point1);
+
+}//namespace gradient
+}//namespace gtx
+}//namespace gli
+
+namespace gli{using namespace gtx::gradient;}
+
+#include "gradient.inl"
+
+#endif//GLI_GTX_GRADIENT_INCLUDED
diff --git a/src/third_party/glm/test/external/gli/gtx/gradient.inl b/src/third_party/glm/test/external/gli/gtx/gradient.inl
new file mode 100644
index 0000000..223b558
--- /dev/null
+++ b/src/third_party/glm/test/external/gli/gtx/gradient.inl
@@ -0,0 +1,74 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Image Copyright (c) 2008 - 2011 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2008-12-19
+// Updated : 2010-01-09
+// Licence : This source is under MIT License
+// File : gli/gtx/gradient.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace gli{
+namespace gtx{
+namespace gradient
+{
+ inline texture2D radial
+ (
+ texture2D::dimensions_type const & Size,
+ texture2D::texcoord_type const & Center,
+ float const & Radius,
+ texture2D::texcoord_type const & Focal
+ )
+ {
+ image2D Result(texture2D::dimensions_type(Size), gli::RGB8U);
+ glm::u8vec3 * DstData = (glm::u8vec3 *)Result.data();
+
+ for(std::size_t y = 0; y < Result.dimensions().y; ++y)
+ for(std::size_t x = 0; x < Result.dimensions().x; ++x)
+ {
+ float Value = glm::radialGradient(
+ Center * glm::vec2(Size),
+ Radius,
+ Focal * glm::vec2(Size),
+ glm::vec2(x, y));
+
+ std::size_t Index = x + y * Result.dimensions().x;
+
+ *(DstData + Index) = glm::u8vec3(glm::u8(glm::clamp(Value * 255.f, 0.f, 255.f)));
+ }
+
+ gli::texture2D Image(1);
+ Image[0] = Result;
+ return Image;
+ }
+
+ inline texture2D linear
+ (
+ texture2D::dimensions_type const & Size,
+ texture2D::texcoord_type const & Point0,
+ texture2D::texcoord_type const & Point1
+ )
+ {
+ image2D Result(texture2D::dimensions_type(Size), gli::RGB8U);
+ glm::u8vec3 * DstData = (glm::u8vec3 *)Result.data();
+
+ for(std::size_t y = 0; y < Result.dimensions().y; ++y)
+ for(std::size_t x = 0; x < Result.dimensions().x; ++x)
+ {
+ float Value = glm::linearGradient(
+ Point0 * glm::vec2(Size),
+ Point1 * glm::vec2(Size),
+ texture2D::texcoord_type(x, y));
+
+ std::size_t Index = x + y * Result.dimensions().x;
+
+ *(DstData + Index) = glm::u8vec3(glm::u8(glm::clamp(Value * 255.f, 0.f, 255.f)));
+ }
+
+ gli::texture2D Image(1);
+ Image[0] = Result;
+ return Image;
+ }
+
+}//namespace gradient
+}//namespace gtx
+}//namespace gli
diff --git a/src/third_party/glm/test/external/gli/gtx/loader.hpp b/src/third_party/glm/test/external/gli/gtx/loader.hpp
new file mode 100644
index 0000000..911d965
--- /dev/null
+++ b/src/third_party/glm/test/external/gli/gtx/loader.hpp
@@ -0,0 +1,37 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Image Copyright (c) 2008 - 2011 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2010-09-08
+// Updated : 2010-09-27
+// Licence : This source is under MIT License
+// File : gli/gtx/loader.hpp
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLI_GTX_LOADER_INCLUDED
+#define GLI_GTX_LOADER_INCLUDED
+
+#include "../gli.hpp"
+#include "../gtx/loader_dds9.hpp"
+#include "../gtx/loader_dds10.hpp"
+#include "../gtx/loader_tga.hpp"
+
+namespace gli{
+namespace gtx{
+namespace loader
+{
+ inline texture2D load(
+ std::string const & Filename);
+
+ inline void save(
+ texture2D const & Image,
+ std::string const & Filename);
+
+}//namespace loader
+}//namespace gtx
+}//namespace gli
+
+namespace gli{using namespace gtx::loader;}
+
+#include "loader.inl"
+
+#endif//GLI_GTX_LOADER_INCLUDED
diff --git a/src/third_party/glm/test/external/gli/gtx/loader.inl b/src/third_party/glm/test/external/gli/gtx/loader.inl
new file mode 100644
index 0000000..4f45887
--- /dev/null
+++ b/src/third_party/glm/test/external/gli/gtx/loader.inl
@@ -0,0 +1,46 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Image Copyright (c) 2008 - 2011 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2010-09-08
+// Updated : 2010-09-27
+// Licence : This source is under MIT License
+// File : gli/gtx/loader.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace gli{
+namespace gtx{
+namespace loader
+{
+ inline texture2D load
+ (
+ std::string const & Filename
+ )
+ {
+ if(Filename.find(".dds") != std::string::npos)
+ return loadDDS10(Filename);
+ else if(Filename.find(".tga") != std::string::npos)
+ return loadTGA(Filename);
+ else
+ {
+ assert(0); // File format not supported
+ return texture2D();
+ }
+ }
+
+ inline void save
+ (
+ texture2D const & Image,
+ std::string const & Filename
+ )
+ {
+ if(Filename.find(".dds") != std::string::npos)
+ saveDDS10(Image, Filename);
+ else if(Filename.find(".tga") != std::string::npos)
+ saveTGA(Image, Filename);
+ else
+ assert(0); // File format not supported
+ }
+
+}//namespace loader
+}//namespace gtx
+}//namespace gli
diff --git a/src/third_party/glm/test/external/gli/gtx/loader_dds10.hpp b/src/third_party/glm/test/external/gli/gtx/loader_dds10.hpp
new file mode 100644
index 0000000..190ffeb
--- /dev/null
+++ b/src/third_party/glm/test/external/gli/gtx/loader_dds10.hpp
@@ -0,0 +1,35 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Image Copyright (c) 2008 - 2011 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2010-09-26
+// Updated : 2010-09-27
+// Licence : This source is under MIT License
+// File : gli/gtx/loader_dds10.hpp
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLI_GTX_LOADER_DDS10_INCLUDED
+#define GLI_GTX_LOADER_DDS10_INCLUDED
+
+#include "../gli.hpp"
+#include <fstream>
+
+namespace gli{
+namespace gtx{
+namespace loader_dds10
+{
+ texture2D loadDDS10(
+ std::string const & Filename);
+
+ void saveDDS10(
+ texture2D const & Image,
+ std::string const & Filename);
+
+}//namespace loader_dds10
+}//namespace gtx
+}//namespace gli
+
+namespace gli{using namespace gtx::loader_dds10;}
+
+#include "loader_dds10.inl"
+
+#endif//GLI_GTX_LOADER_DDS10_INCLUDED
diff --git a/src/third_party/glm/test/external/gli/gtx/loader_dds10.inl b/src/third_party/glm/test/external/gli/gtx/loader_dds10.inl
new file mode 100644
index 0000000..58df10f
--- /dev/null
+++ b/src/third_party/glm/test/external/gli/gtx/loader_dds10.inl
@@ -0,0 +1,595 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Image Copyright (c) 2008 - 2011 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2010-09-26
+// Updated : 2010-09-27
+// Licence : This source is under MIT License
+// File : gli/gtx/loader_dds10.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace gli{
+namespace gtx{
+namespace loader_dds10{
+namespace detail
+{
+ // DDS Documentation
+ /*
+ http://msdn.microsoft.com/en-us/library/bb943991(VS.85).aspx#File_Layout1
+ http://msdn.microsoft.com/en-us/library/bb943992.aspx
+ */
+
+ #define GLI_MAKEFOURCC(ch0, ch1, ch2, ch3) \
+ (glm::uint32)( \
+ (((glm::uint32)(glm::uint8)(ch3) << 24) & 0xFF000000) | \
+ (((glm::uint32)(glm::uint8)(ch2) << 16) & 0x00FF0000) | \
+ (((glm::uint32)(glm::uint8)(ch1) << 8) & 0x0000FF00) | \
+ ((glm::uint32)(glm::uint8)(ch0) & 0x000000FF) )
+
+ enum DXGI_FORMAT
+ {
+ DXGI_FORMAT_UNKNOWN = 0,
+ DXGI_FORMAT_R32G32B32A32_TYPELESS = 1,
+ DXGI_FORMAT_R32G32B32A32_FLOAT = 2,
+ DXGI_FORMAT_R32G32B32A32_UINT = 3,
+ DXGI_FORMAT_R32G32B32A32_SINT = 4,
+ DXGI_FORMAT_R32G32B32_TYPELESS = 5,
+ DXGI_FORMAT_R32G32B32_FLOAT = 6,
+ DXGI_FORMAT_R32G32B32_UINT = 7,
+ DXGI_FORMAT_R32G32B32_SINT = 8,
+ DXGI_FORMAT_R16G16B16A16_TYPELESS = 9,
+ DXGI_FORMAT_R16G16B16A16_FLOAT = 10,
+ DXGI_FORMAT_R16G16B16A16_UNORM = 11,
+ DXGI_FORMAT_R16G16B16A16_UINT = 12,
+ DXGI_FORMAT_R16G16B16A16_SNORM = 13,
+ DXGI_FORMAT_R16G16B16A16_SINT = 14,
+ DXGI_FORMAT_R32G32_TYPELESS = 15,
+ DXGI_FORMAT_R32G32_FLOAT = 16,
+ DXGI_FORMAT_R32G32_UINT = 17,
+ DXGI_FORMAT_R32G32_SINT = 18,
+ DXGI_FORMAT_R32G8X24_TYPELESS = 19,
+ DXGI_FORMAT_D32_FLOAT_S8X24_UINT = 20,
+ DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS = 21,
+ DXGI_FORMAT_X32_TYPELESS_G8X24_UINT = 22,
+ DXGI_FORMAT_R10G10B10A2_TYPELESS = 23,
+ DXGI_FORMAT_R10G10B10A2_UNORM = 24,
+ DXGI_FORMAT_R10G10B10A2_UINT = 25,
+ DXGI_FORMAT_R11G11B10_FLOAT = 26,
+ DXGI_FORMAT_R8G8B8A8_TYPELESS = 27,
+ DXGI_FORMAT_R8G8B8A8_UNORM = 28,
+ DXGI_FORMAT_R8G8B8A8_UNORM_SRGB = 29,
+ DXGI_FORMAT_R8G8B8A8_UINT = 30,
+ DXGI_FORMAT_R8G8B8A8_SNORM = 31,
+ DXGI_FORMAT_R8G8B8A8_SINT = 32,
+ DXGI_FORMAT_R16G16_TYPELESS = 33,
+ DXGI_FORMAT_R16G16_FLOAT = 34,
+ DXGI_FORMAT_R16G16_UNORM = 35,
+ DXGI_FORMAT_R16G16_UINT = 36,
+ DXGI_FORMAT_R16G16_SNORM = 37,
+ DXGI_FORMAT_R16G16_SINT = 38,
+ DXGI_FORMAT_R32_TYPELESS = 39,
+ DXGI_FORMAT_D32_FLOAT = 40,
+ DXGI_FORMAT_R32_FLOAT = 41,
+ DXGI_FORMAT_R32_UINT = 42,
+ DXGI_FORMAT_R32_SINT = 43,
+ DXGI_FORMAT_R24G8_TYPELESS = 44,
+ DXGI_FORMAT_D24_UNORM_S8_UINT = 45,
+ DXGI_FORMAT_R24_UNORM_X8_TYPELESS = 46,
+ DXGI_FORMAT_X24_TYPELESS_G8_UINT = 47,
+ DXGI_FORMAT_R8G8_TYPELESS = 48,
+ DXGI_FORMAT_R8G8_UNORM = 49,
+ DXGI_FORMAT_R8G8_UINT = 50,
+ DXGI_FORMAT_R8G8_SNORM = 51,
+ DXGI_FORMAT_R8G8_SINT = 52,
+ DXGI_FORMAT_R16_TYPELESS = 53,
+ DXGI_FORMAT_R16_FLOAT = 54,
+ DXGI_FORMAT_D16_UNORM = 55,
+ DXGI_FORMAT_R16_UNORM = 56,
+ DXGI_FORMAT_R16_UINT = 57,
+ DXGI_FORMAT_R16_SNORM = 58,
+ DXGI_FORMAT_R16_SINT = 59,
+ DXGI_FORMAT_R8_TYPELESS = 60,
+ DXGI_FORMAT_R8_UNORM = 61,
+ DXGI_FORMAT_R8_UINT = 62,
+ DXGI_FORMAT_R8_SNORM = 63,
+ DXGI_FORMAT_R8_SINT = 64,
+ DXGI_FORMAT_A8_UNORM = 65,
+ DXGI_FORMAT_R1_UNORM = 66,
+ DXGI_FORMAT_R9G9B9E5_SHAREDEXP = 67,
+ DXGI_FORMAT_R8G8_B8G8_UNORM = 68,
+ DXGI_FORMAT_G8R8_G8B8_UNORM = 69,
+ DXGI_FORMAT_BC1_TYPELESS = 70,
+ DXGI_FORMAT_BC1_UNORM = 71,
+ DXGI_FORMAT_BC1_UNORM_SRGB = 72,
+ DXGI_FORMAT_BC2_TYPELESS = 73,
+ DXGI_FORMAT_BC2_UNORM = 74,
+ DXGI_FORMAT_BC2_UNORM_SRGB = 75,
+ DXGI_FORMAT_BC3_TYPELESS = 76,
+ DXGI_FORMAT_BC3_UNORM = 77,
+ DXGI_FORMAT_BC3_UNORM_SRGB = 78,
+ DXGI_FORMAT_BC4_TYPELESS = 79,
+ DXGI_FORMAT_BC4_UNORM = 80,
+ DXGI_FORMAT_BC4_SNORM = 81,
+ DXGI_FORMAT_BC5_TYPELESS = 82,
+ DXGI_FORMAT_BC5_UNORM = 83,
+ DXGI_FORMAT_BC5_SNORM = 84,
+ DXGI_FORMAT_B5G6R5_UNORM = 85,
+ DXGI_FORMAT_B5G5R5A1_UNORM = 86,
+ DXGI_FORMAT_B8G8R8A8_UNORM = 87,
+ DXGI_FORMAT_B8G8R8X8_UNORM = 88,
+ DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM = 89,
+ DXGI_FORMAT_B8G8R8A8_TYPELESS = 90,
+ DXGI_FORMAT_B8G8R8A8_UNORM_SRGB = 91,
+ DXGI_FORMAT_B8G8R8X8_TYPELESS = 92,
+ DXGI_FORMAT_B8G8R8X8_UNORM_SRGB = 93,
+ DXGI_FORMAT_BC6H_TYPELESS = 94,
+ DXGI_FORMAT_BC6H_UF16 = 95,
+ DXGI_FORMAT_BC6H_SF16 = 96,
+ DXGI_FORMAT_BC7_TYPELESS = 97,
+ DXGI_FORMAT_BC7_UNORM = 98,
+ DXGI_FORMAT_BC7_UNORM_SRGB = 99,
+ DXGI_FORMAT_FORCE_UINT = 0xffffffffUL
+ };
+
+ enum D3D10_RESOURCE_DIMENSION
+ {
+ D3D10_RESOURCE_DIMENSION_UNKNOWN = 0,
+ D3D10_RESOURCE_DIMENSION_BUFFER = 1,
+ D3D10_RESOURCE_DIMENSION_TEXTURE1D = 2,
+ D3D10_RESOURCE_DIMENSION_TEXTURE2D = 3,
+ D3D10_RESOURCE_DIMENSION_TEXTURE3D = 4
+ };
+
+ enum D3D10_RESOURCE_MISC_FLAG
+ {
+ D3D10_RESOURCE_MISC_GENERATE_MIPS = 0x1L,
+ D3D10_RESOURCE_MISC_SHARED = 0x2L,
+ D3D10_RESOURCE_MISC_TEXTURECUBE = 0x4L,
+ D3D10_RESOURCE_MISC_SHARED_KEYEDMUTEX = 0x10L,
+ D3D10_RESOURCE_MISC_GDI_COMPATIBLE = 0x20L
+ };
+
+ enum dds_format
+ {
+ GLI_D3DFMT_R8G8B8 = 20,
+ GLI_D3DFMT_A8R8G8B8 = 21,
+ GLI_D3DFMT_X8R8G8B8 = 22,
+ GLI_D3DFMT_A8 = 28,
+ GLI_D3DFMT_A2B10G10R10 = 31,
+ GLI_D3DFMT_A8B8G8R8 = 32,
+ GLI_D3DFMT_X8B8G8R8 = 33,
+ GLI_D3DFMT_G16R16 = 34,
+ GLI_D3DFMT_A2R10G10B10 = 35,
+ GLI_D3DFMT_A16B16G16R16 = 36,
+
+ GLI_D3DFMT_L8 = 50,
+ GLI_D3DFMT_A8L8 = 51,
+
+ GLI_D3DFMT_DXT1 = GLI_MAKEFOURCC('D', 'X', 'T', '1'),
+ GLI_D3DFMT_DXT2 = GLI_MAKEFOURCC('D', 'X', 'T', '2'),
+ GLI_D3DFMT_DXT3 = GLI_MAKEFOURCC('D', 'X', 'T', '3'),
+ GLI_D3DFMT_DXT4 = GLI_MAKEFOURCC('D', 'X', 'T', '4'),
+ GLI_D3DFMT_DXT5 = GLI_MAKEFOURCC('D', 'X', 'T', '5'),
+ GLI_D3DFMT_DX10 = GLI_MAKEFOURCC('D', 'X', '1', '0'),
+
+ GLI_D3DFMT_D32 = 71,
+ GLI_D3DFMT_D24S8 = 75,
+ GLI_D3DFMT_D24X8 = 77,
+ GLI_D3DFMT_D16 = 80,
+ GLI_D3DFMT_L16 = 81,
+ GLI_D3DFMT_D32F_LOCKABLE = 82,
+ GLI_D3DFMT_D24FS8 = 83,
+
+ GLI_D3DFMT_R16F = 111,
+ GLI_D3DFMT_G16R16F = 112,
+ GLI_D3DFMT_A16B16G16R16F = 113,
+
+ GLI_D3DFMT_R32F = 114,
+ GLI_D3DFMT_G32R32F = 115,
+ GLI_D3DFMT_A32B32G32R32F = 116
+ };
+
+ struct ddsHeader10
+ {
+ DXGI_FORMAT dxgiFormat;
+ D3D10_RESOURCE_DIMENSION resourceDimension;
+ glm::uint32 miscFlag; // D3D10_RESOURCE_MISC_GENERATE_MIPS
+ glm::uint32 arraySize;
+ glm::uint32 reserved;
+ };
+
+
+ inline gli::format format_fourcc2gli_cast(glm::uint32 const & FourCC)
+ {
+ switch(FourCC)
+ {
+ case loader_dds9::detail::GLI_FOURCC_DXT1:
+ return DXT1;
+ case loader_dds9::detail::GLI_FOURCC_DXT2:
+ case loader_dds9::detail::GLI_FOURCC_DXT3:
+ return DXT3;
+ case loader_dds9::detail::GLI_FOURCC_DXT4:
+ case loader_dds9::detail::GLI_FOURCC_DXT5:
+ return DXT5;
+ case loader_dds9::detail::GLI_FOURCC_R16F:
+ return R16F;
+ case loader_dds9::detail::GLI_FOURCC_G16R16F:
+ return RG16F;
+ case loader_dds9::detail::GLI_FOURCC_A16B16G16R16F:
+ return RGBA16F;
+ case loader_dds9::detail::GLI_FOURCC_R32F:
+ return R32F;
+ case loader_dds9::detail::GLI_FOURCC_G32R32F:
+ return RG32F;
+ case loader_dds9::detail::GLI_FOURCC_A32B32G32R32F:
+ return RGBA32F;
+
+ case loader_dds9::detail::GLI_D3DFMT_R8G8B8:
+ return RGB8U;
+ case loader_dds9::detail::GLI_D3DFMT_A8R8G8B8:
+ case loader_dds9::detail::GLI_D3DFMT_X8R8G8B8:
+ case loader_dds9::detail::GLI_D3DFMT_A8B8G8R8:
+ case loader_dds9::detail::GLI_D3DFMT_X8B8G8R8:
+ return RGBA8U;
+ case loader_dds9::detail::GLI_D3DFMT_R5G6B5:
+ return R5G6B5;
+ case loader_dds9::detail::GLI_D3DFMT_A4R4G4B4:
+ case loader_dds9::detail::GLI_D3DFMT_X4R4G4B4:
+ return RGBA4;
+ case loader_dds9::detail::GLI_D3DFMT_G16R16:
+ return RG16U;
+ case loader_dds9::detail::GLI_D3DFMT_A16B16G16R16:
+ return RGBA16U;
+ case loader_dds9::detail::GLI_D3DFMT_A2R10G10B10:
+ case loader_dds9::detail::GLI_D3DFMT_A2B10G10R10:
+ return RGB10A2;
+ default:
+ assert(0);
+ return FORMAT_NULL;
+ }
+ }
+
+ inline DXGI_FORMAT format_gli2dds_cast(gli::format const & Format)
+ {
+ DXGI_FORMAT Cast[] =
+ {
+ DXGI_FORMAT_UNKNOWN, //FORMAT_NULL,
+
+ // Unsigned integer formats
+ DXGI_FORMAT_R8_UINT, //R8U,
+ DXGI_FORMAT_R8G8_UINT, //RG8U,
+ DXGI_FORMAT_UNKNOWN, //RGB8U,
+ DXGI_FORMAT_R8G8B8A8_UINT, //RGBA8U,
+
+ DXGI_FORMAT_R16_UINT, //R16U,
+ DXGI_FORMAT_R16G16_UINT, //RG16U,
+ DXGI_FORMAT_UNKNOWN, //RGB16U,
+ DXGI_FORMAT_R16G16B16A16_UINT, //RGBA16U,
+
+ DXGI_FORMAT_R32_UINT, //R32U,
+ DXGI_FORMAT_R32G32_UINT, //RG32U,
+ DXGI_FORMAT_R32G32B32_UINT, //RGB32U,
+ DXGI_FORMAT_R32G32B32A32_UINT, //RGBA32U,
+
+ // Signed integer formats
+ DXGI_FORMAT_R8_SINT, //R8I,
+ DXGI_FORMAT_R8G8_SINT, //RG8I,
+ DXGI_FORMAT_UNKNOWN, //RGB8I,
+ DXGI_FORMAT_R8G8B8A8_SINT, //RGBA8I,
+
+ DXGI_FORMAT_R16_SINT, //R16I,
+ DXGI_FORMAT_R16G16_SINT, //RG16I,
+ DXGI_FORMAT_UNKNOWN, //RGB16I,
+ DXGI_FORMAT_R16G16B16A16_SINT, //RGBA16I,
+
+ DXGI_FORMAT_R32_SINT, //R32I,
+ DXGI_FORMAT_R32G32_SINT, //RG32I,
+ DXGI_FORMAT_R32G32B32_SINT, //RGB32I,
+ DXGI_FORMAT_R32G32B32A32_SINT, //RGBA32I,
+
+ // Floating formats
+ DXGI_FORMAT_R16_FLOAT, //R16F,
+ DXGI_FORMAT_R16G16_FLOAT, //RG16F,
+ DXGI_FORMAT_UNKNOWN, //RGB16F,
+ DXGI_FORMAT_R16G16B16A16_FLOAT, //RGBA16F,
+
+ DXGI_FORMAT_R32_FLOAT, //R32F,
+ DXGI_FORMAT_R32G32_FLOAT, //RG32F,
+ DXGI_FORMAT_R32G32B32_FLOAT, //RGB32F,
+ DXGI_FORMAT_R32G32B32A32_FLOAT, //RGBA32F,
+
+ // Packed formats
+ DXGI_FORMAT_UNKNOWN, //RGBE8,
+ DXGI_FORMAT_R9G9B9E5_SHAREDEXP, //RGB9E5,
+ DXGI_FORMAT_R11G11B10_FLOAT,
+ DXGI_FORMAT_B5G6R5_UNORM, //R5G6B5,
+ DXGI_FORMAT_UNKNOWN, //RGBA4,
+ DXGI_FORMAT_R10G10B10A2_TYPELESS, //RGB10A2,
+
+ // Depth formats
+ DXGI_FORMAT_D16_UNORM, //D16,
+ DXGI_FORMAT_D24_UNORM_S8_UINT, //D24X8,
+ DXGI_FORMAT_D24_UNORM_S8_UINT, //D24S8,
+ DXGI_FORMAT_D32_FLOAT, //D32F,
+ DXGI_FORMAT_D32_FLOAT_S8X24_UINT, //D32FS8X24,
+
+ // Compressed formats
+ DXGI_FORMAT_BC1_UNORM, //DXT1,
+ DXGI_FORMAT_BC2_UNORM, //DXT3,
+ DXGI_FORMAT_BC3_UNORM, //DXT5,
+ DXGI_FORMAT_BC4_UNORM, //ATI1N_UNORM,
+ DXGI_FORMAT_BC4_SNORM, //ATI1N_SNORM,
+ DXGI_FORMAT_BC5_UNORM, //ATI2N_UNORM,
+ DXGI_FORMAT_BC5_SNORM, //ATI2N_SNORM,
+ DXGI_FORMAT_BC6H_UF16, //BP_FLOAT,
+ DXGI_FORMAT_BC6H_SF16, //BP_FLOAT,
+ DXGI_FORMAT_BC7_UNORM //BP,
+ };
+
+ return Cast[Format];
+ }
+
+ inline gli::format format_dds2gli_cast(DXGI_FORMAT const & Format)
+ {
+ gli::format Cast[] =
+ {
+ gli::FORMAT_NULL, //DXGI_FORMAT_UNKNOWN = 0,
+ gli::RGBA32U, //DXGI_FORMAT_R32G32B32A32_TYPELESS = 1,
+ gli::RGBA32F, //DXGI_FORMAT_R32G32B32A32_FLOAT = 2,
+ gli::RGBA32U, //DXGI_FORMAT_R32G32B32A32_UINT = 3,
+ gli::RGBA32I, //DXGI_FORMAT_R32G32B32A32_SINT = 4,
+ gli::RGB32U, //DXGI_FORMAT_R32G32B32_TYPELESS = 5,
+ gli::RGB32F, //DXGI_FORMAT_R32G32B32_FLOAT = 6,
+ gli::RGB32U, //DXGI_FORMAT_R32G32B32_UINT = 7,
+ gli::RGB32I, //DXGI_FORMAT_R32G32B32_SINT = 8,
+ gli::RGBA16U, //DXGI_FORMAT_R16G16B16A16_TYPELESS = 9,
+ gli::RGBA16F, //DXGI_FORMAT_R16G16B16A16_FLOAT = 10,
+ gli::RGBA16U, //DXGI_FORMAT_R16G16B16A16_UNORM = 11,
+ gli::RGBA16I, //DXGI_FORMAT_R16G16B16A16_UINT = 12,
+ gli::RGBA16I, //DXGI_FORMAT_R16G16B16A16_SNORM = 13,
+ gli::RGBA16I, //DXGI_FORMAT_R16G16B16A16_SINT = 14,
+ gli::RG32U, //DXGI_FORMAT_R32G32_TYPELESS = 15,
+ gli::RG32F, //DXGI_FORMAT_R32G32_FLOAT = 16,
+ gli::RG32U, //DXGI_FORMAT_R32G32_UINT = 17,
+ gli::RG32I, //DXGI_FORMAT_R32G32_SINT = 18,
+ gli::FORMAT_NULL, //DXGI_FORMAT_R32G8X24_TYPELESS = 19,
+ gli::D32FS8X24, //DXGI_FORMAT_D32_FLOAT_S8X24_UINT = 20,
+ gli::FORMAT_NULL, //DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS = 21,
+ gli::FORMAT_NULL, //DXGI_FORMAT_X32_TYPELESS_G8X24_UINT = 22,
+ gli::RGB10A2, //DXGI_FORMAT_R10G10B10A2_TYPELESS = 23,
+ gli::RGB10A2, //DXGI_FORMAT_R10G10B10A2_UNORM = 24,
+ gli::RGB10A2, //DXGI_FORMAT_R10G10B10A2_UINT = 25,
+ gli::RG11B10F, //DXGI_FORMAT_R11G11B10_FLOAT = 26,
+ gli::RGBA8U, //DXGI_FORMAT_R8G8B8A8_TYPELESS = 27,
+ gli::RGBA8U, //DXGI_FORMAT_R8G8B8A8_UNORM = 28,
+ gli::RGBA8U, //DXGI_FORMAT_R8G8B8A8_UNORM_SRGB = 29,
+ gli::RGBA8U, //DXGI_FORMAT_R8G8B8A8_UINT = 30,
+ gli::RGBA8I, //DXGI_FORMAT_R8G8B8A8_SNORM = 31,
+ gli::RGBA8I, //DXGI_FORMAT_R8G8B8A8_SINT = 32,
+ gli::RG16U, //DXGI_FORMAT_R16G16_TYPELESS = 33,
+ gli::RG16F, //DXGI_FORMAT_R16G16_FLOAT = 34,
+ gli::RG16U, //DXGI_FORMAT_R16G16_UNORM = 35,
+ gli::RG16U, //DXGI_FORMAT_R16G16_UINT = 36,
+ gli::RG16I, //DXGI_FORMAT_R16G16_SNORM = 37,
+ gli::RG16I, //DXGI_FORMAT_R16G16_SINT = 38,
+ gli::R32F, //DXGI_FORMAT_R32_TYPELESS = 39,
+ gli::D32F, //DXGI_FORMAT_D32_FLOAT = 40,
+ gli::R32F, //DXGI_FORMAT_R32_FLOAT = 41,
+ gli::R32U, //DXGI_FORMAT_R32_UINT = 42,
+ gli::R32I, //DXGI_FORMAT_R32_SINT = 43,
+ gli::FORMAT_NULL, //DXGI_FORMAT_R24G8_TYPELESS = 44,
+ gli::FORMAT_NULL, //DXGI_FORMAT_D24_UNORM_S8_UINT = 45,
+ gli::FORMAT_NULL, //DXGI_FORMAT_R24_UNORM_X8_TYPELESS = 46,
+ gli::FORMAT_NULL, //DXGI_FORMAT_X24_TYPELESS_G8_UINT = 47,
+ gli::RG8U, //DXGI_FORMAT_R8G8_TYPELESS = 48,
+ gli::RG8U, //DXGI_FORMAT_R8G8_UNORM = 49,
+ gli::RG8U, //DXGI_FORMAT_R8G8_UINT = 50,
+ gli::RG8I, //DXGI_FORMAT_R8G8_SNORM = 51,
+ gli::RG8I, //DXGI_FORMAT_R8G8_SINT = 52,
+ gli::R16U, //DXGI_FORMAT_R16_TYPELESS = 53,
+ gli::R16F, //DXGI_FORMAT_R16_FLOAT = 54,
+ gli::D16, //DXGI_FORMAT_D16_UNORM = 55,
+ gli::R16U, //DXGI_FORMAT_R16_UNORM = 56,
+ gli::R16U, //DXGI_FORMAT_R16_UINT = 57,
+ gli::R16I, //DXGI_FORMAT_R16_SNORM = 58,
+ gli::R16I, //DXGI_FORMAT_R16_SINT = 59,
+ gli::R8U, //DXGI_FORMAT_R8_TYPELESS = 60,
+ gli::R8U, //DXGI_FORMAT_R8_UNORM = 61,
+ gli::R8U, //DXGI_FORMAT_R8_UINT = 62,
+ gli::R8I, //DXGI_FORMAT_R8_SNORM = 63,
+ gli::R8I, //DXGI_FORMAT_R8_SINT = 64,
+ gli::R8U, //DXGI_FORMAT_A8_UNORM = 65,
+ gli::FORMAT_NULL, //DXGI_FORMAT_R1_UNORM = 66,
+ gli::RGB9E5, //DXGI_FORMAT_R9G9B9E5_SHAREDEXP = 67,
+ gli::FORMAT_NULL, //DXGI_FORMAT_R8G8_B8G8_UNORM = 68,
+ gli::FORMAT_NULL, //DXGI_FORMAT_G8R8_G8B8_UNORM = 69,
+ gli::DXT1, //DXGI_FORMAT_BC1_TYPELESS = 70,
+ gli::DXT1, //DXGI_FORMAT_BC1_UNORM = 71,
+ gli::DXT1, //DXGI_FORMAT_BC1_UNORM_SRGB = 72,
+ gli::DXT3, //DXGI_FORMAT_BC2_TYPELESS = 73,
+ gli::DXT3, //DXGI_FORMAT_BC2_UNORM = 74,
+ gli::DXT3, //DXGI_FORMAT_BC2_UNORM_SRGB = 75,
+ gli::DXT5, //DXGI_FORMAT_BC3_TYPELESS = 76,
+ gli::DXT5, //DXGI_FORMAT_BC3_UNORM = 77,
+ gli::DXT5, //DXGI_FORMAT_BC3_UNORM_SRGB = 78,
+ gli::ATI1N_UNORM, //DXGI_FORMAT_BC4_TYPELESS = 79,
+ gli::ATI1N_UNORM, //DXGI_FORMAT_BC4_UNORM = 80,
+ gli::ATI1N_SNORM, //DXGI_FORMAT_BC4_SNORM = 81,
+ gli::ATI2N_UNORM, //DXGI_FORMAT_BC5_TYPELESS = 82,
+ gli::ATI2N_UNORM, //DXGI_FORMAT_BC5_UNORM = 83,
+ gli::ATI2N_SNORM, //DXGI_FORMAT_BC5_SNORM = 84,
+ gli::FORMAT_NULL, //DXGI_FORMAT_B5G6R5_UNORM = 85,
+ gli::FORMAT_NULL, //DXGI_FORMAT_B5G5R5A1_UNORM = 86,
+ gli::RGBA8U, //DXGI_FORMAT_B8G8R8A8_UNORM = 87,
+ gli::RGBA8U, //DXGI_FORMAT_B8G8R8X8_UNORM = 88,
+ gli::FORMAT_NULL, //DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM = 89,
+ gli::RGBA8U, //DXGI_FORMAT_B8G8R8A8_TYPELESS = 90,
+ gli::RGBA8U, //DXGI_FORMAT_B8G8R8A8_UNORM_SRGB = 91,
+ gli::RGBA8U, //DXGI_FORMAT_B8G8R8X8_TYPELESS = 92,
+ gli::RGBA8U, //DXGI_FORMAT_B8G8R8X8_UNORM_SRGB = 93,
+ gli::BP_UF16, //DXGI_FORMAT_BC6H_TYPELESS = 94,
+ gli::BP_UF16, //DXGI_FORMAT_BC6H_UF16 = 95,
+ gli::BP_SF16, //DXGI_FORMAT_BC6H_SF16 = 96,
+ gli::BP, //DXGI_FORMAT_BC7_TYPELESS = 97,
+ gli::BP, //DXGI_FORMAT_BC7_UNORM = 98,
+ gli::BP, //DXGI_FORMAT_BC7_UNORM_SRGB = 99,
+ gli::R32U //DXGI_FORMAT_FORCE_UINT = 0xffffffffUL
+ };
+
+ return Cast[Format];
+ }
+
+}//namespace detail
+
+ inline texture2D loadDDS10
+ (
+ std::string const & Filename
+ )
+ {
+ std::ifstream FileIn(Filename.c_str(), std::ios::in | std::ios::binary);
+ if(FileIn.fail())
+ return texture2D();
+
+ loader_dds9::detail::ddsHeader HeaderDesc;
+ detail::ddsHeader10 HeaderDesc10;
+ char Magic[4];
+
+ //* Read magic number and check if valid .dds file
+ FileIn.read((char*)&Magic, sizeof(Magic));
+
+ assert(strncmp(Magic, "DDS ", 4) == 0);
+
+ // Get the surface descriptor
+ FileIn.read((char*)&HeaderDesc, sizeof(HeaderDesc));
+ if(HeaderDesc.format.flags & loader_dds9::detail::GLI_DDPF_FOURCC && HeaderDesc.format.fourCC == loader_dds9::detail::GLI_FOURCC_DX10)
+ FileIn.read((char*)&HeaderDesc10, sizeof(HeaderDesc10));
+
+ loader_dds9::detail::DDLoader Loader;
+ if(HeaderDesc.format.fourCC == loader_dds9::detail::GLI_FOURCC_DX10)
+ Loader.Format = detail::format_dds2gli_cast(HeaderDesc10.dxgiFormat);
+ else if(HeaderDesc.format.flags & loader_dds9::detail::GLI_DDPF_FOURCC)
+ Loader.Format = detail::format_fourcc2gli_cast(HeaderDesc.format.fourCC);
+ else
+ {
+ switch(HeaderDesc.format.bpp)
+ {
+ case 8:
+ Loader.Format = R8U;
+ break;
+ case 16:
+ Loader.Format = RG8U;
+ break;
+ case 24:
+ Loader.Format = RGB8U;
+ break;
+ case 32:
+ Loader.Format = RGBA8U;
+ break;
+ }
+ }
+ Loader.BlockSize = size(image2D(texture2D::dimensions_type(0), Loader.Format), BLOCK_SIZE);
+ Loader.BPP = size(image2D(image2D::dimensions_type(0), Loader.Format), BIT_PER_PIXEL);
+
+ std::size_t Width = HeaderDesc.width;
+ std::size_t Height = HeaderDesc.height;
+
+ gli::format Format = Loader.Format;
+
+ std::streamoff Curr = FileIn.tellg();
+ FileIn.seekg(0, std::ios_base::end);
+ std::streamoff End = FileIn.tellg();
+ FileIn.seekg(Curr, std::ios_base::beg);
+
+ std::vector<glm::byte> Data(std::size_t(End - Curr), 0);
+ std::size_t Offset = 0;
+
+ FileIn.read((char*)&Data[0], std::streamsize(Data.size()));
+
+ //texture2D Image(glm::min(MipMapCount, Levels));//SurfaceDesc.mipMapLevels);
+ std::size_t MipMapCount = (HeaderDesc.flags & loader_dds9::detail::GLI_DDSD_MIPMAPCOUNT) ? HeaderDesc.mipMapLevels : 1;
+ //if(Loader.Format == DXT1 || Loader.Format == DXT3 || Loader.Format == DXT5)
+ // MipMapCount -= 2;
+ texture2D Image(MipMapCount);
+ for(std::size_t Level = 0; Level < Image.levels() && (Width || Height); ++Level)
+ {
+ Width = glm::max(std::size_t(Width), std::size_t(1));
+ Height = glm::max(std::size_t(Height), std::size_t(1));
+
+ std::size_t MipmapSize = 0;
+ if((Loader.BlockSize << 3) > Loader.BPP)
+ MipmapSize = ((Width + 3) >> 2) * ((Height + 3) >> 2) * Loader.BlockSize;
+ else
+ MipmapSize = Width * Height * Loader.BlockSize;
+ std::vector<glm::byte> MipmapData(MipmapSize, 0);
+
+ memcpy(&MipmapData[0], &Data[0] + Offset, MipmapSize);
+
+ image2D::dimensions_type Dimensions(Width, Height);
+ Image[Level] = image2D(Dimensions, Format, MipmapData);
+
+ Offset += MipmapSize;
+ Width >>= 1;
+ Height >>= 1;
+ }
+
+ return Image;
+ }
+
+ inline void saveDDS10
+ (
+ gli::texture2D const & Image,
+ std::string const & Filename
+ )
+ {
+ std::ofstream FileOut(Filename.c_str(), std::ios::out | std::ios::binary);
+ if (!FileOut)
+ return;
+
+ char const * Magic = "DDS ";
+ FileOut.write((char*)Magic, sizeof(char) * 4);
+
+ glm::uint32 Caps = loader_dds9::detail::GLI_DDSD_CAPS | loader_dds9::detail::GLI_DDSD_HEIGHT | loader_dds9::detail::GLI_DDSD_WIDTH | loader_dds9::detail::GLI_DDSD_PIXELFORMAT;
+
+ loader_dds9::detail::ddsHeader HeaderDesc;
+ HeaderDesc.size = sizeof(loader_dds9::detail::ddsHeader);
+ HeaderDesc.flags = Caps | (loader_dds9::detail::isCompressed(Image) ? loader_dds9::detail::GLI_DDSD_LINEARSIZE : loader_dds9::detail::GLI_DDSD_PITCH) | (Image.levels() > 1 ? loader_dds9::detail::GLI_DDSD_MIPMAPCOUNT : 0); //659463;
+ HeaderDesc.width = Image[0].dimensions().x;
+ HeaderDesc.height = Image[0].dimensions().y;
+ HeaderDesc.pitch = loader_dds9::detail::isCompressed(Image) ? size(Image, LINEAR_SIZE) : 32;
+ HeaderDesc.depth = 0;
+ HeaderDesc.mipMapLevels = glm::uint32(Image.levels());
+ HeaderDesc.format.size = sizeof(loader_dds9::detail::ddsPixelFormat);
+ HeaderDesc.format.flags = loader_dds9::detail::GLI_DDPF_FOURCC;
+ HeaderDesc.format.fourCC = loader_dds9::detail::GLI_FOURCC_DX10;
+ HeaderDesc.format.bpp = size(Image, BIT_PER_PIXEL);
+ HeaderDesc.format.redMask = 0;
+ HeaderDesc.format.greenMask = 0;
+ HeaderDesc.format.blueMask = 0;
+ HeaderDesc.format.alphaMask = 0;
+ HeaderDesc.surfaceFlags = loader_dds9::detail::GLI_DDSCAPS_TEXTURE | (Image.levels() > 1 ? loader_dds9::detail::GLI_DDSCAPS_MIPMAP : 0);
+ HeaderDesc.cubemapFlags = 0;
+ FileOut.write((char*)&HeaderDesc, sizeof(HeaderDesc));
+
+ detail::ddsHeader10 HeaderDesc10;
+ HeaderDesc10.arraySize = 1;
+ HeaderDesc10.resourceDimension = detail::D3D10_RESOURCE_DIMENSION_TEXTURE2D;
+ HeaderDesc10.miscFlag = 0;//Image.levels() > 0 ? detail::D3D10_RESOURCE_MISC_GENERATE_MIPS : 0;
+ HeaderDesc10.dxgiFormat = detail::format_gli2dds_cast(Image.format());
+ HeaderDesc10.reserved = 0;
+
+ FileOut.write((char*)&HeaderDesc10, sizeof(HeaderDesc10));
+
+ for(gli::texture2D::level_type Level = 0; Level < Image.levels(); ++Level)
+ {
+ gli::texture2D::size_type ImageSize = size(Image[Level], gli::LINEAR_SIZE);
+ FileOut.write((char*)(Image[Level].data()), ImageSize);
+ }
+
+ if(FileOut.fail() || FileOut.bad())
+ return;
+
+ FileOut.close ();
+ }
+
+}//namespace loader_dds10
+}//namespace gtx
+}//namespace gli
diff --git a/src/third_party/glm/test/external/gli/gtx/loader_dds9.hpp b/src/third_party/glm/test/external/gli/gtx/loader_dds9.hpp
new file mode 100644
index 0000000..299e1d1
--- /dev/null
+++ b/src/third_party/glm/test/external/gli/gtx/loader_dds9.hpp
@@ -0,0 +1,39 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Image Copyright (c) 2008 - 2011 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2010-09-08
+// Updated : 2010-09-27
+// Licence : This source is under MIT License
+// File : gli/gtx/loader_dds9.hpp
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLI_GTX_LOADER_DDS9_INCLUDED
+#define GLI_GTX_LOADER_DDS9_INCLUDED
+
+#include "../gli.hpp"
+#include <fstream>
+
+namespace gli{
+namespace gtx{
+namespace loader_dds9
+{
+ texture2D loadDDS9(
+ std::string const & Filename);
+
+ void saveDDS9(
+ texture2D const & Texture,
+ std::string const & Filename);
+
+ void saveTextureCubeDDS9(
+ textureCube const & Texture,
+ std::string const & Filename);
+
+}//namespace loader_dds9
+}//namespace gtx
+}//namespace gli
+
+namespace gli{using namespace gtx::loader_dds9;}
+
+#include "loader_dds9.inl"
+
+#endif//GLI_GTX_LOADER_DDS9_INCLUDED
diff --git a/src/third_party/glm/test/external/gli/gtx/loader_dds9.inl b/src/third_party/glm/test/external/gli/gtx/loader_dds9.inl
new file mode 100644
index 0000000..23a0f33
--- /dev/null
+++ b/src/third_party/glm/test/external/gli/gtx/loader_dds9.inl
@@ -0,0 +1,790 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Image Copyright (c) 2008 - 2011 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2010-09-08
+// Updated : 2010-09-27
+// Licence : This source is under MIT License
+// File : gli/gtx/loader_dds9.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace gli{
+namespace gtx{
+namespace loader_dds9{
+namespace detail
+{
+ // DDS Documentation
+ /*
+ http://msdn.microsoft.com/en-us/library/bb943991(VS.85).aspx#File_Layout1
+ http://msdn.microsoft.com/en-us/library/bb943992.aspx
+ */
+
+ #define GLI_MAKEFOURCC(ch0, ch1, ch2, ch3) \
+ (glm::uint32)( \
+ (((glm::uint32)(glm::uint8)(ch3) << 24) & 0xFF000000) | \
+ (((glm::uint32)(glm::uint8)(ch2) << 16) & 0x00FF0000) | \
+ (((glm::uint32)(glm::uint8)(ch1) << 8) & 0x0000FF00) | \
+ ((glm::uint32)(glm::uint8)(ch0) & 0x000000FF) )
+
+ //enum dds_format
+ //{
+ // GLI_D3DFMT_R8G8B8 = 20,
+ // GLI_D3DFMT_A8R8G8B8 = 21,
+ // GLI_D3DFMT_X8R8G8B8 = 22,
+ // GLI_D3DFMT_A8 = 28,
+ // GLI_D3DFMT_A2B10G10R10 = 31,
+ // GLI_D3DFMT_A8B8G8R8 = 32,
+ // GLI_D3DFMT_X8B8G8R8 = 33,
+ // GLI_D3DFMT_G16R16 = 34,
+ // GLI_D3DFMT_A2R10G10B10 = 35,
+ // GLI_D3DFMT_A16B16G16R16 = 36,
+
+ // GLI_D3DFMT_L8 = 50,
+ // GLI_D3DFMT_A8L8 = 51,
+
+ // GLI_D3DFMT_DXT1 = GLI_MAKEFOURCC('D', 'X', 'T', '1'),
+ // GLI_D3DFMT_DXT2 = GLI_MAKEFOURCC('D', 'X', 'T', '2'),
+ // GLI_D3DFMT_DXT3 = GLI_MAKEFOURCC('D', 'X', 'T', '3'),
+ // GLI_D3DFMT_DXT4 = GLI_MAKEFOURCC('D', 'X', 'T', '4'),
+ // GLI_D3DFMT_DXT5 = GLI_MAKEFOURCC('D', 'X', 'T', '5'),
+ // GLI_D3DFMT_DX10 = GLI_MAKEFOURCC('D', 'X', '1', '0'),
+
+ // GLI_D3DFMT_D32 = 71,
+ // GLI_D3DFMT_D24S8 = 75,
+ // GLI_D3DFMT_D24X8 = 77,
+ // GLI_D3DFMT_D16 = 80,
+ // GLI_D3DFMT_L16 = 81,
+ // GLI_D3DFMT_D32F_LOCKABLE = 82,
+ // GLI_D3DFMT_D24FS8 = 83,
+
+ // GLI_D3DFMT_R16F = 111,
+ // GLI_D3DFMT_G16R16F = 112,
+ // GLI_D3DFMT_A16B16G16R16F = 113,
+
+ // GLI_D3DFMT_R32F = 114,
+ // GLI_D3DFMT_G32R32F = 115,
+ // GLI_D3DFMT_A32B32G32R32F = 116
+ //};
+
+ enum ddsCubemapflag
+ {
+ GLI_DDSCAPS2_CUBEMAP = 0x00000200,
+ GLI_DDSCAPS2_CUBEMAP_POSITIVEX = 0x00000400,
+ GLI_DDSCAPS2_CUBEMAP_NEGATIVEX = 0x00000800,
+ GLI_DDSCAPS2_CUBEMAP_POSITIVEY = 0x00001000,
+ GLI_DDSCAPS2_CUBEMAP_NEGATIVEY = 0x00002000,
+ GLI_DDSCAPS2_CUBEMAP_POSITIVEZ = 0x00004000,
+ GLI_DDSCAPS2_CUBEMAP_NEGATIVEZ = 0x00008000,
+ GLI_DDSCAPS2_VOLUME = 0x00200000
+ };
+
+ enum ddsSurfaceflag
+ {
+ GLI_DDSCAPS_COMPLEX = 0x00000008,
+ GLI_DDSCAPS_MIPMAP = 0x00400000,
+ GLI_DDSCAPS_TEXTURE = 0x00001000
+ };
+
+ struct ddsPixelFormat
+ {
+ glm::uint32 size; // 32
+ glm::uint32 flags;
+ glm::uint32 fourCC;
+ glm::uint32 bpp;
+ glm::uint32 redMask;
+ glm::uint32 greenMask;
+ glm::uint32 blueMask;
+ glm::uint32 alphaMask;
+ };
+
+ struct ddsHeader
+ {
+ glm::uint32 size;
+ glm::uint32 flags;
+ glm::uint32 height;
+ glm::uint32 width;
+ glm::uint32 pitch;
+ glm::uint32 depth;
+ glm::uint32 mipMapLevels;
+ glm::uint32 reserved1[11];
+ ddsPixelFormat format;
+ glm::uint32 surfaceFlags;
+ glm::uint32 cubemapFlags;
+ glm::uint32 reserved2[3];
+ };
+
+ glm::uint32 const GLI_D3DFMT_R8G8B8 = 20;
+ glm::uint32 const GLI_D3DFMT_A8R8G8B8 = 21;
+ glm::uint32 const GLI_D3DFMT_X8R8G8B8 = 22;
+ glm::uint32 const GLI_D3DFMT_R5G6B5 = 23;
+ glm::uint32 const GLI_D3DFMT_X1R5G5B5 = 24;
+ glm::uint32 const GLI_D3DFMT_A1R5G5B5 = 25;
+ glm::uint32 const GLI_D3DFMT_A4R4G4B4 = 26;
+ glm::uint32 const GLI_D3DFMT_X4R4G4B4 = 30;
+ glm::uint32 const GLI_D3DFMT_A2B10G10R10 = 31;
+ glm::uint32 const GLI_D3DFMT_A8B8G8R8 = 32;
+ glm::uint32 const GLI_D3DFMT_X8B8G8R8 = 33;
+ glm::uint32 const GLI_D3DFMT_G16R16 = 34;
+ glm::uint32 const GLI_D3DFMT_A2R10G10B10 = 35;
+ glm::uint32 const GLI_D3DFMT_A16B16G16R16 = 36;
+
+
+ glm::uint32 const GLI_FOURCC_DXT1 = GLI_MAKEFOURCC('D', 'X', 'T', '1');
+ glm::uint32 const GLI_FOURCC_DXT2 = GLI_MAKEFOURCC('D', 'X', 'T', '2');
+ glm::uint32 const GLI_FOURCC_DXT3 = GLI_MAKEFOURCC('D', 'X', 'T', '3');
+ glm::uint32 const GLI_FOURCC_DXT4 = GLI_MAKEFOURCC('D', 'X', 'T', '4');
+ glm::uint32 const GLI_FOURCC_DXT5 = GLI_MAKEFOURCC('D', 'X', 'T', '5');
+ glm::uint32 const GLI_FOURCC_ATI1 = GLI_MAKEFOURCC('A', 'T', 'I', '1'); // ATI1
+ glm::uint32 const GLI_FOURCC_ATI2 = GLI_MAKEFOURCC('A', 'T', 'I', '2'); // ATI2 (AKA 3Dc)
+ glm::uint32 const GLI_FOURCC_DX10 = GLI_MAKEFOURCC('D', 'X', '1', '0');
+ glm::uint32 const GLI_FOURCC_BC4U = GLI_MAKEFOURCC('B', 'C', '4', 'U');
+ glm::uint32 const GLI_FOURCC_BC4S = GLI_MAKEFOURCC('B', 'C', '4', 'S');
+ glm::uint32 const GLI_FOURCC_BC5U = GLI_MAKEFOURCC('B', 'C', '5', 'U');
+ glm::uint32 const GLI_FOURCC_BC5S = GLI_MAKEFOURCC('B', 'C', '5', 'S');
+ glm::uint32 const GLI_FOURCC_BC6H = GLI_MAKEFOURCC('B', 'C', '6', 'H');
+ glm::uint32 const GLI_FOURCC_BC7 = GLI_MAKEFOURCC('B', 'C', '7', 'U');
+
+ glm::uint32 const GLI_FOURCC_R16F = 0x0000006f; // 16-bit float Red
+ glm::uint32 const GLI_FOURCC_G16R16F = 0x00000070; // 16-bit float Red/Green
+ glm::uint32 const GLI_FOURCC_A16B16G16R16F = 0x00000071; // 16-bit float RGBA
+ glm::uint32 const GLI_FOURCC_R32F = 0x00000072; // 32-bit float Red
+ glm::uint32 const GLI_FOURCC_G32R32F = 0x00000073; // 32-bit float Red/Green
+ glm::uint32 const GLI_FOURCC_A32B32G32R32F = 0x00000074; // 32-bit float RGBA
+
+ glm::uint32 const GLI_DDPF_ALPHAPIXELS = 0x00000001; // The surface has alpha channel information in the pixel format.
+ glm::uint32 const GLI_DDPF_ALPHA = 0x00000002; // The pixel format contains alpha only information
+ glm::uint32 const GLI_DDPF_FOURCC = 0x00000004; // The FourCC code is valid.
+ glm::uint32 const GLI_DDPF_RGB = 0x00000040; // The RGB data in the pixel format structure is valid.
+ //glm::uint32 const GLI_DDPF_COMPRESSED = 0x00000080; // The surface will accept pixel data in the format specified and compress it during the write.
+ //glm::uint32 const GLI_DDPF_RGBTOYUV = 0x00000100; // The surface will accept RGB data and translate it during the write to YUV data.
+ glm::uint32 const GLI_DDPF_YUV = 0x00000200; // Pixel format is YUV - YUV data in pixel format struct is valid.
+ //glm::uint32 const GLI_DDPF_ZBUFFER = 0x00000400; // Pixel format is a z buffer only surface
+ //glm::uint32 const GLI_DDPF_ZPIXELS = 0x00002000; // The surface contains Z information in the pixels
+ //glm::uint32 const GLI_DDPF_STENCILBUFFER = 0x00004000; // The surface contains stencil information along with Z
+ //glm::uint32 const GLI_DDPF_ALPHAPREMULT = 0x00008000; // Premultiplied alpha format -- the color components have been premultiplied by the alpha component.
+ glm::uint32 const GLI_DDPF_LUMINANCE = 0x00020000; // Luminance data in the pixel format is valid.
+ //glm::uint32 const GLI_DDPF_BUMPLUMINANCE = 0x00040000; // Use this flag for luminance-only or luminance+alpha surfaces, the bit depth is then ddpf.dwLuminanceBitCount.
+ //glm::uint32 const GLI_DDPF_BUMPDUDV = 0x00080000; // Bump map dUdV data in the pixel format is valid.
+
+ glm::uint32 const GLI_DDSD_CAPS = 0x00000001;
+ glm::uint32 const GLI_DDSD_HEIGHT = 0x00000002;
+ glm::uint32 const GLI_DDSD_WIDTH = 0x00000004;
+ glm::uint32 const GLI_DDSD_PITCH = 0x00000008;
+ glm::uint32 const GLI_DDSD_PIXELFORMAT = 0x00001000;
+ glm::uint32 const GLI_DDSD_MIPMAPCOUNT = 0x00020000;
+ glm::uint32 const GLI_DDSD_LINEARSIZE = 0x00080000;
+ glm::uint32 const GLI_DDSD_DEPTH = 0x00800000;
+
+ struct DDLoader
+ {
+ glm::uint32 BlockSize;
+ glm::uint32 BPP;
+ gli::format Format;
+ };
+
+ enum format_type
+ {
+ FORMAT_TYPE_NULL,
+ FORMAT_RGBA,
+ FORMAT_FOURCC
+ };
+
+ inline glm::uint32 getFormatFourCC(gli::texture2D const & Image)
+ {
+ switch(Image.format())
+ {
+ default:
+ return 0;
+ case DXT1:
+ return GLI_FOURCC_DXT1;
+ case DXT3:
+ return GLI_FOURCC_DXT3;
+ case DXT5:
+ return GLI_FOURCC_DXT5;
+ case ATI1N_UNORM:
+ case ATI1N_SNORM:
+ case ATI2N_UNORM:
+ case ATI2N_SNORM:
+ case BP_UF16:
+ case BP_SF16:
+ case BP:
+ return GLI_FOURCC_DX10;
+ case R16F:
+ return GLI_FOURCC_R16F;
+ case RG16F:
+ return GLI_FOURCC_G16R16F;
+ case RGBA16F:
+ return GLI_FOURCC_A16B16G16R16F;
+ case R32F:
+ return GLI_FOURCC_R32F;
+ case RG32F:
+ return GLI_FOURCC_G32R32F;
+ case RGBA32F:
+ return GLI_FOURCC_A32B32G32R32F;
+ }
+ }
+
+ inline glm::uint32 getFormatBlockSize(gli::texture2D const & Image)
+ {
+ switch(Image.format())
+ {
+ default:
+ return 0;
+ case DXT1:
+ return 8;
+ case DXT3:
+ return 16;
+ case DXT5:
+ return 16;
+ case ATI1N_UNORM:
+ case ATI1N_SNORM:
+ return 16;
+ case ATI2N_UNORM:
+ case ATI2N_SNORM:
+ return 32;
+ case BP_UF16:
+ case BP_SF16:
+ return 32;
+ case BP:
+ return 32;
+ case R16F:
+ return 2;
+ case RG16F:
+ return 4;
+ case RGBA16F:
+ return 8;
+ case R32F:
+ return 4;
+ case RG32F:
+ return 8;
+ case RGBA32F:
+ return 16;
+ }
+ }
+
+ inline glm::uint32 getFormatFlags(gli::texture2D const & Image)
+ {
+ glm::uint32 Result = 0;
+
+ switch(Image.format())
+ {
+ default:
+ break;
+ case R8U:
+ case RG8U:
+ case RGB8U:
+ case RGBA8U:
+ case R16U:
+ case RG16U:
+ case RGB16U:
+ case RGBA16U:
+ case R32U:
+ case RG32U:
+ case RGB32U:
+ case RGBA32U:
+ case R8I:
+ case RG8I:
+ case RGB8I:
+ case RGBA8I:
+ case R16I:
+ case RG16I:
+ case RGB16I:
+ case RGBA16I:
+ case R32I:
+ case RG32I:
+ case RGB32I:
+ case RGBA32I:
+ Result |= GLI_DDPF_RGB;
+ break;
+ case R16F:
+ case RG16F:
+ case RGB16F:
+ case RGBA16F:
+ case R32F:
+ case RG32F:
+ case RGB32F:
+ case RGBA32F:
+ case RGBE8:
+ case RGB9E5:
+ case RG11B10F:
+ case R5G6B5:
+ case RGBA4:
+ case RGB10A2:
+ case D16:
+ case D24X8:
+ case D24S8:
+ case D32F:
+ case D32FS8X24:
+ case DXT1:
+ case DXT3:
+ case DXT5:
+ case ATI1N_UNORM:
+ case ATI1N_SNORM:
+ case ATI2N_UNORM:
+ case ATI2N_SNORM:
+ case BP_UF16:
+ case BP_SF16:
+ case BP:
+ Result |= GLI_DDPF_FOURCC;
+ break;
+ };
+
+ return Result;
+ }
+
+ inline glm::uint32 getFormatBPP(gli::texture2D const & Image)
+ {
+ switch(Image.format())
+ {
+ default:
+ return 0;
+ case R8U:
+ case R8I:
+ return 8;
+ case RG8U:
+ case RG8I:
+ return 16;
+ case RGB8U:
+ case RGB8I:
+ return 24;
+ case RGBA8U:
+ case RGBA8I:
+ return 32;
+ case DXT1:
+ return 4;
+ case DXT3:
+ return 8;
+ case DXT5:
+ return 8;
+ case ATI1N_UNORM:
+ case ATI1N_SNORM:
+ return 4;
+ case ATI2N_UNORM:
+ case ATI2N_SNORM:
+ return 8;
+ case BP_UF16:
+ case BP_SF16:
+ return 8;
+ case BP:
+ return 8;
+ }
+ }
+
+ inline bool isCompressed(gli::texture2D const & Image)
+ {
+ switch(Image.format())
+ {
+ default:
+ return false;
+ case DXT1:
+ case DXT3:
+ case DXT5:
+ case ATI1N_UNORM:
+ case ATI1N_SNORM:
+ case ATI2N_UNORM:
+ case ATI2N_SNORM:
+ case BP_UF16:
+ case BP_SF16:
+ case BP:
+ return true;
+ }
+ return false;
+ }
+
+}//namespace detail
+
+ inline texture2D loadDDS9
+ (
+ std::string const & Filename
+ )
+ {
+ std::ifstream FileIn(Filename.c_str(), std::ios::in | std::ios::binary);
+ if(FileIn.fail())
+ return texture2D();
+
+ detail::ddsHeader SurfaceDesc;
+ char Magic[4];
+
+ //* Read magic number and check if valid .dds file
+ FileIn.read((char*)&Magic, sizeof(Magic));
+
+ assert(strncmp(Magic, "DDS ", 4) == 0);
+
+ // Get the surface descriptor
+ FileIn.read((char*)&SurfaceDesc, sizeof(SurfaceDesc));
+
+ std::size_t Width = SurfaceDesc.width;
+ std::size_t Height = SurfaceDesc.height;
+
+ //std::size_t Levels = glm::max(glm::highestBit(Width), glm::highestBit(Height));
+
+ detail::DDLoader Loader;
+ if(SurfaceDesc.format.flags & detail::GLI_DDPF_FOURCC)
+ {
+ switch(SurfaceDesc.format.fourCC)
+ {
+ case detail::GLI_FOURCC_DX10:
+ assert(0);
+ break;
+ case detail::GLI_FOURCC_DXT1:
+ Loader.BlockSize = 8;
+ Loader.Format = DXT1;
+ break;
+ case detail::GLI_FOURCC_DXT3:
+ Loader.BlockSize = 16;
+ Loader.Format = DXT3;
+ break;
+ case detail::GLI_FOURCC_DXT5:
+ Loader.BlockSize = 16;
+ Loader.Format = DXT5;
+ break;
+ case detail::GLI_FOURCC_R16F:
+ Loader.BlockSize = 2;
+ Loader.Format = R16F;
+ break;
+ case detail::GLI_FOURCC_G16R16F:
+ Loader.BlockSize = 4;
+ Loader.Format = RG16F;
+ break;
+ case detail::GLI_FOURCC_A16B16G16R16F:
+ Loader.BlockSize = 8;
+ Loader.Format = RGBA16F;
+ break;
+ case detail::GLI_FOURCC_R32F:
+ Loader.BlockSize = 4;
+ Loader.Format = R32F;
+ break;
+ case detail::GLI_FOURCC_G32R32F:
+ Loader.BlockSize = 8;
+ Loader.Format = RG32F;
+ break;
+ case detail::GLI_FOURCC_A32B32G32R32F:
+ Loader.BlockSize = 16;
+ Loader.Format = RGBA32F;
+ break;
+
+ default:
+ assert(0);
+ return texture2D();
+ }
+ }
+ else if(SurfaceDesc.format.flags & detail::GLI_DDPF_RGB)
+ {
+ switch(SurfaceDesc.format.bpp)
+ {
+ case 8:
+ Loader.BlockSize = 2;
+ Loader.Format = R8U;
+ break;
+ case 16:
+ Loader.BlockSize = 2;
+ Loader.Format = RG8U;
+ break;
+ case 24:
+ Loader.BlockSize = 3;
+ Loader.Format = RGB8U;
+ break;
+ case 32:
+ Loader.BlockSize = 4;
+ Loader.Format = RGBA8U;
+ break;
+ }
+ }
+ else
+ {
+
+ }
+
+ gli::format Format = Loader.Format;
+
+ std::streamoff Curr = FileIn.tellg();
+ FileIn.seekg(0, std::ios_base::end);
+ std::streamoff End = FileIn.tellg();
+ FileIn.seekg(Curr, std::ios_base::beg);
+
+ std::vector<glm::byte> Data(std::size_t(End - Curr), 0);
+ std::size_t Offset = 0;
+
+ FileIn.read((char*)&Data[0], std::streamsize(Data.size()));
+
+ //image Image(glm::min(MipMapCount, Levels));//SurfaceDesc.mipMapLevels);
+ std::size_t MipMapCount = (SurfaceDesc.flags & detail::GLI_DDSD_MIPMAPCOUNT) ? SurfaceDesc.mipMapLevels : 1;
+ //if(Loader.Format == DXT1 || Loader.Format == DXT3 || Loader.Format == DXT5)
+ // MipMapCount -= 2;
+ texture2D Image(MipMapCount);
+ for(std::size_t Level = 0; Level < Image.levels() && (Width || Height); ++Level)
+ {
+ Width = glm::max(std::size_t(Width), std::size_t(1));
+ Height = glm::max(std::size_t(Height), std::size_t(1));
+
+ std::size_t MipmapSize = 0;
+ if(Loader.Format == DXT1 || Loader.Format == DXT3 || Loader.Format == DXT5)
+ MipmapSize = ((Width + 3) >> 2) * ((Height + 3) >> 2) * Loader.BlockSize;
+ else
+ MipmapSize = Width * Height * Loader.BlockSize;
+ std::vector<glm::byte> MipmapData(MipmapSize, 0);
+
+ memcpy(&MipmapData[0], &Data[0] + Offset, MipmapSize);
+
+ image2D::dimensions_type Dimensions(Width, Height);
+ Image[Level] = image2D(Dimensions, Format, MipmapData);
+
+ Offset += MipmapSize;
+ Width >>= 1;
+ Height >>= 1;
+ }
+
+ return Image;
+ }
+
+ inline textureCube loadTextureCubeDDS9
+ (
+ std::string const & Filename
+ )
+ {
+ std::ifstream FileIn(Filename.c_str(), std::ios::in | std::ios::binary);
+ if(FileIn.fail())
+ return textureCube();
+
+ detail::ddsHeader SurfaceDesc;
+ char Magic[4];
+
+ //* Read magic number and check if valid .dds file
+ FileIn.read((char*)&Magic, sizeof(Magic));
+
+ assert(strncmp(Magic, "DDS ", 4) == 0);
+
+ // Get the surface descriptor
+ FileIn.read((char*)&SurfaceDesc, sizeof(SurfaceDesc));
+
+ std::size_t Width = SurfaceDesc.width;
+ std::size_t Height = SurfaceDesc.height;
+
+ //std::size_t Levels = glm::max(glm::highestBit(Width), glm::highestBit(Height));
+
+ detail::DDLoader Loader;
+ if(SurfaceDesc.format.flags & detail::GLI_DDPF_FOURCC)
+ {
+ switch(SurfaceDesc.format.fourCC)
+ {
+ case detail::GLI_FOURCC_DX10:
+ assert(0);
+ break;
+ case detail::GLI_FOURCC_DXT1:
+ Loader.BlockSize = 8;
+ Loader.Format = DXT1;
+ break;
+ case detail::GLI_FOURCC_DXT3:
+ Loader.BlockSize = 16;
+ Loader.Format = DXT3;
+ break;
+ case detail::GLI_FOURCC_DXT5:
+ Loader.BlockSize = 16;
+ Loader.Format = DXT5;
+ break;
+ case detail::GLI_FOURCC_R16F:
+ Loader.BlockSize = 2;
+ Loader.Format = R16F;
+ break;
+ case detail::GLI_FOURCC_G16R16F:
+ Loader.BlockSize = 4;
+ Loader.Format = RG16F;
+ break;
+ case detail::GLI_FOURCC_A16B16G16R16F:
+ Loader.BlockSize = 8;
+ Loader.Format = RGBA16F;
+ break;
+ case detail::GLI_FOURCC_R32F:
+ Loader.BlockSize = 4;
+ Loader.Format = R32F;
+ break;
+ case detail::GLI_FOURCC_G32R32F:
+ Loader.BlockSize = 8;
+ Loader.Format = RG32F;
+ break;
+ case detail::GLI_FOURCC_A32B32G32R32F:
+ Loader.BlockSize = 16;
+ Loader.Format = RGBA32F;
+ break;
+
+ default:
+ assert(0);
+ return textureCube();
+ }
+ }
+ else if(SurfaceDesc.format.flags & detail::GLI_DDPF_RGB)
+ {
+ switch(SurfaceDesc.format.bpp)
+ {
+ case 8:
+ Loader.BlockSize = 2;
+ Loader.Format = R8U;
+ break;
+ case 16:
+ Loader.BlockSize = 2;
+ Loader.Format = RG8U;
+ break;
+ case 24:
+ Loader.BlockSize = 3;
+ Loader.Format = RGB8U;
+ break;
+ case 32:
+ Loader.BlockSize = 4;
+ Loader.Format = RGBA8U;
+ break;
+ }
+ }
+ else
+ {
+
+ }
+
+ gli::format Format = Loader.Format;
+
+ std::streamoff Curr = FileIn.tellg();
+ FileIn.seekg(0, std::ios_base::end);
+ std::streamoff End = FileIn.tellg();
+ FileIn.seekg(Curr, std::ios_base::beg);
+
+ std::vector<glm::byte> Data(std::size_t(End - Curr), 0);
+ std::size_t Offset = 0;
+
+ FileIn.read((char*)&Data[0], std::streamsize(Data.size()));
+
+ //image Image(glm::min(MipMapCount, Levels));//SurfaceDesc.mipMapLevels);
+ std::size_t MipMapCount = (SurfaceDesc.flags & detail::GLI_DDSD_MIPMAPCOUNT) ? SurfaceDesc.mipMapLevels : 1;
+ //if(Loader.Format == DXT1 || Loader.Format == DXT3 || Loader.Format == DXT5)
+ // MipMapCount -= 2;
+ textureCube Texture(MipMapCount);
+
+ for(textureCube::size_type Face = 0; Face < FACE_MAX; ++Face)
+ {
+ Width = SurfaceDesc.width;
+ Height = SurfaceDesc.height;
+
+ for(textureCube::size_type Level = 0; Level < Texture.levels() && (Width || Height); ++Level)
+ {
+ Width = glm::max(std::size_t(Width), std::size_t(1));
+ Height = glm::max(std::size_t(Height), std::size_t(1));
+
+ std::size_t MipmapSize = 0;
+ if(Loader.Format == DXT1 || Loader.Format == DXT3 || Loader.Format == DXT5)
+ MipmapSize = ((Width + 3) >> 2) * ((Height + 3) >> 2) * Loader.BlockSize;
+ else
+ MipmapSize = Width * Height * Loader.BlockSize;
+ std::vector<glm::byte> MipmapData(MipmapSize, 0);
+
+ memcpy(&MipmapData[0], &Data[0] + Offset, MipmapSize);
+
+ textureCube::dimensions_type Dimensions(Width, Height);
+ Texture[textureCube::face_type(Face)][Level] = image2D(Dimensions, Format, MipmapData);
+
+ Offset += MipmapSize;
+ Width >>= 1;
+ Height >>= 1;
+ }
+ }
+
+ return Texture;
+ }
+
+ inline void saveDDS9
+ (
+ texture2D const & Texture,
+ std::string const & Filename
+ )
+ {
+ std::ofstream FileOut(Filename.c_str(), std::ios::out | std::ios::binary);
+ if (!FileOut)
+ return;
+
+ char const * Magic = "DDS ";
+ FileOut.write((char*)Magic, sizeof(char) * 4);
+
+ glm::uint32 Caps = detail::GLI_DDSD_CAPS | detail::GLI_DDSD_HEIGHT | detail::GLI_DDSD_WIDTH | detail::GLI_DDSD_PIXELFORMAT;
+
+ detail::ddsHeader SurfaceDesc;
+ SurfaceDesc.size = sizeof(detail::ddsHeader);
+ SurfaceDesc.flags = Caps | (detail::isCompressed(Texture) ? detail::GLI_DDSD_LINEARSIZE : detail::GLI_DDSD_PITCH) | (Texture.levels() > 1 ? detail::GLI_DDSD_MIPMAPCOUNT : 0); //659463;
+ SurfaceDesc.width = Texture[0].dimensions().x;
+ SurfaceDesc.height = Texture[0].dimensions().y;
+ SurfaceDesc.pitch = loader_dds9::detail::isCompressed(Texture) ? size(Texture, LINEAR_SIZE) : 32;
+ SurfaceDesc.depth = 0;
+ SurfaceDesc.mipMapLevels = glm::uint32(Texture.levels());
+ SurfaceDesc.format.size = sizeof(detail::ddsPixelFormat);
+ SurfaceDesc.format.flags = detail::getFormatFlags(Texture);
+ SurfaceDesc.format.fourCC = detail::getFormatFourCC(Texture);
+ SurfaceDesc.format.bpp = detail::getFormatBPP(Texture);
+ SurfaceDesc.format.redMask = 0;
+ SurfaceDesc.format.greenMask = 0;
+ SurfaceDesc.format.blueMask = 0;
+ SurfaceDesc.format.alphaMask = 0;
+ SurfaceDesc.surfaceFlags = detail::GLI_DDSCAPS_TEXTURE | (Texture.levels() > 1 ? detail::GLI_DDSCAPS_MIPMAP : 0);
+ SurfaceDesc.cubemapFlags = 0;
+
+ FileOut.write((char*)&SurfaceDesc, sizeof(SurfaceDesc));
+
+ for(texture2D::level_type Level = 0; Level < Texture.levels(); ++Level)
+ {
+ texture2D::size_type ImageSize = size(Texture[Level], gli::LINEAR_SIZE);
+ FileOut.write((char*)(Texture[Level].data()), ImageSize);
+ }
+
+ if(FileOut.fail() || FileOut.bad())
+ return;
+
+ FileOut.close ();
+ }
+
+ inline void saveTextureCubeDDS9
+ (
+ textureCube const & Texture,
+ std::string const & Filename
+ )
+ {
+ std::ofstream FileOut(Filename.c_str(), std::ios::out | std::ios::binary);
+ if (!FileOut || Texture.empty())
+ return;
+
+ char const * Magic = "DDS ";
+ FileOut.write((char*)Magic, sizeof(char) * 4);
+
+ glm::uint32 Caps = detail::GLI_DDSD_CAPS | detail::GLI_DDSD_HEIGHT | detail::GLI_DDSD_WIDTH | detail::GLI_DDSD_PIXELFORMAT | detail::GLI_DDSCAPS_COMPLEX;
+
+ detail::ddsHeader SurfaceDesc;
+ SurfaceDesc.size = sizeof(detail::ddsHeader);
+ SurfaceDesc.flags = Caps | (detail::isCompressed(Texture[POSITIVE_X]) ? detail::GLI_DDSD_LINEARSIZE : detail::GLI_DDSD_PITCH) | (Texture.levels() > 1 ? detail::GLI_DDSD_MIPMAPCOUNT : 0); //659463;
+ SurfaceDesc.width = Texture[POSITIVE_X][0].dimensions().x;
+ SurfaceDesc.height = Texture[POSITIVE_X][0].dimensions().y;
+ SurfaceDesc.pitch = loader_dds9::detail::isCompressed(Texture[POSITIVE_X]) ? size(Texture[POSITIVE_X], LINEAR_SIZE) : 32;
+ SurfaceDesc.depth = 0;
+ SurfaceDesc.mipMapLevels = glm::uint32(Texture.levels());
+ SurfaceDesc.format.size = sizeof(detail::ddsPixelFormat);
+ SurfaceDesc.format.flags = detail::getFormatFlags(Texture[POSITIVE_X]);
+ SurfaceDesc.format.fourCC = detail::getFormatFourCC(Texture[POSITIVE_X]);
+ SurfaceDesc.format.bpp = detail::getFormatBPP(Texture[POSITIVE_X]);
+ SurfaceDesc.format.redMask = 0;
+ SurfaceDesc.format.greenMask = 0;
+ SurfaceDesc.format.blueMask = 0;
+ SurfaceDesc.format.alphaMask = 0;
+ SurfaceDesc.surfaceFlags = detail::GLI_DDSCAPS_TEXTURE | (Texture.levels() > 1 ? detail::GLI_DDSCAPS_MIPMAP : 0);
+ SurfaceDesc.cubemapFlags =
+ detail::GLI_DDSCAPS2_CUBEMAP | detail::GLI_DDSCAPS2_CUBEMAP_POSITIVEX | detail::GLI_DDSCAPS2_CUBEMAP_NEGATIVEX | detail::GLI_DDSCAPS2_CUBEMAP_POSITIVEY | detail::GLI_DDSCAPS2_CUBEMAP_NEGATIVEY | detail::GLI_DDSCAPS2_CUBEMAP_POSITIVEZ | detail::GLI_DDSCAPS2_CUBEMAP_NEGATIVEZ;
+
+ FileOut.write((char*)&SurfaceDesc, sizeof(SurfaceDesc));
+
+ for(textureCube::size_type Face = 0; Face < FACE_MAX; ++Face)
+ for(texture2D::level_type Level = 0; Level < Texture.levels(); ++Level)
+ {
+ texture2D::size_type ImageSize = size(Texture[textureCube::face_type(Face)][Level], gli::LINEAR_SIZE);
+ FileOut.write((char*)(Texture[textureCube::face_type(Face)][Level].data()), ImageSize);
+ }
+
+ if(FileOut.fail() || FileOut.bad())
+ return;
+
+ FileOut.close ();
+ }
+
+}//namespace loader_dds9
+}//namespace gtx
+}//namespace gli
diff --git a/src/third_party/glm/test/external/gli/gtx/loader_tga.hpp b/src/third_party/glm/test/external/gli/gtx/loader_tga.hpp
new file mode 100644
index 0000000..f3fc472
--- /dev/null
+++ b/src/third_party/glm/test/external/gli/gtx/loader_tga.hpp
@@ -0,0 +1,36 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Image Copyright (c) 2008 - 2011 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2010-09-08
+// Updated : 2010-09-27
+// Licence : This source is under MIT License
+// File : gli/gtx/loader_tga.hpp
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLI_GTX_LOADER_TGA_INCLUDED
+#define GLI_GTX_LOADER_TGA_INCLUDED
+
+#include "../gli.hpp"
+#include <string>
+#include <fstream>
+
+namespace gli{
+namespace gtx{
+namespace loader_tga
+{
+ texture2D loadTGA(
+ std::string const & Filename);
+
+ void saveTGA(
+ texture2D const & Image,
+ std::string const & Filename);
+
+}//namespace loader_tga
+}//namespace gtx
+}//namespace gli
+
+namespace gli{using namespace gtx::loader_tga;}
+
+#include "loader_tga.inl"
+
+#endif//GLI_GTX_LOADER_TGA_INCLUDED
diff --git a/src/third_party/glm/test/external/gli/gtx/loader_tga.inl b/src/third_party/glm/test/external/gli/gtx/loader_tga.inl
new file mode 100644
index 0000000..795edb4
--- /dev/null
+++ b/src/third_party/glm/test/external/gli/gtx/loader_tga.inl
@@ -0,0 +1,159 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Image Copyright (c) 2008 - 2011 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2010-09-08
+// Updated : 2010-09-27
+// Licence : This source is under MIT License
+// File : gli/gtx/loader_tga.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace gli{
+namespace gtx{
+namespace loader_tga
+{
+ inline texture2D loadTGA
+ (
+ std::string const & Filename
+ )
+ {
+ std::ifstream FileIn(Filename.c_str(), std::ios::in | std::ios::binary);
+ if(!FileIn)
+ return texture2D();
+
+ unsigned char IdentificationFieldSize;
+ unsigned char ColorMapType;
+ unsigned char ImageType;
+ unsigned short ColorMapOrigin;
+ unsigned short ColorMapLength;
+ unsigned char ColorMapEntrySize;
+ unsigned short OriginX;
+ unsigned short OriginY;
+ unsigned short Width;
+ unsigned short Height;
+ unsigned char TexelSize;
+ unsigned char Descriptor;
+
+ FileIn.read((char*)&IdentificationFieldSize, sizeof(IdentificationFieldSize));
+ FileIn.read((char*)&ColorMapType, sizeof(ColorMapType));
+ FileIn.read((char*)&ImageType, sizeof(ImageType));
+ FileIn.read((char*)&ColorMapOrigin, sizeof(ColorMapOrigin));
+ FileIn.read((char*)&ColorMapLength, sizeof(ColorMapLength));
+ FileIn.read((char*)&ColorMapEntrySize, sizeof(ColorMapEntrySize));
+ FileIn.read((char*)&OriginX, sizeof(OriginX));
+ FileIn.read((char*)&OriginY, sizeof(OriginY));
+ FileIn.read((char*)&Width, sizeof(Width));
+ FileIn.read((char*)&Height, sizeof(Height));
+ FileIn.read((char*)&TexelSize, sizeof(TexelSize));
+ FileIn.read((char*)&Descriptor, sizeof(Descriptor));
+
+ gli::format Format = gli::FORMAT_NULL;
+ if(TexelSize == 24)
+ Format = gli::RGB8U;
+ else if(TexelSize == 32)
+ Format = gli::RGBA8U;
+ else
+ assert(0);
+
+ image2D Mipmap(texture2D::dimensions_type(Width, Height), Format);
+
+ if (FileIn.fail() || FileIn.bad())
+ {
+ assert(0);
+ return texture2D();
+ }
+
+ switch(ImageType)
+ {
+ default:
+ assert(0);
+ return texture2D();
+
+ case 2:
+ FileIn.seekg(18 + ColorMapLength, std::ios::beg);
+
+ char* IdentificationField = new char[IdentificationFieldSize + 1];
+ FileIn.read(IdentificationField, IdentificationFieldSize);
+ IdentificationField[IdentificationFieldSize] = '\0';
+ delete[] IdentificationField;
+
+ std::size_t DataSize = Width * Height * (TexelSize >> 3);
+ FileIn.read((char*)Mipmap.data(), std::streamsize(DataSize));
+
+ if(FileIn.fail() || FileIn.bad())
+ return texture2D();
+ break;
+ }
+
+ FileIn.close();
+
+ texture2D Image(1);
+ Image[0] = Mipmap;
+
+ // TGA images are saved in BGR or BGRA format.
+ if(TexelSize == 24)
+ Image.swizzle<glm::u8vec3>(gli::B, gli::G, gli::R, gli::A);
+ if(TexelSize == 32)
+ Image.swizzle<glm::u8vec4>(gli::B, gli::G, gli::R, gli::A);
+
+ return Image;
+ }
+
+ inline void saveTGA
+ (
+ gli::texture2D const & ImageIn,
+ std::string const & Filename
+ )
+ {
+ std::ofstream FileOut(Filename.c_str(), std::ios::out | std::ios::binary);
+ if (!FileOut)
+ return;
+
+ gli::texture2D Image = duplicate(ImageIn);
+
+ unsigned char IdentificationFieldSize = 1;
+ unsigned char ColorMapType = 0;
+ unsigned char ImageType = 2;
+ unsigned short ColorMapOrigin = 0;
+ unsigned short ColorMapLength = 0;
+ unsigned char ColorMapEntrySize = 0;
+ unsigned short OriginX = 0;
+ unsigned short OriginY = 0;
+ unsigned short Width = Image[0].dimensions().x;
+ unsigned short Height = Image[0].dimensions().y;
+ unsigned char TexelSize = (unsigned char)(Image[0].value_size());
+ unsigned char Descriptor = 0;
+
+ if(TexelSize == 24)
+ Image.swizzle<glm::u8vec3>(gli::B, gli::G, gli::R, gli::A);
+ if(TexelSize == 32)
+ Image.swizzle<glm::u8vec4>(gli::B, gli::G, gli::R, gli::A);
+
+ FileOut.write((char*)&IdentificationFieldSize, sizeof(IdentificationFieldSize));
+ FileOut.write((char*)&ColorMapType, sizeof(ColorMapType));
+ FileOut.write((char*)&ImageType, sizeof(ImageType));
+ FileOut.write((char*)&ColorMapOrigin, sizeof(ColorMapOrigin));
+ FileOut.write((char*)&ColorMapLength, sizeof(ColorMapLength));
+ FileOut.write((char*)&ColorMapEntrySize, sizeof(ColorMapEntrySize));
+ FileOut.write((char*)&OriginX, sizeof(OriginX));
+ FileOut.write((char*)&OriginY, sizeof(OriginY));
+ FileOut.write((char*)&Width, sizeof(Width));
+ FileOut.write((char*)&Height, sizeof(Height));
+ FileOut.write((char*)&TexelSize, sizeof(TexelSize));
+ FileOut.write((char*)&Descriptor, sizeof(Descriptor));
+
+ if (FileOut.fail () || FileOut.bad ())
+ return;
+
+ FileOut.seekp(18 + ColorMapLength, std::ios::beg);
+ char* IdentificationField = new char[IdentificationFieldSize + 1];
+ FileOut.write(IdentificationField, std::streamsize(IdentificationFieldSize));
+ delete[] IdentificationField;
+ FileOut.write((char*)Image[0].data(), std::streamsize(Image[0].capacity()));
+ if(FileOut.fail() || FileOut.bad())
+ return;
+
+ FileOut.close ();
+ }
+}//namespace loader_tga
+}//namespace gtx
+}//namespace gli
diff --git a/src/third_party/glm/test/external/gli/gtx/wavelet.hpp b/src/third_party/glm/test/external/gli/gtx/wavelet.hpp
new file mode 100644
index 0000000..5ee964f
--- /dev/null
+++ b/src/third_party/glm/test/external/gli/gtx/wavelet.hpp
@@ -0,0 +1,27 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Image Copyright (c) 2008 - 2011 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2010-01-09
+// Updated : 2010-01-09
+// Licence : This source is under MIT License
+// File : gli/gtx/wavelet.hpp
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GLI_GTX_WAVELET_INCLUDED
+#define GLI_GTX_WAVELET_INCLUDED
+
+namespace gli{
+namespace gtx{
+namespace wavelet
+{
+
+
+}//namespace wavelet
+}//namespace gtx
+}//namespace gli
+
+namespace gli{using namespace gtx::wavelet;}
+
+#include "wavelet.inl"
+
+#endif//GLI_GTX_WAVELET_INCLUDED
diff --git a/src/third_party/glm/test/external/gli/gtx/wavelet.inl b/src/third_party/glm/test/external/gli/gtx/wavelet.inl
new file mode 100644
index 0000000..dee82413
--- /dev/null
+++ b/src/third_party/glm/test/external/gli/gtx/wavelet.inl
@@ -0,0 +1,8 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Image Copyright (c) 2008 - 2011 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2010-01-09
+// Updated : 2010-01-09
+// Licence : This source is under MIT License
+// File : gli/gtx/wavelet.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/third_party/glm/test/glm.cppcheck b/src/third_party/glm/test/glm.cppcheck
new file mode 100644
index 0000000..12081fe
--- /dev/null
+++ b/src/third_party/glm/test/glm.cppcheck
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="1">
+ <includedir>
+ <dir name="../glm"/>
+ </includedir>
+</project>
diff --git a/src/third_party/glm/test/gtc/CMakeLists.txt b/src/third_party/glm/test/gtc/CMakeLists.txt
new file mode 100644
index 0000000..56b2f13
--- /dev/null
+++ b/src/third_party/glm/test/gtc/CMakeLists.txt
@@ -0,0 +1,22 @@
+glmCreateTestGTC(gtc_bitfield)
+glmCreateTestGTC(gtc_color_encoding)
+glmCreateTestGTC(gtc_color_space)
+glmCreateTestGTC(gtc_constants)
+glmCreateTestGTC(gtc_epsilon)
+glmCreateTestGTC(gtc_functions)
+glmCreateTestGTC(gtc_integer)
+glmCreateTestGTC(gtc_matrix_access)
+glmCreateTestGTC(gtc_matrix_integer)
+glmCreateTestGTC(gtc_matrix_inverse)
+glmCreateTestGTC(gtc_matrix_transform)
+glmCreateTestGTC(gtc_noise)
+glmCreateTestGTC(gtc_packing)
+glmCreateTestGTC(gtc_quaternion)
+glmCreateTestGTC(gtc_random)
+glmCreateTestGTC(gtc_round)
+glmCreateTestGTC(gtc_reciprocal)
+glmCreateTestGTC(gtc_type_aligned)
+glmCreateTestGTC(gtc_type_precision)
+glmCreateTestGTC(gtc_type_ptr)
+glmCreateTestGTC(gtc_ulp)
+glmCreateTestGTC(gtc_vec1)
diff --git a/src/third_party/glm/test/gtc/gtc_bitfield.cpp b/src/third_party/glm/test/gtc/gtc_bitfield.cpp
new file mode 100644
index 0000000..bf43ca9
--- /dev/null
+++ b/src/third_party/glm/test/gtc/gtc_bitfield.cpp
@@ -0,0 +1,642 @@
+#include <glm/gtc/bitfield.hpp>
+#include <glm/gtc/type_precision.hpp>
+#include <glm/vector_relational.hpp>
+#include <glm/integer.hpp>
+#include <ctime>
+#include <cstdio>
+#include <vector>
+
+namespace mask
+{
+ template <typename genType>
+ struct type
+ {
+ genType Value;
+ genType Return;
+ };
+
+ inline int mask_zero(int Bits)
+ {
+ return ~((~0) << Bits);
+ }
+
+ inline int mask_mix(int Bits)
+ {
+ return Bits >= sizeof(int) * 8 ? 0xffffffff : (static_cast<int>(1) << Bits) - static_cast<int>(1);
+ }
+
+ inline int mask_half(int Bits)
+ {
+ // We do the shift in two steps because 1 << 32 on an int is undefined.
+
+ int const Half = Bits >> 1;
+ int const Fill = ~0;
+ int const ShiftHaft = (Fill << Half);
+ int const Rest = Bits - Half;
+ int const Reversed = ShiftHaft << Rest;
+
+ return ~Reversed;
+ }
+
+ inline int mask_loop(int Bits)
+ {
+ int Mask = 0;
+ for(int Bit = 0; Bit < Bits; ++Bit)
+ Mask |= (static_cast<int>(1) << Bit);
+ return Mask;
+ }
+
+ int perf()
+ {
+ int const Count = 100000000;
+
+ std::clock_t Timestamp1 = std::clock();
+
+ {
+ std::vector<int> Mask;
+ Mask.resize(Count);
+ for(int i = 0; i < Count; ++i)
+ Mask[i] = mask_mix(i % 32);
+ }
+
+ std::clock_t Timestamp2 = std::clock();
+
+ {
+ std::vector<int> Mask;
+ Mask.resize(Count);
+ for(int i = 0; i < Count; ++i)
+ Mask[i] = mask_loop(i % 32);
+ }
+
+ std::clock_t Timestamp3 = std::clock();
+
+ {
+ std::vector<int> Mask;
+ Mask.resize(Count);
+ for(int i = 0; i < Count; ++i)
+ Mask[i] = glm::mask(i % 32);
+ }
+
+ std::clock_t Timestamp4 = std::clock();
+
+ {
+ std::vector<int> Mask;
+ Mask.resize(Count);
+ for(int i = 0; i < Count; ++i)
+ Mask[i] = mask_zero(i % 32);
+ }
+
+ std::clock_t Timestamp5 = std::clock();
+
+ {
+ std::vector<int> Mask;
+ Mask.resize(Count);
+ for(int i = 0; i < Count; ++i)
+ Mask[i] = mask_half(i % 32);
+ }
+
+ std::clock_t Timestamp6 = std::clock();
+
+ std::clock_t TimeMix = Timestamp2 - Timestamp1;
+ std::clock_t TimeLoop = Timestamp3 - Timestamp2;
+ std::clock_t TimeDefault = Timestamp4 - Timestamp3;
+ std::clock_t TimeZero = Timestamp5 - Timestamp4;
+ std::clock_t TimeHalf = Timestamp6 - Timestamp5;
+
+ printf("mask[mix]: %d\n", static_cast<unsigned int>(TimeMix));
+ printf("mask[loop]: %d\n", static_cast<unsigned int>(TimeLoop));
+ printf("mask[default]: %d\n", static_cast<unsigned int>(TimeDefault));
+ printf("mask[zero]: %d\n", static_cast<unsigned int>(TimeZero));
+ printf("mask[half]: %d\n", static_cast<unsigned int>(TimeHalf));
+
+ return TimeDefault < TimeLoop ? 0 : 1;
+ }
+
+ int test_uint()
+ {
+ type<glm::uint> const Data[] =
+ {
+ { 0, 0x00000000},
+ { 1, 0x00000001},
+ { 2, 0x00000003},
+ { 3, 0x00000007},
+ {31, 0x7fffffff},
+ {32, 0xffffffff}
+ };
+
+ int Error(0);
+/* mask_zero is sadly not a correct code
+ for(std::size_t i = 0; i < sizeof(Data) / sizeof(type<int>); ++i)
+ {
+ int Result = mask_zero(Data[i].Value);
+ Error += Data[i].Return == Result ? 0 : 1;
+ }
+*/
+ for(std::size_t i = 0; i < sizeof(Data) / sizeof(type<int>); ++i)
+ {
+ int Result = mask_mix(Data[i].Value);
+ Error += Data[i].Return == Result ? 0 : 1;
+ }
+
+ for(std::size_t i = 0; i < sizeof(Data) / sizeof(type<int>); ++i)
+ {
+ int Result = mask_half(Data[i].Value);
+ Error += Data[i].Return == Result ? 0 : 1;
+ }
+
+ for(std::size_t i = 0; i < sizeof(Data) / sizeof(type<int>); ++i)
+ {
+ int Result = mask_loop(Data[i].Value);
+ Error += Data[i].Return == Result ? 0 : 1;
+ }
+
+ for(std::size_t i = 0; i < sizeof(Data) / sizeof(type<int>); ++i)
+ {
+ int Result = glm::mask(Data[i].Value);
+ Error += Data[i].Return == Result ? 0 : 1;
+ }
+
+ return Error;
+ }
+
+ int test_uvec4()
+ {
+ type<glm::ivec4> const Data[] =
+ {
+ {glm::ivec4( 0), glm::ivec4(0x00000000)},
+ {glm::ivec4( 1), glm::ivec4(0x00000001)},
+ {glm::ivec4( 2), glm::ivec4(0x00000003)},
+ {glm::ivec4( 3), glm::ivec4(0x00000007)},
+ {glm::ivec4(31), glm::ivec4(0x7fffffff)},
+ {glm::ivec4(32), glm::ivec4(0xffffffff)}
+ };
+
+ int Error(0);
+
+ for(std::size_t i = 0, n = sizeof(Data) / sizeof(type<glm::ivec4>); i < n; ++i)
+ {
+ glm::ivec4 Result = glm::mask(Data[i].Value);
+ Error += glm::all(glm::equal(Data[i].Return, Result)) ? 0 : 1;
+ }
+
+ return Error;
+ }
+
+ int test()
+ {
+ int Error(0);
+
+ Error += test_uint();
+ Error += test_uvec4();
+
+ return Error;
+ }
+}//namespace mask
+
+namespace bitfieldInterleave3
+{
+ template <typename PARAM, typename RET>
+ inline RET refBitfieldInterleave(PARAM x, PARAM y, PARAM z)
+ {
+ RET Result = 0;
+ for(RET i = 0; i < sizeof(PARAM) * 8; ++i)
+ {
+ Result |= ((RET(x) & (RET(1U) << i)) << ((i << 1) + 0));
+ Result |= ((RET(y) & (RET(1U) << i)) << ((i << 1) + 1));
+ Result |= ((RET(z) & (RET(1U) << i)) << ((i << 1) + 2));
+ }
+ return Result;
+ }
+
+ int test()
+ {
+ int Error(0);
+
+ glm::uint16 x_max = 1 << 11;
+ glm::uint16 y_max = 1 << 11;
+ glm::uint16 z_max = 1 << 11;
+
+ for(glm::uint16 z = 0; z < z_max; z += 27)
+ for(glm::uint16 y = 0; y < y_max; y += 27)
+ for(glm::uint16 x = 0; x < x_max; x += 27)
+ {
+ glm::uint64 ResultA = refBitfieldInterleave<glm::uint16, glm::uint64>(x, y, z);
+ glm::uint64 ResultB = glm::bitfieldInterleave(x, y, z);
+ Error += ResultA == ResultB ? 0 : 1;
+ }
+
+ return Error;
+ }
+}
+
+namespace bitfieldInterleave4
+{
+ template <typename PARAM, typename RET>
+ inline RET loopBitfieldInterleave(PARAM x, PARAM y, PARAM z, PARAM w)
+ {
+ RET const v[4] = {x, y, z, w};
+ RET Result = 0;
+ for(RET i = 0; i < sizeof(PARAM) * 8; i++)
+ {
+ Result |= ((((v[0] >> i) & 1U)) << ((i << 2) + 0));
+ Result |= ((((v[1] >> i) & 1U)) << ((i << 2) + 1));
+ Result |= ((((v[2] >> i) & 1U)) << ((i << 2) + 2));
+ Result |= ((((v[3] >> i) & 1U)) << ((i << 2) + 3));
+ }
+ return Result;
+ }
+
+ int test()
+ {
+ int Error(0);
+
+ glm::uint16 x_max = 1 << 11;
+ glm::uint16 y_max = 1 << 11;
+ glm::uint16 z_max = 1 << 11;
+ glm::uint16 w_max = 1 << 11;
+
+ for(glm::uint16 w = 0; w < w_max; w += 27)
+ for(glm::uint16 z = 0; z < z_max; z += 27)
+ for(glm::uint16 y = 0; y < y_max; y += 27)
+ for(glm::uint16 x = 0; x < x_max; x += 27)
+ {
+ glm::uint64 ResultA = loopBitfieldInterleave<glm::uint16, glm::uint64>(x, y, z, w);
+ glm::uint64 ResultB = glm::bitfieldInterleave(x, y, z, w);
+ Error += ResultA == ResultB ? 0 : 1;
+ }
+
+ return Error;
+ }
+}
+
+namespace bitfieldInterleave
+{
+ inline glm::uint64 fastBitfieldInterleave(glm::uint32 x, glm::uint32 y)
+ {
+ glm::uint64 REG1;
+ glm::uint64 REG2;
+
+ REG1 = x;
+ REG1 = ((REG1 << 16) | REG1) & glm::uint64(0x0000FFFF0000FFFF);
+ REG1 = ((REG1 << 8) | REG1) & glm::uint64(0x00FF00FF00FF00FF);
+ REG1 = ((REG1 << 4) | REG1) & glm::uint64(0x0F0F0F0F0F0F0F0F);
+ REG1 = ((REG1 << 2) | REG1) & glm::uint64(0x3333333333333333);
+ REG1 = ((REG1 << 1) | REG1) & glm::uint64(0x5555555555555555);
+
+ REG2 = y;
+ REG2 = ((REG2 << 16) | REG2) & glm::uint64(0x0000FFFF0000FFFF);
+ REG2 = ((REG2 << 8) | REG2) & glm::uint64(0x00FF00FF00FF00FF);
+ REG2 = ((REG2 << 4) | REG2) & glm::uint64(0x0F0F0F0F0F0F0F0F);
+ REG2 = ((REG2 << 2) | REG2) & glm::uint64(0x3333333333333333);
+ REG2 = ((REG2 << 1) | REG2) & glm::uint64(0x5555555555555555);
+
+ return REG1 | (REG2 << 1);
+ }
+
+ inline glm::uint64 interleaveBitfieldInterleave(glm::uint32 x, glm::uint32 y)
+ {
+ glm::uint64 REG1;
+ glm::uint64 REG2;
+
+ REG1 = x;
+ REG2 = y;
+
+ REG1 = ((REG1 << 16) | REG1) & glm::uint64(0x0000FFFF0000FFFF);
+ REG2 = ((REG2 << 16) | REG2) & glm::uint64(0x0000FFFF0000FFFF);
+
+ REG1 = ((REG1 << 8) | REG1) & glm::uint64(0x00FF00FF00FF00FF);
+ REG2 = ((REG2 << 8) | REG2) & glm::uint64(0x00FF00FF00FF00FF);
+
+ REG1 = ((REG1 << 4) | REG1) & glm::uint64(0x0F0F0F0F0F0F0F0F);
+ REG2 = ((REG2 << 4) | REG2) & glm::uint64(0x0F0F0F0F0F0F0F0F);
+
+ REG1 = ((REG1 << 2) | REG1) & glm::uint64(0x3333333333333333);
+ REG2 = ((REG2 << 2) | REG2) & glm::uint64(0x3333333333333333);
+
+ REG1 = ((REG1 << 1) | REG1) & glm::uint64(0x5555555555555555);
+ REG2 = ((REG2 << 1) | REG2) & glm::uint64(0x5555555555555555);
+
+ return REG1 | (REG2 << 1);
+ }
+/*
+ inline glm::uint64 loopBitfieldInterleave(glm::uint32 x, glm::uint32 y)
+ {
+ static glm::uint64 const Mask[5] =
+ {
+ 0x5555555555555555,
+ 0x3333333333333333,
+ 0x0F0F0F0F0F0F0F0F,
+ 0x00FF00FF00FF00FF,
+ 0x0000FFFF0000FFFF
+ };
+
+ glm::uint64 REG1 = x;
+ glm::uint64 REG2 = y;
+ for(int i = 4; i >= 0; --i)
+ {
+ REG1 = ((REG1 << (1 << i)) | REG1) & Mask[i];
+ REG2 = ((REG2 << (1 << i)) | REG2) & Mask[i];
+ }
+
+ return REG1 | (REG2 << 1);
+ }
+*/
+#if(GLM_ARCH != GLM_ARCH_PURE)
+ inline glm::uint64 sseBitfieldInterleave(glm::uint32 x, glm::uint32 y)
+ {
+ GLM_ALIGN(16) glm::uint32 const Array[4] = {x, 0, y, 0};
+
+ __m128i const Mask4 = _mm_set1_epi32(0x0000FFFF);
+ __m128i const Mask3 = _mm_set1_epi32(0x00FF00FF);
+ __m128i const Mask2 = _mm_set1_epi32(0x0F0F0F0F);
+ __m128i const Mask1 = _mm_set1_epi32(0x33333333);
+ __m128i const Mask0 = _mm_set1_epi32(0x55555555);
+
+ __m128i Reg1;
+ __m128i Reg2;
+
+ // REG1 = x;
+ // REG2 = y;
+ Reg1 = _mm_load_si128((__m128i*)Array);
+
+ //REG1 = ((REG1 << 16) | REG1) & glm::uint64(0x0000FFFF0000FFFF);
+ //REG2 = ((REG2 << 16) | REG2) & glm::uint64(0x0000FFFF0000FFFF);
+ Reg2 = _mm_slli_si128(Reg1, 2);
+ Reg1 = _mm_or_si128(Reg2, Reg1);
+ Reg1 = _mm_and_si128(Reg1, Mask4);
+
+ //REG1 = ((REG1 << 8) | REG1) & glm::uint64(0x00FF00FF00FF00FF);
+ //REG2 = ((REG2 << 8) | REG2) & glm::uint64(0x00FF00FF00FF00FF);
+ Reg2 = _mm_slli_si128(Reg1, 1);
+ Reg1 = _mm_or_si128(Reg2, Reg1);
+ Reg1 = _mm_and_si128(Reg1, Mask3);
+
+ //REG1 = ((REG1 << 4) | REG1) & glm::uint64(0x0F0F0F0F0F0F0F0F);
+ //REG2 = ((REG2 << 4) | REG2) & glm::uint64(0x0F0F0F0F0F0F0F0F);
+ Reg2 = _mm_slli_epi32(Reg1, 4);
+ Reg1 = _mm_or_si128(Reg2, Reg1);
+ Reg1 = _mm_and_si128(Reg1, Mask2);
+
+ //REG1 = ((REG1 << 2) | REG1) & glm::uint64(0x3333333333333333);
+ //REG2 = ((REG2 << 2) | REG2) & glm::uint64(0x3333333333333333);
+ Reg2 = _mm_slli_epi32(Reg1, 2);
+ Reg1 = _mm_or_si128(Reg2, Reg1);
+ Reg1 = _mm_and_si128(Reg1, Mask1);
+
+ //REG1 = ((REG1 << 1) | REG1) & glm::uint64(0x5555555555555555);
+ //REG2 = ((REG2 << 1) | REG2) & glm::uint64(0x5555555555555555);
+ Reg2 = _mm_slli_epi32(Reg1, 1);
+ Reg1 = _mm_or_si128(Reg2, Reg1);
+ Reg1 = _mm_and_si128(Reg1, Mask0);
+
+ //return REG1 | (REG2 << 1);
+ Reg2 = _mm_slli_epi32(Reg1, 1);
+ Reg2 = _mm_srli_si128(Reg2, 8);
+ Reg1 = _mm_or_si128(Reg1, Reg2);
+
+ GLM_ALIGN(16) glm::uint64 Result[2];
+ _mm_store_si128((__m128i*)Result, Reg1);
+
+ return Result[0];
+ }
+
+ inline glm::uint64 sseUnalignedBitfieldInterleave(glm::uint32 x, glm::uint32 y)
+ {
+ glm::uint32 const Array[4] = {x, 0, y, 0};
+
+ __m128i const Mask4 = _mm_set1_epi32(0x0000FFFF);
+ __m128i const Mask3 = _mm_set1_epi32(0x00FF00FF);
+ __m128i const Mask2 = _mm_set1_epi32(0x0F0F0F0F);
+ __m128i const Mask1 = _mm_set1_epi32(0x33333333);
+ __m128i const Mask0 = _mm_set1_epi32(0x55555555);
+
+ __m128i Reg1;
+ __m128i Reg2;
+
+ // REG1 = x;
+ // REG2 = y;
+ Reg1 = _mm_loadu_si128((__m128i*)Array);
+
+ //REG1 = ((REG1 << 16) | REG1) & glm::uint64(0x0000FFFF0000FFFF);
+ //REG2 = ((REG2 << 16) | REG2) & glm::uint64(0x0000FFFF0000FFFF);
+ Reg2 = _mm_slli_si128(Reg1, 2);
+ Reg1 = _mm_or_si128(Reg2, Reg1);
+ Reg1 = _mm_and_si128(Reg1, Mask4);
+
+ //REG1 = ((REG1 << 8) | REG1) & glm::uint64(0x00FF00FF00FF00FF);
+ //REG2 = ((REG2 << 8) | REG2) & glm::uint64(0x00FF00FF00FF00FF);
+ Reg2 = _mm_slli_si128(Reg1, 1);
+ Reg1 = _mm_or_si128(Reg2, Reg1);
+ Reg1 = _mm_and_si128(Reg1, Mask3);
+
+ //REG1 = ((REG1 << 4) | REG1) & glm::uint64(0x0F0F0F0F0F0F0F0F);
+ //REG2 = ((REG2 << 4) | REG2) & glm::uint64(0x0F0F0F0F0F0F0F0F);
+ Reg2 = _mm_slli_epi32(Reg1, 4);
+ Reg1 = _mm_or_si128(Reg2, Reg1);
+ Reg1 = _mm_and_si128(Reg1, Mask2);
+
+ //REG1 = ((REG1 << 2) | REG1) & glm::uint64(0x3333333333333333);
+ //REG2 = ((REG2 << 2) | REG2) & glm::uint64(0x3333333333333333);
+ Reg2 = _mm_slli_epi32(Reg1, 2);
+ Reg1 = _mm_or_si128(Reg2, Reg1);
+ Reg1 = _mm_and_si128(Reg1, Mask1);
+
+ //REG1 = ((REG1 << 1) | REG1) & glm::uint64(0x5555555555555555);
+ //REG2 = ((REG2 << 1) | REG2) & glm::uint64(0x5555555555555555);
+ Reg2 = _mm_slli_epi32(Reg1, 1);
+ Reg1 = _mm_or_si128(Reg2, Reg1);
+ Reg1 = _mm_and_si128(Reg1, Mask0);
+
+ //return REG1 | (REG2 << 1);
+ Reg2 = _mm_slli_epi32(Reg1, 1);
+ Reg2 = _mm_srli_si128(Reg2, 8);
+ Reg1 = _mm_or_si128(Reg1, Reg2);
+
+ glm::uint64 Result[2];
+ _mm_storeu_si128((__m128i*)Result, Reg1);
+
+ return Result[0];
+ }
+#endif//(GLM_ARCH != GLM_ARCH_PURE)
+
+ int test()
+ {
+ {
+ for(glm::uint32 y = 0; y < (1 << 10); ++y)
+ for(glm::uint32 x = 0; x < (1 << 10); ++x)
+ {
+ glm::uint64 A = glm::bitfieldInterleave(x, y);
+ glm::uint64 B = fastBitfieldInterleave(x, y);
+ //glm::uint64 C = loopBitfieldInterleave(x, y);
+ glm::uint64 D = interleaveBitfieldInterleave(x, y);
+
+ assert(A == B);
+ //assert(A == C);
+ assert(A == D);
+
+# if GLM_ARCH & GLM_ARCH_SSE2_BIT
+ glm::uint64 E = sseBitfieldInterleave(x, y);
+ glm::uint64 F = sseUnalignedBitfieldInterleave(x, y);
+ assert(A == E);
+ assert(A == F);
+
+ __m128i G = glm_i128_interleave(_mm_set_epi32(0, y, 0, x));
+ glm::uint64 Result[2];
+ _mm_storeu_si128((__m128i*)Result, G);
+ assert(A == Result[0]);
+# endif//GLM_ARCH & GLM_ARCH_SSE2_BIT
+ }
+ }
+
+ {
+ for(glm::uint8 y = 0; y < 127; ++y)
+ for(glm::uint8 x = 0; x < 127; ++x)
+ {
+ glm::uint64 A(glm::bitfieldInterleave(glm::uint8(x), glm::uint8(y)));
+ glm::uint64 B(glm::bitfieldInterleave(glm::uint16(x), glm::uint16(y)));
+ glm::uint64 C(glm::bitfieldInterleave(glm::uint32(x), glm::uint32(y)));
+
+ glm::int64 D(glm::bitfieldInterleave(glm::int8(x), glm::int8(y)));
+ glm::int64 E(glm::bitfieldInterleave(glm::int16(x), glm::int16(y)));
+ glm::int64 F(glm::bitfieldInterleave(glm::int32(x), glm::int32(y)));
+
+ assert(D == E);
+ assert(D == F);
+ }
+ }
+
+ return 0;
+ }
+
+ int perf()
+ {
+ glm::uint32 x_max = 1 << 11;
+ glm::uint32 y_max = 1 << 10;
+
+ // ALU
+ std::vector<glm::uint64> Data(x_max * y_max);
+ std::vector<glm::u32vec2> Param(x_max * y_max);
+ for(glm::uint32 i = 0; i < Param.size(); ++i)
+ Param[i] = glm::u32vec2(i % x_max, i / y_max);
+
+ {
+ std::clock_t LastTime = std::clock();
+
+ for(std::size_t i = 0; i < Data.size(); ++i)
+ Data[i] = glm::bitfieldInterleave(Param[i].x, Param[i].y);
+
+ std::clock_t Time = std::clock() - LastTime;
+
+ std::printf("glm::bitfieldInterleave Time %d clocks\n", static_cast<unsigned int>(Time));
+ }
+
+ {
+ std::clock_t LastTime = std::clock();
+
+ for(std::size_t i = 0; i < Data.size(); ++i)
+ Data[i] = fastBitfieldInterleave(Param[i].x, Param[i].y);
+
+ std::clock_t Time = std::clock() - LastTime;
+
+ std::printf("fastBitfieldInterleave Time %d clocks\n", static_cast<unsigned int>(Time));
+ }
+/*
+ {
+ std::clock_t LastTime = std::clock();
+
+ for(std::size_t i = 0; i < Data.size(); ++i)
+ Data[i] = loopBitfieldInterleave(Param[i].x, Param[i].y);
+
+ std::clock_t Time = std::clock() - LastTime;
+
+ std::printf("loopBitfieldInterleave Time %d clocks\n", static_cast<unsigned int>(Time));
+ }
+*/
+ {
+ std::clock_t LastTime = std::clock();
+
+ for(std::size_t i = 0; i < Data.size(); ++i)
+ Data[i] = interleaveBitfieldInterleave(Param[i].x, Param[i].y);
+
+ std::clock_t Time = std::clock() - LastTime;
+
+ std::printf("interleaveBitfieldInterleave Time %d clocks\n", static_cast<unsigned int>(Time));
+ }
+
+# if(GLM_ARCH != GLM_ARCH_PURE)
+ {
+ std::clock_t LastTime = std::clock();
+
+ for(std::size_t i = 0; i < Data.size(); ++i)
+ Data[i] = sseBitfieldInterleave(Param[i].x, Param[i].y);
+
+ std::clock_t Time = std::clock() - LastTime;
+
+ std::printf("sseBitfieldInterleave Time %d clocks\n", static_cast<unsigned int>(Time));
+ }
+
+ {
+ std::clock_t LastTime = std::clock();
+
+ for(std::size_t i = 0; i < Data.size(); ++i)
+ Data[i] = sseUnalignedBitfieldInterleave(Param[i].x, Param[i].y);
+
+ std::clock_t Time = std::clock() - LastTime;
+
+ std::printf("sseUnalignedBitfieldInterleave Time %d clocks\n", static_cast<unsigned int>(Time));
+ }
+# endif//(GLM_ARCH != GLM_ARCH_PURE)
+
+ {
+ std::clock_t LastTime = std::clock();
+
+ for(std::size_t i = 0; i < Data.size(); ++i)
+ Data[i] = glm::bitfieldInterleave(Param[i].x, Param[i].y, Param[i].x);
+
+ std::clock_t Time = std::clock() - LastTime;
+
+ std::printf("glm::detail::bitfieldInterleave Time %d clocks\n", static_cast<unsigned int>(Time));
+ }
+
+# if(GLM_ARCH & GLM_ARCH_SSE2_BIT && !(GLM_COMPILER & GLM_COMPILER_GCC))
+ {
+ // SIMD
+ std::vector<__m128i> SimdData;
+ SimdData.resize(x_max * y_max);
+ std::vector<__m128i> SimdParam;
+ SimdParam.resize(x_max * y_max);
+ for(int i = 0; i < SimdParam.size(); ++i)
+ SimdParam[i] = _mm_set_epi32(i % x_max, 0, i / y_max, 0);
+
+ std::clock_t LastTime = std::clock();
+
+ for(std::size_t i = 0; i < SimdData.size(); ++i)
+ SimdData[i] = glm_i128_interleave(SimdParam[i]);
+
+ std::clock_t Time = std::clock() - LastTime;
+
+ std::printf("_mm_bit_interleave_si128 Time %d clocks\n", static_cast<unsigned int>(Time));
+ }
+# endif//GLM_ARCH & GLM_ARCH_SSE2_BIT
+
+ return 0;
+ }
+}//namespace bitfieldInterleave
+
+int main()
+{
+ int Error(0);
+
+ Error += ::mask::test();
+ Error += ::bitfieldInterleave3::test();
+ Error += ::bitfieldInterleave4::test();
+ Error += ::bitfieldInterleave::test();
+ //Error += ::bitRevert::test();
+
+# ifdef NDEBUG
+ Error += ::mask::perf();
+ Error += ::bitfieldInterleave::perf();
+# endif//NDEBUG
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtc/gtc_color_encoding.cpp b/src/third_party/glm/test/gtc/gtc_color_encoding.cpp
new file mode 100644
index 0000000..4909a82
--- /dev/null
+++ b/src/third_party/glm/test/gtc/gtc_color_encoding.cpp
@@ -0,0 +1,51 @@
+#include <glm/gtc/color_encoding.hpp>
+#include <glm/gtc/color_space.hpp>
+#include <glm/gtc/epsilon.hpp>
+#include <glm/gtc/constants.hpp>
+
+namespace srgb
+{
+ int test()
+ {
+ int Error(0);
+
+ glm::vec3 const ColorSourceRGB(1.0, 0.5, 0.0);
+/*
+ {
+ glm::vec3 const ColorSRGB = glm::convertLinearSRGBToD65XYZ(ColorSourceRGB);
+ glm::vec3 const ColorRGB = glm::convertD65XYZToLinearSRGB(ColorSRGB);
+ Error += glm::all(glm::epsilonEqual(ColorSourceRGB, ColorRGB, 0.00001f)) ? 0 : 1;
+ }
+*/
+ {
+ glm::vec3 const ColorSRGB = glm::convertLinearToSRGB(ColorSourceRGB, 2.8f);
+ glm::vec3 const ColorRGB = glm::convertSRGBToLinear(ColorSRGB, 2.8f);
+ Error += glm::all(glm::epsilonEqual(ColorSourceRGB, ColorRGB, 0.00001f)) ? 0 : 1;
+ }
+
+ glm::vec4 const ColorSourceRGBA(1.0, 0.5, 0.0, 1.0);
+
+ {
+ glm::vec4 const ColorSRGB = glm::convertLinearToSRGB(ColorSourceRGBA);
+ glm::vec4 const ColorRGB = glm::convertSRGBToLinear(ColorSRGB);
+ Error += glm::all(glm::epsilonEqual(ColorSourceRGBA, ColorRGB, 0.00001f)) ? 0 : 1;
+ }
+
+ {
+ glm::vec4 const ColorSRGB = glm::convertLinearToSRGB(ColorSourceRGBA, 2.8f);
+ glm::vec4 const ColorRGB = glm::convertSRGBToLinear(ColorSRGB, 2.8f);
+ Error += glm::all(glm::epsilonEqual(ColorSourceRGBA, ColorRGB, 0.00001f)) ? 0 : 1;
+ }
+
+ return Error;
+ }
+}//namespace srgb
+
+int main()
+{
+ int Error(0);
+
+ Error += srgb::test();
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtc/gtc_color_space.cpp b/src/third_party/glm/test/gtc/gtc_color_space.cpp
new file mode 100644
index 0000000..a834f39
--- /dev/null
+++ b/src/third_party/glm/test/gtc/gtc_color_space.cpp
@@ -0,0 +1,50 @@
+#include <glm/gtc/color_space.hpp>
+#include <glm/gtc/epsilon.hpp>
+#include <glm/gtc/constants.hpp>
+
+namespace srgb
+{
+ int test()
+ {
+ int Error(0);
+
+ glm::vec3 const ColorSourceRGB(1.0, 0.5, 0.0);
+
+ {
+ glm::vec3 const ColorSRGB = glm::convertLinearToSRGB(ColorSourceRGB);
+ glm::vec3 const ColorRGB = glm::convertSRGBToLinear(ColorSRGB);
+ Error += glm::all(glm::epsilonEqual(ColorSourceRGB, ColorRGB, 0.00001f)) ? 0 : 1;
+ }
+
+ {
+ glm::vec3 const ColorSRGB = glm::convertLinearToSRGB(ColorSourceRGB, 2.8f);
+ glm::vec3 const ColorRGB = glm::convertSRGBToLinear(ColorSRGB, 2.8f);
+ Error += glm::all(glm::epsilonEqual(ColorSourceRGB, ColorRGB, 0.00001f)) ? 0 : 1;
+ }
+
+ glm::vec4 const ColorSourceRGBA(1.0, 0.5, 0.0, 1.0);
+
+ {
+ glm::vec4 const ColorSRGB = glm::convertLinearToSRGB(ColorSourceRGBA);
+ glm::vec4 const ColorRGB = glm::convertSRGBToLinear(ColorSRGB);
+ Error += glm::all(glm::epsilonEqual(ColorSourceRGBA, ColorRGB, 0.00001f)) ? 0 : 1;
+ }
+
+ {
+ glm::vec4 const ColorSRGB = glm::convertLinearToSRGB(ColorSourceRGBA, 2.8f);
+ glm::vec4 const ColorRGB = glm::convertSRGBToLinear(ColorSRGB, 2.8f);
+ Error += glm::all(glm::epsilonEqual(ColorSourceRGBA, ColorRGB, 0.00001f)) ? 0 : 1;
+ }
+
+ return Error;
+ }
+}//namespace srgb
+
+int main()
+{
+ int Error(0);
+
+ Error += srgb::test();
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtc/gtc_constants.cpp b/src/third_party/glm/test/gtc/gtc_constants.cpp
new file mode 100644
index 0000000..65903e9
--- /dev/null
+++ b/src/third_party/glm/test/gtc/gtc_constants.cpp
@@ -0,0 +1,28 @@
+#include <glm/gtc/constants.hpp>
+
+int test_epsilon()
+{
+ int Error(0);
+
+ {
+ float Test = glm::epsilon<float>();
+ }
+
+ {
+ double Test = glm::epsilon<double>();
+ }
+
+ return Error;
+}
+
+int main()
+{
+ int Error(0);
+
+ //float MinHalf = 0.0f;
+ //while (glm::half(MinHalf) == glm::half(0.0f))
+ // MinHalf += std::numeric_limits<float>::epsilon();
+ Error += test_epsilon();
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtc/gtc_epsilon.cpp b/src/third_party/glm/test/gtc/gtc_epsilon.cpp
new file mode 100644
index 0000000..20c59a1
--- /dev/null
+++ b/src/third_party/glm/test/gtc/gtc_epsilon.cpp
@@ -0,0 +1,77 @@
+#include <glm/gtc/epsilon.hpp>
+#include <glm/gtc/constants.hpp>
+#include <glm/vector_relational.hpp>
+
+int test_defined()
+{
+ glm::epsilonEqual(glm::vec2(), glm::vec2(), glm::vec2());
+ glm::epsilonEqual(glm::vec3(), glm::vec3(), glm::vec3());
+ glm::epsilonEqual(glm::vec4(), glm::vec4(), glm::vec4());
+
+ glm::epsilonNotEqual(glm::vec2(), glm::vec2(), glm::vec2());
+ glm::epsilonNotEqual(glm::vec3(), glm::vec3(), glm::vec3());
+ glm::epsilonNotEqual(glm::vec4(), glm::vec4(), glm::vec4());
+
+ glm::epsilonEqual(glm::vec2(), glm::vec2(), 0.0f);
+ glm::epsilonEqual(glm::vec3(), glm::vec3(), 0.0f);
+ glm::epsilonEqual(glm::vec4(), glm::vec4(), 0.0f);
+ glm::epsilonEqual(glm::quat(), glm::quat(), 0.0f);
+
+ glm::epsilonNotEqual(glm::vec2(), glm::vec2(), 0.0f);
+ glm::epsilonNotEqual(glm::vec3(), glm::vec3(), 0.0f);
+ glm::epsilonNotEqual(glm::vec4(), glm::vec4(), 0.0f);
+ glm::epsilonNotEqual(glm::quat(), glm::quat(), 0.0f);
+
+ return 0;
+}
+
+template <typename T>
+int test_equal()
+{
+ int Error(0);
+
+ {
+ T A = glm::epsilon<T>();
+ T B = glm::epsilon<T>();
+ Error += glm::epsilonEqual(A, B, glm::epsilon<T>() * T(2)) ? 0 : 1;
+ }
+
+ {
+ T A(0);
+ T B = static_cast<T>(0) + glm::epsilon<T>();
+ Error += glm::epsilonEqual(A, B, glm::epsilon<T>() * T(2)) ? 0 : 1;
+ }
+
+ {
+ T A(0);
+ T B = static_cast<T>(0) - glm::epsilon<T>();
+ Error += glm::epsilonEqual(A, B, glm::epsilon<T>() * T(2)) ? 0 : 1;
+ }
+
+ {
+ T A = static_cast<T>(0) + glm::epsilon<T>();
+ T B = static_cast<T>(0);
+ Error += glm::epsilonEqual(A, B, glm::epsilon<T>() * T(2)) ? 0 : 1;
+ }
+
+ {
+ T A = static_cast<T>(0) - glm::epsilon<T>();
+ T B = static_cast<T>(0);
+ Error += glm::epsilonEqual(A, B, glm::epsilon<T>() * T(2)) ? 0 : 1;
+ }
+
+ return Error;
+}
+
+int main()
+{
+ int Error(0);
+
+ Error += test_defined();
+ Error += test_equal<float>();
+ Error += test_equal<double>();
+
+ return Error;
+}
+
+
diff --git a/src/third_party/glm/test/gtc/gtc_functions.cpp b/src/third_party/glm/test/gtc/gtc_functions.cpp
new file mode 100644
index 0000000..0bdf8ab
--- /dev/null
+++ b/src/third_party/glm/test/gtc/gtc_functions.cpp
@@ -0,0 +1,35 @@
+#include <glm/gtc/functions.hpp>
+#include <vector>
+
+int test_gauss_1d()
+{
+ int Error = 0;
+
+ std::vector<float> Result(20);
+ for(std::size_t i = 0, n = Result.size(); i < n; ++i)
+ Result[i] = glm::gauss(static_cast<float>(i) * 0.1f, 0.0f, 1.0f);
+
+ return Error;
+}
+
+int test_gauss_2d()
+{
+ int Error = 0;
+
+ std::vector<float> Result(20);
+ for(std::size_t i = 0, n = Result.size(); i < n; ++i)
+ Result[i] = glm::gauss(glm::vec2(i) * 0.1f, glm::vec2(0.0f), glm::vec2(1.0f));
+
+ return Error;
+}
+
+int main()
+{
+ int Error = 0;
+
+ Error += test_gauss_1d();
+ Error += test_gauss_2d();
+
+ return Error;
+}
+
diff --git a/src/third_party/glm/test/gtc/gtc_integer.cpp b/src/third_party/glm/test/gtc/gtc_integer.cpp
new file mode 100644
index 0000000..f3d056e
--- /dev/null
+++ b/src/third_party/glm/test/gtc/gtc_integer.cpp
@@ -0,0 +1,232 @@
+#define GLM_FORCE_INLINE
+#include <glm/gtc/epsilon.hpp>
+#include <glm/gtc/integer.hpp>
+#include <glm/gtc/type_precision.hpp>
+#include <glm/gtc/vec1.hpp>
+#include <glm/gtx/type_aligned.hpp>
+#include <glm/vector_relational.hpp>
+#include <glm/vec2.hpp>
+#include <glm/vec3.hpp>
+#include <glm/vec4.hpp>
+#include <ctime>
+#include <cstdio>
+#include <vector>
+#include <cmath>
+
+namespace log2_
+{
+ int test()
+ {
+ int Error = 0;
+
+ int A0 = static_cast<int>(glm::log2(16.f));
+ glm::ivec1 B0(glm::log2(glm::vec1(16.f)));
+ glm::ivec2 C0(glm::log2(glm::vec2(16.f)));
+ glm::ivec3 D0(glm::log2(glm::vec3(16.f)));
+ glm::ivec4 E0(glm::log2(glm::vec4(16.f)));
+
+ int A1 = glm::log2(int(16));
+ glm::ivec1 B1 = glm::log2(glm::ivec1(16));
+ glm::ivec2 C1 = glm::log2(glm::ivec2(16));
+ glm::ivec3 D1 = glm::log2(glm::ivec3(16));
+ glm::ivec4 E1 = glm::log2(glm::ivec4(16));
+
+ Error += A0 == A1 ? 0 : 1;
+ Error += glm::all(glm::equal(B0, B1)) ? 0 : 1;
+ Error += glm::all(glm::equal(C0, C1)) ? 0 : 1;
+ Error += glm::all(glm::equal(D0, D1)) ? 0 : 1;
+ Error += glm::all(glm::equal(E0, E1)) ? 0 : 1;
+
+ glm::uint64 A2 = glm::log2(glm::uint64(16));
+ glm::u64vec1 B2 = glm::log2(glm::u64vec1(16));
+ glm::u64vec2 C2 = glm::log2(glm::u64vec2(16));
+ glm::u64vec3 D2 = glm::log2(glm::u64vec3(16));
+ glm::u64vec4 E2 = glm::log2(glm::u64vec4(16));
+
+ Error += A2 == glm::uint64(4) ? 0 : 1;
+ Error += glm::all(glm::equal(B2, glm::u64vec1(4))) ? 0 : 1;
+ Error += glm::all(glm::equal(C2, glm::u64vec2(4))) ? 0 : 1;
+ Error += glm::all(glm::equal(D2, glm::u64vec3(4))) ? 0 : 1;
+ Error += glm::all(glm::equal(E2, glm::u64vec4(4))) ? 0 : 1;
+
+ return Error;
+ }
+
+ int perf(std::size_t Count)
+ {
+ int Error = 0;
+
+ {
+ std::vector<int> Result;
+ Result.resize(Count);
+
+ std::clock_t Begin = clock();
+
+ for(int i = 0; i < static_cast<int>(Count); ++i)
+ Result[i] = glm::log2(static_cast<int>(i));
+
+ std::clock_t End = clock();
+
+ printf("glm::log2<int>: %ld clocks\n", End - Begin);
+ }
+
+ {
+ std::vector<glm::ivec4> Result;
+ Result.resize(Count);
+
+ std::clock_t Begin = clock();
+
+ for(int i = 0; i < static_cast<int>(Count); ++i)
+ Result[i] = glm::log2(glm::ivec4(i));
+
+ std::clock_t End = clock();
+
+ printf("glm::log2<ivec4>: %ld clocks\n", End - Begin);
+ }
+
+# if GLM_HAS_BITSCAN_WINDOWS
+ {
+ std::vector<glm::ivec4> Result;
+ Result.resize(Count);
+
+ std::clock_t Begin = clock();
+
+ for(std::size_t i = 0; i < Count; ++i)
+ {
+ glm::tvec4<unsigned long, glm::defaultp> Tmp(glm::uninitialize);
+ _BitScanReverse(&Tmp.x, i);
+ _BitScanReverse(&Tmp.y, i);
+ _BitScanReverse(&Tmp.z, i);
+ _BitScanReverse(&Tmp.w, i);
+ Result[i] = glm::ivec4(Tmp);
+ }
+
+ std::clock_t End = clock();
+
+ printf("glm::log2<ivec4> inlined: %ld clocks\n", End - Begin);
+ }
+
+
+ {
+ std::vector<glm::tvec4<unsigned long, glm::defaultp> > Result;
+ Result.resize(Count);
+
+ std::clock_t Begin = clock();
+
+ for(std::size_t i = 0; i < Count; ++i)
+ {
+ _BitScanReverse(&Result[i].x, i);
+ _BitScanReverse(&Result[i].y, i);
+ _BitScanReverse(&Result[i].z, i);
+ _BitScanReverse(&Result[i].w, i);
+ }
+
+ std::clock_t End = clock();
+
+ printf("glm::log2<ivec4> inlined no cast: %ld clocks\n", End - Begin);
+ }
+
+
+ {
+ std::vector<glm::ivec4> Result;
+ Result.resize(Count);
+
+ std::clock_t Begin = clock();
+
+ for(std::size_t i = 0; i < Count; ++i)
+ {
+ _BitScanReverse(reinterpret_cast<unsigned long*>(&Result[i].x), i);
+ _BitScanReverse(reinterpret_cast<unsigned long*>(&Result[i].y), i);
+ _BitScanReverse(reinterpret_cast<unsigned long*>(&Result[i].z), i);
+ _BitScanReverse(reinterpret_cast<unsigned long*>(&Result[i].w), i);
+ }
+
+ std::clock_t End = clock();
+
+ printf("glm::log2<ivec4> reinterpret: %ld clocks\n", End - Begin);
+ }
+# endif//GLM_HAS_BITSCAN_WINDOWS
+
+ {
+ std::vector<float> Result;
+ Result.resize(Count);
+
+ std::clock_t Begin = clock();
+
+ for(std::size_t i = 0; i < Count; ++i)
+ Result[i] = glm::log2(static_cast<float>(i));
+
+ std::clock_t End = clock();
+
+ printf("glm::log2<float>: %ld clocks\n", End - Begin);
+ }
+
+ {
+ std::vector<glm::vec4> Result;
+ Result.resize(Count);
+
+ std::clock_t Begin = clock();
+
+ for(int i = 0; i < static_cast<int>(Count); ++i)
+ Result[i] = glm::log2(glm::vec4(i));
+
+ std::clock_t End = clock();
+
+ printf("glm::log2<vec4>: %ld clocks\n", End - Begin);
+ }
+
+ return Error;
+ }
+}//namespace log2_
+
+namespace iround
+{
+ int test()
+ {
+ int Error = 0;
+
+ for(float f = 0.0f; f < 3.1f; f += 0.05f)
+ {
+ int RoundFast = glm::iround(f);
+ int RoundSTD = glm::round(f);
+ Error += RoundFast == RoundSTD ? 0 : 1;
+ assert(!Error);
+ }
+
+ return Error;
+ }
+}//namespace iround
+
+namespace uround
+{
+ int test()
+ {
+ int Error = 0;
+
+ for(float f = 0.0f; f < 3.1f; f += 0.05f)
+ {
+ int RoundFast = glm::uround(f);
+ int RoundSTD = glm::round(f);
+ Error += RoundFast == RoundSTD ? 0 : 1;
+ assert(!Error);
+ }
+
+ return Error;
+ }
+}//namespace uround
+
+int main()
+{
+ int Error(0);
+
+ Error += ::log2_::test();
+ Error += ::iround::test();
+ Error += ::uround::test();
+
+# ifdef NDEBUG
+ std::size_t const Samples(1000);
+ Error += ::log2_::perf(Samples);
+# endif//NDEBUG
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtc/gtc_matrix_access.cpp b/src/third_party/glm/test/gtc/gtc_matrix_access.cpp
new file mode 100644
index 0000000..bb98199
--- /dev/null
+++ b/src/third_party/glm/test/gtc/gtc_matrix_access.cpp
@@ -0,0 +1,381 @@
+#include <glm/gtc/matrix_access.hpp>
+#include <glm/mat2x2.hpp>
+#include <glm/mat2x3.hpp>
+#include <glm/mat2x4.hpp>
+#include <glm/mat3x2.hpp>
+#include <glm/mat3x3.hpp>
+#include <glm/mat3x4.hpp>
+#include <glm/mat4x2.hpp>
+#include <glm/mat4x3.hpp>
+#include <glm/mat4x4.hpp>
+
+int test_mat2x2_row_set()
+{
+ int Error = 0;
+
+ glm::mat2x2 m(1);
+
+ m = glm::row(m, 0, glm::vec2( 0, 1));
+ m = glm::row(m, 1, glm::vec2( 4, 5));
+
+ Error += glm::row(m, 0) == glm::vec2( 0, 1) ? 0 : 1;
+ Error += glm::row(m, 1) == glm::vec2( 4, 5) ? 0 : 1;
+
+ return Error;
+}
+
+int test_mat2x2_col_set()
+{
+ int Error = 0;
+
+ glm::mat2x2 m(1);
+
+ m = glm::column(m, 0, glm::vec2( 0, 1));
+ m = glm::column(m, 1, glm::vec2( 4, 5));
+
+ Error += glm::column(m, 0) == glm::vec2( 0, 1) ? 0 : 1;
+ Error += glm::column(m, 1) == glm::vec2( 4, 5) ? 0 : 1;
+
+ return Error;
+}
+
+int test_mat2x3_row_set()
+{
+ int Error = 0;
+
+ glm::mat2x3 m(1);
+
+ m = glm::row(m, 0, glm::vec2( 0, 1));
+ m = glm::row(m, 1, glm::vec2( 4, 5));
+ m = glm::row(m, 2, glm::vec2( 8, 9));
+
+ Error += glm::row(m, 0) == glm::vec2( 0, 1) ? 0 : 1;
+ Error += glm::row(m, 1) == glm::vec2( 4, 5) ? 0 : 1;
+ Error += glm::row(m, 2) == glm::vec2( 8, 9) ? 0 : 1;
+
+ return Error;
+}
+
+int test_mat2x3_col_set()
+{
+ int Error = 0;
+
+ glm::mat2x3 m(1);
+
+ m = glm::column(m, 0, glm::vec3( 0, 1, 2));
+ m = glm::column(m, 1, glm::vec3( 4, 5, 6));
+
+ Error += glm::column(m, 0) == glm::vec3( 0, 1, 2) ? 0 : 1;
+ Error += glm::column(m, 1) == glm::vec3( 4, 5, 6) ? 0 : 1;
+
+ return Error;
+}
+
+int test_mat2x4_row_set()
+{
+ int Error = 0;
+
+ glm::mat2x4 m(1);
+
+ m = glm::row(m, 0, glm::vec2( 0, 1));
+ m = glm::row(m, 1, glm::vec2( 4, 5));
+ m = glm::row(m, 2, glm::vec2( 8, 9));
+ m = glm::row(m, 3, glm::vec2(12, 13));
+
+ Error += glm::row(m, 0) == glm::vec2( 0, 1) ? 0 : 1;
+ Error += glm::row(m, 1) == glm::vec2( 4, 5) ? 0 : 1;
+ Error += glm::row(m, 2) == glm::vec2( 8, 9) ? 0 : 1;
+ Error += glm::row(m, 3) == glm::vec2(12, 13) ? 0 : 1;
+
+ return Error;
+}
+
+int test_mat2x4_col_set()
+{
+ int Error = 0;
+
+ glm::mat2x4 m(1);
+
+ m = glm::column(m, 0, glm::vec4( 0, 1, 2, 3));
+ m = glm::column(m, 1, glm::vec4( 4, 5, 6, 7));
+
+ Error += glm::column(m, 0) == glm::vec4( 0, 1, 2, 3) ? 0 : 1;
+ Error += glm::column(m, 1) == glm::vec4( 4, 5, 6, 7) ? 0 : 1;
+
+ return Error;
+}
+
+int test_mat3x2_row_set()
+{
+ int Error = 0;
+
+ glm::mat3x2 m(1);
+
+ m = glm::row(m, 0, glm::vec3( 0, 1, 2));
+ m = glm::row(m, 1, glm::vec3( 4, 5, 6));
+
+ Error += glm::row(m, 0) == glm::vec3( 0, 1, 2) ? 0 : 1;
+ Error += glm::row(m, 1) == glm::vec3( 4, 5, 6) ? 0 : 1;
+
+ return Error;
+}
+
+int test_mat3x2_col_set()
+{
+ int Error = 0;
+
+ glm::mat3x2 m(1);
+
+ m = glm::column(m, 0, glm::vec2( 0, 1));
+ m = glm::column(m, 1, glm::vec2( 4, 5));
+ m = glm::column(m, 2, glm::vec2( 8, 9));
+
+ Error += glm::column(m, 0) == glm::vec2( 0, 1) ? 0 : 1;
+ Error += glm::column(m, 1) == glm::vec2( 4, 5) ? 0 : 1;
+ Error += glm::column(m, 2) == glm::vec2( 8, 9) ? 0 : 1;
+
+ return Error;
+}
+
+int test_mat3x3_row_set()
+{
+ int Error = 0;
+
+ glm::mat3x3 m(1);
+
+ m = glm::row(m, 0, glm::vec3( 0, 1, 2));
+ m = glm::row(m, 1, glm::vec3( 4, 5, 6));
+ m = glm::row(m, 2, glm::vec3( 8, 9, 10));
+
+ Error += glm::row(m, 0) == glm::vec3( 0, 1, 2) ? 0 : 1;
+ Error += glm::row(m, 1) == glm::vec3( 4, 5, 6) ? 0 : 1;
+ Error += glm::row(m, 2) == glm::vec3( 8, 9, 10) ? 0 : 1;
+
+ return Error;
+}
+
+int test_mat3x3_col_set()
+{
+ int Error = 0;
+
+ glm::mat3x3 m(1);
+
+ m = glm::column(m, 0, glm::vec3( 0, 1, 2));
+ m = glm::column(m, 1, glm::vec3( 4, 5, 6));
+ m = glm::column(m, 2, glm::vec3( 8, 9, 10));
+
+ Error += glm::column(m, 0) == glm::vec3( 0, 1, 2) ? 0 : 1;
+ Error += glm::column(m, 1) == glm::vec3( 4, 5, 6) ? 0 : 1;
+ Error += glm::column(m, 2) == glm::vec3( 8, 9, 10) ? 0 : 1;
+
+ return Error;
+}
+
+int test_mat3x4_row_set()
+{
+ int Error = 0;
+
+ glm::mat3x4 m(1);
+
+ m = glm::row(m, 0, glm::vec3( 0, 1, 2));
+ m = glm::row(m, 1, glm::vec3( 4, 5, 6));
+ m = glm::row(m, 2, glm::vec3( 8, 9, 10));
+ m = glm::row(m, 3, glm::vec3(12, 13, 14));
+
+ Error += glm::row(m, 0) == glm::vec3( 0, 1, 2) ? 0 : 1;
+ Error += glm::row(m, 1) == glm::vec3( 4, 5, 6) ? 0 : 1;
+ Error += glm::row(m, 2) == glm::vec3( 8, 9, 10) ? 0 : 1;
+ Error += glm::row(m, 3) == glm::vec3(12, 13, 14) ? 0 : 1;
+
+ return Error;
+}
+
+int test_mat3x4_col_set()
+{
+ int Error = 0;
+
+ glm::mat3x4 m(1);
+
+ m = glm::column(m, 0, glm::vec4( 0, 1, 2, 3));
+ m = glm::column(m, 1, glm::vec4( 4, 5, 6, 7));
+ m = glm::column(m, 2, glm::vec4( 8, 9, 10, 11));
+
+ Error += glm::column(m, 0) == glm::vec4( 0, 1, 2, 3) ? 0 : 1;
+ Error += glm::column(m, 1) == glm::vec4( 4, 5, 6, 7) ? 0 : 1;
+ Error += glm::column(m, 2) == glm::vec4( 8, 9, 10, 11) ? 0 : 1;
+
+ return Error;
+}
+
+int test_mat4x2_row_set()
+{
+ int Error = 0;
+
+ glm::mat4x2 m(1);
+
+ m = glm::row(m, 0, glm::vec4( 0, 1, 2, 3));
+ m = glm::row(m, 1, glm::vec4( 4, 5, 6, 7));
+
+ Error += glm::row(m, 0) == glm::vec4( 0, 1, 2, 3) ? 0 : 1;
+ Error += glm::row(m, 1) == glm::vec4( 4, 5, 6, 7) ? 0 : 1;
+
+ return Error;
+}
+
+int test_mat4x2_col_set()
+{
+ int Error = 0;
+
+ glm::mat4x2 m(1);
+
+ m = glm::column(m, 0, glm::vec2( 0, 1));
+ m = glm::column(m, 1, glm::vec2( 4, 5));
+ m = glm::column(m, 2, glm::vec2( 8, 9));
+ m = glm::column(m, 3, glm::vec2(12, 13));
+
+ Error += glm::column(m, 0) == glm::vec2( 0, 1) ? 0 : 1;
+ Error += glm::column(m, 1) == glm::vec2( 4, 5) ? 0 : 1;
+ Error += glm::column(m, 2) == glm::vec2( 8, 9) ? 0 : 1;
+ Error += glm::column(m, 3) == glm::vec2(12, 13) ? 0 : 1;
+
+ return Error;
+}
+
+int test_mat4x3_row_set()
+{
+ int Error = 0;
+
+ glm::mat4x3 m(1);
+
+ m = glm::row(m, 0, glm::vec4( 0, 1, 2, 3));
+ m = glm::row(m, 1, glm::vec4( 4, 5, 6, 7));
+ m = glm::row(m, 2, glm::vec4( 8, 9, 10, 11));
+
+ Error += glm::row(m, 0) == glm::vec4( 0, 1, 2, 3) ? 0 : 1;
+ Error += glm::row(m, 1) == glm::vec4( 4, 5, 6, 7) ? 0 : 1;
+ Error += glm::row(m, 2) == glm::vec4( 8, 9, 10, 11) ? 0 : 1;
+
+ return Error;
+}
+
+int test_mat4x3_col_set()
+{
+ int Error = 0;
+
+ glm::mat4x3 m(1);
+
+ m = glm::column(m, 0, glm::vec3( 0, 1, 2));
+ m = glm::column(m, 1, glm::vec3( 4, 5, 6));
+ m = glm::column(m, 2, glm::vec3( 8, 9, 10));
+ m = glm::column(m, 3, glm::vec3(12, 13, 14));
+
+ Error += glm::column(m, 0) == glm::vec3( 0, 1, 2) ? 0 : 1;
+ Error += glm::column(m, 1) == glm::vec3( 4, 5, 6) ? 0 : 1;
+ Error += glm::column(m, 2) == glm::vec3( 8, 9, 10) ? 0 : 1;
+ Error += glm::column(m, 3) == glm::vec3(12, 13, 14) ? 0 : 1;
+
+ return Error;
+}
+
+int test_mat4x4_row_set()
+{
+ int Error = 0;
+
+ glm::mat4 m(1);
+
+ m = glm::row(m, 0, glm::vec4( 0, 1, 2, 3));
+ m = glm::row(m, 1, glm::vec4( 4, 5, 6, 7));
+ m = glm::row(m, 2, glm::vec4( 8, 9, 10, 11));
+ m = glm::row(m, 3, glm::vec4(12, 13, 14, 15));
+
+ Error += glm::row(m, 0) == glm::vec4( 0, 1, 2, 3) ? 0 : 1;
+ Error += glm::row(m, 1) == glm::vec4( 4, 5, 6, 7) ? 0 : 1;
+ Error += glm::row(m, 2) == glm::vec4( 8, 9, 10, 11) ? 0 : 1;
+ Error += glm::row(m, 3) == glm::vec4(12, 13, 14, 15) ? 0 : 1;
+
+ return Error;
+}
+
+int test_mat4x4_col_set()
+{
+ int Error = 0;
+
+ glm::mat4 m(1);
+
+ m = glm::column(m, 0, glm::vec4( 0, 1, 2, 3));
+ m = glm::column(m, 1, glm::vec4( 4, 5, 6, 7));
+ m = glm::column(m, 2, glm::vec4( 8, 9, 10, 11));
+ m = glm::column(m, 3, glm::vec4(12, 13, 14, 15));
+
+ Error += glm::column(m, 0) == glm::vec4( 0, 1, 2, 3) ? 0 : 1;
+ Error += glm::column(m, 1) == glm::vec4( 4, 5, 6, 7) ? 0 : 1;
+ Error += glm::column(m, 2) == glm::vec4( 8, 9, 10, 11) ? 0 : 1;
+ Error += glm::column(m, 3) == glm::vec4(12, 13, 14, 15) ? 0 : 1;
+
+ return Error;
+}
+
+int test_mat4x4_row_get()
+{
+ int Error = 0;
+
+ glm::mat4 m(1);
+
+ glm::vec4 A = glm::row(m, 0);
+ Error += A == glm::vec4(1, 0, 0, 0) ? 0 : 1;
+ glm::vec4 B = glm::row(m, 1);
+ Error += B == glm::vec4(0, 1, 0, 0) ? 0 : 1;
+ glm::vec4 C = glm::row(m, 2);
+ Error += C == glm::vec4(0, 0, 1, 0) ? 0 : 1;
+ glm::vec4 D = glm::row(m, 3);
+ Error += D == glm::vec4(0, 0, 0, 1) ? 0 : 1;
+
+ return Error;
+}
+
+int test_mat4x4_col_get()
+{
+ int Error = 0;
+
+ glm::mat4 m(1);
+
+ glm::vec4 A = glm::column(m, 0);
+ Error += A == glm::vec4(1, 0, 0, 0) ? 0 : 1;
+ glm::vec4 B = glm::column(m, 1);
+ Error += B == glm::vec4(0, 1, 0, 0) ? 0 : 1;
+ glm::vec4 C = glm::column(m, 2);
+ Error += C == glm::vec4(0, 0, 1, 0) ? 0 : 1;
+ glm::vec4 D = glm::column(m, 3);
+ Error += D == glm::vec4(0, 0, 0, 1) ? 0 : 1;
+
+ return Error;
+}
+
+int main()
+{
+ int Error = 0;
+
+ Error += test_mat2x2_row_set();
+ Error += test_mat2x2_col_set();
+ Error += test_mat2x3_row_set();
+ Error += test_mat2x3_col_set();
+ Error += test_mat2x4_row_set();
+ Error += test_mat2x4_col_set();
+ Error += test_mat3x2_row_set();
+ Error += test_mat3x2_col_set();
+ Error += test_mat3x3_row_set();
+ Error += test_mat3x3_col_set();
+ Error += test_mat3x4_row_set();
+ Error += test_mat3x4_col_set();
+ Error += test_mat4x2_row_set();
+ Error += test_mat4x2_col_set();
+ Error += test_mat4x3_row_set();
+ Error += test_mat4x3_col_set();
+ Error += test_mat4x4_row_set();
+ Error += test_mat4x4_col_set();
+
+ Error += test_mat4x4_row_get();
+ Error += test_mat4x4_col_get();
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtc/gtc_matrix_integer.cpp b/src/third_party/glm/test/gtc/gtc_matrix_integer.cpp
new file mode 100644
index 0000000..108016a
--- /dev/null
+++ b/src/third_party/glm/test/gtc/gtc_matrix_integer.cpp
@@ -0,0 +1,8 @@
+#include <glm/gtc/matrix_integer.hpp>
+
+int main()
+{
+ int Error = 0;
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtc/gtc_matrix_inverse.cpp b/src/third_party/glm/test/gtc/gtc_matrix_inverse.cpp
new file mode 100644
index 0000000..eaec6e1
--- /dev/null
+++ b/src/third_party/glm/test/gtc/gtc_matrix_inverse.cpp
@@ -0,0 +1,51 @@
+#include <glm/gtc/matrix_inverse.hpp>
+#include <glm/gtc/epsilon.hpp>
+
+int test_affine()
+{
+ int Error = 0;
+
+ {
+ glm::mat3 const M(
+ 2.f, 0.f, 0.f,
+ 0.f, 2.f, 0.f,
+ 0.f, 0.f, 1.f);
+ glm::mat3 const A = glm::affineInverse(M);
+ glm::mat3 const I = glm::inverse(M);
+ glm::mat3 const R = glm::affineInverse(A);
+
+ for(glm::length_t i = 0; i < A.length(); ++i)
+ {
+ Error += glm::all(glm::epsilonEqual(M[i], R[i], 0.01f)) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(A[i], I[i], 0.01f)) ? 0 : 1;
+ }
+ }
+
+ {
+ glm::mat4 const M(
+ 2.f, 0.f, 0.f, 0.f,
+ 0.f, 2.f, 0.f, 0.f,
+ 0.f, 0.f, 2.f, 0.f,
+ 0.f, 0.f, 0.f, 1.f);
+ glm::mat4 const A = glm::affineInverse(M);
+ glm::mat4 const I = glm::inverse(M);
+ glm::mat4 const R = glm::affineInverse(A);
+
+ for(glm::length_t i = 0; i < A.length(); ++i)
+ {
+ Error += glm::all(glm::epsilonEqual(M[i], R[i], 0.01f)) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(A[i], I[i], 0.01f)) ? 0 : 1;
+ }
+ }
+
+ return Error;
+}
+
+int main()
+{
+ int Error = 0;
+
+ Error += test_affine();
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtc/gtc_matrix_transform.cpp b/src/third_party/glm/test/gtc/gtc_matrix_transform.cpp
new file mode 100644
index 0000000..0fd4d2f
--- /dev/null
+++ b/src/third_party/glm/test/gtc/gtc_matrix_transform.cpp
@@ -0,0 +1,54 @@
+#include <glm/gtc/matrix_transform.hpp>
+#include <glm/gtc/constants.hpp>
+
+int test_perspective()
+{
+ int Error = 0;
+
+ glm::mat4 Projection = glm::perspective(glm::pi<float>() * 0.25f, 4.0f / 3.0f, 0.1f, 100.0f);
+
+ return Error;
+}
+
+int test_pick()
+{
+ int Error = 0;
+
+ glm::mat4 Pick = glm::pickMatrix(glm::vec2(1, 2), glm::vec2(3, 4), glm::ivec4(0, 0, 320, 240));
+
+ return Error;
+}
+
+int test_tweakedInfinitePerspective()
+{
+ int Error = 0;
+
+ glm::mat4 ProjectionA = glm::tweakedInfinitePerspective(45.f, 640.f/480.f, 1.0f);
+ glm::mat4 ProjectionB = glm::tweakedInfinitePerspective(45.f, 640.f/480.f, 1.0f, 0.001f);
+
+
+ return Error;
+}
+
+int test_translate()
+{
+ int Error = 0;
+
+ glm::lowp_vec3 v(1.0);
+ glm::lowp_mat4 m(0);
+ glm::lowp_mat4 t = glm::translate(m, v);
+
+ return Error;
+}
+
+int main()
+{
+ int Error = 0;
+
+ Error += test_translate();
+ Error += test_tweakedInfinitePerspective();
+ Error += test_pick();
+ Error += test_perspective();
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtc/gtc_noise.cpp b/src/third_party/glm/test/gtc/gtc_noise.cpp
new file mode 100644
index 0000000..ec58693
--- /dev/null
+++ b/src/third_party/glm/test/gtc/gtc_noise.cpp
@@ -0,0 +1,188 @@
+#include <glm/gtc/noise.hpp>
+#include <gli/gli.hpp>
+#include <gli/gtx/loader.hpp>
+
+int test_simplex()
+{
+ std::size_t const Size = 256;
+
+ {
+ std::vector<glm::byte> ImageData(Size * Size * 3);
+
+ for(std::size_t y = 0; y < Size; ++y)
+ for(std::size_t x = 0; x < Size; ++x)
+ {
+ ImageData[(x + y * Size) * 3 + 0] = glm::byte(glm::simplex(glm::vec2(x / 64.f, y / 64.f)) * 128.f + 127.f);
+ ImageData[(x + y * Size) * 3 + 1] = ImageData[(x + y * Size) * 3 + 0];
+ ImageData[(x + y * Size) * 3 + 2] = ImageData[(x + y * Size) * 3 + 0];
+ }
+
+ gli::texture2D Texture(1);
+ Texture[0] = gli::image2D(glm::uvec2(Size), gli::RGB8U);
+ memcpy(Texture[0].data(), &ImageData[0], ImageData.size());
+ gli::saveDDS9(Texture, "texture_simplex2d_256.dds");
+ }
+
+ {
+ std::vector<glm::byte> ImageData(Size * Size * 3);
+
+ for(std::size_t y = 0; y < Size; ++y)
+ for(std::size_t x = 0; x < Size; ++x)
+ {
+ ImageData[(x + y * Size) * 3 + 0] = glm::byte(glm::simplex(glm::vec3(x / 64.f, y / 64.f, 0.5f)) * 128.f + 127.f);
+ ImageData[(x + y * Size) * 3 + 1] = ImageData[(x + y * Size) * 3 + 0];
+ ImageData[(x + y * Size) * 3 + 2] = ImageData[(x + y * Size) * 3 + 0];
+ }
+
+ gli::texture2D Texture(1);
+ Texture[0] = gli::image2D(glm::uvec2(Size), gli::RGB8U);
+ memcpy(Texture[0].data(), &ImageData[0], ImageData.size());
+ gli::saveDDS9(Texture, "texture_simplex3d_256.dds");
+ }
+
+ {
+ std::vector<glm::byte> ImageData(Size * Size * 3);
+
+ for(std::size_t y = 0; y < Size; ++y)
+ for(std::size_t x = 0; x < Size; ++x)
+ {
+ ImageData[(x + y * Size) * 3 + 0] = glm::byte(glm::simplex(glm::vec4(x / 64.f, y / 64.f, 0.5f, 0.5f)) * 128.f + 127.f);
+ ImageData[(x + y * Size) * 3 + 1] = ImageData[(x + y * Size) * 3 + 0];
+ ImageData[(x + y * Size) * 3 + 2] = ImageData[(x + y * Size) * 3 + 0];
+ }
+
+ gli::texture2D Texture(1);
+ Texture[0] = gli::image2D(glm::uvec2(Size), gli::RGB8U);
+ memcpy(Texture[0].data(), &ImageData[0], ImageData.size());
+ gli::saveDDS9(Texture, "texture_simplex4d_256.dds");
+ }
+
+ return 0;
+}
+
+int test_perlin()
+{
+ std::size_t const Size = 256;
+
+ {
+ std::vector<glm::byte> ImageData(Size * Size * 3);
+
+ for(std::size_t y = 0; y < Size; ++y)
+ for(std::size_t x = 0; x < Size; ++x)
+ {
+ ImageData[(x + y * Size) * 3 + 0] = glm::byte(glm::perlin(glm::vec2(x / 64.f, y / 64.f)) * 128.f + 127.f);
+ ImageData[(x + y * Size) * 3 + 1] = ImageData[(x + y * Size) * 3 + 0];
+ ImageData[(x + y * Size) * 3 + 2] = ImageData[(x + y * Size) * 3 + 0];
+ }
+
+ gli::texture2D Texture(1);
+ Texture[0] = gli::image2D(glm::uvec2(Size), gli::RGB8U);
+ memcpy(Texture[0].data(), &ImageData[0], ImageData.size());
+ gli::saveDDS9(Texture, "texture_perlin2d_256.dds");
+ }
+
+ {
+ std::vector<glm::byte> ImageData(Size * Size * 3);
+
+ for(std::size_t y = 0; y < Size; ++y)
+ for(std::size_t x = 0; x < Size; ++x)
+ {
+ ImageData[(x + y * Size) * 3 + 0] = glm::byte(glm::perlin(glm::vec3(x / 64.f, y / 64.f, 0.5f)) * 128.f + 127.f);
+ ImageData[(x + y * Size) * 3 + 1] = ImageData[(x + y * Size) * 3 + 0];
+ ImageData[(x + y * Size) * 3 + 2] = ImageData[(x + y * Size) * 3 + 0];
+ }
+
+ gli::texture2D Texture(1);
+ Texture[0] = gli::image2D(glm::uvec2(Size), gli::RGB8U);
+ memcpy(Texture[0].data(), &ImageData[0], ImageData.size());
+ gli::saveDDS9(Texture, "texture_perlin3d_256.dds");
+ }
+
+ {
+ std::vector<glm::byte> ImageData(Size * Size * 3);
+
+ for(std::size_t y = 0; y < Size; ++y)
+ for(std::size_t x = 0; x < Size; ++x)
+ {
+ ImageData[(x + y * Size) * 3 + 0] = glm::byte(glm::perlin(glm::vec4(x / 64.f, y / 64.f, 0.5f, 0.5f)) * 128.f + 127.f);
+ ImageData[(x + y * Size) * 3 + 1] = ImageData[(x + y * Size) * 3 + 0];
+ ImageData[(x + y * Size) * 3 + 2] = ImageData[(x + y * Size) * 3 + 0];
+ }
+
+ gli::texture2D Texture(1);
+ Texture[0] = gli::image2D(glm::uvec2(Size), gli::RGB8U);
+ memcpy(Texture[0].data(), &ImageData[0], ImageData.size());
+ gli::saveDDS9(Texture, "texture_perlin4d_256.dds");
+ }
+
+ return 0;
+}
+
+int test_perlin_pedioric()
+{
+ std::size_t const Size = 256;
+
+ {
+ std::vector<glm::byte> ImageData(Size * Size * 3);
+
+ for(std::size_t y = 0; y < Size; ++y)
+ for(std::size_t x = 0; x < Size; ++x)
+ {
+ ImageData[(x + y * Size) * 3 + 0] = glm::byte(glm::perlin(glm::vec2(x / 64.f, y / 64.f), glm::vec2(2.0f)) * 128.f + 127.f);
+ ImageData[(x + y * Size) * 3 + 1] = ImageData[(x + y * Size) * 3 + 0];
+ ImageData[(x + y * Size) * 3 + 2] = ImageData[(x + y * Size) * 3 + 0];
+ }
+
+ gli::texture2D Texture(1);
+ Texture[0] = gli::image2D(glm::uvec2(Size), gli::RGB8U);
+ memcpy(Texture[0].data(), &ImageData[0], ImageData.size());
+ gli::saveDDS9(Texture, "texture_perlin_pedioric_2d_256.dds");
+ }
+
+ {
+ std::vector<glm::byte> ImageData(Size * Size * 3);
+
+ for(std::size_t y = 0; y < Size; ++y)
+ for(std::size_t x = 0; x < Size; ++x)
+ {
+ ImageData[(x + y * Size) * 3 + 0] = glm::byte(glm::perlin(glm::vec3(x / 64.f, y / 64.f, 0.5f), glm::vec3(2.0f)) * 128.f + 127.f);
+ ImageData[(x + y * Size) * 3 + 1] = ImageData[(x + y * Size) * 3 + 0];
+ ImageData[(x + y * Size) * 3 + 2] = ImageData[(x + y * Size) * 3 + 0];
+ }
+
+ gli::texture2D Texture(1);
+ Texture[0] = gli::image2D(glm::uvec2(Size), gli::RGB8U);
+ memcpy(Texture[0].data(), &ImageData[0], ImageData.size());
+ gli::saveDDS9(Texture, "texture_perlin_pedioric_3d_256.dds");
+ }
+
+ {
+ std::vector<glm::byte> ImageData(Size * Size * 3);
+
+ for(std::size_t y = 0; y < Size; ++y)
+ for(std::size_t x = 0; x < Size; ++x)
+ {
+ ImageData[(x + y * Size) * 3 + 0] = glm::byte(glm::perlin(glm::vec4(x / 64.f, y / 64.f, 0.5f, 0.5f), glm::vec4(2.0f)) * 128.f + 127.f);
+ ImageData[(x + y * Size) * 3 + 1] = ImageData[(x + y * Size) * 3 + 0];
+ ImageData[(x + y * Size) * 3 + 2] = ImageData[(x + y * Size) * 3 + 0];
+ }
+
+ gli::texture2D Texture(1);
+ Texture[0] = gli::image2D(glm::uvec2(Size), gli::RGB8U);
+ memcpy(Texture[0].data(), &ImageData[0], ImageData.size());
+ gli::saveDDS9(Texture, "texture_perlin_pedioric_4d_256.dds");
+ }
+
+ return 0;
+}
+
+int main()
+{
+ int Error = 0;
+
+ Error += test_simplex();
+ Error += test_perlin();
+ Error += test_perlin_pedioric();
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtc/gtc_packing.cpp b/src/third_party/glm/test/gtc/gtc_packing.cpp
new file mode 100644
index 0000000..d1f40e5
--- /dev/null
+++ b/src/third_party/glm/test/gtc/gtc_packing.cpp
@@ -0,0 +1,682 @@
+#include <glm/gtc/packing.hpp>
+#include <glm/gtc/epsilon.hpp>
+#include <cstdio>
+#include <vector>
+
+void print_bits(float const & s)
+{
+ union
+ {
+ float f;
+ unsigned int i;
+ } uif;
+
+ uif.f = s;
+
+ printf("f32: ");
+ for(std::size_t j = sizeof(s) * 8; j > 0; --j)
+ {
+ if(j == 23 || j == 31)
+ printf(" ");
+ printf("%d", (uif.i & (1 << (j - 1))) ? 1 : 0);
+ }
+}
+
+void print_10bits(glm::uint const & s)
+{
+ printf("10b: ");
+ for(std::size_t j = 10; j > 0; --j)
+ {
+ if(j == 5)
+ printf(" ");
+ printf("%d", (s & (1 << (j - 1))) ? 1 : 0);
+ }
+}
+
+void print_11bits(glm::uint const & s)
+{
+ printf("11b: ");
+ for(std::size_t j = 11; j > 0; --j)
+ {
+ if(j == 6)
+ printf(" ");
+ printf("%d", (s & (1 << (j - 1))) ? 1 : 0);
+ }
+}
+
+void print_value(float const & s)
+{
+ printf("%2.5f, ", s);
+ print_bits(s);
+ printf(", ");
+// print_11bits(detail::floatTo11bit(s));
+// printf(", ");
+// print_10bits(detail::floatTo10bit(s));
+ printf("\n");
+}
+
+int test_Half1x16()
+{
+ int Error = 0;
+
+ std::vector<float> Tests;
+ Tests.push_back(0.0f);
+ Tests.push_back(1.0f);
+ Tests.push_back(-1.0f);
+ Tests.push_back(2.0f);
+ Tests.push_back(-2.0f);
+ Tests.push_back(1.9f);
+
+ for(std::size_t i = 0; i < Tests.size(); ++i)
+ {
+ glm::uint32 p0 = glm::packHalf1x16(Tests[i]);
+ float v0 = glm::unpackHalf1x16(p0);
+ glm::uint32 p1 = glm::packHalf1x16(v0);
+ float v1 = glm::unpackHalf1x16(p1);
+ Error += (v0 == v1) ? 0 : 1;
+ }
+
+ return Error;
+}
+
+int test_Half4x16()
+{
+ int Error = 0;
+
+ std::vector<glm::vec4> Tests;
+ Tests.push_back(glm::vec4(1.0f));
+ Tests.push_back(glm::vec4(0.0f));
+ Tests.push_back(glm::vec4(2.0f));
+ Tests.push_back(glm::vec4(0.1f));
+ Tests.push_back(glm::vec4(0.5f));
+ Tests.push_back(glm::vec4(-0.9f));
+
+ for(std::size_t i = 0; i < Tests.size(); ++i)
+ {
+ glm::uint64 p0 = glm::packHalf4x16(Tests[i]);
+ glm::vec4 v0 = glm::unpackHalf4x16(p0);
+ glm::uint64 p1 = glm::packHalf4x16(v0);
+ glm::vec4 v1 = glm::unpackHalf4x16(p1);
+ glm::u16vec4 p2 = glm::packHalf(v0);
+ glm::vec4 v2 = glm::unpackHalf(p2);
+
+ Error += glm::all(glm::equal(v0, v1)) ? 0 : 1;
+ Error += glm::all(glm::equal(v0, v2)) ? 0 : 1;
+ }
+
+ return Error;
+}
+
+int test_I3x10_1x2()
+{
+ int Error = 0;
+
+ std::vector<glm::ivec4> Tests;
+ Tests.push_back(glm::ivec4(0));
+ Tests.push_back(glm::ivec4(1));
+ Tests.push_back(glm::ivec4(-1));
+ Tests.push_back(glm::ivec4(2));
+ Tests.push_back(glm::ivec4(-2));
+ Tests.push_back(glm::ivec4(3));
+
+ for(std::size_t i = 0; i < Tests.size(); ++i)
+ {
+ glm::uint32 p0 = glm::packI3x10_1x2(Tests[i]);
+ glm::ivec4 v0 = glm::unpackI3x10_1x2(p0);
+ glm::uint32 p1 = glm::packI3x10_1x2(v0);
+ glm::ivec4 v1 = glm::unpackI3x10_1x2(p1);
+ Error += glm::all(glm::equal(v0, v1)) ? 0 : 1;
+ }
+
+ return Error;
+}
+
+int test_U3x10_1x2()
+{
+ int Error = 0;
+
+ std::vector<glm::uvec4> Tests;
+ Tests.push_back(glm::uvec4(0));
+ Tests.push_back(glm::uvec4(1));
+ Tests.push_back(glm::uvec4(2));
+ Tests.push_back(glm::uvec4(3));
+ Tests.push_back(glm::uvec4(4));
+ Tests.push_back(glm::uvec4(5));
+
+ for(std::size_t i = 0; i < Tests.size(); ++i)
+ {
+ glm::uint32 p0 = glm::packU3x10_1x2(Tests[i]);
+ glm::uvec4 v0 = glm::unpackU3x10_1x2(p0);
+ glm::uint32 p1 = glm::packU3x10_1x2(v0);
+ glm::uvec4 v1 = glm::unpackU3x10_1x2(p1);
+ Error += glm::all(glm::equal(v0, v1)) ? 0 : 1;
+ }
+
+ return Error;
+}
+
+int test_Snorm3x10_1x2()
+{
+ int Error = 0;
+
+ std::vector<glm::vec4> Tests;
+ Tests.push_back(glm::vec4(1.0f));
+ Tests.push_back(glm::vec4(0.0f));
+ Tests.push_back(glm::vec4(2.0f));
+ Tests.push_back(glm::vec4(0.1f));
+ Tests.push_back(glm::vec4(0.5f));
+ Tests.push_back(glm::vec4(0.9f));
+
+ for(std::size_t i = 0; i < Tests.size(); ++i)
+ {
+ glm::uint32 p0 = glm::packSnorm3x10_1x2(Tests[i]);
+ glm::vec4 v0 = glm::unpackSnorm3x10_1x2(p0);
+ glm::uint32 p1 = glm::packSnorm3x10_1x2(v0);
+ glm::vec4 v1 = glm::unpackSnorm3x10_1x2(p1);
+ Error += glm::all(glm::equal(v0, v1)) ? 0 : 1;
+ }
+
+ return Error;
+}
+
+int test_Unorm3x10_1x2()
+{
+ int Error = 0;
+
+ std::vector<glm::vec4> Tests;
+ Tests.push_back(glm::vec4(1.0f));
+ Tests.push_back(glm::vec4(0.0f));
+ Tests.push_back(glm::vec4(2.0f));
+ Tests.push_back(glm::vec4(0.1f));
+ Tests.push_back(glm::vec4(0.5f));
+ Tests.push_back(glm::vec4(0.9f));
+
+ for(std::size_t i = 0; i < Tests.size(); ++i)
+ {
+ glm::uint32 p0 = glm::packUnorm3x10_1x2(Tests[i]);
+ glm::vec4 v0 = glm::unpackUnorm3x10_1x2(p0);
+ glm::uint32 p1 = glm::packUnorm3x10_1x2(v0);
+ glm::vec4 v1 = glm::unpackUnorm3x10_1x2(p1);
+ Error += glm::all(glm::equal(v0, v1)) ? 0 : 1;
+ }
+
+ return Error;
+}
+
+int test_F2x11_1x10()
+{
+ int Error = 0;
+
+ std::vector<glm::vec3> Tests;
+ Tests.push_back(glm::vec3(1.0f));
+ Tests.push_back(glm::vec3(0.0f));
+ Tests.push_back(glm::vec3(2.0f));
+ Tests.push_back(glm::vec3(0.1f));
+ Tests.push_back(glm::vec3(0.5f));
+ Tests.push_back(glm::vec3(0.9f));
+
+ for(std::size_t i = 0; i < Tests.size(); ++i)
+ {
+ glm::uint32 p0 = glm::packF2x11_1x10(Tests[i]);
+ glm::vec3 v0 = glm::unpackF2x11_1x10(p0);
+ glm::uint32 p1 = glm::packF2x11_1x10(v0);
+ glm::vec3 v1 = glm::unpackF2x11_1x10(p1);
+ Error += glm::all(glm::equal(v0, v1)) ? 0 : 1;
+ }
+
+ return Error;
+}
+
+int test_F3x9_E1x5()
+{
+ int Error = 0;
+
+ std::vector<glm::vec3> Tests;
+ Tests.push_back(glm::vec3(1.0f));
+ Tests.push_back(glm::vec3(0.0f));
+ Tests.push_back(glm::vec3(2.0f));
+ Tests.push_back(glm::vec3(0.1f));
+ Tests.push_back(glm::vec3(0.5f));
+ Tests.push_back(glm::vec3(0.9f));
+
+ for (std::size_t i = 0; i < Tests.size(); ++i)
+ {
+ glm::uint32 p0 = glm::packF3x9_E1x5(Tests[i]);
+ glm::vec3 v0 = glm::unpackF3x9_E1x5(p0);
+ glm::uint32 p1 = glm::packF3x9_E1x5(v0);
+ glm::vec3 v1 = glm::unpackF3x9_E1x5(p1);
+ Error += glm::all(glm::epsilonEqual(v0, v1, 0.01f)) ? 0 : 1;
+ }
+
+ return Error;
+}
+
+int test_packUnorm1x16()
+{
+ int Error = 0;
+
+ std::vector<glm::vec1> A;
+ A.push_back(glm::vec1(1.0f));
+ A.push_back(glm::vec1(0.5f));
+ A.push_back(glm::vec1(0.1f));
+ A.push_back(glm::vec1(0.0f));
+
+ for(std::size_t i = 0; i < A.size(); ++i)
+ {
+ glm::vec1 B(A[i]);
+ glm::uint32 C = glm::packUnorm1x16(B.x);
+ glm::vec1 D(glm::unpackUnorm1x16(C));
+ Error += glm::all(glm::epsilonEqual(B, D, 1.0f / 65535.f)) ? 0 : 1;
+ assert(!Error);
+ }
+
+ return Error;
+}
+
+int test_packSnorm1x16()
+{
+ int Error = 0;
+
+ std::vector<glm::vec1> A;
+ A.push_back(glm::vec1( 1.0f));
+ A.push_back(glm::vec1( 0.0f));
+ A.push_back(glm::vec1(-0.5f));
+ A.push_back(glm::vec1(-0.1f));
+
+ for(std::size_t i = 0; i < A.size(); ++i)
+ {
+ glm::vec1 B(A[i]);
+ glm::uint32 C = glm::packSnorm1x16(B.x);
+ glm::vec1 D(glm::unpackSnorm1x16(C));
+ Error += glm::all(glm::epsilonEqual(B, D, 1.0f / 32767.0f * 2.0f)) ? 0 : 1;
+ }
+
+ return Error;
+}
+
+int test_packUnorm2x16()
+{
+ int Error = 0;
+
+ std::vector<glm::vec2> A;
+ A.push_back(glm::vec2(1.0f, 0.0f));
+ A.push_back(glm::vec2(0.5f, 0.7f));
+ A.push_back(glm::vec2(0.1f, 0.2f));
+
+ for(std::size_t i = 0; i < A.size(); ++i)
+ {
+ glm::vec2 B(A[i]);
+ glm::uint32 C = glm::packUnorm2x16(B);
+ glm::vec2 D = glm::unpackUnorm2x16(C);
+ Error += glm::all(glm::epsilonEqual(B, D, 1.0f / 65535.f)) ? 0 : 1;
+ assert(!Error);
+ }
+
+ return Error;
+}
+
+int test_packSnorm2x16()
+{
+ int Error = 0;
+
+ std::vector<glm::vec2> A;
+ A.push_back(glm::vec2( 1.0f, 0.0f));
+ A.push_back(glm::vec2(-0.5f,-0.7f));
+ A.push_back(glm::vec2(-0.1f, 0.1f));
+
+ for(std::size_t i = 0; i < A.size(); ++i)
+ {
+ glm::vec2 B(A[i]);
+ glm::uint32 C = glm::packSnorm2x16(B);
+ glm::vec2 D = glm::unpackSnorm2x16(C);
+ Error += glm::all(glm::epsilonEqual(B, D, 1.0f / 32767.0f * 2.0f)) ? 0 : 1;
+ assert(!Error);
+ }
+
+ return Error;
+}
+
+int test_packUnorm4x16()
+{
+ int Error = 0;
+
+ std::vector<glm::vec4> A;
+ A.push_back(glm::vec4(1.0f));
+ A.push_back(glm::vec4(0.5f));
+ A.push_back(glm::vec4(0.1f));
+ A.push_back(glm::vec4(0.0f));
+
+ for(std::size_t i = 0; i < A.size(); ++i)
+ {
+ glm::vec4 B(A[i]);
+ glm::uint64 C = glm::packUnorm4x16(B);
+ glm::vec4 D(glm::unpackUnorm4x16(C));
+ Error += glm::all(glm::epsilonEqual(B, D, 1.0f / 65535.f)) ? 0 : 1;
+ assert(!Error);
+ }
+
+ return Error;
+}
+
+int test_packSnorm4x16()
+{
+ int Error = 0;
+
+ std::vector<glm::vec4> A;
+ A.push_back(glm::vec4( 1.0f, 0.0f, -0.5f, 0.5f));
+ A.push_back(glm::vec4(-0.3f,-0.7f, 0.3f, 0.7f));
+ A.push_back(glm::vec4(-0.1f, 0.1f, -0.2f, 0.2f));
+
+ for(std::size_t i = 0; i < A.size(); ++i)
+ {
+ glm::vec4 B(A[i]);
+ glm::uint64 C = glm::packSnorm4x16(B);
+ glm::vec4 D(glm::unpackSnorm4x16(C));
+ Error += glm::all(glm::epsilonEqual(B, D, 1.0f / 32767.0f * 2.0f)) ? 0 : 1;
+ assert(!Error);
+ }
+
+ return Error;
+}
+
+int test_packUnorm1x8()
+{
+ int Error = 0;
+
+ std::vector<glm::vec1> A;
+ A.push_back(glm::vec1(1.0f));
+ A.push_back(glm::vec1(0.5f));
+ A.push_back(glm::vec1(0.0f));
+
+ for(std::size_t i = 0; i < A.size(); ++i)
+ {
+ glm::vec1 B(A[i]);
+ glm::uint8 C = glm::packUnorm1x8(B.x);
+ glm::vec1 D(glm::unpackUnorm1x8(C));
+ Error += glm::all(glm::epsilonEqual(B, D, 1.0f / 255.f)) ? 0 : 1;
+ assert(!Error);
+ }
+
+ return Error;
+}
+
+int test_packSnorm1x8()
+{
+ int Error = 0;
+
+ std::vector<glm::vec1> A;
+ A.push_back(glm::vec1( 1.0f));
+ A.push_back(glm::vec1(-0.7f));
+ A.push_back(glm::vec1(-1.0f));
+
+ for(std::size_t i = 0; i < A.size(); ++i)
+ {
+ glm::vec1 B(A[i]);
+ glm::uint8 C = glm::packSnorm1x8(B.x);
+ glm::vec1 D(glm::unpackSnorm1x8(C));
+ Error += glm::all(glm::epsilonEqual(B, D, 1.0f / 127.f)) ? 0 : 1;
+ }
+
+ return Error;
+}
+
+int test_packUnorm2x8()
+{
+ int Error = 0;
+
+ std::vector<glm::vec2> A;
+ A.push_back(glm::vec2(1.0f, 0.7f));
+ A.push_back(glm::vec2(0.5f, 0.1f));
+
+ for(std::size_t i = 0; i < A.size(); ++i)
+ {
+ glm::vec2 B(A[i]);
+ glm::uint16 C = glm::packUnorm2x8(B);
+ glm::vec2 D = glm::unpackUnorm2x8(C);
+ Error += glm::all(glm::epsilonEqual(B, D, 1.0f / 255.f)) ? 0 : 1;
+ assert(!Error);
+ }
+
+ return Error;
+}
+
+int test_packSnorm2x8()
+{
+ int Error = 0;
+
+ std::vector<glm::vec2> A;
+ A.push_back(glm::vec2( 1.0f, 0.0f));
+ A.push_back(glm::vec2(-0.7f,-0.1f));
+
+ for(std::size_t i = 0; i < A.size(); ++i)
+ {
+ glm::vec2 B(A[i]);
+ glm::uint16 C = glm::packSnorm2x8(B);
+ glm::vec2 D = glm::unpackSnorm2x8(C);
+ Error += glm::all(glm::epsilonEqual(B, D, 1.0f / 127.f)) ? 0 : 1;
+ }
+
+ return Error;
+}
+
+int test_packUnorm4x8()
+{
+ int Error = 0;
+
+ std::vector<glm::vec4> A;
+ A.push_back(glm::vec4(1.0f, 0.7f, 0.3f, 0.0f));
+ A.push_back(glm::vec4(0.5f, 0.1f, 0.2f, 0.3f));
+
+ for(std::size_t i = 0; i < A.size(); ++i)
+ {
+ glm::vec4 B(A[i]);
+ glm::uint32 C = glm::packUnorm4x8(B);
+ glm::vec4 D = glm::unpackUnorm4x8(C);
+ Error += glm::all(glm::epsilonEqual(B, D, 1.0f / 255.f)) ? 0 : 1;
+ assert(!Error);
+ }
+
+ return Error;
+}
+
+int test_packSnorm4x8()
+{
+ int Error = 0;
+
+ std::vector<glm::vec4> A;
+ A.push_back(glm::vec4( 1.0f, 0.0f,-0.5f,-1.0f));
+ A.push_back(glm::vec4(-0.7f,-0.1f, 0.1f, 0.7f));
+
+ for(std::size_t i = 0; i < A.size(); ++i)
+ {
+ glm::vec4 B(A[i]);
+ glm::uint32 C = glm::packSnorm4x8(B);
+ glm::vec4 D = glm::unpackSnorm4x8(C);
+ Error += glm::all(glm::epsilonEqual(B, D, 1.0f / 127.f)) ? 0 : 1;
+ assert(!Error);
+ }
+
+ return Error;
+}
+
+int test_packUnorm()
+{
+ int Error = 0;
+
+ std::vector<glm::vec2> A;
+ A.push_back(glm::vec2(1.0f, 0.7f));
+ A.push_back(glm::vec2(0.5f, 0.1f));
+
+ for(std::size_t i = 0; i < A.size(); ++i)
+ {
+ glm::vec2 B(A[i]);
+ glm::u16vec2 C = glm::packUnorm<glm::uint16>(B);
+ glm::vec2 D = glm::unpackUnorm<glm::uint16, float>(C);
+ Error += glm::all(glm::epsilonEqual(B, D, 1.0f / 255.f)) ? 0 : 1;
+ assert(!Error);
+ }
+
+ return Error;
+}
+
+int test_packSnorm()
+{
+ int Error = 0;
+
+ std::vector<glm::vec2> A;
+ A.push_back(glm::vec2( 1.0f, 0.0f));
+ A.push_back(glm::vec2(-0.5f,-0.7f));
+ A.push_back(glm::vec2(-0.1f, 0.1f));
+
+ for(std::size_t i = 0; i < A.size(); ++i)
+ {
+ glm::vec2 B(A[i]);
+ glm::i16vec2 C = glm::packSnorm<glm::int16>(B);
+ glm::vec2 D = glm::unpackSnorm<glm::int16, float>(C);
+ Error += glm::all(glm::epsilonEqual(B, D, 1.0f / 32767.0f * 2.0f)) ? 0 : 1;
+ assert(!Error);
+ }
+
+ return Error;
+}
+
+int test_packUnorm2x4()
+{
+ int Error = 0;
+
+ std::vector<glm::vec2> A;
+ A.push_back(glm::vec2(1.0f, 0.7f));
+ A.push_back(glm::vec2(0.5f, 0.0f));
+
+ for(std::size_t i = 0; i < A.size(); ++i)
+ {
+ glm::vec2 B(A[i]);
+ glm::uint8 C = glm::packUnorm2x4(B);
+ glm::vec2 D = glm::unpackUnorm2x4(C);
+ Error += glm::all(glm::epsilonEqual(B, D, 1.0f / 15.f)) ? 0 : 1;
+ assert(!Error);
+ }
+
+ return Error;
+}
+
+int test_packUnorm4x4()
+{
+ int Error = 0;
+
+ std::vector<glm::vec4> A;
+ A.push_back(glm::vec4(1.0f, 0.7f, 0.5f, 0.0f));
+ A.push_back(glm::vec4(0.5f, 0.1f, 0.0f, 1.0f));
+
+ for(std::size_t i = 0; i < A.size(); ++i)
+ {
+ glm::vec4 B(A[i]);
+ glm::uint16 C = glm::packUnorm4x4(B);
+ glm::vec4 D = glm::unpackUnorm4x4(C);
+ Error += glm::all(glm::epsilonEqual(B, D, 1.0f / 15.f)) ? 0 : 1;
+ assert(!Error);
+ }
+
+ return Error;
+}
+
+int test_packUnorm3x5_1x1()
+{
+ int Error = 0;
+
+ std::vector<glm::vec4> A;
+ A.push_back(glm::vec4(1.0f, 0.7f, 0.5f, 0.0f));
+ A.push_back(glm::vec4(0.5f, 0.1f, 0.0f, 1.0f));
+
+ for(std::size_t i = 0; i < A.size(); ++i)
+ {
+ glm::vec4 B(A[i]);
+ glm::uint16 C = glm::packUnorm3x5_1x1(B);
+ glm::vec4 D = glm::unpackUnorm3x5_1x1(C);
+ Error += glm::all(glm::epsilonEqual(B, D, 1.0f / 15.f)) ? 0 : 1;
+ assert(!Error);
+ }
+
+ return Error;
+}
+
+int test_packUnorm1x5_1x6_1x5()
+{
+ int Error = 0;
+
+ std::vector<glm::vec3> A;
+ A.push_back(glm::vec3(1.0f, 0.7f, 0.5f));
+ A.push_back(glm::vec3(0.5f, 0.1f, 0.0f));
+
+ for(std::size_t i = 0; i < A.size(); ++i)
+ {
+ glm::vec3 B(A[i]);
+ glm::uint16 C = glm::packUnorm1x5_1x6_1x5(B);
+ glm::vec3 D = glm::unpackUnorm1x5_1x6_1x5(C);
+ Error += glm::all(glm::epsilonEqual(B, D, 1.0f / 15.f)) ? 0 : 1;
+ assert(!Error);
+ }
+
+ return Error;
+}
+
+int test_packUnorm2x3_1x2()
+{
+ int Error = 0;
+
+ std::vector<glm::vec3> A;
+ A.push_back(glm::vec3(1.0f, 0.7f, 0.5f));
+ A.push_back(glm::vec3(0.5f, 0.1f, 0.0f));
+
+ for(std::size_t i = 0; i < A.size(); ++i)
+ {
+ glm::vec3 B(A[i]);
+ glm::uint8 C = glm::packUnorm2x3_1x2(B);
+ glm::vec3 D = glm::unpackUnorm2x3_1x2(C);
+ Error += glm::all(glm::epsilonEqual(B, D, 1.0f / 3.f)) ? 0 : 1;
+ assert(!Error);
+ }
+
+ return Error;
+}
+
+int main()
+{
+ int Error = 0;
+
+ Error += test_packUnorm();
+ Error += test_packSnorm();
+
+ Error += test_packSnorm1x16();
+ Error += test_packSnorm2x16();
+ Error += test_packSnorm4x16();
+
+ Error += test_packSnorm1x8();
+ Error += test_packSnorm2x8();
+ Error += test_packSnorm4x8();
+
+ Error += test_packUnorm1x16();
+ Error += test_packUnorm2x16();
+ Error += test_packUnorm4x16();
+
+ Error += test_packUnorm1x8();
+ Error += test_packUnorm2x8();
+ Error += test_packUnorm4x8();
+
+ Error += test_packUnorm2x4();
+ Error += test_packUnorm4x4();
+ Error += test_packUnorm3x5_1x1();
+ Error += test_packUnorm1x5_1x6_1x5();
+ Error += test_packUnorm2x3_1x2();
+
+ Error += test_F2x11_1x10();
+ Error += test_F3x9_E1x5();
+ Error += test_Snorm3x10_1x2();
+ Error += test_Unorm3x10_1x2();
+ Error += test_I3x10_1x2();
+ Error += test_U3x10_1x2();
+ Error += test_Half1x16();
+ Error += test_Half4x16();
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtc/gtc_quaternion.cpp b/src/third_party/glm/test/gtc/gtc_quaternion.cpp
new file mode 100644
index 0000000..49ac157
--- /dev/null
+++ b/src/third_party/glm/test/gtc/gtc_quaternion.cpp
@@ -0,0 +1,312 @@
+#include <glm/gtc/quaternion.hpp>
+#include <glm/gtc/epsilon.hpp>
+#include <glm/vector_relational.hpp>
+#include <vector>
+
+int test_quat_angle()
+{
+ int Error = 0;
+
+ {
+ glm::quat Q = glm::angleAxis(glm::pi<float>() * 0.25f, glm::vec3(0, 0, 1));
+ glm::quat N = glm::normalize(Q);
+ float L = glm::length(N);
+ Error += glm::epsilonEqual(L, 1.0f, 0.01f) ? 0 : 1;
+ float A = glm::angle(N);
+ Error += glm::epsilonEqual(A, glm::pi<float>() * 0.25f, 0.01f) ? 0 : 1;
+ }
+ {
+ glm::quat Q = glm::angleAxis(glm::pi<float>() * 0.25f, glm::normalize(glm::vec3(0, 1, 1)));
+ glm::quat N = glm::normalize(Q);
+ float L = glm::length(N);
+ Error += glm::epsilonEqual(L, 1.0f, 0.01f) ? 0 : 1;
+ float A = glm::angle(N);
+ Error += glm::epsilonEqual(A, glm::pi<float>() * 0.25f, 0.01f) ? 0 : 1;
+ }
+ {
+ glm::quat Q = glm::angleAxis(glm::pi<float>() * 0.25f, glm::normalize(glm::vec3(1, 2, 3)));
+ glm::quat N = glm::normalize(Q);
+ float L = glm::length(N);
+ Error += glm::epsilonEqual(L, 1.0f, 0.01f) ? 0 : 1;
+ float A = glm::angle(N);
+ Error += glm::epsilonEqual(A, glm::pi<float>() * 0.25f, 0.01f) ? 0 : 1;
+ }
+
+ return Error;
+}
+
+int test_quat_angleAxis()
+{
+ int Error = 0;
+
+ glm::quat A = glm::angleAxis(0.0f, glm::vec3(0, 0, 1));
+ glm::quat B = glm::angleAxis(glm::pi<float>() * 0.5f, glm::vec3(0, 0, 1));
+ glm::quat C = glm::mix(A, B, 0.5f);
+ glm::quat D = glm::angleAxis(glm::pi<float>() * 0.25f, glm::vec3(0, 0, 1));
+
+ Error += glm::epsilonEqual(C.x, D.x, 0.01f) ? 0 : 1;
+ Error += glm::epsilonEqual(C.y, D.y, 0.01f) ? 0 : 1;
+ Error += glm::epsilonEqual(C.z, D.z, 0.01f) ? 0 : 1;
+ Error += glm::epsilonEqual(C.w, D.w, 0.01f) ? 0 : 1;
+
+ return Error;
+}
+
+int test_quat_mix()
+{
+ int Error = 0;
+
+ glm::quat A = glm::angleAxis(0.0f, glm::vec3(0, 0, 1));
+ glm::quat B = glm::angleAxis(glm::pi<float>() * 0.5f, glm::vec3(0, 0, 1));
+ glm::quat C = glm::mix(A, B, 0.5f);
+ glm::quat D = glm::angleAxis(glm::pi<float>() * 0.25f, glm::vec3(0, 0, 1));
+
+ Error += glm::epsilonEqual(C.x, D.x, 0.01f) ? 0 : 1;
+ Error += glm::epsilonEqual(C.y, D.y, 0.01f) ? 0 : 1;
+ Error += glm::epsilonEqual(C.z, D.z, 0.01f) ? 0 : 1;
+ Error += glm::epsilonEqual(C.w, D.w, 0.01f) ? 0 : 1;
+
+ return Error;
+}
+
+int test_quat_precision()
+{
+ int Error = 0;
+
+ Error += sizeof(glm::lowp_quat) <= sizeof(glm::mediump_quat) ? 0 : 1;
+ Error += sizeof(glm::mediump_quat) <= sizeof(glm::highp_quat) ? 0 : 1;
+
+ return Error;
+}
+
+int test_quat_normalize()
+{
+ int Error(0);
+
+ {
+ glm::quat Q = glm::angleAxis(glm::pi<float>() * 0.25f, glm::vec3(0, 0, 1));
+ glm::quat N = glm::normalize(Q);
+ float L = glm::length(N);
+ Error += glm::epsilonEqual(L, 1.0f, 0.000001f) ? 0 : 1;
+ }
+ {
+ glm::quat Q = glm::angleAxis(glm::pi<float>() * 0.25f, glm::vec3(0, 0, 2));
+ glm::quat N = glm::normalize(Q);
+ float L = glm::length(N);
+ Error += glm::epsilonEqual(L, 1.0f, 0.000001f) ? 0 : 1;
+ }
+ {
+ glm::quat Q = glm::angleAxis(glm::pi<float>() * 0.25f, glm::vec3(1, 2, 3));
+ glm::quat N = glm::normalize(Q);
+ float L = glm::length(N);
+ Error += glm::epsilonEqual(L, 1.0f, 0.000001f) ? 0 : 1;
+ }
+
+ return Error;
+}
+
+int test_quat_euler()
+{
+ int Error(0);
+
+ {
+ glm::quat q(1.0f, 0.0f, 0.0f, 1.0f);
+ float Roll = glm::roll(q);
+ float Pitch = glm::pitch(q);
+ float Yaw = glm::yaw(q);
+ glm::vec3 Angles = glm::eulerAngles(q);
+ }
+
+ {
+ glm::dquat q(1.0f, 0.0f, 0.0f, 1.0f);
+ double Roll = glm::roll(q);
+ double Pitch = glm::pitch(q);
+ double Yaw = glm::yaw(q);
+ glm::dvec3 Angles = glm::eulerAngles(q);
+ }
+
+ return Error;
+}
+
+int test_quat_slerp()
+{
+ int Error(0);
+
+ float const Epsilon = 0.0001f;//glm::epsilon<float>();
+
+ float sqrt2 = sqrt(2.0f)/2.0f;
+ glm::quat id;
+ glm::quat Y90rot(sqrt2, 0.0f, sqrt2, 0.0f);
+ glm::quat Y180rot(0.0f, 0.0f, 1.0f, 0.0f);
+
+ // Testing a == 0
+ // Must be id
+ glm::quat id2 = glm::slerp(id, Y90rot, 0.0f);
+ Error += glm::all(glm::epsilonEqual(id, id2, Epsilon)) ? 0 : 1;
+
+ // Testing a == 1
+ // Must be 90° rotation on Y : 0 0.7 0 0.7
+ glm::quat Y90rot2 = glm::slerp(id, Y90rot, 1.0f);
+ Error += glm::all(glm::epsilonEqual(Y90rot, Y90rot2, Epsilon)) ? 0 : 1;
+
+ // Testing standard, easy case
+ // Must be 45° rotation on Y : 0 0.38 0 0.92
+ glm::quat Y45rot1 = glm::slerp(id, Y90rot, 0.5f);
+
+ // Testing reverse case
+ // Must be 45° rotation on Y : 0 0.38 0 0.92
+ glm::quat Ym45rot2 = glm::slerp(Y90rot, id, 0.5f);
+
+ // Testing against full circle around the sphere instead of shortest path
+ // Must be 45° rotation on Y
+ // certainly not a 135° rotation
+ glm::quat Y45rot3 = glm::slerp(id , -Y90rot, 0.5f);
+ float Y45angle3 = glm::angle(Y45rot3);
+ Error += glm::epsilonEqual(Y45angle3, glm::pi<float>() * 0.25f, Epsilon) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(Ym45rot2, Y45rot3, Epsilon)) ? 0 : 1;
+
+ // Same, but inverted
+ // Must also be 45° rotation on Y : 0 0.38 0 0.92
+ // -0 -0.38 -0 -0.92 is ok too
+ glm::quat Y45rot4 = glm::slerp(-Y90rot, id, 0.5f);
+ Error += glm::all(glm::epsilonEqual(Ym45rot2, -Y45rot4, Epsilon)) ? 0 : 1;
+
+ // Testing q1 = q2
+ // Must be 90° rotation on Y : 0 0.7 0 0.7
+ glm::quat Y90rot3 = glm::slerp(Y90rot, Y90rot, 0.5f);
+ Error += glm::all(glm::epsilonEqual(Y90rot, Y90rot3, Epsilon)) ? 0 : 1;
+
+ // Testing 180° rotation
+ // Must be 90° rotation on almost any axis that is on the XZ plane
+ glm::quat XZ90rot = glm::slerp(id, -Y90rot, 0.5f);
+ float XZ90angle = glm::angle(XZ90rot); // Must be PI/4 = 0.78;
+ Error += glm::epsilonEqual(XZ90angle, glm::pi<float>() * 0.25f, Epsilon) ? 0 : 1;
+
+ // Testing almost equal quaternions (this test should pass through the linear interpolation)
+ // Must be 0 0.00X 0 0.99999
+ glm::quat almostid = glm::slerp(id, glm::angleAxis(0.1f, glm::vec3(0.0f, 1.0f, 0.0f)), 0.5f);
+
+ // Testing quaternions with opposite sign
+ {
+ glm::quat a(-1, 0, 0, 0);
+
+ glm::quat result = glm::slerp(a, id, 0.5f);
+
+ Error += glm::epsilonEqual(glm::pow(glm::dot(id, result), 2.f), 1.f, 0.01f) ? 0 : 1;
+ }
+
+ return Error;
+}
+
+int test_quat_mul()
+{
+ int Error(0);
+
+ glm::quat temp1 = glm::normalize(glm::quat(1.0f, glm::vec3(0.0, 1.0, 0.0)));
+ glm::quat temp2 = glm::normalize(glm::quat(0.5f, glm::vec3(1.0, 0.0, 0.0)));
+
+ glm::vec3 transformed0 = (temp1 * glm::vec3(0.0, 1.0, 0.0) * glm::inverse(temp1));
+ glm::vec3 temp4 = temp2 * transformed0 * glm::inverse(temp2);
+
+ glm::quat temp5 = glm::normalize(temp1 * temp2);
+ glm::vec3 temp6 = temp5 * glm::vec3(0.0, 1.0, 0.0) * glm::inverse(temp5);
+
+# ifndef GLM_FORCE_NO_CTOR_INIT
+ {
+ glm::quat temp7;
+
+ temp7 *= temp5;
+ temp7 *= glm::inverse(temp5);
+
+ Error += temp7 != glm::quat();
+ }
+# endif
+
+ return Error;
+}
+
+int test_quat_two_axis_ctr()
+{
+ int Error(0);
+
+ glm::quat q1(glm::vec3(1, 0, 0), glm::vec3(0, 1, 0));
+ glm::vec3 v1 = q1 * glm::vec3(1, 0, 0);
+ Error += glm::all(glm::epsilonEqual(v1, glm::vec3(0, 1, 0), 0.0001f)) ? 0 : 1;
+
+ glm::quat q2 = q1 * q1;
+ glm::vec3 v2 = q2 * glm::vec3(1, 0, 0);
+ Error += glm::all(glm::epsilonEqual(v2, glm::vec3(-1, 0, 0), 0.0001f)) ? 0 : 1;
+
+ return Error;
+}
+
+int test_quat_type()
+{
+ glm::quat A;
+ glm::dquat B;
+
+ return 0;
+}
+
+int test_quat_mul_vec()
+{
+ int Error(0);
+
+ glm::quat q = glm::angleAxis(glm::pi<float>() * 0.5f, glm::vec3(0, 0, 1));
+ glm::vec3 v(1, 0, 0);
+ glm::vec3 u(q * v);
+ glm::vec3 w(u * q);
+
+ Error += glm::all(glm::epsilonEqual(v, w, 0.01f)) ? 0 : 1;
+
+ return Error;
+}
+
+int test_quat_ctr()
+{
+ int Error(0);
+
+# if GLM_HAS_TRIVIAL_QUERIES
+ // Error += std::is_trivially_default_constructible<glm::quat>::value ? 0 : 1;
+ // Error += std::is_trivially_default_constructible<glm::dquat>::value ? 0 : 1;
+ // Error += std::is_trivially_copy_assignable<glm::quat>::value ? 0 : 1;
+ // Error += std::is_trivially_copy_assignable<glm::dquat>::value ? 0 : 1;
+ Error += std::is_trivially_copyable<glm::quat>::value ? 0 : 1;
+ Error += std::is_trivially_copyable<glm::dquat>::value ? 0 : 1;
+
+ Error += std::is_copy_constructible<glm::quat>::value ? 0 : 1;
+ Error += std::is_copy_constructible<glm::dquat>::value ? 0 : 1;
+# endif
+
+# if GLM_HAS_INITIALIZER_LISTS
+ {
+ glm::quat A{0, 1, 2, 3};
+
+ std::vector<glm::quat> B{
+ {0, 1, 2, 3},
+ {0, 1, 2, 3}};
+ }
+# endif//GLM_HAS_INITIALIZER_LISTS
+
+ return Error;
+}
+
+int main()
+{
+ int Error(0);
+
+ Error += test_quat_ctr();
+ Error += test_quat_mul_vec();
+ Error += test_quat_two_axis_ctr();
+ Error += test_quat_mul();
+ Error += test_quat_precision();
+ Error += test_quat_type();
+ Error += test_quat_angle();
+ Error += test_quat_angleAxis();
+ Error += test_quat_mix();
+ Error += test_quat_normalize();
+ Error += test_quat_euler();
+ Error += test_quat_slerp();
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtc/gtc_random.cpp b/src/third_party/glm/test/gtc/gtc_random.cpp
new file mode 100644
index 0000000..6c3b3d0
--- /dev/null
+++ b/src/third_party/glm/test/gtc/gtc_random.cpp
@@ -0,0 +1,377 @@
+#include <glm/gtc/random.hpp>
+#include <glm/gtc/epsilon.hpp>
+#if GLM_LANG & GLM_LANG_CXX0X_FLAG
+# include <array>
+#endif
+
+int test_linearRand()
+{
+ int Error = 0;
+
+ glm::int32 const Min = 16;
+ glm::int32 const Max = 32;
+
+ {
+ glm::u8vec2 AMin(std::numeric_limits<glm::u8>::max());
+ glm::u8vec2 AMax(std::numeric_limits<glm::u8>::min());
+ {
+ for(std::size_t i = 0; i < 100000; ++i)
+ {
+ glm::u8vec2 A = glm::linearRand(glm::u8vec2(Min), glm::u8vec2(Max));
+ AMin = glm::min(AMin, A);
+ AMax = glm::max(AMax, A);
+
+ if(!glm::all(glm::lessThanEqual(A, glm::u8vec2(Max))))
+ ++Error;
+ if(!glm::all(glm::greaterThanEqual(A, glm::u8vec2(Min))))
+ ++Error;
+ assert(!Error);
+ }
+
+ Error += glm::all(glm::equal(AMin, glm::u8vec2(Min))) ? 0 : 1;
+ Error += glm::all(glm::equal(AMax, glm::u8vec2(Max))) ? 0 : 1;
+ assert(!Error);
+ }
+
+ glm::u16vec2 BMin(std::numeric_limits<glm::u16>::max());
+ glm::u16vec2 BMax(std::numeric_limits<glm::u16>::min());
+ {
+ for(std::size_t i = 0; i < 100000; ++i)
+ {
+ glm::u16vec2 B = glm::linearRand(glm::u16vec2(Min), glm::u16vec2(Max));
+ BMin = glm::min(BMin, B);
+ BMax = glm::max(BMax, B);
+
+ if(!glm::all(glm::lessThanEqual(B, glm::u16vec2(Max))))
+ ++Error;
+ if(!glm::all(glm::greaterThanEqual(B, glm::u16vec2(Min))))
+ ++Error;
+ assert(!Error);
+ }
+
+ Error += glm::all(glm::equal(BMin, glm::u16vec2(Min))) ? 0 : 1;
+ Error += glm::all(glm::equal(BMax, glm::u16vec2(Max))) ? 0 : 1;
+ assert(!Error);
+ }
+
+ glm::u32vec2 CMin(std::numeric_limits<glm::u32>::max());
+ glm::u32vec2 CMax(std::numeric_limits<glm::u32>::min());
+ {
+ for(std::size_t i = 0; i < 100000; ++i)
+ {
+ glm::u32vec2 C = glm::linearRand(glm::u32vec2(Min), glm::u32vec2(Max));
+ CMin = glm::min(CMin, C);
+ CMax = glm::max(CMax, C);
+
+ if(!glm::all(glm::lessThanEqual(C, glm::u32vec2(Max))))
+ ++Error;
+ if(!glm::all(glm::greaterThanEqual(C, glm::u32vec2(Min))))
+ ++Error;
+ assert(!Error);
+ }
+
+ Error += glm::all(glm::equal(CMin, glm::u32vec2(Min))) ? 0 : 1;
+ Error += glm::all(glm::equal(CMax, glm::u32vec2(Max))) ? 0 : 1;
+ assert(!Error);
+ }
+
+ glm::u64vec2 DMin(std::numeric_limits<glm::u64>::max());
+ glm::u64vec2 DMax(std::numeric_limits<glm::u64>::min());
+ {
+ for(std::size_t i = 0; i < 100000; ++i)
+ {
+ glm::u64vec2 D = glm::linearRand(glm::u64vec2(Min), glm::u64vec2(Max));
+ DMin = glm::min(DMin, D);
+ DMax = glm::max(DMax, D);
+
+ if(!glm::all(glm::lessThanEqual(D, glm::u64vec2(Max))))
+ ++Error;
+ if(!glm::all(glm::greaterThanEqual(D, glm::u64vec2(Min))))
+ ++Error;
+ assert(!Error);
+ }
+
+ Error += glm::all(glm::equal(DMin, glm::u64vec2(Min))) ? 0 : 1;
+ Error += glm::all(glm::equal(DMax, glm::u64vec2(Max))) ? 0 : 1;
+ assert(!Error);
+ }
+ }
+
+ {
+ glm::i8vec2 AMin(std::numeric_limits<glm::i8>::max());
+ glm::i8vec2 AMax(std::numeric_limits<glm::i8>::min());
+ {
+ for(std::size_t i = 0; i < 100000; ++i)
+ {
+ glm::i8vec2 A = glm::linearRand(glm::i8vec2(Min), glm::i8vec2(Max));
+ AMin = glm::min(AMin, A);
+ AMax = glm::max(AMax, A);
+
+ if(!glm::all(glm::lessThanEqual(A, glm::i8vec2(Max))))
+ ++Error;
+ if(!glm::all(glm::greaterThanEqual(A, glm::i8vec2(Min))))
+ ++Error;
+ assert(!Error);
+ }
+
+ Error += glm::all(glm::equal(AMin, glm::i8vec2(Min))) ? 0 : 1;
+ Error += glm::all(glm::equal(AMax, glm::i8vec2(Max))) ? 0 : 1;
+ assert(!Error);
+ }
+
+ glm::i16vec2 BMin(std::numeric_limits<glm::i16>::max());
+ glm::i16vec2 BMax(std::numeric_limits<glm::i16>::min());
+ {
+ for(std::size_t i = 0; i < 100000; ++i)
+ {
+ glm::i16vec2 B = glm::linearRand(glm::i16vec2(Min), glm::i16vec2(Max));
+ BMin = glm::min(BMin, B);
+ BMax = glm::max(BMax, B);
+
+ if(!glm::all(glm::lessThanEqual(B, glm::i16vec2(Max))))
+ ++Error;
+ if(!glm::all(glm::greaterThanEqual(B, glm::i16vec2(Min))))
+ ++Error;
+ assert(!Error);
+ }
+
+ Error += glm::all(glm::equal(BMin, glm::i16vec2(Min))) ? 0 : 1;
+ Error += glm::all(glm::equal(BMax, glm::i16vec2(Max))) ? 0 : 1;
+ assert(!Error);
+ }
+
+ glm::i32vec2 CMin(std::numeric_limits<glm::i32>::max());
+ glm::i32vec2 CMax(std::numeric_limits<glm::i32>::min());
+ {
+ for(std::size_t i = 0; i < 100000; ++i)
+ {
+ glm::i32vec2 C = glm::linearRand(glm::i32vec2(Min), glm::i32vec2(Max));
+ CMin = glm::min(CMin, C);
+ CMax = glm::max(CMax, C);
+
+ if(!glm::all(glm::lessThanEqual(C, glm::i32vec2(Max))))
+ ++Error;
+ if(!glm::all(glm::greaterThanEqual(C, glm::i32vec2(Min))))
+ ++Error;
+ assert(!Error);
+ }
+
+ Error += glm::all(glm::equal(CMin, glm::i32vec2(Min))) ? 0 : 1;
+ Error += glm::all(glm::equal(CMax, glm::i32vec2(Max))) ? 0 : 1;
+ assert(!Error);
+ }
+
+ glm::i64vec2 DMin(std::numeric_limits<glm::i64>::max());
+ glm::i64vec2 DMax(std::numeric_limits<glm::i64>::min());
+ {
+ for(std::size_t i = 0; i < 100000; ++i)
+ {
+ glm::i64vec2 D = glm::linearRand(glm::i64vec2(Min), glm::i64vec2(Max));
+ DMin = glm::min(DMin, D);
+ DMax = glm::max(DMax, D);
+
+ if(!glm::all(glm::lessThanEqual(D, glm::i64vec2(Max))))
+ ++Error;
+ if(!glm::all(glm::greaterThanEqual(D, glm::i64vec2(Min))))
+ ++Error;
+ assert(!Error);
+ }
+
+ Error += glm::all(glm::equal(DMin, glm::i64vec2(Min))) ? 0 : 1;
+ Error += glm::all(glm::equal(DMax, glm::i64vec2(Max))) ? 0 : 1;
+ assert(!Error);
+ }
+ }
+
+ for(std::size_t i = 0; i < 100000; ++i)
+ {
+ glm::f32vec2 const A(glm::linearRand(glm::f32vec2(static_cast<float>(Min)), glm::f32vec2(static_cast<float>(Max))));
+ if(!glm::all(glm::lessThanEqual(A, glm::f32vec2(static_cast<float>(Max)))))
+ ++Error;
+ if(!glm::all(glm::greaterThanEqual(A, glm::f32vec2(static_cast<float>(Min)))))
+ ++Error;
+
+ glm::f64vec2 const B(glm::linearRand(glm::f64vec2(Min), glm::f64vec2(Max)));
+ if(!glm::all(glm::lessThanEqual(B, glm::f64vec2(Max))))
+ ++Error;
+ if(!glm::all(glm::greaterThanEqual(B, glm::f64vec2(Min))))
+ ++Error;
+ assert(!Error);
+ }
+
+ {
+ float ResultFloat = 0.0f;
+ double ResultDouble = 0.0f;
+ for(std::size_t i = 0; i < 100000; ++i)
+ {
+ ResultFloat += glm::linearRand(-1.0f, 1.0f);
+ ResultDouble += glm::linearRand(-1.0, 1.0);
+ }
+
+ Error += glm::epsilonEqual(ResultFloat, 0.0f, 0.0001f);
+ Error += glm::epsilonEqual(ResultDouble, 0.0, 0.0001);
+ assert(!Error);
+ }
+
+ return Error;
+}
+
+int test_circularRand()
+{
+ int Error = 0;
+
+ {
+ std::size_t Max = 100000;
+ float ResultFloat = 0.0f;
+ double ResultDouble = 0.0f;
+ double Radius = 2.0f;
+
+ for(std::size_t i = 0; i < Max; ++i)
+ {
+ ResultFloat += glm::length(glm::circularRand(1.0f));
+ ResultDouble += glm::length(glm::circularRand(Radius));
+ }
+
+ Error += glm::epsilonEqual(ResultFloat, float(Max), 0.01f) ? 0 : 1;
+ Error += glm::epsilonEqual(ResultDouble, double(Max) * double(Radius), 0.01) ? 0 : 1;
+ assert(!Error);
+ }
+
+ return Error;
+}
+
+int test_sphericalRand()
+{
+ int Error = 0;
+
+ {
+ std::size_t Max = 100000;
+ float ResultFloatA = 0.0f;
+ float ResultFloatB = 0.0f;
+ float ResultFloatC = 0.0f;
+ double ResultDoubleA = 0.0f;
+ double ResultDoubleB = 0.0f;
+ double ResultDoubleC = 0.0f;
+
+ for(std::size_t i = 0; i < Max; ++i)
+ {
+ ResultFloatA += glm::length(glm::sphericalRand(1.0f));
+ ResultDoubleA += glm::length(glm::sphericalRand(1.0));
+ ResultFloatB += glm::length(glm::sphericalRand(2.0f));
+ ResultDoubleB += glm::length(glm::sphericalRand(2.0));
+ ResultFloatC += glm::length(glm::sphericalRand(3.0f));
+ ResultDoubleC += glm::length(glm::sphericalRand(3.0));
+ }
+
+ Error += glm::epsilonEqual(ResultFloatA, float(Max), 0.01f) ? 0 : 1;
+ Error += glm::epsilonEqual(ResultDoubleA, double(Max), 0.0001) ? 0 : 1;
+ Error += glm::epsilonEqual(ResultFloatB, float(Max * 2), 0.01f) ? 0 : 1;
+ Error += glm::epsilonEqual(ResultDoubleB, double(Max * 2), 0.0001) ? 0 : 1;
+ Error += glm::epsilonEqual(ResultFloatC, float(Max * 3), 0.01f) ? 0 : 1;
+ Error += glm::epsilonEqual(ResultDoubleC, double(Max * 3), 0.01) ? 0 : 1;
+ assert(!Error);
+ }
+
+ return Error;
+}
+
+int test_diskRand()
+{
+ int Error = 0;
+
+ {
+ float ResultFloat = 0.0f;
+ double ResultDouble = 0.0f;
+
+ for(std::size_t i = 0; i < 100000; ++i)
+ {
+ ResultFloat += glm::length(glm::diskRand(2.0f));
+ ResultDouble += glm::length(glm::diskRand(2.0));
+ }
+
+ Error += ResultFloat < 200000.f ? 0 : 1;
+ Error += ResultDouble < 200000.0 ? 0 : 1;
+ assert(!Error);
+ }
+
+ return Error;
+}
+
+int test_ballRand()
+{
+ int Error = 0;
+
+ {
+ float ResultFloat = 0.0f;
+ double ResultDouble = 0.0f;
+
+ for(std::size_t i = 0; i < 100000; ++i)
+ {
+ ResultFloat += glm::length(glm::ballRand(2.0f));
+ ResultDouble += glm::length(glm::ballRand(2.0));
+ }
+
+ Error += ResultFloat < 200000.f ? 0 : 1;
+ Error += ResultDouble < 200000.0 ? 0 : 1;
+ assert(!Error);
+ }
+
+ return Error;
+}
+/*
+#if(GLM_LANG & GLM_LANG_CXX0X_FLAG)
+int test_grid()
+{
+ int Error = 0;
+
+ typedef std::array<int, 8> colors;
+ typedef std::array<int, 8 * 8> grid;
+
+ grid Grid;
+ colors Colors;
+
+ grid GridBest;
+ colors ColorsBest;
+
+ while(true)
+ {
+ for(std::size_t i = 0; i < Grid.size(); ++i)
+ Grid[i] = int(glm::linearRand(0.0, 8.0 * 8.0 * 8.0 - 1.0) / 64.0);
+
+ for(std::size_t i = 0; i < Grid.size(); ++i)
+ ++Colors[Grid[i]];
+
+ bool Exit = true;
+ for(std::size_t i = 0; i < Colors.size(); ++i)
+ {
+ if(Colors[i] == 8)
+ continue;
+
+ Exit = false;
+ break;
+ }
+
+ if(Exit == true)
+ break;
+ }
+
+ return Error;
+}
+#endif
+*/
+int main()
+{
+ int Error = 0;
+
+ Error += test_linearRand();
+ Error += test_circularRand();
+ Error += test_sphericalRand();
+ Error += test_diskRand();
+ Error += test_ballRand();
+/*
+#if(GLM_LANG & GLM_LANG_CXX0X_FLAG)
+ Error += test_grid();
+#endif
+*/
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtc/gtc_reciprocal.cpp b/src/third_party/glm/test/gtc/gtc_reciprocal.cpp
new file mode 100644
index 0000000..5158413
--- /dev/null
+++ b/src/third_party/glm/test/gtc/gtc_reciprocal.cpp
@@ -0,0 +1,8 @@
+#include <glm/gtc/reciprocal.hpp>
+#include <ctime>
+
+int main()
+{
+ return 0;
+}
+
diff --git a/src/third_party/glm/test/gtc/gtc_round.cpp b/src/third_party/glm/test/gtc/gtc_round.cpp
new file mode 100644
index 0000000..4575066
--- /dev/null
+++ b/src/third_party/glm/test/gtc/gtc_round.cpp
@@ -0,0 +1,458 @@
+#include <glm/gtc/round.hpp>
+#include <glm/gtc/type_precision.hpp>
+#include <glm/gtc/vec1.hpp>
+#include <glm/gtc/epsilon.hpp>
+#include <vector>
+#include <ctime>
+#include <cstdio>
+
+namespace isPowerOfTwo
+{
+ template <typename genType>
+ struct type
+ {
+ genType Value;
+ bool Return;
+ };
+
+ int test_int16()
+ {
+ type<glm::int16> const Data[] =
+ {
+ {0x0001, true},
+ {0x0002, true},
+ {0x0004, true},
+ {0x0080, true},
+ {0x0000, true},
+ {0x0003, false}
+ };
+
+ int Error(0);
+
+ for(std::size_t i = 0, n = sizeof(Data) / sizeof(type<glm::int16>); i < n; ++i)
+ {
+ bool Result = glm::isPowerOfTwo(Data[i].Value);
+ Error += Data[i].Return == Result ? 0 : 1;
+ }
+
+ return Error;
+ }
+
+ int test_uint16()
+ {
+ type<glm::uint16> const Data[] =
+ {
+ {0x0001, true},
+ {0x0002, true},
+ {0x0004, true},
+ {0x0000, true},
+ {0x0000, true},
+ {0x0003, false}
+ };
+
+ int Error(0);
+
+ for(std::size_t i = 0, n = sizeof(Data) / sizeof(type<glm::uint16>); i < n; ++i)
+ {
+ bool Result = glm::isPowerOfTwo(Data[i].Value);
+ Error += Data[i].Return == Result ? 0 : 1;
+ }
+
+ return Error;
+ }
+
+ int test_int32()
+ {
+ type<int> const Data[] =
+ {
+ {0x00000001, true},
+ {0x00000002, true},
+ {0x00000004, true},
+ {0x0000000f, false},
+ {0x00000000, true},
+ {0x00000003, false}
+ };
+
+ int Error(0);
+
+ for(std::size_t i = 0, n = sizeof(Data) / sizeof(type<int>); i < n; ++i)
+ {
+ bool Result = glm::isPowerOfTwo(Data[i].Value);
+ Error += Data[i].Return == Result ? 0 : 1;
+ }
+
+ for(std::size_t i = 0, n = sizeof(Data) / sizeof(type<int>); i < n; ++i)
+ {
+ glm::bvec1 Result = glm::isPowerOfTwo(glm::ivec1(Data[i].Value));
+ Error += glm::all(glm::equal(glm::bvec1(Data[i].Return), Result)) ? 0 : 1;
+ }
+
+ for(std::size_t i = 0, n = sizeof(Data) / sizeof(type<int>); i < n; ++i)
+ {
+ glm::bvec2 Result = glm::isPowerOfTwo(glm::ivec2(Data[i].Value));
+ Error += glm::all(glm::equal(glm::bvec2(Data[i].Return), Result)) ? 0 : 1;
+ }
+
+ for(std::size_t i = 0, n = sizeof(Data) / sizeof(type<int>); i < n; ++i)
+ {
+ glm::bvec3 Result = glm::isPowerOfTwo(glm::ivec3(Data[i].Value));
+ Error += glm::all(glm::equal(glm::bvec3(Data[i].Return), Result)) ? 0 : 1;
+ }
+
+ for(std::size_t i = 0, n = sizeof(Data) / sizeof(type<int>); i < n; ++i)
+ {
+ glm::bvec4 Result = glm::isPowerOfTwo(glm::ivec4(Data[i].Value));
+ Error += glm::all(glm::equal(glm::bvec4(Data[i].Return), Result)) ? 0 : 1;
+ }
+
+ return Error;
+ }
+
+ int test_uint32()
+ {
+ type<glm::uint> const Data[] =
+ {
+ {0x00000001, true},
+ {0x00000002, true},
+ {0x00000004, true},
+ {0x80000000, true},
+ {0x00000000, true},
+ {0x00000003, false}
+ };
+
+ int Error(0);
+
+ for(std::size_t i = 0, n = sizeof(Data) / sizeof(type<glm::uint>); i < n; ++i)
+ {
+ bool Result = glm::isPowerOfTwo(Data[i].Value);
+ Error += Data[i].Return == Result ? 0 : 1;
+ }
+
+ return Error;
+ }
+
+ int test()
+ {
+ int Error(0);
+
+ Error += test_int16();
+ Error += test_uint16();
+ Error += test_int32();
+ Error += test_uint32();
+
+ return Error;
+ }
+}//isPowerOfTwo
+
+namespace ceilPowerOfTwo_advanced
+{
+ template <typename genIUType>
+ GLM_FUNC_QUALIFIER genIUType highestBitValue(genIUType Value)
+ {
+ genIUType tmp = Value;
+ genIUType result = genIUType(0);
+ while(tmp)
+ {
+ result = (tmp & (~tmp + 1)); // grab lowest bit
+ tmp &= ~result; // clear lowest bit
+ }
+ return result;
+ }
+
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType ceilPowerOfTwo_loop(genType value)
+ {
+ return glm::isPowerOfTwo(value) ? value : highestBitValue(value) << 1;
+ }
+
+ template <typename genType>
+ struct type
+ {
+ genType Value;
+ genType Return;
+ };
+
+ int test_int32()
+ {
+ type<glm::int32> const Data[] =
+ {
+ {0x0000ffff, 0x00010000},
+ {-3, -4},
+ {-8, -8},
+ {0x00000001, 0x00000001},
+ {0x00000002, 0x00000002},
+ {0x00000004, 0x00000004},
+ {0x00000007, 0x00000008},
+ {0x0000fff0, 0x00010000},
+ {0x0000f000, 0x00010000},
+ {0x08000000, 0x08000000},
+ {0x00000000, 0x00000000},
+ {0x00000003, 0x00000004}
+ };
+
+ int Error(0);
+
+ for(std::size_t i = 0, n = sizeof(Data) / sizeof(type<glm::int32>); i < n; ++i)
+ {
+ glm::int32 Result = glm::ceilPowerOfTwo(Data[i].Value);
+ Error += Data[i].Return == Result ? 0 : 1;
+ }
+
+ return Error;
+ }
+
+ int test_uint32()
+ {
+ type<glm::uint32> const Data[] =
+ {
+ {0x00000001, 0x00000001},
+ {0x00000002, 0x00000002},
+ {0x00000004, 0x00000004},
+ {0x00000007, 0x00000008},
+ {0x0000ffff, 0x00010000},
+ {0x0000fff0, 0x00010000},
+ {0x0000f000, 0x00010000},
+ {0x80000000, 0x80000000},
+ {0x00000000, 0x00000000},
+ {0x00000003, 0x00000004}
+ };
+
+ int Error(0);
+
+ for(std::size_t i = 0, n = sizeof(Data) / sizeof(type<glm::uint32>); i < n; ++i)
+ {
+ glm::uint32 Result = glm::ceilPowerOfTwo(Data[i].Value);
+ Error += Data[i].Return == Result ? 0 : 1;
+ }
+
+ return Error;
+ }
+
+ int perf()
+ {
+ int Error(0);
+
+ std::vector<glm::uint> v;
+ v.resize(100000000);
+
+ std::clock_t Timestramp0 = std::clock();
+
+ for(glm::uint32 i = 0, n = static_cast<glm::uint>(v.size()); i < n; ++i)
+ v[i] = ceilPowerOfTwo_loop(i);
+
+ std::clock_t Timestramp1 = std::clock();
+
+ for(glm::uint32 i = 0, n = static_cast<glm::uint>(v.size()); i < n; ++i)
+ v[i] = glm::ceilPowerOfTwo(i);
+
+ std::clock_t Timestramp2 = std::clock();
+
+ std::printf("ceilPowerOfTwo_loop: %d clocks\n", static_cast<unsigned int>(Timestramp1 - Timestramp0));
+ std::printf("glm::ceilPowerOfTwo: %d clocks\n", static_cast<unsigned int>(Timestramp2 - Timestramp1));
+
+ return Error;
+ }
+
+ int test()
+ {
+ int Error(0);
+
+ Error += test_int32();
+ Error += test_uint32();
+
+ return Error;
+ }
+}//namespace ceilPowerOfTwo_advanced
+
+namespace roundPowerOfTwo
+{
+ int test()
+ {
+ int Error = 0;
+
+ glm::uint32 const A = glm::roundPowerOfTwo(7u);
+ Error += A == 8u ? 0 : 1;
+
+ glm::uint32 const B = glm::roundPowerOfTwo(15u);
+ Error += B == 16u ? 0 : 1;
+
+ glm::uint32 const C = glm::roundPowerOfTwo(31u);
+ Error += C == 32u ? 0 : 1;
+
+ glm::uint32 const D = glm::roundPowerOfTwo(9u);
+ Error += D == 8u ? 0 : 1;
+
+ glm::uint32 const E = glm::roundPowerOfTwo(17u);
+ Error += E == 16u ? 0 : 1;
+
+ glm::uint32 const F = glm::roundPowerOfTwo(33u);
+ Error += F == 32u ? 0 : 1;
+
+ return Error;
+ }
+}//namespace roundPowerOfTwo
+
+namespace floorPowerOfTwo
+{
+ int test()
+ {
+ int Error = 0;
+
+ glm::uint32 const A = glm::floorPowerOfTwo(7u);
+ Error += A == 4u ? 0 : 1;
+
+ glm::uint32 const B = glm::floorPowerOfTwo(15u);
+ Error += B == 8u ? 0 : 1;
+
+ glm::uint32 const C = glm::floorPowerOfTwo(31u);
+ Error += C == 16u ? 0 : 1;
+
+ return Error;
+ }
+}//namespace floorPowerOfTwo
+
+namespace ceilPowerOfTwo
+{
+ int test()
+ {
+ int Error = 0;
+
+ glm::uint32 const A = glm::ceilPowerOfTwo(7u);
+ Error += A == 8u ? 0 : 1;
+
+ glm::uint32 const B = glm::ceilPowerOfTwo(15u);
+ Error += B == 16u ? 0 : 1;
+
+ glm::uint32 const C = glm::ceilPowerOfTwo(31u);
+ Error += C == 32u ? 0 : 1;
+
+ return Error;
+ }
+}//namespace ceilPowerOfTwo
+
+namespace floorMultiple
+{
+ template <typename genType>
+ struct type
+ {
+ genType Source;
+ genType Multiple;
+ genType Return;
+ genType Epsilon;
+ };
+
+ int test_float()
+ {
+ type<glm::float64> const Data[] =
+ {
+ {3.4, 0.3, 3.3, 0.0001},
+ {-1.4, 0.3, -1.5, 0.0001},
+ };
+
+ int Error(0);
+
+ for(std::size_t i = 0, n = sizeof(Data) / sizeof(type<glm::float64>); i < n; ++i)
+ {
+ glm::float64 Result = glm::floorMultiple(Data[i].Source, Data[i].Multiple);
+ Error += glm::epsilonEqual(Data[i].Return, Result, Data[i].Epsilon) ? 0 : 1;
+ }
+
+ return Error;
+ }
+
+ int test()
+ {
+ int Error(0);
+
+ Error += test_float();
+
+ return Error;
+ }
+}//namespace floorMultiple
+
+namespace ceilMultiple
+{
+ template <typename genType>
+ struct type
+ {
+ genType Source;
+ genType Multiple;
+ genType Return;
+ genType Epsilon;
+ };
+
+ int test_float()
+ {
+ type<glm::float64> const Data[] =
+ {
+ {3.4, 0.3, 3.6, 0.0001},
+ {-1.4, 0.3, -1.2, 0.0001},
+ };
+
+ int Error(0);
+
+ for(std::size_t i = 0, n = sizeof(Data) / sizeof(type<glm::float64>); i < n; ++i)
+ {
+ glm::float64 Result = glm::ceilMultiple(Data[i].Source, Data[i].Multiple);
+ Error += glm::epsilonEqual(Data[i].Return, Result, Data[i].Epsilon) ? 0 : 1;
+ }
+
+ return Error;
+ }
+
+ int test_int()
+ {
+ type<int> const Data[] =
+ {
+ {3, 4, 4, 0},
+ {7, 4, 8, 0},
+ {5, 4, 8, 0},
+ {1, 4, 4, 0},
+ {1, 3, 3, 0},
+ {4, 3, 6, 0},
+ {4, 1, 4, 0},
+ {1, 1, 1, 0},
+ {7, 1, 7, 0},
+ };
+
+ int Error(0);
+
+ for(std::size_t i = 0, n = sizeof(Data) / sizeof(type<int>); i < n; ++i)
+ {
+ int Result = glm::ceilMultiple(Data[i].Source, Data[i].Multiple);
+ Error += Data[i].Return == Result ? 0 : 1;
+ }
+
+ return Error;
+ }
+
+ int test()
+ {
+ int Error(0);
+
+ Error += test_int();
+ Error += test_float();
+
+ return Error;
+ }
+}//namespace ceilMultiple
+
+int main()
+{
+ int Error(0);
+
+ Error += isPowerOfTwo::test();
+ Error += floorPowerOfTwo::test();
+ Error += roundPowerOfTwo::test();
+ Error += ceilPowerOfTwo::test();
+ Error += ceilPowerOfTwo_advanced::test();
+
+# ifdef NDEBUG
+ Error += ceilPowerOfTwo_advanced::perf();
+# endif//NDEBUG
+
+ Error += floorMultiple::test();
+ Error += ceilMultiple::test();
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtc/gtc_type_aligned.cpp b/src/third_party/glm/test/gtc/gtc_type_aligned.cpp
new file mode 100644
index 0000000..a3ba7b8
--- /dev/null
+++ b/src/third_party/glm/test/gtc/gtc_type_aligned.cpp
@@ -0,0 +1,118 @@
+#define GLM_FORCE_MESSAGES
+#include <glm/glm.hpp>
+
+#if GLM_HAS_ALIGNED_TYPE
+#include <glm/gtc/type_aligned.hpp>
+
+GLM_STATIC_ASSERT(glm::detail::is_aligned<glm::aligned_lowp>::value, "aligned_lowp is not aligned");
+GLM_STATIC_ASSERT(glm::detail::is_aligned<glm::aligned_mediump>::value, "aligned_mediump is not aligned");
+GLM_STATIC_ASSERT(glm::detail::is_aligned<glm::aligned_highp>::value, "aligned_highp is not aligned");
+GLM_STATIC_ASSERT(!glm::detail::is_aligned<glm::packed_highp>::value, "packed_highp is aligned");
+GLM_STATIC_ASSERT(!glm::detail::is_aligned<glm::packed_mediump>::value, "packed_mediump is aligned");
+GLM_STATIC_ASSERT(!glm::detail::is_aligned<glm::packed_lowp>::value, "packed_lowp is aligned");
+
+struct my_vec4_packed
+{
+ glm::uint32 a;
+ glm::vec4 b;
+};
+GLM_STATIC_ASSERT(sizeof(my_vec4_packed) == sizeof(glm::uint32) + sizeof(glm::vec4), "glm::vec4 packed is not correct");
+
+struct my_vec4_aligned
+{
+ glm::uint32 a;
+ glm::aligned_vec4 b;
+};
+GLM_STATIC_ASSERT(sizeof(my_vec4_aligned) == sizeof(glm::aligned_vec4) * 2, "glm::vec4 aligned is not correct");
+
+struct my_dvec4_packed
+{
+ glm::uint64 a;
+ glm::dvec4 b;
+};
+GLM_STATIC_ASSERT(sizeof(my_dvec4_packed) == sizeof(glm::uint64) + sizeof(glm::dvec4), "glm::dvec4 packed is not correct");
+
+struct my_dvec4_aligned
+{
+ glm::uint64 a;
+ glm::aligned_dvec4 b;
+};
+//GLM_STATIC_ASSERT(sizeof(my_dvec4_aligned) == sizeof(glm::aligned_dvec4) * 2, "glm::dvec4 aligned is not correct");
+
+struct my_ivec4_packed
+{
+ glm::uint32 a;
+ glm::ivec4 b;
+};
+GLM_STATIC_ASSERT(sizeof(my_ivec4_packed) == sizeof(glm::uint32) + sizeof(glm::ivec4), "glm::ivec4 packed is not correct");
+
+struct my_ivec4_aligned
+{
+ glm::uint32 a;
+ glm::aligned_ivec4 b;
+};
+GLM_STATIC_ASSERT(sizeof(my_ivec4_aligned) == sizeof(glm::aligned_ivec4) * 2, "glm::ivec4 aligned is not correct");
+
+struct my_u8vec4_packed
+{
+ glm::uint32 a;
+ glm::u8vec4 b;
+};
+GLM_STATIC_ASSERT(sizeof(my_u8vec4_packed) == sizeof(glm::uint32) + sizeof(glm::u8vec4), "glm::u8vec4 packed is not correct");
+
+int test_copy()
+{
+ int Error = 0;
+
+ {
+ glm::aligned_ivec4 const a(1, 2, 3, 4);
+ glm::ivec4 const u(a);
+
+ Error += a.x == u.x ? 0 : 1;
+ Error += a.y == u.y ? 0 : 1;
+ Error += a.z == u.z ? 0 : 1;
+ Error += a.w == u.w ? 0 : 1;
+ }
+
+ {
+ my_ivec4_aligned a;
+ a.b = glm::ivec4(1, 2, 3, 4);
+
+ my_ivec4_packed u;
+ u.b = a.b;
+
+ Error += a.b.x == u.b.x ? 0 : 1;
+ Error += a.b.y == u.b.y ? 0 : 1;
+ Error += a.b.z == u.b.z ? 0 : 1;
+ Error += a.b.w == u.b.w ? 0 : 1;
+ }
+
+ return Error;
+}
+
+int main()
+{
+ int Error = 0;
+
+ my_vec4_aligned GNA;
+ my_dvec4_aligned GNI;
+
+ std::size_t A0 = sizeof(my_dvec4_aligned);
+ std::size_t B0 = sizeof(my_dvec4_packed);
+ std::size_t C0 = sizeof(glm::aligned_dvec4);
+
+ std::size_t A1 = sizeof(my_vec4_aligned);
+ std::size_t B1 = sizeof(my_vec4_packed);
+ std::size_t C1 = sizeof(glm::aligned_vec4);
+
+ return Error;
+}
+
+#else
+
+int main()
+{
+ return 0;
+}
+
+#endif//GLM_HAS_ALIGNED_TYPE
diff --git a/src/third_party/glm/test/gtc/gtc_type_precision.cpp b/src/third_party/glm/test/gtc/gtc_type_precision.cpp
new file mode 100644
index 0000000..8ae4300
--- /dev/null
+++ b/src/third_party/glm/test/gtc/gtc_type_precision.cpp
@@ -0,0 +1,890 @@
+#include <glm/gtc/type_precision.hpp>
+#include <glm/gtc/quaternion.hpp>
+#include <vector>
+#if GLM_HAS_OPENMP
+# include <omp.h>
+#endif
+
+static int test_scalar_size()
+{
+ int Error(0);
+ Error += sizeof(glm::int8) != 1;
+ Error += sizeof(glm::int16) != 2;
+ Error += sizeof(glm::int32) != 4;
+ Error += sizeof(glm::int64) != 8;
+ Error += sizeof(glm::uint8) != 1;
+ Error += sizeof(glm::uint16) != 2;
+ Error += sizeof(glm::uint32) != 4;
+ Error += sizeof(glm::uint64) != 8;
+ Error += sizeof(glm::float32) != 4;
+ Error += sizeof(glm::float64) != 8;
+
+ Error += sizeof(glm::lowp_int8) != 1;
+ Error += sizeof(glm::lowp_int16) != 2;
+ Error += sizeof(glm::lowp_int32) != 4;
+ Error += sizeof(glm::lowp_int64) != 8;
+ Error += sizeof(glm::lowp_uint8) != 1;
+ Error += sizeof(glm::lowp_uint16) != 2;
+ Error += sizeof(glm::lowp_uint32) != 4;
+ Error += sizeof(glm::lowp_uint64) != 8;
+ Error += sizeof(glm::lowp_float32) != 4;
+ Error += sizeof(glm::lowp_float64) != 8;
+
+ Error += sizeof(glm::mediump_int8) != 1;
+ Error += sizeof(glm::mediump_int16) != 2;
+ Error += sizeof(glm::mediump_int32) != 4;
+ Error += sizeof(glm::mediump_int64) != 8;
+ Error += sizeof(glm::mediump_uint8) != 1;
+ Error += sizeof(glm::mediump_uint16) != 2;
+ Error += sizeof(glm::mediump_uint32) != 4;
+ Error += sizeof(glm::mediump_uint64) != 8;
+ Error += sizeof(glm::mediump_float32) != 4;
+ Error += sizeof(glm::mediump_float64) != 8;
+
+ Error += sizeof(glm::highp_int8) != 1;
+ Error += sizeof(glm::highp_int16) != 2;
+ Error += sizeof(glm::highp_int32) != 4;
+ Error += sizeof(glm::highp_int64) != 8;
+ Error += sizeof(glm::highp_uint8) != 1;
+ Error += sizeof(glm::highp_uint16) != 2;
+ Error += sizeof(glm::highp_uint32) != 4;
+ Error += sizeof(glm::highp_uint64) != 8;
+ Error += sizeof(glm::highp_float32) != 4;
+ Error += sizeof(glm::highp_float64) != 8;
+ return Error;
+}
+
+static int test_fvec_size()
+{
+ int Error(0);
+ Error += sizeof(glm::f32vec2) != 8;
+ Error += sizeof(glm::f32vec3) != 12;
+ Error += sizeof(glm::f32vec4) != 16;
+ Error += sizeof(glm::f64vec2) != 16;
+ Error += sizeof(glm::f64vec3) != 24;
+ Error += sizeof(glm::f64vec4) != 32;
+
+ Error += sizeof(glm::lowp_f32vec2) != 8;
+ Error += sizeof(glm::lowp_f32vec3) != 12;
+ Error += sizeof(glm::lowp_f32vec4) != 16;
+ Error += sizeof(glm::lowp_f64vec2) != 16;
+ Error += sizeof(glm::lowp_f64vec3) != 24;
+ Error += sizeof(glm::lowp_f64vec4) != 32;
+
+ Error += sizeof(glm::mediump_f32vec2) != 8;
+ Error += sizeof(glm::mediump_f32vec3) != 12;
+ Error += sizeof(glm::mediump_f32vec4) != 16;
+ Error += sizeof(glm::mediump_f64vec2) != 16;
+ Error += sizeof(glm::mediump_f64vec3) != 24;
+ Error += sizeof(glm::mediump_f64vec4) != 32;
+
+ Error += sizeof(glm::highp_f32vec2) != 8;
+ Error += sizeof(glm::highp_f32vec3) != 12;
+ Error += sizeof(glm::highp_f32vec4) != 16;
+ Error += sizeof(glm::highp_f64vec2) != 16;
+ Error += sizeof(glm::highp_f64vec3) != 24;
+ Error += sizeof(glm::highp_f64vec4) != 32;
+ return Error;
+}
+
+static int test_fvec_precision()
+{
+ int Error(0);
+/*
+ {
+ glm::f32vec2 v1;
+ glm::lowp_f32vec2 v2((glm::f32vec2(v1)));
+ glm::mediump_f32vec2 v3((glm::f32vec2(v1)));
+ glm::highp_f32vec2 v4((glm::f32vec2(v1)));
+
+ Error += glm::all(glm::equal(v1, v2)) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, v3)) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, v4)) ? 0 : 1;
+ }
+*/
+ {
+ glm::f32vec2 v1;
+ glm::lowp_f32vec2 v2(v1);
+ glm::mediump_f32vec2 v3(v1);
+ glm::highp_f32vec2 v4(v1);
+
+ Error += glm::all(glm::equal(v1, glm::f32vec2(v2))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::f32vec2(v3))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::f32vec2(v4))) ? 0 : 1;
+ }
+
+ {
+ glm::f32vec3 v1;
+ glm::lowp_f32vec3 v2(v1);
+ glm::mediump_f32vec3 v3(v1);
+ glm::highp_f32vec3 v4(v1);
+
+ Error += glm::all(glm::equal(v1, glm::f32vec3(v2))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::f32vec3(v3))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::f32vec3(v4))) ? 0 : 1;
+ }
+
+ {
+ glm::f32vec4 v1;
+ glm::lowp_f32vec4 v2(v1);
+ glm::mediump_f32vec4 v3(v1);
+ glm::highp_f32vec4 v4(v1);
+
+ Error += glm::all(glm::equal(v1, glm::f32vec4(v2))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::f32vec4(v3))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::f32vec4(v4))) ? 0 : 1;
+ }
+
+ return Error;
+}
+
+static int test_dvec_precision()
+{
+ int Error(0);
+
+ {
+ glm::f64vec2 v1;
+ glm::lowp_f64vec2 v2(v1);
+ glm::mediump_f64vec2 v3(v1);
+ glm::highp_f64vec2 v4(v1);
+
+ Error += glm::all(glm::equal(v1, glm::f64vec2(v2))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::f64vec2(v3))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::f64vec2(v4))) ? 0 : 1;
+ }
+
+ {
+ glm::f64vec3 v1;
+ glm::lowp_f64vec3 v2(v1);
+ glm::mediump_f64vec3 v3(v1);
+ glm::highp_f64vec3 v4(v1);
+
+ Error += glm::all(glm::equal(v1, glm::f64vec3(v2))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::f64vec3(v3))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::f64vec3(v4))) ? 0 : 1;
+ }
+
+ {
+ glm::f64vec4 v1;
+ glm::lowp_f64vec4 v2(v1);
+ glm::mediump_f64vec4 v3(v1);
+ glm::highp_f64vec4 v4(v1);
+
+ Error += glm::all(glm::equal(v1, glm::f64vec4(v2))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::f64vec4(v3))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::f64vec4(v4))) ? 0 : 1;
+ }
+
+ return Error;
+}
+
+static int test_ivec_size()
+{
+ int Error(0);
+ Error += sizeof(glm::i8vec2) != 2;
+ Error += sizeof(glm::i8vec3) != 3;
+ Error += sizeof(glm::i8vec4) != 4;
+ Error += sizeof(glm::i16vec2) != 4;
+ Error += sizeof(glm::i16vec3) != 6;
+ Error += sizeof(glm::i16vec4) != 8;
+ Error += sizeof(glm::i32vec2) != 8;
+ Error += sizeof(glm::i32vec3) != 12;
+ Error += sizeof(glm::i32vec4) != 16;
+ Error += sizeof(glm::i64vec2) != 16;
+ Error += sizeof(glm::i64vec3) != 24;
+ Error += sizeof(glm::i64vec4) != 32;
+
+ Error += sizeof(glm::lowp_i8vec2) != 2;
+ Error += sizeof(glm::lowp_i8vec3) != 3;
+ Error += sizeof(glm::lowp_i8vec4) != 4;
+ Error += sizeof(glm::lowp_i16vec2) != 4;
+ Error += sizeof(glm::lowp_i16vec3) != 6;
+ Error += sizeof(glm::lowp_i16vec4) != 8;
+ Error += sizeof(glm::lowp_i32vec2) != 8;
+ Error += sizeof(glm::lowp_i32vec3) != 12;
+ Error += sizeof(glm::lowp_i32vec4) != 16;
+ Error += sizeof(glm::lowp_i64vec2) != 16;
+ Error += sizeof(glm::lowp_i64vec3) != 24;
+ Error += sizeof(glm::lowp_i64vec4) != 32;
+
+ Error += sizeof(glm::mediump_i8vec2) != 2;
+ Error += sizeof(glm::mediump_i8vec3) != 3;
+ Error += sizeof(glm::mediump_i8vec4) != 4;
+ Error += sizeof(glm::mediump_i16vec2) != 4;
+ Error += sizeof(glm::mediump_i16vec3) != 6;
+ Error += sizeof(glm::mediump_i16vec4) != 8;
+ Error += sizeof(glm::mediump_i32vec2) != 8;
+ Error += sizeof(glm::mediump_i32vec3) != 12;
+ Error += sizeof(glm::mediump_i32vec4) != 16;
+ Error += sizeof(glm::mediump_i64vec2) != 16;
+ Error += sizeof(glm::mediump_i64vec3) != 24;
+ Error += sizeof(glm::mediump_i64vec4) != 32;
+
+ Error += sizeof(glm::highp_i8vec2) != 2;
+ Error += sizeof(glm::highp_i8vec3) != 3;
+ Error += sizeof(glm::highp_i8vec4) != 4;
+ Error += sizeof(glm::highp_i16vec2) != 4;
+ Error += sizeof(glm::highp_i16vec3) != 6;
+ Error += sizeof(glm::highp_i16vec4) != 8;
+ Error += sizeof(glm::highp_i32vec2) != 8;
+ Error += sizeof(glm::highp_i32vec3) != 12;
+ Error += sizeof(glm::highp_i32vec4) != 16;
+ Error += sizeof(glm::highp_i64vec2) != 16;
+ Error += sizeof(glm::highp_i64vec3) != 24;
+ Error += sizeof(glm::highp_i64vec4) != 32;
+ return Error;
+}
+
+static int test_ivec_precision()
+{
+ int Error(0);
+
+ {
+ glm::i8vec2 v1;
+ glm::lowp_i8vec2 v2(v1);
+ glm::mediump_i8vec2 v3(v1);
+ glm::highp_i8vec2 v4(v1);
+
+ Error += glm::all(glm::equal(v1, glm::i8vec2(v2))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::i8vec2(v3))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::i8vec2(v4))) ? 0 : 1;
+ }
+
+ {
+ glm::i8vec3 v1;
+ glm::lowp_i8vec3 v2(v1);
+ glm::mediump_i8vec3 v3(v1);
+ glm::highp_i8vec3 v4(v1);
+
+ Error += glm::all(glm::equal(v1, glm::i8vec3(v2))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::i8vec3(v3))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::i8vec3(v4))) ? 0 : 1;
+ }
+
+ {
+ glm::i8vec4 v1;
+ glm::lowp_i8vec4 v2(v1);
+ glm::mediump_i8vec4 v3(v1);
+ glm::highp_i8vec4 v4(v1);
+
+ Error += glm::all(glm::equal(v1, glm::i8vec4(v2))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::i8vec4(v3))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::i8vec4(v4))) ? 0 : 1;
+ }
+
+ {
+ glm::i16vec2 v1;
+ glm::lowp_i16vec2 v2(v1);
+ glm::mediump_i16vec2 v3(v1);
+ glm::highp_i16vec2 v4(v1);
+
+ Error += glm::all(glm::equal(v1, glm::i16vec2(v2))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::i16vec2(v3))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::i16vec2(v4))) ? 0 : 1;
+ }
+
+ {
+ glm::i16vec3 v1;
+ glm::lowp_i16vec3 v2(v1);
+ glm::mediump_i16vec3 v3(v1);
+ glm::highp_i16vec3 v4(v1);
+
+ Error += glm::all(glm::equal(v1, glm::i16vec3(v2))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::i16vec3(v3))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::i16vec3(v4))) ? 0 : 1;
+ }
+
+ {
+ glm::i16vec4 v1;
+ glm::lowp_i16vec4 v2(v1);
+ glm::mediump_i16vec4 v3(v1);
+ glm::highp_i16vec4 v4(v1);
+
+ Error += glm::all(glm::equal(v1, glm::i16vec4(v2))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::i16vec4(v3))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::i16vec4(v4))) ? 0 : 1;
+ }
+
+ {
+ glm::i32vec2 v1;
+ glm::lowp_i32vec2 v2(v1);
+ glm::mediump_i32vec2 v3(v1);
+ glm::highp_i32vec2 v4(v1);
+
+ Error += glm::all(glm::equal(v1, glm::i32vec2(v2))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::i32vec2(v3))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::i32vec2(v4))) ? 0 : 1;
+ }
+
+ {
+ glm::i32vec3 v1;
+ glm::lowp_i32vec3 v2(v1);
+ glm::mediump_i32vec3 v3(v1);
+ glm::highp_i32vec3 v4(v1);
+
+ Error += glm::all(glm::equal(v1, glm::i32vec3(v2))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::i32vec3(v3))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::i32vec3(v4))) ? 0 : 1;
+ }
+
+ {
+ glm::i32vec4 v1;
+ glm::lowp_i32vec4 v2(v1);
+ glm::mediump_i32vec4 v3(v1);
+ glm::highp_i32vec4 v4(v1);
+
+ Error += glm::all(glm::equal(v1, glm::i32vec4(v2))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::i32vec4(v3))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::i32vec4(v4))) ? 0 : 1;
+ }
+
+ {
+ glm::i64vec2 v1;
+ glm::lowp_i64vec2 v2(v1);
+ glm::mediump_i64vec2 v3(v1);
+ glm::highp_i64vec2 v4(v1);
+
+ Error += glm::all(glm::equal(v1, glm::i64vec2(v2))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::i64vec2(v3))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::i64vec2(v4))) ? 0 : 1;
+ }
+
+ {
+ glm::i64vec3 v1;
+ glm::lowp_i64vec3 v2(v1);
+ glm::mediump_i64vec3 v3(v1);
+ glm::highp_i64vec3 v4(v1);
+
+ Error += glm::all(glm::equal(v1, glm::i64vec3(v2))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::i64vec3(v3))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::i64vec3(v4))) ? 0 : 1;
+ }
+
+ {
+ glm::i64vec4 v1;
+ glm::lowp_i64vec4 v2(v1);
+ glm::mediump_i64vec4 v3(v1);
+ glm::highp_i64vec4 v4(v1);
+
+ Error += glm::all(glm::equal(v1, glm::i64vec4(v2))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::i64vec4(v3))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::i64vec4(v4))) ? 0 : 1;
+ }
+
+ return Error;
+}
+
+static int test_uvec_size()
+{
+ int Error(0);
+ Error += sizeof(glm::u8vec2) != 2;
+ Error += sizeof(glm::u8vec3) != 3;
+ Error += sizeof(glm::u8vec4) != 4;
+ Error += sizeof(glm::u16vec2) != 4;
+ Error += sizeof(glm::u16vec3) != 6;
+ Error += sizeof(glm::u16vec4) != 8;
+ Error += sizeof(glm::u32vec2) != 8;
+ Error += sizeof(glm::u32vec3) != 12;
+ Error += sizeof(glm::u32vec4) != 16;
+ Error += sizeof(glm::u64vec2) != 16;
+ Error += sizeof(glm::u64vec3) != 24;
+ Error += sizeof(glm::u64vec4) != 32;
+
+ Error += sizeof(glm::lowp_u8vec2) != 2;
+ Error += sizeof(glm::lowp_u8vec3) != 3;
+ Error += sizeof(glm::lowp_u8vec4) != 4;
+ Error += sizeof(glm::lowp_u16vec2) != 4;
+ Error += sizeof(glm::lowp_u16vec3) != 6;
+ Error += sizeof(glm::lowp_u16vec4) != 8;
+ Error += sizeof(glm::lowp_u32vec2) != 8;
+ Error += sizeof(glm::lowp_u32vec3) != 12;
+ Error += sizeof(glm::lowp_u32vec4) != 16;
+ Error += sizeof(glm::lowp_u64vec2) != 16;
+ Error += sizeof(glm::lowp_u64vec3) != 24;
+ Error += sizeof(glm::lowp_u64vec4) != 32;
+
+ Error += sizeof(glm::mediump_u8vec2) != 2;
+ Error += sizeof(glm::mediump_u8vec3) != 3;
+ Error += sizeof(glm::mediump_u8vec4) != 4;
+ Error += sizeof(glm::mediump_u16vec2) != 4;
+ Error += sizeof(glm::mediump_u16vec3) != 6;
+ Error += sizeof(glm::mediump_u16vec4) != 8;
+ Error += sizeof(glm::mediump_u32vec2) != 8;
+ Error += sizeof(glm::mediump_u32vec3) != 12;
+ Error += sizeof(glm::mediump_u32vec4) != 16;
+ Error += sizeof(glm::mediump_u64vec2) != 16;
+ Error += sizeof(glm::mediump_u64vec3) != 24;
+ Error += sizeof(glm::mediump_u64vec4) != 32;
+
+ Error += sizeof(glm::highp_u8vec2) != 2;
+ Error += sizeof(glm::highp_u8vec3) != 3;
+ Error += sizeof(glm::highp_u8vec4) != 4;
+ Error += sizeof(glm::highp_u16vec2) != 4;
+ Error += sizeof(glm::highp_u16vec3) != 6;
+ Error += sizeof(glm::highp_u16vec4) != 8;
+ Error += sizeof(glm::highp_u32vec2) != 8;
+ Error += sizeof(glm::highp_u32vec3) != 12;
+ Error += sizeof(glm::highp_u32vec4) != 16;
+ Error += sizeof(glm::highp_u64vec2) != 16;
+ Error += sizeof(glm::highp_u64vec3) != 24;
+ Error += sizeof(glm::highp_u64vec4) != 32;
+ return Error;
+}
+
+static int test_uvec_precision()
+{
+ int Error(0);
+
+ {
+ glm::u8vec2 v1;
+ glm::lowp_u8vec2 v2(v1);
+ glm::mediump_u8vec2 v3(v1);
+ glm::highp_u8vec2 v4(v1);
+
+ Error += glm::all(glm::equal(v1, glm::u8vec2(v2))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::u8vec2(v3))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::u8vec2(v4))) ? 0 : 1;
+ }
+
+ {
+ glm::u8vec3 v1;
+ glm::lowp_u8vec3 v2(v1);
+ glm::mediump_u8vec3 v3(v1);
+ glm::highp_u8vec3 v4(v1);
+
+ Error += glm::all(glm::equal(v1, glm::u8vec3(v2))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::u8vec3(v3))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::u8vec3(v4))) ? 0 : 1;
+ }
+
+ {
+ glm::u8vec4 v1;
+ glm::lowp_u8vec4 v2(v1);
+ glm::mediump_u8vec4 v3(v1);
+ glm::highp_u8vec4 v4(v1);
+
+ Error += glm::all(glm::equal(v1, glm::u8vec4(v2))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::u8vec4(v3))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::u8vec4(v4))) ? 0 : 1;
+ }
+
+ {
+ glm::u16vec2 v1;
+ glm::lowp_u16vec2 v2(v1);
+ glm::mediump_u16vec2 v3(v1);
+ glm::highp_u16vec2 v4(v1);
+
+ Error += glm::all(glm::equal(v1, glm::u16vec2(v2))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::u16vec2(v3))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::u16vec2(v4))) ? 0 : 1;
+ }
+
+ {
+ glm::u16vec3 v1;
+ glm::lowp_u16vec3 v2(v1);
+ glm::mediump_u16vec3 v3(v1);
+ glm::highp_u16vec3 v4(v1);
+
+ Error += glm::all(glm::equal(v1, glm::u16vec3(v2))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::u16vec3(v3))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::u16vec3(v4))) ? 0 : 1;
+ }
+
+ {
+ glm::u16vec4 v1;
+ glm::lowp_u16vec4 v2(v1);
+ glm::mediump_u16vec4 v3(v1);
+ glm::highp_u16vec4 v4(v1);
+
+ Error += glm::all(glm::equal(v1, glm::u16vec4(v2))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::u16vec4(v3))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::u16vec4(v4))) ? 0 : 1;
+ }
+
+ {
+ glm::u32vec2 v1;
+ glm::lowp_u32vec2 v2(v1);
+ glm::mediump_u32vec2 v3(v1);
+ glm::highp_u32vec2 v4(v1);
+
+ Error += glm::all(glm::equal(v1, glm::u32vec2(v2))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::u32vec2(v3))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::u32vec2(v4))) ? 0 : 1;
+ }
+
+ {
+ glm::u32vec3 v1;
+ glm::lowp_u32vec3 v2(v1);
+ glm::mediump_u32vec3 v3(v1);
+ glm::highp_u32vec3 v4(v1);
+
+ Error += glm::all(glm::equal(v1, glm::u32vec3(v2))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::u32vec3(v3))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::u32vec3(v4))) ? 0 : 1;
+ }
+
+ {
+ glm::u32vec4 v1;
+ glm::lowp_u32vec4 v2(v1);
+ glm::mediump_u32vec4 v3(v1);
+ glm::highp_u32vec4 v4(v1);
+
+ Error += glm::all(glm::equal(v1, glm::u32vec4(v2))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::u32vec4(v3))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::u32vec4(v4))) ? 0 : 1;
+ }
+
+ {
+ glm::u64vec2 v1;
+ glm::lowp_u64vec2 v2(v1);
+ glm::mediump_u64vec2 v3(v1);
+ glm::highp_u64vec2 v4(v1);
+
+ Error += glm::all(glm::equal(v1, glm::u64vec2(v2))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::u64vec2(v3))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::u64vec2(v4))) ? 0 : 1;
+ }
+
+ {
+ glm::u64vec3 v1;
+ glm::lowp_u64vec3 v2(v1);
+ glm::mediump_u64vec3 v3(v1);
+ glm::highp_u64vec3 v4(v1);
+
+ Error += glm::all(glm::equal(v1, glm::u64vec3(v2))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::u64vec3(v3))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::u64vec3(v4))) ? 0 : 1;
+ }
+
+ {
+ glm::u64vec4 v1;
+ glm::lowp_u64vec4 v2(v1);
+ glm::mediump_u64vec4 v3(v1);
+ glm::highp_u64vec4 v4(v1);
+
+ Error += glm::all(glm::equal(v1, glm::u64vec4(v2))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::u64vec4(v3))) ? 0 : 1;
+ Error += glm::all(glm::equal(v1, glm::u64vec4(v4))) ? 0 : 1;
+ }
+
+ return Error;
+}
+
+static int test_fmat_size()
+{
+ int Error(0);
+ Error += sizeof(glm::mat2) != 16;
+ Error += sizeof(glm::mat3) != 36;
+ Error += sizeof(glm::mat4) != 64;
+ Error += sizeof(glm::mat2x2) != 16;
+ Error += sizeof(glm::mat2x3) != 24;
+ Error += sizeof(glm::mat2x4) != 32;
+ Error += sizeof(glm::mat3x2) != 24;
+ Error += sizeof(glm::mat3x3) != 36;
+ Error += sizeof(glm::mat3x4) != 48;
+ Error += sizeof(glm::mat4x2) != 32;
+ Error += sizeof(glm::mat4x3) != 48;
+ Error += sizeof(glm::mat4x4) != 64;
+
+ Error += sizeof(glm::fmat2) != 16;
+ Error += sizeof(glm::fmat3) != 36;
+ Error += sizeof(glm::fmat4) != 64;
+ Error += sizeof(glm::fmat2x2) != 16;
+ Error += sizeof(glm::fmat2x3) != 24;
+ Error += sizeof(glm::fmat2x4) != 32;
+ Error += sizeof(glm::fmat3x2) != 24;
+ Error += sizeof(glm::fmat3x3) != 36;
+ Error += sizeof(glm::fmat3x4) != 48;
+ Error += sizeof(glm::fmat4x2) != 32;
+ Error += sizeof(glm::fmat4x3) != 48;
+ Error += sizeof(glm::fmat4x4) != 64;
+
+ Error += sizeof(glm::f32mat2) != 16;
+ Error += sizeof(glm::f32mat3) != 36;
+ Error += sizeof(glm::f32mat4) != 64;
+ Error += sizeof(glm::f32mat2x2) != 16;
+ Error += sizeof(glm::f32mat2x3) != 24;
+ Error += sizeof(glm::f32mat2x4) != 32;
+ Error += sizeof(glm::f32mat3x2) != 24;
+ Error += sizeof(glm::f32mat3x3) != 36;
+ Error += sizeof(glm::f32mat3x4) != 48;
+ Error += sizeof(glm::f32mat4x2) != 32;
+ Error += sizeof(glm::f32mat4x3) != 48;
+ Error += sizeof(glm::f32mat4x4) != 64;
+
+
+ Error += sizeof(glm::lowp_mat2) != 16;
+ Error += sizeof(glm::lowp_mat3) != 36;
+ Error += sizeof(glm::lowp_mat4) != 64;
+ Error += sizeof(glm::lowp_mat2x2) != 16;
+ Error += sizeof(glm::lowp_mat2x3) != 24;
+ Error += sizeof(glm::lowp_mat2x4) != 32;
+ Error += sizeof(glm::lowp_mat3x2) != 24;
+ Error += sizeof(glm::lowp_mat3x3) != 36;
+ Error += sizeof(glm::lowp_mat3x4) != 48;
+ Error += sizeof(glm::lowp_mat4x2) != 32;
+ Error += sizeof(glm::lowp_mat4x3) != 48;
+ Error += sizeof(glm::lowp_mat4x4) != 64;
+
+ Error += sizeof(glm::lowp_fmat2) != 16;
+ Error += sizeof(glm::lowp_fmat3) != 36;
+ Error += sizeof(glm::lowp_fmat4) != 64;
+ Error += sizeof(glm::lowp_fmat2x2) != 16;
+ Error += sizeof(glm::lowp_fmat2x3) != 24;
+ Error += sizeof(glm::lowp_fmat2x4) != 32;
+ Error += sizeof(glm::lowp_fmat3x2) != 24;
+ Error += sizeof(glm::lowp_fmat3x3) != 36;
+ Error += sizeof(glm::lowp_fmat3x4) != 48;
+ Error += sizeof(glm::lowp_fmat4x2) != 32;
+ Error += sizeof(glm::lowp_fmat4x3) != 48;
+ Error += sizeof(glm::lowp_fmat4x4) != 64;
+
+ Error += sizeof(glm::lowp_f32mat2) != 16;
+ Error += sizeof(glm::lowp_f32mat3) != 36;
+ Error += sizeof(glm::lowp_f32mat4) != 64;
+ Error += sizeof(glm::lowp_f32mat2x2) != 16;
+ Error += sizeof(glm::lowp_f32mat2x3) != 24;
+ Error += sizeof(glm::lowp_f32mat2x4) != 32;
+ Error += sizeof(glm::lowp_f32mat3x2) != 24;
+ Error += sizeof(glm::lowp_f32mat3x3) != 36;
+ Error += sizeof(glm::lowp_f32mat3x4) != 48;
+ Error += sizeof(glm::lowp_f32mat4x2) != 32;
+ Error += sizeof(glm::lowp_f32mat4x3) != 48;
+ Error += sizeof(glm::lowp_f32mat4x4) != 64;
+
+
+ Error += sizeof(glm::mediump_mat2) != 16;
+ Error += sizeof(glm::mediump_mat3) != 36;
+ Error += sizeof(glm::mediump_mat4) != 64;
+ Error += sizeof(glm::mediump_mat2x2) != 16;
+ Error += sizeof(glm::mediump_mat2x3) != 24;
+ Error += sizeof(glm::mediump_mat2x4) != 32;
+ Error += sizeof(glm::mediump_mat3x2) != 24;
+ Error += sizeof(glm::mediump_mat3x3) != 36;
+ Error += sizeof(glm::mediump_mat3x4) != 48;
+ Error += sizeof(glm::mediump_mat4x2) != 32;
+ Error += sizeof(glm::mediump_mat4x3) != 48;
+ Error += sizeof(glm::mediump_mat4x4) != 64;
+
+ Error += sizeof(glm::mediump_fmat2) != 16;
+ Error += sizeof(glm::mediump_fmat3) != 36;
+ Error += sizeof(glm::mediump_fmat4) != 64;
+ Error += sizeof(glm::mediump_fmat2x2) != 16;
+ Error += sizeof(glm::mediump_fmat2x3) != 24;
+ Error += sizeof(glm::mediump_fmat2x4) != 32;
+ Error += sizeof(glm::mediump_fmat3x2) != 24;
+ Error += sizeof(glm::mediump_fmat3x3) != 36;
+ Error += sizeof(glm::mediump_fmat3x4) != 48;
+ Error += sizeof(glm::mediump_fmat4x2) != 32;
+ Error += sizeof(glm::mediump_fmat4x3) != 48;
+ Error += sizeof(glm::mediump_fmat4x4) != 64;
+
+ Error += sizeof(glm::mediump_f32mat2) != 16;
+ Error += sizeof(glm::mediump_f32mat3) != 36;
+ Error += sizeof(glm::mediump_f32mat4) != 64;
+ Error += sizeof(glm::mediump_f32mat2x2) != 16;
+ Error += sizeof(glm::mediump_f32mat2x3) != 24;
+ Error += sizeof(glm::mediump_f32mat2x4) != 32;
+ Error += sizeof(glm::mediump_f32mat3x2) != 24;
+ Error += sizeof(glm::mediump_f32mat3x3) != 36;
+ Error += sizeof(glm::mediump_f32mat3x4) != 48;
+ Error += sizeof(glm::mediump_f32mat4x2) != 32;
+ Error += sizeof(glm::mediump_f32mat4x3) != 48;
+ Error += sizeof(glm::mediump_f32mat4x4) != 64;
+
+
+ Error += sizeof(glm::highp_mat2) != 16;
+ Error += sizeof(glm::highp_mat3) != 36;
+ Error += sizeof(glm::highp_mat4) != 64;
+ Error += sizeof(glm::highp_mat2x2) != 16;
+ Error += sizeof(glm::highp_mat2x3) != 24;
+ Error += sizeof(glm::highp_mat2x4) != 32;
+ Error += sizeof(glm::highp_mat3x2) != 24;
+ Error += sizeof(glm::highp_mat3x3) != 36;
+ Error += sizeof(glm::highp_mat3x4) != 48;
+ Error += sizeof(glm::highp_mat4x2) != 32;
+ Error += sizeof(glm::highp_mat4x3) != 48;
+ Error += sizeof(glm::highp_mat4x4) != 64;
+
+ Error += sizeof(glm::highp_fmat2) != 16;
+ Error += sizeof(glm::highp_fmat3) != 36;
+ Error += sizeof(glm::highp_fmat4) != 64;
+ Error += sizeof(glm::highp_fmat2x2) != 16;
+ Error += sizeof(glm::highp_fmat2x3) != 24;
+ Error += sizeof(glm::highp_fmat2x4) != 32;
+ Error += sizeof(glm::highp_fmat3x2) != 24;
+ Error += sizeof(glm::highp_fmat3x3) != 36;
+ Error += sizeof(glm::highp_fmat3x4) != 48;
+ Error += sizeof(glm::highp_fmat4x2) != 32;
+ Error += sizeof(glm::highp_fmat4x3) != 48;
+ Error += sizeof(glm::highp_fmat4x4) != 64;
+
+ Error += sizeof(glm::highp_f32mat2) != 16;
+ Error += sizeof(glm::highp_f32mat3) != 36;
+ Error += sizeof(glm::highp_f32mat4) != 64;
+ Error += sizeof(glm::highp_f32mat2x2) != 16;
+ Error += sizeof(glm::highp_f32mat2x3) != 24;
+ Error += sizeof(glm::highp_f32mat2x4) != 32;
+ Error += sizeof(glm::highp_f32mat3x2) != 24;
+ Error += sizeof(glm::highp_f32mat3x3) != 36;
+ Error += sizeof(glm::highp_f32mat3x4) != 48;
+ Error += sizeof(glm::highp_f32mat4x2) != 32;
+ Error += sizeof(glm::highp_f32mat4x3) != 48;
+ Error += sizeof(glm::highp_f32mat4x4) != 64;
+ return Error;
+}
+
+static int test_dmat_size()
+{
+ int Error(0);
+ Error += sizeof(glm::f64mat2) != 32;
+ Error += sizeof(glm::f64mat3) != 72;
+ Error += sizeof(glm::f64mat4) != 128;
+ Error += sizeof(glm::f64mat2x2) != 32;
+ Error += sizeof(glm::f64mat2x3) != 48;
+ Error += sizeof(glm::f64mat2x4) != 64;
+ Error += sizeof(glm::f64mat3x2) != 48;
+ Error += sizeof(glm::f64mat3x3) != 72;
+ Error += sizeof(glm::f64mat3x4) != 96;
+ Error += sizeof(glm::f64mat4x2) != 64;
+ Error += sizeof(glm::f64mat4x3) != 96;
+ Error += sizeof(glm::f64mat4x4) != 128;
+
+ Error += sizeof(glm::lowp_f64mat2) != 32;
+ Error += sizeof(glm::lowp_f64mat3) != 72;
+ Error += sizeof(glm::lowp_f64mat4) != 128;
+ Error += sizeof(glm::lowp_f64mat2x2) != 32;
+ Error += sizeof(glm::lowp_f64mat2x3) != 48;
+ Error += sizeof(glm::lowp_f64mat2x4) != 64;
+ Error += sizeof(glm::lowp_f64mat3x2) != 48;
+ Error += sizeof(glm::lowp_f64mat3x3) != 72;
+ Error += sizeof(glm::lowp_f64mat3x4) != 96;
+ Error += sizeof(glm::lowp_f64mat4x2) != 64;
+ Error += sizeof(glm::lowp_f64mat4x3) != 96;
+ Error += sizeof(glm::lowp_f64mat4x4) != 128;
+
+ Error += sizeof(glm::mediump_f64mat2) != 32;
+ Error += sizeof(glm::mediump_f64mat3) != 72;
+ Error += sizeof(glm::mediump_f64mat4) != 128;
+ Error += sizeof(glm::mediump_f64mat2x2) != 32;
+ Error += sizeof(glm::mediump_f64mat2x3) != 48;
+ Error += sizeof(glm::mediump_f64mat2x4) != 64;
+ Error += sizeof(glm::mediump_f64mat3x2) != 48;
+ Error += sizeof(glm::mediump_f64mat3x3) != 72;
+ Error += sizeof(glm::mediump_f64mat3x4) != 96;
+ Error += sizeof(glm::mediump_f64mat4x2) != 64;
+ Error += sizeof(glm::mediump_f64mat4x3) != 96;
+ Error += sizeof(glm::mediump_f64mat4x4) != 128;
+
+ Error += sizeof(glm::highp_f64mat2) != 32;
+ Error += sizeof(glm::highp_f64mat3) != 72;
+ Error += sizeof(glm::highp_f64mat4) != 128;
+ Error += sizeof(glm::highp_f64mat2x2) != 32;
+ Error += sizeof(glm::highp_f64mat2x3) != 48;
+ Error += sizeof(glm::highp_f64mat2x4) != 64;
+ Error += sizeof(glm::highp_f64mat3x2) != 48;
+ Error += sizeof(glm::highp_f64mat3x3) != 72;
+ Error += sizeof(glm::highp_f64mat3x4) != 96;
+ Error += sizeof(glm::highp_f64mat4x2) != 64;
+ Error += sizeof(glm::highp_f64mat4x3) != 96;
+ Error += sizeof(glm::highp_f64mat4x4) != 128;
+
+ return Error;
+}
+
+static int test_quat_size()
+{
+ int Error = 0;
+ Error += sizeof(glm::f32quat) != 16;
+ Error += sizeof(glm::f64quat) != 32;
+
+ Error += sizeof(glm::lowp_f32quat) != 16;
+ Error += sizeof(glm::lowp_f64quat) != 32;
+
+ Error += sizeof(glm::mediump_f32quat) != 16;
+ Error += sizeof(glm::mediump_f64quat) != 32;
+
+ Error += sizeof(glm::highp_f32quat) != 16;
+ Error += sizeof(glm::highp_f64quat) != 32;
+ return Error;
+}
+
+static int test_quat_precision()
+{
+ int Error(0);
+
+ {
+ glm::f32quat q1;
+ glm::lowp_f32quat qA(q1);
+ glm::mediump_f32quat qB(q1);
+ glm::highp_f32quat qC(q1);
+ glm::f32quat q2(qA);
+ glm::f32quat q3(qB);
+ glm::f32quat q4(qC);
+
+ Error += glm::all(glm::equal(q1, q2)) ? 0 : 1;
+ Error += glm::all(glm::equal(q1, q3)) ? 0 : 1;
+ Error += glm::all(glm::equal(q1, q4)) ? 0 : 1;
+ }
+
+ return Error;
+}
+
+static int test_fvec_conversion()
+{
+ int Error(0);
+
+ {
+ glm::highp_vec4 a = glm::vec4(1, 2, 3, 4);
+ glm::mediump_vec4 b = glm::vec4(1, 2, 3, 4);
+ glm::lowp_vec4 c = b;
+ glm::mediump_vec4 d = c;
+ glm::lowp_ivec4 e = glm::ivec4(d);
+ glm::lowp_ivec3 f = glm::ivec3(e);
+
+ Error += glm::all(glm::equal(b, d)) ? 0 : 1;
+ }
+
+ return Error;
+}
+
+static int test_openmp()
+{
+ std::vector<glm::u8vec3> VectorA(1000);
+ std::vector<glm::u8vec3> VectorB(1000);
+ std::vector<glm::u8vec3> VectorC(1000);
+
+ for (std::size_t i = 0; i < VectorA.size(); ++i)
+ {
+ VectorA[i] = glm::u8vec3(1, 1, 1);
+ VectorB[i] = glm::u8vec3(1, 1, 1);
+ }
+
+ #pragma omp parallel for default(none) shared(VectorA, VectorB, VectorC)
+ for (int i = 0; i < VectorC.size(); ++i)
+ {
+ VectorC[i] = VectorA[i] + VectorB[i];
+ }
+
+ return 0;
+}
+
+int main()
+{
+ int Error(0);
+ Error += test_openmp();
+ Error += test_scalar_size();
+ Error += test_fvec_size();
+ Error += test_fvec_precision();
+ Error += test_fvec_conversion();
+ Error += test_dvec_precision();
+ Error += test_ivec_size();
+ Error += test_ivec_precision();
+ Error += test_uvec_size();
+ Error += test_uvec_precision();
+ Error += test_fmat_size();
+ Error += test_dmat_size();
+ Error += test_quat_size();
+ Error += test_quat_precision();
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtc/gtc_type_ptr.cpp b/src/third_party/glm/test/gtc/gtc_type_ptr.cpp
new file mode 100644
index 0000000..bcdc2e2
--- /dev/null
+++ b/src/third_party/glm/test/gtc/gtc_type_ptr.cpp
@@ -0,0 +1,252 @@
+#include <glm/gtc/type_ptr.hpp>
+
+int test_value_ptr_vec()
+{
+ int Error = 0;
+
+ {
+ glm::vec2 v(1.0);
+ float * p = glm::value_ptr(v);
+ Error += p == &v[0] ? 0 : 1;
+ }
+ {
+ glm::vec3 v(1.0);
+ float * p = glm::value_ptr(v);
+ Error += p == &v[0] ? 0 : 1;
+ }
+ {
+ glm::vec4 v(1.0);
+ float * p = glm::value_ptr(v);
+ Error += p == &v[0] ? 0 : 1;
+ }
+
+ {
+ glm::dvec2 v(1.0);
+ double * p = glm::value_ptr(v);
+ Error += p == &v[0] ? 0 : 1;
+ }
+ {
+ glm::dvec3 v(1.0);
+ double * p = glm::value_ptr(v);
+ Error += p == &v[0] ? 0 : 1;
+ }
+ {
+ glm::dvec4 v(1.0);
+ double * p = glm::value_ptr(v);
+ Error += p == &v[0] ? 0 : 1;
+ }
+
+ return Error;
+}
+
+int test_value_ptr_vec_const()
+{
+ int Error = 0;
+
+ {
+ glm::vec2 const v(1.0);
+ float const * p = glm::value_ptr(v);
+ Error += p == &v[0] ? 0 : 1;
+ }
+ {
+ glm::vec3 const v(1.0);
+ float const * p = glm::value_ptr(v);
+ Error += p == &v[0] ? 0 : 1;
+ }
+ {
+ glm::vec4 const v(1.0);
+ float const * p = glm::value_ptr(v);
+ Error += p == &v[0] ? 0 : 1;
+ }
+
+ {
+ glm::dvec2 const v(1.0);
+ double const * p = glm::value_ptr(v);
+ Error += p == &v[0] ? 0 : 1;
+ }
+ {
+ glm::dvec3 const v(1.0);
+ double const * p = glm::value_ptr(v);
+ Error += p == &v[0] ? 0 : 1;
+ }
+ {
+ glm::dvec4 const v(1.0);
+ double const * p = glm::value_ptr(v);
+ Error += p == &v[0] ? 0 : 1;
+ }
+
+ return Error;
+}
+
+int test_value_ptr_mat()
+{
+ int Error = 0;
+
+ {
+ glm::mat2x2 m(1.0);
+ float * p = glm::value_ptr(m);
+ Error += p == &m[0][0] ? 0 : 1;
+ }
+ {
+ glm::mat2x3 m(1.0);
+ float * p = glm::value_ptr(m);
+ Error += p == &m[0][0] ? 0 : 1;
+ }
+ {
+ glm::mat2x4 m(1.0);
+ float * p = glm::value_ptr(m);
+ Error += p == &m[0][0] ? 0 : 1;
+ }
+ {
+ glm::mat3x2 m(1.0);
+ float * p = glm::value_ptr(m);
+ Error += p == &m[0][0] ? 0 : 1;
+ }
+ {
+ glm::mat3x3 m(1.0);
+ float * p = glm::value_ptr(m);
+ Error += p == &m[0][0] ? 0 : 1;
+ }
+ {
+ glm::mat3x4 m(1.0);
+ float * p = glm::value_ptr(m);
+ Error += p == &m[0][0] ? 0 : 1;
+ }
+ {
+ glm::mat4x2 m(1.0);
+ float * p = glm::value_ptr(m);
+ Error += p == &m[0][0] ? 0 : 1;
+ }
+ {
+ glm::mat4x3 m(1.0);
+ float * p = glm::value_ptr(m);
+ Error += p == &m[0][0] ? 0 : 1;
+ }
+ {
+ glm::mat4x4 m(1.0);
+ float * p = glm::value_ptr(m);
+ Error += p == &m[0][0] ? 0 : 1;
+ }
+
+ return Error;
+}
+
+int test_value_ptr_mat_const()
+{
+ int Error = 0;
+
+ {
+ glm::mat2x2 const m(1.0);
+ float const * p = glm::value_ptr(m);
+ Error += p == &m[0][0] ? 0 : 1;
+ }
+ {
+ glm::mat2x3 const m(1.0);
+ float const * p = glm::value_ptr(m);
+ Error += p == &m[0][0] ? 0 : 1;
+ }
+ {
+ glm::mat2x4 const m(1.0);
+ float const * p = glm::value_ptr(m);
+ Error += p == &m[0][0] ? 0 : 1;
+ }
+ {
+ glm::mat3x2 const m(1.0);
+ float const * p = glm::value_ptr(m);
+ Error += p == &m[0][0] ? 0 : 1;
+ }
+ {
+ glm::mat3x3 const m(1.0);
+ float const * p = glm::value_ptr(m);
+ Error += p == &m[0][0] ? 0 : 1;
+ }
+ {
+ glm::mat3x4 const m(1.0);
+ float const * p = glm::value_ptr(m);
+ Error += p == &m[0][0] ? 0 : 1;
+ }
+ {
+ glm::mat4x2 const m(1.0);
+ float const * p = glm::value_ptr(m);
+ Error += p == &m[0][0] ? 0 : 1;
+ }
+ {
+ glm::mat4x3 const m(1.0);
+ float const * p = glm::value_ptr(m);
+ Error += p == &m[0][0] ? 0 : 1;
+ }
+ {
+ glm::mat4x4 const m(1.0);
+ float const * p = glm::value_ptr(m);
+ Error += p == &m[0][0] ? 0 : 1;
+ }
+
+ return Error;
+}
+
+int test_make_pointer_mat()
+{
+ int Error = 0;
+
+ float ArrayA[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
+ double ArrayB[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
+
+ glm::mat2x2 Mat2x2A = glm::make_mat2x2(ArrayA);
+ glm::mat2x3 Mat2x3A = glm::make_mat2x3(ArrayA);
+ glm::mat2x4 Mat2x4A = glm::make_mat2x4(ArrayA);
+ glm::mat3x2 Mat3x2A = glm::make_mat3x2(ArrayA);
+ glm::mat3x3 Mat3x3A = glm::make_mat3x3(ArrayA);
+ glm::mat3x4 Mat3x4A = glm::make_mat3x4(ArrayA);
+ glm::mat4x2 Mat4x2A = glm::make_mat4x2(ArrayA);
+ glm::mat4x3 Mat4x3A = glm::make_mat4x3(ArrayA);
+ glm::mat4x4 Mat4x4A = glm::make_mat4x4(ArrayA);
+
+ glm::dmat2x2 Mat2x2B = glm::make_mat2x2(ArrayB);
+ glm::dmat2x3 Mat2x3B = glm::make_mat2x3(ArrayB);
+ glm::dmat2x4 Mat2x4B = glm::make_mat2x4(ArrayB);
+ glm::dmat3x2 Mat3x2B = glm::make_mat3x2(ArrayB);
+ glm::dmat3x3 Mat3x3B = glm::make_mat3x3(ArrayB);
+ glm::dmat3x4 Mat3x4B = glm::make_mat3x4(ArrayB);
+ glm::dmat4x2 Mat4x2B = glm::make_mat4x2(ArrayB);
+ glm::dmat4x3 Mat4x3B = glm::make_mat4x3(ArrayB);
+ glm::dmat4x4 Mat4x4B = glm::make_mat4x4(ArrayB);
+
+ return Error;
+}
+
+int test_make_pointer_vec()
+{
+ int Error = 0;
+
+ float ArrayA[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
+ int ArrayB[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
+ bool ArrayC[] = {true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false};
+
+ glm::vec2 Vec2A = glm::make_vec2(ArrayA);
+ glm::vec3 Vec3A = glm::make_vec3(ArrayA);
+ glm::vec4 Vec4A = glm::make_vec4(ArrayA);
+
+ glm::ivec2 Vec2B = glm::make_vec2(ArrayB);
+ glm::ivec3 Vec3B = glm::make_vec3(ArrayB);
+ glm::ivec4 Vec4B = glm::make_vec4(ArrayB);
+
+ glm::bvec2 Vec2C = glm::make_vec2(ArrayC);
+ glm::bvec3 Vec3C = glm::make_vec3(ArrayC);
+ glm::bvec4 Vec4C = glm::make_vec4(ArrayC);
+
+ return Error;
+}
+
+int main()
+{
+ int Error = 0;
+
+ Error += test_make_pointer_vec();
+ Error += test_make_pointer_mat();
+ Error += test_value_ptr_vec();
+ Error += test_value_ptr_vec_const();
+ Error += test_value_ptr_mat();
+ Error += test_value_ptr_mat_const();
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtc/gtc_ulp.cpp b/src/third_party/glm/test/gtc/gtc_ulp.cpp
new file mode 100644
index 0000000..77d347c
--- /dev/null
+++ b/src/third_party/glm/test/gtc/gtc_ulp.cpp
@@ -0,0 +1,96 @@
+#include <glm/gtc/ulp.hpp>
+#include <limits>
+
+int test_ulp_float_dist()
+{
+ int Error = 0;
+
+ float A = 1.0f;
+
+ float B = glm::next_float(A);
+ Error += A != B ? 0 : 1;
+ float C = glm::prev_float(B);
+ Error += A == C ? 0 : 1;
+
+ int D = glm::float_distance(A, B);
+ Error += D == 1 ? 0 : 1;
+ int E = glm::float_distance(A, C);
+ Error += E == 0 ? 0 : 1;
+
+ return Error;
+}
+
+int test_ulp_float_step()
+{
+ int Error = 0;
+
+ float A = 1.0f;
+
+ for(int i = 10; i < 1000; i *= 10)
+ {
+ float B = glm::next_float(A, i);
+ Error += A != B ? 0 : 1;
+ float C = glm::prev_float(B, i);
+ Error += A == C ? 0 : 1;
+
+ int D = glm::float_distance(A, B);
+ Error += D == i ? 0 : 1;
+ int E = glm::float_distance(A, C);
+ Error += E == 0 ? 0 : 1;
+ }
+
+ return Error;
+}
+
+int test_ulp_double_dist()
+{
+ int Error = 0;
+
+ double A = 1.0;
+
+ double B = glm::next_float(A);
+ Error += A != B ? 0 : 1;
+ double C = glm::prev_float(B);
+ Error += A == C ? 0 : 1;
+
+ int D = glm::float_distance(A, B);
+ Error += D == 1 ? 0 : 1;
+ int E = glm::float_distance(A, C);
+ Error += E == 0 ? 0 : 1;
+
+ return Error;
+}
+
+int test_ulp_double_step()
+{
+ int Error = 0;
+
+ double A = 1.0;
+
+ for(int i = 10; i < 1000; i *= 10)
+ {
+ double B = glm::next_float(A, i);
+ Error += A != B ? 0 : 1;
+ double C = glm::prev_float(B, i);
+ Error += A == C ? 0 : 1;
+
+ int D = glm::float_distance(A, B);
+ Error += D == i ? 0 : 1;
+ int E = glm::float_distance(A, C);
+ Error += E == 0 ? 0 : 1;
+ }
+
+ return Error;
+}
+
+int main()
+{
+ int Error = 0;
+ Error += test_ulp_float_dist();
+ Error += test_ulp_float_step();
+ Error += test_ulp_double_dist();
+ Error += test_ulp_double_step();
+ return Error;
+}
+
+
diff --git a/src/third_party/glm/test/gtc/gtc_user_defined_types.cpp b/src/third_party/glm/test/gtc/gtc_user_defined_types.cpp
new file mode 100644
index 0000000..af39620
--- /dev/null
+++ b/src/third_party/glm/test/gtc/gtc_user_defined_types.cpp
@@ -0,0 +1,30 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2010-09-16
+// Updated : 2011-05-27
+// Licence : This source is under MIT licence
+// File : test/gtc/type_ptr.cpp
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+#define GLM_FORCE_RADIANS
+#include <glm/gtc/user_defined_type.hpp>
+
+int test_make_pointer_vec()
+{
+ int Error = 0;
+
+ glm::func();
+ //func();
+
+ return Error;
+}
+
+int main()
+{
+ int Error = 0;
+
+ Error += test_make_pointer_vec();
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtc/gtc_vec1.cpp b/src/third_party/glm/test/gtc/gtc_vec1.cpp
new file mode 100644
index 0000000..268d95e
--- /dev/null
+++ b/src/third_party/glm/test/gtc/gtc_vec1.cpp
@@ -0,0 +1,8 @@
+#include <glm/gtc/vec1.hpp>
+
+int main()
+{
+ int Error = 0;
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtx/CMakeLists.txt b/src/third_party/glm/test/gtx/CMakeLists.txt
new file mode 100644
index 0000000..5ad06cd
--- /dev/null
+++ b/src/third_party/glm/test/gtx/CMakeLists.txt
@@ -0,0 +1,49 @@
+glmCreateTestGTC(gtx_associated_min_max)
+glmCreateTestGTC(gtx_closest_point)
+glmCreateTestGTC(gtx_color_space_YCoCg)
+glmCreateTestGTC(gtx_color_space)
+glmCreateTestGTC(gtx_common)
+glmCreateTestGTC(gtx_compatibility)
+glmCreateTestGTC(gtx_component_wise)
+glmCreateTestGTC(gtx_euler_angle)
+glmCreateTestGTC(gtx_extend)
+glmCreateTestGTC(gtx_extended_min_max)
+glmCreateTestGTC(gtx_fast_exponential)
+glmCreateTestGTC(gtx_fast_square_root)
+glmCreateTestGTC(gtx_fast_trigonometry)
+glmCreateTestGTC(gtx_gradient_paint)
+glmCreateTestGTC(gtx_handed_coordinate_space)
+glmCreateTestGTC(gtx_integer)
+glmCreateTestGTC(gtx_intersect)
+glmCreateTestGTC(gtx_io)
+glmCreateTestGTC(gtx_log_base)
+glmCreateTestGTC(gtx_matrix_cross_product)
+glmCreateTestGTC(gtx_matrix_decompose)
+glmCreateTestGTC(gtx_matrix_interpolation)
+glmCreateTestGTC(gtx_matrix_major_storage)
+glmCreateTestGTC(gtx_matrix_operation)
+glmCreateTestGTC(gtx_matrix_query)
+glmCreateTestGTC(gtx_matrix_transform_2d)
+glmCreateTestGTC(gtx_norm)
+glmCreateTestGTC(gtx_normal)
+glmCreateTestGTC(gtx_normalize_dot)
+glmCreateTestGTC(gtx_number_precision)
+glmCreateTestGTC(gtx_orthonormalize)
+glmCreateTestGTC(gtx_optimum_pow)
+glmCreateTestGTC(gtx_perpendicular)
+glmCreateTestGTC(gtx_polar_coordinates)
+glmCreateTestGTC(gtx_projection)
+glmCreateTestGTC(gtx_quaternion)
+glmCreateTestGTC(gtx_dual_quaternion)
+glmCreateTestGTC(gtx_range)
+glmCreateTestGTC(gtx_rotate_normalized_axis)
+glmCreateTestGTC(gtx_rotate_vector)
+glmCreateTestGTC(gtx_scalar_multiplication)
+glmCreateTestGTC(gtx_scalar_relational)
+glmCreateTestGTC(gtx_spline)
+glmCreateTestGTC(gtx_string_cast)
+glmCreateTestGTC(gtx_type_aligned)
+glmCreateTestGTC(gtx_type_trait)
+glmCreateTestGTC(gtx_vector_angle)
+glmCreateTestGTC(gtx_vector_query)
+glmCreateTestGTC(gtx_wrap)
diff --git a/src/third_party/glm/test/gtx/gtx_associated_min_max.cpp b/src/third_party/glm/test/gtx/gtx_associated_min_max.cpp
new file mode 100644
index 0000000..b025ee2
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_associated_min_max.cpp
@@ -0,0 +1,9 @@
+#include <glm/gtc/type_precision.hpp>
+#include <glm/gtx/associated_min_max.hpp>
+
+int main()
+{
+ int Error(0);
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtx/gtx_closest_point.cpp b/src/third_party/glm/test/gtx/gtx_closest_point.cpp
new file mode 100644
index 0000000..88cf4db
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_closest_point.cpp
@@ -0,0 +1,8 @@
+#include <glm/gtx/closest_point.hpp>
+
+int main()
+{
+ int Error(0);
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtx/gtx_color_space.cpp b/src/third_party/glm/test/gtx/gtx_color_space.cpp
new file mode 100644
index 0000000..19ac276
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_color_space.cpp
@@ -0,0 +1,19 @@
+#include <glm/gtx/color_space.hpp>
+
+int test_saturation()
+{
+ int Error(0);
+
+ glm::vec4 Color = glm::saturation(1.0f, glm::vec4(1.0, 0.5, 0.0, 1.0));
+
+ return Error;
+}
+
+int main()
+{
+ int Error(0);
+
+ Error += test_saturation();
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtx/gtx_color_space_YCoCg.cpp b/src/third_party/glm/test/gtx/gtx_color_space_YCoCg.cpp
new file mode 100644
index 0000000..e42e328
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_color_space_YCoCg.cpp
@@ -0,0 +1,8 @@
+#include <glm/gtx/color_space_YCoCg.hpp>
+
+int main()
+{
+ int Error(0);
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtx/gtx_common.cpp b/src/third_party/glm/test/gtx/gtx_common.cpp
new file mode 100644
index 0000000..2796695
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_common.cpp
@@ -0,0 +1,127 @@
+#include <glm/gtx/common.hpp>
+#include <glm/gtc/integer.hpp>
+#include <glm/gtc/epsilon.hpp>
+#include <glm/vector_relational.hpp>
+#include <glm/common.hpp>
+
+namespace fmod_
+{
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType modTrunc(genType a, genType b)
+ {
+ return a - b * glm::trunc(a / b);
+ }
+
+ int test()
+ {
+ int Error(0);
+
+ {
+ float A0(3.0);
+ float B0(2.0f);
+ float C0 = glm::fmod(A0, B0);
+
+ Error += glm::abs(C0 - 1.0f) < 0.00001f ? 0 : 1;
+
+ glm::vec4 A1(3.0);
+ float B1(2.0f);
+ glm::vec4 C1 = glm::fmod(A1, B1);
+
+ Error += glm::all(glm::epsilonEqual(C1, glm::vec4(1.0f), 0.00001f)) ? 0 : 1;
+
+ glm::vec4 A2(3.0);
+ glm::vec4 B2(2.0f);
+ glm::vec4 C2 = glm::fmod(A2, B2);
+
+ Error += glm::all(glm::epsilonEqual(C2, glm::vec4(1.0f), 0.00001f)) ? 0 : 1;
+
+ glm::ivec4 A3(3);
+ int B3(2);
+ glm::ivec4 C3 = glm::fmod(A3, B3);
+
+ Error += glm::all(glm::equal(C3, glm::ivec4(1))) ? 0 : 1;
+
+ glm::ivec4 A4(3);
+ glm::ivec4 B4(2);
+ glm::ivec4 C4 = glm::fmod(A4, B4);
+
+ Error += glm::all(glm::equal(C4, glm::ivec4(1))) ? 0 : 1;
+ }
+
+ {
+ float A0(22.0);
+ float B0(-10.0f);
+ float C0 = glm::fmod(A0, B0);
+
+ Error += glm::abs(C0 - 2.0f) < 0.00001f ? 0 : 1;
+
+ glm::vec4 A1(22.0);
+ float B1(-10.0f);
+ glm::vec4 C1 = glm::fmod(A1, B1);
+
+ Error += glm::all(glm::epsilonEqual(C1, glm::vec4(2.0f), 0.00001f)) ? 0 : 1;
+
+ glm::vec4 A2(22.0);
+ glm::vec4 B2(-10.0f);
+ glm::vec4 C2 = glm::fmod(A2, B2);
+
+ Error += glm::all(glm::epsilonEqual(C2, glm::vec4(2.0f), 0.00001f)) ? 0 : 1;
+
+ glm::ivec4 A3(22);
+ int B3(-10);
+ glm::ivec4 C3 = glm::fmod(A3, B3);
+
+ Error += glm::all(glm::equal(C3, glm::ivec4(2))) ? 0 : 1;
+
+ glm::ivec4 A4(22);
+ glm::ivec4 B4(-10);
+ glm::ivec4 C4 = glm::fmod(A4, B4);
+
+ Error += glm::all(glm::equal(C4, glm::ivec4(2))) ? 0 : 1;
+ }
+
+ // http://stackoverflow.com/questions/7610631/glsl-mod-vs-hlsl-fmod
+ {
+ for (float y = -10.0f; y < 10.0f; y += 0.1f)
+ for (float x = -10.0f; x < 10.0f; x += 0.1f)
+ {
+ float const A(std::fmod(x, y));
+ //float const B(std::remainder(x, y));
+ float const C(glm::fmod(x, y));
+ float const D(modTrunc(x, y));
+
+ //Error += glm::epsilonEqual(A, B, 0.0001f) ? 0 : 1;
+ //assert(!Error);
+ Error += glm::epsilonEqual(A, C, 0.0001f) ? 0 : 1;
+ assert(!Error);
+ Error += glm::epsilonEqual(A, D, 0.00001f) ? 0 : 1;
+ assert(!Error);
+ }
+ }
+
+ return Error;
+ }
+}//namespace fmod_
+
+int test_isdenormal()
+{
+ int Error(0);
+
+ bool A = glm::isdenormal(1.0f);
+ glm::bvec1 B = glm::isdenormal(glm::vec1(1.0f));
+ glm::bvec2 C = glm::isdenormal(glm::vec2(1.0f));
+ glm::bvec3 D = glm::isdenormal(glm::vec3(1.0f));
+ glm::bvec4 E = glm::isdenormal(glm::vec4(1.0f));
+
+ return Error;
+}
+
+int main()
+{
+ int Error = 0;
+
+ Error += test_isdenormal();
+ Error += ::fmod_::test();
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtx/gtx_compatibility.cpp b/src/third_party/glm/test/gtx/gtx_compatibility.cpp
new file mode 100644
index 0000000..b3ec178
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_compatibility.cpp
@@ -0,0 +1,18 @@
+#include <glm/gtx/compatibility.hpp>
+
+int main()
+{
+ int Error(0);
+
+ Error += glm::isfinite(1.0f) ? 0 : 1;
+ Error += glm::isfinite(1.0) ? 0 : 1;
+ Error += glm::isfinite(-1.0f) ? 0 : 1;
+ Error += glm::isfinite(-1.0) ? 0 : 1;
+
+ Error += glm::all(glm::isfinite(glm::vec4(1.0f))) ? 0 : 1;
+ Error += glm::all(glm::isfinite(glm::dvec4(1.0))) ? 0 : 1;
+ Error += glm::all(glm::isfinite(glm::vec4(-1.0f))) ? 0 : 1;
+ Error += glm::all(glm::isfinite(glm::dvec4(-1.0))) ? 0 : 1;
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtx/gtx_component_wise.cpp b/src/third_party/glm/test/gtx/gtx_component_wise.cpp
new file mode 100644
index 0000000..1ccc234
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_component_wise.cpp
@@ -0,0 +1,115 @@
+#include <glm/gtx/component_wise.hpp>
+#include <glm/gtc/type_precision.hpp>
+#include <glm/gtc/epsilon.hpp>
+#include <glm/gtc/constants.hpp>
+#include <limits>
+
+namespace compNormalize
+{
+ int run()
+ {
+ int Error(0);
+
+ {
+ glm::vec4 const A = glm::compNormalize<float>(glm::u8vec4(0, 127, 128, 255));
+
+ Error += glm::epsilonEqual(A.x, 0.0f, glm::epsilon<float>()) ? 0 : 1;
+ Error += A.y < 0.5f ? 0 : 1;
+ Error += A.z > 0.5f ? 0 : 1;
+ Error += glm::epsilonEqual(A.w, 1.0f, glm::epsilon<float>()) ? 0 : 1;
+ }
+
+ {
+ glm::vec4 const A = glm::compNormalize<float>(glm::i8vec4(-128, -1, 0, 127));
+
+ Error += glm::epsilonEqual(A.x,-1.0f, glm::epsilon<float>()) ? 0 : 1;
+ Error += A.y < 0.0f ? 0 : 1;
+ Error += A.z > 0.0f ? 0 : 1;
+ Error += glm::epsilonEqual(A.w, 1.0f, glm::epsilon<float>()) ? 0 : 1;
+ }
+
+ {
+ glm::vec4 const A = glm::compNormalize<float>(glm::u16vec4(
+ std::numeric_limits<glm::u16>::min(),
+ (std::numeric_limits<glm::u16>::max() >> 1) + 0,
+ (std::numeric_limits<glm::u16>::max() >> 1) + 1,
+ std::numeric_limits<glm::u16>::max()));
+
+ Error += glm::epsilonEqual(A.x, 0.0f, glm::epsilon<float>()) ? 0 : 1;
+ Error += A.y < 0.5f ? 0 : 1;
+ Error += A.z > 0.5f ? 0 : 1;
+ Error += glm::epsilonEqual(A.w, 1.0f, glm::epsilon<float>()) ? 0 : 1;
+ }
+
+ {
+ glm::vec4 const A = glm::compNormalize<float>(glm::i16vec4(
+ std::numeric_limits<glm::i16>::min(),
+ static_cast<glm::i16>(-1),
+ static_cast<glm::i16>(0),
+ std::numeric_limits<glm::i16>::max()));
+
+ Error += glm::epsilonEqual(A.x,-1.0f, glm::epsilon<float>()) ? 0 : 1;
+ Error += A.y < 0.0f ? 0 : 1;
+ Error += A.z > 0.0f ? 0 : 1;
+ Error += glm::epsilonEqual(A.w, 1.0f, glm::epsilon<float>()) ? 0 : 1;
+ }
+
+ return Error;
+ }
+}//namespace compNormalize
+
+namespace compScale
+{
+ int run()
+ {
+ int Error(0);
+
+ {
+ glm::u8vec4 const A = glm::compScale<glm::u8>(glm::vec4(0.0f, 0.2f, 0.5f, 1.0f));
+
+ Error += A.x == std::numeric_limits<glm::u8>::min() ? 0 : 1;
+ Error += A.y < (std::numeric_limits<glm::u8>::max() >> 2) ? 0 : 1;
+ Error += A.z == 127 ? 0 : 1;
+ Error += A.w == 255 ? 0 : 1;
+ }
+
+ {
+ glm::i8vec4 const A = glm::compScale<glm::i8>(glm::vec4(0.0f,-1.0f, 0.5f, 1.0f));
+
+ Error += A.x == 0 ? 0 : 1;
+ Error += A.y == -128 ? 0 : 1;
+ Error += A.z == 63 ? 0 : 1;
+ Error += A.w == 127 ? 0 : 1;
+ }
+
+ {
+ glm::u16vec4 const A = glm::compScale<glm::u16>(glm::vec4(0.0f, 0.2f, 0.5f, 1.0f));
+
+ Error += A.x == std::numeric_limits<glm::u16>::min() ? 0 : 1;
+ Error += A.y < (std::numeric_limits<glm::u16>::max() >> 2) ? 0 : 1;
+ Error += A.z == 32767 ? 0 : 1;
+ Error += A.w == 65535 ? 0 : 1;
+ }
+
+ {
+ glm::i16vec4 const A = glm::compScale<glm::i16>(glm::vec4(0.0f,-1.0f, 0.5f, 1.0f));
+
+ Error += A.x == 0 ? 0 : 1;
+ Error += A.y == -32768 ? 0 : 1;
+ Error += A.z == 16383 ? 0 : 1;
+ Error += A.w == 32767 ? 0 : 1;
+ }
+
+ return Error;
+ }
+}// compScale
+
+int main()
+{
+ int Error(0);
+
+ Error += compNormalize::run();
+ Error += compScale::run();
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtx/gtx_dual_quaternion.cpp b/src/third_party/glm/test/gtx/gtx_dual_quaternion.cpp
new file mode 100644
index 0000000..b06bba3
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_dual_quaternion.cpp
@@ -0,0 +1,188 @@
+#include <glm/gtx/dual_quaternion.hpp>
+#include <glm/gtc/matrix_transform.hpp>
+#include <glm/gtc/epsilon.hpp>
+#include <glm/gtx/euler_angles.hpp>
+#include <glm/vector_relational.hpp>
+#if GLM_HAS_TRIVIAL_QUERIES
+# include <type_traits>
+#endif
+
+int myrand()
+{
+ static int holdrand = 1;
+ return (((holdrand = holdrand * 214013L + 2531011L) >> 16) & 0x7fff);
+}
+
+float myfrand() // returns values from -1 to 1 inclusive
+{
+ return float(double(myrand()) / double( 0x7ffff )) * 2.0f - 1.0f;
+}
+
+int test_dquat_type()
+{
+ glm::dvec3 vA;
+ glm::dquat dqA,dqB;
+ glm::ddualquat C(dqA,dqB);
+ glm::ddualquat B(dqA);
+ glm::ddualquat D(dqA,vA);
+ return 0;
+}
+
+int test_scalars()
+{
+ float const Epsilon = 0.0001f;
+
+ int Error(0);
+
+ glm::quat src_q1 = glm::quat(1.0f,2.0f,3.0f,4.0f);
+ glm::quat src_q2 = glm::quat(5.0f,6.0f,7.0f,8.0f);
+ glm::dualquat src1(src_q1,src_q2);
+
+ {
+ glm::dualquat dst1 = src1 * 2.0f;
+ glm::dualquat dst2 = 2.0f * src1;
+ glm::dualquat dst3 = src1;
+ dst3 *= 2.0f;
+ glm::dualquat dstCmp(src_q1 * 2.0f,src_q2 * 2.0f);
+ Error += glm::all(glm::epsilonEqual(dst1.real,dstCmp.real, Epsilon)) && glm::all(glm::epsilonEqual(dst1.dual,dstCmp.dual, Epsilon)) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(dst2.real,dstCmp.real, Epsilon)) && glm::all(glm::epsilonEqual(dst2.dual,dstCmp.dual, Epsilon)) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(dst3.real,dstCmp.real, Epsilon)) && glm::all(glm::epsilonEqual(dst3.dual,dstCmp.dual, Epsilon)) ? 0 : 1;
+ }
+
+ {
+ glm::dualquat dst1 = src1 / 2.0f;
+ glm::dualquat dst2 = src1;
+ dst2 /= 2.0f;
+ glm::dualquat dstCmp(src_q1 / 2.0f,src_q2 / 2.0f);
+ Error += glm::all(glm::epsilonEqual(dst1.real,dstCmp.real, Epsilon)) && glm::all(glm::epsilonEqual(dst1.dual,dstCmp.dual, Epsilon)) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(dst2.real,dstCmp.real, Epsilon)) && glm::all(glm::epsilonEqual(dst2.dual,dstCmp.dual, Epsilon)) ? 0 : 1;
+ }
+ return Error;
+}
+
+int test_inverse()
+{
+ int Error(0);
+
+ float const Epsilon = 0.0001f;
+
+ glm::dualquat dqid;
+ glm::mat4x4 mid(1.0f);
+
+ for (int j = 0; j < 100; ++j)
+ {
+ glm::mat4x4 rot = glm::yawPitchRoll(myfrand() * 360.0f, myfrand() * 360.0f, myfrand() * 360.0f);
+ glm::vec3 vt = glm::vec3(myfrand() * 10.0f, myfrand() * 10.0f, myfrand() * 10.0f);
+
+ glm::mat4x4 m = glm::translate(mid, vt) * rot;
+
+ glm::quat qr = glm::quat_cast(m);
+
+ glm::dualquat dq(qr);
+
+ glm::dualquat invdq = glm::inverse(dq);
+
+ glm::dualquat r1 = invdq * dq;
+ glm::dualquat r2 = dq * invdq;
+
+ Error += glm::all(glm::epsilonEqual(r1.real, dqid.real, Epsilon)) && glm::all(glm::epsilonEqual(r1.dual, dqid.dual, Epsilon)) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(r2.real, dqid.real, Epsilon)) && glm::all(glm::epsilonEqual(r2.dual, dqid.dual, Epsilon)) ? 0 : 1;
+
+ // testing commutative property
+ glm::dualquat r ( glm::quat( myfrand() * glm::pi<float>() * 2.0f, myfrand(), myfrand(), myfrand() ),
+ glm::vec3(myfrand() * 10.0f, myfrand() * 10.0f, myfrand() * 10.0f) );
+ glm::dualquat riq = (r * invdq) * dq;
+ glm::dualquat rqi = (r * dq) * invdq;
+
+ Error += glm::all(glm::epsilonEqual(riq.real, rqi.real, Epsilon)) && glm::all(glm::epsilonEqual(riq.dual, rqi.dual, Epsilon)) ? 0 : 1;
+ }
+
+ return Error;
+}
+
+int test_mul()
+{
+ int Error(0);
+
+ float const Epsilon = 0.0001f;
+
+ glm::mat4x4 mid(1.0f);
+
+ for (int j = 0; j < 100; ++j)
+ {
+ // generate random rotations and translations and compare transformed by matrix and dualquats random points
+ glm::vec3 vt1 = glm::vec3(myfrand() * 10.0f, myfrand() * 10.0f, myfrand() * 10.0f);
+ glm::vec3 vt2 = glm::vec3(myfrand() * 10.0f, myfrand() * 10.0f, myfrand() * 10.0f);
+
+ glm::mat4x4 rot1 = glm::yawPitchRoll(myfrand() * 360.0f, myfrand() * 360.0f, myfrand() * 360.0f);
+ glm::mat4x4 rot2 = glm::yawPitchRoll(myfrand() * 360.0f, myfrand() * 360.0f, myfrand() * 360.0f);
+ glm::mat4x4 m1 = glm::translate(mid, vt1) * rot1;
+ glm::mat4x4 m2 = glm::translate(mid, vt2) * rot2;
+ glm::mat4x4 m3 = m2 * m1;
+ glm::mat4x4 m4 = m1 * m2;
+
+ glm::quat qrot1 = glm::quat_cast(rot1);
+ glm::quat qrot2 = glm::quat_cast(rot2);
+
+ glm::dualquat dq1 = glm::dualquat(qrot1,vt1);
+ glm::dualquat dq2 = glm::dualquat(qrot2,vt2);
+ glm::dualquat dq3 = dq2 * dq1;
+ glm::dualquat dq4 = dq1 * dq2;
+
+ for (int i = 0; i < 100; ++i)
+ {
+ glm::vec4 src_pt = glm::vec4(myfrand() * 4.0f, myfrand() * 5.0f, myfrand() * 3.0f,1.0f);
+ // test both multiplication orders
+ glm::vec4 dst_pt_m3 = m3 * src_pt;
+ glm::vec4 dst_pt_dq3 = dq3 * src_pt;
+
+ glm::vec4 dst_pt_m3_i = glm::inverse(m3) * src_pt;
+ glm::vec4 dst_pt_dq3_i = src_pt * dq3;
+
+ glm::vec4 dst_pt_m4 = m4 * src_pt;
+ glm::vec4 dst_pt_dq4 = dq4 * src_pt;
+
+ glm::vec4 dst_pt_m4_i = glm::inverse(m4) * src_pt;
+ glm::vec4 dst_pt_dq4_i = src_pt * dq4;
+
+ Error += glm::all(glm::epsilonEqual(dst_pt_m3, dst_pt_dq3, Epsilon)) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(dst_pt_m4, dst_pt_dq4, Epsilon)) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(dst_pt_m3_i, dst_pt_dq3_i, Epsilon)) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(dst_pt_m4_i, dst_pt_dq4_i, Epsilon)) ? 0 : 1;
+ }
+ }
+
+ return Error;
+}
+
+int test_dual_quat_ctr()
+{
+ int Error(0);
+
+# if GLM_HAS_TRIVIAL_QUERIES
+ // Error += std::is_trivially_default_constructible<glm::dualquat>::value ? 0 : 1;
+ // Error += std::is_trivially_default_constructible<glm::ddualquat>::value ? 0 : 1;
+ // Error += std::is_trivially_copy_assignable<glm::dualquat>::value ? 0 : 1;
+ // Error += std::is_trivially_copy_assignable<glm::ddualquat>::value ? 0 : 1;
+ Error += std::is_trivially_copyable<glm::dualquat>::value ? 0 : 1;
+ Error += std::is_trivially_copyable<glm::ddualquat>::value ? 0 : 1;
+
+ Error += std::is_copy_constructible<glm::dualquat>::value ? 0 : 1;
+ Error += std::is_copy_constructible<glm::ddualquat>::value ? 0 : 1;
+# endif
+
+ return Error;
+}
+
+int main()
+{
+ int Error(0);
+
+ Error += test_dual_quat_ctr();
+ Error += test_dquat_type();
+ Error += test_scalars();
+ Error += test_inverse();
+ Error += test_mul();
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtx/gtx_euler_angle.cpp b/src/third_party/glm/test/gtx/gtx_euler_angle.cpp
new file mode 100644
index 0000000..d56e419
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_euler_angle.cpp
@@ -0,0 +1,328 @@
+// Code sample from Filippo Ramaciotti
+
+#include <glm/gtc/matrix_transform.hpp>
+#include <glm/gtc/epsilon.hpp>
+#include <glm/gtx/string_cast.hpp>
+#include <glm/gtx/euler_angles.hpp>
+#include <cstdio>
+
+namespace test_eulerAngleX
+{
+ int test()
+ {
+ int Error = 0;
+
+ float const Angle(glm::pi<float>() * 0.5f);
+ glm::vec3 const X(1.0f, 0.0f, 0.0f);
+
+ glm::vec4 const Y(0.0f, 1.0f, 0.0f, 1.0f);
+ glm::vec4 const Y1 = glm::rotate(glm::mat4(1.0f), Angle, X) * Y;
+ glm::vec4 const Y2 = glm::eulerAngleX(Angle) * Y;
+ glm::vec4 const Y3 = glm::eulerAngleXY(Angle, 0.0f) * Y;
+ glm::vec4 const Y4 = glm::eulerAngleYX(0.0f, Angle) * Y;
+ glm::vec4 const Y5 = glm::eulerAngleXZ(Angle, 0.0f) * Y;
+ glm::vec4 const Y6 = glm::eulerAngleZX(0.0f, Angle) * Y;
+ glm::vec4 const Y7 = glm::eulerAngleYXZ(0.0f, Angle, 0.0f) * Y;
+ Error += glm::all(glm::epsilonEqual(Y1, Y2, 0.00001f)) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(Y1, Y3, 0.00001f)) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(Y1, Y4, 0.00001f)) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(Y1, Y5, 0.00001f)) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(Y1, Y6, 0.00001f)) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(Y1, Y7, 0.00001f)) ? 0 : 1;
+
+ glm::vec4 const Z(0.0f, 0.0f, 1.0f, 1.0f);
+ glm::vec4 const Z1 = glm::rotate(glm::mat4(1.0f), Angle, X) * Z;
+ glm::vec4 const Z2 = glm::eulerAngleX(Angle) * Z;
+ glm::vec4 const Z3 = glm::eulerAngleXY(Angle, 0.0f) * Z;
+ glm::vec4 const Z4 = glm::eulerAngleYX(0.0f, Angle) * Z;
+ glm::vec4 const Z5 = glm::eulerAngleXZ(Angle, 0.0f) * Z;
+ glm::vec4 const Z6 = glm::eulerAngleZX(0.0f, Angle) * Z;
+ glm::vec4 const Z7 = glm::eulerAngleYXZ(0.0f, Angle, 0.0f) * Z;
+ Error += glm::all(glm::epsilonEqual(Z1, Z2, 0.00001f)) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(Z1, Z3, 0.00001f)) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(Z1, Z4, 0.00001f)) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(Z1, Z5, 0.00001f)) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(Z1, Z6, 0.00001f)) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(Z1, Z7, 0.00001f)) ? 0 : 1;
+
+ return Error;
+ }
+}//namespace test_eulerAngleX
+
+namespace test_eulerAngleY
+{
+ int test()
+ {
+ int Error = 0;
+
+ float const Angle(glm::pi<float>() * 0.5f);
+ glm::vec3 const Y(0.0f, 1.0f, 0.0f);
+
+ glm::vec4 const X(1.0f, 0.0f, 0.0f, 1.0f);
+ glm::vec4 const X1 = glm::rotate(glm::mat4(1.0f), Angle, Y) * X;
+ glm::vec4 const X2 = glm::eulerAngleY(Angle) * X;
+ glm::vec4 const X3 = glm::eulerAngleYX(Angle, 0.0f) * X;
+ glm::vec4 const X4 = glm::eulerAngleXY(0.0f, Angle) * X;
+ glm::vec4 const X5 = glm::eulerAngleYZ(Angle, 0.0f) * X;
+ glm::vec4 const X6 = glm::eulerAngleZY(0.0f, Angle) * X;
+ glm::vec4 const X7 = glm::eulerAngleYXZ(Angle, 0.0f, 0.0f) * X;
+ Error += glm::all(glm::epsilonEqual(X1, X2, 0.00001f)) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(X1, X3, 0.00001f)) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(X1, X4, 0.00001f)) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(X1, X5, 0.00001f)) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(X1, X6, 0.00001f)) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(X1, X7, 0.00001f)) ? 0 : 1;
+
+ glm::vec4 const Z(0.0f, 0.0f, 1.0f, 1.0f);
+ glm::vec4 const Z1 = glm::eulerAngleY(Angle) * Z;
+ glm::vec4 const Z2 = glm::rotate(glm::mat4(1.0f), Angle, Y) * Z;
+ glm::vec4 const Z3 = glm::eulerAngleYX(Angle, 0.0f) * Z;
+ glm::vec4 const Z4 = glm::eulerAngleXY(0.0f, Angle) * Z;
+ glm::vec4 const Z5 = glm::eulerAngleYZ(Angle, 0.0f) * Z;
+ glm::vec4 const Z6 = glm::eulerAngleZY(0.0f, Angle) * Z;
+ glm::vec4 const Z7 = glm::eulerAngleYXZ(Angle, 0.0f, 0.0f) * Z;
+ Error += glm::all(glm::epsilonEqual(Z1, Z2, 0.00001f)) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(Z1, Z3, 0.00001f)) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(Z1, Z4, 0.00001f)) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(Z1, Z5, 0.00001f)) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(Z1, Z6, 0.00001f)) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(Z1, Z7, 0.00001f)) ? 0 : 1;
+
+ return Error;
+ }
+}//namespace test_eulerAngleY
+
+namespace test_eulerAngleZ
+{
+ int test()
+ {
+ int Error = 0;
+
+ float const Angle(glm::pi<float>() * 0.5f);
+ glm::vec3 const Z(0.0f, 0.0f, 1.0f);
+
+ glm::vec4 const X(1.0f, 0.0f, 0.0f, 1.0f);
+ glm::vec4 const X1 = glm::rotate(glm::mat4(1.0f), Angle, Z) * X;
+ glm::vec4 const X2 = glm::eulerAngleZ(Angle) * X;
+ glm::vec4 const X3 = glm::eulerAngleZX(Angle, 0.0f) * X;
+ glm::vec4 const X4 = glm::eulerAngleXZ(0.0f, Angle) * X;
+ glm::vec4 const X5 = glm::eulerAngleZY(Angle, 0.0f) * X;
+ glm::vec4 const X6 = glm::eulerAngleYZ(0.0f, Angle) * X;
+ glm::vec4 const X7 = glm::eulerAngleYXZ(0.0f, 0.0f, Angle) * X;
+ Error += glm::all(glm::epsilonEqual(X1, X2, 0.00001f)) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(X1, X3, 0.00001f)) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(X1, X4, 0.00001f)) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(X1, X5, 0.00001f)) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(X1, X6, 0.00001f)) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(X1, X7, 0.00001f)) ? 0 : 1;
+
+ glm::vec4 const Y(1.0f, 0.0f, 0.0f, 1.0f);
+ glm::vec4 const Z1 = glm::rotate(glm::mat4(1.0f), Angle, Z) * Y;
+ glm::vec4 const Z2 = glm::eulerAngleZ(Angle) * Y;
+ glm::vec4 const Z3 = glm::eulerAngleZX(Angle, 0.0f) * Y;
+ glm::vec4 const Z4 = glm::eulerAngleXZ(0.0f, Angle) * Y;
+ glm::vec4 const Z5 = glm::eulerAngleZY(Angle, 0.0f) * Y;
+ glm::vec4 const Z6 = glm::eulerAngleYZ(0.0f, Angle) * Y;
+ glm::vec4 const Z7 = glm::eulerAngleYXZ(0.0f, 0.0f, Angle) * Y;
+ Error += glm::all(glm::epsilonEqual(Z1, Z2, 0.00001f)) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(Z1, Z3, 0.00001f)) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(Z1, Z4, 0.00001f)) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(Z1, Z5, 0.00001f)) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(Z1, Z6, 0.00001f)) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(Z1, Z7, 0.00001f)) ? 0 : 1;
+
+ return Error;
+ }
+}//namespace test_eulerAngleZ
+
+namespace test_eulerAngleXY
+{
+ int test()
+ {
+ int Error = 0;
+
+ glm::vec4 const V(1.0f);
+
+ float const AngleX(glm::pi<float>() * 0.5f);
+ float const AngleY(glm::pi<float>() * 0.25f);
+
+ glm::vec3 const axisX(1.0f, 0.0f, 0.0f);
+ glm::vec3 const axisY(0.0f, 1.0f, 0.0f);
+
+ glm::vec4 const V1 = (glm::rotate(glm::mat4(1.0f), AngleX, axisX) * glm::rotate(glm::mat4(1.0f), AngleY, axisY)) * V;
+ glm::vec4 const V2 = glm::eulerAngleXY(AngleX, AngleY) * V;
+ glm::vec4 const V3 = glm::eulerAngleX(AngleX) * glm::eulerAngleY(AngleY) * V;
+ Error += glm::all(glm::epsilonEqual(V1, V2, 0.00001f)) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(V1, V3, 0.00001f)) ? 0 : 1;
+
+ return Error;
+ }
+}//namespace test_eulerAngleXY
+
+namespace test_eulerAngleYX
+{
+ int test()
+ {
+ int Error = 0;
+
+ glm::vec4 const V(1.0f);
+
+ float const AngleX(glm::pi<float>() * 0.5f);
+ float const AngleY(glm::pi<float>() * 0.25f);
+
+ glm::vec3 const axisX(1.0f, 0.0f, 0.0f);
+ glm::vec3 const axisY(0.0f, 1.0f, 0.0f);
+
+ glm::vec4 const V1 = (glm::rotate(glm::mat4(1.0f), AngleY, axisY) * glm::rotate(glm::mat4(1.0f), AngleX, axisX)) * V;
+ glm::vec4 const V2 = glm::eulerAngleYX(AngleY, AngleX) * V;
+ glm::vec4 const V3 = glm::eulerAngleY(AngleY) * glm::eulerAngleX(AngleX) * V;
+ Error += glm::all(glm::epsilonEqual(V1, V2, 0.00001f)) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(V1, V3, 0.00001f)) ? 0 : 1;
+
+ return Error;
+ }
+}//namespace test_eulerAngleYX
+
+namespace test_eulerAngleXZ
+{
+ int test()
+ {
+ int Error = 0;
+
+ glm::vec4 const V(1.0f);
+
+ float const AngleX(glm::pi<float>() * 0.5f);
+ float const AngleZ(glm::pi<float>() * 0.25f);
+
+ glm::vec3 const axisX(1.0f, 0.0f, 0.0f);
+ glm::vec3 const axisZ(0.0f, 0.0f, 1.0f);
+
+ glm::vec4 const V1 = (glm::rotate(glm::mat4(1.0f), AngleX, axisX) * glm::rotate(glm::mat4(1.0f), AngleZ, axisZ)) * V;
+ glm::vec4 const V2 = glm::eulerAngleXZ(AngleX, AngleZ) * V;
+ glm::vec4 const V3 = glm::eulerAngleX(AngleX) * glm::eulerAngleZ(AngleZ) * V;
+ Error += glm::all(glm::epsilonEqual(V1, V2, 0.00001f)) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(V1, V3, 0.00001f)) ? 0 : 1;
+
+ return Error;
+ }
+}//namespace test_eulerAngleXZ
+
+namespace test_eulerAngleZX
+{
+ int test()
+ {
+ int Error = 0;
+
+ glm::vec4 const V(1.0f);
+
+ float const AngleX(glm::pi<float>() * 0.5f);
+ float const AngleZ(glm::pi<float>() * 0.25f);
+
+ glm::vec3 const axisX(1.0f, 0.0f, 0.0f);
+ glm::vec3 const axisZ(0.0f, 0.0f, 1.0f);
+
+ glm::vec4 const V1 = (glm::rotate(glm::mat4(1.0f), AngleZ, axisZ) * glm::rotate(glm::mat4(1.0f), AngleX, axisX)) * V;
+ glm::vec4 const V2 = glm::eulerAngleZX(AngleZ, AngleX) * V;
+ glm::vec4 const V3 = glm::eulerAngleZ(AngleZ) * glm::eulerAngleX(AngleX) * V;
+ Error += glm::all(glm::epsilonEqual(V1, V2, 0.00001f)) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(V1, V3, 0.00001f)) ? 0 : 1;
+
+ return Error;
+ }
+}//namespace test_eulerAngleZX
+
+namespace test_eulerAngleYZ
+{
+ int test()
+ {
+ int Error = 0;
+
+ glm::vec4 const V(1.0f);
+
+ float const AngleY(glm::pi<float>() * 0.5f);
+ float const AngleZ(glm::pi<float>() * 0.25f);
+
+ glm::vec3 const axisX(1.0f, 0.0f, 0.0f);
+ glm::vec3 const axisY(0.0f, 1.0f, 0.0f);
+ glm::vec3 const axisZ(0.0f, 0.0f, 1.0f);
+
+ glm::vec4 const V1 = (glm::rotate(glm::mat4(1.0f), AngleY, axisY) * glm::rotate(glm::mat4(1.0f), AngleZ, axisZ)) * V;
+ glm::vec4 const V2 = glm::eulerAngleYZ(AngleY, AngleZ) * V;
+ glm::vec4 const V3 = glm::eulerAngleY(AngleY) * glm::eulerAngleZ(AngleZ) * V;
+ Error += glm::all(glm::epsilonEqual(V1, V2, 0.00001f)) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(V1, V3, 0.00001f)) ? 0 : 1;
+
+ return Error;
+ }
+}//namespace test_eulerAngleYZ
+
+namespace test_eulerAngleZY
+{
+ int test()
+ {
+ int Error = 0;
+
+ glm::vec4 const V(1.0f);
+
+ float const AngleY(glm::pi<float>() * 0.5f);
+ float const AngleZ(glm::pi<float>() * 0.25f);
+
+ glm::vec3 const axisX(1.0f, 0.0f, 0.0f);
+ glm::vec3 const axisY(0.0f, 1.0f, 0.0f);
+ glm::vec3 const axisZ(0.0f, 0.0f, 1.0f);
+
+ glm::vec4 const V1 = (glm::rotate(glm::mat4(1.0f), AngleZ, axisZ) * glm::rotate(glm::mat4(1.0f), AngleY, axisY)) * V;
+ glm::vec4 const V2 = glm::eulerAngleZY(AngleZ, AngleY) * V;
+ glm::vec4 const V3 = glm::eulerAngleZ(AngleZ) * glm::eulerAngleY(AngleY) * V;
+ Error += glm::all(glm::epsilonEqual(V1, V2, 0.00001f)) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(V1, V3, 0.00001f)) ? 0 : 1;
+
+ return Error;
+ }
+}//namespace test_eulerAngleZY
+
+namespace test_eulerAngleYXZ
+{
+ int test()
+ {
+ glm::f32 first = 1.046f;
+ glm::f32 second = 0.52f;
+ glm::f32 third = -0.785f;
+
+ glm::fmat4 rotationEuler = glm::eulerAngleYXZ(first, second, third);
+
+ glm::fmat4 rotationInvertedY = glm::eulerAngleY(-1.f*first) * glm::eulerAngleX(second) * glm::eulerAngleZ(third);
+ glm::fmat4 rotationDumb = glm::fmat4();
+ rotationDumb = glm::rotate(rotationDumb, first, glm::fvec3(0,1,0));
+ rotationDumb = glm::rotate(rotationDumb, second, glm::fvec3(1,0,0));
+ rotationDumb = glm::rotate(rotationDumb, third, glm::fvec3(0,0,1));
+
+ std::printf("%s\n", glm::to_string(glm::fmat3(rotationEuler)).c_str());
+ std::printf("%s\n", glm::to_string(glm::fmat3(rotationDumb)).c_str());
+ std::printf("%s\n", glm::to_string(glm::fmat3(rotationInvertedY)).c_str());
+
+ std::printf("\nRESIDUAL\n");
+ std::printf("%s\n", glm::to_string(glm::fmat3(rotationEuler-(rotationDumb))).c_str());
+ std::printf("%s\n", glm::to_string(glm::fmat3(rotationEuler-(rotationInvertedY))).c_str());
+
+ return 0;
+ }
+}//namespace eulerAngleYXZ
+
+int main()
+{
+ int Error = 0;
+
+ Error += test_eulerAngleX::test();
+ Error += test_eulerAngleY::test();
+ Error += test_eulerAngleZ::test();
+ Error += test_eulerAngleXY::test();
+ Error += test_eulerAngleYX::test();
+ Error += test_eulerAngleXZ::test();
+ Error += test_eulerAngleZX::test();
+ Error += test_eulerAngleYZ::test();
+ Error += test_eulerAngleZY::test();
+ Error += test_eulerAngleYXZ::test();
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtx/gtx_extend.cpp b/src/third_party/glm/test/gtx/gtx_extend.cpp
new file mode 100644
index 0000000..d87830d
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_extend.cpp
@@ -0,0 +1,8 @@
+#include <glm/gtx/extend.hpp>
+
+int main()
+{
+ int Error(0);
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtx/gtx_extended_min_max.cpp b/src/third_party/glm/test/gtx/gtx_extended_min_max.cpp
new file mode 100644
index 0000000..96c2c0e
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_extended_min_max.cpp
@@ -0,0 +1,8 @@
+#include <glm/gtx/extended_min_max.hpp>
+
+int main()
+{
+ int Error(0);
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtx/gtx_extented_min_max.cpp b/src/third_party/glm/test/gtx/gtx_extented_min_max.cpp
new file mode 100644
index 0000000..c8c7847
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_extented_min_max.cpp
@@ -0,0 +1,39 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2015 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// Restrictions:
+/// By making use of the Software for military purposes, you choose to make
+/// a Bunny unhappy.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @file test/gtx/gtx_extented_min_max.cpp
+/// @date 2013-10-25 / 2014-11-25
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+#include <glm/gtx/extended_min_max.hpp>
+
+int main()
+{
+ int Error(0);
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtx/gtx_fast_exponential.cpp b/src/third_party/glm/test/gtx/gtx_fast_exponential.cpp
new file mode 100644
index 0000000..74468ec
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_fast_exponential.cpp
@@ -0,0 +1,8 @@
+#include <glm/gtx/fast_exponential.hpp>
+
+int main()
+{
+ int Error(0);
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtx/gtx_fast_square_root.cpp b/src/third_party/glm/test/gtx/gtx_fast_square_root.cpp
new file mode 100644
index 0000000..5939d06
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_fast_square_root.cpp
@@ -0,0 +1,45 @@
+#include <glm/gtx/fast_square_root.hpp>
+#include <glm/gtc/type_precision.hpp>
+#include <glm/gtc/epsilon.hpp>
+#include <glm/vector_relational.hpp>
+
+int test_fastInverseSqrt()
+{
+ int Error(0);
+
+ Error += glm::epsilonEqual(glm::fastInverseSqrt(1.0f), 1.0f, 0.01f) ? 0 : 1;
+ Error += glm::epsilonEqual(glm::fastInverseSqrt(1.0), 1.0, 0.01) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(glm::fastInverseSqrt(glm::vec2(1.0f)), glm::vec2(1.0f), 0.01f)) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(glm::fastInverseSqrt(glm::dvec3(1.0)), glm::dvec3(1.0), 0.01)) ? 0 : 1;
+ Error += glm::all(glm::epsilonEqual(glm::fastInverseSqrt(glm::dvec4(1.0)), glm::dvec4(1.0), 0.01)) ? 0 : 1;
+
+
+ return 0;
+}
+
+int test_fastDistance()
+{
+ int Error(0);
+
+ glm::mediump_f32 A = glm::fastDistance(glm::mediump_f32(0.0f), glm::mediump_f32(1.0f));
+ glm::mediump_f32 B = glm::fastDistance(glm::mediump_f32vec2(0.0f), glm::mediump_f32vec2(1.0f, 0.0f));
+ glm::mediump_f32 C = glm::fastDistance(glm::mediump_f32vec3(0.0f), glm::mediump_f32vec3(1.0f, 0.0f, 0.0f));
+ glm::mediump_f32 D = glm::fastDistance(glm::mediump_f32vec4(0.0f), glm::mediump_f32vec4(1.0f, 0.0f, 0.0f, 0.0f));
+
+ Error += glm::epsilonEqual(A, glm::mediump_f32(1.0f), glm::mediump_f32(0.01f)) ? 0 : 1;
+ Error += glm::epsilonEqual(B, glm::mediump_f32(1.0f), glm::mediump_f32(0.01f)) ? 0 : 1;
+ Error += glm::epsilonEqual(C, glm::mediump_f32(1.0f), glm::mediump_f32(0.01f)) ? 0 : 1;
+ Error += glm::epsilonEqual(D, glm::mediump_f32(1.0f), glm::mediump_f32(0.01f)) ? 0 : 1;
+
+ return Error;
+}
+
+int main()
+{
+ int Error(0);
+
+ Error += test_fastInverseSqrt();
+ Error += test_fastDistance();
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtx/gtx_fast_trigonometry.cpp b/src/third_party/glm/test/gtx/gtx_fast_trigonometry.cpp
new file mode 100644
index 0000000..d765220
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_fast_trigonometry.cpp
@@ -0,0 +1,445 @@
+#include <glm/gtc/type_precision.hpp>
+#include <glm/gtx/fast_trigonometry.hpp>
+#include <glm/gtx/integer.hpp>
+#include <glm/gtx/common.hpp>
+#include <glm/gtc/constants.hpp>
+#include <glm/gtc/ulp.hpp>
+#include <glm/gtc/vec1.hpp>
+#include <glm/trigonometric.hpp>
+#include <cmath>
+#include <ctime>
+#include <cstdio>
+#include <vector>
+
+namespace fastCos
+{
+ int perf(bool NextFloat)
+ {
+ const float begin = -glm::pi<float>();
+ const float end = glm::pi<float>();
+ float result = 0.f;
+
+ const std::clock_t timestamp1 = std::clock();
+ for(float i = begin; i < end; i = NextFloat ? glm::next_float(i) : i += 0.1f)
+ result = glm::fastCos(i);
+
+ const std::clock_t timestamp2 = std::clock();
+ for(float i = begin; i < end; i = NextFloat ? glm::next_float(i) : i += 0.1f)
+ result = glm::cos(i);
+
+ const std::clock_t timestamp3 = std::clock();
+ const std::clock_t time_fast = timestamp2 - timestamp1;
+ const std::clock_t time_default = timestamp3 - timestamp2;
+ std::printf("fastCos Time %d clocks\n", static_cast<unsigned int>(time_fast));
+ std::printf("cos Time %d clocks\n", static_cast<unsigned int>(time_default));
+
+ return time_fast <= time_default ? 0 : 1;
+ }
+}//namespace fastCos
+
+namespace fastSin
+{
+ /*
+ float sin(float x) {
+ float temp;
+ temp = (x + M_PI) / ((2 * M_PI) - M_PI);
+ return limited_sin((x + M_PI) - ((2 * M_PI) - M_PI) * temp));
+ }
+ */
+
+ int perf(bool NextFloat)
+ {
+ const float begin = -glm::pi<float>();
+ const float end = glm::pi<float>();
+ float result = 0.f;
+
+ const std::clock_t timestamp1 = std::clock();
+ for(float i = begin; i < end; i = NextFloat ? glm::next_float(i) : i += 0.1f)
+ result = glm::fastSin(i);
+
+ const std::clock_t timestamp2 = std::clock();
+ for(float i = begin; i < end; i = NextFloat ? glm::next_float(i) : i += 0.1f)
+ result = glm::sin(i);
+
+ const std::clock_t timestamp3 = std::clock();
+ const std::clock_t time_fast = timestamp2 - timestamp1;
+ const std::clock_t time_default = timestamp3 - timestamp2;
+ std::printf("fastSin Time %d clocks\n", static_cast<unsigned int>(time_fast));
+ std::printf("sin Time %d clocks\n", static_cast<unsigned int>(time_default));
+
+ return time_fast <= time_default ? 0 : 1;
+ }
+}//namespace fastSin
+
+namespace fastTan
+{
+ int perf(bool NextFloat)
+ {
+ const float begin = -glm::pi<float>();
+ const float end = glm::pi<float>();
+ float result = 0.f;
+
+ const std::clock_t timestamp1 = std::clock();
+ for(float i = begin; i < end; i = NextFloat ? glm::next_float(i) : i += 0.1f)
+ result = glm::fastTan(i);
+
+ const std::clock_t timestamp2 = std::clock();
+ for (float i = begin; i < end; i = NextFloat ? glm::next_float(i) : i += 0.1f)
+ result = glm::tan(i);
+
+ const std::clock_t timestamp3 = std::clock();
+ const std::clock_t time_fast = timestamp2 - timestamp1;
+ const std::clock_t time_default = timestamp3 - timestamp2;
+ std::printf("fastTan Time %d clocks\n", static_cast<unsigned int>(time_fast));
+ std::printf("tan Time %d clocks\n", static_cast<unsigned int>(time_default));
+
+ return time_fast <= time_default ? 0 : 1;
+ }
+}//namespace fastTan
+
+namespace fastAcos
+{
+ int perf(bool NextFloat)
+ {
+ const float begin = -glm::pi<float>();
+ const float end = glm::pi<float>();
+ float result = 0.f;
+
+ const std::clock_t timestamp1 = std::clock();
+ for(float i = begin; i < end; i = NextFloat ? glm::next_float(i) : i += 0.1f)
+ result = glm::fastAcos(i);
+
+ const std::clock_t timestamp2 = std::clock();
+ for(float i = begin; i < end; i = NextFloat ? glm::next_float(i) : i += 0.1f)
+ result = glm::acos(i);
+
+ const std::clock_t timestamp3 = std::clock();
+ const std::clock_t time_fast = timestamp2 - timestamp1;
+ const std::clock_t time_default = timestamp3 - timestamp2;
+
+ std::printf("fastAcos Time %d clocks\n", static_cast<unsigned int>(time_fast));
+ std::printf("acos Time %d clocks\n", static_cast<unsigned int>(time_default));
+
+ return time_fast <= time_default ? 0 : 1;
+ }
+}//namespace fastAcos
+
+namespace fastAsin
+{
+ int perf(bool NextFloat)
+ {
+ const float begin = -glm::pi<float>();
+ const float end = glm::pi<float>();
+ float result = 0.f;
+ const std::clock_t timestamp1 = std::clock();
+ for(float i = begin; i < end; i = NextFloat ? glm::next_float(i) : i += 0.1f)
+ result = glm::fastAsin(i);
+ const std::clock_t timestamp2 = std::clock();
+ for(float i = begin; i < end; i = NextFloat ? glm::next_float(i) : i += 0.1f)
+ result = glm::asin(i);
+ const std::clock_t timestamp3 = std::clock();
+ const std::clock_t time_fast = timestamp2 - timestamp1;
+ const std::clock_t time_default = timestamp3 - timestamp2;
+ std::printf("fastAsin Time %d clocks\n", static_cast<unsigned int>(time_fast));
+ std::printf("asin Time %d clocks\n", static_cast<unsigned int>(time_default));
+
+ return time_fast <= time_default ? 0 : 1;
+ }
+}//namespace fastAsin
+
+namespace fastAtan
+{
+ int perf(bool NextFloat)
+ {
+ const float begin = -glm::pi<float>();
+ const float end = glm::pi<float>();
+ float result = 0.f;
+ const std::clock_t timestamp1 = std::clock();
+ for(float i = begin; i < end; i = NextFloat ? glm::next_float(i) : i += 0.1f)
+ result = glm::fastAtan(i);
+ const std::clock_t timestamp2 = std::clock();
+ for(float i = begin; i < end; i = NextFloat ? glm::next_float(i) : i += 0.1f)
+ result = glm::atan(i);
+ const std::clock_t timestamp3 = std::clock();
+ const std::clock_t time_fast = timestamp2 - timestamp1;
+ const std::clock_t time_default = timestamp3 - timestamp2;
+ std::printf("fastAtan Time %d clocks\n", static_cast<unsigned int>(time_fast));
+ std::printf("atan Time %d clocks\n", static_cast<unsigned int>(time_default));
+
+ return time_fast <= time_default ? 0 : 1;
+ }
+}//namespace fastAtan
+
+namespace taylorCos
+{
+ glm::vec4 const AngleShift(0.0f, glm::pi<float>() * 0.5f, glm::pi<float>() * 1.0f, glm::pi<float>() * 1.5f);
+
+ template <typename T, glm::precision P, template <typename, glm::precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> taylorSeriesNewCos(vecType<T, P> const & x)
+ {
+ vecType<T, P> const Powed2(x * x);
+ vecType<T, P> const Powed4(Powed2 * Powed2);
+ vecType<T, P> const Powed6(Powed4 * Powed2);
+ vecType<T, P> const Powed8(Powed4 * Powed4);
+
+ return static_cast<T>(1)
+ - Powed2 * static_cast<T>(0.5)
+ + Powed4 * static_cast<T>(0.04166666666666666666666666666667)
+ - Powed6 * static_cast<T>(0.00138888888888888888888888888889)
+ + Powed8 * static_cast<T>(2.4801587301587301587301587301587e-5);
+ }
+
+ template <typename T, glm::precision P, template <typename, glm::precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> taylorSeriesNewCos6(vecType<T, P> const & x)
+ {
+ vecType<T, P> const Powed2(x * x);
+ vecType<T, P> const Powed4(Powed2 * Powed2);
+ vecType<T, P> const Powed6(Powed4 * Powed2);
+
+ return static_cast<T>(1)
+ - Powed2 * static_cast<T>(0.5)
+ + Powed4 * static_cast<T>(0.04166666666666666666666666666667)
+ - Powed6 * static_cast<T>(0.00138888888888888888888888888889);
+ }
+
+ template <glm::precision P, template <typename, glm::precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<float, P> fastAbs(vecType<float, P> x)
+ {
+ int* Pointer = reinterpret_cast<int*>(&x[0]);
+ Pointer[0] &= 0x7fffffff;
+ Pointer[1] &= 0x7fffffff;
+ Pointer[2] &= 0x7fffffff;
+ Pointer[3] &= 0x7fffffff;
+ return x;
+ }
+
+ template <typename T, glm::precision P, template <typename, glm::precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> fastCosNew(vecType<T, P> const & x)
+ {
+ vecType<T, P> const Angle0_PI(fastAbs(fmod(x + glm::pi<T>(), glm::two_pi<T>()) - glm::pi<T>()));
+ return taylorSeriesNewCos6(x);
+/*
+ vecType<bool, P> const FirstQuarterPi(lessThanEqual(Angle0_PI, vecType<T, P>(glm::half_pi<T>())));
+
+ vecType<T, P> const RevertAngle(mix(vecType<T, P>(glm::pi<T>()), vecType<T, P>(0), FirstQuarterPi));
+ vecType<T, P> const ReturnSign(mix(vecType<T, P>(-1), vecType<T, P>(1), FirstQuarterPi));
+ vecType<T, P> const SectionAngle(RevertAngle - Angle0_PI);
+
+ return ReturnSign * taylorSeriesNewCos(SectionAngle);
+*/
+ }
+
+ int perf_fastCosNew(float Begin, float End, std::size_t Samples)
+ {
+ std::vector<glm::vec4> Results;
+ Results.resize(Samples);
+
+ float Steps = (End - Begin) / Samples;
+
+ std::clock_t const TimeStampBegin = std::clock();
+
+ for(std::size_t i = 0; i < Samples; ++i)
+ Results[i] = fastCosNew(AngleShift + glm::vec4(Begin + Steps * i));
+
+ std::clock_t const TimeStampEnd = std::clock();
+
+ std::printf("fastCosNew %ld clocks\n", TimeStampEnd - TimeStampBegin);
+
+ int Error = 0;
+ for(std::size_t i = 0; i < Samples; ++i)
+ Error += Results[i].x >= -1.0f && Results[i].x <= 1.0f ? 0 : 1;
+ return Error;
+ }
+
+ template <typename T, glm::precision P, template <typename, glm::precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> deterministic_fmod(vecType<T, P> const & x, T y)
+ {
+ return x - y * trunc(x / y);
+ }
+
+ template <typename T, glm::precision P, template <typename, glm::precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> fastCosDeterminisctic(vecType<T, P> const & x)
+ {
+ vecType<T, P> const Angle0_PI(abs(deterministic_fmod(x + glm::pi<T>(), glm::two_pi<T>()) - glm::pi<T>()));
+ vecType<bool, P> const FirstQuarterPi(lessThanEqual(Angle0_PI, vecType<T, P>(glm::half_pi<T>())));
+
+ vecType<T, P> const RevertAngle(mix(vecType<T, P>(glm::pi<T>()), vecType<T, P>(0), FirstQuarterPi));
+ vecType<T, P> const ReturnSign(mix(vecType<T, P>(-1), vecType<T, P>(1), FirstQuarterPi));
+ vecType<T, P> const SectionAngle(RevertAngle - Angle0_PI);
+
+ return ReturnSign * taylorSeriesNewCos(SectionAngle);
+ }
+
+ int perf_fastCosDeterminisctic(float Begin, float End, std::size_t Samples)
+ {
+ std::vector<glm::vec4> Results;
+ Results.resize(Samples);
+
+ float Steps = (End - Begin) / Samples;
+
+ std::clock_t const TimeStampBegin = std::clock();
+
+ for(std::size_t i = 0; i < Samples; ++i)
+ Results[i] = taylorCos::fastCosDeterminisctic(AngleShift + glm::vec4(Begin + Steps * i));
+
+ std::clock_t const TimeStampEnd = std::clock();
+
+ std::printf("fastCosDeterminisctic %ld clocks\n", TimeStampEnd - TimeStampBegin);
+
+ int Error = 0;
+ for(std::size_t i = 0; i < Samples; ++i)
+ Error += Results[i].x >= -1.0f && Results[i].x <= 1.0f ? 0 : 1;
+ return Error;
+ }
+
+ template <typename T, glm::precision P, template <typename, glm::precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> taylorSeriesRefCos(vecType<T, P> const & x)
+ {
+ return static_cast<T>(1)
+ - (x * x) / glm::factorial(static_cast<T>(2))
+ + (x * x * x * x) / glm::factorial(static_cast<T>(4))
+ - (x * x * x * x * x * x) / glm::factorial(static_cast<T>(6))
+ + (x * x * x * x * x * x * x * x) / glm::factorial(static_cast<T>(8));
+ }
+
+ template <typename T, glm::precision P, template <typename, glm::precision> class vecType>
+ GLM_FUNC_QUALIFIER vecType<T, P> fastRefCos(vecType<T, P> const & x)
+ {
+ vecType<T, P> const Angle0_PI(glm::abs(fmod(x + glm::pi<T>(), glm::two_pi<T>()) - glm::pi<T>()));
+// return taylorSeriesRefCos(Angle0_PI);
+
+ vecType<bool, P> const FirstQuarterPi(lessThanEqual(Angle0_PI, vecType<T, P>(glm::half_pi<T>())));
+
+ vecType<T, P> const RevertAngle(mix(vecType<T, P>(glm::pi<T>()), vecType<T, P>(0), FirstQuarterPi));
+ vecType<T, P> const ReturnSign(mix(vecType<T, P>(-1), vecType<T, P>(1), FirstQuarterPi));
+ vecType<T, P> const SectionAngle(RevertAngle - Angle0_PI);
+
+ return ReturnSign * taylorSeriesRefCos(SectionAngle);
+ }
+
+ int perf_fastCosRef(float Begin, float End, std::size_t Samples)
+ {
+ std::vector<glm::vec4> Results;
+ Results.resize(Samples);
+
+ float Steps = (End - Begin) / Samples;
+
+ std::clock_t const TimeStampBegin = std::clock();
+
+ for(std::size_t i = 0; i < Samples; ++i)
+ Results[i] = taylorCos::fastRefCos(AngleShift + glm::vec4(Begin + Steps * i));
+
+ std::clock_t const TimeStampEnd = std::clock();
+
+ std::printf("fastCosRef %ld clocks\n", TimeStampEnd - TimeStampBegin);
+
+ int Error = 0;
+ for(std::size_t i = 0; i < Samples; ++i)
+ Error += Results[i].x >= -1.0f && Results[i].x <= 1.0f ? 0 : 1;
+ return Error;
+ }
+
+ int perf_fastCosOld(float Begin, float End, std::size_t Samples)
+ {
+ std::vector<glm::vec4> Results;
+ Results.resize(Samples);
+
+ float Steps = (End - Begin) / Samples;
+
+ std::clock_t const TimeStampBegin = std::clock();
+
+ for(std::size_t i = 0; i < Samples; ++i)
+ Results[i] = glm::fastCos(AngleShift + glm::vec4(Begin + Steps * i));
+
+ std::clock_t const TimeStampEnd = std::clock();
+
+ std::printf("fastCosOld %ld clocks\n", TimeStampEnd - TimeStampBegin);
+
+ int Error = 0;
+ for(std::size_t i = 0; i < Samples; ++i)
+ Error += Results[i].x >= -1.0f && Results[i].x <= 1.0f ? 0 : 1;
+ return Error;
+ }
+
+ int perf_cos(float Begin, float End, std::size_t Samples)
+ {
+ std::vector<glm::vec4> Results;
+ Results.resize(Samples);
+
+ float Steps = (End - Begin) / Samples;
+
+ std::clock_t const TimeStampBegin = std::clock();
+
+ for(std::size_t i = 0; i < Samples; ++i)
+ Results[i] = glm::cos(AngleShift + glm::vec4(Begin + Steps * i));
+
+ std::clock_t const TimeStampEnd = std::clock();
+
+ std::printf("cos %ld clocks\n", TimeStampEnd - TimeStampBegin);
+
+ int Error = 0;
+ for(std::size_t i = 0; i < Samples; ++i)
+ Error += Results[i].x >= -1.0f && Results[i].x <= 1.0f ? 0 : 1;
+ return Error;
+ }
+
+ int perf(std::size_t const Samples)
+ {
+ int Error = 0;
+
+ float const Begin = -glm::pi<float>();
+ float const End = glm::pi<float>();
+
+ Error += perf_cos(Begin, End, Samples);
+ Error += perf_fastCosOld(Begin, End, Samples);
+ Error += perf_fastCosRef(Begin, End, Samples);
+ //Error += perf_fastCosNew(Begin, End, Samples);
+ Error += perf_fastCosDeterminisctic(Begin, End, Samples);
+
+ return Error;
+ }
+
+ int test()
+ {
+ int Error = 0;
+
+ //for(float Angle = -4.0f * glm::pi<float>(); Angle < 4.0f * glm::pi<float>(); Angle += 0.1f)
+ //for(float Angle = -720.0f; Angle < 720.0f; Angle += 0.1f)
+ for(float Angle = 0.0f; Angle < 180.0f; Angle += 0.1f)
+ {
+ float const modAngle = std::fmod(glm::abs(Angle), 360.f);
+ assert(modAngle >= 0.0f && modAngle <= 360.f);
+ float const radAngle = glm::radians(modAngle);
+ float const Cos0 = std::cos(radAngle);
+
+ float const Cos1 = taylorCos::fastRefCos(glm::fvec1(radAngle)).x;
+ Error += glm::abs(Cos1 - Cos0) < 0.1f ? 0 : 1;
+
+ float const Cos2 = taylorCos::fastCosNew(glm::fvec1(radAngle)).x;
+ //Error += glm::abs(Cos2 - Cos0) < 0.1f ? 0 : 1;
+
+ assert(!Error);
+ }
+
+ return Error;
+ }
+}//namespace taylorCos
+
+int main()
+{
+ int Error(0);
+
+ Error += ::taylorCos::test();
+ Error += ::taylorCos::perf(1000);
+
+# ifdef NDEBUG
+ ::fastCos::perf(false);
+ ::fastSin::perf(false);
+ ::fastTan::perf(false);
+ ::fastAcos::perf(false);
+ ::fastAsin::perf(false);
+ ::fastAtan::perf(false);
+# endif//NDEBUG
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtx/gtx_gradient_paint.cpp b/src/third_party/glm/test/gtx/gtx_gradient_paint.cpp
new file mode 100644
index 0000000..4f16744
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_gradient_paint.cpp
@@ -0,0 +1,33 @@
+#include <glm/gtx/gradient_paint.hpp>
+
+int test_radialGradient()
+{
+ int Error = 0;
+
+ float Gradient = glm::radialGradient(glm::vec2(0), 1.0f, glm::vec2(1), glm::vec2(0.5));
+ Error += Gradient != 0.0f ? 0 : 1;
+
+ return Error;
+}
+
+int test_linearGradient()
+{
+ int Error = 0;
+
+ float Gradient = glm::linearGradient(glm::vec2(0), glm::vec2(1), glm::vec2(0.5));
+ Error += Gradient != 0.0f ? 0 : 1;
+
+ return Error;
+}
+
+int main()
+{
+ int Error = 0;
+
+ Error += test_radialGradient();
+ Error += test_linearGradient();
+
+ return Error;
+}
+
+
diff --git a/src/third_party/glm/test/gtx/gtx_handed_coordinate_space.cpp b/src/third_party/glm/test/gtx/gtx_handed_coordinate_space.cpp
new file mode 100644
index 0000000..baebb36
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_handed_coordinate_space.cpp
@@ -0,0 +1,8 @@
+#include <glm/gtx/handed_coordinate_space.hpp>
+
+int main()
+{
+ int Error(0);
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtx/gtx_int_10_10_10_2.cpp b/src/third_party/glm/test/gtx/gtx_int_10_10_10_2.cpp
new file mode 100644
index 0000000..ab59bb2
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_int_10_10_10_2.cpp
@@ -0,0 +1,18 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2013-10-25
+// Updated : 2013-10-25
+// Licence : This source is under MIT licence
+// File : test/gtx/associated_min_max.cpp
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+#include <glm/gtc/type_precision.hpp>
+#include <glm/gtx/associated_min_max.hpp>
+
+int main()
+{
+ int Error(0);
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtx/gtx_integer.cpp b/src/third_party/glm/test/gtx/gtx_integer.cpp
new file mode 100644
index 0000000..7fa44f4
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_integer.cpp
@@ -0,0 +1,64 @@
+#include <glm/exponential.hpp>
+#include <glm/gtc/epsilon.hpp>
+#include <glm/gtx/integer.hpp>
+#include <cstdio>
+/*
+int test_floor_log2()
+{
+ int Error = 0;
+
+ for(std::size_t i = 1; i < 1000000; ++i)
+ {
+ glm::uint A = glm::floor_log2(glm::uint(i));
+ glm::uint B = glm::uint(glm::floor(glm::log2(double(i)))); // Will fail with float, lack of accuracy
+
+ Error += A == B ? 0 : 1;
+ assert(!Error);
+ }
+
+ return Error;
+}
+*/
+int test_log2()
+{
+ int Error = 0;
+
+ for(std::size_t i = 1; i < 24; ++i)
+ {
+ glm::uint A = glm::log2(glm::uint(1 << i));
+ glm::uint B = glm::uint(glm::log2(double(1 << i)));
+
+ //Error += glm::equalEpsilon(double(A), B, 1.0) ? 0 : 1;
+ Error += glm::abs(double(A) - B) <= 24 ? 0 : 1;
+ assert(!Error);
+
+ printf("Log2(%d) error A=%d, B=%d\n", 1 << i, A, B);
+ }
+
+ printf("log2 error=%d\n", Error);
+
+ return Error;
+}
+
+int test_nlz()
+{
+ int Error = 0;
+
+ for(glm::uint i = 1; i < glm::uint(33); ++i)
+ Error += glm::nlz(i) == glm::uint(31u) - glm::findMSB(i) ? 0 : 1;
+ //printf("%d, %d\n", glm::nlz(i), 31u - glm::findMSB(i));
+
+ return Error;
+}
+
+int main()
+{
+ int Error = 0;
+
+ Error += test_nlz();
+// Error += test_floor_log2();
+ Error += test_log2();
+
+ return Error;
+}
+
diff --git a/src/third_party/glm/test/gtx/gtx_intersect.cpp b/src/third_party/glm/test/gtx/gtx_intersect.cpp
new file mode 100644
index 0000000..8b4a5fb
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_intersect.cpp
@@ -0,0 +1,8 @@
+#include <glm/gtx/intersect.hpp>
+
+int main()
+{
+ int Error(0);
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtx/gtx_io.cpp b/src/third_party/glm/test/gtx/gtx_io.cpp
new file mode 100644
index 0000000..a7ab7a7
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_io.cpp
@@ -0,0 +1,175 @@
+#include <glm/gtc/type_precision.hpp>
+#include <glm/gtx/io.hpp>
+#include <iostream>
+#include <sstream>
+#include <typeinfo>
+
+namespace
+{
+ template <typename CTy, typename CTr>
+ std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, glm::precision const& a)
+ {
+ typename std::basic_ostream<CTy,CTr>::sentry const cerberus(os);
+
+ if (cerberus)
+ {
+ switch (a) {
+ case glm::highp: os << "uhi"; break;
+ case glm::mediump: os << "umd"; break;
+ case glm::lowp: os << "ulo"; break;
+# if GLM_HAS_ALIGNED_TYPE
+ case glm::aligned_highp: os << "ahi"; break;
+ case glm::aligned_mediump: os << "amd"; break;
+ case glm::aligned_lowp: os << "alo"; break;
+# endif
+ }
+ }
+
+ return os;
+ }
+
+ template <typename U, glm::precision P, typename T, typename CTy, typename CTr>
+ std::basic_string<CTy> type_name(std::basic_ostream<CTy,CTr>& os, T const&)
+ {
+ std::basic_ostringstream<CTy,CTr> ostr;
+
+ if (typeid(T) == typeid(glm::tquat<U,P>)) { ostr << "quat"; }
+ else if (typeid(T) == typeid(glm::tvec2<U,P>)) { ostr << "vec2"; }
+ else if (typeid(T) == typeid(glm::tvec3<U,P>)) { ostr << "vec3"; }
+ else if (typeid(T) == typeid(glm::tvec4<U,P>)) { ostr << "vec4"; }
+ else if (typeid(T) == typeid(glm::tmat2x2<U,P>)) { ostr << "mat2x2"; }
+ else if (typeid(T) == typeid(glm::tmat2x3<U,P>)) { ostr << "mat2x3"; }
+ else if (typeid(T) == typeid(glm::tmat2x4<U,P>)) { ostr << "mat2x4"; }
+ else if (typeid(T) == typeid(glm::tmat3x2<U,P>)) { ostr << "mat3x2"; }
+ else if (typeid(T) == typeid(glm::tmat3x3<U,P>)) { ostr << "mat3x3"; }
+ else if (typeid(T) == typeid(glm::tmat3x4<U,P>)) { ostr << "mat3x4"; }
+ else if (typeid(T) == typeid(glm::tmat4x2<U,P>)) { ostr << "mat4x2"; }
+ else if (typeid(T) == typeid(glm::tmat4x3<U,P>)) { ostr << "mat4x3"; }
+ else if (typeid(T) == typeid(glm::tmat4x4<U,P>)) { ostr << "mat4x4"; }
+ else { ostr << "unknown"; }
+
+ ostr << '<' << typeid(U).name() << ',' << P << '>';
+
+ return ostr.str();
+ }
+} // namespace {
+
+template <typename T, glm::precision P, typename OS>
+int test_io_quat(OS& os)
+{
+ os << '\n' << typeid(OS).name() << '\n';
+
+ glm::tquat<T,P> const q(1, 0, 0, 0);
+
+ {
+ glm::io::basic_format_saver<typename OS::char_type> const iofs(os);
+
+ os << glm::io::precision(2) << glm::io::width(1 + 2 + 1 + 2)
+ << type_name<T,P>(os, q) << ": " << q << '\n';
+ }
+
+ {
+ glm::io::basic_format_saver<typename OS::char_type> const iofs(os);
+
+ os << glm::io::unformatted
+ << type_name<T,P>(os, q) << ": " << q << '\n';
+ }
+
+ return 0;
+}
+
+template <typename T, glm::precision P, typename OS>
+int test_io_vec(OS& os)
+{
+ os << '\n' << typeid(OS).name() << '\n';
+
+ glm::tvec2<T,P> const v2(0, 1);
+ glm::tvec3<T,P> const v3(2, 3, 4);
+ glm::tvec4<T,P> const v4(5, 6, 7, 8);
+
+ os << type_name<T,P>(os, v2) << ": " << v2 << '\n'
+ << type_name<T,P>(os, v3) << ": " << v3 << '\n'
+ << type_name<T,P>(os, v4) << ": " << v4 << '\n';
+
+ glm::io::basic_format_saver<typename OS::char_type> const iofs(os);
+
+ os << glm::io::precision(2) << glm::io::width(1 + 2 + 1 + 2)
+ << type_name<T,P>(os, v2) << ": " << v2 << '\n'
+ << type_name<T,P>(os, v3) << ": " << v3 << '\n'
+ << type_name<T,P>(os, v4) << ": " << v4 << '\n';
+
+ return 0;
+}
+
+template <typename T, glm::precision P, typename OS>
+int test_io_mat(OS& os, glm::io::order_type otype)
+{
+ os << '\n' << typeid(OS).name() << '\n';
+
+ glm::tvec2<T,P> const v2_1( 0, 1);
+ glm::tvec2<T,P> const v2_2( 2, 3);
+ glm::tvec2<T,P> const v2_3( 4, 5);
+ glm::tvec2<T,P> const v2_4( 6, 7);
+ glm::tvec3<T,P> const v3_1( 8, 9, 10);
+ glm::tvec3<T,P> const v3_2(11, 12, 13);
+ glm::tvec3<T,P> const v3_3(14, 15, 16);
+ glm::tvec3<T,P> const v3_4(17, 18, 19);
+ glm::tvec4<T,P> const v4_1(20, 21, 22, 23);
+ glm::tvec4<T,P> const v4_2(24, 25, 26, 27);
+ glm::tvec4<T,P> const v4_3(28, 29, 30, 31);
+ glm::tvec4<T,P> const v4_4(32, 33, 34, 35);
+
+ glm::io::basic_format_saver<typename OS::char_type> const iofs(os);
+
+ os << glm::io::precision(2) << glm::io::width(1 + 2 + 1 + 2)
+ << glm::io::order(otype)
+ << "mat2x2<" << typeid(T).name() << ',' << P << ">: " << glm::tmat2x2<T,P>(v2_1, v2_2) << '\n'
+ << "mat2x3<" << typeid(T).name() << ',' << P << ">: " << glm::tmat2x3<T,P>(v3_1, v3_2) << '\n'
+ << "mat2x4<" << typeid(T).name() << ',' << P << ">: " << glm::tmat2x4<T,P>(v4_1, v4_2) << '\n'
+ << "mat3x2<" << typeid(T).name() << ',' << P << ">: " << glm::tmat3x2<T,P>(v2_1, v2_2, v2_3) << '\n'
+ << "mat3x3<" << typeid(T).name() << ',' << P << ">: " << glm::tmat3x3<T,P>(v3_1, v3_2, v3_3) << '\n'
+ << "mat3x4<" << typeid(T).name() << ',' << P << ">: " << glm::tmat3x4<T,P>(v4_1, v4_2, v4_3) << '\n'
+ << "mat4x2<" << typeid(T).name() << ',' << P << ">: " << glm::tmat4x2<T,P>(v2_1, v2_2, v2_3, v2_4) << '\n'
+ << "mat4x3<" << typeid(T).name() << ',' << P << ">: " << glm::tmat4x3<T,P>(v3_1, v3_2, v3_3, v3_4) << '\n'
+ << "mat4x4<" << typeid(T).name() << ',' << P << ">: " << glm::tmat4x4<T,P>(v4_1, v4_2, v4_3, v4_4) << '\n';
+
+ os << glm::io::unformatted
+ << glm::io::order(otype)
+ << "mat2x2<" << typeid(T).name() << ',' << P << ">: " << glm::tmat2x2<T,P>(v2_1, v2_2) << '\n'
+ << "mat2x3<" << typeid(T).name() << ',' << P << ">: " << glm::tmat2x3<T,P>(v3_1, v3_2) << '\n'
+ << "mat2x4<" << typeid(T).name() << ',' << P << ">: " << glm::tmat2x4<T,P>(v4_1, v4_2) << '\n'
+ << "mat3x2<" << typeid(T).name() << ',' << P << ">: " << glm::tmat3x2<T,P>(v2_1, v2_2, v2_3) << '\n'
+ << "mat3x3<" << typeid(T).name() << ',' << P << ">: " << glm::tmat3x3<T,P>(v3_1, v3_2, v3_3) << '\n'
+ << "mat3x4<" << typeid(T).name() << ',' << P << ">: " << glm::tmat3x4<T,P>(v4_1, v4_2, v4_3) << '\n'
+ << "mat4x2<" << typeid(T).name() << ',' << P << ">: " << glm::tmat4x2<T,P>(v2_1, v2_2, v2_3, v2_4) << '\n'
+ << "mat4x3<" << typeid(T).name() << ',' << P << ">: " << glm::tmat4x3<T,P>(v3_1, v3_2, v3_3, v3_4) << '\n'
+ << "mat4x4<" << typeid(T).name() << ',' << P << ">: " << glm::tmat4x4<T,P>(v4_1, v4_2, v4_3, v4_4) << '\n';
+
+ return 0;
+}
+
+int main()
+{
+ int Error(0);
+
+ Error += test_io_quat<float, glm::highp>(std::cout);
+ Error += test_io_quat<float, glm::highp>(std::wcout);
+ Error += test_io_quat<int, glm::mediump>(std::cout);
+ Error += test_io_quat<int, glm::mediump>(std::wcout);
+ Error += test_io_quat<glm::uint, glm::lowp>(std::cout);
+ Error += test_io_quat<glm::uint, glm::lowp>(std::wcout);
+
+ Error += test_io_vec<float, glm::highp>(std::cout);
+ Error += test_io_vec<float, glm::highp>(std::wcout);
+ Error += test_io_vec<int, glm::mediump>(std::cout);
+ Error += test_io_vec<int, glm::mediump>(std::wcout);
+ Error += test_io_vec<glm::uint, glm::lowp>(std::cout);
+ Error += test_io_vec<glm::uint, glm::lowp>(std::wcout);
+
+ Error += test_io_mat<float, glm::highp>(std::cout, glm::io::column_major);
+ Error += test_io_mat<float, glm::lowp>(std::wcout, glm::io::column_major);
+ Error += test_io_mat<float, glm::highp>(std::cout, glm::io::row_major);
+ Error += test_io_mat<float, glm::lowp>(std::wcout, glm::io::row_major);
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtx/gtx_log_base.cpp b/src/third_party/glm/test/gtx/gtx_log_base.cpp
new file mode 100644
index 0000000..66c6d51
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_log_base.cpp
@@ -0,0 +1,53 @@
+#include <glm/gtx/log_base.hpp>
+#include <glm/gtc/vec1.hpp>
+#include <glm/gtc/epsilon.hpp>
+#include <glm/exponential.hpp>
+
+namespace test_log
+{
+ int run()
+ {
+ int Error = 0;
+
+ {
+ float A = glm::log(10.f, 2.0f);
+ float B = glm::log2(10.f);
+ Error += glm::epsilonEqual(A, B, 0.00001f) ? 0 : 1;
+ }
+
+ {
+ glm::vec1 A = glm::log(glm::vec1(10.f), glm::vec1(2.0f));
+ glm::vec1 B = glm::log2(glm::vec1(10.f));
+ Error += glm::all(glm::epsilonEqual(A, B, glm::vec1(0.00001f))) ? 0 : 1;
+ }
+
+ {
+ glm::vec2 A = glm::log(glm::vec2(10.f), glm::vec2(2.0f));
+ glm::vec2 B = glm::log2(glm::vec2(10.f));
+ Error += glm::all(glm::epsilonEqual(A, B, glm::vec2(0.00001f))) ? 0 : 1;
+ }
+
+ {
+ glm::vec3 A = glm::log(glm::vec3(10.f), glm::vec3(2.0f));
+ glm::vec3 B = glm::log2(glm::vec3(10.f));
+ Error += glm::all(glm::epsilonEqual(A, B, glm::vec3(0.00001f))) ? 0 : 1;
+ }
+
+ {
+ glm::vec4 A = glm::log(glm::vec4(10.f), glm::vec4(2.0f));
+ glm::vec4 B = glm::log2(glm::vec4(10.f));
+ Error += glm::all(glm::epsilonEqual(A, B, glm::vec4(0.00001f))) ? 0 : 1;
+ }
+
+ return Error;
+ }
+}//namespace test_log
+
+int main()
+{
+ int Error(0);
+
+ Error += test_log::run();
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtx/gtx_matrix_cross_product.cpp b/src/third_party/glm/test/gtx/gtx_matrix_cross_product.cpp
new file mode 100644
index 0000000..325a327
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_matrix_cross_product.cpp
@@ -0,0 +1,8 @@
+#include <glm/gtx/matrix_cross_product.hpp>
+
+int main()
+{
+ int Error(0);
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtx/gtx_matrix_decompose.cpp b/src/third_party/glm/test/gtx/gtx_matrix_decompose.cpp
new file mode 100644
index 0000000..b8c3371
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_matrix_decompose.cpp
@@ -0,0 +1,18 @@
+#include <glm/gtx/matrix_decompose.hpp>
+
+int main()
+{
+ int Error(0);
+
+ glm::mat4 Matrix(1);
+
+ glm::vec3 Scale;
+ glm::quat Orientation;
+ glm::vec3 Translation;
+ glm::vec3 Skew(1);
+ glm::vec4 Perspective(1);
+
+ glm::decompose(Matrix, Scale, Orientation, Translation, Skew, Perspective);
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtx/gtx_matrix_interpolation.cpp b/src/third_party/glm/test/gtx/gtx_matrix_interpolation.cpp
new file mode 100644
index 0000000..88724f9
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_matrix_interpolation.cpp
@@ -0,0 +1,10 @@
+#include <glm/gtx/matrix_interpolation.hpp>
+
+int main()
+{
+ int Error(0);
+
+ return Error;
+}
+
+
diff --git a/src/third_party/glm/test/gtx/gtx_matrix_major_storage.cpp b/src/third_party/glm/test/gtx/gtx_matrix_major_storage.cpp
new file mode 100644
index 0000000..85a9250
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_matrix_major_storage.cpp
@@ -0,0 +1,8 @@
+#include <glm/gtx/matrix_major_storage.hpp>
+
+int main()
+{
+ int Error(0);
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtx/gtx_matrix_operation.cpp b/src/third_party/glm/test/gtx/gtx_matrix_operation.cpp
new file mode 100644
index 0000000..bfd6360
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_matrix_operation.cpp
@@ -0,0 +1,8 @@
+#include <glm/gtx/matrix_operation.hpp>
+
+int main()
+{
+ int Error(0);
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtx/gtx_matrix_query.cpp b/src/third_party/glm/test/gtx/gtx_matrix_query.cpp
new file mode 100644
index 0000000..71732a1
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_matrix_query.cpp
@@ -0,0 +1,65 @@
+#include <glm/gtx/matrix_query.hpp>
+
+int test_isNull()
+{
+ int Error(0);
+
+ bool TestA = glm::isNull(glm::mat4(0), 0.00001f);
+ Error += TestA ? 0 : 1;
+
+ return Error;
+}
+
+int test_isIdentity()
+{
+ int Error(0);
+
+ {
+ bool TestA = glm::isIdentity(glm::mat2(1), 0.00001f);
+ Error += TestA ? 0 : 1;
+ }
+ {
+ bool TestA = glm::isIdentity(glm::mat3(1), 0.00001f);
+ Error += TestA ? 0 : 1;
+ }
+ {
+ bool TestA = glm::isIdentity(glm::mat4(1), 0.00001f);
+ Error += TestA ? 0 : 1;
+ }
+
+ return Error;
+}
+
+int test_isNormalized()
+{
+ int Error(0);
+
+ bool TestA = glm::isNormalized(glm::mat4(1), 0.00001f);
+ Error += TestA ? 0 : 1;
+
+ return Error;
+}
+
+int test_isOrthogonal()
+{
+ int Error(0);
+
+ bool TestA = glm::isOrthogonal(glm::mat4(1), 0.00001f);
+ Error += TestA ? 0 : 1;
+
+ return Error;
+}
+
+int main()
+{
+ int Error(0);
+
+ Error += test_isNull();
+ Error += test_isIdentity();
+ Error += test_isNormalized();
+ Error += test_isOrthogonal();
+
+ return Error;
+}
+
+
diff --git a/src/third_party/glm/test/gtx/gtx_matrix_transform_2d.cpp b/src/third_party/glm/test/gtx/gtx_matrix_transform_2d.cpp
new file mode 100644
index 0000000..836df7c
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_matrix_transform_2d.cpp
@@ -0,0 +1,8 @@
+#include <glm/gtx/matrix_transform_2d.hpp>
+
+int main()
+{
+ int Error(0);
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtx/gtx_mixed_product.cpp b/src/third_party/glm/test/gtx/gtx_mixed_product.cpp
new file mode 100644
index 0000000..ab59bb2
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_mixed_product.cpp
@@ -0,0 +1,18 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2013-10-25
+// Updated : 2013-10-25
+// Licence : This source is under MIT licence
+// File : test/gtx/associated_min_max.cpp
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+#include <glm/gtc/type_precision.hpp>
+#include <glm/gtx/associated_min_max.hpp>
+
+int main()
+{
+ int Error(0);
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtx/gtx_norm.cpp b/src/third_party/glm/test/gtx/gtx_norm.cpp
new file mode 100644
index 0000000..c088d92
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_norm.cpp
@@ -0,0 +1,8 @@
+#include <glm/gtx/norm.hpp>
+
+int main()
+{
+ int Error(0);
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtx/gtx_normal.cpp b/src/third_party/glm/test/gtx/gtx_normal.cpp
new file mode 100644
index 0000000..7526bc0
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_normal.cpp
@@ -0,0 +1,8 @@
+#include <glm/gtx/normal.hpp>
+
+int main()
+{
+ int Error(0);
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtx/gtx_normalize_dot.cpp b/src/third_party/glm/test/gtx/gtx_normalize_dot.cpp
new file mode 100644
index 0000000..36c9728
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_normalize_dot.cpp
@@ -0,0 +1,8 @@
+#include <glm/gtx/normalize_dot.hpp>
+
+int main()
+{
+ int Error(0);
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtx/gtx_number_precision.cpp b/src/third_party/glm/test/gtx/gtx_number_precision.cpp
new file mode 100644
index 0000000..555ad79
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_number_precision.cpp
@@ -0,0 +1,8 @@
+#include <glm/gtx/number_precision.hpp>
+
+int main()
+{
+ int Error(0);
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtx/gtx_optimum_pow.cpp b/src/third_party/glm/test/gtx/gtx_optimum_pow.cpp
new file mode 100644
index 0000000..a7b290b
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_optimum_pow.cpp
@@ -0,0 +1,8 @@
+#include <glm/gtx/optimum_pow.hpp>
+
+int main()
+{
+ int Error(0);
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtx/gtx_orthonormalize.cpp b/src/third_party/glm/test/gtx/gtx_orthonormalize.cpp
new file mode 100644
index 0000000..189e79f
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_orthonormalize.cpp
@@ -0,0 +1,8 @@
+#include <glm/gtx/orthonormalize.hpp>
+
+int main()
+{
+ int Error(0);
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtx/gtx_perpendicular.cpp b/src/third_party/glm/test/gtx/gtx_perpendicular.cpp
new file mode 100644
index 0000000..7e89ca9
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_perpendicular.cpp
@@ -0,0 +1,8 @@
+#include <glm/gtx/perpendicular.hpp>
+
+int main()
+{
+ int Error(0);
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtx/gtx_polar_coordinates.cpp b/src/third_party/glm/test/gtx/gtx_polar_coordinates.cpp
new file mode 100644
index 0000000..1ac5849
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_polar_coordinates.cpp
@@ -0,0 +1,8 @@
+#include <glm/gtx/polar_coordinates.hpp>
+
+int main()
+{
+ int Error(0);
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtx/gtx_projection.cpp b/src/third_party/glm/test/gtx/gtx_projection.cpp
new file mode 100644
index 0000000..d549adf
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_projection.cpp
@@ -0,0 +1,8 @@
+#include <glm/gtx/projection.hpp>
+
+int main()
+{
+ int Error(0);
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtx/gtx_quaternion.cpp b/src/third_party/glm/test/gtx/gtx_quaternion.cpp
new file mode 100644
index 0000000..d3938fb
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_quaternion.cpp
@@ -0,0 +1,102 @@
+#include <glm/gtc/epsilon.hpp>
+#include <glm/gtc/type_ptr.hpp>
+#include <glm/gtc/matrix_transform.hpp>
+#include <glm/gtx/transform.hpp>
+#include <glm/gtx/quaternion.hpp>
+#include <glm/gtx/compatibility.hpp>
+#include <glm/ext.hpp>
+
+int test_quat_fastMix()
+{
+ int Error = 0;
+
+ glm::quat A = glm::angleAxis(0.0f, glm::vec3(0, 0, 1));
+ glm::quat B = glm::angleAxis(glm::pi<float>() * 0.5f, glm::vec3(0, 0, 1));
+ glm::quat C = glm::fastMix(A, B, 0.5f);
+ glm::quat D = glm::angleAxis(glm::pi<float>() * 0.25f, glm::vec3(0, 0, 1));
+
+ Error += glm::epsilonEqual(C.x, D.x, 0.01f) ? 0 : 1;
+ Error += glm::epsilonEqual(C.y, D.y, 0.01f) ? 0 : 1;
+ Error += glm::epsilonEqual(C.z, D.z, 0.01f) ? 0 : 1;
+ Error += glm::epsilonEqual(C.w, D.w, 0.01f) ? 0 : 1;
+
+ return Error;
+}
+
+int test_quat_shortMix()
+{
+ int Error(0);
+
+ glm::quat A = glm::angleAxis(0.0f, glm::vec3(0, 0, 1));
+ glm::quat B = glm::angleAxis(glm::pi<float>() * 0.5f, glm::vec3(0, 0, 1));
+ glm::quat C = glm::shortMix(A, B, 0.5f);
+ glm::quat D = glm::angleAxis(glm::pi<float>() * 0.25f, glm::vec3(0, 0, 1));
+
+ Error += glm::epsilonEqual(C.x, D.x, 0.01f) ? 0 : 1;
+ Error += glm::epsilonEqual(C.y, D.y, 0.01f) ? 0 : 1;
+ Error += glm::epsilonEqual(C.z, D.z, 0.01f) ? 0 : 1;
+ Error += glm::epsilonEqual(C.w, D.w, 0.01f) ? 0 : 1;
+
+ return Error;
+}
+
+int test_orientation()
+{
+ int Error(0);
+
+ {
+ glm::quat q(1.0f, 0.0f, 0.0f, 1.0f);
+ float p = glm::roll(q);
+ }
+
+ {
+ glm::quat q(1.0f, 0.0f, 0.0f, 1.0f);
+ float p = glm::pitch(q);
+ }
+
+ {
+ glm::quat q(1.0f, 0.0f, 0.0f, 1.0f);
+ float p = glm::yaw(q);
+ }
+
+ return Error;
+}
+
+int test_rotation()
+{
+ int Error(0);
+
+ glm::vec3 v(1, 0, 0);
+ glm::vec3 u(0, 1, 0);
+
+ glm::quat Rotation = glm::rotation(v, u);
+
+ float Angle = glm::angle(Rotation);
+
+ Error += glm::abs(Angle - glm::pi<float>() * 0.5f) < glm::epsilon<float>() ? 0 : 1;
+
+ return Error;
+}
+
+int test_log()
+{
+ int Error(0);
+
+ glm::quat q;
+ glm::quat p = glm::log(q);
+ glm::quat r = glm::exp(p);
+
+ return Error;
+}
+
+int main()
+{
+ int Error(0);
+
+ Error += test_log();
+ Error += test_rotation();
+ Error += test_quat_fastMix();
+ Error += test_quat_shortMix();
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtx/gtx_random.cpp b/src/third_party/glm/test/gtx/gtx_random.cpp
new file mode 100644
index 0000000..e562c31
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_random.cpp
@@ -0,0 +1,99 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2011-05-31
+// Updated : 2011-05-31
+// Licence : This source is under MIT licence
+// File : test/gtx/random.cpp
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+#include <glm/glm.hpp>
+#include <glm/gtx/random.hpp>
+#include <glm/gtx/epsilon.hpp>
+#include <iostream>
+
+int test_signedRand1()
+{
+ int Error = 0;
+
+ {
+ float ResultFloat = 0.0f;
+ double ResultDouble = 0.0f;
+ for(std::size_t i = 0; i < 100000; ++i)
+ {
+ ResultFloat += glm::signedRand1<float>();
+ ResultDouble += glm::signedRand1<double>();
+ }
+
+ Error += glm::equalEpsilon(ResultFloat, 0.0f, 0.0001f);
+ Error += glm::equalEpsilon(ResultDouble, 0.0, 0.0001);
+ }
+
+ return Error;
+}
+
+int test_normalizedRand2()
+{
+ int Error = 0;
+
+ {
+ std::size_t Max = 100000;
+ float ResultFloat = 0.0f;
+ double ResultDouble = 0.0f;
+ for(std::size_t i = 0; i < Max; ++i)
+ {
+ ResultFloat += glm::length(glm::normalizedRand2<float>());
+ ResultDouble += glm::length(glm::normalizedRand2<double>());
+ }
+
+ Error += glm::equalEpsilon(ResultFloat, float(Max), 0.000001f) ? 0 : 1;
+ Error += glm::equalEpsilon(ResultDouble, double(Max), 0.000001) ? 0 : 1;
+ assert(!Error);
+ }
+
+ return Error;
+}
+
+int test_normalizedRand3()
+{
+ int Error = 0;
+
+ {
+ std::size_t Max = 100000;
+ float ResultFloatA = 0.0f;
+ float ResultFloatB = 0.0f;
+ float ResultFloatC = 0.0f;
+ double ResultDoubleA = 0.0f;
+ double ResultDoubleB = 0.0f;
+ double ResultDoubleC = 0.0f;
+ for(std::size_t i = 0; i < Max; ++i)
+ {
+ ResultFloatA += glm::length(glm::normalizedRand3<float>());
+ ResultDoubleA += glm::length(glm::normalizedRand3<double>());
+ ResultFloatB += glm::length(glm::normalizedRand3(2.0f, 2.0f));
+ ResultDoubleB += glm::length(glm::normalizedRand3(2.0, 2.0));
+ ResultFloatC += glm::length(glm::normalizedRand3(1.0f, 3.0f));
+ ResultDoubleC += glm::length(glm::normalizedRand3(1.0, 3.0));
+ }
+
+ Error += glm::equalEpsilon(ResultFloatA, float(Max), 0.0001f) ? 0 : 1;
+ Error += glm::equalEpsilon(ResultDoubleA, double(Max), 0.0001) ? 0 : 1;
+ Error += glm::equalEpsilon(ResultFloatB, float(Max * 2), 0.0001f) ? 0 : 1;
+ Error += glm::equalEpsilon(ResultDoubleB, double(Max * 2), 0.0001) ? 0 : 1;
+ Error += (ResultFloatC >= float(Max) && ResultFloatC <= float(Max * 3)) ? 0 : 1;
+ Error += (ResultDoubleC >= double(Max) && ResultDoubleC <= double(Max * 3)) ? 0 : 1;
+ }
+
+ return Error;
+}
+
+int main()
+{
+ int Error = 0;
+
+ Error += test_signedRand1();
+ Error += test_normalizedRand2();
+ Error += test_normalizedRand3();
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtx/gtx_range.cpp b/src/third_party/glm/test/gtx/gtx_range.cpp
new file mode 100644
index 0000000..77c4792
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_range.cpp
@@ -0,0 +1,52 @@
+#include <glm/glm.hpp>
+#include <glm/gtc/epsilon.hpp>
+
+#if GLM_HAS_RANGE_FOR
+
+#include <glm/gtx/range.hpp>
+
+int testVec()
+{
+ int Error(0);
+ glm::vec3 v(1, 2, 3);
+
+ int count = 0;
+ for(float x : v){ count++; }
+ Error += count == 3 ? 0 : 1;
+
+ for(float& x : v){ x = 0; }
+ Error += glm::all(glm::equal(v, glm::vec3(0, 0, 0))) ? 0 : 1;
+ return Error;
+}
+
+int testMat()
+{
+ int Error(0);
+ glm::mat4x3 m(1);
+
+ int count = 0;
+ for(float x : m){ count++; }
+ Error += count == 12 ? 0 : 1;
+
+ for(float& x : m){ x = 0; }
+ glm::vec4 v(1, 1, 1, 1);
+ Error += glm::all(glm::equal(m*v, glm::vec3(0, 0, 0))) ? 0 : 1;
+ return Error;
+}
+
+int main()
+{
+ int Error(0);
+ Error += testVec();
+ Error += testMat();
+ return Error;
+}
+
+#else
+
+int main()
+{
+ return 0;
+}
+
+#endif//GLM_HAS_RANGE_FOR
diff --git a/src/third_party/glm/test/gtx/gtx_rotate_normalized_axis.cpp b/src/third_party/glm/test/gtx/gtx_rotate_normalized_axis.cpp
new file mode 100644
index 0000000..7dca228
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_rotate_normalized_axis.cpp
@@ -0,0 +1,8 @@
+#include <glm/gtx/rotate_normalized_axis.hpp>
+
+int main()
+{
+ int Error(0);
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtx/gtx_rotate_vector.cpp b/src/third_party/glm/test/gtx/gtx_rotate_vector.cpp
new file mode 100644
index 0000000..44935b3
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_rotate_vector.cpp
@@ -0,0 +1,75 @@
+#include <glm/gtc/constants.hpp>
+#include <glm/gtx/rotate_vector.hpp>
+
+int test_rotate()
+{
+ int Error = 0;
+
+ glm::vec2 A = glm::rotate(glm::vec2(1, 0), glm::pi<float>() * 0.5f);
+ glm::vec3 B = glm::rotate(glm::vec3(1, 0, 0), glm::pi<float>() * 0.5f, glm::vec3(0, 0, 1));
+ glm::vec4 C = glm::rotate(glm::vec4(1, 0, 0, 1), glm::pi<float>() * 0.5f, glm::vec3(0, 0, 1));
+ glm::vec3 D = glm::rotateX(glm::vec3(1, 0, 0), glm::pi<float>() * 0.5f);
+ glm::vec4 E = glm::rotateX(glm::vec4(1, 0, 0, 1), glm::pi<float>() * 0.5f);
+ glm::vec3 F = glm::rotateY(glm::vec3(1, 0, 0), glm::pi<float>() * 0.5f);
+ glm::vec4 G = glm::rotateY(glm::vec4(1, 0, 0, 1), glm::pi<float>() * 0.5f);
+ glm::vec3 H = glm::rotateZ(glm::vec3(1, 0, 0), glm::pi<float>() * 0.5f);
+ glm::vec4 I = glm::rotateZ(glm::vec4(1, 0, 0,1 ), glm::pi<float>() * 0.5f);
+ glm::mat4 O = glm::orientation(glm::normalize(glm::vec3(1)), glm::vec3(0, 0, 1));
+
+ return Error;
+}
+
+int test_rotateX()
+{
+ int Error = 0;
+
+ glm::vec3 D = glm::rotateX(glm::vec3(1, 0, 0), glm::pi<float>() * 0.5f);
+ glm::vec4 E = glm::rotateX(glm::vec4(1, 0, 0, 1), glm::pi<float>() * 0.5f);
+
+ return Error;
+}
+
+int test_rotateY()
+{
+ int Error = 0;
+
+ glm::vec3 F = glm::rotateY(glm::vec3(1, 0, 0), glm::pi<float>() * 0.5f);
+ glm::vec4 G = glm::rotateY(glm::vec4(1, 0, 0, 1), glm::pi<float>() * 0.5f);
+
+ return Error;
+}
+
+
+int test_rotateZ()
+{
+ int Error = 0;
+
+ glm::vec3 H = glm::rotateZ(glm::vec3(1, 0, 0), glm::pi<float>() * 0.5f);
+ glm::vec4 I = glm::rotateZ(glm::vec4(1, 0, 0,1 ), glm::pi<float>() * 0.5f);
+
+ return Error;
+}
+
+int test_orientation()
+{
+ int Error = 0;
+
+ glm::mat4 O = glm::orientation(glm::normalize(glm::vec3(1)), glm::vec3(0, 0, 1));
+
+ return Error;
+}
+
+int main()
+{
+ int Error = 0;
+
+ Error += test_rotate();
+ Error += test_rotateX();
+ Error += test_rotateY();
+ Error += test_rotateZ();
+ Error += test_orientation();
+
+ return Error;
+}
+
+
diff --git a/src/third_party/glm/test/gtx/gtx_scalar_multiplication.cpp b/src/third_party/glm/test/gtx/gtx_scalar_multiplication.cpp
new file mode 100644
index 0000000..0a1adf0
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_scalar_multiplication.cpp
@@ -0,0 +1,34 @@
+#include <glm/glm.hpp>
+
+#if GLM_HAS_TEMPLATE_ALIASES && !(GLM_COMPILER & GLM_COMPILER_GCC)
+#include <glm/gtx/scalar_multiplication.hpp>
+
+int main()
+{
+ int Error(0);
+ glm::vec3 v(0.5, 3.1, -9.1);
+
+ Error += glm::all(glm::equal(v, 1.0 * v)) ? 0 : 1;
+ Error += glm::all(glm::equal(v, 1 * v)) ? 0 : 1;
+ Error += glm::all(glm::equal(v, 1u * v)) ? 0 : 1;
+
+ glm::mat3 m(1, 2, 3, 4, 5, 6, 7, 8, 9);
+ glm::vec3 w = 0.5f * m * v;
+
+ Error += glm::all(glm::equal((m*v)/2, w)) ? 0 : 1;
+ Error += glm::all(glm::equal(m*(v/2), w)) ? 0 : 1;
+ Error += glm::all(glm::equal((m/2)*v, w)) ? 0 : 1;
+ Error += glm::all(glm::equal((0.5*m)*v, w)) ? 0 : 1;
+ Error += glm::all(glm::equal(0.5*(m*v), w)) ? 0 : 1;
+
+ return Error;
+}
+
+#else
+
+int main()
+{
+ return 0;
+}
+
+#endif
diff --git a/src/third_party/glm/test/gtx/gtx_scalar_relational.cpp b/src/third_party/glm/test/gtx/gtx_scalar_relational.cpp
new file mode 100644
index 0000000..a526b0e
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_scalar_relational.cpp
@@ -0,0 +1,170 @@
+#include <glm/glm.hpp>
+#include <glm/gtx/scalar_relational.hpp>
+#include <cstdio>
+
+int test_lessThan()
+{
+ int Error(0);
+
+ Error += glm::lessThan(0, 1) ? 0 : 1;
+ Error += glm::lessThan(1, 0) ? 1 : 0;
+ Error += glm::lessThan(0, 0) ? 1 : 0;
+ Error += glm::lessThan(1, 1) ? 1 : 0;
+ Error += glm::lessThan(0.0f, 1.0f) ? 0 : 1;
+ Error += glm::lessThan(1.0f, 0.0f) ? 1 : 0;
+ Error += glm::lessThan(0.0f, 0.0f) ? 1 : 0;
+ Error += glm::lessThan(1.0f, 1.0f) ? 1 : 0;
+ Error += glm::lessThan(0.0, 1.0) ? 0 : 1;
+ Error += glm::lessThan(1.0, 0.0) ? 1 : 0;
+ Error += glm::lessThan(0.0, 0.0) ? 1 : 0;
+ Error += glm::lessThan(1.0, 1.0) ? 1 : 0;
+
+ return Error;
+}
+
+int test_lessThanEqual()
+{
+ int Error(0);
+
+ Error += glm::lessThanEqual(0, 1) ? 0 : 1;
+ Error += glm::lessThanEqual(1, 0) ? 1 : 0;
+ Error += glm::lessThanEqual(0, 0) ? 0 : 1;
+ Error += glm::lessThanEqual(1, 1) ? 0 : 1;
+ Error += glm::lessThanEqual(0.0f, 1.0f) ? 0 : 1;
+ Error += glm::lessThanEqual(1.0f, 0.0f) ? 1 : 0;
+ Error += glm::lessThanEqual(0.0f, 0.0f) ? 0 : 1;
+ Error += glm::lessThanEqual(1.0f, 1.0f) ? 0 : 1;
+ Error += glm::lessThanEqual(0.0, 1.0) ? 0 : 1;
+ Error += glm::lessThanEqual(1.0, 0.0) ? 1 : 0;
+ Error += glm::lessThanEqual(0.0, 0.0) ? 0 : 1;
+ Error += glm::lessThanEqual(1.0, 1.0) ? 0 : 1;
+
+ return Error;
+}
+
+int test_greaterThan()
+{
+ int Error(0);
+
+ Error += glm::greaterThan(0, 1) ? 1 : 0;
+ Error += glm::greaterThan(1, 0) ? 0 : 1;
+ Error += glm::greaterThan(0, 0) ? 1 : 0;
+ Error += glm::greaterThan(1, 1) ? 1 : 0;
+ Error += glm::greaterThan(0.0f, 1.0f) ? 1 : 0;
+ Error += glm::greaterThan(1.0f, 0.0f) ? 0 : 1;
+ Error += glm::greaterThan(0.0f, 0.0f) ? 1 : 0;
+ Error += glm::greaterThan(1.0f, 1.0f) ? 1 : 0;
+ Error += glm::greaterThan(0.0, 1.0) ? 1 : 0;
+ Error += glm::greaterThan(1.0, 0.0) ? 0 : 1;
+ Error += glm::greaterThan(0.0, 0.0) ? 1 : 0;
+ Error += glm::greaterThan(1.0, 1.0) ? 1 : 0;
+
+ return Error;
+}
+
+int test_greaterThanEqual()
+{
+ int Error(0);
+
+ Error += glm::greaterThanEqual(0, 1) ? 1 : 0;
+ Error += glm::greaterThanEqual(1, 0) ? 0 : 1;
+ Error += glm::greaterThanEqual(0, 0) ? 0 : 1;
+ Error += glm::greaterThanEqual(1, 1) ? 0 : 1;
+ Error += glm::greaterThanEqual(0.0f, 1.0f) ? 1 : 0;
+ Error += glm::greaterThanEqual(1.0f, 0.0f) ? 0 : 1;
+ Error += glm::greaterThanEqual(0.0f, 0.0f) ? 0 : 1;
+ Error += glm::greaterThanEqual(1.0f, 1.0f) ? 0 : 1;
+ Error += glm::greaterThanEqual(0.0, 1.0) ? 1 : 0;
+ Error += glm::greaterThanEqual(1.0, 0.0) ? 0 : 1;
+ Error += glm::greaterThanEqual(0.0, 0.0) ? 0 : 1;
+ Error += glm::greaterThanEqual(1.0, 1.0) ? 0 : 1;
+
+ return Error;
+}
+
+int test_equal()
+{
+ int Error(0);
+
+ Error += glm::equal(0, 1) ? 1 : 0;
+ Error += glm::equal(1, 0) ? 1 : 0;
+ Error += glm::equal(0, 0) ? 0 : 1;
+ Error += glm::equal(1, 1) ? 0 : 1;
+ Error += glm::equal(0.0f, 1.0f) ? 1 : 0;
+ Error += glm::equal(1.0f, 0.0f) ? 1 : 0;
+ Error += glm::equal(0.0f, 0.0f) ? 0 : 1;
+ Error += glm::equal(1.0f, 1.0f) ? 0 : 1;
+ Error += glm::equal(0.0, 1.0) ? 1 : 0;
+ Error += glm::equal(1.0, 0.0) ? 1 : 0;
+ Error += glm::equal(0.0, 0.0) ? 0 : 1;
+ Error += glm::equal(1.0, 1.0) ? 0 : 1;
+
+ return Error;
+}
+
+int test_notEqual()
+{
+ int Error(0);
+
+ Error += glm::notEqual(0, 1) ? 0 : 1;
+ Error += glm::notEqual(1, 0) ? 0 : 1;
+ Error += glm::notEqual(0, 0) ? 1 : 0;
+ Error += glm::notEqual(1, 1) ? 1 : 0;
+ Error += glm::notEqual(0.0f, 1.0f) ? 0 : 1;
+ Error += glm::notEqual(1.0f, 0.0f) ? 0 : 1;
+ Error += glm::notEqual(0.0f, 0.0f) ? 1 : 0;
+ Error += glm::notEqual(1.0f, 1.0f) ? 1 : 0;
+ Error += glm::notEqual(0.0, 1.0) ? 0 : 1;
+ Error += glm::notEqual(1.0, 0.0) ? 0 : 1;
+ Error += glm::notEqual(0.0, 0.0) ? 1 : 0;
+ Error += glm::notEqual(1.0, 1.0) ? 1 : 0;
+
+ return Error;
+}
+
+int test_any()
+{
+ int Error(0);
+
+ Error += glm::any(true) ? 0 : 1;
+ Error += glm::any(false) ? 1 : 0;
+
+ return Error;
+}
+
+int test_all()
+{
+ int Error(0);
+
+ Error += glm::all(true) ? 0 : 1;
+ Error += glm::all(false) ? 1 : 0;
+
+ return Error;
+}
+
+int test_not()
+{
+ int Error(0);
+
+ Error += glm::not_(true) ? 1 : 0;
+ Error += glm::not_(false) ? 0 : 1;
+
+ return Error;
+}
+
+int main()
+{
+ int Error = 0;
+
+ Error += test_lessThan();
+ Error += test_lessThanEqual();
+ Error += test_greaterThan();
+ Error += test_greaterThanEqual();
+ Error += test_equal();
+ Error += test_notEqual();
+ Error += test_any();
+ Error += test_all();
+ Error += test_not();
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtx/gtx_simd_mat4.cpp b/src/third_party/glm/test/gtx/gtx_simd_mat4.cpp
new file mode 100644
index 0000000..28d7ec5
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_simd_mat4.cpp
@@ -0,0 +1,324 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// Restrictions:
+/// By making use of the Software for military purposes, you choose to make
+/// a Bunny unhappy.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @file test/gtx/gtx_simd_mat4.cpp
+/// @date 2010-09-16 / 2014-11-25
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+#include <glm/glm.hpp>
+#include <glm/gtc/matrix_transform.hpp>
+#include <glm/gtc/quaternion.hpp>
+#include <glm/gtc/random.hpp>
+#include <glm/gtx/simd_vec4.hpp>
+#include <glm/gtx/simd_mat4.hpp>
+#include <cstdio>
+#include <ctime>
+#include <vector>
+
+#if(GLM_ARCH != GLM_ARCH_PURE)
+
+std::vector<float> test_detA(std::vector<glm::mat4> const & Data)
+{
+ std::vector<float> Test(Data.size());
+
+ std::clock_t TimeStart = clock();
+
+ for(std::size_t i = 0; i < Test.size() - 1; ++i)
+ Test[i] = glm::determinant(Data[i]);
+
+ std::clock_t TimeEnd = clock();
+ printf("Det A: %ld\n", TimeEnd - TimeStart);
+
+ return Test;
+}
+
+std::vector<float> test_detB(std::vector<glm::mat4> const & Data)
+{
+ std::vector<float> Test(Data.size());
+
+ std::clock_t TimeStart = clock();
+
+ for(std::size_t i = 0; i < Test.size() - 1; ++i)
+ {
+ _mm_prefetch((char*)&Data[i + 1], _MM_HINT_T0);
+ glm::simdMat4 m(Data[i]);
+ glm::simdVec4 d(glm::detail::sse_slow_det_ps((__m128 const * const)&m));
+ glm::vec4 v;//(d);
+ Test[i] = v.x;
+ }
+
+ std::clock_t TimeEnd = clock();
+ printf("Det B: %ld\n", TimeEnd - TimeStart);
+
+ return Test;
+}
+
+std::vector<float> test_detC(std::vector<glm::mat4> const & Data)
+{
+ std::vector<float> Test(Data.size());
+
+ std::clock_t TimeStart = clock();
+
+ for(std::size_t i = 0; i < Test.size() - 1; ++i)
+ {
+ _mm_prefetch((char*)&Data[i + 1], _MM_HINT_T0);
+ glm::simdMat4 m(Data[i]);
+ glm::simdVec4 d(glm::detail::sse_det_ps((__m128 const * const)&m));
+ glm::vec4 v;//(d);
+ Test[i] = v.x;
+ }
+
+ std::clock_t TimeEnd = clock();
+ printf("Det C: %ld\n", TimeEnd - TimeStart);
+
+ return Test;
+}
+
+std::vector<float> test_detD(std::vector<glm::mat4> const & Data)
+{
+ std::vector<float> Test(Data.size());
+
+ std::clock_t TimeStart = clock();
+
+ for(std::size_t i = 0; i < Test.size() - 1; ++i)
+ {
+ _mm_prefetch((char*)&Data[i + 1], _MM_HINT_T0);
+ glm::simdMat4 m(Data[i]);
+ glm::simdVec4 d(glm::detail::sse_detd_ps((__m128 const * const)&m));
+ glm::vec4 v;//(d);
+ Test[i] = v.x;
+ }
+
+ std::clock_t TimeEnd = clock();
+ printf("Det D: %ld\n", TimeEnd - TimeStart);
+
+ return Test;
+}
+
+void test_invA(std::vector<glm::mat4> const & Data, std::vector<glm::mat4> & Out)
+{
+ //std::vector<float> Test(Data.size());
+ Out.resize(Data.size());
+
+ std::clock_t TimeStart = clock();
+
+ for(std::size_t i = 0; i < Out.size() - 1; ++i)
+ {
+ Out[i] = glm::inverse(Data[i]);
+ }
+
+ std::clock_t TimeEnd = clock();
+ printf("Inv A: %ld\n", TimeEnd - TimeStart);
+}
+
+void test_invC(std::vector<glm::mat4> const & Data, std::vector<glm::mat4> & Out)
+{
+ //std::vector<float> Test(Data.size());
+ Out.resize(Data.size());
+
+ std::clock_t TimeStart = clock();
+
+ for(std::size_t i = 0; i < Out.size() - 1; ++i)
+ {
+ _mm_prefetch((char*)&Data[i + 1], _MM_HINT_T0);
+ glm::simdMat4 m(Data[i]);
+ glm::simdMat4 o;
+ glm::detail::sse_inverse_fast_ps((__m128 const * const)&m, (__m128 *)&o);
+ Out[i] = *(glm::mat4*)&o;
+ }
+
+ std::clock_t TimeEnd = clock();
+ printf("Inv C: %ld\n", TimeEnd - TimeStart);
+}
+
+void test_invD(std::vector<glm::mat4> const & Data, std::vector<glm::mat4> & Out)
+{
+ //std::vector<float> Test(Data.size());
+ Out.resize(Data.size());
+
+ std::clock_t TimeStart = clock();
+
+ for(std::size_t i = 0; i < Out.size() - 1; ++i)
+ {
+ _mm_prefetch((char*)&Data[i + 1], _MM_HINT_T0);
+ glm::simdMat4 m(Data[i]);
+ glm::simdMat4 o;
+ glm::detail::sse_inverse_ps((__m128 const * const)&m, (__m128 *)&o);
+ Out[i] = *(glm::mat4*)&o;
+ }
+
+ std::clock_t TimeEnd = clock();
+ printf("Inv D: %ld\n", TimeEnd - TimeStart);
+}
+
+void test_mulA(std::vector<glm::mat4> const & Data, std::vector<glm::mat4> & Out)
+{
+ //std::vector<float> Test(Data.size());
+ Out.resize(Data.size());
+
+ std::clock_t TimeStart = clock();
+
+ for(std::size_t i = 0; i < Out.size() - 1; ++i)
+ {
+ Out[i] = Data[i] * Data[i];
+ }
+
+ std::clock_t TimeEnd = clock();
+ printf("Mul A: %ld\n", TimeEnd - TimeStart);
+}
+
+void test_mulD(std::vector<glm::mat4> const & Data, std::vector<glm::mat4> & Out)
+{
+ //std::vector<float> Test(Data.size());
+ Out.resize(Data.size());
+
+ std::clock_t TimeStart = clock();
+
+ for(std::size_t i = 0; i < Out.size() - 1; ++i)
+ {
+ _mm_prefetch((char*)&Data[i + 1], _MM_HINT_T0);
+ glm::simdMat4 m(Data[i]);
+ glm::simdMat4 o;
+ glm::detail::sse_mul_ps((__m128 const * const)&m, (__m128 const * const)&m, (__m128*)&o);
+ Out[i] = *(glm::mat4*)&o;
+ }
+
+ std::clock_t TimeEnd = clock();
+ printf("Mul D: %ld\n", TimeEnd - TimeStart);
+}
+
+int test_compute_glm()
+{
+ return 0;
+}
+
+int test_compute_gtx()
+{
+ std::vector<glm::vec4> Output(1000000);
+
+ std::clock_t TimeStart = clock();
+
+ for(std::size_t k = 0; k < Output.size(); ++k)
+ {
+ float i = float(k) / 1000.f + 0.001f;
+ glm::vec3 A = glm::normalize(glm::vec3(i));
+ glm::vec3 B = glm::cross(A, glm::normalize(glm::vec3(1, 1, 2)));
+ glm::mat4 C = glm::rotate(glm::mat4(1.0f), i, B);
+ glm::mat4 D = glm::scale(C, glm::vec3(0.8f, 1.0f, 1.2f));
+ glm::mat4 E = glm::translate(D, glm::vec3(1.4f, 1.2f, 1.1f));
+ glm::mat4 F = glm::perspective(i, 1.5f, 0.1f, 1000.f);
+ glm::mat4 G = glm::inverse(F * E);
+ glm::vec3 H = glm::unProject(glm::vec3(i), G, F, E[3]);
+ glm::vec3 I = glm::any(glm::isnan(glm::project(H, G, F, E[3]))) ? glm::vec3(2) : glm::vec3(1);
+ glm::mat4 J = glm::lookAt(glm::normalize(glm::max(B, glm::vec3(0.001f))), H, I);
+ glm::mat4 K = glm::transpose(J);
+ glm::quat L = glm::normalize(glm::quat_cast(K));
+ glm::vec4 M = L * glm::smoothstep(K[3], J[3], glm::vec4(i));
+ glm::mat4 N = glm::mat4(glm::normalize(glm::max(M, glm::vec4(0.001f))), K[3], J[3], glm::vec4(i));
+ glm::mat4 O = N * glm::inverse(N);
+ glm::vec4 P = O * glm::reflect(N[3], glm::vec4(A, 1.0f));
+ glm::vec4 Q = glm::vec4(glm::dot(M, P));
+ glm::vec4 R = glm::quat(Q.w, glm::vec3(Q)) * P;
+ Output[k] = R;
+ }
+
+ std::clock_t TimeEnd = clock();
+ printf("test_compute_gtx: %ld\n", TimeEnd - TimeStart);
+
+ return 0;
+}
+
+int main()
+{
+ int Error = 0;
+
+ std::vector<glm::mat4> Data(64 * 64 * 1);
+ for(std::size_t i = 0; i < Data.size(); ++i)
+ Data[i] = glm::mat4(
+ glm::vec4(glm::linearRand(glm::vec4(-2.0f), glm::vec4(2.0f))),
+ glm::vec4(glm::linearRand(glm::vec4(-2.0f), glm::vec4(2.0f))),
+ glm::vec4(glm::linearRand(glm::vec4(-2.0f), glm::vec4(2.0f))),
+ glm::vec4(glm::linearRand(glm::vec4(-2.0f), glm::vec4(2.0f))));
+
+ {
+ std::vector<glm::mat4> TestInvA;
+ test_invA(Data, TestInvA);
+ }
+ {
+ std::vector<glm::mat4> TestInvC;
+ test_invC(Data, TestInvC);
+ }
+ {
+ std::vector<glm::mat4> TestInvD;
+ test_invD(Data, TestInvD);
+ }
+
+ {
+ std::vector<glm::mat4> TestA;
+ test_mulA(Data, TestA);
+ }
+ {
+ std::vector<glm::mat4> TestD;
+ test_mulD(Data, TestD);
+ }
+
+ {
+ std::vector<float> TestDetA = test_detA(Data);
+ std::vector<float> TestDetB = test_detB(Data);
+ std::vector<float> TestDetD = test_detD(Data);
+ std::vector<float> TestDetC = test_detC(Data);
+
+ for(std::size_t i = 0; i < TestDetA.size(); ++i)
+ if(TestDetA[i] != TestDetB[i] && TestDetC[i] != TestDetB[i] && TestDetC[i] != TestDetD[i])
+ return 1;
+ }
+
+ // shuffle test
+ glm::simdVec4 A(1.0f, 2.0f, 3.0f, 4.0f);
+ glm::simdVec4 B(5.0f, 6.0f, 7.0f, 8.0f);
+ //__m128 C = _mm_shuffle_ps(A.Data, B.Data, _MM_SHUFFLE(1, 0, 1, 0));
+
+ Error += test_compute_glm();
+ Error += test_compute_gtx();
+ float Det = glm::determinant(glm::simdMat4(1.0));
+ Error += Det == 1.0f ? 0 : 1;
+
+ glm::simdMat4 D = glm::matrixCompMult(glm::simdMat4(1.0), glm::simdMat4(1.0));
+
+ return Error;
+}
+
+#else
+
+int main()
+{
+ int Error = 0;
+
+ return Error;
+}
+
+#endif//(GLM_ARCH != GLM_ARCH_PURE)
diff --git a/src/third_party/glm/test/gtx/gtx_simd_vec4.cpp b/src/third_party/glm/test/gtx/gtx_simd_vec4.cpp
new file mode 100644
index 0000000..e71a60b
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_simd_vec4.cpp
@@ -0,0 +1,71 @@
+///////////////////////////////////////////////////////////////////////////////////
+/// OpenGL Mathematics (glm.g-truc.net)
+///
+/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net)
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to deal
+/// in the Software without restriction, including without limitation the rights
+/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+/// copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in
+/// all copies or substantial portions of the Software.
+///
+/// Restrictions:
+/// By making use of the Software for military purposes, you choose to make
+/// a Bunny unhappy.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+/// THE SOFTWARE.
+///
+/// @file test/gtx/gtx_simd_vec4.cpp
+/// @date 2010-09-16 / 2014-11-25
+/// @author Christophe Riccio
+///////////////////////////////////////////////////////////////////////////////////
+
+#include <glm/glm.hpp>
+#include <glm/gtx/simd_vec4.hpp>
+#include <cstdio>
+
+#if(GLM_ARCH != GLM_ARCH_PURE)
+
+int main()
+{
+ glm::simdVec4 A1(0.0f, 0.1f, 0.2f, 0.3f);
+ glm::simdVec4 B1(0.4f, 0.5f, 0.6f, 0.7f);
+ glm::simdVec4 C1 = A1 + B1;
+ glm::simdVec4 D1 = A1.swizzle<glm::X, glm::Z, glm::Y, glm::W>();
+ glm::simdVec4 E1(glm::vec4(1.0f));
+ glm::vec4 F1 = glm::vec4_cast(E1);
+ //glm::vec4 G1(E1);
+
+ //printf("A1(%2.3f, %2.3f, %2.3f, %2.3f)\n", A1.x, A1.y, A1.z, A1.w);
+ //printf("B1(%2.3f, %2.3f, %2.3f, %2.3f)\n", B1.x, B1.y, B1.z, B1.w);
+ //printf("C1(%2.3f, %2.3f, %2.3f, %2.3f)\n", C1.x, C1.y, C1.z, C1.w);
+ //printf("D1(%2.3f, %2.3f, %2.3f, %2.3f)\n", D1.x, D1.y, D1.z, D1.w);
+
+ __m128 value = _mm_set1_ps(0.0f);
+ __m128 data = _mm_cmpeq_ps(value, value);
+ __m128 add0 = _mm_add_ps(data, data);
+
+ glm::simdVec4 GNI(add0);
+
+ return 0;
+}
+
+#else
+
+int main()
+{
+ int Error = 0;
+
+ return Error;
+}
+
+#endif//(GLM_ARCH != GLM_ARCH_PURE)
diff --git a/src/third_party/glm/test/gtx/gtx_spline.cpp b/src/third_party/glm/test/gtx/gtx_spline.cpp
new file mode 100644
index 0000000..38ed548
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_spline.cpp
@@ -0,0 +1,99 @@
+#include <glm/vec2.hpp>
+#include <glm/vec3.hpp>
+#include <glm/vec4.hpp>
+#include <glm/gtx/spline.hpp>
+
+namespace catmullRom
+{
+ int test()
+ {
+ int Error(0);
+
+ glm::vec2 Result2 = glm::catmullRom(
+ glm::vec2(0.0f, 0.0f),
+ glm::vec2(1.0f, 0.0f),
+ glm::vec2(1.0f, 1.0f),
+ glm::vec2(0.0f, 1.0f), 0.5f);
+
+ glm::vec3 Result3 = glm::catmullRom(
+ glm::vec3(0.0f, 0.0f, 0.0f),
+ glm::vec3(1.0f, 0.0f, 0.0f),
+ glm::vec3(1.0f, 1.0f, 0.0f),
+ glm::vec3(0.0f, 1.0f, 0.0f), 0.5f);
+
+ glm::vec4 Result4 = glm::catmullRom(
+ glm::vec4(0.0f, 0.0f, 0.0f, 1.0f),
+ glm::vec4(1.0f, 0.0f, 0.0f, 1.0f),
+ glm::vec4(1.0f, 1.0f, 0.0f, 1.0f),
+ glm::vec4(0.0f, 1.0f, 0.0f, 1.0f), 0.5f);
+
+ return Error;
+ }
+}//catmullRom
+
+namespace hermite
+{
+ int test()
+ {
+ int Error(0);
+
+ glm::vec2 Result2 = glm::hermite(
+ glm::vec2(0.0f, 0.0f),
+ glm::vec2(1.0f, 0.0f),
+ glm::vec2(1.0f, 1.0f),
+ glm::vec2(0.0f, 1.0f), 0.5f);
+
+ glm::vec3 Result3 = glm::hermite(
+ glm::vec3(0.0f, 0.0f, 0.0f),
+ glm::vec3(1.0f, 0.0f, 0.0f),
+ glm::vec3(1.0f, 1.0f, 0.0f),
+ glm::vec3(0.0f, 1.0f, 0.0f), 0.5f);
+
+ glm::vec4 Result4 = glm::hermite(
+ glm::vec4(0.0f, 0.0f, 0.0f, 1.0f),
+ glm::vec4(1.0f, 0.0f, 0.0f, 1.0f),
+ glm::vec4(1.0f, 1.0f, 0.0f, 1.0f),
+ glm::vec4(0.0f, 1.0f, 0.0f, 1.0f), 0.5f);
+
+ return Error;
+ }
+}//catmullRom
+
+namespace cubic
+{
+ int test()
+ {
+ int Error(0);
+
+ glm::vec2 Result2 = glm::cubic(
+ glm::vec2(0.0f, 0.0f),
+ glm::vec2(1.0f, 0.0f),
+ glm::vec2(1.0f, 1.0f),
+ glm::vec2(0.0f, 1.0f), 0.5f);
+
+ glm::vec3 Result3 = glm::cubic(
+ glm::vec3(0.0f, 0.0f, 0.0f),
+ glm::vec3(1.0f, 0.0f, 0.0f),
+ glm::vec3(1.0f, 1.0f, 0.0f),
+ glm::vec3(0.0f, 1.0f, 0.0f), 0.5f);
+
+ glm::vec4 Result = glm::cubic(
+ glm::vec4(0.0f, 0.0f, 0.0f, 1.0f),
+ glm::vec4(1.0f, 0.0f, 0.0f, 1.0f),
+ glm::vec4(1.0f, 1.0f, 0.0f, 1.0f),
+ glm::vec4(0.0f, 1.0f, 0.0f, 1.0f), 0.5f);
+
+ return Error;
+ }
+}//catmullRom
+
+int main()
+{
+ int Error(0);
+
+ Error += catmullRom::test();
+ Error += hermite::test();
+ Error += cubic::test();
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtx/gtx_string_cast.cpp b/src/third_party/glm/test/gtx/gtx_string_cast.cpp
new file mode 100644
index 0000000..94af4ec
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_string_cast.cpp
@@ -0,0 +1,128 @@
+#include <glm/glm.hpp>
+#include <glm/gtx/string_cast.hpp>
+#include <limits>
+
+int test_string_cast_vector()
+{
+ int Error = 0;
+
+ {
+ glm::vec2 A1(1, 2);
+ std::string A2 = glm::to_string(A1);
+ Error += A2 != std::string("vec2(1.000000, 2.000000)") ? 1 : 0;
+
+ glm::vec3 B1(1, 2, 3);
+ std::string B2 = glm::to_string(B1);
+ Error += B2 != std::string("vec3(1.000000, 2.000000, 3.000000)") ? 1 : 0;
+
+ glm::vec4 C1(1, 2, 3, 4);
+ std::string C2 = glm::to_string(C1);
+ Error += C2 != std::string("vec4(1.000000, 2.000000, 3.000000, 4.000000)") ? 1 : 0;
+
+ glm::dvec2 J1(1, 2);
+ std::string J2 = glm::to_string(J1);
+ Error += J2 != std::string("dvec2(1.000000, 2.000000)") ? 1 : 0;
+
+ glm::dvec3 K1(1, 2, 3);
+ std::string K2 = glm::to_string(K1);
+ Error += K2 != std::string("dvec3(1.000000, 2.000000, 3.000000)") ? 1 : 0;
+
+ glm::dvec4 L1(1, 2, 3, 4);
+ std::string L2 = glm::to_string(L1);
+ Error += L2 != std::string("dvec4(1.000000, 2.000000, 3.000000, 4.000000)") ? 1 : 0;
+ }
+
+ {
+ glm::bvec2 M1(false, true);
+ std::string M2 = glm::to_string(M1);
+ Error += M2 != std::string("bvec2(false, true)") ? 1 : 0;
+
+ glm::bvec3 O1(false, true, false);
+ std::string O2 = glm::to_string(O1);
+ Error += O2 != std::string("bvec3(false, true, false)") ? 1 : 0;
+
+ glm::bvec4 P1(false, true, false, true);
+ std::string P2 = glm::to_string(P1);
+ Error += P2 != std::string("bvec4(false, true, false, true)") ? 1 : 0;
+ }
+
+ {
+ glm::ivec2 D1(1, 2);
+ std::string D2 = glm::to_string(D1);
+ Error += D2 != std::string("ivec2(1, 2)") ? 1 : 0;
+
+ glm::ivec3 E1(1, 2, 3);
+ std::string E2 = glm::to_string(E1);
+ Error += E2 != std::string("ivec3(1, 2, 3)") ? 1 : 0;
+
+ glm::ivec4 F1(1, 2, 3, 4);
+ std::string F2 = glm::to_string(F1);
+ Error += F2 != std::string("ivec4(1, 2, 3, 4)") ? 1 : 0;
+ }
+
+ {
+ glm::i8vec2 D1(1, 2);
+ std::string D2 = glm::to_string(D1);
+ Error += D2 != std::string("i8vec2(1, 2)") ? 1 : 0;
+
+ glm::i8vec3 E1(1, 2, 3);
+ std::string E2 = glm::to_string(E1);
+ Error += E2 != std::string("i8vec3(1, 2, 3)") ? 1 : 0;
+
+ glm::i8vec4 F1(1, 2, 3, 4);
+ std::string F2 = glm::to_string(F1);
+ Error += F2 != std::string("i8vec4(1, 2, 3, 4)") ? 1 : 0;
+ }
+
+ {
+ glm::i16vec2 D1(1, 2);
+ std::string D2 = glm::to_string(D1);
+ Error += D2 != std::string("i16vec2(1, 2)") ? 1 : 0;
+
+ glm::i16vec3 E1(1, 2, 3);
+ std::string E2 = glm::to_string(E1);
+ Error += E2 != std::string("i16vec3(1, 2, 3)") ? 1 : 0;
+
+ glm::i16vec4 F1(1, 2, 3, 4);
+ std::string F2 = glm::to_string(F1);
+ Error += F2 != std::string("i16vec4(1, 2, 3, 4)") ? 1 : 0;
+ }
+
+ {
+ glm::i64vec2 D1(1, 2);
+ std::string D2 = glm::to_string(D1);
+ Error += D2 != std::string("i64vec2(1, 2)") ? 1 : 0;
+
+ glm::i64vec3 E1(1, 2, 3);
+ std::string E2 = glm::to_string(E1);
+ Error += E2 != std::string("i64vec3(1, 2, 3)") ? 1 : 0;
+
+ glm::i64vec4 F1(1, 2, 3, 4);
+ std::string F2 = glm::to_string(F1);
+ Error += F2 != std::string("i64vec4(1, 2, 3, 4)") ? 1 : 0;
+ }
+
+ return Error;
+}
+
+int test_string_cast_matrix()
+{
+ int Error = 0;
+
+ glm::mat2x2 A1(1.000000, 2.000000, 3.000000, 4.000000);
+ std::string A2 = glm::to_string(A1);
+ Error += A2 != std::string("mat2x2((1.000000, 2.000000), (3.000000, 4.000000))") ? 1 : 0;
+
+ return Error;
+}
+
+int main()
+{
+ int Error = 0;
+ Error += test_string_cast_vector();
+ Error += test_string_cast_matrix();
+
+ return Error;
+}
+
+
diff --git a/src/third_party/glm/test/gtx/gtx_type_aligned.cpp b/src/third_party/glm/test/gtx/gtx_type_aligned.cpp
new file mode 100644
index 0000000..7274a7e
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_type_aligned.cpp
@@ -0,0 +1,113 @@
+#include <glm/gtx/type_aligned.hpp>
+#include <cstdio>
+
+int test_decl()
+{
+ int Error(0);
+
+ {
+ struct S1
+ {
+ glm::aligned_vec4 B;
+ };
+
+ struct S2
+ {
+ glm::vec4 B;
+ };
+
+ printf("vec4 - Aligned: %d, unaligned: %d\n", static_cast<int>(sizeof(S1)), static_cast<int>(sizeof(S2)));
+
+ Error += sizeof(S1) >= sizeof(S2) ? 0 : 1;
+ }
+
+ {
+ struct S1
+ {
+ bool A;
+ glm::vec3 B;
+ };
+
+ struct S2
+ {
+ bool A;
+ glm::aligned_vec3 B;
+ };
+
+ printf("vec3 - Aligned: %d, unaligned: %d\n", static_cast<int>(sizeof(S1)), static_cast<int>(sizeof(S2)));
+
+ Error += sizeof(S1) <= sizeof(S2) ? 0 : 1;
+ }
+
+ {
+ struct S1
+ {
+ bool A;
+ glm::aligned_vec4 B;
+ };
+
+ struct S2
+ {
+ bool A;
+ glm::vec4 B;
+ };
+
+ printf("vec4 - Aligned: %d, unaligned: %d\n", static_cast<int>(sizeof(S1)), static_cast<int>(sizeof(S2)));
+
+ Error += sizeof(S1) >= sizeof(S2) ? 0 : 1;
+ }
+
+ {
+ struct S1
+ {
+ bool A;
+ glm::aligned_dvec4 B;
+ };
+
+ struct S2
+ {
+ bool A;
+ glm::dvec4 B;
+ };
+
+ printf("dvec4 - Aligned: %d, unaligned: %d\n", static_cast<int>(sizeof(S1)), static_cast<int>(sizeof(S2)));
+
+ Error += sizeof(S1) >= sizeof(S2) ? 0 : 1;
+ }
+
+ return Error;
+}
+
+template <typename genType>
+void print(genType const & Mat0)
+{
+ printf("mat4(\n");
+ printf("\tvec4(%2.9f, %2.9f, %2.9f, %2.9f)\n", Mat0[0][0], Mat0[0][1], Mat0[0][2], Mat0[0][3]);
+ printf("\tvec4(%2.9f, %2.9f, %2.9f, %2.9f)\n", Mat0[1][0], Mat0[1][1], Mat0[1][2], Mat0[1][3]);
+ printf("\tvec4(%2.9f, %2.9f, %2.9f, %2.9f)\n", Mat0[2][0], Mat0[2][1], Mat0[2][2], Mat0[2][3]);
+ printf("\tvec4(%2.9f, %2.9f, %2.9f, %2.9f))\n\n", Mat0[3][0], Mat0[3][1], Mat0[3][2], Mat0[3][3]);
+}
+
+int perf_mul()
+{
+ int Error = 0;
+
+ glm::mat4 A(1.0f);
+ glm::mat4 B(1.0f);
+
+ glm::mat4 C = A * B;
+
+ print(C);
+
+ return Error;
+}
+
+int main()
+{
+ int Error(0);
+
+ Error += test_decl();
+ Error += perf_mul();
+
+ return Error;
+}
diff --git a/src/third_party/glm/test/gtx/gtx_type_trait.cpp b/src/third_party/glm/test/gtx/gtx_type_trait.cpp
new file mode 100644
index 0000000..3942726
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_type_trait.cpp
@@ -0,0 +1,12 @@
+#include <glm/vec4.hpp>
+#include <glm/gtx/type_trait.hpp>
+
+int main()
+{
+ int Error = 0;
+
+
+
+ return Error;
+}
+
diff --git a/src/third_party/glm/test/gtx/gtx_vector_angle.cpp b/src/third_party/glm/test/gtx/gtx_vector_angle.cpp
new file mode 100644
index 0000000..1b4a607
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_vector_angle.cpp
@@ -0,0 +1,58 @@
+#include <glm/gtc/constants.hpp>
+#include <glm/gtx/vector_angle.hpp>
+#include <limits>
+
+int test_angle()
+{
+ int Error = 0;
+
+ float AngleA = glm::angle(glm::vec2(1, 0), glm::normalize(glm::vec2(1, 1)));
+ Error += glm::epsilonEqual(AngleA, glm::pi<float>() * 0.25f, 0.01f) ? 0 : 1;
+ float AngleB = glm::angle(glm::vec3(1, 0, 0), glm::normalize(glm::vec3(1, 1, 0)));
+ Error += glm::epsilonEqual(AngleB, glm::pi<float>() * 0.25f, 0.01f) ? 0 : 1;
+ float AngleC = glm::angle(glm::vec4(1, 0, 0, 0), glm::normalize(glm::vec4(1, 1, 0, 0)));
+ Error += glm::epsilonEqual(AngleC, glm::pi<float>() * 0.25f, 0.01f) ? 0 : 1;
+
+ return Error;
+}
+
+int test_orientedAngle_vec2()
+{
+ int Error = 0;
+
+ float AngleA = glm::orientedAngle(glm::vec2(1, 0), glm::normalize(glm::vec2(1, 1)));
+ Error += AngleA == glm::pi<float>() * 0.25f ? 0 : 1;
+ float AngleB = glm::orientedAngle(glm::vec2(0, 1), glm::normalize(glm::vec2(1, 1)));
+ Error += AngleB == -glm::pi<float>() * 0.25f ? 0 : 1;
+ float AngleC = glm::orientedAngle(glm::normalize(glm::vec2(1, 1)), glm::vec2(0, 1));
+ Error += AngleC == glm::pi<float>() * 0.25f ? 0 : 1;
+
+ return Error;
+}
+
+int test_orientedAngle_vec3()
+{
+ int Error = 0;
+
+ float AngleA = glm::orientedAngle(glm::vec3(1, 0, 0), glm::normalize(glm::vec3(1, 1, 0)), glm::vec3(0, 0, 1));
+ Error += AngleA == glm::pi<float>() * 0.25f ? 0 : 1;
+ float AngleB = glm::orientedAngle(glm::vec3(0, 1, 0), glm::normalize(glm::vec3(1, 1, 0)), glm::vec3(0, 0, 1));
+ Error += AngleB == -glm::pi<float>() * 0.25f ? 0 : 1;
+ float AngleC = glm::orientedAngle(glm::normalize(glm::vec3(1, 1, 0)), glm::vec3(0, 1, 0), glm::vec3(0, 0, 1));
+ Error += AngleC == glm::pi<float>() * 0.25f ? 0 : 1;
+
+ return Error;
+}
+
+int main()
+{
+ int Error(0);
+
+ Error += test_angle();
+ Error += test_orientedAngle_vec2();
+ Error += test_orientedAngle_vec3();
+
+ return Error;
+}
+
+
diff --git a/src/third_party/glm/test/gtx/gtx_vector_query.cpp b/src/third_party/glm/test/gtx/gtx_vector_query.cpp
new file mode 100644
index 0000000..160b9fa
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_vector_query.cpp
@@ -0,0 +1,81 @@
+#include <glm/vec2.hpp>
+#include <glm/vec3.hpp>
+#include <glm/vec4.hpp>
+#include <glm/gtx/vector_query.hpp>
+
+int test_areCollinear()
+{
+ int Error(0);
+
+ {
+ bool TestA = glm::areCollinear(glm::vec2(-1), glm::vec2(1), 0.00001f);
+ Error += TestA ? 0 : 1;
+ }
+
+ {
+ bool TestA = glm::areCollinear(glm::vec3(-1), glm::vec3(1), 0.00001f);
+ Error += TestA ? 0 : 1;
+ }
+
+ {
+ bool TestA = glm::areCollinear(glm::vec4(-1), glm::vec4(1), 0.00001f);
+ Error += TestA ? 0 : 1;
+ }
+
+ return Error;
+}
+
+int test_areOrthogonal()
+{
+ int Error(0);
+
+ bool TestA = glm::areOrthogonal(glm::vec2(1, 0), glm::vec2(0, 1), 0.00001f);
+ Error += TestA ? 0 : 1;
+
+ return Error;
+}
+
+int test_isNormalized()
+{
+ int Error(0);
+
+ bool TestA = glm::isNormalized(glm::vec4(1, 0, 0, 0), 0.00001f);
+ Error += TestA ? 0 : 1;
+
+ return Error;
+}
+
+int test_isNull()
+{
+ int Error(0);
+
+ bool TestA = glm::isNull(glm::vec4(0), 0.00001f);
+ Error += TestA ? 0 : 1;
+
+ return Error;
+}
+
+int test_areOrthonormal()
+{
+ int Error(0);
+
+ bool TestA = glm::areOrthonormal(glm::vec2(1, 0), glm::vec2(0, 1), 0.00001f);
+ Error += TestA ? 0 : 1;
+
+ return Error;
+}
+
+int main()
+{
+ int Error(0);
+
+ Error += test_areCollinear();
+ Error += test_areOrthogonal();
+ Error += test_isNormalized();
+ Error += test_isNull();
+ Error += test_areOrthonormal();
+
+ return Error;
+}
+
+
diff --git a/src/third_party/glm/test/gtx/gtx_wrap.cpp b/src/third_party/glm/test/gtx/gtx_wrap.cpp
new file mode 100644
index 0000000..cd7d7c4
--- /dev/null
+++ b/src/third_party/glm/test/gtx/gtx_wrap.cpp
@@ -0,0 +1,189 @@
+#include <glm/gtx/wrap.hpp>
+#include <glm/gtc/epsilon.hpp>
+
+namespace clamp
+{
+ int test()
+ {
+ int Error(0);
+
+ float A = glm::clamp(0.5f);
+ Error += glm::epsilonEqual(A, 0.5f, 0.00001f) ? 0 : 1;
+
+ float B = glm::clamp(0.0f);
+ Error += glm::epsilonEqual(B, 0.0f, 0.00001f) ? 0 : 1;
+
+ float C = glm::clamp(1.0f);
+ Error += glm::epsilonEqual(C, 1.0f, 0.00001f) ? 0 : 1;
+
+ float D = glm::clamp(-0.5f);
+ Error += glm::epsilonEqual(D, 0.0f, 0.00001f) ? 0 : 1;
+
+ float E = glm::clamp(1.5f);
+ Error += glm::epsilonEqual(E, 1.0f, 0.00001f) ? 0 : 1;
+
+ glm::vec2 K = glm::clamp(glm::vec2(0.5f));
+ Error += glm::all(glm::epsilonEqual(K, glm::vec2(0.5f), glm::vec2(0.00001f))) ? 0 : 1;
+
+ glm::vec3 L = glm::clamp(glm::vec3(0.5f));
+ Error += glm::all(glm::epsilonEqual(L, glm::vec3(0.5f), glm::vec3(0.00001f))) ? 0 : 1;
+
+ glm::vec4 M = glm::clamp(glm::vec4(0.5f));
+ Error += glm::all(glm::epsilonEqual(M, glm::vec4(0.5f), glm::vec4(0.00001f))) ? 0 : 1;
+
+ glm::vec1 N = glm::clamp(glm::vec1(0.5f));
+ Error += glm::all(glm::epsilonEqual(N, glm::vec1(0.5f), glm::vec1(0.00001f))) ? 0 : 1;
+
+ return Error;
+ }
+}//namespace clamp
+
+namespace repeat
+{
+ int test()
+ {
+ int Error(0);
+
+ float A = glm::repeat(0.5f);
+ Error += glm::epsilonEqual(A, 0.5f, 0.00001f) ? 0 : 1;
+
+ float B = glm::repeat(0.0f);
+ Error += glm::epsilonEqual(B, 0.0f, 0.00001f) ? 0 : 1;
+
+ float C = glm::repeat(1.0f);
+ Error += glm::epsilonEqual(C, 0.0f, 0.00001f) ? 0 : 1;
+
+ float D = glm::repeat(-0.5f);
+ Error += glm::epsilonEqual(D, 0.5f, 0.00001f) ? 0 : 1;
+
+ float E = glm::repeat(1.5f);
+ Error += glm::epsilonEqual(E, 0.5f, 0.00001f) ? 0 : 1;
+
+ float F = glm::repeat(0.9f);
+ Error += glm::epsilonEqual(F, 0.9f, 0.00001f) ? 0 : 1;
+
+ glm::vec2 K = glm::repeat(glm::vec2(0.5f));
+ Error += glm::all(glm::epsilonEqual(K, glm::vec2(0.5f), glm::vec2(0.00001f))) ? 0 : 1;
+
+ glm::vec3 L = glm::repeat(glm::vec3(0.5f));
+ Error += glm::all(glm::epsilonEqual(L, glm::vec3(0.5f), glm::vec3(0.00001f))) ? 0 : 1;
+
+ glm::vec4 M = glm::repeat(glm::vec4(0.5f));
+ Error += glm::all(glm::epsilonEqual(M, glm::vec4(0.5f), glm::vec4(0.00001f))) ? 0 : 1;
+
+ glm::vec1 N = glm::repeat(glm::vec1(0.5f));
+ Error += glm::all(glm::epsilonEqual(N, glm::vec1(0.5f), glm::vec1(0.00001f))) ? 0 : 1;
+
+ return Error;
+ }
+}//namespace repeat
+
+namespace mirrorClamp
+{
+ int test()
+ {
+ int Error(0);
+
+ float A = glm::mirrorClamp(0.5f);
+ Error += glm::epsilonEqual(A, 0.5f, 0.00001f) ? 0 : 1;
+
+ float B = glm::mirrorClamp(0.0f);
+ Error += glm::epsilonEqual(B, 0.0f, 0.00001f) ? 0 : 1;
+
+ float C = glm::mirrorClamp(1.1f);
+ Error += glm::epsilonEqual(C, 0.1f, 0.00001f) ? 0 : 1;
+
+ float D = glm::mirrorClamp(-0.5f);
+ Error += glm::epsilonEqual(D, 0.5f, 0.00001f) ? 0 : 1;
+
+ float E = glm::mirrorClamp(1.5f);
+ Error += glm::epsilonEqual(E, 0.5f, 0.00001f) ? 0 : 1;
+
+ float F = glm::mirrorClamp(0.9f);
+ Error += glm::epsilonEqual(F, 0.9f, 0.00001f) ? 0 : 1;
+
+ float G = glm::mirrorClamp(3.1f);
+ Error += glm::epsilonEqual(G, 0.1f, 0.00001f) ? 0 : 1;
+
+ float H = glm::mirrorClamp(-3.1f);
+ Error += glm::epsilonEqual(H, 0.1f, 0.00001f) ? 0 : 1;
+
+ float I = glm::mirrorClamp(-0.9f);
+ Error += glm::epsilonEqual(I, 0.9f, 0.00001f) ? 0 : 1;
+
+ glm::vec2 K = glm::mirrorClamp(glm::vec2(0.5f));
+ Error += glm::all(glm::epsilonEqual(K, glm::vec2(0.5f), glm::vec2(0.00001f))) ? 0 : 1;
+
+ glm::vec3 L = glm::mirrorClamp(glm::vec3(0.5f));
+ Error += glm::all(glm::epsilonEqual(L, glm::vec3(0.5f), glm::vec3(0.00001f))) ? 0 : 1;
+
+ glm::vec4 M = glm::mirrorClamp(glm::vec4(0.5f));
+ Error += glm::all(glm::epsilonEqual(M, glm::vec4(0.5f), glm::vec4(0.00001f))) ? 0 : 1;
+
+ glm::vec1 N = glm::mirrorClamp(glm::vec1(0.5f));
+ Error += glm::all(glm::epsilonEqual(N, glm::vec1(0.5f), glm::vec1(0.00001f))) ? 0 : 1;
+
+ return Error;
+ }
+}//namespace mirrorClamp
+
+namespace mirrorRepeat
+{
+ int test()
+ {
+ int Error(0);
+
+ float A = glm::mirrorRepeat(0.5f);
+ Error += glm::epsilonEqual(A, 0.5f, 0.00001f) ? 0 : 1;
+
+ float B = glm::mirrorRepeat(0.0f);
+ Error += glm::epsilonEqual(B, 0.0f, 0.00001f) ? 0 : 1;
+
+ float C = glm::mirrorRepeat(1.0f);
+ Error += glm::epsilonEqual(C, 1.0f, 0.00001f) ? 0 : 1;
+
+ float D = glm::mirrorRepeat(-0.5f);
+ Error += glm::epsilonEqual(D, 0.5f, 0.00001f) ? 0 : 1;
+
+ float E = glm::mirrorRepeat(1.5f);
+ Error += glm::epsilonEqual(E, 0.5f, 0.00001f) ? 0 : 1;
+
+ float F = glm::mirrorRepeat(0.9f);
+ Error += glm::epsilonEqual(F, 0.9f, 0.00001f) ? 0 : 1;
+
+ float G = glm::mirrorRepeat(3.0f);
+ Error += glm::epsilonEqual(G, 1.0f, 0.00001f) ? 0 : 1;
+
+ float H = glm::mirrorRepeat(-3.0f);
+ Error += glm::epsilonEqual(H, 1.0f, 0.00001f) ? 0 : 1;
+
+ float I = glm::mirrorRepeat(-1.0f);
+ Error += glm::epsilonEqual(I, 1.0f, 0.00001f) ? 0 : 1;
+
+ glm::vec2 K = glm::mirrorRepeat(glm::vec2(0.5f));
+ Error += glm::all(glm::epsilonEqual(K, glm::vec2(0.5f), glm::vec2(0.00001f))) ? 0 : 1;
+
+ glm::vec3 L = glm::mirrorRepeat(glm::vec3(0.5f));
+ Error += glm::all(glm::epsilonEqual(L, glm::vec3(0.5f), glm::vec3(0.00001f))) ? 0 : 1;
+
+ glm::vec4 M = glm::mirrorRepeat(glm::vec4(0.5f));
+ Error += glm::all(glm::epsilonEqual(M, glm::vec4(0.5f), glm::vec4(0.00001f))) ? 0 : 1;
+
+ glm::vec1 N = glm::mirrorRepeat(glm::vec1(0.5f));
+ Error += glm::all(glm::epsilonEqual(N, glm::vec1(0.5f), glm::vec1(0.00001f))) ? 0 : 1;
+
+ return Error;
+ }
+}//namespace mirrorRepeat
+
+int main()
+{
+ int Error(0);
+
+ Error += clamp::test();
+ Error += repeat::test();
+ Error += mirrorClamp::test();
+ Error += mirrorRepeat::test();
+
+ return Error;
+}
diff --git a/src/third_party/glm/util/autoexp.txt b/src/third_party/glm/util/autoexp.txt
new file mode 100644
index 0000000..5a07bed
--- /dev/null
+++ b/src/third_party/glm/util/autoexp.txt
@@ -0,0 +1,28 @@
+[Visualizer]
+
+glm::detail::tvec2<*>{
+ preview (
+ #(#($c.x,$c.y))
+ )
+ children (
+ #([x]: $c.x,[y]: $c.y)
+ )
+}
+
+glm::detail::tvec3<*>{
+ preview (
+ #($e.x,$e.y,$e.z)
+ )
+ children (
+ #([x]: $e.x,[y]: $e.y,[z]: $e.z)
+ )
+}
+
+glm::detail::tvec4<*>{
+ preview (
+ #($c.x,$c.y,$c.z,$c.w)
+ )
+ children (
+ #([x]: $e.x,[y]: $e.y,[z]: $e.z, #([w]: $e.w))
+ )
+}
diff --git a/src/third_party/glm/util/autoexp.vc2010.dat b/src/third_party/glm/util/autoexp.vc2010.dat
new file mode 100644
index 0000000..e28d31d
--- /dev/null
+++ b/src/third_party/glm/util/autoexp.vc2010.dat
@@ -0,0 +1,3896 @@
+; AutoExp.Dat - templates for automatically expanding data
+; Copyright(c) Microsoft Corporation. All Rights Reserved.
+;---------------------------------------------------------------
+;
+; While debugging, Data Tips and items in the Watch and Variable
+; windows are automatically expanded to show their most important
+; elements. The expansion follows the format given by the rules
+; in this file. You can add rules for your types or change the
+; predefined rules.
+;
+; For good examples, read the rules in this file.
+;
+; To find what the debugger considers the type of a variable to
+; be, add it to the Watch window and look at the Type column.
+;
+; An AutoExpand rule is a line with the name of a type, an equals
+; sign, and text with replaceable parts in angle brackets. The
+; part in angle brackets names a member of the type and an
+; optional Watch format specifier.
+;
+; AutoExpand rules use the following syntax. The equals sign (=),
+; angle brackets (<>), and comma are taken literally. Square
+; brackets ([]) indicate optional items.
+;
+; type=[text]<member[,format]>...
+;
+; type Name of the type (may be followed by <*> for template
+; types such as the ATL types listed below).
+;
+; text Any text.Usually the name of the member to display,
+; or a shorthand name for the member.
+;
+; member Name of a member to display.
+;
+; format Watch format specifier. One of the following:
+;
+; Letter Description Sample Display
+; ------ -------------------------- ------------ -------------
+; d,i Signed decimal integer 0xF000F065,d -268373915
+; u Unsigned decimal integer 0x0065,u 101
+; o Unsigned octal integer 0xF065,o 0170145
+; x,X Hexadecimal integer 61541,X 0X0000F065
+; l,h long or short prefix for 00406042,hx 0x0c22
+; d, i, u, o, x, X
+; f Signed floating-point 3./2.,f 1.500000
+; e Signed scientific-notation 3./2.,e 1.500000e+000
+; g Shorter of e and f 3./2.,g 1.5
+; c Single character 0x0065,c 'e'
+; s Zero-terminated string pVar,s "Hello world"
+; su Unicode string pVar,su "Hello world"
+;
+; For details of other format specifiers see Help under:
+; "format specifiers/watch variable"
+;
+; The special format <,t> specifies the name of the most-derived
+; type of the object. This is especially useful with pointers or
+; references to a base class.
+;
+; If there is no rule for a class, the base classes are checked for
+; a matching rule.
+;
+; There are some special entries allowed in the AutoExpand section:
+; $BUILTIN is used to display more complex types that need to do more
+; than just show a member variable or two.
+; $ADDIN allows external DLLs to be added to display even more complex
+; types via the EE Add-in API. The first argument is the DLL name, the
+; second argument is the name of the export from the DLL to use. For
+; further information on this API see the sample called EEAddIn.
+;
+; WARNING: if hexadecimal mode is on in the watch window, all numbers here are
+; evaluated in hex, e.g. 42 becomes 0x42
+
+[AutoExpand]
+
+; from windef.h
+tagPOINT =x=<x> y=<y>
+tagRECT =top=<top> bottom=<bottom> left=<left> right=<right>
+
+; from winuser.h
+tagMSG =msg=<message,x> wp=<wParam,x> lp=<lParam,x>
+
+; intrinsics
+__m64 =<m64_i64,x>
+__m128=$BUILTIN(M128)
+__m128i=$BUILTIN(M128I)
+__m128d=$BUILTIN(M128D)
+
+; from afxwin.h
+CDC =hDC=<m_hDC> attrib=<m_hAttribDC>
+CPaintDC =<,t> hWnd=<m_hWnd>
+CPoint =x=<x> y=<y>
+CRect =top=<top> bottom=<bottom> left=<left> right=<right>
+CSize =cx=<cx> cy=<cy>
+CWnd =<,t> hWnd=<m_hWnd>
+CWinApp =<,t> <m_pszAppName,s>
+CWinThread =<,t> h=<m_hThread> proc=<m_pfnThreadProc>
+
+; from afxcoll.h
+CPtrList =cnt=<m_nCount>
+
+; from afxstat_.h
+CProcessLocalObject =<,t>
+CThreadLocalObject =<,t>
+
+; from afx.h
+CArchiveException =cause=<m_cause>
+CFile =hFile=<m_hFile> name=<m_strFileName.m_pchData,s>
+CFileException =cause=<m_cause> OS Error=m_lOsError
+CMemFile =pos=<m_nPosition> size=<m_nFileSize>
+CObject =<,t>
+CRuntimeClass =<m_lpszClassName,s>
+CStdioFile =FILE*=<m_pStream> name=<m_strFilename.m_pchData,s>
+CTimeSpan =time=<m_time>
+CTime =time=<m_time>
+
+; from afxcoll.h
+CByteArray =count=<m_nCount>
+CStringList =count=<m_nCount>
+; same for all CXXXArray classes
+; same for CXXXList
+; same for CMapXXToXX
+
+; various string classes from MFC & ATL
+
+_com_error=<m_hresult,hr>
+_bstr_t=<m_Data->m_wstr,su> (<m_Data->m_RefCount,u>)
+_com_ptr_t<*>=<m_pInterface>
+_LARGE_INTEGER=<QuadPart>
+_ULARGE_INTEGER=<QuadPart>
+ATL::CComPtr<*>=<p>
+
+ATL::CComQIPtr<*>=<p>
+
+tagVARIANT=$BUILTIN(VARIANT)
+VARIANT=$BUILTIN(VARIANT)
+_GUID=$BUILTIN(GUID)
+
+; see EEAddIn sample for how to use these
+;_SYSTEMTIME=$ADDIN(EEAddIn.dll,AddIn_SystemTime)
+;_FILETIME=$ADDIN(EEAddIn.dll,AddIn_FileTime)
+
+[Visualizer]
+; This section contains visualizers for STL and ATL containers
+; DO NOT MODIFY
+ATL::CStringT<char,*>|CSimpleStringT<char,*>|ATL::CSimpleStringT<char,*>{
+ preview ([$e.m_pszData,s])
+ stringview ([$e.m_pszData,sb])
+}
+ATL::CStringT<wchar_t,*>|CSimpleStringT<wchar_t,*>|ATL::CSimpleStringT<wchar_t,*>|ATL::CStringT<unsigned short,*>|CSimpleStringT<unsigned short,*>|ATL::CSimpleStringT<unsigned short,*>{
+ preview ([$e.m_pszData,su])
+ stringview ([$e.m_pszData,sub])
+}
+ATL::CComBSTR{
+ preview ([$e.m_str,su])
+ stringview ([$e.m_str,sub])
+}
+
+
+; Many visualizers use nested #()s.
+; Why not use #(foo, bar) instead of #(#(foo), #(bar))?
+; The former alphabetically sorts its fields, while the latter does not.
+
+;------------------------------------------------------------------------------
+; std::pair from <utility>
+;------------------------------------------------------------------------------
+std::pair<*>{
+ ; pair is previewed with "(<first>, <second>)".
+ preview (
+ #(
+ "(",
+ $e.first,
+ ", ",
+ $e.second,
+ ")"
+ )
+ )
+
+ ; We gloss over the fact that first and second are actually stored in _Pair_base.
+ children (
+ #(
+ #(first : $e.first),
+ #(second : $e.second)
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; std::plus, etc. from <functional>
+;------------------------------------------------------------------------------
+; STL functors are previewed with their names.
+; They have no state, so they have no children.
+std::plus<*>{
+ preview ( "plus" )
+ children ( #array(expr: 0, size: 0) )
+}
+std::minus<*>{
+ preview ( "minus" )
+ children ( #array(expr: 0, size: 0) )
+}
+std::multiplies<*>{
+ preview ( "multiplies" )
+ children ( #array(expr: 0, size: 0) )
+}
+std::divides<*>{
+ preview ( "divides" )
+ children ( #array(expr: 0, size: 0) )
+}
+std::modulus<*>{
+ preview ( "modulus" )
+ children ( #array(expr: 0, size: 0) )
+}
+std::negate<*>{
+ preview ( "negate" )
+ children ( #array(expr: 0, size: 0) )
+}
+std::equal_to<*>{
+ preview ( "equal_to" )
+ children ( #array(expr: 0, size: 0) )
+}
+std::not_equal_to<*>{
+ preview ( "not_equal_to" )
+ children ( #array(expr: 0, size: 0) )
+}
+std::greater<*>{
+ preview ( "greater" )
+ children ( #array(expr: 0, size: 0) )
+}
+std::less<*>{
+ preview ( "less" )
+ children ( #array(expr: 0, size: 0) )
+}
+std::greater_equal<*>{
+ preview ( "greater_equal" )
+ children ( #array(expr: 0, size: 0) )
+}
+std::less_equal<*>{
+ preview ( "less_equal" )
+ children ( #array(expr: 0, size: 0) )
+}
+std::logical_and<*>{
+ preview ( "logical_and" )
+ children ( #array(expr: 0, size: 0) )
+}
+std::logical_or<*>{
+ preview ( "logical_or" )
+ children ( #array(expr: 0, size: 0) )
+}
+std::logical_not<*>{
+ preview ( "logical_not" )
+ children ( #array(expr: 0, size: 0) )
+}
+
+;------------------------------------------------------------------------------
+; std::not1() from <functional>
+; std::not2() from <functional>
+;------------------------------------------------------------------------------
+; STL negators are previewed with "not[12](<stored functor>)".
+; They have a child with the fake name of [pred], so that the
+; stored functor can be inspected.
+std::unary_negate<*>{
+ preview (
+ #(
+ "not1(",
+ $e._Functor,
+ ")"
+ )
+ )
+
+ children (
+ #([pred] : $e._Functor)
+ )
+}
+std::binary_negate<*>{
+ preview (
+ #(
+ "not2(",
+ $e._Functor,
+ ")"
+ )
+ )
+
+ children (
+ #([pred] : $e._Functor)
+ )
+}
+
+;------------------------------------------------------------------------------
+; std::bind1st() from <functional>
+; std::bind2nd() from <functional>
+;------------------------------------------------------------------------------
+; STL binders are previewed with "bind1st(<op>, <value>)" or "bind2nd(<op>, <value>)".
+; We gloss over the fact that they derive from unary_function.
+std::binder1st<*>{
+ preview (
+ #(
+ "bind1st(",
+ $e.op,
+ ", ",
+ $e.value,
+ ")"
+ )
+ )
+
+ children (
+ #(
+ #(op : $e.op),
+ #(value : $e.value)
+ )
+ )
+}
+std::binder2nd<*>{
+ preview (
+ #(
+ "bind2nd(",
+ $e.op,
+ ", ",
+ $e.value,
+ ")"
+ )
+ )
+
+ children (
+ #(
+ #(op : $e.op),
+ #(value : $e.value)
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; std::ptr_fun() from <functional>
+;------------------------------------------------------------------------------
+; STL function pointer adaptors are previewed with "ptr_fun(<stored function pointer>)".
+; Function pointers have no children, so the adaptors have no children.
+std::pointer_to_unary_function<*>|std::pointer_to_binary_function<*>{
+ preview (
+ #(
+ "ptr_fun(",
+ $e._Pfun,
+ ")"
+ )
+ )
+
+ children ( #array(expr: 0, size: 0) )
+}
+
+;------------------------------------------------------------------------------
+; std::mem_fun() from <functional>
+; std::mem_fun_ref() from <functional>
+;------------------------------------------------------------------------------
+; See ptr_fun().
+std::mem_fun_t<*>|std::mem_fun1_t<*>|std::const_mem_fun_t<*>|std::const_mem_fun1_t<*>{
+ preview (
+ #(
+ "mem_fun(",
+ $e._Pmemfun,
+ ")"
+ )
+ )
+
+ children ( #array(expr: 0, size: 0) )
+}
+std::mem_fun_ref_t<*>|std::mem_fun1_ref_t<*>|std::const_mem_fun_ref_t<*>|std::const_mem_fun1_ref_t<*>{
+ preview (
+ #(
+ "mem_fun_ref(",
+ $e._Pmemfun,
+ ")"
+ )
+ )
+
+ children ( #array(expr: 0, size: 0) )
+}
+
+;------------------------------------------------------------------------------
+; std::auto_ptr from <memory>
+;------------------------------------------------------------------------------
+std::auto_ptr<*>{
+ ; An empty auto_ptr is previewed with "empty".
+ ; Otherwise, it is previewed with "auto_ptr <object>".
+ preview (
+ #if ($e._Myptr == 0) (
+ "empty"
+ ) #else (
+ #(
+ "auto_ptr ",
+ *$e._Myptr
+ )
+ )
+ )
+
+ ; An empty auto_ptr has no children.
+ ; Otherwise, it has a single child, its stored pointer, with a fake name of [ptr].
+ children (
+ #if ($e._Myptr == 0) (
+ #array(expr: 0, size: 0)
+ ) #else (
+ #([ptr] : $e._Myptr)
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; std::basic_string from <string>
+;------------------------------------------------------------------------------
+; basic_string is previewed with its stored string.
+; It has [size] and [capacity] children, followed by [0], [1], [2], etc. children
+; displaying its stored characters.
+; The ($e._Myres) < ($e._BUF_SIZE) test determines whether the Small String Optimization
+; is in effect.
+; NOTE: The parentheses in ($e._Myres) < ($e._BUF_SIZE) are necessary.
+std::basic_string<char,*>{
+ preview ( #if (($e._Myres) < ($e._BUF_SIZE)) ( [$e._Bx._Buf,s] ) #else ( [$e._Bx._Ptr,s] ))
+ stringview ( #if (($e._Myres) < ($e._BUF_SIZE)) ( [$e._Bx._Buf,sb] ) #else ( [$e._Bx._Ptr,sb] ))
+
+ children (
+ #(
+ #([size] : $e._Mysize),
+ #([capacity] : $e._Myres),
+ #if (($e._Myres) < ($e._BUF_SIZE)) (
+ #array(expr: $e._Bx._Buf[$i], size: $e._Mysize)
+ ) #else (
+ #array(expr: $e._Bx._Ptr[$i], size: $e._Mysize)
+ )
+ )
+ )
+}
+std::basic_string<unsigned short,*>|std::basic_string<wchar_t,*>{
+ preview ( #if (($e._Myres) < ($e._BUF_SIZE)) ( [$e._Bx._Buf,su] ) #else ( [$e._Bx._Ptr,su] ))
+ stringview ( #if (($e._Myres) < ($e._BUF_SIZE)) ( [$e._Bx._Buf,sub] ) #else ( [$e._Bx._Ptr,sub] ))
+
+ children (
+ #(
+ #([size] : $e._Mysize),
+ #([capacity] : $e._Myres),
+ #if (($e._Myres) < ($e._BUF_SIZE)) (
+ #array(expr: $e._Bx._Buf[$i], size: $e._Mysize)
+ ) #else (
+ #array(expr: $e._Bx._Ptr[$i], size: $e._Mysize)
+ )
+ )
+ )
+}
+std::_String_iterator<char,*>|std::_String_const_iterator<char,*>{
+ preview ( [$e._Ptr,s] )
+ stringview ( [$e._Ptr,sb] )
+ children ( #([ptr] : $e._Ptr) )
+}
+std::_String_iterator<unsigned short,*>|std::_String_const_iterator<unsigned short,*>|std::_String_iterator<wchar_t,*>|std::_String_const_iterator<wchar_t,*>{
+ preview ( [$e._Ptr,su] )
+ stringview ( [$e._Ptr,sub] )
+ children ( #([ptr] : $e._Ptr) )
+}
+
+;------------------------------------------------------------------------------
+; std::vector<bool> from <vector>
+;------------------------------------------------------------------------------
+; Despite its packed representation, vector<bool> is visualized like vector<T>.
+std::vector<bool,*>{
+ preview (
+ #(
+ "[",
+ $e._Mysize,
+ "](",
+ #array(
+ expr: (bool)(($e._Myvec._Myfirst[$i / _VBITS] >> ($i % _VBITS)) & 1),
+ size: $e._Mysize
+ ),
+ ")"
+ )
+ )
+
+ children (
+ #(
+ #([size] : $e._Mysize),
+ #([capacity] : ($e._Myvec._Myend - $e._Myvec._Myfirst) * _VBITS),
+ #array(
+ expr: (bool)(($e._Myvec._Myfirst[$i / _VBITS] >> ($i % _VBITS)) & 1),
+ size: $e._Mysize
+ )
+ )
+ )
+}
+std::_Vb_reference<*>|std::_Vb_iterator<*>|std::_Vb_const_iterator<*>{
+ preview (
+ (bool)((*$e._Myptr >> $e._Myoff) & 1)
+ )
+
+ children (
+ #(
+ #([ptr] : $e._Myptr),
+ #([offset] : $e._Myoff)
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; std::vector from <vector>
+;------------------------------------------------------------------------------
+; vector is previewed with "[<size>](<elements>)".
+; It has [size] and [capacity] children, followed by its elements.
+; The other containers follow its example.
+std::vector<*>{
+ preview (
+ #(
+ "[",
+ $e._Mylast - $e._Myfirst,
+ "](",
+ #array(
+ expr: $e._Myfirst[$i],
+ size: $e._Mylast - $e._Myfirst
+ ),
+ ")"
+ )
+ )
+
+ children (
+ #(
+ #([size] : $e._Mylast - $e._Myfirst),
+ #([capacity] : $e._Myend - $e._Myfirst),
+ #array(
+ expr: $e._Myfirst[$i],
+ size: $e._Mylast - $e._Myfirst
+ )
+ )
+ )
+}
+std::_Vector_iterator<*>|std::_Vector_const_iterator<*>{
+ preview (
+ *$e._Ptr
+ )
+
+ children (
+ #([ptr] : $e._Ptr)
+ )
+}
+
+;------------------------------------------------------------------------------
+; std::deque from <deque>
+;------------------------------------------------------------------------------
+std::deque<*>{
+ preview (
+ #(
+ "[",
+ $e._Mysize,
+ "](",
+ #array(
+ expr: $e._Map[(($i + $e._Myoff) / $e._EEN_DS) % $e._Mapsize][($i + $e._Myoff) % $e._EEN_DS],
+ size: $e._Mysize
+ ),
+ ")"
+ )
+ )
+
+ children (
+ #(
+ #array(
+ expr: $e._Map[(($i + $e._Myoff) / $e._EEN_DS) % $e._Mapsize][($i + $e._Myoff) % $e._EEN_DS],
+ size: $e._Mysize
+ )
+ )
+ )
+}
+std::_Deque_iterator<*,*>|std::_Deque_const_iterator<*,*>{
+ preview (
+ #if ($e._Myoff >= ((std::deque<$T1,$T2> *)$e._Myproxy->_Mycont)->_Myoff + ((std::deque<$T1,$T2> *)$e._Myproxy->_Mycont)->_Mysize) (
+ "end"
+ ) #else (
+ ((std::deque<$T1,$T2> *)$e._Myproxy->_Mycont)->_Map[($e._Myoff / ((std::deque<$T1,$T2> *)$e._Myproxy->_Mycont)->_EEN_DS) % ((std::deque<$T1,$T2> *)$e._Myproxy->_Mycont)->_Mapsize][$e._Myoff % ((std::deque<$T1,$T2> *)$e._Myproxy->_Mycont)->_EEN_DS]
+ )
+ )
+
+ children (
+ #if ($e._Myoff >= ((std::deque<$T1,$T2> *)$e._Myproxy->_Mycont)->_Myoff + ((std::deque<$T1,$T2> *)$e._Myproxy->_Mycont)->_Mysize) (
+ #array(expr: 0, size: 0)
+ ) #else (
+ #(
+ #([index] : $e._Myoff - ((std::deque<$T1,$T2> *)$e._Myproxy->_Mycont)->_Myoff),
+ #([ptr] : &((std::deque<$T1,$T2> *)$e._Myproxy->_Mycont)->_Map[($e._Myoff / ((std::deque<$T1,$T2> *)$e._Myproxy->_Mycont)->_EEN_DS) % ((std::deque<$T1,$T2> *)$e._Myproxy->_Mycont)->_Mapsize][$e._Myoff % ((std::deque<$T1,$T2> *)$e._Myproxy->_Mycont)->_EEN_DS] )
+ )
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; std::list from <list>
+;------------------------------------------------------------------------------
+std::list<*>{
+ preview (
+ #(
+ "[",
+ $e._Mysize,
+ "](",
+ #list(
+ head: $e._Myhead->_Next,
+ size: $e._Mysize,
+ next: _Next
+ ) : $e._Myval,
+ ")"
+ )
+ )
+
+ children (
+ #list(
+ head: $e._Myhead->_Next,
+ size: $e._Mysize,
+ next: _Next
+ ) : $e._Myval
+ )
+}
+std::_List_iterator<*>|std::_List_const_iterator<*>{
+ preview ( $e._Ptr->_Myval )
+ children ( #([ptr] : &$e._Ptr->_Myval) )
+}
+
+;------------------------------------------------------------------------------
+; std::queue from <queue>
+; std::stack from <stack>
+;------------------------------------------------------------------------------
+std::queue<*>|std::stack<*>{
+ preview ( $e.c )
+ children ( #(c : $e.c) )
+}
+
+;------------------------------------------------------------------------------
+; std::priority_queue from <queue>
+;------------------------------------------------------------------------------
+std::priority_queue<*>{
+ preview ( $e.c )
+
+ children (
+ #(
+ #(c [heap]: $e.c),
+ #(comp : $e.comp)
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; std::map from <map>
+; std::multimap from <map>
+; std::set from <set>
+; std::multiset from <set>
+;------------------------------------------------------------------------------
+std::map<*>|std::multimap<*>|std::set<*>|std::multiset<*>{
+ preview (
+ #(
+ "[",
+ $e._Mysize,
+ "](",
+ #tree(
+ head: $e._Myhead->_Parent,
+ skip: $e._Myhead,
+ left: _Left,
+ right: _Right,
+ size: $e._Mysize
+ ) : $e._Myval,
+ ")"
+ )
+ )
+
+ children (
+ #(
+ #([comp] : $e.comp),
+ #tree(
+ head: $e._Myhead->_Parent,
+ skip: $e._Myhead,
+ left: _Left,
+ right: _Right,
+ size: $e._Mysize
+ ) : $e._Myval
+ )
+ )
+}
+std::_Tree_iterator<*>|std::_Tree_const_iterator<*>{
+ preview ( $e._Ptr->_Myval )
+ children ( #([ptr] : &$e._Ptr->_Myval) )
+}
+
+;------------------------------------------------------------------------------
+; std::bitset from <bitset>
+;------------------------------------------------------------------------------
+std::bitset<*>{
+ preview (
+ #(
+ "[",
+ $e._EEN_BITS,
+ "](",
+ #array(
+ expr: [($e._Array[$i / $e._Bitsperword] >> ($i % $e._Bitsperword)) & 1,d],
+ size: $e._EEN_BITS
+ ),
+ ")"
+ )
+ )
+
+ children (
+ #array(
+ expr: [($e._Array[$i / $e._Bitsperword] >> ($i % $e._Bitsperword)) & 1,d],
+ size: $e._EEN_BITS
+ )
+ )
+}
+std::bitset<*>::reference{
+ preview (
+ [($e._Pbitset->_Array[$i / $e._Pbitset->_Bitsperword] >> ($e._Mypos % $e._Pbitset->_Bitsperword)) & 1,d]
+ )
+
+ children (
+ #(
+ #([bitset] : $e._Pbitset),
+ #([pos] : $e._Mypos)
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; std::reverse_iterator from <iterator>
+;------------------------------------------------------------------------------
+std::reverse_iterator<std::_String_iterator<*> >|std::reverse_iterator<std::_String_const_iterator<*> >{
+ preview (
+ #(
+ "reverse_iterator to ",
+ $e.current._Ptr[-1]
+ )
+ )
+
+ children (
+ #(
+ #([to] : $e.current._Ptr - 1),
+ #(current : $e.current)
+ )
+ )
+}
+std::reverse_iterator<std::_Vb_iterator<*> >|std::reverse_iterator<std::_Vb_const_iterator<*> >{
+ preview (
+ #(
+ "reverse_iterator to ",
+ #if ($e.current._Myoff != 0) (
+ (bool)((*$e.current._Myptr >> ($e.current._Myoff - 1)) & 1)
+ ) #else (
+ (bool)(($e.current._Myptr[-1] >> (_VBITS - 1)) & 1)
+ )
+ )
+ )
+
+ children (
+ #if ($e.current._Myoff != 0) (
+ #(
+ #([to ptr] : $e.current._Myptr),
+ #([to offset] : $e.current._Myoff - 1),
+ #(current : $e.current)
+ )
+ ) #else (
+ #(
+ #([to ptr] : $e.current._Myptr - 1),
+ #([to offset] : _VBITS - 1),
+ #(current : $e.current)
+ )
+ )
+ )
+}
+std::reverse_iterator<std::_Vector_iterator<*> >|std::reverse_iterator<std::_Vector_const_iterator<*> >{
+ preview (
+ #(
+ "reverse_iterator to ",
+ $e.current._Ptr[-1]
+ )
+ )
+
+ children (
+ #(
+ #([to] : $e.current._Ptr - 1),
+ #(current : $e.current)
+ )
+ )
+}
+std::reverse_iterator<std::_Deque_iterator<*,*> >|std::reverse_iterator<std::_Deque_const_iterator<*,*> >{
+ preview (
+ #(
+ "reverse_iterator to ",
+ #if ($e.current._Myoff == ((std::deque<$T1,$T2> *)$e.current._Myproxy->_Mycont)->_Myoff) (
+ "end"
+ ) #else (
+ ((std::deque<$T1,$T2> *)$e.current._Myproxy->_Mycont)->_Map[(($e.current._Myoff - 1) / ((std::deque<$T1,$T2> *)$e.current._Myproxy->_Mycont)->_EEN_DS) % ((std::deque<$T1,$T2> *)$e.current._Myproxy->_Mycont)->_Mapsize][($e.current._Myoff - 1) % ((std::deque<$T1,$T2> *)$e.current._Myproxy->_Mycont)->_EEN_DS]
+ )
+ )
+ )
+
+ children (
+ #if ($e.current._Myoff == ((std::deque<$T1,$T2> *)$e.current._Myproxy->_Mycont)->_Myoff) (
+ #(current : $e.current)
+ ) #else (
+ #(
+ #([to index] : ($e.current._Myoff - 1) - ((std::deque<$T1,$T2> *)$e.current._Myproxy->_Mycont)->_Myoff),
+ #([to ptr] : &((std::deque<$T1,$T2> *)$e.current._Myproxy->_Mycont)->_Map[(($e.current._Myoff - 1) / ((std::deque<$T1,$T2> *)$e.current._Myproxy->_Mycont)->_EEN_DS) % ((std::deque<$T1,$T2> *)$e.current._Myproxy->_Mycont)->_Mapsize][($e.current._Myoff - 1) % ((std::deque<$T1,$T2> *)$e.current._Myproxy->_Mycont)->_EEN_DS] ),
+ #(current : $e.current)
+ )
+ )
+ )
+}
+std::reverse_iterator<std::_List_iterator<*> >|std::reverse_iterator<std::_List_const_iterator<*> >{
+ preview (
+ #(
+ "reverse_iterator to ",
+ $e.current._Ptr->_Prev->_Myval
+ )
+ )
+
+ children (
+ #(
+ #([to] : &$e.current._Ptr->_Prev->_Myval),
+ #(current : $e.current)
+ )
+ )
+}
+std::reverse_iterator<std::_Array_iterator<*> >|std::reverse_iterator<std::_Array_const_iterator<*> >{
+ preview (
+ #(
+ "reverse_iterator to ",
+ #if ($e.current._EEN_IDL == 0) (
+ $e.current._Ptr[-1]
+ ) #else (
+ #if ($e.current._Idx == 0) (
+ "end"
+ ) #else (
+ $e.current._Ptr[$e.current._Idx - 1]
+ )
+ )
+ )
+ )
+
+ children (
+ #if ($e.current._EEN_IDL == 0) (
+ #(
+ #([to] : $e.current._Ptr - 1),
+ #(current : $e.current)
+ )
+ ) #else (
+ #if ($e.current._Idx == 0) (
+ #(current : $e.current)
+ ) #else (
+ #(
+ #([to] : $e.current._Ptr + $e.current._Idx - 1),
+ #(current : $e.current)
+ )
+ )
+ )
+ )
+}
+std::reverse_iterator<*>{
+ preview (
+ #(
+ "reverse_iterator current ",
+ $e.current
+ )
+ )
+
+ children (
+ #(current : $e.current)
+ )
+}
+
+;------------------------------------------------------------------------------
+; std::complex from <complex>
+;------------------------------------------------------------------------------
+std::complex<*>{
+ preview (
+ #if ($e._Val[1] == 0) (
+ ; Purely real.
+ $e._Val[0]
+ ) #else (
+ #if ($e._Val[0] == 0) (
+ ; Purely imaginary.
+ #if ($e._Val[1] < 0) (
+ #("-i*", -$e._Val[1])
+ ) #else (
+ #("i*", $e._Val[1])
+ )
+ ) #else (
+ ; Mixed.
+ #if ($e._Val[1] < 0) (
+ #($e._Val[0], "-i*", -$e._Val[1])
+ ) #else (
+ #($e._Val[0], "+i*", $e._Val[1])
+ )
+ )
+ )
+ )
+
+ children (
+ #(
+ #(real : $e._Val[0]),
+ #(imag : $e._Val[1])
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; std::valarray from <valarray>
+;------------------------------------------------------------------------------
+std::valarray<*>{
+ preview (
+ #(
+ "[",
+ $e._Mysize,
+ "](",
+ #array(
+ expr: $e._Myptr[$i],
+ size: $e._Mysize
+ ),
+ ")"
+ )
+ )
+
+ children (
+ #array(
+ expr: $e._Myptr[$i],
+ size: $e._Mysize
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; std::tr1::reference_wrapper from <functional>
+;------------------------------------------------------------------------------
+std::tr1::reference_wrapper<*>{
+ preview (
+ #if ($e._Callee._EEN_INDIRECT == 1) (
+ ; For ordinary T, reference_wrapper<T> stores a T * _Callee._Ptr
+ ; which is non-null. Actual references are previewed with what they
+ ; refer to, so reference_wrapper<T> is previewed with dereferencing its
+ ; stored pointer.
+ *$e._Callee._Ptr
+ ) #else (
+ ; When T is a pointer to data member type, reference_wrapper<T>
+ ; stores a T _Callee._Object directly.
+ $e._Callee._Object
+ )
+ )
+
+ children (
+ #if ($e._Callee._EEN_INDIRECT == 1) (
+ ; Actual references have the same children as what they refer to.
+ ; Unfortunately, there appears to be no way to imitate this exactly.
+ ; Therefore, we make reference_wrapper<T> appear to have a single
+ ; child, its stored pointer, with a fake name of [ptr].
+ #([ptr] : $e._Callee._Ptr)
+ ) #else (
+ ; When T is a pointer to data member type, T has no children,
+ ; so we make reference_wrapper<T> appear to have no children.
+ #array(expr: 0, size: 0)
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; std::tr1::shared_ptr from <memory>
+;------------------------------------------------------------------------------
+std::tr1::_Ref_count<*>{
+ preview ( "default" )
+ children ( #array(expr: 0, size: 0) )
+}
+std::tr1::_Ref_count_del<*>{
+ preview ( "custom deleter" )
+ children ( #([deleter] : $e._Dtor) )
+}
+std::tr1::_Ref_count_del_alloc<*>{
+ preview ( "custom deleter, custom allocator" )
+ children (
+ #(
+ #([deleter] : $e._Dtor),
+ #([allocator] : $e._Myal)
+ )
+ )
+}
+std::tr1::_Ref_count_obj<*>{
+ preview ( "make_shared" )
+ children ( #array(expr: 0, size: 0) )
+}
+std::tr1::_Ref_count_obj_alloc<*>{
+ preview ( "allocate_shared" )
+ children ( #([allocator] : $e._Myal) )
+}
+std::tr1::shared_ptr<*>{
+ preview (
+ ; shared_ptr<T> stores a T * _Ptr .
+ #if ($e._Ptr == 0) (
+ ; A default-constructed shared_ptr has a null _Ptr and a null _Rep,
+ ; and is formally said to be empty.
+ ; A shared_ptr constructed from a null pointer has a null _Ptr
+ ; and a NON-null _Rep . It is formally said to own the null pointer.
+ ; We preview both with "empty".
+ "empty"
+ ) #else (
+ ; Raw pointers are previewed with "<pointer value> <object>".
+ ; auto_ptr is previewed with "auto_ptr <object>".
+ ; Following these examples, shared_ptr is previewed with
+ ; "shared_ptr <object> [N strong refs, M weak refs]".
+ #(
+ "shared_ptr ",
+ *$e._Ptr,
+ " [",
+ $e._Rep->_Uses,
+ #if ($e._Rep->_Uses == 1) (" strong ref") #else (" strong refs"),
+ #if ($e._Rep->_Weaks - 1 > 0) (
+ #(
+ ", ",
+ $e._Rep->_Weaks - 1,
+ #if ($e._Rep->_Weaks - 1 == 1) (" weak ref") #else (" weak refs")
+ )
+ ),
+ "] [",
+ *$e._Rep,
+ "]"
+ )
+ ; Note: _Rep->_Uses counts how many shared_ptrs share ownership of the object,
+ ; so we directly display it as the strong reference count.
+ ; _Rep->_Weaks counts how many shared_ptrs and weak_ptrs share ownership of
+ ; the "representation object" (or "control block"). All of the shared_ptrs are
+ ; counted as a single owner. That is, _Weaks is initialized to 1, and when
+ ; _Uses falls to 0, _Weaks is decremented. This avoids incrementing and decrementing
+ ; _Weaks every time that a shared_ptr gains or loses ownership. Therefore,
+ ; _Weaks - 1 is the weak reference count, the number of weak_ptrs that are observing
+ ; the shared object.
+ )
+ )
+
+ children (
+ #if ($e._Ptr == 0) (
+ ; We make empty shared_ptrs (and shared_ptrs that own
+ ; the null pointer) appear to have no children.
+ #array(expr: 0, size: 0)
+ ) #else (
+ #(
+ ; We make shared_ptr appear to have two children:
+
+ ; Its stored pointer, with a fake name of [ptr].
+ #([ptr] : $e._Ptr),
+
+ ; Its deleter and allocator, which may be default or custom.
+ #([deleter and allocator] : *$e._Rep)
+ )
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; std::tr1::weak_ptr from <memory>
+;------------------------------------------------------------------------------
+std::tr1::weak_ptr<*>{
+ preview (
+ #if ($e._Ptr == 0) (
+ "empty"
+ ) #elif ($e._Rep->_Uses == 0) (
+ ; weak_ptr is just like shared_ptr, except that a weak_ptr can be expired.
+ #(
+ "expired [",
+ *$e._Rep,
+ "]"
+ )
+ ) #else (
+ #(
+ "weak_ptr ",
+ *$e._Ptr,
+ " [",
+ $e._Rep->_Uses,
+ #if ($e._Rep->_Uses == 1) (" strong ref") #else (" strong refs"),
+ #if ($e._Rep->_Weaks - 1 > 0) (
+ #(
+ ", ",
+ $e._Rep->_Weaks - 1,
+ #if ($e._Rep->_Weaks - 1 == 1) (" weak ref") #else (" weak refs")
+ )
+ ),
+ "] [",
+ *$e._Rep,
+ "]"
+ )
+ )
+ )
+
+ children (
+ #if ($e._Ptr == 0) (
+ #array(expr: 0, size: 0)
+ ) #elif ($e._Rep->_Uses == 0) (
+ ; When a weak_ptr is expired, we show its deleter and allocator.
+ ; The deleter has already been used, but the control block has not yet been deallocated.
+ #([deleter and allocator] : *$e._Rep)
+ ) #else (
+ #(
+ #([ptr] : $e._Ptr),
+ #([deleter and allocator] : *$e._Rep)
+ )
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; std::tr1::mem_fn() from <functional>
+;------------------------------------------------------------------------------
+; Note that when mem_fn() is given a data member pointer, it returns a _Call_wrapper<_Callable_pmd<*> > .
+; Data member pointers themselves don't have useful previews, so we don't attempt to visualize this.
+; When mem_fn() is given a member function pointer, it returns a _Mem_fn[N], which we can visualize.
+std::tr1::_Mem_fn1<*>|std::tr1::_Mem_fn2<*>|std::tr1::_Mem_fn3<*>|std::tr1::_Mem_fn4<*>|std::tr1::_Mem_fn5<*>|std::tr1::_Mem_fn6<*>|std::tr1::_Mem_fn7<*>|std::tr1::_Mem_fn8<*>|std::tr1::_Mem_fn9<*>|std::tr1::_Mem_fn10<*>{
+ preview (
+ ; We preview the functor returned by mem_fn() with "mem_fn(<stored member function pointer>)".
+ #(
+ "mem_fn(",
+ $e._Callee._Object,
+ ")"
+ )
+ )
+
+ children (
+ ; Member function pointers have no children.
+ #array(expr: 0, size: 0)
+ )
+}
+
+;------------------------------------------------------------------------------
+; std::tr1::bind() from <functional>
+;------------------------------------------------------------------------------
+; bind() placeholders are previewed with their names.
+; They have no state, so they have no children.
+std::tr1::_Ph<1>{
+ preview ( "_1" )
+ children ( #array(expr: 0, size: 0) )
+}
+std::tr1::_Ph<2>{
+ preview ( "_2" )
+ children ( #array(expr: 0, size: 0) )
+}
+std::tr1::_Ph<3>{
+ preview ( "_3" )
+ children ( #array(expr: 0, size: 0) )
+}
+std::tr1::_Ph<4>{
+ preview ( "_4" )
+ children ( #array(expr: 0, size: 0) )
+}
+std::tr1::_Ph<5>{
+ preview ( "_5" )
+ children ( #array(expr: 0, size: 0) )
+}
+std::tr1::_Ph<6>{
+ preview ( "_6" )
+ children ( #array(expr: 0, size: 0) )
+}
+std::tr1::_Ph<7>{
+ preview ( "_7" )
+ children ( #array(expr: 0, size: 0) )
+}
+std::tr1::_Ph<8>{
+ preview ( "_8" )
+ children ( #array(expr: 0, size: 0) )
+}
+std::tr1::_Ph<9>{
+ preview ( "_9" )
+ children ( #array(expr: 0, size: 0) )
+}
+std::tr1::_Ph<10>{
+ preview ( "_10" )
+ children ( #array(expr: 0, size: 0) )
+}
+
+; The functor returned by bind(f, t1, t2) is previewed with "bind(f, t1, t2)".
+; It has children with the fake names of [f], [t1], [t2], etc.
+std::tr1::_Bind<*,*,std::tr1::_Bind0<*> >|std::tr1::_Bind_fty<*,*,std::tr1::_Bind0<*> >{
+ preview (
+ #(
+ "bind(", $e._Bx._Callee._Object,
+ ")"
+ )
+ )
+
+ children (
+ #(
+ #([f] : $e._Bx._Callee._Object)
+ )
+ )
+}
+std::tr1::_Bind<*,*,std::tr1::_Bind1<*> >|std::tr1::_Bind_fty<*,*,std::tr1::_Bind1<*> >{
+ preview (
+ #(
+ "bind(", $e._Bx._Callee._Object,
+ ", ", $e._Bx._Vx0,
+ ")"
+ )
+ )
+
+ children (
+ #(
+ #([f] : $e._Bx._Callee._Object),
+ #([t1] : $e._Bx._Vx0)
+ )
+ )
+}
+std::tr1::_Bind<*,*,std::tr1::_Bind2<*> >|std::tr1::_Bind_fty<*,*,std::tr1::_Bind2<*> >{
+ preview (
+ #(
+ "bind(", $e._Bx._Callee._Object,
+ ", ", $e._Bx._Vx0,
+ ", ", $e._Bx._Vx1,
+ ")"
+ )
+ )
+
+ children (
+ #(
+ #([f] : $e._Bx._Callee._Object),
+ #([t1] : $e._Bx._Vx0),
+ #([t2] : $e._Bx._Vx1)
+ )
+ )
+}
+std::tr1::_Bind<*,*,std::tr1::_Bind3<*> >|std::tr1::_Bind_fty<*,*,std::tr1::_Bind3<*> >{
+ preview (
+ #(
+ "bind(", $e._Bx._Callee._Object,
+ ", ", $e._Bx._Vx0,
+ ", ", $e._Bx._Vx1,
+ ", ", $e._Bx._Vx2,
+ ")"
+ )
+ )
+
+ children (
+ #(
+ #([f] : $e._Bx._Callee._Object),
+ #([t1] : $e._Bx._Vx0),
+ #([t2] : $e._Bx._Vx1),
+ #([t3] : $e._Bx._Vx2)
+ )
+ )
+}
+std::tr1::_Bind<*,*,std::tr1::_Bind4<*> >|std::tr1::_Bind_fty<*,*,std::tr1::_Bind4<*> >{
+ preview (
+ #(
+ "bind(", $e._Bx._Callee._Object,
+ ", ", $e._Bx._Vx0,
+ ", ", $e._Bx._Vx1,
+ ", ", $e._Bx._Vx2,
+ ", ", $e._Bx._Vx3,
+ ")"
+ )
+ )
+
+ children (
+ #(
+ #([f] : $e._Bx._Callee._Object),
+ #([t1] : $e._Bx._Vx0),
+ #([t2] : $e._Bx._Vx1),
+ #([t3] : $e._Bx._Vx2),
+ #([t4] : $e._Bx._Vx3)
+ )
+ )
+}
+std::tr1::_Bind<*,*,std::tr1::_Bind5<*> >|std::tr1::_Bind_fty<*,*,std::tr1::_Bind5<*> >{
+ preview (
+ #(
+ "bind(", $e._Bx._Callee._Object,
+ ", ", $e._Bx._Vx0,
+ ", ", $e._Bx._Vx1,
+ ", ", $e._Bx._Vx2,
+ ", ", $e._Bx._Vx3,
+ ", ", $e._Bx._Vx4,
+ ")"
+ )
+ )
+
+ children (
+ #(
+ #([f] : $e._Bx._Callee._Object),
+ #([t1] : $e._Bx._Vx0),
+ #([t2] : $e._Bx._Vx1),
+ #([t3] : $e._Bx._Vx2),
+ #([t4] : $e._Bx._Vx3),
+ #([t5] : $e._Bx._Vx4)
+ )
+ )
+}
+std::tr1::_Bind<*,*,std::tr1::_Bind6<*> >|std::tr1::_Bind_fty<*,*,std::tr1::_Bind6<*> >{
+ preview (
+ #(
+ "bind(", $e._Bx._Callee._Object,
+ ", ", $e._Bx._Vx0,
+ ", ", $e._Bx._Vx1,
+ ", ", $e._Bx._Vx2,
+ ", ", $e._Bx._Vx3,
+ ", ", $e._Bx._Vx4,
+ ", ", $e._Bx._Vx5,
+ ")"
+ )
+ )
+
+ children (
+ #(
+ #([f] : $e._Bx._Callee._Object),
+ #([t1] : $e._Bx._Vx0),
+ #([t2] : $e._Bx._Vx1),
+ #([t3] : $e._Bx._Vx2),
+ #([t4] : $e._Bx._Vx3),
+ #([t5] : $e._Bx._Vx4),
+ #([t6] : $e._Bx._Vx5)
+ )
+ )
+}
+std::tr1::_Bind<*,*,std::tr1::_Bind7<*> >|std::tr1::_Bind_fty<*,*,std::tr1::_Bind7<*> >{
+ preview (
+ #(
+ "bind(", $e._Bx._Callee._Object,
+ ", ", $e._Bx._Vx0,
+ ", ", $e._Bx._Vx1,
+ ", ", $e._Bx._Vx2,
+ ", ", $e._Bx._Vx3,
+ ", ", $e._Bx._Vx4,
+ ", ", $e._Bx._Vx5,
+ ", ", $e._Bx._Vx6,
+ ")"
+ )
+ )
+
+ children (
+ #(
+ #([f] : $e._Bx._Callee._Object),
+ #([t1] : $e._Bx._Vx0),
+ #([t2] : $e._Bx._Vx1),
+ #([t3] : $e._Bx._Vx2),
+ #([t4] : $e._Bx._Vx3),
+ #([t5] : $e._Bx._Vx4),
+ #([t6] : $e._Bx._Vx5),
+ #([t7] : $e._Bx._Vx6)
+ )
+ )
+}
+std::tr1::_Bind<*,*,std::tr1::_Bind8<*> >|std::tr1::_Bind_fty<*,*,std::tr1::_Bind8<*> >{
+ preview (
+ #(
+ "bind(", $e._Bx._Callee._Object,
+ ", ", $e._Bx._Vx0,
+ ", ", $e._Bx._Vx1,
+ ", ", $e._Bx._Vx2,
+ ", ", $e._Bx._Vx3,
+ ", ", $e._Bx._Vx4,
+ ", ", $e._Bx._Vx5,
+ ", ", $e._Bx._Vx6,
+ ", ", $e._Bx._Vx7,
+ ")"
+ )
+ )
+
+ children (
+ #(
+ #([f] : $e._Bx._Callee._Object),
+ #([t1] : $e._Bx._Vx0),
+ #([t2] : $e._Bx._Vx1),
+ #([t3] : $e._Bx._Vx2),
+ #([t4] : $e._Bx._Vx3),
+ #([t5] : $e._Bx._Vx4),
+ #([t6] : $e._Bx._Vx5),
+ #([t7] : $e._Bx._Vx6),
+ #([t8] : $e._Bx._Vx7)
+ )
+ )
+}
+std::tr1::_Bind<*,*,std::tr1::_Bind9<*> >|std::tr1::_Bind_fty<*,*,std::tr1::_Bind9<*> >{
+ preview (
+ #(
+ "bind(", $e._Bx._Callee._Object,
+ ", ", $e._Bx._Vx0,
+ ", ", $e._Bx._Vx1,
+ ", ", $e._Bx._Vx2,
+ ", ", $e._Bx._Vx3,
+ ", ", $e._Bx._Vx4,
+ ", ", $e._Bx._Vx5,
+ ", ", $e._Bx._Vx6,
+ ", ", $e._Bx._Vx7,
+ ", ", $e._Bx._Vx8,
+ ")"
+ )
+ )
+
+ children (
+ #(
+ #([f] : $e._Bx._Callee._Object),
+ #([t1] : $e._Bx._Vx0),
+ #([t2] : $e._Bx._Vx1),
+ #([t3] : $e._Bx._Vx2),
+ #([t4] : $e._Bx._Vx3),
+ #([t5] : $e._Bx._Vx4),
+ #([t6] : $e._Bx._Vx5),
+ #([t7] : $e._Bx._Vx6),
+ #([t8] : $e._Bx._Vx7),
+ #([t9] : $e._Bx._Vx8)
+ )
+ )
+}
+std::tr1::_Bind<*,*,std::tr1::_Bind10<*> >|std::tr1::_Bind_fty<*,*,std::tr1::_Bind10<*> >{
+ preview (
+ #(
+ "bind(", $e._Bx._Callee._Object,
+ ", ", $e._Bx._Vx0,
+ ", ", $e._Bx._Vx1,
+ ", ", $e._Bx._Vx2,
+ ", ", $e._Bx._Vx3,
+ ", ", $e._Bx._Vx4,
+ ", ", $e._Bx._Vx5,
+ ", ", $e._Bx._Vx6,
+ ", ", $e._Bx._Vx7,
+ ", ", $e._Bx._Vx8,
+ ", ", $e._Bx._Vx9,
+ ")"
+ )
+ )
+
+ children (
+ #(
+ #([f] : $e._Bx._Callee._Object),
+ #([t1] : $e._Bx._Vx0),
+ #([t2] : $e._Bx._Vx1),
+ #([t3] : $e._Bx._Vx2),
+ #([t4] : $e._Bx._Vx3),
+ #([t5] : $e._Bx._Vx4),
+ #([t6] : $e._Bx._Vx5),
+ #([t7] : $e._Bx._Vx6),
+ #([t8] : $e._Bx._Vx7),
+ #([t9] : $e._Bx._Vx8),
+ #([t10] : $e._Bx._Vx9)
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; std::tr1::function from <functional>
+;------------------------------------------------------------------------------
+std::tr1::_Impl_no_alloc0<*>|std::tr1::_Impl_no_alloc1<*>|std::tr1::_Impl_no_alloc2<*>|std::tr1::_Impl_no_alloc3<*>|std::tr1::_Impl_no_alloc4<*>|std::tr1::_Impl_no_alloc5<*>|std::tr1::_Impl_no_alloc6<*>|std::tr1::_Impl_no_alloc7<*>|std::tr1::_Impl_no_alloc8<*>|std::tr1::_Impl_no_alloc9<*>|std::tr1::_Impl_no_alloc10<*>{
+ preview ( $e._Callee._Object )
+ children ( #([functor] : $e._Callee._Object) )
+}
+std::tr1::_Impl0<*>|std::tr1::_Impl1<*>|std::tr1::_Impl2<*>|std::tr1::_Impl3<*>|std::tr1::_Impl4<*>|std::tr1::_Impl5<*>|std::tr1::_Impl6<*>|std::tr1::_Impl7<*>|std::tr1::_Impl8<*>|std::tr1::_Impl9<*>|std::tr1::_Impl10<*>{
+ preview ( $e._Callee._Object )
+ children (
+ #(
+ #([functor] : $e._Callee._Object),
+ #([allocator] : $e._Myal)
+ )
+ )
+}
+std::tr1::function<*>{
+ preview (
+ #if ($e._Impl == 0) (
+ ; Detecting empty functions is trivial.
+ "empty"
+ ) #else (
+ *$e._Impl
+ )
+ )
+
+ children (
+ #if ($e._Impl == 0) (
+ ; We make empty functions appear to have no children.
+ #array(expr: 0, size: 0)
+ ) #else (
+ #([functor and allocator] : *$e._Impl)
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; std::tr1::tuple from <tuple>
+;------------------------------------------------------------------------------
+; tuple is visualized like pair, except that we have to give fake names to tuple's children.
+std::tr1::tuple<std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil>{
+ preview (
+ "()"
+ )
+
+ children (
+ #array(expr: 0, size: 0)
+ )
+}
+std::tr1::tuple<*,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil>{
+ preview (
+ #(
+ "(", $e._Impl._Value,
+ ")"
+ )
+ )
+
+ children (
+ #(
+ [0] : $e._Impl._Value
+ )
+ )
+}
+std::tr1::tuple<*,*,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil>{
+ preview (
+ #(
+ "(", $e._Impl._Value,
+ ", ", $e._Impl._Tail._Value,
+ ")"
+ )
+ )
+
+ children (
+ #(
+ [0] : $e._Impl._Value,
+ [1] : $e._Impl._Tail._Value
+ )
+ )
+}
+std::tr1::tuple<*,*,*,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil>{
+ preview (
+ #(
+ "(", $e._Impl._Value,
+ ", ", $e._Impl._Tail._Value,
+ ", ", $e._Impl._Tail._Tail._Value,
+ ")"
+ )
+ )
+
+ children (
+ #(
+ [0] : $e._Impl._Value,
+ [1] : $e._Impl._Tail._Value,
+ [2] : $e._Impl._Tail._Tail._Value
+ )
+ )
+}
+std::tr1::tuple<*,*,*,*,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil>{
+ preview (
+ #(
+ "(", $e._Impl._Value,
+ ", ", $e._Impl._Tail._Value,
+ ", ", $e._Impl._Tail._Tail._Value,
+ ", ", $e._Impl._Tail._Tail._Tail._Value,
+ ")"
+ )
+ )
+
+ children (
+ #(
+ [0] : $e._Impl._Value,
+ [1] : $e._Impl._Tail._Value,
+ [2] : $e._Impl._Tail._Tail._Value,
+ [3] : $e._Impl._Tail._Tail._Tail._Value
+ )
+ )
+}
+std::tr1::tuple<*,*,*,*,*,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil>{
+ preview (
+ #(
+ "(", $e._Impl._Value,
+ ", ", $e._Impl._Tail._Value,
+ ", ", $e._Impl._Tail._Tail._Value,
+ ", ", $e._Impl._Tail._Tail._Tail._Value,
+ ", ", $e._Impl._Tail._Tail._Tail._Tail._Value,
+ ")"
+ )
+ )
+
+ children (
+ #(
+ [0] : $e._Impl._Value,
+ [1] : $e._Impl._Tail._Value,
+ [2] : $e._Impl._Tail._Tail._Value,
+ [3] : $e._Impl._Tail._Tail._Tail._Value,
+ [4] : $e._Impl._Tail._Tail._Tail._Tail._Value
+ )
+ )
+}
+std::tr1::tuple<*,*,*,*,*,*,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil>{
+ preview (
+ #(
+ "(", $e._Impl._Value,
+ ", ", $e._Impl._Tail._Value,
+ ", ", $e._Impl._Tail._Tail._Value,
+ ", ", $e._Impl._Tail._Tail._Tail._Value,
+ ", ", $e._Impl._Tail._Tail._Tail._Tail._Value,
+ ", ", $e._Impl._Tail._Tail._Tail._Tail._Tail._Value,
+ ")"
+ )
+ )
+
+ children (
+ #(
+ [0] : $e._Impl._Value,
+ [1] : $e._Impl._Tail._Value,
+ [2] : $e._Impl._Tail._Tail._Value,
+ [3] : $e._Impl._Tail._Tail._Tail._Value,
+ [4] : $e._Impl._Tail._Tail._Tail._Tail._Value,
+ [5] : $e._Impl._Tail._Tail._Tail._Tail._Tail._Value
+ )
+ )
+}
+std::tr1::tuple<*,*,*,*,*,*,*,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil>{
+ preview (
+ #(
+ "(", $e._Impl._Value,
+ ", ", $e._Impl._Tail._Value,
+ ", ", $e._Impl._Tail._Tail._Value,
+ ", ", $e._Impl._Tail._Tail._Tail._Value,
+ ", ", $e._Impl._Tail._Tail._Tail._Tail._Value,
+ ", ", $e._Impl._Tail._Tail._Tail._Tail._Tail._Value,
+ ", ", $e._Impl._Tail._Tail._Tail._Tail._Tail._Tail._Value,
+ ")"
+ )
+ )
+
+ children (
+ #(
+ [0] : $e._Impl._Value,
+ [1] : $e._Impl._Tail._Value,
+ [2] : $e._Impl._Tail._Tail._Value,
+ [3] : $e._Impl._Tail._Tail._Tail._Value,
+ [4] : $e._Impl._Tail._Tail._Tail._Tail._Value,
+ [5] : $e._Impl._Tail._Tail._Tail._Tail._Tail._Value,
+ [6] : $e._Impl._Tail._Tail._Tail._Tail._Tail._Tail._Value
+ )
+ )
+}
+std::tr1::tuple<*,*,*,*,*,*,*,*,std::tr1::_Nil,std::tr1::_Nil>{
+ preview (
+ #(
+ "(", $e._Impl._Value,
+ ", ", $e._Impl._Tail._Value,
+ ", ", $e._Impl._Tail._Tail._Value,
+ ", ", $e._Impl._Tail._Tail._Tail._Value,
+ ", ", $e._Impl._Tail._Tail._Tail._Tail._Value,
+ ", ", $e._Impl._Tail._Tail._Tail._Tail._Tail._Value,
+ ", ", $e._Impl._Tail._Tail._Tail._Tail._Tail._Tail._Value,
+ ", ", $e._Impl._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Value,
+ ")"
+ )
+ )
+
+ children (
+ #(
+ [0] : $e._Impl._Value,
+ [1] : $e._Impl._Tail._Value,
+ [2] : $e._Impl._Tail._Tail._Value,
+ [3] : $e._Impl._Tail._Tail._Tail._Value,
+ [4] : $e._Impl._Tail._Tail._Tail._Tail._Value,
+ [5] : $e._Impl._Tail._Tail._Tail._Tail._Tail._Value,
+ [6] : $e._Impl._Tail._Tail._Tail._Tail._Tail._Tail._Value,
+ [7] : $e._Impl._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Value
+ )
+ )
+}
+std::tr1::tuple<*,*,*,*,*,*,*,*,*,std::tr1::_Nil>{
+ preview (
+ #(
+ "(", $e._Impl._Value,
+ ", ", $e._Impl._Tail._Value,
+ ", ", $e._Impl._Tail._Tail._Value,
+ ", ", $e._Impl._Tail._Tail._Tail._Value,
+ ", ", $e._Impl._Tail._Tail._Tail._Tail._Value,
+ ", ", $e._Impl._Tail._Tail._Tail._Tail._Tail._Value,
+ ", ", $e._Impl._Tail._Tail._Tail._Tail._Tail._Tail._Value,
+ ", ", $e._Impl._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Value,
+ ", ", $e._Impl._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Value,
+ ")"
+ )
+ )
+
+ children (
+ #(
+ [0] : $e._Impl._Value,
+ [1] : $e._Impl._Tail._Value,
+ [2] : $e._Impl._Tail._Tail._Value,
+ [3] : $e._Impl._Tail._Tail._Tail._Value,
+ [4] : $e._Impl._Tail._Tail._Tail._Tail._Value,
+ [5] : $e._Impl._Tail._Tail._Tail._Tail._Tail._Value,
+ [6] : $e._Impl._Tail._Tail._Tail._Tail._Tail._Tail._Value,
+ [7] : $e._Impl._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Value,
+ [8] : $e._Impl._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Value
+ )
+ )
+}
+std::tr1::tuple<*,*,*,*,*,*,*,*,*,*>{
+ preview (
+ #(
+ "(", $e._Impl._Value,
+ ", ", $e._Impl._Tail._Value,
+ ", ", $e._Impl._Tail._Tail._Value,
+ ", ", $e._Impl._Tail._Tail._Tail._Value,
+ ", ", $e._Impl._Tail._Tail._Tail._Tail._Value,
+ ", ", $e._Impl._Tail._Tail._Tail._Tail._Tail._Value,
+ ", ", $e._Impl._Tail._Tail._Tail._Tail._Tail._Tail._Value,
+ ", ", $e._Impl._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Value,
+ ", ", $e._Impl._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Value,
+ ", ", $e._Impl._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Value,
+ ")"
+ )
+ )
+
+ children (
+ #(
+ [0] : $e._Impl._Value,
+ [1] : $e._Impl._Tail._Value,
+ [2] : $e._Impl._Tail._Tail._Value,
+ [3] : $e._Impl._Tail._Tail._Tail._Value,
+ [4] : $e._Impl._Tail._Tail._Tail._Tail._Value,
+ [5] : $e._Impl._Tail._Tail._Tail._Tail._Tail._Value,
+ [6] : $e._Impl._Tail._Tail._Tail._Tail._Tail._Tail._Value,
+ [7] : $e._Impl._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Value,
+ [8] : $e._Impl._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Value,
+ [9] : $e._Impl._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Tail._Value
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; std::tr1::array from <array>
+;------------------------------------------------------------------------------
+std::tr1::array<*>{
+ preview (
+ ; An actual array is previewed with its address.
+ ; array<T, N> is previewed like vector<T>.
+ #(
+ "[",
+ $e._EEN_SIZE,
+ "](",
+ #array(expr: $e._Elems[$i], size: $e._EEN_SIZE),
+ ")"
+ )
+ )
+
+ children (
+ ; Just like an actual array.
+ #array(expr: $e._Elems[$i], size: $e._EEN_SIZE)
+ )
+}
+std::_Array_iterator<*>|std::_Array_const_iterator<*>{
+ preview (
+ #if ($e._EEN_IDL == 0) (
+ *$e._Ptr
+ ) #else (
+ #if ($e._Idx == $e._EEN_SIZE) (
+ ; array iterators are represented by _Ptr + _Idx,
+ ; and they know how large their parent arrays are. Therefore, detecting
+ ; end iterators is trivial.
+ "end"
+ ) #else (
+ ; Like vector iterators, array iterators are previewed with what they point to.
+ $e._Ptr[$e._Idx]
+ )
+ )
+ )
+
+ children (
+ #if ($e._EEN_IDL == 0) (
+ #([ptr] : $e._Ptr)
+ ) #else (
+ #if ($e._Idx == $e._EEN_SIZE) (
+ ; We make end iterators appear to have no children.
+ #array(expr: 0, size: 0)
+ ) #else (
+ ; An array iterator is conceptually a pointer, so we make it appear to store one.
+ #([ptr] : $e._Ptr + $e._Idx)
+ )
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; stdext::hash_map from <hash_map>
+; stdext::hash_multimap from <hash_map>
+; stdext::hash_set from <hash_set>
+; stdext::hash_multiset from <hash_set>
+;------------------------------------------------------------------------------
+stdext::hash_map<*>|stdext::hash_multimap<*>|stdext::hash_set<*>|stdext::hash_multiset<*>{
+ preview (
+ #(
+ "[",
+ $e._List._Mysize,
+ "](",
+ #list(
+ head: $e._List._Myhead->_Next,
+ size: $e._List._Mysize,
+ next: _Next
+ ) : $e._Myval,
+ ")"
+ )
+ )
+
+ children (
+ #list(
+ head: $e._List._Myhead->_Next,
+ size: $e._List._Mysize,
+ next: _Next
+ ) : $e._Myval
+ )
+}
+
+;------------------------------------------------------------------------------
+; std::tr1::unordered_map from <unordered_map>
+; std::tr1::unordered_multimap from <unordered_map>
+; std::tr1::unordered_set from <unordered_set>
+; std::tr1::unordered_multiset from <unordered_set>
+;------------------------------------------------------------------------------
+std::hash<*>{
+ preview ( "hash" )
+ children ( #array(expr: 0, size: 0) )
+}
+std::tr1::unordered_map<*>|std::tr1::unordered_multimap<*>|std::tr1::unordered_set<*>|std::tr1::unordered_multiset<*>{
+ preview (
+ #(
+ "[",
+ $e._List._Mysize,
+ "](",
+ #list(
+ head: $e._List._Myhead->_Next,
+ size: $e._List._Mysize,
+ next: _Next
+ ) : $e._Myval,
+ ")"
+ )
+ )
+
+ children (
+ #(
+ #([hash] : $e.comp._Hashobj),
+ #([equal] : $e.comp._Keyeqobj),
+ #list(
+ head: $e._List._Myhead->_Next,
+ size: $e._List._Mysize,
+ next: _Next
+ ) : $e._Myval
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; std::tr1::basic_regex from <regex>
+;------------------------------------------------------------------------------
+std::tr1::basic_regex<*>{
+ preview (
+ #if ($e._Rep == 0) (
+ ; Default construction creates an empty basic_regex.
+ "empty"
+ ) #elif ($e._EEN_VIS == 1) (
+ ; By default, _ENHANCED_REGEX_VISUALIZER is defined to be 1 in debug and 0 in ship.
+ ; When it is 1, basic_regex stores the string from which it was constructed.
+ ; When it is 0, basic_regex stores only the resulting finite state machine.
+ $e._Visualization
+ ) #else (
+ ; basic_regex contains many static const flags, which would be shown in the preview by default.
+ ; Its actual members are _Rep and _Traits. _Rep holds the finite state machine, so we
+ ; use it to preview basic_regex. (It does contain some human-readable information.)
+ *$e._Rep
+ )
+ )
+
+ children (
+ #if ($e._Rep == 0) (
+ ; We make empty basic_regexes appear to have no children.
+ #array(expr: 0, size: 0)
+ ) #elif ($e._EEN_VIS == 1) (
+ ; We want to hide those static const flags.
+ ; We also want to give _Visualization a fake name.
+ #(
+ #([str] : $e._Visualization),
+ #(_Rep : $e._Rep),
+ #(_Traits : $e._Traits)
+ )
+ ) #else (
+ ; We want to hide those static const flags.
+ #(
+ _Rep : $e._Rep,
+ _Traits : $e._Traits
+ )
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; std::tr1::sub_match from <regex>
+;------------------------------------------------------------------------------
+std::tr1::sub_match<char const *>|std::tr1::sub_match<wchar_t const *>|std::tr1::sub_match<unsigned short const *>|std::tr1::sub_match<char *>|std::tr1::sub_match<wchar_t *>|std::tr1::sub_match<unsigned short *>{
+ preview (
+ ; It would be nice if we could preview sub_match with its str().
+ ; However, visualizers cannot handle strings represented by pointer pairs.
+ ; Therefore, our preview contains more limited information.
+ #if ($e.matched) (
+ ; If this sub_match participated in a match,
+ ; we preview it with its length().
+ $e.second - $e.first
+ ) #else (
+ ; Otherwise, we preview it with its matched bool (i.e. "false").
+ ; (Why not length() (i.e. "0")? It's meaningful to have
+ ; matched == true and length() == 0.
+ "false"
+ )
+ )
+
+ children (
+ #(
+ ; sub_match's three data members are public, but we list them here
+ ; (a) to display matched before first and second, and
+ ; (b) to gloss over the fact that sub_match derives from std::pair.
+ #(matched : $e.matched),
+ #(first : $e.first),
+ #(second : $e.second)
+ )
+ )
+}
+std::tr1::sub_match<std::_String_const_iterator<*> >|std::tr1::sub_match<std::_String_iterator<*> >{
+ preview (
+ #if ($e.matched) (
+ ; We visualize ssub_match and wssub_match just like csub_match and wcsub_match,
+ ; except that when determining the length(), we can't subtract iterators.
+ ; We have to subtract their stored pointers.
+ $e.second._Ptr - $e.first._Ptr
+ ) #else (
+ "false"
+ )
+ )
+
+ children (
+ #(
+ #(matched : $e.matched),
+ #(first : $e.first),
+ #(second : $e.second)
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; std::tr1::match_results from <regex>
+;------------------------------------------------------------------------------
+std::tr1::match_results<*>{
+ preview (
+ ; A match_results object is empty iff its vector _Matches is empty.
+ #if ($e._Matches._Myfirst == $e._Matches._Mylast) (
+ "empty"
+ ) #else (
+ ; We preview a non-empty match_results object with its vector.
+ $e._Matches
+ )
+ )
+
+ children (
+ #if ($e._Matches._Myfirst == $e._Matches._Mylast) (
+ ; We make empty match_results appear to have no children.
+ #array(expr: 0, size: 0)
+ ) #else (
+ ; As match_results has operator[](), prefix(), and suffix() member functions,
+ ; we make it appear to directly contain [0], [1], [2], etc. elements,
+ ; as well as [prefix] and [suffix] elements.
+ #(
+ #array(expr: $e._Matches._Myfirst[$i], size: $e._Matches._Mylast - $e._Matches._Myfirst),
+ #([prefix] : $e._Prefix),
+ #([suffix] : $e._Suffix)
+ )
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; std::tr1::regex_iterator from <regex>
+;------------------------------------------------------------------------------
+std::tr1::regex_iterator<*>{
+ preview (
+ #if ($e._MyRe == 0) (
+ ; We represent end-of-sequence regex_iterators with null regex pointers.
+ "end"
+ ) #else (
+ ; Dereferenceable regex_iterators return match_results when dereferenced,
+ ; so we'll preview them with that.
+ $e._MyVal
+ )
+ )
+
+ children (
+ #if ($e._MyRe == 0) (
+ ; We make end-of-sequence regex_iterators appear to have no children.
+ #array(expr: 0, size: 0)
+ ) #else (
+ ; For ease of understanding, we make dereferenceable regex_iterators
+ ; appear to have data members with the "for exposition only" names from TR1.
+ #(
+ #([begin] : $e._Begin),
+ #([end] : $e._End),
+ #([pregex] : $e._MyRe),
+ #([flags] : $e._Flags),
+ #([match] : $e._MyVal)
+ )
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; std::tr1::regex_token_iterator from <regex>
+;------------------------------------------------------------------------------
+std::tr1::regex_token_iterator<*>{
+ preview (
+ #if ($e._Res == 0) (
+ ; We represent end-of-sequence regex_token_iterators with null result pointers.
+ "end"
+ ) #else (
+ ; Dereferenceable regex_token_iterators return *result when dereferenced,
+ ; so we'll preview them with that.
+ *$e._Res
+ )
+ )
+
+ children (
+ #if ($e._Res == 0) (
+ ; We make end-of-sequence regex_token_iterators appear to have no children.
+ #array(expr: 0, size: 0)
+ ) #else (
+ ; For ease of understanding, we make dereferenceable regex_token_iterators
+ ; appear to have data members with the "for exposition only" names from TR1.
+ #(
+ #([position] : $e._Pos),
+ #([result] : $e._Res),
+ #([suffix] : $e._Suffix),
+ #([N] : $e._Cur),
+ #([subs] : $e._Subs)
+ )
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; std::identity, etc. from <functional>
+;------------------------------------------------------------------------------
+std::identity<*>{
+ preview ( "identity" )
+ children ( #array(expr: 0, size: 0) )
+}
+std::bit_and<*>{
+ preview ( "bit_and" )
+ children ( #array(expr: 0, size: 0) )
+}
+std::bit_or<*>{
+ preview ( "bit_or" )
+ children ( #array(expr: 0, size: 0) )
+}
+std::bit_xor<*>{
+ preview ( "bit_xor" )
+ children ( #array(expr: 0, size: 0) )
+}
+
+;------------------------------------------------------------------------------
+; std::unique_ptr from <memory>
+;------------------------------------------------------------------------------
+std::unique_ptr<*>{
+ preview (
+ #if ($e._Myptr == 0) (
+ "empty"
+ ) #else (
+ #(
+ "unique_ptr ",
+ *$e._Myptr
+ )
+ )
+ )
+
+ children (
+ #if ($e._Myptr == 0) (
+ #array(expr: 0, size: 0)
+ ) #else (
+ #([ptr] : $e._Myptr)
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; std::forward_list from <forward_list>
+;------------------------------------------------------------------------------
+std::forward_list<*>{
+ preview (
+ #(
+ "(",
+ #list(
+ head: $e._Myhead,
+ next: _Next
+ ) : $e._Myval,
+ ")"
+ )
+ )
+
+ children (
+ #list(
+ head: $e._Myhead,
+ next: _Next
+ ) : $e._Myval
+ )
+}
+std::_Flist_iterator<*>|std::_Flist_const_iterator<*>{
+ preview (
+ #if ($e._Ptr == 0) (
+ "end"
+ ) #else (
+ $e._Ptr->_Myval
+ )
+ )
+
+ children (
+ #if ($e._Ptr == 0) (
+ #array(expr: 0, size: 0)
+ ) #else (
+ #([ptr] : &$e._Ptr->_Myval)
+ )
+ )
+}
+
+
+;------------------------------------------------------------------------------
+; PROPVARIANT
+;------------------------------------------------------------------------------
+; Visualizers for VT_VECTOR C arrays
+tagCAC|tagCAUB|tagCAI|tagCAUI|tagCAL|tagCAUL|tagCAFLT|tagCADBL|tagCACY|tagCADATE|tagCABSTR|tagCABSTRBLOB|tagCABOOL|tagCASCODE|tagCAPROPVARIANT|tagCAH|tagCAUH|tagCALPSTR|tagCALPWSTR|tagCAFILETIME|tagCACLIPDATA|tagCACLSID{
+ preview(
+ #(
+ "[", $e.cElems , "](",
+ #array
+ (
+ expr : ($e.pElems)[$i],
+ size : $e.cElems
+ ),
+ ")"
+ )
+ )
+ children
+ (
+ #array
+ (
+ expr : ($e.pElems)[$i],
+ size : $e.cElems
+ )
+ )
+}
+; Visualizers for SAFE ARRAY
+tagSAFEARRAY|SAFEARRAY{
+ preview(
+ #if ($e.fFeatures & 0x0080) ; FADF_HAVEVARTYPE
+ (
+ ; Switch on the variant type field - which is stored 4 bytes
+ ; before the beginning of the SAFEARRAY type
+ #switch( ((unsigned *)&($e))[-1] )
+ #case 0x2 ; VT_I2 | VT_ARRAY
+ (
+ #(
+ "safearray of I2 = [",
+ ; output the rank array
+ #array( expr: $e.rgsabound[$i].cElements, size: $e.cDims),
+ "](",
+ ; output the data elements
+ #array(
+ expr: ((signed short *)$e.pvData)[$i],
+ size: $e.rgsabound[$r].cElements,
+ rank: $e.cDims,
+ base: $e.rgsabound[$r].lLbound
+ ),
+ ")"
+ )
+ )
+ #case 0x3 ; VT_I4 | VT_ARRAY
+ (
+ #(
+ "safearray of I4 = [",
+ ; output the rank array
+ #array( expr: $e.rgsabound[$i].cElements, size: $e.cDims),
+ "](",
+ ; output the data elements
+ #array(
+ expr: ((signed int *)$e.pvData)[$i],
+ size: $e.rgsabound[$r].cElements,
+ rank: $e.cDims,
+ base: $e.rgsabound[$r].lLbound
+ ),
+ ")"
+ )
+ )
+ #case 0x4 ; VT_R4 | VT_ARRAY
+ (
+ #(
+ "safearray of R4 = [",
+ ; output the rank array
+ #array( expr: $e.rgsabound[$i].cElements, size: $e.cDims),
+ "](",
+ ; output the data elements
+ #array(
+ expr: ((float *)$e.pvData)[$i],
+ size: $e.rgsabound[$r].cElements,
+ rank: $e.cDims,
+ base: $e.rgsabound[$r].lLbound
+ ),
+ ")"
+ )
+ )
+ #case 0x5 ; VT_R8 | VT_ARRAY
+ (
+ #(
+ "safearray of R8 = [",
+ ; output the rank array
+ #array( expr: $e.rgsabound[$i].cElements, size: $e.cDims),
+ "](",
+ ; output the data elements
+ #array(
+ expr: ((double *)$e.pvData)[$i],
+ size: $e.rgsabound[$r].cElements,
+ rank: $e.cDims,
+ base: $e.rgsabound[$r].lLbound
+ ),
+ ")"
+ )
+ )
+ #case 0x6 ; VT_CY | VT_ARRAY
+ (
+ #(
+ "safearray of CY = [",
+ ; output the rank array
+ #array( expr: $e.rgsabound[$i].cElements, size: $e.cDims),
+ "](",
+ ; output the data elements
+ #array(
+ expr: ((CY *)$e.pvData)[$i],
+ size: $e.rgsabound[$r].cElements,
+ rank: $e.cDims,
+ base: $e.rgsabound[$r].lLbound
+ ),
+ ")"
+ )
+ )
+ #case 0x7 ; VT_DATE | VT_ARRAY
+ (
+ #(
+ "safearray of DATE = [",
+ ; output the rank array
+ #array( expr: $e.rgsabound[$i].cElements, size: $e.cDims),
+ "](",
+ ; output the data elements
+ #array(
+ expr: ((DATE *)$e.pvData)[$i],
+ size: $e.rgsabound[$r].cElements,
+ rank: $e.cDims,
+ base: $e.rgsabound[$r].lLbound
+ ),
+ ")"
+ )
+ )
+ #case 0x8 ; VT_BSTR | VT_ARRAY
+ (
+ #(
+ "safearray of BSTR = [",
+ ; output the rank array
+ #array( expr: $e.rgsabound[$i].cElements, size: $e.cDims),
+ "](",
+ ; output the data elements
+ #array(
+ expr: ((wchar_t **)$e.pvData)[$i],
+ size: $e.rgsabound[$r].cElements,
+ rank: $e.cDims,
+ base: $e.rgsabound[$r].lLbound
+ ),
+ ")"
+ )
+ )
+ #case 0xa ; VT_ERROR | VT_ARRAY
+ (
+ #(
+ "safearray of ERROR = [",
+ ; output the rank array
+ #array( expr: $e.rgsabound[$i].cElements, size: $e.cDims),
+ "](",
+ ; output the data elements
+ #array(
+ expr: ((long *)$e.pvData)[$i],
+ size: $e.rgsabound[$r].cElements,
+ rank: $e.cDims,
+ base: $e.rgsabound[$r].lLbound
+ ),
+ ")"
+ )
+ )
+ #case 0xb ; VT_BOOL | VT_ARRAY
+ (
+ #(
+ "safearray of BOOL = [",
+ ; output the rank array
+ #array( expr: $e.rgsabound[$i].cElements, size: $e.cDims),
+ "](",
+ ; output the data elements
+ #array(
+ expr: ((short *)$e.pvData)[$i],
+ size: $e.rgsabound[$r].cElements,
+ rank: $e.cDims,
+ base: $e.rgsabound[$r].lLbound
+ ),
+ ")"
+ )
+ )
+ #case 0xc ; VT_VARIANT | VT_ARRAY
+ (
+ #(
+ "safearray of VARIANT = [",
+ ; output the rank array
+ #array( expr: $e.rgsabound[$i].cElements, size: $e.cDims),
+ "](",
+ ; output the data elements
+ #array(
+ expr: ((tagVARIANT *)$e.pvData)[$i],
+ size: $e.rgsabound[$r].cElements,
+ rank: $e.cDims,
+ base: $e.rgsabound[$r].lLbound
+ ),
+ ")"
+ )
+ )
+ #case 0x10 ; VT_I1 | VT_ARRAY
+ (
+ #(
+ "safearray of I1 = [",
+ ; output the rank array
+ #array( expr: $e.rgsabound[$i].cElements, size: $e.cDims),
+ "](",
+ ; output the data elements
+ #array(
+ expr: ((signed char *)$e.pvData)[$i],
+ size: $e.rgsabound[$r].cElements,
+ rank: $e.cDims,
+ base: $e.rgsabound[$r].lLbound
+ ),
+ ")"
+ )
+ )
+ #case 0x11 ; VT_UI1 | VT_ARRAY
+ (
+ #(
+ "safearray of UI1 = [",
+ ; output the rank array
+ #array( expr: $e.rgsabound[$i].cElements, size: $e.cDims),
+ "](",
+ ; output the data elements
+ #array(
+ expr: ((unsigned char *)$e.pvData)[$i],
+ size: $e.rgsabound[$r].cElements,
+ rank: $e.cDims,
+ base: $e.rgsabound[$r].lLbound
+ ),
+ ")"
+ )
+ )
+ #case 0x12 ; VT_UI2 | VT_ARRAY
+ (
+ #(
+ "safearray of UI2 = [",
+ ; output the rank array
+ #array( expr: $e.rgsabound[$i].cElements, size: $e.cDims),
+ "](",
+ ; output the data elements
+ #array(
+ expr: ((unsigned short *)$e.pvData)[$i],
+ size: $e.rgsabound[$r].cElements,
+ rank: $e.cDims,
+ base: $e.rgsabound[$r].lLbound
+ ),
+ ")"
+ )
+ )
+ #case 0x13 ; VT_UI4 | VT_ARRAY
+ (
+ #(
+ "safearray of UI4 = [",
+ ; output the rank array
+ #array( expr: $e.rgsabound[$i].cElements, size: $e.cDims),
+ "](",
+ ; output the data elements
+ #array(
+ expr: ((unsigned int *)$e.pvData)[$i],
+ size: $e.rgsabound[$r].cElements,
+ rank: $e.cDims,
+ base: $e.rgsabound[$r].lLbound
+ ),
+ ")"
+ )
+ )
+ #case 0x14 ; VT_I8 | VT_ARRAY
+ (
+ #(
+ "safearray of I8 = [",
+ ; output the rank array
+ #array( expr: $e.rgsabound[$i].cElements, size: $e.cDims),
+ "](",
+ ; output the data elements
+ #array(
+ expr: ((signed __int64 *)$e.pvData)[$i],
+ size: $e.rgsabound[$r].cElements,
+ rank: $e.cDims,
+ base: $e.rgsabound[$r].lLbound
+ ),
+ ")"
+ )
+ )
+ #case 0x15 ; VT_UI8 | VT_ARRAY
+ (
+ #(
+ "safearray of UI8 = [",
+ ; output the rank array
+ #array( expr: $e.rgsabound[$i].cElements, size: $e.cDims),
+ "](",
+ ; output the data elements
+ #array(
+ expr: ((unsigned __int64 *)$e.pvData)[$i],
+ size: $e.rgsabound[$r].cElements,
+ rank: $e.cDims,
+ base: $e.rgsabound[$r].lLbound
+ ),
+ ")"
+ )
+ )
+ #case 0x16 ; VT_INT | VT_ARRAY
+ (
+ #(
+ "safearray of INT = [",
+ ; output the rank array
+ #array( expr: $e.rgsabound[$i].cElements, size: $e.cDims),
+ "](",
+ ; output the data elements
+ #array(
+ expr: ((int *)$e.pvData)[$i],
+ size: $e.rgsabound[$r].cElements,
+ rank: $e.cDims,
+ base: $e.rgsabound[$r].lLbound
+ ),
+ ")"
+ )
+ )
+ #case 0x17 ; VT_UINT | VT_ARRAY
+ (
+ #(
+ "safearray of UINT = [",
+ ; output the rank array
+ #array( expr: $e.rgsabound[$i].cElements, size: $e.cDims),
+ "](",
+ ; output the data elements
+ #array(
+ expr: ((unsigned *)$e.pvData)[$i],
+ size: $e.rgsabound[$r].cElements,
+ rank: $e.cDims,
+ base: $e.rgsabound[$r].lLbound
+ ),
+ ")"
+ )
+ )
+ #case 0x1e ; VT_LPSTR | VT_ARRAY
+ (
+ #(
+ "safearray of LPSTR = [",
+ ; output the rank array
+ #array( expr: $e.rgsabound[$i].cElements, size: $e.cDims),
+ "](",
+ ; output the data elements
+ #array(
+ expr: ((char **)$e.pvData)[$i],
+ size: $e.rgsabound[$r].cElements,
+ rank: $e.cDims,
+ base: $e.rgsabound[$r].lLbound
+ ),
+ ")"
+ )
+ )
+ #case 0x1f ; VT_LPWSTR | VT_ARRAY
+ (
+ #(
+ "safearray of LPWSTR = [",
+ ; output the rank array
+ #array( expr: $e.rgsabound[$i].cElements, size: $e.cDims),
+ "](",
+ ; output the data elements
+ #array(
+ expr: ((wchar_t **)$e.pvData)[$i],
+ size: $e.rgsabound[$r].cElements,
+ rank: $e.cDims,
+ base: $e.rgsabound[$r].lLbound
+ ),
+ ")"
+ )
+ )
+ #case 0x40 ; VT_FILETIME | VT_ARRAY
+ (
+ #(
+ "safearray of FILETIME = [",
+ ; output the rank array
+ #array( expr: $e.rgsabound[$i].cElements, size: $e.cDims),
+ "](",
+ ; output the data elements
+ #array(
+ expr: ((FILETIME *)$e.pvData)[$i],
+ size: $e.rgsabound[$r].cElements,
+ rank: $e.cDims,
+ base: $e.rgsabound[$r].lLbound
+ ),
+ ")"
+ )
+ )
+ #case 0x47 ; VT_CLIPDATA | VT_ARRAY
+ (
+ #(
+ "safearray of CLIPDATA = [",
+ ; output the rank array
+ #array( expr: $e.rgsabound[$i].cElements, size: $e.cDims),
+ "](",
+ ; output the data elements
+ #array(
+ expr: ((CLIPDATA *)$e.pvData)[$i],
+ size: $e.rgsabound[$r].cElements,
+ rank: $e.cDims,
+ base: $e.rgsabound[$r].lLbound
+ ),
+ ")"
+ )
+ )
+ #case 0x48 ; VT_CLSID | VT_ARRAY
+ (
+ #(
+ "safearray of CLSID = [",
+ ; output the rank array
+ #array( expr: $e.rgsabound[$i].cElements, size: $e.cDims),
+ "](",
+ ; output the data elements
+ #array(
+ expr: ((CLSID *)$e.pvData)[$i],
+ size: $e.rgsabound[$r].cElements,
+ rank: $e.cDims,
+ base: $e.rgsabound[$r].lLbound
+ ),
+ ")"
+ )
+ )
+ )
+ #elif ($e.fFeatures & 0x0100) ; FADF_BSTR
+ (
+ #("safearray of BSTR = ",#array(expr: $e.rgsabound[$i].cElements, size: $e.cDims) : #("[",$e,"]"), "(", #array(expr: ((wchar_t * *)$e.pvData)[$i], size: $e.rgsabound[$r].cElements, rank: $e.cDims, base: $e.rgsabound[$r].lLbound ), ")")
+ )
+ #elif ($e.fFeatures & 0x0200) ; FADF_UNKNOWN
+ (
+ #("safearray of IUnknown* = [",#array(expr: $e.rgsabound[$i].cElements, size: $e.cDims), "](", #array(expr: ((IUnknown * *)$e.pvData)[$i], size: $e.rgsabound[$r].cElements, rank: $e.cDims, base: $e.rgsabound[$r].lLbound ), ")")
+ )
+ #elif ($e.fFeatures & 0x0400) ; FADF_DISPATCH
+ (
+ #("safearray of IDispatch* = [",#array(expr: $e.rgsabound[$i].cElements, size: $e.cDims), "](", #array(expr: ((IDispatch * *)$e.pvData)[$i], size: $e.rgsabound[$r].cElements, rank: $e.cDims, base: $e.rgsabound[$r].lLbound ), ")")
+ )
+ #elif ($e.fFeatures & 0x0800) ; FADF_VARIANT
+ (
+ #("safearray of VARIANT = ",#array(expr: $e.rgsabound[$i].cElements, size: $e.cDims) : #("[",$e,"]"), "(", #array(expr: ((tagVARIANT *)$e.pvData)[$i], size: $e.rgsabound[$r].cElements, rank: $e.cDims, base: $e.rgsabound[$r].lLbound ), ")")
+ )
+ )
+ children
+ (
+ #( ;[actual members]: [$e,!],
+ #if ($e.fFeatures & 0x0080) ; FADF_HAVEVARTYPE
+ (
+ #switch( ((unsigned *)&($e))[-1] ) ; for some reason the VT field is before the SAFEARRAY struct
+ #case 2 ; VT_I2|VT_ARRAY
+ (
+ #array(
+ expr: ((signed short *)$e.pvData)[$i],
+ size: $e.rgsabound[$r].cElements,
+ rank: $e.cDims,
+ base: $e.rgsabound[$r].lLbound
+ )
+ )
+ #case 3 ; VT_I4|VT_ARRAY
+ (
+ #array(
+ expr: ((signed int *)$e.pvData)[$i],
+ size: $e.rgsabound[$r].cElements,
+ rank: $e.cDims,
+ base: $e.rgsabound[$r].lLbound
+ )
+ )
+ #case 4 ; VT_R4|VT_ARRAY
+ (
+ #array(
+ expr: ((float *)$e.pvData)[$i],
+ size: $e.rgsabound[$r].cElements,
+ rank: $e.cDims,
+ base: $e.rgsabound[$r].lLbound
+ )
+ )
+ #case 5 ; VT_R8|VT_ARRAY
+ (
+ #array(
+ expr: ((double *)$e.pvData)[$i],
+ size: $e.rgsabound[$r].cElements,
+ rank: $e.cDims,
+ base: $e.rgsabound[$r].lLbound
+ )
+ )
+ #case 0x10 ; VT_I1|VT_ARRAY
+ (
+ #array(
+ expr: ((signed char *)$e.pvData)[$i],
+ size: $e.rgsabound[$r].cElements,
+ rank: $e.cDims,
+ base: $e.rgsabound[$r].lLbound
+ )
+ )
+ #case 0x11 ; VT_UI1|VT_ARRAY
+ (
+ #array(
+ expr: ((unsigned char *)$e.pvData)[$i],
+ size: $e.rgsabound[$r].cElements,
+ rank: $e.cDims,
+ base: $e.rgsabound[$r].lLbound
+ )
+ )
+ #case 0x12 ; VT_UI2|VT_ARRAY
+ (
+ #array(
+ expr: ((unsigned short *)$e.pvData)[$i],
+ size: $e.rgsabound[$r].cElements,
+ rank: $e.cDims,
+ base: $e.rgsabound[$r].lLbound
+ )
+ )
+ #case 0x13 ; VT_UI4|VT_ARRAY
+ (
+ #array(
+ expr: ((unsigned int *)$e.pvData)[$i],
+ size: $e.rgsabound[$r].cElements,
+ rank: $e.cDims,
+ base: $e.rgsabound[$r].lLbound
+ )
+ )
+ #case 0x14 ; VT_I8|VT_ARRAY
+ (
+ #array(
+ expr: ((signed __int64 *)$e.pvData)[$i],
+ size: $e.rgsabound[$r].cElements,
+ rank: $e.cDims,
+ base: $e.rgsabound[$r].lLbound
+ )
+ )
+ #case 0x15 ; VT_UI8|VT_ARRAY
+ (
+ #array(
+ expr: ((unsigned __int64 *)$e.pvData)[$i],
+ size: $e.rgsabound[$r].cElements,
+ rank: $e.cDims,
+ base: $e.rgsabound[$r].lLbound
+ )
+ )
+ #case 0x1e ; VT_LPSTR|VT_ARRAY
+ (
+ #array(
+ expr: ((char * *)$e.pvData)[$i],
+ size: $e.rgsabound[$r].cElements,
+ rank: $e.cDims,
+ base: $e.rgsabound[$r].lLbound
+ )
+ )
+ #case 0x1f ; VT_LPWSTR|VT_ARRAY
+ (
+ #array(
+ expr: ((wchar_t **)$e.pvData)[$i],
+ size: $e.rgsabound[$r].cElements,
+ rank: $e.cDims,
+ base: $e.rgsabound[$r].lLbound
+ )
+ )
+ #case 0xc ; VT_VARIANT|VT_ARRAY
+ (
+ #array(
+ expr: ((tagVARIANT *)$e.pvData)[$i],
+ size: $e.rgsabound[$r].cElements,
+ rank: $e.cDims,
+ base: $e.rgsabound[$r].lLbound
+ )
+ )
+ #case 0xb ; VT_BOOL|VT_ARRAY
+ (
+ #array(
+ expr: ((short *)$e.pvData)[$i],
+ size: $e.rgsabound[$r].cElements,
+ rank: $e.cDims,
+ base: $e.rgsabound[$r].lLbound
+ )
+ )
+ #case 0xa ; VT_ERROR|VT_ARRAY
+ (
+ #array(
+ expr: ((long *)$e.pvData)[$i],
+ size: $e.rgsabound[$r].cElements,
+ rank: $e.cDims,
+ base: $e.rgsabound[$r].lLbound
+ )
+ )
+ #case 6 ; VT_CY|VT_ARRAY
+ (
+ #array(
+ expr: ((CY *)$e.pvData)[$i],
+ size: $e.rgsabound[$r].cElements,
+ rank: $e.cDims,
+ base: $e.rgsabound[$r].lLbound
+ )
+ )
+ #case 7 ; VT_DATE|VT_ARRAY
+ (
+ #array(
+ expr: ((DATE *)$e.pvData)[$i],
+ size: $e.rgsabound[$r].cElements,
+ rank: $e.cDims,
+ base: $e.rgsabound[$r].lLbound
+ )
+ )
+ #case 0x40 ; VT_FILETIME|VT_ARRAY
+ (
+ #array(
+ expr: ((FILETIME *)$e.pvData)[$i],
+ size: $e.rgsabound[$r].cElements,
+ rank: $e.cDims,
+ base: $e.rgsabound[$r].lLbound
+ )
+ )
+ #case 0x48 ; VT_CLSID|VT_ARRAY
+ (
+ #array(
+ expr: ((CLSID *)$e.pvData)[$i],
+ size: $e.rgsabound[$r].cElements,
+ rank: $e.cDims,
+ base: $e.rgsabound[$r].lLbound
+ )
+ )
+ #case 0x47 ; VT_CF|VT_ARRAY
+ (
+ #array(
+ expr: ((CLIPDATA *)$e.pvData)[$i],
+ size: $e.rgsabound[$r].cElements,
+ rank: $e.cDims,
+ base: $e.rgsabound[$r].lLbound
+ )
+ )
+ #case 8 ; VT_BSTR|VT_ARRAY
+ (
+ #array(
+ expr: ((wchar_t * *)$e.pvData)[$i],
+ size: $e.rgsabound[$r].cElements,
+ rank: $e.cDims,
+ base: $e.rgsabound[$r].lLbound
+ )
+ )
+ #case 0x16 ; VT_INT|VT_ARRAY
+ (
+ #array(
+ expr: ((int *)$e.pvData)[$i],
+ size: $e.rgsabound[$r].cElements,
+ rank: $e.cDims,
+ base: $e.rgsabound[$r].lLbound
+ )
+ )
+ #case 0x17 ; VT_UINT|VT_ARRAY
+ (
+ #array(
+ expr: ((unsigned int*)$e.pvData)[$i],
+ size: $e.rgsabound[$r].cElements,
+ rank: $e.cDims,
+ base: $e.rgsabound[$r].lLbound
+ )
+ )
+ #default
+ (
+ #([actual members]: [$e,!])
+ )
+ #except
+ (
+ #([actual members]: [$e,!])
+ )
+ )
+ #elif ($e.fFeatures & 0x0100) ; FADF_BSTR
+ (
+ #array(expr: ((wchar_t * *)$e.pvData)[$i], size: $e.rgsabound[$r].cElements, rank: $e.cDims, base: $e.rgsabound[$r].lLbound )
+ )
+ #elif ($e.fFeatures & 0x0200) ; FADF_UNKNOWN
+ (
+ #array(expr: ((IUnknown * *)$e.pvData)[$i], size: $e.rgsabound[$r].cElements, rank: $e.cDims, base: $e.rgsabound[$r].lLbound )
+ )
+ #elif ($e.fFeatures & 0x0400) ; FADF_DISPATCH
+ (
+ #array(expr: ((IDispatch * *)$e.pvData)[$i], size: $e.rgsabound[$r].cElements, rank: $e.cDims, base: $e.rgsabound[$r].lLbound )
+ )
+ #elif ($e.fFeatures & 0x0800) ; FADF_VARIANT
+ (
+ #array(expr: ((tagVARIANT *)$e.pvData)[$i], size: $e.rgsabound[$r].cElements, rank: $e.cDims, base: $e.rgsabound[$r].lLbound )
+ )
+ )
+ )
+}
+tagPROPVARIANT|tagVARIANT|PROPVARIANT|VARIANT{
+ preview(
+ #switch ($e.vt)
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ ;; Base Types ;;
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ #case 0 ( #("Empty") ) ; VT_EMPTY
+ #case 1 ( #("NULL") ) ; VT_NULL
+ #case 2 ( #("I2 = ", $e.iVal) ) ; VT_I2
+ #case 3 ( #("I4 = ", $e.lVal) ) ; VT_I4
+ #case 4 ( #("R4 = ", $e.fltVal) ) ; VT_R4
+ #case 5 ( #("R8 = ", $e.dblVal) ) ; VT_R8
+ #case 6 ( #("CY = ", $e.cyVal) ) ; VT_CY
+ #case 7 ( #("DATE = ", $e.date) ) ; VT_DATE
+ #case 8 ( #("BSTR = ", $e.bstrVal) ) ; VT_BSTR
+ #case 9 ( #("DISPATCH = ", $e.pdispVal) ) ; VT_DISPATCH
+ #case 10 ( #("ERROR = ", $e.scode) ) ; VT_ERROR
+ #case 0xB ( #("BOOL = ", $e.boolVal) ) ; VT_BOOL
+ #case 0xC ( #("VARIANT ") ) ; VT_VARIANT
+ #case 0xD ( #("UNKNOWN = ", $e.punkVal) ) ; VT_UNKOWN
+ #case 0xE ( #("DECIMAL = ", $e.decVal) ) ; VT_DECIMAL
+ #case 0x10 ( #("I1 = ", $e.cVal) ) ; VT_I1
+ #case 0x11 ( #("UI1 = ", $e.bVal) ) ; VT_UI1
+ #case 0x12 ( #("UI2 = ", $e.uiVal) ) ; VT_UI2
+ #case 0x13 ( #("UI4 = ", $e.ulVal) ) ; VT_UI4
+ #case 0x14 ( #("I8 = ", *(__int64*)&$e.dblVal) ) ; VT_I8
+ #case 0x15 ( #("UI8 = ", *(unsigned __int64*)&$e.dblVal) ) ; VT_UI8
+ #case 0x16 ( #("INT = ", $e.intVal) ) ; VT_INT
+ #case 0x17 ( #("UINT = ", $e.uintVal) ) ; VT_UINT
+ #case 0x18 ( #("VOID ") ) ; VT_VOID
+ #case 0x19 ( #("HRESULT ") ) ; VT_HRESULT
+ #case 0x1A ( #("PTR ") ) ; VT_PTR
+ #case 0x1B ( #("SAFEARRAY ") ) ; VT_SAFEARRAY
+ #case 0x1C ( #("CARRAY ") ) ; VT_CARRAY
+ #case 0x1D ( #("USERDEFINED ") ) ; VT_USERDEFINED
+ #case 0x1E ( #("LPSTR = ", $e.pszVal) ) ; VT_LPSTR
+ #case 0x1F ( #("LPWSTR = ", $e.pwszVal) ) ; VT_LPWSTR
+ #case 0x24 ( #("RECORD ") ) ; VT_RECORD
+ #case 0x26 ( #("UINT_PTR ") ) ; VT_UINT_PTR
+ #case 0x40 ( #("FILETIME = ", $e.filetime) ) ; VT_FILETIME
+ #case 0x42 ( #("STREAM = ", $e.pStream) ) ; VT_STREAM
+ #case 0x43 ( #("STORAGE = ", $e.pStorage) ) ; VT_STORAGE
+ #case 0x44 ( #("STREAMED_OBJECT = ", $e.pStream) ) ; VT_STREAMED_OBJECT
+ #case 0x45 ( #("STORED_OBJECT = ", $e.pStorage) ) ; VT_STORED_OBJECT
+ #case 0x46 ( #("BLOB_OBJECT = ", $e.blob ) ) ; VT_BLOB_OBJECT
+ #case 0x47 ( #("CF = ", $e.pclipdata) ) ; VT_CF
+ #case 0x48 ( #("CLSID = ", $e.puuid) ) ; VT_CLSID
+ #case 0x49 ( #("VERSIONED_STREAM = ", $e.pVersionedStream) ) ; VT_VERSIONED_STREAM
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ ;; Vector types ;;
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ #case 0x1002 ( #("vector of I2 = ", $e.cai) ) ; VT_I2|VT_VECTOR
+ #case 0x1003 ( #("vector of I4 = ", $e.cal) ) ; VT_I4|VT_VECTOR
+ #case 0x1004 ( #("vector of R4 = ", $e.caflt) ) ; VT_R4|VT_VECTOR
+ #case 0x1005 ( #("vector of R8 = ", $e.cadbl) ) ; VT_R8|VT_VECTOR
+ #case 0x1010 ( #("vector of I1 = ", $e.cac) ) ; VT_I1|VT_VECTOR
+ #case 0x1011 ( #("vector of UI1 = ", $e.caub) ) ; VT_UI1|VT_VECTOR
+ #case 0x1012 ( #("vector of UI2 = ", $e.caui) ) ; VT_UI2|VT_VECTOR
+ #case 0x1013 ( #("vector of UI4 = ", $e.caul) ) ; VT_UI4|VT_VECTOR
+ #case 0x1014 ( #("vector of I8 = ", $e.cah) ) ; VT_I8|VT_VECTOR
+ #case 0x1015 ( #("vector of UI8 = ", $e.cauh) ) ; VT_UI8|VT_VECTOR
+ #case 0x101E ( #("vector of LPSTR = ", $e.calpstr) ) ; VT_LPSTR|VT_VECTOR
+ #case 0x101F ( #("vector of LPWSTR = ", $e.calpwstr) ) ; VT_LPWSTR|VT_VECTOR
+ #case 0x100C ( #("vector of VARIANT ", $e.capropvar) ) ; VT_VARIANT|VT_VECTOR
+ #case 0x100B ( #("vector of BOOL = ", $e.cabool) ) ; VT_BOOL|VT_VECTOR
+ #case 0x100A ( #("vector of ERROR = ", $e.cascode) ) ; VT_ERROR|VT_VECTOR
+ #case 0x1006 ( #("vector of CY = ", $e.cacy) ) ; VT_CY|VT_VECTOR
+ #case 0x1007 ( #("vector of DATE = ", $e.cadate) ) ; VT_DATE|VT_VECTOR
+ #case 0x1040 ( #("vector of FILETIME = ", $e.cafiletime) ) ; VT_FILETIME|VT_VECTOR
+ #case 0x1048 ( #("vector of CLSID = ", $e.cauuid) ) ; VT_CLSID|VT_VECTOR
+ #case 0x1047 ( #("vector of CF = ", $e.caclipdata) ) ; VT_CF|VT_VECTOR
+ #case 0x1008 ( #("vector of BSTR = ", $e.cabstr) ) ; VT_BSTR|VT_VECTOR
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ ;; Byref Types ;;
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ #case 0x4016 ( #("byref of INT = ", $e.pintVal) ) ; VT_INT|VT_BYREF
+ #case 0x4017 ( #("byref of UINT = ", $e.puintVal) ) ; VT_UINT|VT_BYREF
+ #case 0x4002 ( #("byref of I2 = ", $e.piVal) ) ; VT_I2|VT_BYREF
+ #case 0x4003 ( #("byref of I4 = ", $e.plVal) ) ; VT_I4|VT_BYREF
+ #case 0x4004 ( #("byref of R4 = ", $e.pfltVal) ) ; VT_R4|VT_BYREF
+ #case 0x4005 ( #("byref of R8 = ", $e.pdblVal) ) ; VT_R8|VT_BYREF
+ #case 0x4010 ( #("byref of I1 = ", $e.pcVal) ) ; VT_I1|VT_BYREF
+ #case 0x4011 ( #("byref of UI1 = ", $e.pbVal) ) ; VT_UI1|VT_BYREF
+ #case 0x4012 ( #("byref of UI2 = ", $e.puiVal) ) ; VT_UI2|VT_BYREF
+ #case 0x4013 ( #("byref of UI4 = ", $e.pulVal) ) ; VT_UI4|VT_BYREF
+ #case 0x4014 ( #("byref of I8 = ", (__int64*)$e.pdblVal) ) ; VT_I8|VT_BYREF
+ #case 0x4015 ( #("byref of UI8 = ", (unsigned __int64*)$e.pudblVal) ) ; VT_UI8|VT_BYREF
+ #case 0x400C ( #("byref of VARIANT ", $e.pvarVal) ) ; VT_VARIANT|VT_BYREF
+ #case 0x400B ( #("byref of BOOL = ", $e.pboolVal) ) ; VT_BOOL|VT_BYREF
+ #case 0x400A ( #("byref of ERROR = ", $e.pscode) ) ; VT_ERROR|VT_BYREF
+ #case 0x4006 ( #("byref of CY = ", $e.pcyVal) ) ; VT_CY|VT_BYREF
+ #case 0x4007 ( #("byref of DATE = ", $e.pdate) ) ; VT_DATE|VT_BYREF
+ #case 0x4008 ( #("byref of BSTR = ", $e.pbstrVal) ) ; VT_BSTR|VT_BYREF
+ #case 0x400E ( #("byref of DECIMAL = ", $e.pdecVal) ) ; VT_DECIMAL|VT_BYREF
+ #case 0x400D ( #("byref of UNKNOWN = ", $e.ppunkVal) ) ; VT_UNKOWN|VT_BYREF
+ #case 0x4009 ( #("byref of DISPATCH = ", $e.ppdispVal) ) ; VT_DISPATCH|VT_BYREF
+ #case 0x6000 ( #("byref of ARRAY = ", $e.pparray) ) ; VT_ARRAY|VT_BYREF
+ #default
+ (
+ #if ($e.vt & 0x2000) ( $e.parray)
+ #else ( #("Unknown vt type = ", $e.vt))
+ )
+ )
+ children(
+ #(
+ vt: $e.vt,
+ #switch ($e.vt)
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ ;; Base Types ;;
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ #case 0x2 ( #(I2 : $e.iVal) ) ; VT_I2
+ #case 0x3 ( #(I4 : $e.lVal) ) ; VT_I4
+ #case 0x4 ( #(R4 : $e.fltVal) ) ; VT_R4
+ #case 0x5 ( #(R8 : $e.dblVal) ) ; VT_R8
+ #case 0x6 ( #(CY : $e.cyVal) ) ; VT_CY
+ #case 0x7 ( #(DATE : $e.date) ) ; VT_DATE
+ #case 0x8 ( #(BSTR : $e.bstrVal) ) ; VT_BSTR
+ #case 0x9 ( #(DISPATCH : $e.pdispVal) ) ; VT_DISPATCH
+ #case 0xA ( #(ERROR : $e.scode) ) ; VT_ERROR
+ #case 0xB ( #(BOOL : $e.boolVal) ) ; VT_BOOL
+ #case 0xD ( #(UNKNOWN : $e.punkVal) ) ; VT_UNKOWN
+ #case 0xE ( #(DECIMAL : $e.decVal) ) ; VT_DECIMAL
+ #case 0x10 ( #(I1 : $e.cVal) ) ; VT_I1
+ #case 0x11 ( #(UI1 : $e.bVal) ) ; VT_UI1
+ #case 0x12 ( #(UI2 : $e.uiVal) ) ; VT_UI2
+ #case 0x13 ( #(UI4 : $e.ulVal) ) ; VT_UI4
+ #case 0x14 ( #(I8 : *(__int64*)&$e.dblVal) ) ; VT_I8
+ #case 0x15 ( #(UI8 : *(unsigned __int64*)&$e.dblVal) ) ; VT_UI8
+ #case 0x16 ( #(INT : $e.intVal) ) ; VT_INT
+ #case 0x17 ( #(UINT : $e.uintVal) ) ; VT_UINT
+ #case 0x1E ( #(LPSTR : $e.pszVal) ) ; VT_LPSTR
+ #case 0x1F ( #(LPWSTR : $e.pwszVal) ) ; VT_LPWSTR
+ #case 0x40 ( #(FILETIME : $e.filetime) ) ; VT_FILETIME
+ #case 0x42 ( #(STREAM : $e.pStream) ) ; VT_STREAM
+ #case 0x43 ( #(STORAGE : $e.pStorage) ) ; VT_STORAGE
+ #case 0x44 ( #(STREAMED_OBJECT : $e.pStream) ) ; VT_STREAMED_OBJECT
+ #case 0x45 ( #(STORED_OBJECT : $e.pStorage) ) ; VT_STORED_OBJECT
+ #case 0x46 ( #(BLOB_OBJECT : $e.blob ) ) ; VT_BLOB_OBJECT
+ #case 0x47 ( #(CF : $e.pclipdata) ) ; VT_CF
+ #case 0x48 ( #(CLSID : $e.puuid) ) ; VT_CLSID
+ #case 0x49 ( #(VERSIONED_STREAM : $e.pVersionedStream) ) ; VT_VERSIONED_STREAM
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ ;; Vector types ;;
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ #case 0x1002 ( #(vector of I2 : $e.cai) ) ; VT_I2|VT_VECTOR
+ #case 0x1003 ( #(vector of I4 : $e.cal) ) ; VT_I4|VT_VECTOR
+ #case 0x1004 ( #(vector of R4 : $e.caflt) ) ; VT_R4|VT_VECTOR
+ #case 0x1005 ( #(vector of R8 : $e.cadbl) ) ; VT_R8|VT_VECTOR
+ #case 0x1010 ( #(vector of I1 : $e.cac) ) ; VT_I1|VT_VECTOR
+ #case 0x1011 ( #(vector of UI1 : $e.caub) ) ; VT_UI1|VT_VECTOR
+ #case 0x1012 ( #(vector of UI2 : $e.caui) ) ; VT_UI2|VT_VECTOR
+ #case 0x1013 ( #(vector of UI4 : $e.caul) ) ; VT_UI4|VT_VECTOR
+ #case 0x1014 ( #(vector of I8 : $e.cah) ) ; VT_I8|VT_VECTOR
+ #case 0x1015 ( #(vector of UI8 : $e.cauh) ) ; VT_UI8|VT_VECTOR
+ #case 0x101E ( #(vector of LPSTR : $e.calpstr) ) ; VT_LPSTR|VT_VECTOR
+ #case 0x101F ( #(vector of LPWSTR : $e.calpwstr) ) ; VT_LPWSTR|VT_VECTOR
+ #case 0x100C ( #(vector of VARIANT : $e.capropvar) ) ; VT_VARIANT|VT_VECTOR
+ #case 0x100B ( #(vector of BOOL : $e.cabool) ) ; VT_BOOL|VT_VECTOR
+ #case 0x100A ( #(vector of ERROR : $e.cascode) ) ; VT_ERROR|VT_VECTOR
+ #case 0x1006 ( #(vector of CY : $e.cacy) ) ; VT_CY|VT_VECTOR
+ #case 0x1007 ( #(vector of DATE : $e.cadate) ) ; VT_DATE|VT_VECTOR
+ #case 0x1040 ( #(vector of FILETIME : $e.cafiletime) ) ; VT_FILETIME|VT_VECTOR
+ #case 0x1048 ( #(vector of CLSID : $e.cauuid) ) ; VT_CLSID|VT_VECTOR
+ #case 0x1047 ( #(vector of CF : $e.caclipdata) ) ; VT_CF|VT_VECTOR
+ #case 0x1008 ( #(vector of BSTR : $e.cabstr) ) ; VT_BSTR|VT_VECTOR
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ ;; Byref Types ;;
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ #case 0x4016 ( #(byref of INT : $e.pintVal) ) ; VT_INT|VT_BYREF
+ #case 0x4017 ( #(byref of UINT : $e.puintVal) ) ; VT_UINT|VT_BYREF
+ #case 0x4002 ( #(byref of I2 : $e.piVal) ) ; VT_I2|VT_BYREF
+ #case 0x4003 ( #(byref of I4 : $e.plVal) ) ; VT_I4|VT_BYREF
+ #case 0x4004 ( #(byref of R4 : $e.pfltVal) ) ; VT_R4|VT_BYREF
+ #case 0x4005 ( #(byref of R8 : $e.pdblVal) ) ; VT_R8|VT_BYREF
+ #case 0x4010 ( #(byref of I1 : $e.pcVal) ) ; VT_I1|VT_BYREF
+ #case 0x4011 ( #(byref of UI1 : $e.pbVal) ) ; VT_UI1|VT_BYREF
+ #case 0x4012 ( #(byref of UI2 : $e.puiVal) ) ; VT_UI2|VT_BYREF
+ #case 0x4013 ( #(byref of UI4 : $e.pulVal) ) ; VT_UI4|VT_BYREF
+ #case 0x4014 ( #(byref of I8 : (__int64*)$e.pdblVal) ) ; VT_I8|VT_BYREF
+ #case 0x4015 ( #(byref of UI8 : (unsigned __int64*)$e.pdblVal) ) ; VT_UI8|VT_BYREF
+ #case 0x400C ( #(byref of VARIANT : $e.pvarVal) ) ; VT_VARIANT|VT_BYREF
+ #case 0x400B ( #(byref of BOOL : $e.pboolVal) ) ; VT_BOOL|VT_BYREF
+ #case 0x400A ( #(byref of ERROR : $e.pscode) ) ; VT_ERROR|VT_BYREF
+ #case 0x4006 ( #(byref of CY : $e.pcyVal) ) ; VT_CY|VT_BYREF
+ #case 0x4007 ( #(byref of DATE : $e.pdate) ) ; VT_DATE|VT_BYREF
+ #case 0x4008 ( #(byref of BSTR : $e.pbstrVal) ) ; VT_BSTR|VT_BYREF
+ #case 0x400E ( #(byref of DECIMAL : $e.pdecVal) ) ; VT_DECIMAL|VT_BYREF
+ #case 0x400D ( #(byref of UNKNOWN : $e.ppunkVal) ) ; VT_UNKOWN|VT_BYREF
+ #case 0x4009 ( #(byref of DISPATCH : $e.ppdispVal) ) ; VT_DISPATCH|VT_BYREF
+ #case 0x6000 ( #(byref of ARRAY : $e.pparray) ) ; VT_ARRAY|VT_BYREF
+
+ ; the following are either empty or invalid vt values for a variant
+ ; #case 0 ( #(Empty :) ) ; VT_EMPTY
+ ; #case 0x1 ( #(NULL :) ) ; VT_NULL
+ ; #case 0xC ( #(VARIANT :) ) ; VT_VARIANT
+ ; #case 0x18 ( #(VOID :) ) ; VT_VOID
+ ; #case 0x19 ( #(HRESULT :) ) ; VT_HRESULT
+ ; #case 0x1A ( #(PTR :) ) ; VT_PTR
+ ; #case 0x1B ( #(SAFEARRAY :) ) ; VT_SAFEARRAY
+ ; #case 0x1C ( #(CARRAY :) ) ; VT_CARRAY
+ ; #case 0x1D ( #(USERDEFINED :) ) ; VT_USERDEFINED
+ ; #case 0x24 ( #(RECORD :) ) ; VT_RECORD
+ ; #case 0x26 ( #(UINT_PTR :) ) ; VT_UINT_PTR
+ #default
+ (
+ #if ($e.vt & 0x2000 )
+ ( #(safearray: $e.parray))
+ #else
+ (
+ #(
+ [raw members]: [$e,!] ; unformatted data members
+ )
+ )
+ )
+ #except
+ (
+ #(
+ [raw members]: [$e,!] ; unformatted data members
+ )
+ )
+ )
+ )
+}
+
+; Visualizers for data structures in namespace Concurrency
+;------------------------------------------------------------------------------
+; Concurrency::message from <agents.h>
+;------------------------------------------------------------------------------
+Concurrency::message<*>{
+ preview (
+ #(
+ $e.payload
+ )
+ )
+
+ children (
+ #(
+ #(payload: $e.payload),
+ #([msg_id]: $e._M_id)
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; Concurrency::multi_link_registry from <agents.h>
+;------------------------------------------------------------------------------
+Concurrency::multi_link_registry<*>{
+ preview (
+ #(
+ "[",
+ $e._M_vector._M_index,
+ "](",
+ #array(
+ expr: *($e._M_vector._M_array[$i]),
+ size: $e._M_vector._M_index
+ ),
+ ")"
+ )
+ )
+
+ children (
+ #(
+ #([size]: $e._M_vector._M_index),
+ #array(
+ expr: *($e._M_vector._M_array[$i]),
+ size: $e._M_vector._M_index
+ )
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; Concurrency::details::_Queue from <agents.h>
+;------------------------------------------------------------------------------
+Concurrency::details::_Queue<*>{
+ preview (
+ #(
+ "[",
+ $e._M_count,
+ "](",
+ #list(
+ head: $e._M_pHead,
+ next: _M_pNext,
+ size: _M_count
+ ),
+ ")"
+ )
+ )
+
+ children (
+ #(
+ #([size]: $e._M_count),
+ #list(
+ head: $e._M_pHead,
+ next: _M_pNext,
+ size: _M_count
+ )
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; Concurrency::unbounded_buffer from <agents.h>
+;------------------------------------------------------------------------------
+Concurrency::unbounded_buffer<*>{
+ preview (
+ #(
+ $e._M_messageBuffer
+ )
+ )
+
+ children (
+ #(
+ #(unprocessed_messages: $e._M_messageProcessor._M_queuedMessages._M_queue),
+ #(messages: $e._M_messageBuffer),
+ #(message_filter: *($e._M_pFilter)),
+ #(linked_sources: $e._M_connectedSources._M_links),
+ #(linked_targets: $e._M_connectedTargets),
+ #(reserving_target: *($e._M_pReservedFor)),
+ #(Scheduler: *($e._M_messageProcessor._M_pScheduler)),
+ #(ScheduleGroup: *($e._M_messageProcessor._M_pScheduleGroup))
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; Concurrency::overwrite_buffer from <agents.h>
+;------------------------------------------------------------------------------
+Concurrency::overwrite_buffer<*>{
+ preview (
+ #(
+ $e._M_pMessage
+ )
+ )
+
+ children (
+ #(
+ #(value: *($e._M_pMessage)),
+ #(unprocessed_messages: $e._M_messageProcessor._M_queuedMessages._M_queue),
+ #(message_filter: *($e._M_pFilter)),
+ #(linked_sources: $e._M_connectedSources._M_links),
+ #(linked_targets: $e._M_connectedTargets),
+ #(reserving_target: *($e._M_pReservedFor)),
+ #(reserved_message: *($e._M_pReservedMessage)),
+ #(Scheduler: *($e._M_messageProcessor._M_pScheduler)),
+ #(ScheduleGroup: *($e._M_messageProcessor._M_pScheduleGroup))
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; Concurrency::single_assignment from <agents.h>
+;------------------------------------------------------------------------------
+Concurrency::single_assignment<*>{
+ preview (
+ #(
+ $e._M_pMessage
+ )
+ )
+
+ children (
+ #(
+ #(value: *($e._M_pMessage)),
+ #(unprocessed_messages: $e._M_messageProcessor._M_queuedMessages._M_queue),
+ #(message_filter: *($e._M_pFilter)),
+ #(linked_sources: $e._M_connectedSources._M_links),
+ #(linked_targets: $e._M_connectedTargets),
+ #(reserving_target: *($e._M_pReservedFor)),
+ #(Scheduler: *($e._M_messageProcessor._M_pScheduler)),
+ #(ScheduleGroup: *($e._M_messageProcessor._M_pScheduleGroup))
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; Concurrency::call from <agents.h>
+;------------------------------------------------------------------------------
+Concurrency::call<*>{
+ preview (
+ #(
+ $e._M_pFunc
+ )
+ )
+
+ children (
+ #(
+ #(call_method: $e._M_pFunc),
+ #(unprocessed_messages: $e._M_messageProcessor._M_queuedMessages._M_queue),
+ #(message_filter: *($e._M_pFilter)),
+ #(linked_sources: $e._M_connectedSources._M_links),
+ #(Scheduler: *($e._M_messageProcessor._M_pScheduler)),
+ #(ScheduleGroup: *($e._M_messageProcessor._M_pScheduleGroup))
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; Concurrency::transformer from <agents.h>
+;------------------------------------------------------------------------------
+Concurrency::transformer<*>{
+ preview (
+ #(
+ $e._M_pFunc
+ )
+ )
+
+ children (
+ #(
+ #(transform_method: $e._M_pFunc),
+ #(unprocessed_messages: $e._M_messageProcessor._M_queuedMessages._M_queue),
+ #(messages: $e._M_messageBuffer),
+ #(message_filter: *($e._M_pFilter)),
+ #(linked_sources: $e._M_connectedSources._M_links),
+ #(linked_target: *($e._M_connectedTargets._M_connectedLink)),
+ #(reserving_target: *($e._M_pReservedFor)),
+ #(Scheduler: *($e._M_messageProcessor._M_pScheduler)),
+ #(ScheduleGroup: *($e._M_messageProcessor._M_pScheduleGroup))
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; Concurrency::choice from <agents.h>
+;------------------------------------------------------------------------------
+Concurrency::choice<*>{
+ preview (
+ #(
+ "[",
+ #if ($e._M_pSingleAssignment->_M_fIsInitialized) ("initialized")
+ #else ("not_initialized"),
+ "] ",
+ $e._M_sourceTuple
+ )
+ )
+
+ children (
+ #(
+ #([input_count]: $e._M_pSingleAssignment->_M_connectedSources._M_links._M_vector._M_index),
+ #(index: $e._M_pSingleAssignment->_M_pMessage->payload),
+ #(source_tuple: $e._M_sourceTuple),
+ #(linked_sources: $e._M_pSingleAssignment->_M_connectedSources._M_links),
+ #(linked_targets: $e._M_pSingleAssignment->_M_connectedTargets),
+ #(reserving_target: *($e._M_pSingleAssignment->_M_pReservedFor)),
+ #(Scheduler: *($e._M_pScheduler)),
+ #(ScheduleGroup: *($e._M_pScheduleGroup)),
+ #([raw _M_pSourceChoices] : $e._M_pSourceChoices)
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; Concurrency::join<*,*>::_MessageArray from <agents.h>
+;------------------------------------------------------------------------------
+Concurrency::join<*,*>::_MessageArray{
+ preview (
+ #(
+ "[",
+ $e._M_count,
+ "](",
+ #array(
+ expr: *(((Concurrency::message<$T1>**)$e._M_messages)[$i]),
+ size: $e._M_count
+ ),
+ ")"
+ )
+ )
+
+ children (
+ #(
+ #([size]: $e._M_count),
+ #array(
+ expr: *(((Concurrency::message<$T1>**)$e._M_messages)[$i]),
+ size: $e._M_count
+ )
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; Concurrency::join<*,*>::_SavedMessageIdArray from <agents.h>
+;------------------------------------------------------------------------------
+Concurrency::join<*,*>::_SavedMessageIdArray{
+ preview (
+ #(
+ "[",
+ $e._M_count,
+ "](",
+ #array(
+ expr: ((int*)$e._M_savedIds)[$i],
+ size: $e._M_count
+ ),
+ ")"
+ )
+ )
+
+ children (
+ #(
+ #([size]: $e._M_count),
+ #array(
+ expr: ((int*)$e._M_savedIds)[$i],
+ size: $e._M_count
+ )
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; Concurrency::join from <agents.h>
+;------------------------------------------------------------------------------
+Concurrency::join<*,*>{
+ preview (
+ #(
+ "[",
+ $e._M_messageArray._M_count - $e._M_messagesRemaining,
+ "/",
+ $e._M_messageArray._M_count,
+ "](",
+ #array(
+ expr: *($e._M_connectedSources._M_links._M_vector._M_array[$i]),
+ size: $e._M_connectedSources._M_links._M_vector._M_index
+ ),
+ ")"
+ )
+ )
+
+ children (
+ #(
+ #([join_type]: (Concurrency::join_type)$T2),
+ #([offer_count]: $e._M_messageArray._M_count - $e._M_messagesRemaining),
+ #(offer_IDs: $e._M_savedMessageIdArray),
+ #([input_count]: $e._M_messageArray._M_count),
+ #(input_values: $e._M_messageArray),
+ #(messages: $e._M_messageBuffer),
+ #(message_filter: *($e._M_pFilter)),
+ #(linked_sources: $e._M_connectedSources._M_links),
+ #(linked_target: $e._M_connectedTargets._M_connectedLink),
+ #(reserving_target: *($e._M_pReservedFor)),
+ #(Scheduler: *($e._M_messageProcessor._M_pScheduler)),
+ #(ScheduleGroup: *($e._M_messageProcessor._M_pScheduleGroup))
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; Concurrency::multitype_join from <agents.h>
+;------------------------------------------------------------------------------
+Concurrency::multitype_join<*,*>{
+ preview (
+ #(
+ "[",
+ $e._M_pJoinNode->_M_connectedSources._M_links._M_vector._M_index - $e._M_pJoinNode->_M_counter,
+ "/",
+ $e._M_pJoinNode->_M_connectedSources._M_links._M_vector._M_index,
+ "]",
+ $e._M_sourceTuple
+ )
+ )
+
+ children (
+ #(
+ #([join_type]: (Concurrency::join_type)$T2),
+ #([offer_count]: $e._M_pJoinNode->_M_connectedSources._M_links._M_vector._M_index - $e._M_pJoinNode->_M_counter),
+ #([input_count]: $e._M_pJoinNode->_M_connectedSources._M_links._M_vector._M_index),
+ #(source_tuple: $e._M_sourceTuple),
+ #(messages: $e._M_pJoinNode->_M_messageBuffer),
+ #(linked_sources: $e._M_pJoinNode->_M_connectedSources._M_links),
+ #(linked_target: $e._M_pJoinNode->_M_connectedTargets._M_connectedLink),
+ #(reserving_target: *($e._M_pJoinNode->_M_pReservedFor)),
+ #(Scheduler: *($e._M_pJoinNode->_M_messageProcessor._M_pScheduler)),
+ #(ScheduleGroup: *($e._M_pJoinNode->_M_messageProcessor._M_pScheduleGroup)),
+ #([raw _M_pSourceJoins] : $e._M_pSourceJoins)
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; Concurrency::timer from <agents.h>
+;------------------------------------------------------------------------------
+Concurrency::timer<*>{
+ preview (
+ #(
+ $e._M_state
+ )
+ )
+
+ children (
+ #(
+ #(state: $e._M_state),
+ #(value: $e._M_value),
+ #(repeating: $e._M_fRepeating),
+ #(interval_ms: $e._M_ms),
+ #(linked_target: *($e._M_connectedTargets._M_connectedLink)),
+ #(reserving_target: *($e._M_pReservedFor)),
+ #(Scheduler: *($e._M_messageProcessor._M_pScheduler)),
+ #(ScheduleGroup: *($e._M_messageProcessor._M_pScheduleGroup))
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; Concurrency::details::SchedulerBase from <SchedulerBase.h>
+; Concurrency::details::ThreadScheduler from <ThreadScheduler.h>
+; Concurrency::details::UMSThreadScheduler from <UMSThreadScheduler.h>
+;------------------------------------------------------------------------------
+Concurrency::details::SchedulerBase|Concurrency::details::ThreadScheduler|Concurrency::details::UMSThreadScheduler{
+ preview (
+ #(
+ "[",
+ $e.m_id,
+ "] ",
+ #if ($e.m_schedulerKind == 0) ("ThreadScheduler")
+ #else ("UmsScheduler"),
+ #if ($e.m_id == $e.s_pDefaultScheduler->m_id) (", default")
+ #else ("")
+ )
+ )
+
+ children (
+ #(
+ #(ID: $e.m_id),
+ #(SchedulerPolicy: $e.m_policy),
+ #(VirtualProcessorCount: $e.m_virtualProcessorCount),
+ #(ReferenceCount: $e.m_refCount),
+ #([isDefaultScheduler]: $e.m_id == $e.s_pDefaultScheduler->m_id)
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; Concurrency::details::ScheduleGroupBase from <ScheduleGroupBase.h>
+; Concurrency::details::CacheLocalScheduleGroup from <CacheLocalScheduleGroup.h>
+; Concurrency::details::FairScheduleGroup from <FairScheduleGroup.h>
+;------------------------------------------------------------------------------
+Concurrency::details::ScheduleGroupBase|Concurrency::details::CacheLocalScheduleGroup|Concurrency::details::FairScheduleGroup{
+ preview (
+ #(
+ "[",
+ $e.m_id,
+ "]",
+ #if ($e.m_kind & 4) (" AnonymousScheduleGroup")
+ #else ("")
+ )
+ )
+
+ children (
+ #(
+ #(ID: $e.m_id),
+ #(Scheduler: *($e.m_pScheduler))
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; Concurrency::details::ContextBase from <ContextBase.h>
+; Concurrency::details::InternalContextBase from <InternalContextBase.h>
+; Concurrency::details::ThreadInternalContext from <ThreadInternalContext.h>
+; Concurrency::details::UMSThreadInternalContext from <UMSThreadInternalContext.h>
+;------------------------------------------------------------------------------
+Concurrency::details::ContextBase|Concurrency::details::InternalContextBase|Concurrency::details::ThreadInternalContext|Concurrency::details::UMSThreadInternalContext{
+ preview (
+ #(
+ "[",
+ $e.m_threadId,
+ "] ",
+ #if ($e.m_blockedState == 0) ("not_concrt_blocked")
+ #elif ($e.m_blockedState == 1) ("concrt_blocked")
+ #elif ($e.m_blockedState == 2) ("ums_sync_blocked")
+ #elif ($e.m_blockedState == 4) ("ums_async_blocked")
+ #else ("")
+ )
+ )
+
+ children (
+ #(
+ #(ID: $e.m_id),
+ #(ThreadID: $e.m_threadId),
+ #(Scheduler: *($e.m_pScheduler)),
+ #(ScheduleGroup: *($e.m_pGroup))
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; Concurrency::details::ExternalContextBase from <ExternalContextBase.h>
+;------------------------------------------------------------------------------
+Concurrency::details::ExternalContextBase{
+ preview (
+ #(
+ "[",
+ $e.m_threadId,
+ "] ",
+ #if ($e.m_contextSwitchingFence == 1) ("concrt_blocked")
+ #else ("not_concrt_blocked")
+ )
+ )
+
+ children (
+ #(
+ #(ID: $e.m_id),
+ #(ThreadID: $e.m_threadId),
+ #(Scheduler: *($e.m_pScheduler)),
+ #(ScheduleGroup: *($e.m_pGroup))
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; Concurrency::SchedulerPolicy from <concrt.h>
+;------------------------------------------------------------------------------
+Concurrency::SchedulerPolicy{
+ preview (
+ #(
+ $e._M_pPolicyBag->_M_values._M_specificValues._M_schedulerKind,
+ ", Min=",
+ $e._M_pPolicyBag->_M_values._M_specificValues._M_minConcurrency,
+ ", Max=",
+ $e._M_pPolicyBag->_M_values._M_specificValues._M_maxConcurrency
+ )
+ )
+
+ children (
+ #(
+ #(SchedulerKind: $e._M_pPolicyBag->_M_values._M_specificValues._M_schedulerKind),
+ #(MinConcurrency: $e._M_pPolicyBag->_M_values._M_specificValues._M_minConcurrency),
+ #(MaxConcurrency: $e._M_pPolicyBag->_M_values._M_specificValues._M_maxConcurrency),
+ #(TargetOversubscriptionFactor: $e._M_pPolicyBag->_M_values._M_specificValues._M_targetOversubscriptionFactor),
+ #(LocalContextCacheSize: $e._M_pPolicyBag->_M_values._M_specificValues._M_localContextCacheSize),
+ #(ContextStackSize: $e._M_pPolicyBag->_M_values._M_specificValues._M_contextStackSize),
+ #(ContextPriority: $e._M_pPolicyBag->_M_values._M_specificValues._M_contextPriority),
+ #(SchedulingProtocol: $e._M_pPolicyBag->_M_values._M_specificValues._M_schedulingProtocol),
+ #(DynamicProgressFeedback: $e._M_pPolicyBag->_M_values._M_specificValues._M_dynamicProgressFeedback)
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; Concurrency::event from <concrt.h>
+;------------------------------------------------------------------------------
+Concurrency::event{
+ preview (
+ #(
+ #if ($e._M_pWaitChain == 1) ("set")
+ #else ("not_set")
+ )
+ )
+
+ children (
+ #(
+ #([is_set]: ($e._M_pWaitChain == 1)),
+ #([has_waiters]: (($e._M_pWaitChain != 0) && ($e._M_pWaitChain != 1)))
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; Concurrency::critical_section from <concrt.h>
+;------------------------------------------------------------------------------
+Concurrency::critical_section{
+ preview (
+ #(
+ #if ($e._M_pHead != 0) ("locked")
+ #else ("not_locked")
+ )
+ )
+
+ children (
+ #(
+ #([is_locked]: ($e._M_pHead != 0)),
+ #(OwningContext: *((Concurrency::Context*)($e._M_activeNode[0])))
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; Concurrency::critical_section::scoped_lock from <concrt.h>
+;------------------------------------------------------------------------------
+Concurrency::critical_section::scoped_lock{
+ preview (
+ #(
+ $e._M_critical_section
+ )
+ )
+
+ children (
+ #(
+ CriticalSection: $e._M_critical_section
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; Concurrency::reader_writer_lock from <concrt.h>
+;------------------------------------------------------------------------------
+Concurrency::reader_writer_lock{
+ preview (
+ #(
+ #if (($e._M_lockState < 8) && ($e._M_lockState & 2)) ("held_by_writer")
+ #elif ($e._M_lockState >= 8) (
+ #(
+ "held_by_reader(s) [",
+ ($e._M_lockState / 8),
+ "]"
+ )
+ )
+ #else ("not_held")
+ )
+ )
+
+ children (
+ #(
+ #([is_reader_lock_held]: ($e._M_lockState >= 8)),
+ #([num_reader_lock_holders]: ($e._M_lockState / 8)),
+ #([is_writer_lock_held]: ($e._M_lockState < 8) && ($e._M_lockState & 2)),
+ #(OwningWriterContext: *((Concurrency::Context*)($e._M_activeWriter[0])))
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; Concurrency::reader_writer_lock::scoped_lock from <concrt.h>
+; Concurrency::reader_writer_lock::scoped_lock_read from <concrt.h>
+;------------------------------------------------------------------------------
+Concurrency::reader_writer_lock::scoped_lock|Concurrency::reader_writer_lock::scoped_lock_read{
+ preview (
+ #(
+ $e._M_reader_writer_lock
+ )
+ )
+
+ children (
+ #(
+ ReaderWriterLock: $e._M_reader_writer_lock
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; Concurrency::details::_TaskCollectionBase from <concrt.h>
+;------------------------------------------------------------------------------
+Concurrency::details::_TaskCollectionBase{
+ preview (
+ #(
+ #if ((((int)$e._M_pException & ~0x3) != 0) && (((int)$e._M_pException & ~0x3) != 0xC)) ("exception")
+ #else ("no_exception")
+ )
+ )
+
+ children (
+ #(
+ #([has_exception]: (((int)$e._M_pException & ~0x3) != 0) && (((int)$e._M_pException & ~0x3) != 0xC)),
+ #(CreatingContext: *((Concurrency::Context*)$e._M_pOwningContext))
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; Concurrency::task_group from <ppl.h>
+; Concurrency::structured_task_group from <ppl.h>
+;------------------------------------------------------------------------------
+Concurrency::task_group|Concurrency::structured_task_group{
+ preview (
+ #(
+ #if ((((int)$e._M_task_collection._M_pException & ~0x3) != 0) && (((int)$e._M_task_collection._M_pException & ~0x3) != 0xC)) ("exception")
+ #else ("no_exception")
+ )
+ )
+
+ children (
+ #(
+ #([has_exception]: (((int)$e._M_task_collection._M_pException & ~0x3) != 0) && (((int)$e._M_task_collection._M_pException & ~0x3) != 0xC)),
+ #(CreatingContext: *((Concurrency::Context*)$e._M_task_collection._M_pOwningContext))
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; Concurrency::task_handle from <ppl.h>
+;------------------------------------------------------------------------------
+Concurrency::task_handle<*>{
+ preview (
+ #(
+ $e._M_function
+ )
+ )
+
+ children (
+ #(
+ #(Function: $e._M_function),
+ #(RuntimeOwnsLifetime: $e._M_fRuntimeOwnsLifetime),
+ #(TaskCollection: *($e._M_pTaskCollection))
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; Concurrency::combinable from <ppl.h>
+;------------------------------------------------------------------------------
+Concurrency::combinable<*>{
+ preview(
+ #(
+ "(",
+ #array(
+ expr: *($e._M_buckets[$i]),
+ size: $e._M_size
+ ) : #list(
+ head: $e,
+ next: _M_chain
+ ) : $e._M_value,
+ ")"
+ )
+ )
+ children(
+ #(
+ #array(
+ expr: *($e._M_buckets[$i]),
+ size: $e._M_size
+ ) : #list(
+ head: $e,
+ next: _M_chain
+ ) : $e._M_value,
+ #(InitFunction : $e._M_fnInitialize)
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; Concurrency::concurrent_vector from <concurrent_vector.h>
+;------------------------------------------------------------------------------
+Concurrency::concurrent_vector<*,*>{
+ preview(
+ #(
+ "[",
+ $e._My_early_size._M_value,
+ "](",
+ #array (
+ expr: #(
+ #if (($i >> 1) == 0) ((($T1*)$e._My_segment._M_value[0]._My_array)[$i])
+ #else ((($T1*)$e._My_segment._M_value[__log2($i)]._My_array)[$i - (0x1 << __log2($i))])
+ ),
+ size: $e._My_early_size._M_value
+ ),
+ ")"
+ )
+ )
+ children(
+ #(
+ [size] : $e._My_early_size._M_value,
+ #array (
+ expr: #(
+ #if (($i >> 1) == 0) ((($T1*)$e._My_segment._M_value[0]._My_array)[$i])
+ #else ((($T1*)$e._My_segment._M_value[__log2($i)]._My_array)[$i - (0x1 << __log2($i))])
+ ),
+ size: $e._My_early_size._M_value
+ )
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; Concurrency::details::_Vector_iterator from <concurrent_vector.h>
+;------------------------------------------------------------------------------
+Concurrency::details::_Vector_iterator<Concurrency::concurrent_vector<*,*>,*>{
+ preview(
+ #(
+ #if (($e._My_index >> 1) == 0) ((($T1*)$e._My_vector->_My_segment._M_value[0]._My_array)[$e._My_index])
+ #else ((($T1*)$e._My_vector->_My_segment._M_value[__log2($e._My_index)]._My_array)[$e._My_index - (0x1 << __log2($e._My_index))])
+ )
+ )
+ children(
+ #(
+ [ptr]: #if (($e._My_index >> 1) == 0) (&((($T1*)$e._My_vector->_My_segment._M_value[0]._My_array)[$e._My_index]))
+ #else (&((($T1*)$e._My_vector->_My_segment._M_value[__log2($e._My_index)]._My_array)[$e._My_index - (0x1 << __log2($e._My_index))]))
+
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; Concurrency::concurrent_queue from <concurrent_queue.h>
+;------------------------------------------------------------------------------
+Concurrency::concurrent_queue<*,*>{
+ preview
+ (
+ #(
+ "[",
+ $e._My_rep->_Tail_counter._M_value - $e._My_rep->_Head_counter._M_value,
+ "](",
+ #array
+ (
+ expr : #if (($i+($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)))/(8*$e._Items_per_page)-($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>(8*($e._Items_per_page-1)))*($i%8+$e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>=(8*$e._Items_per_page)) == 0) ((($T1*)(($e._My_rep->_Array[(($i+$e._My_rep->_Head_counter._M_value)*3%8)]._Head_page._M_value) + 1))[(($i+$e._My_rep->_Head_counter._M_value)&-8)/8&$e._Items_per_page-1])
+ #else (#if (($i+($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)))/(8*$e._Items_per_page)-($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>(8*($e._Items_per_page-1)))*($i%8+$e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>=(8*$e._Items_per_page)) == 1) ((($T1*)(($e._My_rep->_Array[(($i+$e._My_rep->_Head_counter._M_value)*3%8)]._Head_page._M_value->_Next) + 1))[(($i+$e._My_rep->_Head_counter._M_value)&-8)/8&$e._Items_per_page-1])
+ #else (#if (($i+($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)))/(8*$e._Items_per_page)-($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>(8*($e._Items_per_page-1)))*($i%8+$e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>=(8*$e._Items_per_page)) == 2) ((($T1*)(($e._My_rep->_Array[(($i+$e._My_rep->_Head_counter._M_value)*3%8)]._Head_page._M_value->_Next->_Next) + 1))[(($i+$e._My_rep->_Head_counter._M_value)&-8)/8&$e._Items_per_page-1])
+ #else (#if (($i+($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)))/(8*$e._Items_per_page)-($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>(8*($e._Items_per_page-1)))*($i%8+$e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>=(8*$e._Items_per_page)) == 3) ((($T1*)(($e._My_rep->_Array[(($i+$e._My_rep->_Head_counter._M_value)*3%8)]._Head_page._M_value->_Next->_Next->_Next) + 1))[(($i+$e._My_rep->_Head_counter._M_value)&-8)/8&$e._Items_per_page-1])
+ #else (#if (($i+($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)))/(8*$e._Items_per_page)-($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>(8*($e._Items_per_page-1)))*($i%8+$e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>=(8*$e._Items_per_page)) == 4) ((($T1*)(($e._My_rep->_Array[(($i+$e._My_rep->_Head_counter._M_value)*3%8)]._Head_page._M_value->_Next->_Next->_Next->_Next) + 1))[(($i+$e._My_rep->_Head_counter._M_value)&-8)/8&$e._Items_per_page-1])
+ #else (#if (($i+($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)))/(8*$e._Items_per_page)-($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>(8*($e._Items_per_page-1)))*($i%8+$e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>=(8*$e._Items_per_page)) == 5) ((($T1*)(($e._My_rep->_Array[(($i+$e._My_rep->_Head_counter._M_value)*3%8)]._Head_page._M_value->_Next->_Next->_Next->_Next->_Next) + 1))[(($i+$e._My_rep->_Head_counter._M_value)&-8)/8&$e._Items_per_page-1])
+ #else (#if (($i+($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)))/(8*$e._Items_per_page)-($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>(8*($e._Items_per_page-1)))*($i%8+$e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>=(8*$e._Items_per_page)) == 6) ((($T1*)(($e._My_rep->_Array[(($i+$e._My_rep->_Head_counter._M_value)*3%8)]._Head_page._M_value->_Next->_Next->_Next->_Next->_Next->_Next) + 1))[(($i+$e._My_rep->_Head_counter._M_value)&-8)/8&$e._Items_per_page-1])
+ #else (#if (($i+($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)))/(8*$e._Items_per_page)-($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>(8*($e._Items_per_page-1)))*($i%8+$e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>=(8*$e._Items_per_page)) == 7) ((($T1*)(($e._My_rep->_Array[(($i+$e._My_rep->_Head_counter._M_value)*3%8)]._Head_page._M_value->_Next->_Next->_Next->_Next->_Next->_Next->_Next) + 1))[(($i+$e._My_rep->_Head_counter._M_value)&-8)/8&$e._Items_per_page-1])
+ #else (#if (($i+($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)))/(8*$e._Items_per_page)-($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>(8*($e._Items_per_page-1)))*($i%8+$e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>=(8*$e._Items_per_page)) == 8) ((($T1*)(($e._My_rep->_Array[(($i+$e._My_rep->_Head_counter._M_value)*3%8)]._Head_page._M_value->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next) + 1))[(($i+$e._My_rep->_Head_counter._M_value)&-8)/8&$e._Items_per_page-1])
+ #else (#if (($i+($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)))/(8*$e._Items_per_page)-($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>(8*($e._Items_per_page-1)))*($i%8+$e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>=(8*$e._Items_per_page)) == 9) ((($T1*)(($e._My_rep->_Array[(($i+$e._My_rep->_Head_counter._M_value)*3%8)]._Head_page._M_value->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next) + 1))[(($i+$e._My_rep->_Head_counter._M_value)&-8)/8&$e._Items_per_page-1])
+ #else (#if (($i+($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)))/(8*$e._Items_per_page)-($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>(8*($e._Items_per_page-1)))*($i%8+$e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>=(8*$e._Items_per_page)) == 10) ((($T1*)(($e._My_rep->_Array[(($i+$e._My_rep->_Head_counter._M_value)*3%8)]._Head_page._M_value->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next) + 1))[(($i+$e._My_rep->_Head_counter._M_value)&-8)/8&$e._Items_per_page-1])
+ #else (#if (($i+($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)))/(8*$e._Items_per_page)-($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>(8*($e._Items_per_page-1)))*($i%8+$e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>=(8*$e._Items_per_page)) == 11) ((($T1*)(($e._My_rep->_Array[(($i+$e._My_rep->_Head_counter._M_value)*3%8)]._Head_page._M_value->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next) + 1))[(($i+$e._My_rep->_Head_counter._M_value)&-8)/8&$e._Items_per_page-1])
+ #else (#if (($i+($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)))/(8*$e._Items_per_page)-($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>(8*($e._Items_per_page-1)))*($i%8+$e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>=(8*$e._Items_per_page)) == 12) ((($T1*)(($e._My_rep->_Array[(($i+$e._My_rep->_Head_counter._M_value)*3%8)]._Head_page._M_value->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next) + 1))[(($i+$e._My_rep->_Head_counter._M_value)&-8)/8&$e._Items_per_page-1])
+ #else (#if (($i+($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)))/(8*$e._Items_per_page)-($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>(8*($e._Items_per_page-1)))*($i%8+$e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>=(8*$e._Items_per_page)) == 13) ((($T1*)(($e._My_rep->_Array[(($i+$e._My_rep->_Head_counter._M_value)*3%8)]._Head_page._M_value->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next) + 1))[(($i+$e._My_rep->_Head_counter._M_value)&-8)/8&$e._Items_per_page-1])
+ #else (#if (($i+($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)))/(8*$e._Items_per_page)-($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>(8*($e._Items_per_page-1)))*($i%8+$e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>=(8*$e._Items_per_page)) == 14) ((($T1*)(($e._My_rep->_Array[(($i+$e._My_rep->_Head_counter._M_value)*3%8)]._Head_page._M_value->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next) + 1))[(($i+$e._My_rep->_Head_counter._M_value)&-8)/8&$e._Items_per_page-1])
+ #else (#if (($i+($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)))/(8*$e._Items_per_page)-($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>(8*($e._Items_per_page-1)))*($i%8+$e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>=(8*$e._Items_per_page)) == 15) ((($T1*)(($e._My_rep->_Array[(($i+$e._My_rep->_Head_counter._M_value)*3%8)]._Head_page._M_value->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next) + 1))[(($i+$e._My_rep->_Head_counter._M_value)&-8)/8&$e._Items_per_page-1])
+ #else (#if (($i+($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)))/(8*$e._Items_per_page)-($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>(8*($e._Items_per_page-1)))*($i%8+$e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>=(8*$e._Items_per_page)) == 16) ((($T1*)(($e._My_rep->_Array[(($i+$e._My_rep->_Head_counter._M_value)*3%8)]._Head_page._M_value->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next) + 1))[(($i+$e._My_rep->_Head_counter._M_value)&-8)/8&$e._Items_per_page-1])
+ #else (#if (($i+($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)))/(8*$e._Items_per_page)-($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>(8*($e._Items_per_page-1)))*($i%8+$e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>=(8*$e._Items_per_page)) == 17) ((($T1*)(($e._My_rep->_Array[(($i+$e._My_rep->_Head_counter._M_value)*3%8)]._Head_page._M_value->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next) + 1))[(($i+$e._My_rep->_Head_counter._M_value)&-8)/8&$e._Items_per_page-1])
+ #else (#if (($i+($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)))/(8*$e._Items_per_page)-($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>(8*($e._Items_per_page-1)))*($i%8+$e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>=(8*$e._Items_per_page)) == 18) ((($T1*)(($e._My_rep->_Array[(($i+$e._My_rep->_Head_counter._M_value)*3%8)]._Head_page._M_value->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next) + 1))[(($i+$e._My_rep->_Head_counter._M_value)&-8)/8&$e._Items_per_page-1])
+ #else (#if (($i+($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)))/(8*$e._Items_per_page)-($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>(8*($e._Items_per_page-1)))*($i%8+$e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>=(8*$e._Items_per_page)) == 19) ((($T1*)(($e._My_rep->_Array[(($i+$e._My_rep->_Head_counter._M_value)*3%8)]._Head_page._M_value->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next) + 1))[(($i+$e._My_rep->_Head_counter._M_value)&-8)/8&$e._Items_per_page-1])
+ #else ((($T1*)(($e._My_rep->_Array[(($i+$e._My_rep->_Head_counter._M_value)*3%8)]._Head_page._M_value->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next) + 1))[(($i+$e._My_rep->_Head_counter._M_value)&-8)/8&$e._Items_per_page-1])))))))))))))))))))),
+ size : #if ($e._My_rep->_Tail_counter._M_value-$e._My_rep->_Head_counter._M_value < 20*8*$e._Items_per_page) ($e._My_rep->_Tail_counter._M_value-$e._My_rep->_Head_counter._M_value)
+ #else (20*8*$e._Items_per_page)
+ ),
+ ")"
+ )
+ )
+ children
+ (
+ #(
+ #([unsafe_size]: $e._My_rep->_Tail_counter._M_value-$e._My_rep->_Head_counter._M_value),
+ #array
+ (
+ expr : #if (($i+($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)))/(8*$e._Items_per_page)-($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>(8*($e._Items_per_page-1)))*($i%8+$e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>=(8*$e._Items_per_page)) == 0) ((($T1*)(($e._My_rep->_Array[(($i+$e._My_rep->_Head_counter._M_value)*3%8)]._Head_page._M_value) + 1))[(($i+$e._My_rep->_Head_counter._M_value)&-8)/8&$e._Items_per_page-1])
+ #else (#if (($i+($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)))/(8*$e._Items_per_page)-($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>(8*($e._Items_per_page-1)))*($i%8+$e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>=(8*$e._Items_per_page)) == 1) ((($T1*)(($e._My_rep->_Array[(($i+$e._My_rep->_Head_counter._M_value)*3%8)]._Head_page._M_value->_Next) + 1))[(($i+$e._My_rep->_Head_counter._M_value)&-8)/8&$e._Items_per_page-1])
+ #else (#if (($i+($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)))/(8*$e._Items_per_page)-($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>(8*($e._Items_per_page-1)))*($i%8+$e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>=(8*$e._Items_per_page)) == 2) ((($T1*)(($e._My_rep->_Array[(($i+$e._My_rep->_Head_counter._M_value)*3%8)]._Head_page._M_value->_Next->_Next) + 1))[(($i+$e._My_rep->_Head_counter._M_value)&-8)/8&$e._Items_per_page-1])
+ #else (#if (($i+($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)))/(8*$e._Items_per_page)-($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>(8*($e._Items_per_page-1)))*($i%8+$e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>=(8*$e._Items_per_page)) == 3) ((($T1*)(($e._My_rep->_Array[(($i+$e._My_rep->_Head_counter._M_value)*3%8)]._Head_page._M_value->_Next->_Next->_Next) + 1))[(($i+$e._My_rep->_Head_counter._M_value)&-8)/8&$e._Items_per_page-1])
+ #else (#if (($i+($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)))/(8*$e._Items_per_page)-($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>(8*($e._Items_per_page-1)))*($i%8+$e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>=(8*$e._Items_per_page)) == 4) ((($T1*)(($e._My_rep->_Array[(($i+$e._My_rep->_Head_counter._M_value)*3%8)]._Head_page._M_value->_Next->_Next->_Next->_Next) + 1))[(($i+$e._My_rep->_Head_counter._M_value)&-8)/8&$e._Items_per_page-1])
+ #else (#if (($i+($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)))/(8*$e._Items_per_page)-($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>(8*($e._Items_per_page-1)))*($i%8+$e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>=(8*$e._Items_per_page)) == 5) ((($T1*)(($e._My_rep->_Array[(($i+$e._My_rep->_Head_counter._M_value)*3%8)]._Head_page._M_value->_Next->_Next->_Next->_Next->_Next) + 1))[(($i+$e._My_rep->_Head_counter._M_value)&-8)/8&$e._Items_per_page-1])
+ #else (#if (($i+($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)))/(8*$e._Items_per_page)-($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>(8*($e._Items_per_page-1)))*($i%8+$e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>=(8*$e._Items_per_page)) == 6) ((($T1*)(($e._My_rep->_Array[(($i+$e._My_rep->_Head_counter._M_value)*3%8)]._Head_page._M_value->_Next->_Next->_Next->_Next->_Next->_Next) + 1))[(($i+$e._My_rep->_Head_counter._M_value)&-8)/8&$e._Items_per_page-1])
+ #else (#if (($i+($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)))/(8*$e._Items_per_page)-($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>(8*($e._Items_per_page-1)))*($i%8+$e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>=(8*$e._Items_per_page)) == 7) ((($T1*)(($e._My_rep->_Array[(($i+$e._My_rep->_Head_counter._M_value)*3%8)]._Head_page._M_value->_Next->_Next->_Next->_Next->_Next->_Next->_Next) + 1))[(($i+$e._My_rep->_Head_counter._M_value)&-8)/8&$e._Items_per_page-1])
+ #else (#if (($i+($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)))/(8*$e._Items_per_page)-($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>(8*($e._Items_per_page-1)))*($i%8+$e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>=(8*$e._Items_per_page)) == 8) ((($T1*)(($e._My_rep->_Array[(($i+$e._My_rep->_Head_counter._M_value)*3%8)]._Head_page._M_value->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next) + 1))[(($i+$e._My_rep->_Head_counter._M_value)&-8)/8&$e._Items_per_page-1])
+ #else (#if (($i+($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)))/(8*$e._Items_per_page)-($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>(8*($e._Items_per_page-1)))*($i%8+$e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>=(8*$e._Items_per_page)) == 9) ((($T1*)(($e._My_rep->_Array[(($i+$e._My_rep->_Head_counter._M_value)*3%8)]._Head_page._M_value->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next) + 1))[(($i+$e._My_rep->_Head_counter._M_value)&-8)/8&$e._Items_per_page-1])
+ #else (#if (($i+($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)))/(8*$e._Items_per_page)-($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>(8*($e._Items_per_page-1)))*($i%8+$e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>=(8*$e._Items_per_page)) == 10) ((($T1*)(($e._My_rep->_Array[(($i+$e._My_rep->_Head_counter._M_value)*3%8)]._Head_page._M_value->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next) + 1))[(($i+$e._My_rep->_Head_counter._M_value)&-8)/8&$e._Items_per_page-1])
+ #else (#if (($i+($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)))/(8*$e._Items_per_page)-($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>(8*($e._Items_per_page-1)))*($i%8+$e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>=(8*$e._Items_per_page)) == 11) ((($T1*)(($e._My_rep->_Array[(($i+$e._My_rep->_Head_counter._M_value)*3%8)]._Head_page._M_value->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next) + 1))[(($i+$e._My_rep->_Head_counter._M_value)&-8)/8&$e._Items_per_page-1])
+ #else (#if (($i+($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)))/(8*$e._Items_per_page)-($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>(8*($e._Items_per_page-1)))*($i%8+$e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>=(8*$e._Items_per_page)) == 12) ((($T1*)(($e._My_rep->_Array[(($i+$e._My_rep->_Head_counter._M_value)*3%8)]._Head_page._M_value->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next) + 1))[(($i+$e._My_rep->_Head_counter._M_value)&-8)/8&$e._Items_per_page-1])
+ #else (#if (($i+($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)))/(8*$e._Items_per_page)-($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>(8*($e._Items_per_page-1)))*($i%8+$e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>=(8*$e._Items_per_page)) == 13) ((($T1*)(($e._My_rep->_Array[(($i+$e._My_rep->_Head_counter._M_value)*3%8)]._Head_page._M_value->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next) + 1))[(($i+$e._My_rep->_Head_counter._M_value)&-8)/8&$e._Items_per_page-1])
+ #else (#if (($i+($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)))/(8*$e._Items_per_page)-($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>(8*($e._Items_per_page-1)))*($i%8+$e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>=(8*$e._Items_per_page)) == 14) ((($T1*)(($e._My_rep->_Array[(($i+$e._My_rep->_Head_counter._M_value)*3%8)]._Head_page._M_value->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next) + 1))[(($i+$e._My_rep->_Head_counter._M_value)&-8)/8&$e._Items_per_page-1])
+ #else (#if (($i+($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)))/(8*$e._Items_per_page)-($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>(8*($e._Items_per_page-1)))*($i%8+$e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>=(8*$e._Items_per_page)) == 15) ((($T1*)(($e._My_rep->_Array[(($i+$e._My_rep->_Head_counter._M_value)*3%8)]._Head_page._M_value->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next) + 1))[(($i+$e._My_rep->_Head_counter._M_value)&-8)/8&$e._Items_per_page-1])
+ #else (#if (($i+($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)))/(8*$e._Items_per_page)-($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>(8*($e._Items_per_page-1)))*($i%8+$e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>=(8*$e._Items_per_page)) == 16) ((($T1*)(($e._My_rep->_Array[(($i+$e._My_rep->_Head_counter._M_value)*3%8)]._Head_page._M_value->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next) + 1))[(($i+$e._My_rep->_Head_counter._M_value)&-8)/8&$e._Items_per_page-1])
+ #else (#if (($i+($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)))/(8*$e._Items_per_page)-($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>(8*($e._Items_per_page-1)))*($i%8+$e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>=(8*$e._Items_per_page)) == 17) ((($T1*)(($e._My_rep->_Array[(($i+$e._My_rep->_Head_counter._M_value)*3%8)]._Head_page._M_value->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next) + 1))[(($i+$e._My_rep->_Head_counter._M_value)&-8)/8&$e._Items_per_page-1])
+ #else (#if (($i+($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)))/(8*$e._Items_per_page)-($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>(8*($e._Items_per_page-1)))*($i%8+$e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>=(8*$e._Items_per_page)) == 18) ((($T1*)(($e._My_rep->_Array[(($i+$e._My_rep->_Head_counter._M_value)*3%8)]._Head_page._M_value->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next) + 1))[(($i+$e._My_rep->_Head_counter._M_value)&-8)/8&$e._Items_per_page-1])
+ #else (#if (($i+($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)))/(8*$e._Items_per_page)-($e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>(8*($e._Items_per_page-1)))*($i%8+$e._My_rep->_Head_counter._M_value%(8*$e._Items_per_page)>=(8*$e._Items_per_page)) == 19) ((($T1*)(($e._My_rep->_Array[(($i+$e._My_rep->_Head_counter._M_value)*3%8)]._Head_page._M_value->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next) + 1))[(($i+$e._My_rep->_Head_counter._M_value)&-8)/8&$e._Items_per_page-1])
+ #else ((($T1*)(($e._My_rep->_Array[(($i+$e._My_rep->_Head_counter._M_value)*3%8)]._Head_page._M_value->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next->_Next) + 1))[(($i+$e._My_rep->_Head_counter._M_value)&-8)/8&$e._Items_per_page-1])))))))))))))))))))),
+ size : #if ($e._My_rep->_Tail_counter._M_value-$e._My_rep->_Head_counter._M_value < 20*8*$e._Items_per_page) ($e._My_rep->_Tail_counter._M_value-$e._My_rep->_Head_counter._M_value)
+ #else (20*8*$e._Items_per_page)
+ )
+ )
+ )
+}
+
+;------------------------------------------------------------------------------
+; Concurrency::details::_Concurrent_queue_iterator from <concurrent_queue.h>
+;------------------------------------------------------------------------------
+Concurrency::details::_Concurrent_queue_iterator<Concurrency::concurrent_queue<*,*>,*>{
+ preview(
+ #(
+ *(($T1*)$e._My_item)
+ )
+ )
+ children(
+ #(
+ [ptr]: (($T1*)$e._My_item)
+
+ )
+ )
+}
+
+; This section lets you define your own errors for the HRESULT display.
+; You need to list the error code in unsigned decimal, followed by the message.
+; Changes will take effect the next time you redisplay the variable.
+
+[hresult]
+;1234=my custom error code
+
+[Visualizer]
+
+glm::detail::tvec2<*>{
+ preview (
+ #(#($c.x,$c.y))
+ )
+ children (
+ #([x]: $c.x,[y]: $c.y)
+ )
+}
+
+glm::detail::tvec3<*>{
+ preview (
+ #($e.x,$e.y,$e.z)
+ )
+ children (
+ #([x]: $e.x,[y]: $e.y,[z]: $e.z)
+ )
+}
+
+glm::detail::tvec4<*>{
+ preview (
+ #($c.x,$c.y,$c.z,$c.w)
+ )
+ children (
+ #([x]: $e.x,[y]: $e.y,[z]: $e.z, #([w]: $e.w))
+ )
+}
diff --git a/src/third_party/glm/util/glm.natvis b/src/third_party/glm/util/glm.natvis
new file mode 100644
index 0000000..d13bf30
--- /dev/null
+++ b/src/third_party/glm/util/glm.natvis
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!-- GLM visualizers for Visual Studio 2012 -->
+<!-- Put them into My Documents/Visual Studio 2012/Visualizers/ -->
+
+<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
+ <Type Name="glm::tvec1<*>">
+ <DisplayString>{x}</DisplayString>
+ <Expand>
+ <Item Name="x">x</Item>
+ </Expand>
+ </Type>
+
+ <Type Name="glm::tvec2<*>">
+ <DisplayString>{x}, {y}</DisplayString>
+ <Expand>
+ <Item Name="x">x</Item>
+ <Item Name="y">y</Item>
+ </Expand>
+ </Type>
+
+ <Type Name="glm::tvec3<*>">
+ <DisplayString>{x}, {y}, {z}</DisplayString>
+ <Expand>
+ <Item Name="x">x</Item>
+ <Item Name="y">y</Item>
+ <Item Name="z">z</Item>
+ </Expand>
+ </Type>
+
+ <Type Name="glm::tvec4<*>">
+ <DisplayString>{x}, {y}, {z}, {w}</DisplayString>
+ <Expand>
+ <Item Name="x">x</Item>
+ <Item Name="y">y</Item>
+ <Item Name="z">z</Item>
+ <Item Name="w">w</Item>
+ </Expand>
+ </Type>
+
+ <!--Type Name="glm::tmat4<*>">
+ <DisplayString>{value[0]}, {value[1]}, {value[2]}, {value[3]}</DisplayString>
+ <Expand>
+ <Item Name="[0]">value[0]</Item>
+ <Item Name="[1]">value[1]</Item>
+ <Item Name="[2]">value[2]</Item>
+ <Item Name="[3]">value[3]</Item>
+ </Expand>
+ </Type-->
+
+ <Type Name="glm::tquat<*>">
+ <DisplayString>({x}, {y}, {z}), {w}</DisplayString>
+ <Expand>
+ <Item Name="x">x</Item>
+ <Item Name="y">y</Item>
+ <Item Name="z">z</Item>
+ <Item Name="w">w</Item>
+ </Expand>
+ </Type>
+
+ <Type Name="glm::tdualquat<*>">
+ <DisplayString>(({real.x}, {real.y}, {real.z}), {real.w}), (({dual.x}, {dual.y}, {dual.z}), {dual.w})</DisplayString>
+ <Expand>
+ <Item Name="real">real</Item>
+ <Item Name="dual">dual</Item>
+ </Expand>
+ </Type>
+</AutoVisualizer>
+
diff --git a/src/third_party/glm/util/usertype.dat b/src/third_party/glm/util/usertype.dat
new file mode 100644
index 0000000..cb44de3
--- /dev/null
+++ b/src/third_party/glm/util/usertype.dat
@@ -0,0 +1,407 @@
+attribute
+const
+uniform
+varying
+break
+continue
+do
+for
+while
+if
+else
+in
+out
+inout
+float
+int
+void
+bool
+true
+false
+discard
+return
+mat2
+mat3
+mat4
+mat2x2
+mat3x3
+mat4x4
+mat2x3
+mat3x2
+mat2x4
+mat4x2
+mat3x4
+mat4x3
+vec2
+vec3
+vec4
+ivec2
+ivec3
+ivec4
+uvec2
+uvec3
+uvec4
+bvec2
+bvec3
+bvec4
+sampler1D
+sampler2D
+sampler3D
+samplerCube
+sampler1DShadow
+sampler2DShadow
+struct
+
+asm
+class
+union
+enum
+typedef
+template
+this
+packed
+goto
+switch
+default
+inline
+noinline
+volatile
+public
+static
+extern
+external
+interface
+long
+short
+double
+half
+fixed
+unsigned
+input
+output
+sampler2DRect
+sampler3DRect
+sampler2DRectShadow
+sizeof
+cast
+namespace
+using
+
+layout
+location
+smooth
+flat
+noperspective
+centroid
+invariant
+lowp
+mediump
+highp
+precision
+patch
+sample
+subroutine
+
+hvec2
+hvec3
+hvec4
+fvec2
+fvec3
+fvec4
+dvec2
+dvec3
+dvec4
+
+on
+
+final
+abstract
+limited
+access
+self
+
+uchar
+schar
+uint
+sint
+
+int8
+int16
+int32
+int64
+
+sint8
+sint16
+sint32
+sint64
+
+uint8
+uint16
+uint32
+uint64
+
+float16
+float32
+float64
+
+quat
+hquat
+fquat
+dquat
+
+handle
+handle8
+handle16
+handle32
+handle64
+
+flag
+flag8
+flag16
+flag32
+flag64
+
+import
+export
+
+hmat2
+hmat3
+hmat4
+
+fmat2
+fmat3
+fmat4
+
+dmat2
+dmat3
+dmat4
+
+hmat2x3
+hmat3x2
+hmat2x4
+hmat4x2
+hmat3x4
+hmat4x3
+
+fmat2x3
+fmat3x2
+fmat2x4
+fmat4x2
+fmat3x4
+fmat4x3
+
+dmat2x3
+dmat3x2
+dmat2x4
+dmat4x2
+dmat3x4
+dmat4x3
+
+null
+pi
+epsilon
+infinite
+self
+
+byte
+word
+dword
+qword
+
+new_object
+new_array
+delete_object
+delete_array
+
+int8
+int16
+int32
+int64
+
+i8
+i16
+i32
+i64
+
+i8vec2
+i8vec3
+i8vec4
+
+i16vec2
+i16vec3
+i16vec4
+
+i32vec2
+i32vec3
+i32vec4
+
+i64vec2
+i64vec3
+i64vec4
+
+uint8
+uint16
+uint32
+uint64
+
+u8
+u16
+u32
+u64
+
+u8vec2
+u8vec3
+u8vec4
+
+u16vec2
+u16vec3
+u16vec4
+
+u32vec2
+u32vec3
+u32vec4
+
+u64vec2
+u64vec3
+u64vec4
+
+float16
+float32
+float64
+
+f16
+f32
+f64
+
+f16vec2
+f16vec3
+f16vec4
+
+f32vec2
+f32vec3
+f32vec4
+
+f64vec2
+f64vec3
+f64vec4
+
+f16mat2
+f16mat3
+f16mat4
+
+f16mat2x3
+f16mat2x4
+f16mat3x2
+f16mat3x4
+f16mat4x2
+f16mat4x3
+
+f32mat2
+f32mat3
+f32mat4
+
+f32mat2x3
+f32mat2x4
+f32mat3x2
+f32mat3x4
+f32mat4x2
+f32mat4x3
+
+f64mat2
+f64mat3
+f64mat4
+
+f64mat2x3
+f64mat2x4
+f64mat3x2
+f64mat3x4
+f64mat4x2
+f64mat4x3
+
+f16quat
+f32quat
+f64quat
+
+bool1
+bool2
+bool3
+bool4
+
+bool1x1
+bool2x2
+bool3x3
+bool4x4
+
+bool2x3
+bool2x4
+bool3x2
+bool3x4
+bool4x2
+bool4x3
+
+int1
+int2
+int3
+int4
+
+int1x1
+int2x2
+int3x3
+int4x4
+
+int2x3
+int2x4
+int3x2
+int3x4
+int4x2
+int4x3
+
+half1
+half2
+half3
+half4
+
+half2x2
+half3x3
+half4x4
+
+half2x3
+half2x4
+half3x2
+half3x4
+half4x2
+half4x3
+
+float1
+float2
+float3
+float4
+
+float1x1
+float2x2
+float3x3
+float4x4
+
+float2x3
+float2x4
+float3x2
+float3x4
+float4x2
+float4x3
+
+double1
+double2
+double3
+double4
+
+double1x1
+double2x2
+double3x3
+double4x4
+
+double2x3
+double2x4
+double3x2
+double3x4
+double4x2
+double4x3
diff --git a/src/third_party/mozjs/js/src/jit/Ion.cpp b/src/third_party/mozjs/js/src/jit/Ion.cpp
index 99f8854..c12df1b 100644
--- a/src/third_party/mozjs/js/src/jit/Ion.cpp
+++ b/src/third_party/mozjs/js/src/jit/Ion.cpp
@@ -69,7 +69,11 @@
#ifdef JS_THREADSAFE
static bool IonTLSInitialized = false;
+#if defined(STARBOARD)
+static PRTLSIndex IonTLSIndex;
+#else // defined(STARBOARD)
static unsigned IonTLSIndex;
+#endif // defined(STARBOARD)
static inline IonContext *
CurrentIonContext()
diff --git a/src/third_party/mozjs/js/src/jit/IonBuilder.cpp b/src/third_party/mozjs/js/src/jit/IonBuilder.cpp
index 00fd7a0..55b6818 100644
--- a/src/third_party/mozjs/js/src/jit/IonBuilder.cpp
+++ b/src/third_party/mozjs/js/src/jit/IonBuilder.cpp
@@ -25,7 +25,12 @@
#include "jstypedarrayinlines.h"
#ifdef JS_THREADSAFE
+#if defined(STARBOARD)
+#include "pr_starboard.h"
+#else
# include "prthread.h"
+#endif // defined(STARBOARD)
+
#endif
using namespace js;
diff --git a/src/third_party/mozjs/js/src/jsapi.cpp b/src/third_party/mozjs/js/src/jsapi.cpp
index 33b7991..85b9856 100644
--- a/src/third_party/mozjs/js/src/jsapi.cpp
+++ b/src/third_party/mozjs/js/src/jsapi.cpp
@@ -5134,7 +5134,7 @@
const int64_t kFileSize = info.size;
FileContents buffer(cx);
buffer.resize(kFileSize);
- if (SbFileRead(file, buffer.begin(), kFileSize) < 0) {
+ if (SbFileReadAll(file, buffer.begin(), kFileSize) < 0) {
return NULL;
}
JSScript *script = Compile(cx, obj, options, buffer.begin(),
@@ -5519,12 +5519,23 @@
JS::Evaluate(JSContext *cx, HandleObject obj, CompileOptions options,
const char *filename, jsval *rval)
{
+#if defined(STARBOARD)
+ starboard::ScopedFile file(filename, kSbFileOpenOnly | kSbFileRead, NULL,
+ NULL);
+ const int64_t kFileSize = file.GetSize();
+ FileContents buffer(cx);
+ buffer.resize(kFileSize);
+ if (file.ReadAll(buffer.begin(), kFileSize) < 0) {
+ return false;
+ }
+#else
FileContents buffer(cx);
{
AutoFile file;
if (!file.open(cx, filename) || !file.readAll(cx, buffer))
return false;
}
+#endif
options.setFileAndLine(filename, 1);
return Evaluate(cx, obj, options, buffer.begin(), buffer.length(), rval);
diff --git a/src/third_party/mozjs/js/src/jsgc.cpp b/src/third_party/mozjs/js/src/jsgc.cpp
index 5c2e730..78d3d57 100644
--- a/src/third_party/mozjs/js/src/jsgc.cpp
+++ b/src/third_party/mozjs/js/src/jsgc.cpp
@@ -81,6 +81,10 @@
# include <unistd.h>
#endif
+#if defined(STARBOARD)
+#include "starboard/system.h"
+#endif // defined(STARBOARD)
+
#if JS_TRACE_LOGGING
#include "TraceLogging.h"
#endif
@@ -2170,6 +2174,8 @@
SYSTEM_INFO sysinfo;
GetSystemInfo(&sysinfo);
ncpus = unsigned(sysinfo.dwNumberOfProcessors);
+#elif defined(STARBOARD)
+ ncpus = SbSystemGetNumberOfProcessors();
# else
long n = sysconf(_SC_NPROCESSORS_ONLN);
ncpus = (n > 0) ? unsigned(n) : 1;
diff --git a/src/third_party/mozjs/js/src/jslock.h b/src/third_party/mozjs/js/src/jslock.h
index b91e1f9..f27c300 100644
--- a/src/third_party/mozjs/js/src/jslock.h
+++ b/src/third_party/mozjs/js/src/jslock.h
@@ -11,6 +11,17 @@
#ifdef JS_THREADSAFE
+#if defined(STARBOARD)
+#include "starboard/atomic.h"
+
+#define JS_ATOMIC_INCREMENT(p) SbAtomicBarrier_Increment((SbAtomic32*)(p), 1)
+#define JS_ATOMIC_DECREMENT(p) SbAtomicBarrier_Increment((SbAtomic32*)(p), -1)
+#define JS_ATOMIC_ADD(p, v) \
+ SbAtomicBarrier_Increment((SbAtomic32*)(p), (SbAtomic32)(v))
+#define JS_ATOMIC_SET(p, v) \
+ SbAtomicNoBarrier_Exchange((SbAtomic32*)(p), (SbAtomic32)(v))
+
+#else // defined(STARBOARD)
# include "pratom.h"
# include "prlock.h"
# include "prcvar.h"
@@ -21,6 +32,7 @@
# define JS_ATOMIC_DECREMENT(p) PR_ATOMIC_DECREMENT((int32_t *)(p))
# define JS_ATOMIC_ADD(p,v) PR_ATOMIC_ADD((int32_t *)(p), (int32_t)(v))
# define JS_ATOMIC_SET(p,v) PR_ATOMIC_SET((int32_t *)(p), (int32_t)(v))
+#endif // defined(STARBOARD)
namespace js {
// Defined in jsgc.cpp.
diff --git a/src/third_party/mozjs/js/src/jsscript.h b/src/third_party/mozjs/js/src/jsscript.h
index 9b4c5c1..fea2c4e 100644
--- a/src/third_party/mozjs/js/src/jsscript.h
+++ b/src/third_party/mozjs/js/src/jsscript.h
@@ -19,6 +19,10 @@
#include "js/RootingAPI.h"
#include "vm/Shape.h"
+#if defined(STARBOARD) && defined(JS_THREADSAFE)
+#include "pr_starboard.h"
+#endif // defined(STARBOARD) && defined(JS_THREADSAFE)
+
namespace js {
namespace jit {
diff --git a/src/third_party/mozjs/js/src/jsworkers.cpp b/src/third_party/mozjs/js/src/jsworkers.cpp
index 57b16ea..cbe03b2 100644
--- a/src/third_party/mozjs/js/src/jsworkers.cpp
+++ b/src/third_party/mozjs/js/src/jsworkers.cpp
@@ -16,6 +16,10 @@
# include "jit/ExecutionModeInlines.h"
#endif
+#if defined(JS_THREADSAFE) && defined(STARBOARD)
+#include "pr_starboard.h"
+#endif // defined(JS_THREADSAFE) && defined(STARBOARD)
+
using namespace js;
using mozilla::DebugOnly;
diff --git a/src/third_party/mozjs/js/src/pr_starboard.cc b/src/third_party/mozjs/js/src/pr_starboard.cc
new file mode 100644
index 0000000..239153f
--- /dev/null
+++ b/src/third_party/mozjs/js/src/pr_starboard.cc
@@ -0,0 +1,281 @@
+// Copyright 2016 Google Inc. All Rights Reserved.
+//
+// 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.
+
+#include "pr_starboard.h"
+
+#include "starboard/condition_variable.h"
+#include "starboard/log.h"
+#include "starboard/memory.h"
+#include "starboard/mutex.h"
+#include "starboard/once.h"
+#include "starboard/queue.h"
+#include "starboard/thread.h"
+#include "starboard/time.h"
+#include "starboard/types.h"
+
+namespace {
+
+typedef starboard::Queue<bool> SetupSignalQueue;
+
+// Utility function to convert a PRInterval to signed 64 bit integer
+// microseconds.
+int64_t PR_IntervalToMicrosecondsInt64(PRIntervalTime ticks) {
+ uint32_t microseconds_as_uint32 = PR_IntervalToMicroseconds(ticks);
+ int64_t microseconds_as_int64 = static_cast<int64_t>(microseconds_as_uint32);
+ return microseconds_as_int64;
+}
+
+// Struct to bundle up arguments to be passed into SbThreadCreate.
+struct ThreadEntryPointWrapperContext {
+ ThreadEntryPointWrapperContext(void* pr_context,
+ PRThread* pr_thread,
+ PRThreadEntryPoint pr_entry_point,
+ SetupSignalQueue* setup_signal_queue)
+ : pr_context(pr_context),
+ pr_thread(pr_thread),
+ pr_entry_point(pr_entry_point),
+ setup_signal_queue(setup_signal_queue) {}
+ void* pr_context;
+ PRThread* pr_thread;
+ PRThreadEntryPoint pr_entry_point;
+ SetupSignalQueue* setup_signal_queue;
+};
+
+// The thread local key that corresponds to where local PRThread* data is held.
+SbThreadLocalKey g_pr_thread_local_key = kSbThreadLocalKeyInvalid;
+// The SbOnceControlStructure to to ensure that the local key is only created
+// once.
+SbOnceControl g_pr_thread_key_once_control = SB_ONCE_INITIALIZER;
+
+void PrThreadDtor(void* value) {
+ PRThread* pr_thread = reinterpret_cast<PRThread*>(value);
+ delete pr_thread;
+}
+
+void InitPrThreadKey() {
+ g_pr_thread_local_key = SbThreadCreateLocalKey(PrThreadDtor);
+}
+
+SbThreadLocalKey GetPrThreadKey() {
+ SB_CHECK(SbOnce(&g_pr_thread_key_once_control, InitPrThreadKey));
+ return g_pr_thread_local_key;
+}
+
+void* ThreadEntryPointWrapper(void* context_as_void_pointer) {
+ ThreadEntryPointWrapperContext* context =
+ reinterpret_cast<ThreadEntryPointWrapperContext*>(
+ context_as_void_pointer);
+ void* pr_context = context->pr_context;
+ PRThreadEntryPoint pr_entry_point = context->pr_entry_point;
+ PRThread* pr_thread = context->pr_thread;
+ SetupSignalQueue* setup_signal_queue = context->setup_signal_queue;
+
+ delete context;
+
+ pr_thread->sb_thread = SbThreadGetCurrent();
+ SbThreadLocalKey key = GetPrThreadKey();
+ SB_CHECK(SbThreadIsValidLocalKey(key));
+ SbThreadSetLocalValue(key, pr_thread);
+
+ setup_signal_queue->Put(true);
+ pr_entry_point(pr_context);
+
+ return NULL;
+}
+
+} // namespace
+
+PRLock* PR_NewLock() {
+ PRLock* lock = new PRLock();
+ if (!SbMutexCreate(lock)) {
+ delete lock;
+ return NULL;
+ }
+ return lock;
+}
+
+void PR_DestroyLock(PRLock* lock) {
+ SB_DCHECK(lock);
+ SbMutexDestroy(lock);
+ delete lock;
+}
+
+PRCondVar* PR_NewCondVar(PRLock* lock) {
+ SB_DCHECK(lock);
+ PRCondVar* cvar = new PRCondVar();
+ if (!SbConditionVariableCreate(&cvar->sb_condition_variable, lock)) {
+ delete cvar;
+ return NULL;
+ }
+ cvar->lock = lock;
+ return cvar;
+}
+
+void PR_DestroyCondVar(PRCondVar* cvar) {
+ SbConditionVariableDestroy(&cvar->sb_condition_variable);
+ delete cvar;
+}
+
+PRStatus PR_WaitCondVar(PRCondVar* cvar, PRIntervalTime timeout) {
+ SbConditionVariableResult result;
+ if (timeout == PR_INTERVAL_NO_WAIT) {
+ result = SbConditionVariableWaitTimed(&cvar->sb_condition_variable,
+ cvar->lock, 0);
+ } else if (timeout == PR_INTERVAL_NO_TIMEOUT) {
+ result = SbConditionVariableWait(&cvar->sb_condition_variable, cvar->lock);
+ } else {
+ int64_t microseconds = PR_IntervalToMicrosecondsInt64(timeout);
+ result = SbConditionVariableWaitTimed(&cvar->sb_condition_variable,
+ cvar->lock, microseconds);
+ }
+ return pr_starboard::ToPRStatus(result != kSbConditionVariableFailed);
+}
+
+PRThread* PR_GetCurrentThread() {
+ SbThreadLocalKey key = GetPrThreadKey();
+ SB_CHECK(SbThreadIsValidLocalKey(key));
+
+ PRThread* value = static_cast<PRThread*>(SbThreadGetLocalValue(key));
+ // We could potentially be a thread that was not created through
+ // PR_CreateThread. In this case, we must allocate a PRThread and do the
+ // setup that would normally have been done in PR_CreateThread.
+ if (!value) {
+ PRThread* pr_thread = new PRThread(SbThreadGetCurrent());
+ SbThreadSetLocalValue(key, pr_thread);
+ value = pr_thread;
+ }
+
+ return value;
+}
+
+uint32_t PR_snprintf(char* out, uint32_t outlen, const char* fmt, ...) {
+ va_list args;
+ va_start(args, fmt);
+ uint32_t ret = PR_vsnprintf(out, outlen, fmt, args);
+ va_end(args);
+ return ret;
+}
+
+PRThread* PR_CreateThread(PRThreadType type,
+ PRThreadEntryPoint start,
+ void* arg,
+ PRThreadPriority priority,
+ PRThreadScope scope,
+ PRThreadState state,
+ PRUint32 stackSize) {
+ int64_t sb_stack_size = static_cast<int64_t>(stackSize);
+
+ SbThreadPriority sb_priority;
+ switch (priority) {
+ case PR_PRIORITY_LOW:
+ sb_priority = kSbThreadPriorityLow;
+ break;
+ case PR_PRIORITY_NORMAL:
+ sb_priority = kSbThreadPriorityNormal;
+ break;
+ case PR_PRIORITY_HIGH:
+ sb_priority = kSbThreadPriorityHigh;
+ break;
+ case PR_PRIORITY_LAST:
+ sb_priority = kSbThreadPriorityHighest;
+ break;
+ default:
+ sb_priority = kSbThreadNoPriority;
+ }
+
+ SbThreadAffinity sb_affinity = kSbThreadNoAffinity;
+
+ SB_DCHECK(state == PR_JOINABLE_THREAD || state == PR_UNJOINABLE_THREAD);
+ bool sb_joinable = (state == PR_JOINABLE_THREAD);
+
+ // This heap allocated PRThread object will have a pointer to it stored in
+ // the newly created child thread's thread local storage. Once the newly
+ // created child thread finishes, it will be freed in the destructor
+ // associated with it through thread local storage.
+ PRThread* pr_thread = new PRThread(kSbThreadInvalid);
+
+ // Utility queue for the ThreadEntryWrapper to signal us once it's done
+ // running its initial setup and we can safely exit.
+ SetupSignalQueue setup_signal_queue;
+
+ // This heap allocated context object is freed after
+ // ThreadEntryPointWrapper's initial setup is complete, right before the
+ // nspr level entry point is run.
+ ThreadEntryPointWrapperContext* context = new ThreadEntryPointWrapperContext(
+ arg, pr_thread, start, &setup_signal_queue);
+
+ // Note that pr_thread->sb_thread will be set to the correct value in the
+ // setup section of ThreadEntryPointWrapper. It is done there rather than
+ // here to account for the unlikely but possible case in which we enter the
+ // newly created child thread, and then the child thread passes references
+ // to itself off into its potential children or co-threads that interact
+ // with it before we can copy what SbThreadCreate returns into
+ // pr_thread->sb_thread from this current thread.
+ SbThreadCreate(sb_stack_size, sb_priority, sb_affinity, sb_joinable, NULL,
+ ThreadEntryPointWrapper, context);
+
+ // Now we must wait for the setup section of ThreadEntryPointWrapper to run
+ // and initialize pr_thread (both the struct itself and the corresponding
+ // new thread's private data) before we can safely return. We expect to
+ // receive true rather than false by convention.
+ bool setup_signal = setup_signal_queue.Get();
+ SB_DCHECK(setup_signal);
+
+ return pr_thread;
+}
+
+PRStatus PR_CallOnceWithArg(PRCallOnceType* once,
+ PRCallOnceWithArgFN func,
+ void* arg) {
+ SB_NOTREACHED() << "Not implemented";
+ return PR_FAILURE;
+}
+
+PRStatus PR_NewThreadPrivateIndex(PRTLSIndex* newIndex,
+ PRThreadPrivateDTOR destructor) {
+ SbThreadLocalKey key = SbThreadCreateLocalKey(destructor);
+ if (!SbThreadIsValidLocalKey(key)) {
+ return pr_starboard::ToPRStatus(false);
+ }
+ *newIndex = key;
+ return pr_starboard::ToPRStatus(true);
+}
+
+PRIntervalTime PR_MillisecondsToInterval(PRUint32 milli) {
+ PRUint64 tock = static_cast<PRUint64>(milli);
+ PRUint64 msecPerSec = static_cast<PRInt64>(PR_MSEC_PER_SEC);
+ PRUint64 rounding = static_cast<PRInt64>(PR_MSEC_PER_SEC >> 1);
+ PRUint64 tps = static_cast<PRInt64>(PR_TicksPerSecond());
+
+ tock *= tps;
+ tock += rounding;
+ tock /= msecPerSec;
+
+ PRUint64 ticks = static_cast<PRUint64>(tock);
+ return ticks;
+}
+
+PRUint32 PR_IntervalToMicroseconds(PRIntervalTime ticks) {
+ PRUint64 tock = static_cast<PRInt64>(ticks);
+ PRUint64 usecPerSec = static_cast<PRInt64>(PR_USEC_PER_SEC);
+ PRUint64 tps = static_cast<PRInt64>(PR_TicksPerSecond());
+ PRUint64 rounding = static_cast<PRUint64>(tps) >> 1;
+
+ tock *= usecPerSec;
+ tock += rounding;
+ tock /= tps;
+
+ PRUint32 micro = static_cast<PRUint32>(tock);
+ return micro;
+}
diff --git a/src/third_party/mozjs/js/src/pr_starboard.h b/src/third_party/mozjs/js/src/pr_starboard.h
new file mode 100644
index 0000000..72ff257
--- /dev/null
+++ b/src/third_party/mozjs/js/src/pr_starboard.h
@@ -0,0 +1,185 @@
+// Copyright 2016 Google Inc. All Rights Reserved.
+//
+// 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.
+
+// This header defines the interface for the starboard based implementation of
+// the subset of nspr that spider monkey 24 depends on. It should directly
+// match the nspr api, with the exception that accessing thread local data
+// should use PRTLSIndex, rather than PRUintn.
+
+#ifndef PR_STARBOARD_H_
+#define PR_STARBOARD_H_
+
+#include "starboard/condition_variable.h"
+#include "starboard/log.h"
+#include "starboard/memory.h"
+#include "starboard/mutex.h"
+#include "starboard/string.h"
+#include "starboard/thread.h"
+#include "starboard/types.h"
+
+#define PR_CALLBACK
+
+#define PR_MSEC_PER_SEC 1000L
+#define PR_USEC_PER_SEC 1000000L
+#define PR_NSEC_PER_SEC 1000000000L
+#define PR_USEC_PER_MSEC 1000L
+#define PR_NSEC_PER_MSEC 1000000L
+
+typedef enum { PR_FAILURE = -1, PR_SUCCESS = 0 } PRStatus;
+
+namespace pr_starboard {
+
+// Utility function to map true to PR_SUCCESS and false to PR_FAILURE.
+static inline PRStatus ToPRStatus(bool result) {
+ return result ? PR_SUCCESS : PR_FAILURE;
+}
+
+} // namespace pr_starboard
+
+typedef enum PRThreadPriority {
+ PR_PRIORITY_FIRST = 0,
+ PR_PRIORITY_LOW = 0,
+ PR_PRIORITY_NORMAL = 1,
+ PR_PRIORITY_HIGH = 2,
+ PR_PRIORITY_URGENT = 3,
+ PR_PRIORITY_LAST = 3
+} PRThreadPriority;
+
+typedef enum PRThreadScope {
+ PR_LOCAL_THREAD,
+ PR_GLOBAL_THREAD,
+ PR_GLOBAL_BOUND_THREAD
+} PRThreadScope;
+
+typedef enum PRThreadState {
+ PR_JOINABLE_THREAD,
+ PR_UNJOINABLE_THREAD
+} PRThreadState;
+
+typedef enum PRThreadType { PR_USER_THREAD, PR_SYSTEM_THREAD } PRThreadType;
+
+typedef SbThreadLocalKey PRTLSIndex;
+typedef uint32_t PRIntervalTime;
+
+typedef int32_t PRInt32;
+typedef uint32_t PRUint32;
+
+typedef int64_t PRInt64;
+typedef uint64_t PRUint64;
+
+typedef void(PR_CALLBACK* PRThreadPrivateDTOR)(void* priv);
+
+struct PRThread {
+ PRThread(SbThread sb_thread) : sb_thread(sb_thread) {}
+ SbThread sb_thread;
+};
+
+typedef SbMutex PRLock;
+
+#define PR_INTERVAL_NO_WAIT 0UL
+#define PR_INTERVAL_NO_TIMEOUT 0xffffffffUL
+
+struct PRCondVar {
+ SbConditionVariable sb_condition_variable;
+ SbMutex* lock;
+};
+
+PRLock* PR_NewLock();
+
+static inline void PR_Lock(PRLock* lock) {
+ SbMutexAcquire(lock);
+}
+
+static inline void PR_Unlock(PRLock* lock) {
+ SbMutexRelease(lock);
+}
+
+void PR_DestroyLock(PRLock* lock);
+
+PRCondVar* PR_NewCondVar(PRLock* lock);
+
+void PR_DestroyCondVar(PRCondVar* cvar);
+
+PRStatus PR_WaitCondVar(PRCondVar* cvar, PRIntervalTime timeout);
+
+static inline PRStatus PR_NotifyCondVar(PRCondVar* cvar) {
+ return pr_starboard::ToPRStatus(
+ SbConditionVariableSignal(&cvar->sb_condition_variable));
+}
+
+static inline PRStatus PR_NotifyAllCondVar(PRCondVar* cvar) {
+ return pr_starboard::ToPRStatus(
+ SbConditionVariableBroadcast(&cvar->sb_condition_variable));
+}
+
+typedef void (*PRThreadEntryPoint)(void*);
+
+PRThread* PR_CreateThread(PRThreadType type,
+ PRThreadEntryPoint start,
+ void* arg,
+ PRThreadPriority priority,
+ PRThreadScope scope,
+ PRThreadState state,
+ PRUint32 stackSize);
+
+static inline PRStatus PR_JoinThread(PRThread* pr_thread) {
+ SB_DCHECK(pr_thread);
+ SB_DCHECK(SbThreadIsValid(pr_thread->sb_thread));
+ return pr_starboard::ToPRStatus(SbThreadJoin(pr_thread->sb_thread, NULL));
+}
+
+PRThread* PR_GetCurrentThread();
+
+void PR_DetachThread();
+
+PRStatus PR_NewThreadPrivateIndex(PRTLSIndex* newIndex,
+ PRThreadPrivateDTOR destructor);
+
+static inline PRStatus PR_SetThreadPrivate(PRTLSIndex index, void* priv) {
+ return pr_starboard::ToPRStatus(SbThreadSetLocalValue(index, priv));
+}
+
+static inline void* PR_GetThreadPrivate(PRTLSIndex index) {
+ return SbThreadGetLocalValue(index);
+}
+
+static inline void PR_SetCurrentThreadName(const char* name) {
+ SbThreadSetName(name);
+}
+
+static inline PRUint32 PR_vsnprintf(char* out,
+ PRUint32 outlen,
+ const char* fmt,
+ va_list ap) {
+ return static_cast<PRUint32>(SbStringFormat(out, outlen, fmt, ap));
+}
+
+PRUint32 PR_snprintf(char* out, PRUint32 outlen, const char* fmt, ...);
+
+PRIntervalTime PR_MillisecondsToInterval(PRUint32 milli);
+
+PRUint32 PR_IntervalToMicroseconds(PRIntervalTime ticks);
+
+struct PRCallOnceType {};
+typedef PRStatus(PR_CALLBACK* PRCallOnceWithArgFN)(void* arg);
+
+PRStatus PR_CallOnceWithArg(PRCallOnceType* once,
+ PRCallOnceWithArgFN func,
+ void* arg);
+
+static inline PRUint32 PR_TicksPerSecond() {
+ return 1000;
+}
+
+#endif // #ifndef PR_STARBOARD_H_
diff --git a/src/third_party/mozjs/js/src/shell/js.cpp b/src/third_party/mozjs/js/src/shell/js.cpp
index 4af5e8d..03d0010 100644
--- a/src/third_party/mozjs/js/src/shell/js.cpp
+++ b/src/third_party/mozjs/js/src/shell/js.cpp
@@ -92,6 +92,7 @@
#endif
#include "starboard/client_porting/wrap_main/wrap_main.h"
+#include "starboard/memory.h"
using namespace js;
using namespace js::cli;
@@ -108,6 +109,14 @@
size_t gStackChunkSize = 8192;
+#if defined(STARBOARD)
+size_t CalculateStackQuota() {
+ void* stack_high;
+ void* stack_low;
+ SbMemoryGetStackBounds(&stack_high, &stack_low);
+ return 3 * (reinterpret_cast<intptr_t>(stack_high) - reinterpret_cast<intptr_t>(stack_low)) / 4;
+}
+#else
/*
* Note: This limit should match the stack limit set by the browser in
* js/xpconnect/src/XPCJSRuntime.cpp
@@ -117,9 +126,14 @@
#else
size_t gMaxStackSize = 128 * sizeof(size_t) * 1024;
#endif
+#endif
#ifdef JS_THREADSAFE
+#if defined(STARBOARD)
+static PRTLSIndex gStackBaseThreadIndex;
+#else
static unsigned gStackBaseThreadIndex;
+#endif // defined(STARBOARD)
#else
static uintptr_t gStackBase;
#endif
@@ -5422,7 +5436,12 @@
JS_SetTrustedPrincipals(rt, &shellTrustedPrincipals);
JS_SetSecurityCallbacks(rt, &securityCallbacks);
+#if defined(STARBOARD)
+ // This sets the quota to 3/4 the stack size.
+ JS_SetNativeStackQuota(rt, CalculateStackQuota());
+#else
JS_SetNativeStackQuota(rt, gMaxStackSize);
+#endif
if (!InitWatchdog(rt))
return 1;
diff --git a/src/third_party/mozjs/js/src/vm/ForkJoin.cpp b/src/third_party/mozjs/js/src/vm/ForkJoin.cpp
index d0216e6..1f21799 100644
--- a/src/third_party/mozjs/js/src/vm/ForkJoin.cpp
+++ b/src/third_party/mozjs/js/src/vm/ForkJoin.cpp
@@ -7,8 +7,13 @@
#include "jscntxt.h"
#ifdef JS_THREADSAFE
+#if defined(STARBOARD)
+#include "pr_starboard.h"
+#else // defined(STARBOARD)
# include "prthread.h"
# include "prprf.h"
+#endif // defined(STARBOARD)
+
#endif
#include "vm/ForkJoin.h"
@@ -208,7 +213,11 @@
NumForkJoinModes
};
+#if defined(STARBOARD)
+PRTLSIndex ForkJoinSlice::ThreadPrivateIndex;
+#else // defined(STARBOARD)
unsigned ForkJoinSlice::ThreadPrivateIndex;
+#endif // defined(STARBOARD)
bool ForkJoinSlice::TLSInitialized;
class ParallelDo
diff --git a/src/third_party/mozjs/js/src/vm/ForkJoin.h b/src/third_party/mozjs/js/src/vm/ForkJoin.h
index b961548..aa86021 100644
--- a/src/third_party/mozjs/js/src/vm/ForkJoin.h
+++ b/src/third_party/mozjs/js/src/vm/ForkJoin.h
@@ -360,7 +360,11 @@
#if defined(JS_THREADSAFE) && defined(JS_ION)
// Initialized by InitializeTLS()
+#if defined(STARBOARD)
+ static PRTLSIndex ThreadPrivateIndex;
+#else // defined(STARBOARD)
static unsigned ThreadPrivateIndex;
+#endif // defined(STARBOARD)
static bool TLSInitialized;
#endif
diff --git a/src/third_party/mozjs/js/src/vm/Monitor.h b/src/third_party/mozjs/js/src/vm/Monitor.h
index 9aaa504..0da5116 100644
--- a/src/third_party/mozjs/js/src/vm/Monitor.h
+++ b/src/third_party/mozjs/js/src/vm/Monitor.h
@@ -9,6 +9,10 @@
#include "jslock.h"
+#if defined(STARBOARD) && defined(JS_THREADSAFE)
+#include "pr_starboard.h"
+#endif // defined(STARBOARD) && defined(JS_THREADSAFE)
+
namespace js {
// A base class used for types intended to be used in a parallel
diff --git a/src/third_party/mozjs/js/src/vm/ThreadPool.cpp b/src/third_party/mozjs/js/src/vm/ThreadPool.cpp
index 754ad50..af88bbc 100644
--- a/src/third_party/mozjs/js/src/vm/ThreadPool.cpp
+++ b/src/third_party/mozjs/js/src/vm/ThreadPool.cpp
@@ -11,7 +11,9 @@
#include "vm/ThreadPool.h"
#ifdef JS_THREADSAFE
+#if !defined(STARBOARD)
# include "prthread.h"
+#endif // !defined(STARBOARD)
#endif
using namespace js;
@@ -207,8 +209,10 @@
numWorkers_ = 0;
# ifdef DEBUG
+#if !defined(STARBOARD)
if (char *jsthreads = getenv("JS_THREADPOOL_SIZE"))
numWorkers_ = strtol(jsthreads, NULL, 10);
+#endif // !defined(STARBOARD)
# endif
#endif
diff --git a/src/third_party/mozjs/js/src/vm/ThreadPool.h b/src/third_party/mozjs/js/src/vm/ThreadPool.h
index 5999341..1b40ae6 100644
--- a/src/third_party/mozjs/js/src/vm/ThreadPool.h
+++ b/src/third_party/mozjs/js/src/vm/ThreadPool.h
@@ -13,9 +13,13 @@
#include "jsalloc.h"
#ifdef JS_THREADSAFE
+#if defined(STARBOARD)
+#include "pr_starboard.h"
+#else // defined(STARBOARD)
# include "prtypes.h"
# include "prlock.h"
# include "prcvar.h"
+#endif // defined(STARBOARD)
#endif
struct JSContext;
diff --git a/src/third_party/mozjs/mozjs.gyp b/src/third_party/mozjs/mozjs.gyp
index b0c4497..bede0e6 100644
--- a/src/third_party/mozjs/mozjs.gyp
+++ b/src/third_party/mozjs/mozjs.gyp
@@ -34,6 +34,10 @@
'JS_USE_CUSTOM_ALLOCATOR',
# Do not export symbols that are declare with JS_PUBLIC_[API|DATA].
'STATIC_JS_API',
+ # Option that enables support for running multiple threads of JavaScript
+ # code concurrently as long as no objects or strings are shared between
+ # them.
+ 'JS_THREADSAFE',
],
'include_dirs': [
'cobalt_config/include',
@@ -368,7 +372,7 @@
# Host tool used to generate a header file that defines a huge switch
# statement for JavaScript keywords.
'target_name': 'mozjs_keyword_header_gen',
- 'type': '<(final_executable_type)',
+ 'type': 'executable',
'toolsets': ['host'],
'sources': [
'js/src/jskwgen.cpp',
@@ -378,7 +382,7 @@
{
# Host tool used to generate a header file that defines opcode lengths.
'target_name': 'mozjs_opcode_length_header_gen',
- 'type': '<(final_executable_type)',
+ 'type': 'executable',
'toolsets': ['host'],
'sources': [
'js/src/jsoplengen.cpp',
diff --git a/src/third_party/mozjs/mozjs.gypi b/src/third_party/mozjs/mozjs.gypi
index 6b85ee0..6e45b6f 100644
--- a/src/third_party/mozjs/mozjs.gypi
+++ b/src/third_party/mozjs/mozjs.gypi
@@ -85,6 +85,7 @@
'js/src/memory_allocator_reporter.cpp',
'js/src/perf/jsperf.cpp',
'js/src/perf/pm_stub.cpp',
+ 'js/src/pr_starboard.cc',
'js/src/prmjtime.cpp',
'js/src/vm/ArgumentsObject.cpp',
'js/src/vm/CharacterEncoding.cpp',
diff --git a/src/third_party/skia/gyp/gpu.gypi b/src/third_party/skia/gyp/gpu.gypi
index ebc07b2..eaaf5d0 100644
--- a/src/third_party/skia/gyp/gpu.gypi
+++ b/src/third_party/skia/gyp/gpu.gypi
@@ -6,6 +6,10 @@
# The skia build defines these in common_variables.gypi
#
{
+ 'defines': [
+ 'COBALT_SKIA_GLYPH_ATLAS_WIDTH=<(skia_glyph_atlas_width)',
+ 'COBALT_SKIA_GLYPH_ATLAS_HEIGHT=<(skia_glyph_atlas_height)',
+ ],
'variables': {
'skgpu_sources': [
'<(skia_include_path)/gpu/GrBackendProcessorFactory.h',
diff --git a/src/third_party/skia/src/gpu/GrTextStrike.cpp b/src/third_party/skia/src/gpu/GrTextStrike.cpp
index 66aeee0..ef1bf64 100644
--- a/src/third_party/skia/src/gpu/GrTextStrike.cpp
+++ b/src/third_party/skia/src/gpu/GrTextStrike.cpp
@@ -19,8 +19,8 @@
// On Cobalt we would like to avoid re-rasterizing glyphs as much as possible,
// so increase the default atlas size.
-#define GR_ATLAS_TEXTURE_WIDTH 2048
-#define GR_ATLAS_TEXTURE_HEIGHT 2048
+#define GR_ATLAS_TEXTURE_WIDTH COBALT_SKIA_GLYPH_ATLAS_WIDTH
+#define GR_ATLAS_TEXTURE_HEIGHT COBALT_SKIA_GLYPH_ATLAS_HEIGHT
// On Cobalt, not being able to fit glyphs into the atlas is a big penalty,
// since its software rendering is not optimized. Increase the plot size